@pol-studios/db 1.0.10 → 1.0.12
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-CL6alnkb.d.ts +755 -0
- package/dist/UserMetadataContext-B8gVWGMl.d.ts +35 -0
- package/dist/UserMetadataContext-DntmpK41.d.ts +33 -0
- package/dist/auth/context.d.ts +3 -2
- package/dist/auth/context.js +5 -4
- package/dist/auth/guards.js +2 -2
- package/dist/auth/hooks.d.ts +3 -3
- package/dist/auth/hooks.js +6 -5
- package/dist/auth/index.d.ts +3 -2
- package/dist/auth/index.js +8 -6
- package/dist/{canvas-UVNDA54X.node → canvas-C4TBBDUL.node} +0 -0
- package/dist/{canvas-75Y7XMF3.js → canvas-ZQNCL7JL.js} +2 -2
- package/dist/chunk-5EFDS7SR.js +205 -0
- package/dist/chunk-5EFDS7SR.js.map +1 -0
- package/dist/{chunk-BRTW7CO5.js → chunk-7SCJNYTE.js} +1 -9
- package/dist/chunk-7SCJNYTE.js.map +1 -0
- package/dist/chunk-DJ6VLEAL.js +247 -0
- package/dist/chunk-DJ6VLEAL.js.map +1 -0
- package/dist/{chunk-Y3INY2CS.js → chunk-GC3TBUWE.js} +1 -1
- package/dist/chunk-GC3TBUWE.js.map +1 -0
- package/dist/{chunk-7HG6G25H.js → chunk-H3LNH2NT.js} +169 -268
- package/dist/chunk-H3LNH2NT.js.map +1 -0
- package/dist/{chunk-USJYMRUO.js → chunk-HAWJTZCK.js} +2 -2
- package/dist/chunk-HAWJTZCK.js.map +1 -0
- package/dist/chunk-JAATANS3.js +429 -0
- package/dist/chunk-JAATANS3.js.map +1 -0
- package/dist/chunk-LNJ3WF7V.js +470 -0
- package/dist/chunk-LNJ3WF7V.js.map +1 -0
- package/dist/chunk-N26IEHZT.js +79 -0
- package/dist/chunk-N26IEHZT.js.map +1 -0
- package/dist/chunk-NSIAAYW3.js +1 -0
- package/dist/chunk-NSIAAYW3.js.map +1 -0
- package/dist/chunk-NZON56CB.js +3864 -0
- package/dist/chunk-NZON56CB.js.map +1 -0
- package/dist/{chunk-O3K7R32P.js → chunk-OQ7U6EQ3.js} +118 -123
- package/dist/chunk-OQ7U6EQ3.js.map +1 -0
- package/dist/chunk-SM73S2DY.js +11 -0
- package/dist/chunk-SM73S2DY.js.map +1 -0
- package/dist/{chunk-JUVE3DWY.js → chunk-TKWR5AAY.js} +47 -65
- package/dist/chunk-TKWR5AAY.js.map +1 -0
- package/dist/{chunk-2IFGILT3.js → chunk-U5UNPBKB.js} +76 -107
- package/dist/chunk-U5UNPBKB.js.map +1 -0
- package/dist/chunk-WGDJ4IXR.js +921 -0
- package/dist/chunk-WGDJ4IXR.js.map +1 -0
- package/dist/chunk-WVF7RUW5.js +186 -0
- package/dist/chunk-WVF7RUW5.js.map +1 -0
- package/dist/{chunk-ZTSBF536.js → chunk-X3HZLNBV.js} +637 -435
- package/dist/chunk-X3HZLNBV.js.map +1 -0
- package/dist/{chunk-EL45Z26M.js → chunk-XU3SBFAG.js} +1219 -208
- package/dist/chunk-XU3SBFAG.js.map +1 -0
- package/dist/chunk-ZVBHWU7O.js +1412 -0
- package/dist/chunk-ZVBHWU7O.js.map +1 -0
- package/dist/client/index.d.ts +1 -1
- package/dist/client/index.js +42 -23
- package/dist/client/index.js.map +1 -1
- package/dist/core/index.d.ts +19 -0
- package/dist/{index-BFu5_dS8.d.ts → database.types-ChFCG-4M.d.ts} +1 -177
- package/dist/gen/index.js +4 -2
- package/dist/hooks/index.d.ts +10 -3
- package/dist/hooks/index.js +8 -10
- package/dist/index-CQLyNG6A.d.ts +433 -0
- package/dist/index.d.ts +12 -8
- package/dist/index.js +92 -48
- package/dist/index.native.d.ts +373 -33
- package/dist/index.native.js +79 -47
- package/dist/index.web.d.ts +10 -7
- package/dist/index.web.js +83 -78
- package/dist/index.web.js.map +1 -1
- package/dist/mutation/index.d.ts +2 -2
- package/dist/mutation/index.js +307 -122
- package/dist/mutation/index.js.map +1 -1
- package/dist/parser/index.js +2 -2
- package/dist/{pdf-3TIGQRLA.js → pdf-PHXP7RHD.js} +2 -2
- package/dist/powersync-bridge/index.d.ts +284 -0
- package/dist/powersync-bridge/index.js +22 -0
- package/dist/powersync-bridge/index.js.map +1 -0
- package/dist/query/index.js +5 -5
- package/dist/realtime/index.js +252 -128
- package/dist/realtime/index.js.map +1 -1
- package/dist/{UserMetadataContext-BYYqA6LI.d.ts → setupAuthContext-Kv-THH-h.d.ts} +1 -29
- package/dist/types/index.d.ts +5 -1
- package/dist/types/index.js +10 -5
- package/dist/{useBatchUpsert-CSQVX7w8.d.ts → useBatchUpsert-9OYjibLh.d.ts} +1 -1
- package/dist/{useDbCount-RGCuHmHp.d.ts → useDbCount-BG356T9i.d.ts} +3 -719
- package/dist/{useReceiptAI-Bn0czE7C.d.ts → useReceiptAI-6HkRpRml.d.ts} +1 -1
- package/dist/{useResolveFeedback-CpZPP8Pw.d.ts → useResolveFeedback-BWmatBlE.d.ts} +26 -45
- package/dist/{useSupabase-pPhUZHcl.d.ts → useSupabase-DvWVuHHE.d.ts} +2 -1
- package/dist/with-auth/index.d.ts +704 -0
- package/dist/with-auth/index.js +1221 -0
- package/dist/with-auth/index.js.map +1 -0
- package/package.json +25 -10
- package/dist/chunk-2IFGILT3.js.map +0 -1
- package/dist/chunk-3M2U6TXH.js +0 -928
- package/dist/chunk-3M2U6TXH.js.map +0 -1
- package/dist/chunk-5ZYAEGCJ.js +0 -416
- package/dist/chunk-5ZYAEGCJ.js.map +0 -1
- package/dist/chunk-7HG6G25H.js.map +0 -1
- package/dist/chunk-7XT7K4QT.js +0 -2687
- package/dist/chunk-7XT7K4QT.js.map +0 -1
- package/dist/chunk-AWFMICFV.js +0 -158
- package/dist/chunk-AWFMICFV.js.map +0 -1
- package/dist/chunk-BRTW7CO5.js.map +0 -1
- package/dist/chunk-EL45Z26M.js.map +0 -1
- package/dist/chunk-ERGF2FCE.js +0 -903
- package/dist/chunk-ERGF2FCE.js.map +0 -1
- package/dist/chunk-GK7B66LY.js +0 -135
- package/dist/chunk-GK7B66LY.js.map +0 -1
- package/dist/chunk-GQI6WJGI.js +0 -172
- package/dist/chunk-GQI6WJGI.js.map +0 -1
- package/dist/chunk-JUVE3DWY.js.map +0 -1
- package/dist/chunk-O3K7R32P.js.map +0 -1
- package/dist/chunk-SEY5UO2T.js +0 -89
- package/dist/chunk-SEY5UO2T.js.map +0 -1
- package/dist/chunk-USJYMRUO.js.map +0 -1
- package/dist/chunk-XX3IWSPM.js +0 -189
- package/dist/chunk-XX3IWSPM.js.map +0 -1
- package/dist/chunk-Y3INY2CS.js.map +0 -1
- package/dist/chunk-ZTSBF536.js.map +0 -1
- /package/dist/{canvas-75Y7XMF3.js.map → canvas-ZQNCL7JL.js.map} +0 -0
- /package/dist/{pdf-3TIGQRLA.js.map → pdf-PHXP7RHD.js.map} +0 -0
package/dist/realtime/index.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
PostgrestParser
|
|
3
|
-
} from "../chunk-
|
|
3
|
+
} from "../chunk-TKWR5AAY.js";
|
|
4
4
|
import "../chunk-J4ZVCXZ4.js";
|
|
5
5
|
import {
|
|
6
6
|
isNullOrWhitespace,
|
|
7
7
|
newUuid
|
|
8
|
-
} from "../chunk-
|
|
8
|
+
} from "../chunk-OQ7U6EQ3.js";
|
|
9
9
|
import {
|
|
10
10
|
buildNormalizedQuery,
|
|
11
11
|
encode,
|
|
@@ -19,30 +19,50 @@ import "../chunk-3PJTNH2L.js";
|
|
|
19
19
|
import {
|
|
20
20
|
UserSessionId,
|
|
21
21
|
useSupabase
|
|
22
|
-
} from "../chunk-
|
|
22
|
+
} from "../chunk-5EFDS7SR.js";
|
|
23
23
|
import "../chunk-P4UZ7IXC.js";
|
|
24
24
|
|
|
25
25
|
// src/realtime/useRealtime.ts
|
|
26
|
+
import { c as _c } from "react/compiler-runtime";
|
|
26
27
|
import { useEffect, useState, useRef } from "react";
|
|
27
|
-
import {
|
|
28
|
-
REALTIME_POSTGRES_CHANGES_LISTEN_EVENT
|
|
29
|
-
} from "@supabase/supabase-js";
|
|
28
|
+
import { REALTIME_POSTGRES_CHANGES_LISTEN_EVENT } from "@supabase/supabase-js";
|
|
30
29
|
import { useDelayedValue } from "@pol-studios/hooks/state";
|
|
31
30
|
function useRealtime(key, query, table, primaryKeys, options) {
|
|
31
|
+
const $ = _c(37);
|
|
32
32
|
const supabase = useSupabase();
|
|
33
33
|
const tableNameValue = typeof table === "string" ? table : table.table;
|
|
34
34
|
const schemaValue = typeof table === "string" ? "public" : table.schema;
|
|
35
35
|
const queriesForTable = useQueriesForTableLoader(tableNameValue);
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
36
|
+
let t0;
|
|
37
|
+
if ($[0] !== primaryKeys || $[1] !== schemaValue || $[2] !== tableNameValue) {
|
|
38
|
+
t0 = {
|
|
39
|
+
primaryKeys,
|
|
40
|
+
table: tableNameValue,
|
|
41
|
+
schema: schemaValue
|
|
42
|
+
};
|
|
43
|
+
$[0] = primaryKeys;
|
|
44
|
+
$[1] = schemaValue;
|
|
45
|
+
$[2] = tableNameValue;
|
|
46
|
+
$[3] = t0;
|
|
47
|
+
} else {
|
|
48
|
+
t0 = $[3];
|
|
49
|
+
}
|
|
50
|
+
const deleteItem = useDeleteItem(t0);
|
|
51
|
+
let t1;
|
|
52
|
+
if ($[4] !== primaryKeys || $[5] !== schemaValue || $[6] !== tableNameValue) {
|
|
53
|
+
t1 = {
|
|
54
|
+
primaryKeys,
|
|
55
|
+
table: tableNameValue,
|
|
56
|
+
schema: schemaValue
|
|
57
|
+
};
|
|
58
|
+
$[4] = primaryKeys;
|
|
59
|
+
$[5] = schemaValue;
|
|
60
|
+
$[6] = tableNameValue;
|
|
61
|
+
$[7] = t1;
|
|
62
|
+
} else {
|
|
63
|
+
t1 = $[7];
|
|
64
|
+
}
|
|
65
|
+
const upsertItem = useUpsertItem(t1);
|
|
46
66
|
const [realtimeState, setRealtimeState] = useState("CLOSED");
|
|
47
67
|
const [retryTick, setRetryTick] = useState(0);
|
|
48
68
|
const channelRef = useRef(null);
|
|
@@ -52,38 +72,36 @@ function useRealtime(key, query, table, primaryKeys, options) {
|
|
|
52
72
|
const filter = options?.filter;
|
|
53
73
|
const onChange = options?.onChange;
|
|
54
74
|
const debouncedKey = useDelayedValue(key, 50);
|
|
55
|
-
|
|
56
|
-
|
|
75
|
+
let t2;
|
|
76
|
+
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) {
|
|
77
|
+
t2 = () => {
|
|
78
|
+
if (!enabled) {
|
|
79
|
+
if (channelRef.current) {
|
|
80
|
+
channelRef.current.unsubscribe();
|
|
81
|
+
supabase.removeChannel(channelRef.current);
|
|
82
|
+
channelRef.current = null;
|
|
83
|
+
}
|
|
84
|
+
setRealtimeState("CLOSED");
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
const now = Date.now();
|
|
88
|
+
const timeSinceLastRetry = now - lastRetryTimeRef.current;
|
|
89
|
+
if (timeSinceLastRetry < 2e3 && retryTick > 0) {
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
57
92
|
if (channelRef.current) {
|
|
58
93
|
channelRef.current.unsubscribe();
|
|
59
94
|
supabase.removeChannel(channelRef.current);
|
|
60
95
|
channelRef.current = null;
|
|
61
96
|
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
const now = Date.now();
|
|
66
|
-
const timeSinceLastRetry = now - lastRetryTimeRef.current;
|
|
67
|
-
const minRetryInterval = 2e3;
|
|
68
|
-
if (timeSinceLastRetry < minRetryInterval && retryTick > 0) {
|
|
69
|
-
return;
|
|
70
|
-
}
|
|
71
|
-
if (channelRef.current) {
|
|
72
|
-
channelRef.current.unsubscribe();
|
|
73
|
-
supabase.removeChannel(channelRef.current);
|
|
74
|
-
channelRef.current = null;
|
|
75
|
-
}
|
|
76
|
-
lastRetryTimeRef.current = now;
|
|
77
|
-
retryCountRef.current += 1;
|
|
78
|
-
const channel = supabase.channel(newUuid()).on(
|
|
79
|
-
"postgres_changes",
|
|
80
|
-
{
|
|
97
|
+
lastRetryTimeRef.current = now;
|
|
98
|
+
retryCountRef.current = retryCountRef.current + 1;
|
|
99
|
+
const channel = supabase.channel(newUuid()).on("postgres_changes", {
|
|
81
100
|
event: "*",
|
|
82
101
|
schema: schemaValue,
|
|
83
102
|
table: tableNameValue,
|
|
84
103
|
filter
|
|
85
|
-
},
|
|
86
|
-
async (payload) => {
|
|
104
|
+
}, async (payload) => {
|
|
87
105
|
let data = payload.new ?? payload.old;
|
|
88
106
|
if (payload.new && Object.keys(payload.new).length > 0) {
|
|
89
107
|
const selectQuery = buildNormalizedQuery({
|
|
@@ -91,24 +109,19 @@ function useRealtime(key, query, table, primaryKeys, options) {
|
|
|
91
109
|
query
|
|
92
110
|
});
|
|
93
111
|
if (payload.eventType !== REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.DELETE && selectQuery) {
|
|
94
|
-
if (selectQuery.groupedUserQueryPaths.every(
|
|
95
|
-
(x) => x.path in data
|
|
96
|
-
) === false) {
|
|
112
|
+
if (selectQuery.groupedUserQueryPaths.every((x) => x.path in data) === false) {
|
|
97
113
|
const qb = supabase.schema(payload.schema).from(payload.table).select(selectQuery.selectQuery);
|
|
98
114
|
for (const pk of primaryKeys) {
|
|
99
115
|
qb.eq(pk.toString(), data[pk]);
|
|
100
116
|
}
|
|
101
117
|
const res = await qb.single();
|
|
102
118
|
if (res.data) {
|
|
103
|
-
data = normalizeResponse(
|
|
104
|
-
selectQuery.groupedPaths,
|
|
105
|
-
res.data
|
|
106
|
-
);
|
|
119
|
+
data = normalizeResponse(selectQuery.groupedPaths, res.data);
|
|
107
120
|
}
|
|
108
121
|
}
|
|
109
122
|
}
|
|
110
123
|
if ("changedBySessionId" in data) {
|
|
111
|
-
const sessionId = data
|
|
124
|
+
const sessionId = data.changedBySessionId;
|
|
112
125
|
if (sessionId !== UserSessionId) {
|
|
113
126
|
await upsertItem(data);
|
|
114
127
|
}
|
|
@@ -125,65 +138,102 @@ function useRealtime(key, query, table, primaryKeys, options) {
|
|
|
125
138
|
if (onChange) {
|
|
126
139
|
onChange(payload);
|
|
127
140
|
}
|
|
128
|
-
}
|
|
129
|
-
).on(
|
|
130
|
-
"postgres_changes",
|
|
131
|
-
{
|
|
141
|
+
}).on("postgres_changes", {
|
|
132
142
|
event: "DELETE",
|
|
133
143
|
schema: schemaValue,
|
|
134
144
|
table: tableNameValue
|
|
135
|
-
},
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
await deleteItem(payload.old);
|
|
145
|
+
}, async (payload_0) => {
|
|
146
|
+
if (payload_0.eventType === REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.DELETE) {
|
|
147
|
+
await deleteItem(payload_0.old);
|
|
139
148
|
}
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
149
|
+
}).subscribe((status) => {
|
|
150
|
+
setRealtimeState(status);
|
|
151
|
+
if (status === "SUBSCRIBED") {
|
|
152
|
+
retryCountRef.current = 0;
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
channelRef.current = channel;
|
|
156
|
+
return () => {
|
|
157
|
+
if (channelRef.current) {
|
|
158
|
+
channelRef.current.unsubscribe();
|
|
159
|
+
supabase.removeChannel(channelRef.current);
|
|
160
|
+
channelRef.current = null;
|
|
161
|
+
}
|
|
162
|
+
};
|
|
163
|
+
};
|
|
164
|
+
$[8] = deleteItem;
|
|
165
|
+
$[9] = enabled;
|
|
166
|
+
$[10] = filter;
|
|
167
|
+
$[11] = onChange;
|
|
168
|
+
$[12] = primaryKeys;
|
|
169
|
+
$[13] = queriesForTable;
|
|
170
|
+
$[14] = query;
|
|
171
|
+
$[15] = retryTick;
|
|
172
|
+
$[16] = schemaValue;
|
|
173
|
+
$[17] = supabase;
|
|
174
|
+
$[18] = tableNameValue;
|
|
175
|
+
$[19] = upsertItem;
|
|
176
|
+
$[20] = t2;
|
|
177
|
+
} else {
|
|
178
|
+
t2 = $[20];
|
|
179
|
+
}
|
|
180
|
+
let t3;
|
|
181
|
+
if ($[21] !== primaryKeys) {
|
|
182
|
+
t3 = primaryKeys.join(",");
|
|
183
|
+
$[21] = primaryKeys;
|
|
184
|
+
$[22] = t3;
|
|
185
|
+
} else {
|
|
186
|
+
t3 = $[22];
|
|
187
|
+
}
|
|
188
|
+
let t4;
|
|
189
|
+
if ($[23] !== debouncedKey || $[24] !== enabled || $[25] !== filter || $[26] !== query || $[27] !== retryTick || $[28] !== schemaValue || $[29] !== supabase || $[30] !== t3 || $[31] !== tableNameValue) {
|
|
190
|
+
t4 = [supabase, tableNameValue, schemaValue, enabled, filter, query, t3, retryTick, debouncedKey];
|
|
191
|
+
$[23] = debouncedKey;
|
|
192
|
+
$[24] = enabled;
|
|
193
|
+
$[25] = filter;
|
|
194
|
+
$[26] = query;
|
|
195
|
+
$[27] = retryTick;
|
|
196
|
+
$[28] = schemaValue;
|
|
197
|
+
$[29] = supabase;
|
|
198
|
+
$[30] = t3;
|
|
199
|
+
$[31] = tableNameValue;
|
|
200
|
+
$[32] = t4;
|
|
201
|
+
} else {
|
|
202
|
+
t4 = $[32];
|
|
203
|
+
}
|
|
204
|
+
useEffect(t2, t4);
|
|
205
|
+
let t5;
|
|
206
|
+
let t6;
|
|
207
|
+
if ($[33] !== enabled || $[34] !== realtimeState) {
|
|
208
|
+
t5 = () => {
|
|
209
|
+
if (!enabled || realtimeState === "SUBSCRIBED") {
|
|
144
210
|
retryCountRef.current = 0;
|
|
211
|
+
return;
|
|
145
212
|
}
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
supabase.removeChannel(channelRef.current);
|
|
152
|
-
channelRef.current = null;
|
|
153
|
-
}
|
|
213
|
+
const delay = Math.min(5e3 * Math.pow(2, retryCountRef.current), 6e4);
|
|
214
|
+
const id = setTimeout(() => {
|
|
215
|
+
setRetryTick(_temp);
|
|
216
|
+
}, delay);
|
|
217
|
+
return () => clearTimeout(id);
|
|
154
218
|
};
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
]);
|
|
166
|
-
useEffect(() => {
|
|
167
|
-
if (!enabled || realtimeState === "SUBSCRIBED") {
|
|
168
|
-
retryCountRef.current = 0;
|
|
169
|
-
return;
|
|
170
|
-
}
|
|
171
|
-
const baseDelay = 5e3;
|
|
172
|
-
const maxDelay = 6e4;
|
|
173
|
-
const delay = Math.min(
|
|
174
|
-
baseDelay * Math.pow(2, retryCountRef.current),
|
|
175
|
-
maxDelay
|
|
176
|
-
);
|
|
177
|
-
const id = setTimeout(() => {
|
|
178
|
-
setRetryTick((t) => t + 1);
|
|
179
|
-
}, delay);
|
|
180
|
-
return () => clearTimeout(id);
|
|
181
|
-
}, [realtimeState, enabled]);
|
|
219
|
+
t6 = [realtimeState, enabled];
|
|
220
|
+
$[33] = enabled;
|
|
221
|
+
$[34] = realtimeState;
|
|
222
|
+
$[35] = t5;
|
|
223
|
+
$[36] = t6;
|
|
224
|
+
} else {
|
|
225
|
+
t5 = $[35];
|
|
226
|
+
t6 = $[36];
|
|
227
|
+
}
|
|
228
|
+
useEffect(t5, t6);
|
|
182
229
|
return realtimeState;
|
|
183
230
|
}
|
|
231
|
+
function _temp(t) {
|
|
232
|
+
return t + 1;
|
|
233
|
+
}
|
|
184
234
|
|
|
185
235
|
// src/realtime/useRealtimeQuery.ts
|
|
186
|
-
import {
|
|
236
|
+
import { c as _c2 } from "react/compiler-runtime";
|
|
187
237
|
function convertFilterToRealtimeQuery(filters) {
|
|
188
238
|
function convert(filter) {
|
|
189
239
|
if (!filter) return "";
|
|
@@ -205,43 +255,117 @@ function convertFilterToRealtimeQuery(filters) {
|
|
|
205
255
|
}
|
|
206
256
|
return convert(filters[0]);
|
|
207
257
|
}
|
|
208
|
-
function useRealtimeQuery(query, config,
|
|
209
|
-
const
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
const queryKey = encode(query, false);
|
|
218
|
-
const filterString = convertFilterToRealtimeQuery(parser.filters);
|
|
219
|
-
let filter = request.data && typeof request.data === "object" && "id" in request.data ? "id=eq." + request.data.id : filterString;
|
|
220
|
-
if (filter.includes('in.(\\"\\")')) {
|
|
221
|
-
filter = void 0;
|
|
258
|
+
function useRealtimeQuery(query, config, t0) {
|
|
259
|
+
const $ = _c2(27);
|
|
260
|
+
let t1;
|
|
261
|
+
if ($[0] !== t0) {
|
|
262
|
+
t1 = t0 === void 0 ? ["id"] : t0;
|
|
263
|
+
$[0] = t0;
|
|
264
|
+
$[1] = t1;
|
|
265
|
+
} else {
|
|
266
|
+
t1 = $[1];
|
|
222
267
|
}
|
|
223
|
-
|
|
224
|
-
|
|
268
|
+
const primaryKeys = t1;
|
|
269
|
+
const t2 = query;
|
|
270
|
+
let t3;
|
|
271
|
+
if ($[2] !== t2) {
|
|
272
|
+
t3 = new PostgrestParser(t2);
|
|
273
|
+
$[2] = t2;
|
|
274
|
+
$[3] = t3;
|
|
275
|
+
} else {
|
|
276
|
+
t3 = $[3];
|
|
225
277
|
}
|
|
226
|
-
const
|
|
227
|
-
const
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
278
|
+
const parser = t3;
|
|
279
|
+
const request = useQuery(query, config);
|
|
280
|
+
let filter;
|
|
281
|
+
let selectStatement;
|
|
282
|
+
let t4;
|
|
283
|
+
let t5;
|
|
284
|
+
if ($[4] !== parser.filters || $[5] !== parser.select || $[6] !== query || $[7] !== request.data) {
|
|
285
|
+
const queryKey = encode(query, false);
|
|
286
|
+
let t62;
|
|
287
|
+
if ($[12] !== parser.filters || $[13] !== request.data) {
|
|
288
|
+
const filterString = convertFilterToRealtimeQuery(parser.filters);
|
|
289
|
+
filter = request.data && typeof request.data === "object" && "id" in request.data ? "id=eq." + request.data.id : filterString;
|
|
290
|
+
if (filter.includes('in.(\\"\\")')) {
|
|
291
|
+
filter = void 0;
|
|
292
|
+
}
|
|
293
|
+
t62 = isNullOrWhitespace(filter);
|
|
294
|
+
$[12] = parser.filters;
|
|
295
|
+
$[13] = request.data;
|
|
296
|
+
$[14] = filter;
|
|
297
|
+
$[15] = t62;
|
|
298
|
+
} else {
|
|
299
|
+
filter = $[14];
|
|
300
|
+
t62 = $[15];
|
|
301
|
+
}
|
|
302
|
+
if (t62) {
|
|
303
|
+
filter = void 0;
|
|
235
304
|
}
|
|
236
|
-
|
|
305
|
+
selectStatement = parser.select;
|
|
306
|
+
t4 = useRealtime;
|
|
307
|
+
t5 = queryKey.join("-");
|
|
308
|
+
$[4] = parser.filters;
|
|
309
|
+
$[5] = parser.select;
|
|
310
|
+
$[6] = query;
|
|
311
|
+
$[7] = request.data;
|
|
312
|
+
$[8] = filter;
|
|
313
|
+
$[9] = selectStatement;
|
|
314
|
+
$[10] = t4;
|
|
315
|
+
$[11] = t5;
|
|
316
|
+
} else {
|
|
317
|
+
filter = $[8];
|
|
318
|
+
selectStatement = $[9];
|
|
319
|
+
t4 = $[10];
|
|
320
|
+
t5 = $[11];
|
|
321
|
+
}
|
|
322
|
+
let t6;
|
|
323
|
+
if ($[16] !== parser.schema || $[17] !== parser.table) {
|
|
324
|
+
t6 = {
|
|
325
|
+
schema: parser.schema,
|
|
326
|
+
table: parser.table
|
|
327
|
+
};
|
|
328
|
+
$[16] = parser.schema;
|
|
329
|
+
$[17] = parser.table;
|
|
330
|
+
$[18] = t6;
|
|
331
|
+
} else {
|
|
332
|
+
t6 = $[18];
|
|
333
|
+
}
|
|
334
|
+
const t7 = typeof config?.enabled === "boolean" ? config.enabled : true;
|
|
335
|
+
let t8;
|
|
336
|
+
if ($[19] !== filter || $[20] !== t7) {
|
|
337
|
+
t8 = {
|
|
338
|
+
filter,
|
|
339
|
+
enabled: t7
|
|
340
|
+
};
|
|
341
|
+
$[19] = filter;
|
|
342
|
+
$[20] = t7;
|
|
343
|
+
$[21] = t8;
|
|
344
|
+
} else {
|
|
345
|
+
t8 = $[21];
|
|
346
|
+
}
|
|
347
|
+
const realtimeStatus = t4(t5, selectStatement, t6, primaryKeys, t8);
|
|
237
348
|
const outputRealtimeStatus = request.isFetching ? "Loading..." : realtimeStatus;
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
349
|
+
const t9 = request.data;
|
|
350
|
+
const t10 = realtimeStatus == "SUBSCRIBED";
|
|
351
|
+
let t11;
|
|
352
|
+
if ($[22] !== outputRealtimeStatus || $[23] !== request || $[24] !== t10 || $[25] !== t9) {
|
|
353
|
+
t11 = {
|
|
354
|
+
...request,
|
|
355
|
+
data: t9,
|
|
356
|
+
realtimeStatus: outputRealtimeStatus,
|
|
357
|
+
isRealtimeConnected: t10,
|
|
358
|
+
isRealtimeLoading: request.isFetching
|
|
359
|
+
};
|
|
360
|
+
$[22] = outputRealtimeStatus;
|
|
361
|
+
$[23] = request;
|
|
362
|
+
$[24] = t10;
|
|
363
|
+
$[25] = t9;
|
|
364
|
+
$[26] = t11;
|
|
365
|
+
} else {
|
|
366
|
+
t11 = $[26];
|
|
367
|
+
}
|
|
368
|
+
return t11;
|
|
245
369
|
}
|
|
246
370
|
export {
|
|
247
371
|
convertFilterToRealtimeQuery,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/realtime/useRealtime.ts","../../src/realtime/useRealtimeQuery.ts"],"sourcesContent":["import {\n useDeleteItem,\n useQueriesForTableLoader,\n useUpsertItem,\n} 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 {\n buildNormalizedQuery,\n normalizeResponse,\n} from \"@supabase-cache-helpers/postgrest-core\";\nimport {\n REALTIME_POSTGRES_CHANGES_LISTEN_EVENT,\n type RealtimePostgresChangesPayload,\n} from \"@supabase/supabase-js\";\nimport { useDelayedValue } from \"@pol-studios/hooks/state\";\n\nexport default function useRealtime(\n key: string,\n query: string,\n table: string | { table: string; schema: string },\n primaryKeys: string[],\n options?: {\n filter?: string;\n enabled?: boolean;\n onChange?: (\n payload: RealtimePostgresChangesPayload<{\n [key: string]: any;\n }>,\n ) => any;\n },\n) {\n const supabase = useSupabase();\n\n const tableNameValue = typeof table === \"string\" ? table : table.table;\n const schemaValue = typeof table === \"string\" ? \"public\" : table.schema;\n const queriesForTable = useQueriesForTableLoader(tableNameValue);\n\n const deleteItem = useDeleteItem({\n primaryKeys: primaryKeys,\n table: tableNameValue,\n schema: schemaValue,\n });\n const upsertItem = useUpsertItem({\n primaryKeys: primaryKeys,\n table: tableNameValue,\n schema: schemaValue,\n });\n\n const [realtimeState, setRealtimeState] = useState<\n \"SUBSCRIBED\" | \"TIMED_OUT\" | \"CLOSED\" | \"CHANNEL_ERROR\"\n >(\"CLOSED\");\n const [retryTick, setRetryTick] = useState(0);\n\n const channelRef = useRef<ReturnType<typeof supabase.channel> | null>(null);\n const lastRetryTimeRef = useRef<number>(0);\n const retryCountRef = useRef<number>(0);\n\n const enabled = options?.enabled ?? true;\n const filter = options?.filter;\n const onChange = options?.onChange;\n\n // Debounce the key to prevent rapid subscription churn during fast navigation\n const debouncedKey = useDelayedValue(key, 50);\n\n useEffect(() => {\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\n // Prevent rapid retries - throttle to at least 2 seconds between attempts\n const now = Date.now();\n const timeSinceLastRetry = now - lastRetryTimeRef.current;\n const minRetryInterval = 2000;\n\n if (timeSinceLastRetry < minRetryInterval && retryTick > 0) {\n return;\n }\n\n // Clean up existing channel before creating a new one\n if (channelRef.current) {\n channelRef.current.unsubscribe();\n supabase.removeChannel(channelRef.current);\n channelRef.current = null;\n }\n\n lastRetryTimeRef.current = now;\n retryCountRef.current += 1;\n\n const channel = supabase\n .channel(newUuid())\n .on(\n \"postgres_changes\",\n {\n event: \"*\",\n schema: schemaValue,\n table: tableNameValue,\n filter: filter,\n },\n async (payload) => {\n let data: any = payload.new ?? payload.old;\n\n if (payload.new && Object.keys(payload.new).length > 0) {\n const selectQuery = buildNormalizedQuery({\n queriesForTable,\n query,\n });\n\n if (\n payload.eventType !==\n REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.DELETE &&\n selectQuery\n ) {\n if (\n selectQuery.groupedUserQueryPaths.every((x) =>\n x.path in data\n ) === false\n ) {\n const qb = supabase\n .schema(payload.schema as any)\n .from(payload.table as any)\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(\n selectQuery.groupedPaths,\n res.data,\n );\n }\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\n if (\n payload.eventType === REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.DELETE\n ) {\n await deleteItem(payload.old);\n }\n\n if (payload.errors?.length > 0) {\n setRealtimeState(\"CHANNEL_ERROR\");\n }\n\n if (onChange) {\n onChange(payload);\n }\n },\n )\n .on(\n \"postgres_changes\",\n {\n event: \"DELETE\",\n schema: schemaValue,\n table: tableNameValue,\n },\n async (payload) => {\n if (\n payload.eventType === REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.DELETE\n ) {\n await deleteItem(payload.old);\n }\n },\n )\n .subscribe((status) => {\n setRealtimeState(status);\n\n if (status === \"SUBSCRIBED\") {\n retryCountRef.current = 0;\n }\n });\n\n channelRef.current = channel;\n\n return () => {\n if (channelRef.current) {\n channelRef.current.unsubscribe();\n supabase.removeChannel(channelRef.current);\n channelRef.current = null;\n }\n };\n }, [\n supabase,\n tableNameValue,\n schemaValue,\n enabled,\n filter,\n query,\n primaryKeys.join(\",\"),\n retryTick,\n debouncedKey,\n ]);\n\n useEffect(() => {\n if (!enabled || realtimeState === \"SUBSCRIBED\") {\n retryCountRef.current = 0;\n return;\n }\n\n // Exponential backoff: start at 5 seconds, max 60 seconds\n const baseDelay = 5000;\n const maxDelay = 60000;\n const delay = Math.min(\n baseDelay * Math.pow(2, retryCountRef.current),\n maxDelay\n );\n\n const id = setTimeout(() => {\n setRetryTick((t) => t + 1);\n }, delay);\n\n return () => clearTimeout(id);\n }, [realtimeState, enabled]);\n\n return realtimeState;\n}\n","import { PostgrestSingleResponse } from \"@supabase/supabase-js\";\nimport { useMemo } from \"react\";\nimport { ItemType } from \"@pol-studios/utils\";\nimport {\n encode,\n useQuery,\n} 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\";\n\ntype ConfigurationOptions<T> = {\n crossOrganization?: boolean;\n};\n\ntype FilterOperator =\n | \"or\"\n | \"eq\"\n | \"neq\"\n | \"gt\"\n | \"gte\"\n | \"lt\"\n | \"lte\"\n | \"like\"\n | \"ilike\"\n | \"is\"\n | \"in\"\n | \"cs\"\n | \"cd\"\n | \"fts\"\n | \"plfts\";\ntype ValueType = number | string | boolean | null | Date | object;\n\ntype FilterDefinition = {\n path: string;\n alias?: string;\n operator: FilterOperator;\n negate: boolean;\n value: ValueType;\n};\n\ntype FilterDefinitions = (FilterComposite | FilterDefinition)[];\n\ntype FilterComposite = {\n or?: FilterDefinitions;\n and?: FilterDefinitions;\n};\n\nexport type UseRealtimeQueryResult<T> = UseDbQuerySingleReturn<T> & {\n realtimeStatus:\n | \"SUBSCRIBED\"\n | \"TIMED_OUT\"\n | \"CLOSED\"\n | \"CHANNEL_ERROR\"\n | \"Loading...\";\n isRealtimeConnected: boolean;\n isRealtimeLoading: boolean;\n};\ntype DataType = Record<string, any>;\n\nexport function convertFilterToRealtimeQuery(\n filters: FilterDefinitions\n): 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\n let valueString = filter.value?.toString() ?? \"null\";\n if (filter.operator === \"in\") {\n valueString =\n '(\"' +\n valueString\n .slice(2, valueString.length - 2)\n .split(\",\")\n .join('\",\"') +\n '\")';\n }\n\n return `${filter.path}=${\n filter.negate ? \"not.\" : \"\"\n }${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}\n\nexport function useRealtimeQuery<Result extends DataType>(\n query: PromiseLike<PostgrestSingleResponse<Result>>,\n config?: Omit<\n UseQueryOptions<PostgrestSingleResponse<Result>>,\n \"queryKey\" | \"queryFn\"\n > &\n ConfigurationOptions<Result>,\n primaryKeys: (keyof ItemType<Result> & string)[] = [\"id\" as any]\n): UseRealtimeQueryResult<Result> {\n const parser = useMemo(\n () => new PostgrestParser<Result>(query as any),\n [query]\n );\n\n // Use consumer's config - don't force refetchOnMount: \"always\" which defeats prefetching\n // Realtime subscription will keep data fresh anyway\n const request = useQuery(\n query,\n useMemo(() => config as any, [config])\n );\n const queryKey = encode(query, false);\n\n // Removed: Effect that forced refetch on query key change\n // This was causing double fetches and defeating prefetch optimization\n // Realtime subscription handles keeping data in sync\n\n const filterString = convertFilterToRealtimeQuery(parser.filters);\n let filter: string | undefined =\n request.data && typeof request.data === \"object\" && \"id\" in request.data\n ? \"id=eq.\" + request.data.id\n : filterString;\n\n if (filter.includes('in.(\\\\\"\\\\\")')) {\n filter = undefined;\n }\n if (isNullOrWhitespace(filter)) {\n filter = undefined;\n }\n\n const selectStatement = parser.select;\n\n const realtimeStatus = useRealtime(\n queryKey.join(\"-\"),\n selectStatement,\n { schema: parser.schema, table: parser.table },\n primaryKeys,\n {\n filter: filter,\n enabled: typeof config?.enabled === \"boolean\" ? config.enabled : true,\n }\n );\n const outputRealtimeStatus: typeof realtimeStatus | \"Loading...\" =\n request.isFetching ? \"Loading...\" : realtimeStatus;\n\n return {\n ...request,\n data: request.data as Result | null | undefined,\n realtimeStatus: outputRealtimeStatus,\n isRealtimeConnected: realtimeStatus == \"SUBSCRIBED\",\n isRealtimeLoading: request.isFetching,\n } as UseRealtimeQueryResult<Result>;\n}\n"],"mappings":"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","names":[]}
|
|
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":"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","names":["_c","_c","t6"]}
|
|
@@ -2,7 +2,6 @@ import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
|
2
2
|
import * as react from 'react';
|
|
3
3
|
import { ReactNode } from 'react';
|
|
4
4
|
import { User, SignUpWithPasswordCredentials, AuthTokenResponsePassword } from '@supabase/supabase-js';
|
|
5
|
-
import { D as Database } from './useSupabase-pPhUZHcl.js';
|
|
6
5
|
|
|
7
6
|
type ProfileStatus = "active" | "archived" | "suspended";
|
|
8
7
|
interface SetupAuthContext {
|
|
@@ -59,31 +58,4 @@ interface SetupAuthContextProviderProps {
|
|
|
59
58
|
*/
|
|
60
59
|
declare function SetupAuthContextProvider({ children, auth, }: SetupAuthContextProviderProps): react_jsx_runtime.JSX.Element;
|
|
61
60
|
|
|
62
|
-
type
|
|
63
|
-
type UserMetadataInsert = Database["core"]["Tables"]["UserMetadata"]["Insert"];
|
|
64
|
-
type UserMetadataUpdate = Database["core"]["Tables"]["UserMetadata"]["Update"];
|
|
65
|
-
interface UserMetadataContextType {
|
|
66
|
-
metadata: Record<string, string>;
|
|
67
|
-
isLoading: boolean;
|
|
68
|
-
error: Error | null;
|
|
69
|
-
setMetadata: (key: string, value: string) => Promise<void>;
|
|
70
|
-
getMetadata: (key: string) => string | undefined;
|
|
71
|
-
removeMetadata: (key: string) => Promise<void>;
|
|
72
|
-
refreshMetadata: () => Promise<void>;
|
|
73
|
-
}
|
|
74
|
-
declare const userMetadataContext: react.Context<UserMetadataContextType>;
|
|
75
|
-
declare function UserMetadataProvider({ children }: {
|
|
76
|
-
children: ReactNode;
|
|
77
|
-
}): react_jsx_runtime.JSX.Element;
|
|
78
|
-
declare function useUserMetadata(): UserMetadataContextType;
|
|
79
|
-
declare function useUserMetadataValue(key: string): string | undefined;
|
|
80
|
-
declare function useSetUserMetadata(): {
|
|
81
|
-
setMetadata: (key: string, value: string) => Promise<void>;
|
|
82
|
-
removeMetadata: (key: string) => Promise<void>;
|
|
83
|
-
};
|
|
84
|
-
declare function useUserMetadataState<T>(key: string, defaultValue: T, options?: {
|
|
85
|
-
serialize?: (value: T) => string;
|
|
86
|
-
deserialize?: (value: string) => T;
|
|
87
|
-
}): [T, (value: T) => Promise<void>, boolean];
|
|
88
|
-
|
|
89
|
-
export { type ProfileStatus as P, SetupAuthContextProvider as S, type UserMetadataContextType as U, type SetupAuthContext as a, type SetupAuthContextProviderProps as b, type Profile as c, useUserMetadata as d, useUserMetadataState as e, useUserMetadataValue as f, userMetadataContext as g, type UserMetadataInsert as h, UserMetadataProvider as i, type UserMetadataRow as j, type UserMetadataUpdate as k, setupAuthContext as s, useSetUserMetadata as u };
|
|
61
|
+
export { type ProfileStatus as P, SetupAuthContextProvider as S, type SetupAuthContext as a, type SetupAuthContextProviderProps as b, type Profile as c, setupAuthContext as s };
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,6 +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 { B as BooleanOperator, l as ClarificationQuestion, k as ClarificationSuggestion, j as ComputedSortConfig,
|
|
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, a as EnhancedSyncControl, E 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-CQLyNG6A.js';
|
|
3
|
+
export { D as Database } from '../database.types-ChFCG-4M.js';
|
|
3
4
|
import 'moment';
|
|
4
5
|
import '@supabase/supabase-js';
|
|
5
6
|
import 'react';
|
|
6
7
|
import '@tanstack/react-query';
|
|
8
|
+
import '../core/index.js';
|
|
9
|
+
import '../DataLayerContext-CL6alnkb.js';
|
|
10
|
+
import '../executor-CB4KHyYG.js';
|
package/dist/types/index.js
CHANGED
|
@@ -1,10 +1,15 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import {
|
|
2
|
+
createCombinedStatus
|
|
3
|
+
} from "../chunk-H3LNH2NT.js";
|
|
4
|
+
import "../chunk-GC3TBUWE.js";
|
|
5
|
+
import "../chunk-TKWR5AAY.js";
|
|
4
6
|
import "../chunk-J4ZVCXZ4.js";
|
|
5
|
-
import "../chunk-
|
|
7
|
+
import "../chunk-OQ7U6EQ3.js";
|
|
6
8
|
import "../chunk-H6365JPC.js";
|
|
7
9
|
import "../chunk-3PJTNH2L.js";
|
|
8
|
-
import "../chunk-
|
|
10
|
+
import "../chunk-5EFDS7SR.js";
|
|
9
11
|
import "../chunk-P4UZ7IXC.js";
|
|
12
|
+
export {
|
|
13
|
+
createCombinedStatus
|
|
14
|
+
};
|
|
10
15
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as _tanstack_react_query from '@tanstack/react-query';
|
|
2
|
-
import { D as Database } from './useSupabase-
|
|
2
|
+
import { D as Database } from './useSupabase-DvWVuHHE.js';
|
|
3
3
|
import { G as GetResult } from './select-query-parser-BwyHum1L.js';
|
|
4
4
|
import { j as GenericSchema } from './types-CYr9JiUE.js';
|
|
5
5
|
|