@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.
Files changed (120) hide show
  1. package/dist/DataLayerContext-CL6alnkb.d.ts +755 -0
  2. package/dist/UserMetadataContext-B8gVWGMl.d.ts +35 -0
  3. package/dist/UserMetadataContext-DntmpK41.d.ts +33 -0
  4. package/dist/auth/context.d.ts +3 -2
  5. package/dist/auth/context.js +5 -4
  6. package/dist/auth/guards.js +2 -2
  7. package/dist/auth/hooks.d.ts +3 -3
  8. package/dist/auth/hooks.js +6 -5
  9. package/dist/auth/index.d.ts +3 -2
  10. package/dist/auth/index.js +8 -6
  11. package/dist/{canvas-UVNDA54X.node → canvas-C4TBBDUL.node} +0 -0
  12. package/dist/{canvas-75Y7XMF3.js → canvas-ZQNCL7JL.js} +2 -2
  13. package/dist/chunk-5EFDS7SR.js +205 -0
  14. package/dist/chunk-5EFDS7SR.js.map +1 -0
  15. package/dist/{chunk-BRTW7CO5.js → chunk-7SCJNYTE.js} +1 -9
  16. package/dist/chunk-7SCJNYTE.js.map +1 -0
  17. package/dist/chunk-DJ6VLEAL.js +247 -0
  18. package/dist/chunk-DJ6VLEAL.js.map +1 -0
  19. package/dist/{chunk-Y3INY2CS.js → chunk-GC3TBUWE.js} +1 -1
  20. package/dist/chunk-GC3TBUWE.js.map +1 -0
  21. package/dist/{chunk-7HG6G25H.js → chunk-H3LNH2NT.js} +169 -268
  22. package/dist/chunk-H3LNH2NT.js.map +1 -0
  23. package/dist/{chunk-USJYMRUO.js → chunk-HAWJTZCK.js} +2 -2
  24. package/dist/chunk-HAWJTZCK.js.map +1 -0
  25. package/dist/chunk-JAATANS3.js +429 -0
  26. package/dist/chunk-JAATANS3.js.map +1 -0
  27. package/dist/chunk-LNJ3WF7V.js +470 -0
  28. package/dist/chunk-LNJ3WF7V.js.map +1 -0
  29. package/dist/chunk-N26IEHZT.js +79 -0
  30. package/dist/chunk-N26IEHZT.js.map +1 -0
  31. package/dist/chunk-NSIAAYW3.js +1 -0
  32. package/dist/chunk-NSIAAYW3.js.map +1 -0
  33. package/dist/chunk-NZON56CB.js +3864 -0
  34. package/dist/chunk-NZON56CB.js.map +1 -0
  35. package/dist/{chunk-O3K7R32P.js → chunk-OQ7U6EQ3.js} +118 -123
  36. package/dist/chunk-OQ7U6EQ3.js.map +1 -0
  37. package/dist/chunk-SM73S2DY.js +11 -0
  38. package/dist/chunk-SM73S2DY.js.map +1 -0
  39. package/dist/{chunk-JUVE3DWY.js → chunk-TKWR5AAY.js} +47 -65
  40. package/dist/chunk-TKWR5AAY.js.map +1 -0
  41. package/dist/{chunk-2IFGILT3.js → chunk-U5UNPBKB.js} +76 -107
  42. package/dist/chunk-U5UNPBKB.js.map +1 -0
  43. package/dist/chunk-WGDJ4IXR.js +921 -0
  44. package/dist/chunk-WGDJ4IXR.js.map +1 -0
  45. package/dist/chunk-WVF7RUW5.js +186 -0
  46. package/dist/chunk-WVF7RUW5.js.map +1 -0
  47. package/dist/{chunk-ZTSBF536.js → chunk-X3HZLNBV.js} +637 -435
  48. package/dist/chunk-X3HZLNBV.js.map +1 -0
  49. package/dist/{chunk-EL45Z26M.js → chunk-XU3SBFAG.js} +1219 -208
  50. package/dist/chunk-XU3SBFAG.js.map +1 -0
  51. package/dist/chunk-ZVBHWU7O.js +1412 -0
  52. package/dist/chunk-ZVBHWU7O.js.map +1 -0
  53. package/dist/client/index.d.ts +1 -1
  54. package/dist/client/index.js +42 -23
  55. package/dist/client/index.js.map +1 -1
  56. package/dist/core/index.d.ts +19 -0
  57. package/dist/{index-BFu5_dS8.d.ts → database.types-ChFCG-4M.d.ts} +1 -177
  58. package/dist/gen/index.js +4 -2
  59. package/dist/hooks/index.d.ts +10 -3
  60. package/dist/hooks/index.js +8 -10
  61. package/dist/index-CQLyNG6A.d.ts +433 -0
  62. package/dist/index.d.ts +12 -8
  63. package/dist/index.js +92 -48
  64. package/dist/index.native.d.ts +373 -33
  65. package/dist/index.native.js +79 -47
  66. package/dist/index.web.d.ts +10 -7
  67. package/dist/index.web.js +83 -78
  68. package/dist/index.web.js.map +1 -1
  69. package/dist/mutation/index.d.ts +2 -2
  70. package/dist/mutation/index.js +307 -122
  71. package/dist/mutation/index.js.map +1 -1
  72. package/dist/parser/index.js +2 -2
  73. package/dist/{pdf-3TIGQRLA.js → pdf-PHXP7RHD.js} +2 -2
  74. package/dist/powersync-bridge/index.d.ts +284 -0
  75. package/dist/powersync-bridge/index.js +22 -0
  76. package/dist/powersync-bridge/index.js.map +1 -0
  77. package/dist/query/index.js +5 -5
  78. package/dist/realtime/index.js +252 -128
  79. package/dist/realtime/index.js.map +1 -1
  80. package/dist/{UserMetadataContext-BYYqA6LI.d.ts → setupAuthContext-Kv-THH-h.d.ts} +1 -29
  81. package/dist/types/index.d.ts +5 -1
  82. package/dist/types/index.js +10 -5
  83. package/dist/{useBatchUpsert-CSQVX7w8.d.ts → useBatchUpsert-9OYjibLh.d.ts} +1 -1
  84. package/dist/{useDbCount-RGCuHmHp.d.ts → useDbCount-BG356T9i.d.ts} +3 -719
  85. package/dist/{useReceiptAI-Bn0czE7C.d.ts → useReceiptAI-6HkRpRml.d.ts} +1 -1
  86. package/dist/{useResolveFeedback-CpZPP8Pw.d.ts → useResolveFeedback-BWmatBlE.d.ts} +26 -45
  87. package/dist/{useSupabase-pPhUZHcl.d.ts → useSupabase-DvWVuHHE.d.ts} +2 -1
  88. package/dist/with-auth/index.d.ts +704 -0
  89. package/dist/with-auth/index.js +1221 -0
  90. package/dist/with-auth/index.js.map +1 -0
  91. package/package.json +25 -10
  92. package/dist/chunk-2IFGILT3.js.map +0 -1
  93. package/dist/chunk-3M2U6TXH.js +0 -928
  94. package/dist/chunk-3M2U6TXH.js.map +0 -1
  95. package/dist/chunk-5ZYAEGCJ.js +0 -416
  96. package/dist/chunk-5ZYAEGCJ.js.map +0 -1
  97. package/dist/chunk-7HG6G25H.js.map +0 -1
  98. package/dist/chunk-7XT7K4QT.js +0 -2687
  99. package/dist/chunk-7XT7K4QT.js.map +0 -1
  100. package/dist/chunk-AWFMICFV.js +0 -158
  101. package/dist/chunk-AWFMICFV.js.map +0 -1
  102. package/dist/chunk-BRTW7CO5.js.map +0 -1
  103. package/dist/chunk-EL45Z26M.js.map +0 -1
  104. package/dist/chunk-ERGF2FCE.js +0 -903
  105. package/dist/chunk-ERGF2FCE.js.map +0 -1
  106. package/dist/chunk-GK7B66LY.js +0 -135
  107. package/dist/chunk-GK7B66LY.js.map +0 -1
  108. package/dist/chunk-GQI6WJGI.js +0 -172
  109. package/dist/chunk-GQI6WJGI.js.map +0 -1
  110. package/dist/chunk-JUVE3DWY.js.map +0 -1
  111. package/dist/chunk-O3K7R32P.js.map +0 -1
  112. package/dist/chunk-SEY5UO2T.js +0 -89
  113. package/dist/chunk-SEY5UO2T.js.map +0 -1
  114. package/dist/chunk-USJYMRUO.js.map +0 -1
  115. package/dist/chunk-XX3IWSPM.js +0 -189
  116. package/dist/chunk-XX3IWSPM.js.map +0 -1
  117. package/dist/chunk-Y3INY2CS.js.map +0 -1
  118. package/dist/chunk-ZTSBF536.js.map +0 -1
  119. /package/dist/{canvas-75Y7XMF3.js.map → canvas-ZQNCL7JL.js.map} +0 -0
  120. /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-5ZYAEGCJ.js";
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-7XT7K4QT.js";
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-2IFGILT3.js";
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-7HG6G25H.js";
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-BRTW7CO5.js";
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-GK7B66LY.js";
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-ZTSBF536.js";
338
+ } from "./chunk-X3HZLNBV.js";
325
339
  import {
326
340
  getSupabaseUrl,
327
341
  setSupabaseUrl
328
- } from "./chunk-Y3INY2CS.js";
342
+ } from "./chunk-GC3TBUWE.js";
329
343
  import {
330
344
  useBatchDelete,
331
345
  useBatchUpsert
332
- } from "./chunk-SEY5UO2T.js";
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-JUVE3DWY.js";
360
+ } from "./chunk-TKWR5AAY.js";
347
361
  import "./chunk-J4ZVCXZ4.js";
348
- import "./chunk-O3K7R32P.js";
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-AWFMICFV.js";
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
- () => createAdapterRegistry(config)
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
- { preferPowerSync: false }
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) => ({ ...prev, isOnline: true }));
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) => ({ ...prev, isOnline: false }));
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
- return registry.getAdapter(table);
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
- registry,
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
- useDbUpsert2 as useDbUpsertV3,
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
@@ -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"]}
@@ -1,9 +1,9 @@
1
1
  import * as _tanstack_react_query from '@tanstack/react-query';
2
- import { D as Database } from '../useSupabase-pPhUZHcl.js';
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-CSQVX7w8.js';
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';