@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/index.web.js
CHANGED
|
@@ -1,15 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
useReceiptAI_default,
|
|
3
3
|
useSupabaseFunction
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-JAATANS3.js";
|
|
5
5
|
import {
|
|
6
6
|
ADAPTER_STRATEGIES,
|
|
7
7
|
AdapterAutoDetector,
|
|
8
8
|
AdapterRegistry,
|
|
9
9
|
BUCKETS,
|
|
10
10
|
BackendStatus,
|
|
11
|
-
LiveChangeContext,
|
|
12
|
-
LiveChangeContextProvider,
|
|
13
11
|
SupabaseAdapter,
|
|
14
12
|
convertFilterToRealtimeQuery,
|
|
15
13
|
createAdapterAutoDetector,
|
|
@@ -59,7 +57,18 @@ import {
|
|
|
59
57
|
useUpsertChangelog,
|
|
60
58
|
useUpsertChangelogEntry,
|
|
61
59
|
useUpsertChangelogMedia
|
|
62
|
-
} from "./chunk-
|
|
60
|
+
} from "./chunk-NZON56CB.js";
|
|
61
|
+
import {
|
|
62
|
+
LiveChangeContext,
|
|
63
|
+
LiveChangeContextProvider,
|
|
64
|
+
UserMetadataContextProvider,
|
|
65
|
+
useLiveChangesIndicator,
|
|
66
|
+
useSetUserMetadata,
|
|
67
|
+
useUserMetadata,
|
|
68
|
+
useUserMetadataState,
|
|
69
|
+
useUserMetadataValue,
|
|
70
|
+
userMetadataContext
|
|
71
|
+
} from "./chunk-LNJ3WF7V.js";
|
|
63
72
|
import {
|
|
64
73
|
PostgrestFilter,
|
|
65
74
|
binarySearch,
|
|
@@ -87,26 +96,13 @@ import {
|
|
|
87
96
|
removeAliasFromDeclaration,
|
|
88
97
|
removeFirstPathElement,
|
|
89
98
|
setFilterValue
|
|
90
|
-
} from "./chunk-
|
|
91
|
-
import {
|
|
92
|
-
DataLayerContext,
|
|
93
|
-
useAdvanceQuery,
|
|
94
|
-
useDataLayer,
|
|
95
|
-
useDataLayerOptional,
|
|
96
|
-
useDbCount,
|
|
97
|
-
useDbDelete as useDbDelete2,
|
|
98
|
-
useDbInfiniteQuery as useDbInfiniteQuery2,
|
|
99
|
-
useDbInsert as useDbInsert2,
|
|
100
|
-
useDbQuery as useDbQuery2,
|
|
101
|
-
useDbQueryById,
|
|
102
|
-
useDbUpdate as useDbUpdate2,
|
|
103
|
-
useDbUpsert as useDbUpsert2
|
|
104
|
-
} from "./chunk-3M2U6TXH.js";
|
|
99
|
+
} from "./chunk-U5UNPBKB.js";
|
|
105
100
|
import {
|
|
106
101
|
Constants,
|
|
102
|
+
createCombinedStatus,
|
|
107
103
|
normalizeFilter,
|
|
108
104
|
useDbAdvanceFilterQuery
|
|
109
|
-
} from "./chunk-
|
|
105
|
+
} from "./chunk-H3LNH2NT.js";
|
|
110
106
|
import {
|
|
111
107
|
Accessory,
|
|
112
108
|
Address,
|
|
@@ -279,7 +275,6 @@ import {
|
|
|
279
275
|
TicketCommentAttachment,
|
|
280
276
|
TimeActivity,
|
|
281
277
|
TimeBankTransaction,
|
|
282
|
-
UserMetadata,
|
|
283
278
|
UserTimesheet,
|
|
284
279
|
WeeklyTimesheet,
|
|
285
280
|
WorkEstimation,
|
|
@@ -291,14 +286,33 @@ import {
|
|
|
291
286
|
WorkingPhaseDailySummary,
|
|
292
287
|
WorkingPhaseRoleRate,
|
|
293
288
|
WorkingPhaseSummary
|
|
294
|
-
} from "./chunk-
|
|
289
|
+
} from "./chunk-7SCJNYTE.js";
|
|
290
|
+
import {
|
|
291
|
+
UserMetadata
|
|
292
|
+
} from "./chunk-SM73S2DY.js";
|
|
293
|
+
import "./chunk-NSIAAYW3.js";
|
|
294
|
+
import "./chunk-DJ6VLEAL.js";
|
|
295
295
|
import {
|
|
296
296
|
DEFAULT_QUERY_TIMEOUT,
|
|
297
297
|
TIMEOUT_ERROR_MESSAGE,
|
|
298
298
|
isTimeoutError,
|
|
299
|
-
useDbQuery
|
|
299
|
+
useDbQuery
|
|
300
|
+
} from "./chunk-WGDJ4IXR.js";
|
|
301
|
+
import {
|
|
302
|
+
DataLayerContext,
|
|
303
|
+
useAdvanceQuery,
|
|
304
|
+
useDataLayer,
|
|
305
|
+
useDataLayerOptional,
|
|
306
|
+
useDbCount,
|
|
307
|
+
useDbDelete as useDbDelete2,
|
|
308
|
+
useDbInfiniteQuery as useDbInfiniteQuery2,
|
|
309
|
+
useDbInsert as useDbInsert2,
|
|
310
|
+
useDbQuery as useDbQuery2,
|
|
311
|
+
useDbQueryById,
|
|
312
|
+
useDbUpdate as useDbUpdate2,
|
|
300
313
|
useDbUpsert
|
|
301
|
-
} from "./chunk-
|
|
314
|
+
} from "./chunk-ZVBHWU7O.js";
|
|
315
|
+
import "./chunk-HAWJTZCK.js";
|
|
302
316
|
import {
|
|
303
317
|
QueryExecutor,
|
|
304
318
|
RelationshipResolver,
|
|
@@ -321,15 +335,15 @@ import {
|
|
|
321
335
|
usePartialAdvancedQuery,
|
|
322
336
|
usePartialQuery,
|
|
323
337
|
useQuery
|
|
324
|
-
} from "./chunk-
|
|
338
|
+
} from "./chunk-X3HZLNBV.js";
|
|
325
339
|
import {
|
|
326
340
|
getSupabaseUrl,
|
|
327
341
|
setSupabaseUrl
|
|
328
|
-
} from "./chunk-
|
|
342
|
+
} from "./chunk-GC3TBUWE.js";
|
|
329
343
|
import {
|
|
330
344
|
useBatchDelete,
|
|
331
345
|
useBatchUpsert
|
|
332
|
-
} from "./chunk-
|
|
346
|
+
} from "./chunk-WVF7RUW5.js";
|
|
333
347
|
import {
|
|
334
348
|
OPERATOR_MAP,
|
|
335
349
|
PostgrestParser,
|
|
@@ -343,28 +357,24 @@ import {
|
|
|
343
357
|
parseSelectParam,
|
|
344
358
|
parseValue,
|
|
345
359
|
sortSearchParams
|
|
346
|
-
} from "./chunk-
|
|
360
|
+
} from "./chunk-TKWR5AAY.js";
|
|
347
361
|
import "./chunk-J4ZVCXZ4.js";
|
|
348
|
-
import "./chunk-
|
|
362
|
+
import "./chunk-OQ7U6EQ3.js";
|
|
349
363
|
import "./chunk-H6365JPC.js";
|
|
350
364
|
import "./chunk-3PJTNH2L.js";
|
|
351
365
|
import {
|
|
366
|
+
ClientInstanceId,
|
|
352
367
|
SupabaseProvider,
|
|
353
368
|
createNewSupabaseClient,
|
|
354
369
|
onSupabaseInitialized,
|
|
355
370
|
setDefaultOptions,
|
|
356
371
|
typedSupabase,
|
|
357
372
|
useSupabase
|
|
358
|
-
} from "./chunk-
|
|
373
|
+
} from "./chunk-5EFDS7SR.js";
|
|
359
374
|
import "./chunk-P4UZ7IXC.js";
|
|
360
375
|
|
|
361
376
|
// src/providers/DataLayerProvider.web.tsx
|
|
362
|
-
import {
|
|
363
|
-
useState,
|
|
364
|
-
useEffect,
|
|
365
|
-
useMemo,
|
|
366
|
-
useCallback
|
|
367
|
-
} from "react";
|
|
377
|
+
import { useState, useEffect, useMemo, useCallback } from "react";
|
|
368
378
|
import { jsx } from "react/jsx-runtime";
|
|
369
379
|
var defaultSyncStatus = {
|
|
370
380
|
isConnected: false,
|
|
@@ -395,19 +405,17 @@ function DataLayerProvider({
|
|
|
395
405
|
onInitialized,
|
|
396
406
|
onError
|
|
397
407
|
}) {
|
|
398
|
-
const [registry] = useState(
|
|
399
|
-
|
|
400
|
-
);
|
|
401
|
-
const [autoDetector, setAutoDetector] = useState(
|
|
402
|
-
null
|
|
403
|
-
);
|
|
408
|
+
const [registry] = useState(() => createAdapterRegistry(config));
|
|
409
|
+
const [autoDetector, setAutoDetector] = useState(null);
|
|
404
410
|
const [status, setStatus] = useState({
|
|
405
411
|
isInitialized: false,
|
|
406
412
|
currentBackend: null,
|
|
407
413
|
powerSyncStatus: "unavailable" /* UNAVAILABLE */,
|
|
408
414
|
isOnline: typeof navigator !== "undefined" ? navigator.onLine : true,
|
|
409
415
|
lastDetection: null,
|
|
410
|
-
error: null
|
|
416
|
+
error: null,
|
|
417
|
+
hasSynced: false
|
|
418
|
+
// Web builds don't use PowerSync, so never synced
|
|
411
419
|
});
|
|
412
420
|
useEffect(() => {
|
|
413
421
|
try {
|
|
@@ -415,13 +423,12 @@ function DataLayerProvider({
|
|
|
415
423
|
null,
|
|
416
424
|
// No PowerSync in web builds
|
|
417
425
|
supabaseClient,
|
|
418
|
-
{
|
|
426
|
+
{
|
|
427
|
+
preferPowerSync: false
|
|
428
|
+
}
|
|
419
429
|
);
|
|
420
430
|
setAutoDetector(detector);
|
|
421
|
-
const supabaseAdapter = createSupabaseAdapter(
|
|
422
|
-
supabaseClient,
|
|
423
|
-
config.schema
|
|
424
|
-
);
|
|
431
|
+
const supabaseAdapter = createSupabaseAdapter(supabaseClient, config.schema);
|
|
425
432
|
registry.setSupabaseAdapter(supabaseAdapter);
|
|
426
433
|
registry.initialize({
|
|
427
434
|
powerSync: null,
|
|
@@ -436,7 +443,9 @@ function DataLayerProvider({
|
|
|
436
443
|
powerSyncStatus: detection.powerSyncStatus,
|
|
437
444
|
isOnline: detection.isOnline,
|
|
438
445
|
lastDetection: detection,
|
|
439
|
-
error: null
|
|
446
|
+
error: null,
|
|
447
|
+
hasSynced: false
|
|
448
|
+
// Web builds don't use PowerSync, so never synced
|
|
440
449
|
});
|
|
441
450
|
} catch (error) {
|
|
442
451
|
const err = error instanceof Error ? error : new Error(String(error));
|
|
@@ -446,16 +455,13 @@ function DataLayerProvider({
|
|
|
446
455
|
}));
|
|
447
456
|
onError?.(err);
|
|
448
457
|
}
|
|
449
|
-
}, [
|
|
450
|
-
supabaseClient,
|
|
451
|
-
queryClient,
|
|
452
|
-
config.schema,
|
|
453
|
-
registry,
|
|
454
|
-
onError
|
|
455
|
-
]);
|
|
458
|
+
}, [supabaseClient, queryClient, config.schema, registry, onError]);
|
|
456
459
|
useEffect(() => {
|
|
457
460
|
const handleOnline = () => {
|
|
458
|
-
setStatus((prev) => ({
|
|
461
|
+
setStatus((prev) => ({
|
|
462
|
+
...prev,
|
|
463
|
+
isOnline: true
|
|
464
|
+
}));
|
|
459
465
|
if (autoDetector) {
|
|
460
466
|
const detection = autoDetector.detect();
|
|
461
467
|
setStatus((prev) => ({
|
|
@@ -467,7 +473,10 @@ function DataLayerProvider({
|
|
|
467
473
|
}
|
|
468
474
|
};
|
|
469
475
|
const handleOffline = () => {
|
|
470
|
-
setStatus((prev) => ({
|
|
476
|
+
setStatus((prev) => ({
|
|
477
|
+
...prev,
|
|
478
|
+
isOnline: false
|
|
479
|
+
}));
|
|
471
480
|
if (autoDetector) {
|
|
472
481
|
const detection = autoDetector.detect();
|
|
473
482
|
setStatus((prev) => ({
|
|
@@ -509,12 +518,9 @@ function DataLayerProvider({
|
|
|
509
518
|
}
|
|
510
519
|
}
|
|
511
520
|
}, [status.isInitialized, status.error]);
|
|
512
|
-
const getAdapter = useCallback(
|
|
513
|
-
(table)
|
|
514
|
-
|
|
515
|
-
},
|
|
516
|
-
[registry]
|
|
517
|
-
);
|
|
521
|
+
const getAdapter = useCallback((table) => {
|
|
522
|
+
return registry.getAdapter(table);
|
|
523
|
+
}, [registry]);
|
|
518
524
|
const buildContextValue = useCallback(() => {
|
|
519
525
|
if (!status.isInitialized) return null;
|
|
520
526
|
return {
|
|
@@ -529,18 +535,8 @@ function DataLayerProvider({
|
|
|
529
535
|
syncStatus: defaultSyncStatus,
|
|
530
536
|
syncControl: defaultSyncControl
|
|
531
537
|
};
|
|
532
|
-
}, [
|
|
533
|
-
|
|
534
|
-
getAdapter,
|
|
535
|
-
supabaseClient,
|
|
536
|
-
queryClient,
|
|
537
|
-
config.schema,
|
|
538
|
-
status
|
|
539
|
-
]);
|
|
540
|
-
const contextValue = useMemo(
|
|
541
|
-
() => buildContextValue(),
|
|
542
|
-
[buildContextValue]
|
|
543
|
-
);
|
|
538
|
+
}, [registry, getAdapter, supabaseClient, queryClient, config.schema, status]);
|
|
539
|
+
const contextValue = useMemo(() => buildContextValue(), [buildContextValue]);
|
|
544
540
|
useEffect(() => {
|
|
545
541
|
return () => {
|
|
546
542
|
registry.dispose();
|
|
@@ -571,6 +567,7 @@ export {
|
|
|
571
567
|
ChargeTable,
|
|
572
568
|
Circuit,
|
|
573
569
|
Client,
|
|
570
|
+
ClientInstanceId,
|
|
574
571
|
Comment,
|
|
575
572
|
CommentReaction,
|
|
576
573
|
CommentRead,
|
|
@@ -748,6 +745,7 @@ export {
|
|
|
748
745
|
TimeActivity,
|
|
749
746
|
TimeBankTransaction,
|
|
750
747
|
UserMetadata,
|
|
748
|
+
UserMetadataContextProvider,
|
|
751
749
|
UserTimesheet,
|
|
752
750
|
WeeklyTimesheet,
|
|
753
751
|
WorkEstimation,
|
|
@@ -764,6 +762,7 @@ export {
|
|
|
764
762
|
convertFilterToRealtimeQuery,
|
|
765
763
|
createAdapterAutoDetector,
|
|
766
764
|
createAdapterRegistry,
|
|
765
|
+
createCombinedStatus,
|
|
767
766
|
createInCondition,
|
|
768
767
|
createNewSupabaseClient,
|
|
769
768
|
createQueryExecutor,
|
|
@@ -857,7 +856,7 @@ export {
|
|
|
857
856
|
useDbUpdate,
|
|
858
857
|
useDbUpdate2 as useDbUpdateV3,
|
|
859
858
|
useDbUpsert,
|
|
860
|
-
|
|
859
|
+
useDbUpsert as useDbUpsertV3,
|
|
861
860
|
useDbDelete as useDelete,
|
|
862
861
|
useDeleteChangelog,
|
|
863
862
|
useDeleteChangelogEntry,
|
|
@@ -867,6 +866,7 @@ export {
|
|
|
867
866
|
useDbInsert as useInsert,
|
|
868
867
|
useLatestOperationLog,
|
|
869
868
|
useLiveChangeTracking,
|
|
869
|
+
useLiveChangesIndicator,
|
|
870
870
|
useMultiDeleteChangelogEntries,
|
|
871
871
|
useMultiUpsertChangelogEntries,
|
|
872
872
|
useMutationSuccess,
|
|
@@ -881,6 +881,7 @@ export {
|
|
|
881
881
|
useResolveFeedback,
|
|
882
882
|
useSearchQuery,
|
|
883
883
|
useServerAvailability,
|
|
884
|
+
useSetUserMetadata,
|
|
884
885
|
useStoragePath,
|
|
885
886
|
useStorageUrl,
|
|
886
887
|
useSubmitFeedback,
|
|
@@ -892,6 +893,10 @@ export {
|
|
|
892
893
|
useDbUpsert as useUpsert,
|
|
893
894
|
useUpsertChangelog,
|
|
894
895
|
useUpsertChangelogEntry,
|
|
895
|
-
useUpsertChangelogMedia
|
|
896
|
+
useUpsertChangelogMedia,
|
|
897
|
+
useUserMetadata,
|
|
898
|
+
useUserMetadataState,
|
|
899
|
+
useUserMetadataValue,
|
|
900
|
+
userMetadataContext
|
|
896
901
|
};
|
|
897
902
|
//# sourceMappingURL=index.web.js.map
|
package/dist/index.web.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/providers/DataLayerProvider.web.tsx"],"sourcesContent":["/**\n * V3 Data Layer Provider - Web/Browser Version\n *\n * React context provider that initializes adapters and provides context for all V3 hooks.\n * This is a browser-safe version that excludes PowerSync dependencies.\n *\n * For React Native apps that need PowerSync, use the default DataLayerProvider instead.\n */\n\nimport React, {\n useState,\n useEffect,\n useMemo,\n useCallback,\n ReactNode,\n JSX,\n} from \"react\";\nimport type { SupabaseClient } from \"@supabase/supabase-js\";\nimport type { QueryClient } from \"@tanstack/react-query\";\nimport {\n DataLayerContext,\n DataLayerContextValue,\n DataLayerStatus,\n} from \"./DataLayerContext\";\nimport { AdapterRegistry, createAdapterRegistry } from \"../adapters/registry\";\nimport {\n AdapterAutoDetector,\n BackendStatus,\n createAdapterAutoDetector,\n} from \"../adapters/auto-detector\";\nimport { createSupabaseAdapter } from \"../adapters/supabase-adapter\";\nimport type { DataLayerConfig, SyncStatus, SyncControl } from \"../core/types\";\n\n// =============================================================================\n// Props Type\n// =============================================================================\n\n/**\n * Props for DataLayerProvider (Web version)\n */\nexport interface DataLayerProviderProps {\n /** Data layer configuration */\n config: DataLayerConfig;\n\n /** Children to render */\n children: ReactNode;\n\n /** Supabase client (required) */\n supabaseClient: SupabaseClient;\n\n /** React Query client (required) */\n queryClient: QueryClient;\n\n /** Callback when initialization completes */\n onInitialized?: (context: DataLayerContextValue) => void;\n\n /** Callback when error occurs */\n onError?: (error: Error) => void;\n}\n\n// =============================================================================\n// Default Values\n// =============================================================================\n\n/**\n * Default sync status for when PowerSync is not available\n */\nconst defaultSyncStatus: SyncStatus = {\n isConnected: false,\n isSyncing: false,\n lastSyncedAt: null,\n pendingUploads: 0,\n error: null,\n};\n\n/**\n * Default sync control for when PowerSync is not available\n */\nconst defaultSyncControl: SyncControl = {\n triggerSync: async () => {\n console.warn(\"Sync not available: PowerSync not initialized\");\n },\n startLiveSync: async () => {\n console.warn(\"Live sync not available: PowerSync not initialized\");\n },\n stopLiveSync: () => {\n console.warn(\"Live sync not available: PowerSync not initialized\");\n },\n setScope: async () => {\n console.warn(\"Scope control not available: PowerSync not initialized\");\n },\n};\n\n// =============================================================================\n// Provider Component\n// =============================================================================\n\n/**\n * Provider component for the V3 data layer (Web/Browser version).\n *\n * This provider:\n * - Creates and manages the AdapterRegistry\n * - Initializes the AdapterAutoDetector for backend selection\n * - Sets up Supabase adapter (PowerSync not supported in web builds)\n * - Tracks online/offline status\n * - Provides context for all V3 hooks\n *\n * Note: This is the browser-safe version that does NOT support PowerSync.\n * For React Native apps that need PowerSync, use the default DataLayerProvider.\n *\n * @example\n * ```tsx\n * import { DataLayerProvider } from \"@pol-studios/db/web\";\n *\n * function App() {\n * return (\n * <DataLayerProvider\n * config={dataLayerConfig}\n * supabaseClient={supabase}\n * queryClient={queryClient}\n * >\n * <YourApp />\n * </DataLayerProvider>\n * );\n * }\n * ```\n */\nexport function DataLayerProvider({\n config,\n children,\n supabaseClient,\n queryClient,\n onInitialized,\n onError,\n}: DataLayerProviderProps): JSX.Element {\n // Create registry (stable across renders)\n const [registry] = useState<AdapterRegistry>(() =>\n createAdapterRegistry(config)\n );\n\n // Track auto-detector instance\n const [autoDetector, setAutoDetector] = useState<AdapterAutoDetector | null>(\n null\n );\n\n // Track status\n const [status, setStatus] = useState<DataLayerStatus>({\n isInitialized: false,\n currentBackend: null,\n powerSyncStatus: BackendStatus.UNAVAILABLE,\n isOnline: typeof navigator !== \"undefined\" ? navigator.onLine : true,\n lastDetection: null,\n error: null,\n });\n\n // ===========================================================================\n // Initialization Effect\n // ===========================================================================\n\n useEffect(() => {\n try {\n // Create auto-detector (no PowerSync instance for web builds)\n const detector = createAdapterAutoDetector(\n null, // No PowerSync in web builds\n supabaseClient,\n { preferPowerSync: false }\n );\n setAutoDetector(detector);\n\n // Create and set Supabase adapter (always available)\n const supabaseAdapter = createSupabaseAdapter(\n supabaseClient,\n config.schema\n );\n registry.setSupabaseAdapter(supabaseAdapter);\n\n // Initialize registry with dependencies (no PowerSync)\n registry.initialize({\n powerSync: null,\n supabase: supabaseClient,\n queryClient,\n schema: config.schema,\n });\n\n // Perform initial detection\n const detection = detector.detect();\n\n // Update status\n setStatus({\n isInitialized: true,\n currentBackend: detection.recommendedBackend,\n powerSyncStatus: detection.powerSyncStatus,\n isOnline: detection.isOnline,\n lastDetection: detection,\n error: null,\n });\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n setStatus((prev) => ({\n ...prev,\n error: err,\n }));\n onError?.(err);\n }\n }, [\n supabaseClient,\n queryClient,\n config.schema,\n registry,\n onError,\n ]);\n\n // ===========================================================================\n // Online/Offline Status Effect\n // ===========================================================================\n\n useEffect(() => {\n const handleOnline = () => {\n setStatus((prev) => ({ ...prev, isOnline: true }));\n // Re-run detection when coming online\n if (autoDetector) {\n const detection = autoDetector.detect();\n setStatus((prev) => ({\n ...prev,\n currentBackend: detection.recommendedBackend,\n powerSyncStatus: detection.powerSyncStatus,\n lastDetection: detection,\n }));\n }\n };\n\n const handleOffline = () => {\n setStatus((prev) => ({ ...prev, isOnline: false }));\n // Re-run detection when going offline\n if (autoDetector) {\n const detection = autoDetector.detect();\n setStatus((prev) => ({\n ...prev,\n currentBackend: detection.recommendedBackend,\n powerSyncStatus: detection.powerSyncStatus,\n lastDetection: detection,\n }));\n }\n };\n\n // Only add window event listeners in browser environment\n const isBrowser = typeof window !== \"undefined\" && typeof window.addEventListener === \"function\";\n if (isBrowser) {\n window.addEventListener(\"online\", handleOnline);\n window.addEventListener(\"offline\", handleOffline);\n return () => {\n window.removeEventListener(\"online\", handleOnline);\n window.removeEventListener(\"offline\", handleOffline);\n };\n }\n }, [autoDetector]);\n\n // ===========================================================================\n // Backend Change Listener Effect\n // ===========================================================================\n\n useEffect(() => {\n if (!autoDetector) return;\n\n const unsubscribe = autoDetector.addListener((detection) => {\n setStatus((prev) => ({\n ...prev,\n currentBackend: detection.recommendedBackend,\n powerSyncStatus: detection.powerSyncStatus,\n isOnline: detection.isOnline,\n lastDetection: detection,\n }));\n });\n\n return unsubscribe;\n }, [autoDetector]);\n\n // ===========================================================================\n // Initialization Callback Effect\n // ===========================================================================\n\n useEffect(() => {\n if (status.isInitialized && !status.error && onInitialized) {\n const contextValue = buildContextValue();\n if (contextValue) {\n onInitialized(contextValue);\n }\n }\n // Only run when initialization state changes\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [status.isInitialized, status.error]);\n\n // ===========================================================================\n // Helper Functions\n // ===========================================================================\n\n /**\n * Get adapter for a specific table\n */\n const getAdapter = useCallback(\n (table: string) => {\n return registry.getAdapter(table);\n },\n [registry]\n );\n\n /**\n * Build the context value object\n */\n const buildContextValue = useCallback((): DataLayerContextValue | null => {\n if (!status.isInitialized) return null;\n\n return {\n registry,\n getAdapter,\n powerSync: null, // No PowerSync in web builds\n supabase: supabaseClient,\n queryClient,\n schema: config.schema,\n status,\n syncStatus: defaultSyncStatus,\n syncControl: defaultSyncControl,\n };\n }, [\n registry,\n getAdapter,\n supabaseClient,\n queryClient,\n config.schema,\n status,\n ]);\n\n // ===========================================================================\n // Context Value Memoization\n // ===========================================================================\n\n const contextValue = useMemo(\n () => buildContextValue(),\n [buildContextValue]\n );\n\n // ===========================================================================\n // Cleanup Effect\n // ===========================================================================\n\n useEffect(() => {\n return () => {\n // Dispose registry on unmount\n registry.dispose();\n };\n }, [registry]);\n\n // ===========================================================================\n // Render\n // ===========================================================================\n\n // Don't render children until the data layer is initialized.\n // This prevents hooks from being called before the context is ready.\n // The provider will render children once initialization completes.\n if (!contextValue) {\n return null;\n }\n\n return (\n <DataLayerContext.Provider value={contextValue}>\n {children}\n </DataLayerContext.Provider>\n );\n}\n\nexport default DataLayerProvider;\n"],"mappings":"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","names":["contextValue"]}
|
|
1
|
+
{"version":3,"sources":["../src/providers/DataLayerProvider.web.tsx"],"sourcesContent":["/**\n * V3 Data Layer Provider - Web/Browser Version\n *\n * React context provider that initializes adapters and provides context for all V3 hooks.\n * This is a browser-safe version that excludes PowerSync dependencies.\n *\n * For React Native apps that need PowerSync, use the default DataLayerProvider instead.\n */\n\nimport React, { useState, useEffect, useMemo, useCallback, ReactNode, JSX } from \"react\";\nimport type { SupabaseClient } from \"@supabase/supabase-js\";\nimport type { QueryClient } from \"@tanstack/react-query\";\nimport { DataLayerContext, DataLayerContextValue, DataLayerStatus } from \"./DataLayerContext\";\nimport { AdapterRegistry, createAdapterRegistry } from \"../adapters/registry\";\nimport { AdapterAutoDetector, BackendStatus, createAdapterAutoDetector } from \"../adapters/auto-detector\";\nimport { createSupabaseAdapter } from \"../adapters/supabase-adapter\";\nimport type { DataLayerConfig, SyncStatus, SyncControl } from \"../core/types\";\n\n// =============================================================================\n// Props Type\n// =============================================================================\n\n/**\n * Props for DataLayerProvider (Web version)\n */\nexport interface DataLayerProviderProps {\n /** Data layer configuration */\n config: DataLayerConfig;\n\n /** Children to render */\n children: ReactNode;\n\n /** Supabase client (required) */\n supabaseClient: SupabaseClient;\n\n /** React Query client (required) */\n queryClient: QueryClient;\n\n /** Callback when initialization completes */\n onInitialized?: (context: DataLayerContextValue) => void;\n\n /** Callback when error occurs */\n onError?: (error: Error) => void;\n}\n\n// =============================================================================\n// Default Values\n// =============================================================================\n\n/**\n * Default sync status for when PowerSync is not available\n */\nconst defaultSyncStatus: SyncStatus = {\n isConnected: false,\n isSyncing: false,\n lastSyncedAt: null,\n pendingUploads: 0,\n error: null\n};\n\n/**\n * Default sync control for when PowerSync is not available\n */\nconst defaultSyncControl: SyncControl = {\n triggerSync: async () => {\n console.warn(\"Sync not available: PowerSync not initialized\");\n },\n startLiveSync: async () => {\n console.warn(\"Live sync not available: PowerSync not initialized\");\n },\n stopLiveSync: () => {\n console.warn(\"Live sync not available: PowerSync not initialized\");\n },\n setScope: async () => {\n console.warn(\"Scope control not available: PowerSync not initialized\");\n }\n};\n\n// =============================================================================\n// Provider Component\n// =============================================================================\n\n/**\n * Provider component for the V3 data layer (Web/Browser version).\n *\n * This provider:\n * - Creates and manages the AdapterRegistry\n * - Initializes the AdapterAutoDetector for backend selection\n * - Sets up Supabase adapter (PowerSync not supported in web builds)\n * - Tracks online/offline status\n * - Provides context for all V3 hooks\n *\n * Note: This is the browser-safe version that does NOT support PowerSync.\n * For React Native apps that need PowerSync, use the default DataLayerProvider.\n *\n * @example\n * ```tsx\n * import { DataLayerProvider } from \"@pol-studios/db/web\";\n *\n * function App() {\n * return (\n * <DataLayerProvider\n * config={dataLayerConfig}\n * supabaseClient={supabase}\n * queryClient={queryClient}\n * >\n * <YourApp />\n * </DataLayerProvider>\n * );\n * }\n * ```\n */\nexport function DataLayerProvider({\n config,\n children,\n supabaseClient,\n queryClient,\n onInitialized,\n onError\n}: DataLayerProviderProps): JSX.Element {\n // Create registry (stable across renders)\n const [registry] = useState<AdapterRegistry>(() => createAdapterRegistry(config));\n\n // Track auto-detector instance\n const [autoDetector, setAutoDetector] = useState<AdapterAutoDetector | null>(null);\n\n // Track status\n const [status, setStatus] = useState<DataLayerStatus>({\n isInitialized: false,\n currentBackend: null,\n powerSyncStatus: BackendStatus.UNAVAILABLE,\n isOnline: typeof navigator !== \"undefined\" ? navigator.onLine : true,\n lastDetection: null,\n error: null,\n hasSynced: false // Web builds don't use PowerSync, so never synced\n });\n\n // ===========================================================================\n // Initialization Effect\n // ===========================================================================\n\n useEffect(() => {\n try {\n // Create auto-detector (no PowerSync instance for web builds)\n const detector = createAdapterAutoDetector(null,\n // No PowerSync in web builds\n supabaseClient, {\n preferPowerSync: false\n });\n setAutoDetector(detector);\n\n // Create and set Supabase adapter (always available)\n const supabaseAdapter = createSupabaseAdapter(supabaseClient, config.schema);\n registry.setSupabaseAdapter(supabaseAdapter);\n\n // Initialize registry with dependencies (no PowerSync)\n registry.initialize({\n powerSync: null,\n supabase: supabaseClient,\n queryClient,\n schema: config.schema\n });\n\n // Perform initial detection\n const detection = detector.detect();\n\n // Update status\n setStatus({\n isInitialized: true,\n currentBackend: detection.recommendedBackend,\n powerSyncStatus: detection.powerSyncStatus,\n isOnline: detection.isOnline,\n lastDetection: detection,\n error: null,\n hasSynced: false // Web builds don't use PowerSync, so never synced\n });\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n setStatus(prev => ({\n ...prev,\n error: err\n }));\n onError?.(err);\n }\n }, [supabaseClient, queryClient, config.schema, registry, onError]);\n\n // ===========================================================================\n // Online/Offline Status Effect\n // ===========================================================================\n\n useEffect(() => {\n const handleOnline = () => {\n setStatus(prev => ({\n ...prev,\n isOnline: true\n }));\n // Re-run detection when coming online\n if (autoDetector) {\n const detection = autoDetector.detect();\n setStatus(prev => ({\n ...prev,\n currentBackend: detection.recommendedBackend,\n powerSyncStatus: detection.powerSyncStatus,\n lastDetection: detection\n }));\n }\n };\n const handleOffline = () => {\n setStatus(prev => ({\n ...prev,\n isOnline: false\n }));\n // Re-run detection when going offline\n if (autoDetector) {\n const detection = autoDetector.detect();\n setStatus(prev => ({\n ...prev,\n currentBackend: detection.recommendedBackend,\n powerSyncStatus: detection.powerSyncStatus,\n lastDetection: detection\n }));\n }\n };\n\n // Only add window event listeners in browser environment\n const isBrowser = typeof window !== \"undefined\" && typeof window.addEventListener === \"function\";\n if (isBrowser) {\n window.addEventListener(\"online\", handleOnline);\n window.addEventListener(\"offline\", handleOffline);\n return () => {\n window.removeEventListener(\"online\", handleOnline);\n window.removeEventListener(\"offline\", handleOffline);\n };\n }\n }, [autoDetector]);\n\n // ===========================================================================\n // Backend Change Listener Effect\n // ===========================================================================\n\n useEffect(() => {\n if (!autoDetector) return;\n const unsubscribe = autoDetector.addListener(detection => {\n setStatus(prev => ({\n ...prev,\n currentBackend: detection.recommendedBackend,\n powerSyncStatus: detection.powerSyncStatus,\n isOnline: detection.isOnline,\n lastDetection: detection\n }));\n });\n return unsubscribe;\n }, [autoDetector]);\n\n // ===========================================================================\n // Initialization Callback Effect\n // ===========================================================================\n\n useEffect(() => {\n if (status.isInitialized && !status.error && onInitialized) {\n const contextValue = buildContextValue();\n if (contextValue) {\n onInitialized(contextValue);\n }\n }\n // Only run when initialization state changes\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [status.isInitialized, status.error]);\n\n // ===========================================================================\n // Helper Functions\n // ===========================================================================\n\n /**\n * Get adapter for a specific table\n */\n const getAdapter = useCallback((table: string) => {\n return registry.getAdapter(table);\n }, [registry]);\n\n /**\n * Build the context value object\n */\n const buildContextValue = useCallback((): DataLayerContextValue | null => {\n if (!status.isInitialized) return null;\n return {\n registry,\n getAdapter,\n powerSync: null,\n // No PowerSync in web builds\n supabase: supabaseClient,\n queryClient,\n schema: config.schema,\n status,\n syncStatus: defaultSyncStatus,\n syncControl: defaultSyncControl\n };\n }, [registry, getAdapter, supabaseClient, queryClient, config.schema, status]);\n\n // ===========================================================================\n // Context Value Memoization\n // ===========================================================================\n\n const contextValue = useMemo(() => buildContextValue(), [buildContextValue]);\n\n // ===========================================================================\n // Cleanup Effect\n // ===========================================================================\n\n useEffect(() => {\n return () => {\n // Dispose registry on unmount\n registry.dispose();\n };\n }, [registry]);\n\n // ===========================================================================\n // Render\n // ===========================================================================\n\n // Don't render children until the data layer is initialized.\n // This prevents hooks from being called before the context is ready.\n // The provider will render children once initialization completes.\n if (!contextValue) {\n return null;\n }\n return <DataLayerContext.Provider value={contextValue}>\n {children}\n </DataLayerContext.Provider>;\n}\nexport default DataLayerProvider;"],"mappings":"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","names":["contextValue"]}
|
package/dist/mutation/index.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
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 { useInsertMutation, useUpdateMutation } from '@supabase-cache-helpers/postgrest-react-query';
|
|
4
4
|
import { G as GetResult } from '../select-query-parser-BwyHum1L.js';
|
|
5
5
|
import { j as GenericSchema } from '../types-CYr9JiUE.js';
|
|
6
|
-
export { u as useBatchDelete, a as useBatchUpsert } from '../useBatchUpsert-
|
|
6
|
+
export { u as useBatchDelete, a as useBatchUpsert } from '../useBatchUpsert-9OYjibLh.js';
|
|
7
7
|
import 'react/jsx-runtime';
|
|
8
8
|
import '@supabase/supabase-js/dist/module/lib/types.js';
|
|
9
9
|
import 'react';
|