@pol-studios/db 1.0.54 → 1.0.56
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{DataLayerContext-C7cJtiO8.d.ts → DataLayerContext-BYZtDD0g.d.ts} +1 -1
- package/dist/auth/context.js +6 -4
- package/dist/auth/hooks.js +7 -5
- package/dist/auth/index.js +7 -5
- package/dist/{chunk-FIAXWEBK.js → chunk-4EO55YV2.js} +10 -7
- package/dist/chunk-4EO55YV2.js.map +1 -0
- package/dist/{chunk-DP3YEVSX.js → chunk-6SDH7M7J.js} +26 -10
- package/dist/chunk-6SDH7M7J.js.map +1 -0
- package/dist/{chunk-UJWETW36.js → chunk-AKIRHA4Q.js} +527 -418
- package/dist/chunk-AKIRHA4Q.js.map +1 -0
- package/dist/{chunk-2XS2PM62.js → chunk-DDL63KLQ.js} +388 -107
- package/dist/chunk-DDL63KLQ.js.map +1 -0
- package/dist/{chunk-YA6MUTA7.js → chunk-FI6JAD5G.js} +3 -3
- package/dist/{chunk-WQLIGVQR.js → chunk-GWYTROSD.js} +98 -1
- package/dist/chunk-GWYTROSD.js.map +1 -0
- package/dist/chunk-JOULSXOI.js +415 -0
- package/dist/chunk-JOULSXOI.js.map +1 -0
- package/dist/{chunk-OKYHI6JG.js → chunk-LF3V3ERS.js} +3 -3
- package/dist/{chunk-FMYXG4VN.js → chunk-MEBT5YHA.js} +2 -2
- package/dist/{chunk-BZSAPFFB.js → chunk-N4KK5G5T.js} +116 -18
- package/dist/chunk-N4KK5G5T.js.map +1 -0
- package/dist/chunk-QYAFI34Q.js +64 -0
- package/dist/chunk-QYAFI34Q.js.map +1 -0
- package/dist/{chunk-3Q74DK5K.js → chunk-VYFAMTHI.js} +2 -2
- package/dist/chunk-W7PERM66.js +215 -0
- package/dist/chunk-W7PERM66.js.map +1 -0
- package/dist/{chunk-ZGQ7Q4ZU.js → chunk-WM25QE7E.js} +2 -2
- package/dist/{chunk-HZIVE5AZ.js → chunk-YRIPM2AN.js} +253 -338
- package/dist/chunk-YRIPM2AN.js.map +1 -0
- package/dist/chunk-YUX6RGLZ.js +1858 -0
- package/dist/chunk-YUX6RGLZ.js.map +1 -0
- package/dist/{chunk-Z3EJX3VG.js → chunk-Z456IHCB.js} +3 -3
- package/dist/core/index.d.ts +24 -1
- package/dist/{executor-YJw4m7Q7.d.ts → executor-D15yjeMo.d.ts} +20 -0
- package/dist/hooks/index.d.ts +3 -3
- package/dist/hooks/index.js +4 -2
- package/dist/{index-jVYdTeWx.d.ts → index-CFUuTzXO.d.ts} +1 -1
- package/dist/index.d.ts +5 -5
- package/dist/index.js +16 -14
- package/dist/index.native.d.ts +62 -8
- package/dist/index.native.js +16 -14
- package/dist/index.web.d.ts +10 -9
- package/dist/index.web.js +30 -19
- package/dist/index.web.js.map +1 -1
- package/dist/mutation/index.js +3 -3
- package/dist/parser/index.js +3 -3
- package/dist/powersync-bridge/index.d.ts +1 -1
- package/dist/query/index.d.ts +4 -83
- package/dist/query/index.js +17 -7
- package/dist/realtime/index.d.ts +80 -1
- package/dist/realtime/index.js +14 -12
- package/dist/realtime/index.js.map +1 -1
- package/dist/select-parser-BAV7fOaM.d.ts +144 -0
- package/dist/types/index.d.ts +3 -3
- package/dist/types/index.js +4 -4
- package/dist/{useDbCount-DHLJzmkO.d.ts → useDbCount-Ckb-FhZk.d.ts} +1 -1
- package/dist/{useResolveFeedback-B0UcYWVI.d.ts → useResolveFeedback-CuUkdHoR.d.ts} +13 -29
- package/dist/with-auth/index.js +9 -7
- package/dist/with-auth/index.js.map +1 -1
- package/package.json +9 -4
- package/dist/chunk-2XS2PM62.js.map +0 -1
- package/dist/chunk-BZSAPFFB.js.map +0 -1
- package/dist/chunk-CTRY7JDP.js +0 -4112
- package/dist/chunk-CTRY7JDP.js.map +0 -1
- package/dist/chunk-DP3YEVSX.js.map +0 -1
- package/dist/chunk-FIAXWEBK.js.map +0 -1
- package/dist/chunk-HZIVE5AZ.js.map +0 -1
- package/dist/chunk-INEUG6MC.js +0 -521
- package/dist/chunk-INEUG6MC.js.map +0 -1
- package/dist/chunk-UJWETW36.js.map +0 -1
- package/dist/chunk-WQLIGVQR.js.map +0 -1
- /package/dist/{chunk-YA6MUTA7.js.map → chunk-FI6JAD5G.js.map} +0 -0
- /package/dist/{chunk-OKYHI6JG.js.map → chunk-LF3V3ERS.js.map} +0 -0
- /package/dist/{chunk-FMYXG4VN.js.map → chunk-MEBT5YHA.js.map} +0 -0
- /package/dist/{chunk-3Q74DK5K.js.map → chunk-VYFAMTHI.js.map} +0 -0
- /package/dist/{chunk-ZGQ7Q4ZU.js.map → chunk-WM25QE7E.js.map} +0 -0
- /package/dist/{chunk-Z3EJX3VG.js.map → chunk-Z456IHCB.js.map} +0 -0
package/dist/realtime/index.d.ts
CHANGED
|
@@ -2,7 +2,9 @@ import { RealtimePostgresChangesPayload, PostgrestSingleResponse } from '@supaba
|
|
|
2
2
|
import { ItemType } from '@pol-studios/utils';
|
|
3
3
|
import { UseQueryOptions } from '@tanstack/react-query';
|
|
4
4
|
import { U as UseDbQuerySingleReturn } from '../useDbQuery-C-TL8jY1.js';
|
|
5
|
+
import { E as ExtractedExplicitFk } from '../select-parser-BAV7fOaM.js';
|
|
5
6
|
import '@supabase-cache-helpers/postgrest-react-query';
|
|
7
|
+
import '../core/index.js';
|
|
6
8
|
|
|
7
9
|
declare function useRealtime(key: string, query: string, table: string | {
|
|
8
10
|
table: string;
|
|
@@ -41,4 +43,81 @@ type DataType = Record<string, any>;
|
|
|
41
43
|
declare function convertFilterToRealtimeQuery(filters: FilterDefinitions): string;
|
|
42
44
|
declare function useRealtimeQuery<Result extends DataType>(query: PromiseLike<PostgrestSingleResponse<Result>>, config?: Omit<UseQueryOptions<PostgrestSingleResponse<Result>>, "queryKey" | "queryFn"> & ConfigurationOptions<Result>, primaryKeys?: (keyof ItemType<Result> & string)[]): UseRealtimeQueryResult<Result>;
|
|
43
45
|
|
|
44
|
-
|
|
46
|
+
/**
|
|
47
|
+
* Optimistic Merge Utilities for Explicit FK Relations
|
|
48
|
+
*
|
|
49
|
+
* When using realtime subscriptions with explicit FK joins (e.g., Sender!senderId:core.Profile(*)),
|
|
50
|
+
* changes to related tables need to be optimistically merged into cached query data.
|
|
51
|
+
*
|
|
52
|
+
* This module provides utilities for:
|
|
53
|
+
* 1. Extracting explicit FK relation info from select strings
|
|
54
|
+
* 2. Merging changes from related tables into parent query data
|
|
55
|
+
* 3. Managing multiple subscriptions for related tables
|
|
56
|
+
*/
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* A changed record from a related table.
|
|
60
|
+
*/
|
|
61
|
+
interface ChangedRecord {
|
|
62
|
+
/** The record ID */
|
|
63
|
+
id: string;
|
|
64
|
+
/** All record fields */
|
|
65
|
+
[key: string]: unknown;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Merge updated related records into parent query data.
|
|
69
|
+
*
|
|
70
|
+
* When a record in a related table changes, this function updates all references
|
|
71
|
+
* to that record within the parent data's nested relations.
|
|
72
|
+
*
|
|
73
|
+
* @param parentData - The current cached query data (array of parent records)
|
|
74
|
+
* @param relation - The explicit FK relation info (alias, sourceField, etc.)
|
|
75
|
+
* @param changedRecords - The updated records from the related table
|
|
76
|
+
* @returns New array with merged updates (immutable - does not modify input)
|
|
77
|
+
*
|
|
78
|
+
* @example
|
|
79
|
+
* // Parent data has: [{ id: "1", senderId: "user-1", Sender: { id: "user-1", name: "Alice" } }]
|
|
80
|
+
* // User "user-1" changed their name to "Bob"
|
|
81
|
+
* const updated = mergeRelatedUpdate(
|
|
82
|
+
* parentData,
|
|
83
|
+
* { alias: "Sender", sourceField: "senderId", targetTable: "User", targetColumn: "id" },
|
|
84
|
+
* [{ id: "user-1", name: "Bob" }]
|
|
85
|
+
* );
|
|
86
|
+
* // Result: [{ id: "1", senderId: "user-1", Sender: { id: "user-1", name: "Bob" } }]
|
|
87
|
+
*/
|
|
88
|
+
declare function mergeRelatedUpdate<T extends Record<string, unknown>>(parentData: T[], relation: ExtractedExplicitFk, changedRecords: ChangedRecord[]): T[];
|
|
89
|
+
/**
|
|
90
|
+
* Merge a single changed record into parent query data.
|
|
91
|
+
*
|
|
92
|
+
* Convenience wrapper around mergeRelatedUpdate for single record changes.
|
|
93
|
+
*
|
|
94
|
+
* @param parentData - The current cached query data
|
|
95
|
+
* @param relation - The explicit FK relation info
|
|
96
|
+
* @param changedRecord - The updated record from the related table
|
|
97
|
+
* @returns New array with merged update
|
|
98
|
+
*/
|
|
99
|
+
declare function mergeSingleRelatedUpdate<T extends Record<string, unknown>>(parentData: T[], relation: ExtractedExplicitFk, changedRecord: ChangedRecord): T[];
|
|
100
|
+
/**
|
|
101
|
+
* Check if any parent records reference a given related record ID.
|
|
102
|
+
*
|
|
103
|
+
* Useful for determining whether a change to a related record is relevant
|
|
104
|
+
* to the current query data.
|
|
105
|
+
*
|
|
106
|
+
* @param parentData - The current cached query data
|
|
107
|
+
* @param relation - The explicit FK relation info
|
|
108
|
+
* @param relatedId - The ID of the related record that changed
|
|
109
|
+
* @returns true if any parent references this related record
|
|
110
|
+
*/
|
|
111
|
+
declare function parentReferencesRelated<T extends Record<string, unknown>>(parentData: T[], relation: ExtractedExplicitFk, relatedId: string): boolean;
|
|
112
|
+
/**
|
|
113
|
+
* Extract all related IDs from parent data for a given relation.
|
|
114
|
+
*
|
|
115
|
+
* Useful for filtering realtime subscriptions to only watch relevant records.
|
|
116
|
+
*
|
|
117
|
+
* @param parentData - The current cached query data
|
|
118
|
+
* @param relation - The explicit FK relation info
|
|
119
|
+
* @returns Set of related record IDs referenced by the parent data
|
|
120
|
+
*/
|
|
121
|
+
declare function extractRelatedIds<T extends Record<string, unknown>>(parentData: T[], relation: ExtractedExplicitFk): Set<string>;
|
|
122
|
+
|
|
123
|
+
export { type ChangedRecord, type UseRealtimeQueryResult, convertFilterToRealtimeQuery, extractRelatedIds, mergeRelatedUpdate, mergeSingleRelatedUpdate, parentReferencesRelated, useRealtimeQuery as useDbRealtimeQuery, useRealtime, useRealtimeQuery };
|
package/dist/realtime/index.js
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
|
+
import {
|
|
2
|
+
extractRelatedIds,
|
|
3
|
+
mergeRelatedUpdate,
|
|
4
|
+
mergeSingleRelatedUpdate,
|
|
5
|
+
parentReferencesRelated
|
|
6
|
+
} from "../chunk-QYAFI34Q.js";
|
|
1
7
|
import {
|
|
2
8
|
PostgrestParser
|
|
3
|
-
} from "../chunk-
|
|
9
|
+
} from "../chunk-JOULSXOI.js";
|
|
4
10
|
import "../chunk-J4ZVCXZ4.js";
|
|
5
11
|
import {
|
|
6
12
|
buildNormalizedQuery,
|
|
@@ -10,8 +16,8 @@ import {
|
|
|
10
16
|
useQueriesForTableLoader,
|
|
11
17
|
useQuery,
|
|
12
18
|
useUpsertItem
|
|
13
|
-
} from "../chunk-
|
|
14
|
-
import "../chunk-
|
|
19
|
+
} from "../chunk-YUX6RGLZ.js";
|
|
20
|
+
import "../chunk-AKIRHA4Q.js";
|
|
15
21
|
import {
|
|
16
22
|
UserSessionId,
|
|
17
23
|
useSupabase
|
|
@@ -106,7 +112,7 @@ function useRealtime(key, query, table, primaryKeys, options) {
|
|
|
106
112
|
query
|
|
107
113
|
});
|
|
108
114
|
if (payload.eventType !== REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.DELETE && selectQuery) {
|
|
109
|
-
if (selectQuery.groupedUserQueryPaths
|
|
115
|
+
if (selectQuery.groupedUserQueryPaths?.every((x) => x.path in data) === false) {
|
|
110
116
|
const qb = supabase.schema(payload.schema).from(payload.table).select(selectQuery.selectQuery);
|
|
111
117
|
for (const pk of primaryKeys) {
|
|
112
118
|
qb.eq(pk.toString(), data[pk]);
|
|
@@ -135,14 +141,6 @@ function useRealtime(key, query, table, primaryKeys, options) {
|
|
|
135
141
|
if (onChange) {
|
|
136
142
|
onChange(payload);
|
|
137
143
|
}
|
|
138
|
-
}).on("postgres_changes", {
|
|
139
|
-
event: "DELETE",
|
|
140
|
-
schema: schemaValue,
|
|
141
|
-
table: tableNameValue
|
|
142
|
-
}, async (payload_0) => {
|
|
143
|
-
if (payload_0.eventType === REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.DELETE) {
|
|
144
|
-
await deleteItem(payload_0.old);
|
|
145
|
-
}
|
|
146
144
|
}).subscribe((status) => {
|
|
147
145
|
setRealtimeState(status);
|
|
148
146
|
if (status === "SUBSCRIBED") {
|
|
@@ -367,6 +365,10 @@ function useRealtimeQuery(query, config, t0) {
|
|
|
367
365
|
}
|
|
368
366
|
export {
|
|
369
367
|
convertFilterToRealtimeQuery,
|
|
368
|
+
extractRelatedIds,
|
|
369
|
+
mergeRelatedUpdate,
|
|
370
|
+
mergeSingleRelatedUpdate,
|
|
371
|
+
parentReferencesRelated,
|
|
370
372
|
useRealtimeQuery as useDbRealtimeQuery,
|
|
371
373
|
useRealtime,
|
|
372
374
|
useRealtimeQuery
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/realtime/useRealtime.ts","../../src/realtime/useRealtimeQuery.ts"],"sourcesContent":["import { c as _c } from \"react/compiler-runtime\";\nimport { useDeleteItem, useQueriesForTableLoader, useUpsertItem } from \"@supabase-cache-helpers/postgrest-react-query\";\nimport { useEffect, useState, useRef } from \"react\";\nimport useSupabase, { UserSessionId } from \"../useSupabase\";\nimport { newUuid } from \"@pol-studios/utils\";\nimport { buildNormalizedQuery, normalizeResponse } from \"@supabase-cache-helpers/postgrest-core\";\nimport { REALTIME_POSTGRES_CHANGES_LISTEN_EVENT, type RealtimePostgresChangesPayload } from \"@supabase/supabase-js\";\nimport { useDelayedValue } from \"@pol-studios/hooks/state\";\nexport default function useRealtime(key, query, table, primaryKeys, options) {\n const $ = _c(37);\n const supabase = useSupabase();\n const tableNameValue = typeof table === \"string\" ? table : table.table;\n const schemaValue = typeof table === \"string\" ? \"public\" : table.schema;\n const queriesForTable = useQueriesForTableLoader(tableNameValue);\n let t0;\n if ($[0] !== primaryKeys || $[1] !== schemaValue || $[2] !== tableNameValue) {\n t0 = {\n primaryKeys,\n table: tableNameValue,\n schema: schemaValue\n };\n $[0] = primaryKeys;\n $[1] = schemaValue;\n $[2] = tableNameValue;\n $[3] = t0;\n } else {\n t0 = $[3];\n }\n const deleteItem = useDeleteItem(t0);\n let t1;\n if ($[4] !== primaryKeys || $[5] !== schemaValue || $[6] !== tableNameValue) {\n t1 = {\n primaryKeys,\n table: tableNameValue,\n schema: schemaValue\n };\n $[4] = primaryKeys;\n $[5] = schemaValue;\n $[6] = tableNameValue;\n $[7] = t1;\n } else {\n t1 = $[7];\n }\n const upsertItem = useUpsertItem(t1);\n const [realtimeState, setRealtimeState] = useState(\"CLOSED\");\n const [retryTick, setRetryTick] = useState(0);\n const channelRef = useRef(null);\n const lastRetryTimeRef = useRef(0);\n const retryCountRef = useRef(0);\n const enabled = options?.enabled ?? true;\n const filter = options?.filter;\n const onChange = options?.onChange;\n const debouncedKey = useDelayedValue(key, 50);\n let t2;\n if ($[8] !== deleteItem || $[9] !== enabled || $[10] !== filter || $[11] !== onChange || $[12] !== primaryKeys || $[13] !== queriesForTable || $[14] !== query || $[15] !== retryTick || $[16] !== schemaValue || $[17] !== supabase || $[18] !== tableNameValue || $[19] !== upsertItem) {\n t2 = () => {\n if (!enabled) {\n if (channelRef.current) {\n channelRef.current.unsubscribe();\n supabase.removeChannel(channelRef.current);\n channelRef.current = null;\n }\n setRealtimeState(\"CLOSED\");\n return;\n }\n const now = Date.now();\n const timeSinceLastRetry = now - lastRetryTimeRef.current;\n if (timeSinceLastRetry < 2000 && retryTick > 0) {\n return;\n }\n if (channelRef.current) {\n channelRef.current.unsubscribe();\n supabase.removeChannel(channelRef.current);\n channelRef.current = null;\n }\n lastRetryTimeRef.current = now;\n retryCountRef.current = retryCountRef.current + 1;\n const channel = supabase.channel(newUuid()).on(\"postgres_changes\", {\n event: \"*\",\n schema: schemaValue,\n table: tableNameValue,\n filter\n }, async payload => {\n let data = payload.new ?? payload.old;\n if (payload.new && Object.keys(payload.new).length > 0) {\n const selectQuery = buildNormalizedQuery({\n queriesForTable,\n query\n });\n if (payload.eventType !== REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.DELETE && selectQuery) {\n if (selectQuery.groupedUserQueryPaths.every(x => x.path in data) === false) {\n const qb = supabase.schema(payload.schema as any).from(payload.table as any).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);\n }\n }\n }\n if (\"changedBySessionId\" in data) {\n const sessionId = data.changedBySessionId;\n if (sessionId !== UserSessionId) {\n await upsertItem(data);\n }\n } else {\n await upsertItem(data);\n }\n }\n if (payload.eventType === REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.DELETE) {\n await deleteItem(payload.old);\n }\n if (payload.errors?.length > 0) {\n setRealtimeState(\"CHANNEL_ERROR\");\n }\n if (onChange) {\n onChange(payload);\n }\n }).on(\"postgres_changes\", {\n event: \"DELETE\",\n schema: schemaValue,\n table: tableNameValue\n }, async payload_0 => {\n if (payload_0.eventType === REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.DELETE) {\n await deleteItem(payload_0.old);\n }\n }).subscribe(status => {\n setRealtimeState(status);\n if (status === \"SUBSCRIBED\") {\n retryCountRef.current = 0;\n }\n });\n channelRef.current = channel;\n return () => {\n if (channelRef.current) {\n channelRef.current.unsubscribe();\n supabase.removeChannel(channelRef.current);\n channelRef.current = null;\n }\n };\n };\n $[8] = deleteItem;\n $[9] = enabled;\n $[10] = filter;\n $[11] = onChange;\n $[12] = primaryKeys;\n $[13] = queriesForTable;\n $[14] = query;\n $[15] = retryTick;\n $[16] = schemaValue;\n $[17] = supabase;\n $[18] = tableNameValue;\n $[19] = upsertItem;\n $[20] = t2;\n } else {\n t2 = $[20];\n }\n let t3;\n if ($[21] !== primaryKeys) {\n t3 = primaryKeys.join(\",\");\n $[21] = primaryKeys;\n $[22] = t3;\n } else {\n t3 = $[22];\n }\n let t4;\n if ($[23] !== debouncedKey || $[24] !== enabled || $[25] !== filter || $[26] !== query || $[27] !== retryTick || $[28] !== schemaValue || $[29] !== supabase || $[30] !== t3 || $[31] !== tableNameValue) {\n t4 = [supabase, tableNameValue, schemaValue, enabled, filter, query, t3, retryTick, debouncedKey];\n $[23] = debouncedKey;\n $[24] = enabled;\n $[25] = filter;\n $[26] = query;\n $[27] = retryTick;\n $[28] = schemaValue;\n $[29] = supabase;\n $[30] = t3;\n $[31] = tableNameValue;\n $[32] = t4;\n } else {\n t4 = $[32];\n }\n useEffect(t2, t4);\n let t5;\n let t6;\n if ($[33] !== enabled || $[34] !== realtimeState) {\n t5 = () => {\n if (!enabled || realtimeState === \"SUBSCRIBED\") {\n retryCountRef.current = 0;\n return;\n }\n const delay = Math.min(5000 * Math.pow(2, retryCountRef.current), 60000);\n const id = setTimeout(() => {\n setRetryTick(_temp);\n }, delay);\n return () => clearTimeout(id);\n };\n t6 = [realtimeState, enabled];\n $[33] = enabled;\n $[34] = realtimeState;\n $[35] = t5;\n $[36] = t6;\n } else {\n t5 = $[35];\n t6 = $[36];\n }\n useEffect(t5, t6);\n return realtimeState;\n}\nfunction _temp(t) {\n return t + 1;\n}","import { c as _c } from \"react/compiler-runtime\";\nimport { PostgrestSingleResponse } from \"@supabase/supabase-js\";\nimport { useMemo } from \"react\";\nimport { ItemType } from \"@pol-studios/utils\";\nimport { encode, useQuery } from \"@supabase-cache-helpers/postgrest-react-query\";\nimport { UseQueryOptions } from \"@tanstack/react-query\";\nimport useRealtime from \"./useRealtime\";\nimport { isNullOrWhitespace } from \"@pol-studios/utils\";\nimport { UseDbQuerySingleReturn } from \"../useDbQuery\";\nimport { PostgrestParser } from \"../parser/PostgrestParser\";\ntype ConfigurationOptions<T> = {\n crossOrganization?: boolean;\n};\ntype FilterOperator = \"or\" | \"eq\" | \"neq\" | \"gt\" | \"gte\" | \"lt\" | \"lte\" | \"like\" | \"ilike\" | \"is\" | \"in\" | \"cs\" | \"cd\" | \"fts\" | \"plfts\";\ntype ValueType = number | string | boolean | null | Date | object;\ntype FilterDefinition = {\n path: string;\n alias?: string;\n operator: FilterOperator;\n negate: boolean;\n value: ValueType;\n};\ntype FilterDefinitions = (FilterComposite | FilterDefinition)[];\ntype FilterComposite = {\n or?: FilterDefinitions;\n and?: FilterDefinitions;\n};\nexport type UseRealtimeQueryResult<T> = UseDbQuerySingleReturn<T> & {\n realtimeStatus: \"SUBSCRIBED\" | \"TIMED_OUT\" | \"CLOSED\" | \"CHANNEL_ERROR\" | \"Loading...\";\n isRealtimeConnected: boolean;\n isRealtimeLoading: boolean;\n};\ntype DataType = Record<string, any>;\nexport function convertFilterToRealtimeQuery(filters: FilterDefinitions): string {\n function convert(filter: FilterComposite | FilterDefinition): string {\n //TODO: I just added this line to make it work\n if (!filter) return \"\";\n if (\"path\" in filter) {\n if (filter.path.includes(\".\")) return \"\";\n let valueString = filter.value?.toString() ?? \"null\";\n if (filter.operator === \"in\") {\n valueString = '(\"' + valueString.slice(2, valueString.length - 2).split(\",\").join('\",\"') + '\")';\n }\n return `${filter.path}=${filter.negate ? \"not.\" : \"\"}${filter.operator}.${valueString}`;\n } else {\n if (filter.or) {\n return `(${filter.or.map(f => convert(f)).join(\"|\")})`;\n } else if (filter.and) {\n return `(${filter.and.map(f => convert(f)).join(\"&\")})`;\n }\n }\n return \"\";\n }\n\n //todo: review later when multiple filters are available\n return convert(filters[0]);\n}\nexport function useRealtimeQuery(query, config, t0) {\n const $ = _c(27);\n let t1;\n if ($[0] !== t0) {\n t1 = t0 === undefined ? [\"id\" as any] : t0;\n $[0] = t0;\n $[1] = t1;\n } else {\n t1 = $[1];\n }\n const primaryKeys = t1;\n const t2 = query as any;\n let t3;\n if ($[2] !== t2) {\n t3 = new PostgrestParser(t2);\n $[2] = t2;\n $[3] = t3;\n } else {\n t3 = $[3];\n }\n const parser = t3;\n const request = useQuery(query, config as any);\n let filter;\n let selectStatement;\n let t4;\n let t5;\n if ($[4] !== parser.filters || $[5] !== parser.select || $[6] !== query || $[7] !== request.data) {\n const queryKey = encode(query, false);\n let t6;\n if ($[12] !== parser.filters || $[13] !== request.data) {\n const filterString = convertFilterToRealtimeQuery(parser.filters);\n filter = request.data && typeof request.data === \"object\" && \"id\" in request.data ? \"id=eq.\" + request.data.id : filterString;\n if (filter.includes(\"in.(\\\\\\\"\\\\\\\")\")) {\n filter = undefined;\n }\n t6 = isNullOrWhitespace(filter);\n $[12] = parser.filters;\n $[13] = request.data;\n $[14] = filter;\n $[15] = t6;\n } else {\n filter = $[14];\n t6 = $[15];\n }\n if (t6) {\n filter = undefined;\n }\n selectStatement = parser.select;\n t4 = useRealtime;\n t5 = queryKey.join(\"-\");\n $[4] = parser.filters;\n $[5] = parser.select;\n $[6] = query;\n $[7] = request.data;\n $[8] = filter;\n $[9] = selectStatement;\n $[10] = t4;\n $[11] = t5;\n } else {\n filter = $[8];\n selectStatement = $[9];\n t4 = $[10];\n t5 = $[11];\n }\n let t6;\n if ($[16] !== parser.schema || $[17] !== parser.table) {\n t6 = {\n schema: parser.schema,\n table: parser.table\n };\n $[16] = parser.schema;\n $[17] = parser.table;\n $[18] = t6;\n } else {\n t6 = $[18];\n }\n const t7 = typeof config?.enabled === \"boolean\" ? config.enabled : true;\n let t8;\n if ($[19] !== filter || $[20] !== t7) {\n t8 = {\n filter,\n enabled: t7\n };\n $[19] = filter;\n $[20] = t7;\n $[21] = t8;\n } else {\n t8 = $[21];\n }\n const realtimeStatus = t4(t5, selectStatement, t6, primaryKeys, t8);\n const outputRealtimeStatus = request.isFetching ? \"Loading...\" : realtimeStatus;\n const t9 = request.data as Result | null | undefined;\n const t10 = realtimeStatus == \"SUBSCRIBED\";\n let t11;\n if ($[22] !== outputRealtimeStatus || $[23] !== request || $[24] !== t10 || $[25] !== t9) {\n t11 = {\n ...request,\n data: t9,\n realtimeStatus: outputRealtimeStatus,\n isRealtimeConnected: t10,\n isRealtimeLoading: request.isFetching\n };\n $[22] = outputRealtimeStatus;\n $[23] = request;\n $[24] = t10;\n $[25] = t9;\n $[26] = t11;\n } else {\n t11 = $[26];\n }\n return t11 as UseRealtimeQueryResult<Result>;\n}"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,SAAS,KAAK,UAAU;AAExB,SAAS,WAAW,UAAU,cAAc;AAE5C,SAAS,eAAe;AAExB,SAAS,8CAAmF;AAC5F,SAAS,uBAAuB;AACjB,SAAR,YAA6B,KAAK,OAAO,OAAO,aAAa,SAAS;AAC3E,QAAM,IAAI,GAAG,EAAE;AACf,QAAM,WAAW,YAAY;AAC7B,QAAM,iBAAiB,OAAO,UAAU,WAAW,QAAQ,MAAM;AACjE,QAAM,cAAc,OAAO,UAAU,WAAW,WAAW,MAAM;AACjE,QAAM,kBAAkB,yBAAyB,cAAc;AAC/D,MAAI;AACJ,MAAI,EAAE,CAAC,MAAM,eAAe,EAAE,CAAC,MAAM,eAAe,EAAE,CAAC,MAAM,gBAAgB;AAC3E,SAAK;AAAA,MACH;AAAA,MACA,OAAO;AAAA,MACP,QAAQ;AAAA,IACV;AACA,MAAE,CAAC,IAAI;AACP,MAAE,CAAC,IAAI;AACP,MAAE,CAAC,IAAI;AACP,MAAE,CAAC,IAAI;AAAA,EACT,OAAO;AACL,SAAK,EAAE,CAAC;AAAA,EACV;AACA,QAAM,aAAa,cAAc,EAAE;AACnC,MAAI;AACJ,MAAI,EAAE,CAAC,MAAM,eAAe,EAAE,CAAC,MAAM,eAAe,EAAE,CAAC,MAAM,gBAAgB;AAC3E,SAAK;AAAA,MACH;AAAA,MACA,OAAO;AAAA,MACP,QAAQ;AAAA,IACV;AACA,MAAE,CAAC,IAAI;AACP,MAAE,CAAC,IAAI;AACP,MAAE,CAAC,IAAI;AACP,MAAE,CAAC,IAAI;AAAA,EACT,OAAO;AACL,SAAK,EAAE,CAAC;AAAA,EACV;AACA,QAAM,aAAa,cAAc,EAAE;AACnC,QAAM,CAAC,eAAe,gBAAgB,IAAI,SAAS,QAAQ;AAC3D,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,CAAC;AAC5C,QAAM,aAAa,OAAO,IAAI;AAC9B,QAAM,mBAAmB,OAAO,CAAC;AACjC,QAAM,gBAAgB,OAAO,CAAC;AAC9B,QAAM,UAAU,SAAS,WAAW;AACpC,QAAM,SAAS,SAAS;AACxB,QAAM,WAAW,SAAS;AAC1B,QAAM,eAAe,gBAAgB,KAAK,EAAE;AAC5C,MAAI;AACJ,MAAI,EAAE,CAAC,MAAM,cAAc,EAAE,CAAC,MAAM,WAAW,EAAE,EAAE,MAAM,UAAU,EAAE,EAAE,MAAM,YAAY,EAAE,EAAE,MAAM,eAAe,EAAE,EAAE,MAAM,mBAAmB,EAAE,EAAE,MAAM,SAAS,EAAE,EAAE,MAAM,aAAa,EAAE,EAAE,MAAM,eAAe,EAAE,EAAE,MAAM,YAAY,EAAE,EAAE,MAAM,kBAAkB,EAAE,EAAE,MAAM,YAAY;AACxR,SAAK,MAAM;AACT,UAAI,CAAC,SAAS;AACZ,YAAI,WAAW,SAAS;AACtB,qBAAW,QAAQ,YAAY;AAC/B,mBAAS,cAAc,WAAW,OAAO;AACzC,qBAAW,UAAU;AAAA,QACvB;AACA,yBAAiB,QAAQ;AACzB;AAAA,MACF;AACA,YAAM,MAAM,KAAK,IAAI;AACrB,YAAM,qBAAqB,MAAM,iBAAiB;AAClD,UAAI,qBAAqB,OAAQ,YAAY,GAAG;AAC9C;AAAA,MACF;AACA,UAAI,WAAW,SAAS;AACtB,mBAAW,QAAQ,YAAY;AAC/B,iBAAS,cAAc,WAAW,OAAO;AACzC,mBAAW,UAAU;AAAA,MACvB;AACA,uBAAiB,UAAU;AAC3B,oBAAc,UAAU,cAAc,UAAU;AAChD,YAAM,UAAU,SAAS,QAAQ,QAAQ,CAAC,EAAE,GAAG,oBAAoB;AAAA,QACjE,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,OAAO;AAAA,QACP;AAAA,MACF,GAAG,OAAM,YAAW;AAClB,YAAI,OAAO,QAAQ,OAAO,QAAQ;AAClC,YAAI,QAAQ,OAAO,OAAO,KAAK,QAAQ,GAAG,EAAE,SAAS,GAAG;AACtD,gBAAM,cAAc,qBAAqB;AAAA,YACvC;AAAA,YACA;AAAA,UACF,CAAC;AACD,cAAI,QAAQ,cAAc,uCAAuC,UAAU,aAAa;AACtF,gBAAI,YAAY,sBAAsB,MAAM,OAAK,EAAE,QAAQ,IAAI,MAAM,OAAO;AAC1E,oBAAM,KAAK,SAAS,OAAO,QAAQ,MAAa,EAAE,KAAK,QAAQ,KAAY,EAAE,OAAO,YAAY,WAAW;AAC3G,yBAAW,MAAM,aAAa;AAC5B,mBAAG,GAAG,GAAG,SAAS,GAAG,KAAK,EAAE,CAAC;AAAA,cAC/B;AACA,oBAAM,MAAM,MAAM,GAAG,OAAO;AAC5B,kBAAI,IAAI,MAAM;AACZ,uBAAO,kBAAkB,YAAY,cAAc,IAAI,IAAI;AAAA,cAC7D;AAAA,YACF;AAAA,UACF;AACA,cAAI,wBAAwB,MAAM;AAChC,kBAAM,YAAY,KAAK;AACvB,gBAAI,cAAc,eAAe;AAC/B,oBAAM,WAAW,IAAI;AAAA,YACvB;AAAA,UACF,OAAO;AACL,kBAAM,WAAW,IAAI;AAAA,UACvB;AAAA,QACF;AACA,YAAI,QAAQ,cAAc,uCAAuC,QAAQ;AACvE,gBAAM,WAAW,QAAQ,GAAG;AAAA,QAC9B;AACA,YAAI,QAAQ,QAAQ,SAAS,GAAG;AAC9B,2BAAiB,eAAe;AAAA,QAClC;AACA,YAAI,UAAU;AACZ,mBAAS,OAAO;AAAA,QAClB;AAAA,MACF,CAAC,EAAE,GAAG,oBAAoB;AAAA,QACxB,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,OAAO;AAAA,MACT,GAAG,OAAM,cAAa;AACpB,YAAI,UAAU,cAAc,uCAAuC,QAAQ;AACzE,gBAAM,WAAW,UAAU,GAAG;AAAA,QAChC;AAAA,MACF,CAAC,EAAE,UAAU,YAAU;AACrB,yBAAiB,MAAM;AACvB,YAAI,WAAW,cAAc;AAC3B,wBAAc,UAAU;AAAA,QAC1B;AAAA,MACF,CAAC;AACD,iBAAW,UAAU;AACrB,aAAO,MAAM;AACX,YAAI,WAAW,SAAS;AACtB,qBAAW,QAAQ,YAAY;AAC/B,mBAAS,cAAc,WAAW,OAAO;AACzC,qBAAW,UAAU;AAAA,QACvB;AAAA,MACF;AAAA,IACF;AACA,MAAE,CAAC,IAAI;AACP,MAAE,CAAC,IAAI;AACP,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AAAA,EACV,OAAO;AACL,SAAK,EAAE,EAAE;AAAA,EACX;AACA,MAAI;AACJ,MAAI,EAAE,EAAE,MAAM,aAAa;AACzB,SAAK,YAAY,KAAK,GAAG;AACzB,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AAAA,EACV,OAAO;AACL,SAAK,EAAE,EAAE;AAAA,EACX;AACA,MAAI;AACJ,MAAI,EAAE,EAAE,MAAM,gBAAgB,EAAE,EAAE,MAAM,WAAW,EAAE,EAAE,MAAM,UAAU,EAAE,EAAE,MAAM,SAAS,EAAE,EAAE,MAAM,aAAa,EAAE,EAAE,MAAM,eAAe,EAAE,EAAE,MAAM,YAAY,EAAE,EAAE,MAAM,MAAM,EAAE,EAAE,MAAM,gBAAgB;AACxM,SAAK,CAAC,UAAU,gBAAgB,aAAa,SAAS,QAAQ,OAAO,IAAI,WAAW,YAAY;AAChG,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AAAA,EACV,OAAO;AACL,SAAK,EAAE,EAAE;AAAA,EACX;AACA,YAAU,IAAI,EAAE;AAChB,MAAI;AACJ,MAAI;AACJ,MAAI,EAAE,EAAE,MAAM,WAAW,EAAE,EAAE,MAAM,eAAe;AAChD,SAAK,MAAM;AACT,UAAI,CAAC,WAAW,kBAAkB,cAAc;AAC9C,sBAAc,UAAU;AACxB;AAAA,MACF;AACA,YAAM,QAAQ,KAAK,IAAI,MAAO,KAAK,IAAI,GAAG,cAAc,OAAO,GAAG,GAAK;AACvE,YAAM,KAAK,WAAW,MAAM;AAC1B,qBAAa,KAAK;AAAA,MACpB,GAAG,KAAK;AACR,aAAO,MAAM,aAAa,EAAE;AAAA,IAC9B;AACA,SAAK,CAAC,eAAe,OAAO;AAC5B,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AAAA,EACV,OAAO;AACL,SAAK,EAAE,EAAE;AACT,SAAK,EAAE,EAAE;AAAA,EACX;AACA,YAAU,IAAI,EAAE;AAChB,SAAO;AACT;AACA,SAAS,MAAM,GAAG;AAChB,SAAO,IAAI;AACb;;;ACnNA,SAAS,KAAKA,WAAU;AAOxB,SAAS,0BAA0B;AA0B5B,SAAS,6BAA6B,SAAoC;AAC/E,WAAS,QAAQ,QAAoD;AAEnE,QAAI,CAAC,OAAQ,QAAO;AACpB,QAAI,UAAU,QAAQ;AACpB,UAAI,OAAO,KAAK,SAAS,GAAG,EAAG,QAAO;AACtC,UAAI,cAAc,OAAO,OAAO,SAAS,KAAK;AAC9C,UAAI,OAAO,aAAa,MAAM;AAC5B,sBAAc,OAAO,YAAY,MAAM,GAAG,YAAY,SAAS,CAAC,EAAE,MAAM,GAAG,EAAE,KAAK,KAAK,IAAI;AAAA,MAC7F;AACA,aAAO,GAAG,OAAO,IAAI,IAAI,OAAO,SAAS,SAAS,EAAE,GAAG,OAAO,QAAQ,IAAI,WAAW;AAAA,IACvF,OAAO;AACL,UAAI,OAAO,IAAI;AACb,eAAO,IAAI,OAAO,GAAG,IAAI,OAAK,QAAQ,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC;AAAA,MACrD,WAAW,OAAO,KAAK;AACrB,eAAO,IAAI,OAAO,IAAI,IAAI,OAAK,QAAQ,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC;AAAA,MACtD;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAGA,SAAO,QAAQ,QAAQ,CAAC,CAAC;AAC3B;AACO,SAAS,iBAAiB,OAAO,QAAQ,IAAI;AAClD,QAAM,IAAIC,IAAG,EAAE;AACf,MAAI;AACJ,MAAI,EAAE,CAAC,MAAM,IAAI;AACf,SAAK,OAAO,SAAY,CAAC,IAAW,IAAI;AACxC,MAAE,CAAC,IAAI;AACP,MAAE,CAAC,IAAI;AAAA,EACT,OAAO;AACL,SAAK,EAAE,CAAC;AAAA,EACV;AACA,QAAM,cAAc;AACpB,QAAM,KAAK;AACX,MAAI;AACJ,MAAI,EAAE,CAAC,MAAM,IAAI;AACf,SAAK,IAAI,gBAAgB,EAAE;AAC3B,MAAE,CAAC,IAAI;AACP,MAAE,CAAC,IAAI;AAAA,EACT,OAAO;AACL,SAAK,EAAE,CAAC;AAAA,EACV;AACA,QAAM,SAAS;AACf,QAAM,UAAU,SAAS,OAAO,MAAa;AAC7C,MAAI;AACJ,MAAI;AACJ,MAAI;AACJ,MAAI;AACJ,MAAI,EAAE,CAAC,MAAM,OAAO,WAAW,EAAE,CAAC,MAAM,OAAO,UAAU,EAAE,CAAC,MAAM,SAAS,EAAE,CAAC,MAAM,QAAQ,MAAM;AAChG,UAAM,WAAW,OAAO,OAAO,KAAK;AACpC,QAAIC;AACJ,QAAI,EAAE,EAAE,MAAM,OAAO,WAAW,EAAE,EAAE,MAAM,QAAQ,MAAM;AACtD,YAAM,eAAe,6BAA6B,OAAO,OAAO;AAChE,eAAS,QAAQ,QAAQ,OAAO,QAAQ,SAAS,YAAY,QAAQ,QAAQ,OAAO,WAAW,QAAQ,KAAK,KAAK;AACjH,UAAI,OAAO,SAAS,aAAe,GAAG;AACpC,iBAAS;AAAA,MACX;AACA,MAAAA,MAAK,mBAAmB,MAAM;AAC9B,QAAE,EAAE,IAAI,OAAO;AACf,QAAE,EAAE,IAAI,QAAQ;AAChB,QAAE,EAAE,IAAI;AACR,QAAE,EAAE,IAAIA;AAAA,IACV,OAAO;AACL,eAAS,EAAE,EAAE;AACb,MAAAA,MAAK,EAAE,EAAE;AAAA,IACX;AACA,QAAIA,KAAI;AACN,eAAS;AAAA,IACX;AACA,sBAAkB,OAAO;AACzB,SAAK;AACL,SAAK,SAAS,KAAK,GAAG;AACtB,MAAE,CAAC,IAAI,OAAO;AACd,MAAE,CAAC,IAAI,OAAO;AACd,MAAE,CAAC,IAAI;AACP,MAAE,CAAC,IAAI,QAAQ;AACf,MAAE,CAAC,IAAI;AACP,MAAE,CAAC,IAAI;AACP,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AAAA,EACV,OAAO;AACL,aAAS,EAAE,CAAC;AACZ,sBAAkB,EAAE,CAAC;AACrB,SAAK,EAAE,EAAE;AACT,SAAK,EAAE,EAAE;AAAA,EACX;AACA,MAAI;AACJ,MAAI,EAAE,EAAE,MAAM,OAAO,UAAU,EAAE,EAAE,MAAM,OAAO,OAAO;AACrD,SAAK;AAAA,MACH,QAAQ,OAAO;AAAA,MACf,OAAO,OAAO;AAAA,IAChB;AACA,MAAE,EAAE,IAAI,OAAO;AACf,MAAE,EAAE,IAAI,OAAO;AACf,MAAE,EAAE,IAAI;AAAA,EACV,OAAO;AACL,SAAK,EAAE,EAAE;AAAA,EACX;AACA,QAAM,KAAK,OAAO,QAAQ,YAAY,YAAY,OAAO,UAAU;AACnE,MAAI;AACJ,MAAI,EAAE,EAAE,MAAM,UAAU,EAAE,EAAE,MAAM,IAAI;AACpC,SAAK;AAAA,MACH;AAAA,MACA,SAAS;AAAA,IACX;AACA,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AAAA,EACV,OAAO;AACL,SAAK,EAAE,EAAE;AAAA,EACX;AACA,QAAM,iBAAiB,GAAG,IAAI,iBAAiB,IAAI,aAAa,EAAE;AAClE,QAAM,uBAAuB,QAAQ,aAAa,eAAe;AACjE,QAAM,KAAK,QAAQ;AACnB,QAAM,MAAM,kBAAkB;AAC9B,MAAI;AACJ,MAAI,EAAE,EAAE,MAAM,wBAAwB,EAAE,EAAE,MAAM,WAAW,EAAE,EAAE,MAAM,OAAO,EAAE,EAAE,MAAM,IAAI;AACxF,UAAM;AAAA,MACJ,GAAG;AAAA,MACH,MAAM;AAAA,MACN,gBAAgB;AAAA,MAChB,qBAAqB;AAAA,MACrB,mBAAmB,QAAQ;AAAA,IAC7B;AACA,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AAAA,EACV,OAAO;AACL,UAAM,EAAE,EAAE;AAAA,EACZ;AACA,SAAO;AACT;","names":["_c","_c","t6"]}
|
|
1
|
+
{"version":3,"sources":["../../src/realtime/useRealtime.ts","../../src/realtime/useRealtimeQuery.ts"],"sourcesContent":["import { c as _c } from \"react/compiler-runtime\";\nimport { useDeleteItem, useQueriesForTableLoader, useUpsertItem } from \"@supabase-cache-helpers/postgrest-react-query\";\nimport { useEffect, useState, useRef } from \"react\";\nimport useSupabase, { UserSessionId } from \"../useSupabase\";\nimport { newUuid } from \"@pol-studios/utils\";\nimport { buildNormalizedQuery, normalizeResponse } from \"@supabase-cache-helpers/postgrest-core\";\nimport { REALTIME_POSTGRES_CHANGES_LISTEN_EVENT, type RealtimePostgresChangesPayload } from \"@supabase/supabase-js\";\nimport { useDelayedValue } from \"@pol-studios/hooks/state\";\nexport default function useRealtime(key, query, table, primaryKeys, options) {\n const $ = _c(37);\n const supabase = useSupabase();\n const tableNameValue = typeof table === \"string\" ? table : table.table;\n const schemaValue = typeof table === \"string\" ? \"public\" : table.schema;\n const queriesForTable = useQueriesForTableLoader(tableNameValue);\n let t0;\n if ($[0] !== primaryKeys || $[1] !== schemaValue || $[2] !== tableNameValue) {\n t0 = {\n primaryKeys,\n table: tableNameValue,\n schema: schemaValue\n };\n $[0] = primaryKeys;\n $[1] = schemaValue;\n $[2] = tableNameValue;\n $[3] = t0;\n } else {\n t0 = $[3];\n }\n const deleteItem = useDeleteItem(t0);\n let t1;\n if ($[4] !== primaryKeys || $[5] !== schemaValue || $[6] !== tableNameValue) {\n t1 = {\n primaryKeys,\n table: tableNameValue,\n schema: schemaValue\n };\n $[4] = primaryKeys;\n $[5] = schemaValue;\n $[6] = tableNameValue;\n $[7] = t1;\n } else {\n t1 = $[7];\n }\n const upsertItem = useUpsertItem(t1);\n const [realtimeState, setRealtimeState] = useState(\"CLOSED\");\n const [retryTick, setRetryTick] = useState(0);\n const channelRef = useRef(null);\n const lastRetryTimeRef = useRef(0);\n const retryCountRef = useRef(0);\n const enabled = options?.enabled ?? true;\n const filter = options?.filter;\n const onChange = options?.onChange;\n const debouncedKey = useDelayedValue(key, 50);\n let t2;\n if ($[8] !== deleteItem || $[9] !== enabled || $[10] !== filter || $[11] !== onChange || $[12] !== primaryKeys || $[13] !== queriesForTable || $[14] !== query || $[15] !== retryTick || $[16] !== schemaValue || $[17] !== supabase || $[18] !== tableNameValue || $[19] !== upsertItem) {\n t2 = () => {\n if (!enabled) {\n if (channelRef.current) {\n channelRef.current.unsubscribe();\n supabase.removeChannel(channelRef.current);\n channelRef.current = null;\n }\n setRealtimeState(\"CLOSED\");\n return;\n }\n const now = Date.now();\n const timeSinceLastRetry = now - lastRetryTimeRef.current;\n if (timeSinceLastRetry < 2000 && retryTick > 0) {\n return;\n }\n if (channelRef.current) {\n channelRef.current.unsubscribe();\n supabase.removeChannel(channelRef.current);\n channelRef.current = null;\n }\n lastRetryTimeRef.current = now;\n retryCountRef.current = retryCountRef.current + 1;\n const channel = supabase.channel(newUuid()).on(\"postgres_changes\", {\n event: \"*\",\n schema: schemaValue,\n table: tableNameValue,\n filter\n }, async payload => {\n let data = payload.new ?? payload.old;\n if (payload.new && Object.keys(payload.new).length > 0) {\n const selectQuery = buildNormalizedQuery({\n queriesForTable,\n query\n });\n if (payload.eventType !== REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.DELETE && selectQuery) {\n if (selectQuery.groupedUserQueryPaths?.every(x => x.path in data) === false) {\n const qb = supabase.schema(payload.schema as any).from(payload.table as any).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);\n }\n }\n }\n if (\"changedBySessionId\" in data) {\n const sessionId = data.changedBySessionId;\n if (sessionId !== UserSessionId) {\n await upsertItem(data);\n }\n } else {\n await upsertItem(data);\n }\n }\n if (payload.eventType === REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.DELETE) {\n await deleteItem(payload.old);\n }\n if (payload.errors?.length > 0) {\n setRealtimeState(\"CHANNEL_ERROR\");\n }\n if (onChange) {\n onChange(payload);\n }\n }).subscribe(status => {\n setRealtimeState(status);\n if (status === \"SUBSCRIBED\") {\n retryCountRef.current = 0;\n }\n });\n channelRef.current = channel;\n return () => {\n if (channelRef.current) {\n channelRef.current.unsubscribe();\n supabase.removeChannel(channelRef.current);\n channelRef.current = null;\n }\n };\n };\n $[8] = deleteItem;\n $[9] = enabled;\n $[10] = filter;\n $[11] = onChange;\n $[12] = primaryKeys;\n $[13] = queriesForTable;\n $[14] = query;\n $[15] = retryTick;\n $[16] = schemaValue;\n $[17] = supabase;\n $[18] = tableNameValue;\n $[19] = upsertItem;\n $[20] = t2;\n } else {\n t2 = $[20];\n }\n let t3;\n if ($[21] !== primaryKeys) {\n t3 = primaryKeys.join(\",\");\n $[21] = primaryKeys;\n $[22] = t3;\n } else {\n t3 = $[22];\n }\n let t4;\n if ($[23] !== debouncedKey || $[24] !== enabled || $[25] !== filter || $[26] !== query || $[27] !== retryTick || $[28] !== schemaValue || $[29] !== supabase || $[30] !== t3 || $[31] !== tableNameValue) {\n t4 = [supabase, tableNameValue, schemaValue, enabled, filter, query, t3, retryTick, debouncedKey];\n $[23] = debouncedKey;\n $[24] = enabled;\n $[25] = filter;\n $[26] = query;\n $[27] = retryTick;\n $[28] = schemaValue;\n $[29] = supabase;\n $[30] = t3;\n $[31] = tableNameValue;\n $[32] = t4;\n } else {\n t4 = $[32];\n }\n useEffect(t2, t4);\n let t5;\n let t6;\n if ($[33] !== enabled || $[34] !== realtimeState) {\n t5 = () => {\n if (!enabled || realtimeState === \"SUBSCRIBED\") {\n retryCountRef.current = 0;\n return;\n }\n const delay = Math.min(5000 * Math.pow(2, retryCountRef.current), 60000);\n const id = setTimeout(() => {\n setRetryTick(_temp);\n }, delay);\n return () => clearTimeout(id);\n };\n t6 = [realtimeState, enabled];\n $[33] = enabled;\n $[34] = realtimeState;\n $[35] = t5;\n $[36] = t6;\n } else {\n t5 = $[35];\n t6 = $[36];\n }\n useEffect(t5, t6);\n return realtimeState;\n}\nfunction _temp(t) {\n return t + 1;\n}","import { c as _c } from \"react/compiler-runtime\";\nimport { PostgrestSingleResponse } from \"@supabase/supabase-js\";\nimport { useMemo } from \"react\";\nimport { ItemType } from \"@pol-studios/utils\";\nimport { encode, useQuery } from \"@supabase-cache-helpers/postgrest-react-query\";\nimport { UseQueryOptions } from \"@tanstack/react-query\";\nimport useRealtime from \"./useRealtime\";\nimport { isNullOrWhitespace } from \"@pol-studios/utils\";\nimport { UseDbQuerySingleReturn } from \"../useDbQuery\";\nimport { PostgrestParser } from \"../parser/PostgrestParser\";\ntype ConfigurationOptions<T> = {\n crossOrganization?: boolean;\n};\ntype FilterOperator = \"or\" | \"eq\" | \"neq\" | \"gt\" | \"gte\" | \"lt\" | \"lte\" | \"like\" | \"ilike\" | \"is\" | \"in\" | \"cs\" | \"cd\" | \"fts\" | \"plfts\";\ntype ValueType = number | string | boolean | null | Date | object;\ntype FilterDefinition = {\n path: string;\n alias?: string;\n operator: FilterOperator;\n negate: boolean;\n value: ValueType;\n};\ntype FilterDefinitions = (FilterComposite | FilterDefinition)[];\ntype FilterComposite = {\n or?: FilterDefinitions;\n and?: FilterDefinitions;\n};\nexport type UseRealtimeQueryResult<T> = UseDbQuerySingleReturn<T> & {\n realtimeStatus: \"SUBSCRIBED\" | \"TIMED_OUT\" | \"CLOSED\" | \"CHANNEL_ERROR\" | \"Loading...\";\n isRealtimeConnected: boolean;\n isRealtimeLoading: boolean;\n};\ntype DataType = Record<string, any>;\nexport function convertFilterToRealtimeQuery(filters: FilterDefinitions): string {\n function convert(filter: FilterComposite | FilterDefinition): string {\n //TODO: I just added this line to make it work\n if (!filter) return \"\";\n if (\"path\" in filter) {\n if (filter.path.includes(\".\")) return \"\";\n let valueString = filter.value?.toString() ?? \"null\";\n if (filter.operator === \"in\") {\n valueString = '(\"' + valueString.slice(2, valueString.length - 2).split(\",\").join('\",\"') + '\")';\n }\n return `${filter.path}=${filter.negate ? \"not.\" : \"\"}${filter.operator}.${valueString}`;\n } else {\n if (filter.or) {\n return `(${filter.or.map(f => convert(f)).join(\"|\")})`;\n } else if (filter.and) {\n return `(${filter.and.map(f => convert(f)).join(\"&\")})`;\n }\n }\n return \"\";\n }\n\n //todo: review later when multiple filters are available\n return convert(filters[0]);\n}\nexport function useRealtimeQuery(query, config, t0) {\n const $ = _c(27);\n let t1;\n if ($[0] !== t0) {\n t1 = t0 === undefined ? [\"id\" as any] : t0;\n $[0] = t0;\n $[1] = t1;\n } else {\n t1 = $[1];\n }\n const primaryKeys = t1;\n const t2 = query as any;\n let t3;\n if ($[2] !== t2) {\n t3 = new PostgrestParser(t2);\n $[2] = t2;\n $[3] = t3;\n } else {\n t3 = $[3];\n }\n const parser = t3;\n const request = useQuery(query, config as any);\n let filter;\n let selectStatement;\n let t4;\n let t5;\n if ($[4] !== parser.filters || $[5] !== parser.select || $[6] !== query || $[7] !== request.data) {\n const queryKey = encode(query, false);\n let t6;\n if ($[12] !== parser.filters || $[13] !== request.data) {\n const filterString = convertFilterToRealtimeQuery(parser.filters);\n filter = request.data && typeof request.data === \"object\" && \"id\" in request.data ? \"id=eq.\" + request.data.id : filterString;\n if (filter.includes(\"in.(\\\\\\\"\\\\\\\")\")) {\n filter = undefined;\n }\n t6 = isNullOrWhitespace(filter);\n $[12] = parser.filters;\n $[13] = request.data;\n $[14] = filter;\n $[15] = t6;\n } else {\n filter = $[14];\n t6 = $[15];\n }\n if (t6) {\n filter = undefined;\n }\n selectStatement = parser.select;\n t4 = useRealtime;\n t5 = queryKey.join(\"-\");\n $[4] = parser.filters;\n $[5] = parser.select;\n $[6] = query;\n $[7] = request.data;\n $[8] = filter;\n $[9] = selectStatement;\n $[10] = t4;\n $[11] = t5;\n } else {\n filter = $[8];\n selectStatement = $[9];\n t4 = $[10];\n t5 = $[11];\n }\n let t6;\n if ($[16] !== parser.schema || $[17] !== parser.table) {\n t6 = {\n schema: parser.schema,\n table: parser.table\n };\n $[16] = parser.schema;\n $[17] = parser.table;\n $[18] = t6;\n } else {\n t6 = $[18];\n }\n const t7 = typeof config?.enabled === \"boolean\" ? config.enabled : true;\n let t8;\n if ($[19] !== filter || $[20] !== t7) {\n t8 = {\n filter,\n enabled: t7\n };\n $[19] = filter;\n $[20] = t7;\n $[21] = t8;\n } else {\n t8 = $[21];\n }\n const realtimeStatus = t4(t5, selectStatement, t6, primaryKeys, t8);\n const outputRealtimeStatus = request.isFetching ? \"Loading...\" : realtimeStatus;\n const t9 = request.data as Result | null | undefined;\n const t10 = realtimeStatus == \"SUBSCRIBED\";\n let t11;\n if ($[22] !== outputRealtimeStatus || $[23] !== request || $[24] !== t10 || $[25] !== t9) {\n t11 = {\n ...request,\n data: t9,\n realtimeStatus: outputRealtimeStatus,\n isRealtimeConnected: t10,\n isRealtimeLoading: request.isFetching\n };\n $[22] = outputRealtimeStatus;\n $[23] = request;\n $[24] = t10;\n $[25] = t9;\n $[26] = t11;\n } else {\n t11 = $[26];\n }\n return t11 as UseRealtimeQueryResult<Result>;\n}"],"mappings":"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","names":["_c","_c","t6"]}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import { ParsedSelect, SelectRelation } from './core/index.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Select String Parser
|
|
5
|
+
*
|
|
6
|
+
* Parses Supabase PostgREST select syntax into an AST for local SQLite processing.
|
|
7
|
+
*
|
|
8
|
+
* Supported Syntax:
|
|
9
|
+
* - "*" -> All columns
|
|
10
|
+
* - "id, name, status" -> Specific columns
|
|
11
|
+
* - "*, RelatedTable(*)" -> All columns + relation
|
|
12
|
+
* - "id, RelatedTable(id, name)" -> Specific + relation with specific columns
|
|
13
|
+
* - "*, Parent(*, Grandparent(name))" -> Nested relations
|
|
14
|
+
* - "*, items:RelatedTable(*)" -> Aliased relation
|
|
15
|
+
* - "aliasName:columnName" -> Aliased column
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Tokenize a string at the top level, respecting parentheses nesting.
|
|
20
|
+
* Splits by comma but keeps nested parentheses intact.
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* tokenizeTopLevel("id, name, Parent(*, Child(name))")
|
|
24
|
+
* // Returns: ["id", "name", "Parent(*, Child(name))"]
|
|
25
|
+
*/
|
|
26
|
+
declare function tokenizeTopLevel(input: string): string[];
|
|
27
|
+
/**
|
|
28
|
+
* Parse a Supabase PostgREST select string into an AST.
|
|
29
|
+
*
|
|
30
|
+
* @param select - The select string (e.g., "*, RelatedTable(*)")
|
|
31
|
+
* @returns Parsed select AST
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* parseSelect("*")
|
|
35
|
+
* // Returns: { columns: "*", relations: [] }
|
|
36
|
+
*
|
|
37
|
+
* parseSelect("id, name, status")
|
|
38
|
+
* // Returns: {
|
|
39
|
+
* // columns: [{ name: "id" }, { name: "name" }, { name: "status" }],
|
|
40
|
+
* // relations: []
|
|
41
|
+
* // }
|
|
42
|
+
*
|
|
43
|
+
* parseSelect("*, EquipmentFixture(*)")
|
|
44
|
+
* // Returns: {
|
|
45
|
+
* // columns: "*",
|
|
46
|
+
* // relations: [{ name: "EquipmentFixture", columns: "*", relations: [] }]
|
|
47
|
+
* // }
|
|
48
|
+
*
|
|
49
|
+
* parseSelect("id, name, ProjectDatabase(name, Organization(*))")
|
|
50
|
+
* // Returns: {
|
|
51
|
+
* // columns: [{ name: "id" }, { name: "name" }],
|
|
52
|
+
* // relations: [{
|
|
53
|
+
* // name: "ProjectDatabase",
|
|
54
|
+
* // columns: [{ name: "name" }],
|
|
55
|
+
* // relations: [{ name: "Organization", columns: "*", relations: [] }]
|
|
56
|
+
* // }]
|
|
57
|
+
* // }
|
|
58
|
+
*/
|
|
59
|
+
declare function parseSelect(select: string): ParsedSelect;
|
|
60
|
+
/**
|
|
61
|
+
* Convert a parsed select back to a string representation (for debugging)
|
|
62
|
+
*/
|
|
63
|
+
declare function stringifySelect(parsed: ParsedSelect): string;
|
|
64
|
+
/**
|
|
65
|
+
* Extract all column names from a parsed select (for building SQL queries)
|
|
66
|
+
* Does not include relation names.
|
|
67
|
+
*/
|
|
68
|
+
declare function extractColumnNames(parsed: ParsedSelect): string[] | "*";
|
|
69
|
+
/**
|
|
70
|
+
* Extract all relation names from a parsed select
|
|
71
|
+
*/
|
|
72
|
+
declare function extractRelationNames(parsed: ParsedSelect): string[];
|
|
73
|
+
/**
|
|
74
|
+
* Check if a select string references a specific relation
|
|
75
|
+
*/
|
|
76
|
+
declare function hasRelation(parsed: ParsedSelect, relationName: string): boolean;
|
|
77
|
+
/**
|
|
78
|
+
* Get the select configuration for a specific relation
|
|
79
|
+
*/
|
|
80
|
+
declare function getRelationSelect(parsed: ParsedSelect, relationName: string): SelectRelation | undefined;
|
|
81
|
+
/**
|
|
82
|
+
* Check if a parsed select contains any explicit FK relations.
|
|
83
|
+
* This is used to determine if QueryExecutor should be used instead of PostgREST.
|
|
84
|
+
*
|
|
85
|
+
* @param parsed - The parsed select statement
|
|
86
|
+
* @returns true if any relation uses explicit FK syntax
|
|
87
|
+
*/
|
|
88
|
+
declare function hasExplicitFk(parsed: ParsedSelect): boolean;
|
|
89
|
+
/**
|
|
90
|
+
* Check if a select string contains explicit FK syntax.
|
|
91
|
+
* Quick check without full parsing for performance.
|
|
92
|
+
*
|
|
93
|
+
* @param select - The select string
|
|
94
|
+
* @returns true if the string contains explicit FK syntax (! followed by field:table)
|
|
95
|
+
*/
|
|
96
|
+
declare function selectHasExplicitFkSyntax(select: string): boolean;
|
|
97
|
+
/**
|
|
98
|
+
* Information about an explicit FK relation extracted from a select string.
|
|
99
|
+
* Used for setting up realtime subscriptions on related tables.
|
|
100
|
+
*/
|
|
101
|
+
interface ExtractedExplicitFk {
|
|
102
|
+
/** The alias used for this relation in the select string (e.g., "Sender") */
|
|
103
|
+
alias: string;
|
|
104
|
+
/** The FK column on the parent table (e.g., "senderId") */
|
|
105
|
+
sourceField: string;
|
|
106
|
+
/** The target table, optionally schema-qualified (e.g., "core.Profile") */
|
|
107
|
+
targetTable: string;
|
|
108
|
+
/** Column to match in target table, defaults to "id" */
|
|
109
|
+
targetColumn: string;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Extract all explicit FK relations from a parsed select statement.
|
|
113
|
+
* Recursively traverses the relation tree to find all explicit FK specs.
|
|
114
|
+
*
|
|
115
|
+
* @param parsed - The parsed select statement
|
|
116
|
+
* @returns Array of extracted explicit FK relations
|
|
117
|
+
*
|
|
118
|
+
* @example
|
|
119
|
+
* const parsed = parseSelect("*, Sender!senderId:core.Profile(*), Recipient!recipientId:core.Profile(*)");
|
|
120
|
+
* const explicitFks = extractExplicitFkRelations(parsed);
|
|
121
|
+
* // Returns:
|
|
122
|
+
* // [
|
|
123
|
+
* // { alias: "Sender", sourceField: "senderId", targetTable: "core.Profile", targetColumn: "id" },
|
|
124
|
+
* // { alias: "Recipient", sourceField: "recipientId", targetTable: "core.Profile", targetColumn: "id" }
|
|
125
|
+
* // ]
|
|
126
|
+
*/
|
|
127
|
+
declare function extractExplicitFkRelations(parsed: ParsedSelect): ExtractedExplicitFk[];
|
|
128
|
+
/**
|
|
129
|
+
* Extract all unique target table names from explicit FK relations in a select string.
|
|
130
|
+
* This is useful for setting up realtime watchers on related tables.
|
|
131
|
+
*
|
|
132
|
+
* @param select - The select string (e.g., "*, Sender!senderId:core.Profile(*)")
|
|
133
|
+
* @returns Array of unique target table names
|
|
134
|
+
*
|
|
135
|
+
* @example
|
|
136
|
+
* extractExplicitFkTables("*, Sender!senderId:core.Profile(*), Recipient!recipientId:core.Profile(*)")
|
|
137
|
+
* // Returns: ["core.Profile"]
|
|
138
|
+
*
|
|
139
|
+
* extractExplicitFkTables("*, Author!authorId:User(*), Editor!editorId:Admin(*)")
|
|
140
|
+
* // Returns: ["User", "Admin"]
|
|
141
|
+
*/
|
|
142
|
+
declare function extractExplicitFkTables(select: string): string[];
|
|
143
|
+
|
|
144
|
+
export { type ExtractedExplicitFk as E, extractRelationNames as a, hasExplicitFk as b, selectHasExplicitFkSyntax as c, extractExplicitFkRelations as d, extractColumnNames as e, extractExplicitFkTables as f, getRelationSelect as g, hasRelation as h, parseSelect as p, stringifySelect as s, tokenizeTopLevel as t };
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
export { a as FilterConfig, F as FilterConfigOption, G as Group, P as PropertyType, S as SortConfig, T as TableInfo, V as ValueForPropertyType, b as WhereClause, W as WhereFilter } from '../FilterConfig-Bt2Ek74z.js';
|
|
2
|
-
export { r as BackendSelectionResult, B as BooleanOperator, l as ClarificationQuestion, k as ClarificationSuggestion, C as CombinedProviderStatus, j as ComputedSortConfig, n as DataLayerWithPowerSyncProps, D as DbChangeLog, E as EnhancedSyncControl, a as EnhancedSyncStatus, e as Filter, d as FilterConditionType, m as FilterContextType, f as FilterGroup, g as FilterInput, F as FilterOperator, h as FilterState, H as HasPowerSyncConfig, O as OrderColumn, i as Pagination, P as PowerSyncEnabledConfig, b as PowerSyncEnabledContextValue, q as PowerSyncTables, Q as QueryState, S as Sort, U as UseDataLayerWithPowerSync, p as UseSyncControlWithPowerSync, o as UseSyncStatusWithPowerSync, V as ValueOrArrayForPropertyType, c as createCombinedStatus } from '../index-
|
|
2
|
+
export { r as BackendSelectionResult, B as BooleanOperator, l as ClarificationQuestion, k as ClarificationSuggestion, C as CombinedProviderStatus, j as ComputedSortConfig, n as DataLayerWithPowerSyncProps, D as DbChangeLog, E as EnhancedSyncControl, a as EnhancedSyncStatus, e as Filter, d as FilterConditionType, m as FilterContextType, f as FilterGroup, g as FilterInput, F as FilterOperator, h as FilterState, H as HasPowerSyncConfig, O as OrderColumn, i as Pagination, P as PowerSyncEnabledConfig, b as PowerSyncEnabledContextValue, q as PowerSyncTables, Q as QueryState, S as Sort, U as UseDataLayerWithPowerSync, p as UseSyncControlWithPowerSync, o as UseSyncStatusWithPowerSync, V as ValueOrArrayForPropertyType, c as createCombinedStatus } from '../index-CFUuTzXO.js';
|
|
3
3
|
export { D as Database } from '../database.types-ChFCG-4M.js';
|
|
4
4
|
import 'moment';
|
|
5
5
|
import '@supabase/supabase-js';
|
|
6
6
|
import 'react';
|
|
7
7
|
import '@tanstack/react-query';
|
|
8
8
|
import '../core/index.js';
|
|
9
|
-
import '../DataLayerContext-
|
|
10
|
-
import '../executor-
|
|
9
|
+
import '../DataLayerContext-BYZtDD0g.js';
|
|
10
|
+
import '../executor-D15yjeMo.js';
|
package/dist/types/index.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createCombinedStatus
|
|
3
|
-
} from "../chunk-
|
|
3
|
+
} from "../chunk-Z456IHCB.js";
|
|
4
4
|
import "../chunk-GC3TBUWE.js";
|
|
5
|
-
import "../chunk-
|
|
5
|
+
import "../chunk-JOULSXOI.js";
|
|
6
6
|
import "../chunk-J4ZVCXZ4.js";
|
|
7
|
-
import "../chunk-
|
|
8
|
-
import "../chunk-
|
|
7
|
+
import "../chunk-YUX6RGLZ.js";
|
|
8
|
+
import "../chunk-AKIRHA4Q.js";
|
|
9
9
|
import "../chunk-DMVUEJG2.js";
|
|
10
10
|
import "../chunk-7D4SUZUM.js";
|
|
11
11
|
export {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { r as DataLayerContextValue, s as DataLayerCoreContextValue, t as DataLayerStatusContextValue } from './DataLayerContext-
|
|
1
|
+
import { r as DataLayerContextValue, s as DataLayerCoreContextValue, t as DataLayerStatusContextValue } from './DataLayerContext-BYZtDD0g.js';
|
|
2
2
|
import { Dispatch, SetStateAction } from 'react';
|
|
3
3
|
import { QueryOptions, WhereClause } from './core/index.js';
|
|
4
4
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as _tanstack_react_query from '@tanstack/react-query';
|
|
2
2
|
import { UseMutationResult, UseMutationOptions, UseQueryOptions } from '@tanstack/react-query';
|
|
3
3
|
import { SupabaseClient, PostgrestSingleResponse as PostgrestSingleResponse$1, PostgrestError } from '@supabase/supabase-js';
|
|
4
|
-
import { T as TableDataAdapter, C as CapableDataAdapter, c as AdapterCapabilities, A as AdapterQueryResult } from './DataLayerContext-
|
|
4
|
+
import { T as TableDataAdapter, C as CapableDataAdapter, c as AdapterCapabilities, A as AdapterQueryResult } from './DataLayerContext-BYZtDD0g.js';
|
|
5
5
|
import { DatabaseSchema, QueryOptions } from './core/index.js';
|
|
6
6
|
import { FunctionsResponse } from '@supabase/functions-js';
|
|
7
7
|
import * as _supabase_postgrest_js from '@supabase/postgrest-js';
|
|
@@ -9,9 +9,9 @@ import { PostgrestSingleResponse } from '@supabase/postgrest-js';
|
|
|
9
9
|
import { G as GetResult } from './select-query-parser-BwyHum1L.js';
|
|
10
10
|
import { G as GenericTable } from './types-CYr9JiUE.js';
|
|
11
11
|
import { D as Database } from './useSupabase-DSZNeXnF.js';
|
|
12
|
-
import { D as DbChangeLog, Q as QueryState } from './index-
|
|
12
|
+
import { D as DbChangeLog, Q as QueryState } from './index-CFUuTzXO.js';
|
|
13
13
|
import { U as UseDbQuerySingleReturn } from './useDbQuery-C-TL8jY1.js';
|
|
14
|
-
import { J as UseDbUpsertResult } from './useDbCount-
|
|
14
|
+
import { J as UseDbUpsertResult } from './useDbCount-Ckb-FhZk.js';
|
|
15
15
|
import { Moment } from 'moment';
|
|
16
16
|
import * as react from 'react';
|
|
17
17
|
import { ReactNode } from 'react';
|
|
@@ -44,6 +44,9 @@ declare function useMutationSuccessRN<TData, TError, TVariables>(mutation: UseMu
|
|
|
44
44
|
*
|
|
45
45
|
* Implements the TableDataAdapter interface for direct Supabase/PostgREST queries.
|
|
46
46
|
* This adapter is used for online-only data access without local caching.
|
|
47
|
+
*
|
|
48
|
+
* Supports explicit FK syntax (e.g., `Sender!senderId:core.Profile(*)`) by routing
|
|
49
|
+
* those queries through SupabaseQueryExecutor for client-side join merging.
|
|
47
50
|
*/
|
|
48
51
|
|
|
49
52
|
/**
|
|
@@ -73,15 +76,16 @@ declare class SupabaseAdapter implements TableDataAdapter, CapableDataAdapter {
|
|
|
73
76
|
private schema;
|
|
74
77
|
readonly name = "supabase";
|
|
75
78
|
readonly capabilities: AdapterCapabilities;
|
|
79
|
+
/**
|
|
80
|
+
* Query executor for handling explicit FK syntax.
|
|
81
|
+
* Lazily initialized when needed.
|
|
82
|
+
*/
|
|
83
|
+
private queryExecutor;
|
|
76
84
|
constructor(supabase: SupabaseClient, schema: DatabaseSchema);
|
|
77
85
|
/**
|
|
78
|
-
*
|
|
79
|
-
* Handles schema-qualified names like "core.Profile" -> { schema: "core", tableName: "Profile" }
|
|
80
|
-
*
|
|
81
|
-
* @param table - The table name, optionally schema-qualified (e.g., "users" or "core.Profile")
|
|
82
|
-
* @returns Object with schema (defaults to "public") and tableName
|
|
86
|
+
* Get or create the SupabaseQueryExecutor for explicit FK queries.
|
|
83
87
|
*/
|
|
84
|
-
private
|
|
88
|
+
private getQueryExecutor;
|
|
85
89
|
/**
|
|
86
90
|
* Check if a where clause contains invalid UUID values (empty strings for id fields).
|
|
87
91
|
* Returns true if any id field has an empty string value.
|
|
@@ -150,26 +154,6 @@ declare class SupabaseAdapter implements TableDataAdapter, CapableDataAdapter {
|
|
|
150
154
|
* @returns Unsubscribe function
|
|
151
155
|
*/
|
|
152
156
|
subscribe<T>(table: string, options: QueryOptions, callback: (data: T[]) => void): () => void;
|
|
153
|
-
/**
|
|
154
|
-
* Apply where clause filters to a Supabase query
|
|
155
|
-
*
|
|
156
|
-
* Converts WhereClause to Supabase filter methods:
|
|
157
|
-
* - Direct value: .eq(field, value)
|
|
158
|
-
* - { in: [...] }: .in(field, values)
|
|
159
|
-
* - { gt: n }: .gt(field, n)
|
|
160
|
-
* - { gte: n }: .gte(field, n)
|
|
161
|
-
* - { lt: n }: .lt(field, n)
|
|
162
|
-
* - { lte: n }: .lte(field, n)
|
|
163
|
-
* - { like: s }: .ilike(field, s)
|
|
164
|
-
* - { is: null }: .is(field, null)
|
|
165
|
-
* - { neq: v }: .neq(field, v) or .not(field, "is", null)
|
|
166
|
-
* - { notIn: [...] }: .not().in(field, values)
|
|
167
|
-
*
|
|
168
|
-
* @param query - The Supabase query builder
|
|
169
|
-
* @param where - The where clause to apply
|
|
170
|
-
* @returns The query with filters applied
|
|
171
|
-
*/
|
|
172
|
-
private applyWhereClause;
|
|
173
157
|
}
|
|
174
158
|
/**
|
|
175
159
|
* Create a new SupabaseAdapter instance
|
package/dist/with-auth/index.js
CHANGED
|
@@ -5,27 +5,29 @@ import {
|
|
|
5
5
|
useUserMetadataState,
|
|
6
6
|
useUserMetadataValue,
|
|
7
7
|
userMetadataContext
|
|
8
|
-
} from "../chunk-
|
|
8
|
+
} from "../chunk-4EO55YV2.js";
|
|
9
9
|
import {
|
|
10
10
|
useDbUpsert
|
|
11
|
-
} from "../chunk-
|
|
11
|
+
} from "../chunk-VYFAMTHI.js";
|
|
12
12
|
import "../chunk-SM73S2DY.js";
|
|
13
13
|
import "../chunk-NSIAAYW3.js";
|
|
14
14
|
import {
|
|
15
15
|
useAuth,
|
|
16
16
|
useSetupAuth
|
|
17
|
-
} from "../chunk-
|
|
17
|
+
} from "../chunk-MEBT5YHA.js";
|
|
18
18
|
import {
|
|
19
19
|
useDbQuery
|
|
20
|
-
} from "../chunk-
|
|
21
|
-
import "../chunk-
|
|
20
|
+
} from "../chunk-6SDH7M7J.js";
|
|
21
|
+
import "../chunk-GWYTROSD.js";
|
|
22
22
|
import "../chunk-RT4O5H2E.js";
|
|
23
23
|
import {
|
|
24
24
|
getSupabaseUrl
|
|
25
25
|
} from "../chunk-GC3TBUWE.js";
|
|
26
|
+
import "../chunk-W7PERM66.js";
|
|
27
|
+
import "../chunk-QYAFI34Q.js";
|
|
26
28
|
import "../chunk-J4ZVCXZ4.js";
|
|
27
|
-
import "../chunk-
|
|
28
|
-
import "../chunk-
|
|
29
|
+
import "../chunk-YUX6RGLZ.js";
|
|
30
|
+
import "../chunk-AKIRHA4Q.js";
|
|
29
31
|
import {
|
|
30
32
|
useSupabase
|
|
31
33
|
} from "../chunk-DMVUEJG2.js";
|