@pol-studios/db 1.0.57 → 1.0.59

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 (49) hide show
  1. package/dist/DataLayerContext-V5FotiSk.d.ts +563 -0
  2. package/dist/auth/context.js +2 -2
  3. package/dist/auth/hooks.js +3 -3
  4. package/dist/auth/index.js +3 -3
  5. package/dist/{chunk-YRIPM2AN.js → chunk-4PZ744G2.js} +207 -6
  6. package/dist/chunk-4PZ744G2.js.map +1 -0
  7. package/dist/{chunk-6SDH7M7J.js → chunk-ARALLEDJ.js} +2 -2
  8. package/dist/{chunk-Z456IHCB.js → chunk-F4HW4NT5.js} +1 -1
  9. package/dist/chunk-F4HW4NT5.js.map +1 -0
  10. package/dist/{chunk-VSJKGPRI.js → chunk-K46TGKB2.js} +323 -379
  11. package/dist/chunk-K46TGKB2.js.map +1 -0
  12. package/dist/{chunk-GWYTROSD.js → chunk-L4DFVMTS.js} +335 -4
  13. package/dist/chunk-L4DFVMTS.js.map +1 -0
  14. package/dist/{chunk-MEBT5YHA.js → chunk-SNPZMRBC.js} +2 -2
  15. package/dist/{chunk-DDL63KLQ.js → chunk-VADZSRHY.js} +16 -337
  16. package/dist/chunk-VADZSRHY.js.map +1 -0
  17. package/dist/{chunk-4EO55YV2.js → chunk-VSY6766U.js} +4 -4
  18. package/dist/{chunk-VYFAMTHI.js → chunk-WY6MNB6K.js} +2 -2
  19. package/dist/core/index.d.ts +1 -1
  20. package/dist/{executor-D15yjeMo.d.ts → executor-Bu1OlqCl.d.ts} +43 -3
  21. package/dist/hooks/index.d.ts +3 -3
  22. package/dist/hooks/index.js +2 -2
  23. package/dist/{index-CFUuTzXO.d.ts → index-vwVJ0BWj.d.ts} +1 -9
  24. package/dist/index.d.ts +5 -5
  25. package/dist/index.js +20 -12
  26. package/dist/index.native.d.ts +77 -76
  27. package/dist/index.native.js +20 -12
  28. package/dist/index.web.d.ts +21 -44
  29. package/dist/index.web.js +215 -149
  30. package/dist/index.web.js.map +1 -1
  31. package/dist/powersync-bridge/index.d.ts +1 -1
  32. package/dist/query/index.d.ts +1 -1
  33. package/dist/query/index.js +1 -1
  34. package/dist/types/index.d.ts +3 -3
  35. package/dist/types/index.js +1 -1
  36. package/dist/{useDbCount-Ckb-FhZk.d.ts → useDbCount-dCkdaBpP.d.ts} +41 -83
  37. package/dist/{useResolveFeedback-CuUkdHoR.d.ts → useResolveFeedback-thFi-4h8.d.ts} +429 -5
  38. package/dist/with-auth/index.js +5 -5
  39. package/package.json +1 -1
  40. package/dist/DataLayerContext-BYZtDD0g.d.ts +0 -946
  41. package/dist/chunk-DDL63KLQ.js.map +0 -1
  42. package/dist/chunk-GWYTROSD.js.map +0 -1
  43. package/dist/chunk-VSJKGPRI.js.map +0 -1
  44. package/dist/chunk-YRIPM2AN.js.map +0 -1
  45. package/dist/chunk-Z456IHCB.js.map +0 -1
  46. /package/dist/{chunk-6SDH7M7J.js.map → chunk-ARALLEDJ.js.map} +0 -0
  47. /package/dist/{chunk-MEBT5YHA.js.map → chunk-SNPZMRBC.js.map} +0 -0
  48. /package/dist/{chunk-4EO55YV2.js.map → chunk-VSY6766U.js.map} +0 -0
  49. /package/dist/{chunk-VYFAMTHI.js.map → chunk-WY6MNB6K.js.map} +0 -0
@@ -1,15 +1,15 @@
1
1
  import {
2
2
  useDbUpsert
3
- } from "./chunk-VYFAMTHI.js";
3
+ } from "./chunk-WY6MNB6K.js";
4
4
  import {
5
5
  UserMetadata
6
6
  } from "./chunk-SM73S2DY.js";
7
7
  import {
8
8
  useSetupAuth
9
- } from "./chunk-MEBT5YHA.js";
9
+ } from "./chunk-SNPZMRBC.js";
10
10
  import {
11
11
  useDbQuery
12
- } from "./chunk-6SDH7M7J.js";
12
+ } from "./chunk-ARALLEDJ.js";
13
13
  import {
14
14
  useSupabase
15
15
  } from "./chunk-DMVUEJG2.js";
@@ -470,4 +470,4 @@ export {
470
470
  useSetUserMetadata,
471
471
  useUserMetadataState
472
472
  };
473
- //# sourceMappingURL=chunk-4EO55YV2.js.map
473
+ //# sourceMappingURL=chunk-VSY6766U.js.map
@@ -6,7 +6,7 @@ import {
6
6
  useDataLayerCore,
7
7
  useDataLayerStatus,
8
8
  useDbQuery
9
- } from "./chunk-GWYTROSD.js";
9
+ } from "./chunk-L4DFVMTS.js";
10
10
  import {
11
11
  getSupabaseUrl
12
12
  } from "./chunk-GC3TBUWE.js";
@@ -1239,4 +1239,4 @@ export {
1239
1239
  useSyncControl,
1240
1240
  useOnlineStatus
1241
1241
  };
1242
- //# sourceMappingURL=chunk-VYFAMTHI.js.map
1242
+ //# sourceMappingURL=chunk-WY6MNB6K.js.map
@@ -7,7 +7,7 @@
7
7
  /**
8
8
  * Column type mappings for schema definitions
9
9
  */
10
- type ColumnType = "string" | "number" | "boolean" | "date" | "enum";
10
+ type ColumnType = "string" | "number" | "boolean" | "date" | "enum" | "json";
11
11
  /**
12
12
  * Information about a database column
13
13
  */
@@ -377,6 +377,14 @@ declare function createResultJoiner(): ResultJoiner;
377
377
  * against the local SQLite database via PowerSync.
378
378
  */
379
379
 
380
+ /**
381
+ * Function type for resolving schema-qualified table names to PowerSync aliases.
382
+ * Used to look up configured aliases from DataLayerConfig.
383
+ *
384
+ * @param qualifiedName - Schema-qualified table name (e.g., "core.Profile")
385
+ * @returns The resolved alias (e.g., "Profile" if configured, or "CoreProfile" as fallback)
386
+ */
387
+ type TableAliasResolver = (qualifiedName: string) => string;
380
388
  /**
381
389
  * Interface for PowerSync database.
382
390
  * This matches the getAll method signature from @powersync/react-native.
@@ -416,11 +424,27 @@ declare class QueryExecutor {
416
424
  private resolver;
417
425
  private builder;
418
426
  private joiner;
427
+ /**
428
+ * Optional resolver for looking up table aliases from config.
429
+ * When provided, explicit FK resolution will use configured aliases
430
+ * instead of always defaulting to schema concatenation.
431
+ */
432
+ private tableAliasResolver?;
419
433
  /**
420
434
  * Cache for resolved relationships to avoid repeated schema lookups
421
435
  */
422
436
  private relationCache;
423
- constructor(db: PowerSyncDatabase, schema: DatabaseSchema);
437
+ /**
438
+ * Create a new QueryExecutor.
439
+ *
440
+ * @param db - PowerSync database instance
441
+ * @param schema - Database schema for relationship resolution
442
+ * @param tableAliasResolver - Optional resolver for looking up configured table aliases.
443
+ * When provided, getTableNameFromQualified will use this to resolve schema-qualified
444
+ * names like "core.Profile" to their configured aliases. If not provided or if the
445
+ * resolver returns the same value as input, falls back to default concatenation behavior.
446
+ */
447
+ constructor(db: PowerSyncDatabase, schema: DatabaseSchema, tableAliasResolver?: TableAliasResolver);
424
448
  /**
425
449
  * Execute a query and return results.
426
450
  *
@@ -510,6 +534,19 @@ declare class QueryExecutor {
510
534
  * to handle both "core.Profile" -> "CoreProfile" (PowerSync alias) and
511
535
  * simple table names.
512
536
  *
537
+ * Resolution order:
538
+ * 1. If a tableAliasResolver is configured, use it to look up the alias
539
+ * 2. If the resolver returns a different value than the input, use it
540
+ * 3. Otherwise, fall back to default behavior:
541
+ * - Schema-qualified names: convert to PascalCase (core.Profile -> CoreProfile)
542
+ * - Simple names: return as-is
543
+ *
544
+ * This allows DataLayerConfig to define explicit aliases for tables,
545
+ * supporting cases where:
546
+ * - An alias is explicitly configured (e.g., "core.Profile" -> "UserProfile")
547
+ * - No conflict exists (e.g., "core.Profile" -> "Profile" via schema stripping)
548
+ * - A conflict exists requiring concatenation (e.g., both public.Profile and core.Profile)
549
+ *
513
550
  * @param qualifiedName - Table name, optionally schema-qualified (e.g., "core.Profile")
514
551
  * @returns The table name to use in queries
515
552
  */
@@ -549,8 +586,11 @@ declare class QueryExecutor {
549
586
  *
550
587
  * @param db - PowerSync database instance
551
588
  * @param schema - Database schema
589
+ * @param tableAliasResolver - Optional resolver for looking up configured table aliases.
590
+ * When provided, explicit FK resolution (e.g., `Profile!userId:core.Profile(*)`)
591
+ * will use this to resolve schema-qualified names to their configured aliases.
552
592
  * @returns QueryExecutor instance
553
593
  */
554
- declare function createQueryExecutor(db: PowerSyncDatabase, schema: DatabaseSchema): QueryExecutor;
594
+ declare function createQueryExecutor(db: PowerSyncDatabase, schema: DatabaseSchema, tableAliasResolver?: TableAliasResolver): QueryExecutor;
555
595
 
556
- export { type PowerSyncDatabase as P, QueryExecutor as Q, RelationshipResolver as R, SQLBuilder as S, createSQLBuilder as a, ResultJoiner as b, createRelationshipResolver as c, createResultJoiner as d, type RelationJoinData as e, createQueryExecutor as f };
596
+ export { type PowerSyncDatabase as P, QueryExecutor as Q, RelationshipResolver as R, SQLBuilder as S, type TableAliasResolver as T, createSQLBuilder as a, ResultJoiner as b, createRelationshipResolver as c, createResultJoiner as d, type RelationJoinData as e, createQueryExecutor as f };
@@ -1,10 +1,10 @@
1
- export { C as ClarificationQuestion, D as DatabaseTypes, F as Filter, x as FilterGroup, y as FilterOperator, z as Pagination, P as PublicTableNames, Q as QueryState, R as ResolveRowType, S as SchemaNames, m as SchemaTableNames, A as Sort, T as TableIdentifier, U as UseAdvanceQueryOptions, n as UseAdvanceQueryResult, o as UseDbCountOptions, p as UseDbCountResult, K as UseDbDeleteOptions, L as UseDbDeleteResult, q as UseDbInfiniteQueryOptions, r as UseDbInfiniteQueryResult, B as UseDbInsertOptions, E as UseDbInsertResult, v as UseDbQueryByIdOptions, w as UseDbQueryByIdResult, s as UseDbQueryOptions, t as UseDbQueryResult, G as UseDbUpdateOptions, H as UseDbUpdateResult, I as UseDbUpsertOptions, J as UseDbUpsertResult, u as useAdvanceQuery, a as useDataLayer, b as useDataLayerCore, M as useDataLayerCoreOptional, c as useDataLayerOptional, d as useDataLayerStatus, e as useDbCount, f as useDbDelete, g as useDbInfiniteQuery, h as useDbInsert, i as useDbQuery, j as useDbQueryById, k as useDbUpdate, l as useDbUpsert } from '../useDbCount-Ckb-FhZk.js';
1
+ export { C as ClarificationQuestion, D as DatabaseTypes, F as Filter, x as FilterGroup, y as FilterOperator, z as Pagination, P as PublicTableNames, Q as QueryState, R as ResolveRowType, S as SchemaNames, m as SchemaTableNames, A as Sort, T as TableIdentifier, U as UseAdvanceQueryOptions, n as UseAdvanceQueryResult, o as UseDbCountOptions, p as UseDbCountResult, K as UseDbDeleteOptions, L as UseDbDeleteResult, q as UseDbInfiniteQueryOptions, r as UseDbInfiniteQueryResult, B as UseDbInsertOptions, E as UseDbInsertResult, v as UseDbQueryByIdOptions, w as UseDbQueryByIdResult, s as UseDbQueryOptions, t as UseDbQueryResult, G as UseDbUpdateOptions, H as UseDbUpdateResult, I as UseDbUpsertOptions, J as UseDbUpsertResult, u as useAdvanceQuery, a as useDataLayer, b as useDataLayerCore, M as useDataLayerCoreOptional, c as useDataLayerOptional, d as useDataLayerStatus, e as useDbCount, f as useDbDelete, g as useDbInfiniteQuery, h as useDbInsert, i as useDbQuery, j as useDbQueryById, k as useDbUpdate, l as useDbUpsert } from '../useDbCount-dCkdaBpP.js';
2
2
  import { SyncStatus, SyncControl } from '../core/index.js';
3
- import '../DataLayerContext-BYZtDD0g.js';
3
+ import '../DataLayerContext-V5FotiSk.js';
4
4
  import 'react';
5
5
  import '@supabase/supabase-js';
6
6
  import '@tanstack/react-query';
7
- import '../executor-D15yjeMo.js';
7
+ import '../executor-Bu1OlqCl.js';
8
8
 
9
9
  /**
10
10
  * V3 useSyncStatus Hook
@@ -9,7 +9,7 @@ import {
9
9
  useOnlineStatus,
10
10
  useSyncControl,
11
11
  useSyncStatus
12
- } from "../chunk-VYFAMTHI.js";
12
+ } from "../chunk-WY6MNB6K.js";
13
13
  import {
14
14
  useDataLayer,
15
15
  useDataLayerCore,
@@ -18,7 +18,7 @@ import {
18
18
  useDataLayerStatus,
19
19
  useDbQuery,
20
20
  useDbQueryById
21
- } from "../chunk-GWYTROSD.js";
21
+ } from "../chunk-L4DFVMTS.js";
22
22
  import "../chunk-GC3TBUWE.js";
23
23
  import "../chunk-W7PERM66.js";
24
24
  import "../chunk-QYAFI34Q.js";
@@ -5,7 +5,7 @@ import { PostgrestSingleResponse, SupabaseClient } from '@supabase/supabase-js';
5
5
  import { Dispatch, SetStateAction } from 'react';
6
6
  import { UseQueryOptions, DefinedUseQueryResult, QueryClient } from '@tanstack/react-query';
7
7
  import { SyncControl, SyncStatus, DataLayerConfig } from './core/index.js';
8
- import { u as DataLayerStatus, r as DataLayerContextValue } from './DataLayerContext-BYZtDD0g.js';
8
+ import { r as DataLayerStatus, o as DataLayerContextValue } from './DataLayerContext-V5FotiSk.js';
9
9
 
10
10
  /**
11
11
  * Represents a change log entry for database records.
@@ -339,14 +339,6 @@ interface DataLayerWithPowerSyncProps<DB = unknown> {
339
339
  * React Query client (required).
340
340
  */
341
341
  queryClient: QueryClient;
342
- /**
343
- * Optional callback when initialization completes.
344
- */
345
- onInitialized?: (context: DataLayerContextValue) => void;
346
- /**
347
- * Optional callback when error occurs.
348
- */
349
- onError?: (error: Error) => void;
350
342
  }
351
343
  /**
352
344
  * Return type for useDataLayer when PowerSync is available.
package/dist/index.d.ts CHANGED
@@ -1,12 +1,12 @@
1
1
  export { C as CompositeTypes, c as Constants, D as Database, E as Enums, J as Json, T as Tables, a as TablesInsert, b as TablesUpdate } from './database.types-ChFCG-4M.js';
2
2
  export { a as FilterConfig, F as FilterConfigOption, G as Group, P as PropertyType, S as SortConfig, T as TableInfo, V as ValueForPropertyType, W as WhereFilter } from './FilterConfig-Bt2Ek74z.js';
3
- export { r as BackendSelectionResult, B as BooleanOperator, l as ClarificationQuestion, k as ClarificationSuggestion, C as CombinedProviderStatus, j as ComputedSortConfig, n as DataLayerWithPowerSyncProps, D as DbChangeLog, E as EnhancedSyncControl, a as EnhancedSyncStatus, e as Filter, d as FilterConditionType, m as FilterContextType, f as FilterGroup, g as FilterInput, F as FilterOperator, h as FilterState, H as HasPowerSyncConfig, O as OrderColumn, i as Pagination, P as PowerSyncEnabledConfig, b as PowerSyncEnabledContextValue, q as PowerSyncTables, Q as QueryState, S as Sort, U as UseDataLayerWithPowerSync, p as UseSyncControlWithPowerSync, o as UseSyncStatusWithPowerSync, V as ValueOrArrayForPropertyType, c as createCombinedStatus } from './index-CFUuTzXO.js';
4
- export { y as AIOptions, z as AIResponse, P as AlertProps, A as AttachmentQueueProvider, I as BUCKETS, J as BucketName, H as CustomPageQueryResult, L as DEFAULT_QUERY_TIMEOUT, a9 as FeedbackListItem, aa as FeedbackListParams, Q as LiveChangeContext, R as LiveChangeContextProvider, C as ServerAvailabilityState, k as StorageQueueContext, m as StorageQueueContextValue, S as StorageQueueProvider, j as StorageQueueProviderProps, ac as SubmitFeedbackParams, v as SupabaseAdapter, T as TIMEOUT_ERROR_MESSAGE, F as UpdateOptions, U as UseAutosaveOptions, d as UseAutosaveResult, N as UseDbRealtimeQueryResult, q as UseMutationSuccessOptions, h as UseStorageSourceOptions, i as UseStorageSourceResult, O as convertFilterToRealtimeQuery, K as createInCondition, w as createSupabaseAdapter, G as executeAdvanceQuery, x as getErrorBody, g as getStorageUrl, p as getSupabaseUrl, M as isTimeoutError, n as newTimeActivity, s as setSupabaseUrl, B as useAI, ad as useApplyFeedback, c as useAutosave, b as useAutosaveState, a4 as useChangelogById, a5 as useChangelogBySlug, a6 as useChangelogEntries, a7 as useChangelogMedia, a2 as useChangelogs, o as useDbRealtimeQuery, W as useDeleteChangelog, Z as useDeleteChangelogEntry, a0 as useDeleteChangelogMedia, a8 as useFeedbackList, a as useLatestOperationLog, u as useLiveChangeTracking, _ as useMultiDeleteChangelogEntries, Y as useMultiUpsertChangelogEntries, r as useMutationSuccess, t as useMutationSuccessRN, a3 as usePublishedChangelogs, o as useRealtimeQuery, ae as useResolveFeedback, E as useSearchQuery, D as useServerAvailability, l as useStorageQueueContext, f as useStorageSource, ab as useSubmitFeedback, e as useToastError, a1 as useUploadChangelogMedia, V as useUpsertChangelog, X as useUpsertChangelogEntry, $ as useUpsertChangelogMedia } from './useResolveFeedback-CuUkdHoR.js';
3
+ export { r as BackendSelectionResult, B as BooleanOperator, l as ClarificationQuestion, k as ClarificationSuggestion, C as CombinedProviderStatus, j as ComputedSortConfig, n as DataLayerWithPowerSyncProps, D as DbChangeLog, E as EnhancedSyncControl, a as EnhancedSyncStatus, e as Filter, d as FilterConditionType, m as FilterContextType, f as FilterGroup, g as FilterInput, F as FilterOperator, h as FilterState, H as HasPowerSyncConfig, O as OrderColumn, i as Pagination, P as PowerSyncEnabledConfig, b as PowerSyncEnabledContextValue, q as PowerSyncTables, Q as QueryState, S as Sort, U as UseDataLayerWithPowerSync, p as UseSyncControlWithPowerSync, o as UseSyncStatusWithPowerSync, V as ValueOrArrayForPropertyType, c as createCombinedStatus } from './index-vwVJ0BWj.js';
4
+ export { G as AIOptions, H as AIResponse, v as AdapterRegistry, Z as AlertProps, A as AttachmentQueueProvider, P as BUCKETS, Q as BucketName, O as CustomPageQueryResult, V as DEFAULT_QUERY_TIMEOUT, ag as FeedbackListItem, ah as FeedbackListParams, _ as LiveChangeContext, $ as LiveChangeContextProvider, J as ServerAvailabilityState, k as StorageQueueContext, m as StorageQueueContextValue, S as StorageQueueProvider, j as StorageQueueProviderProps, aj as SubmitFeedbackParams, B as SupabaseAdapter, E as SyncTracker, D as SyncTrackingAdapter, T as TIMEOUT_ERROR_MESSAGE, M as UpdateOptions, U as UseAutosaveOptions, d as UseAutosaveResult, X as UseDbRealtimeQueryResult, q as UseMutationSuccessOptions, h as UseStorageSourceOptions, i as UseStorageSourceResult, Y as convertFilterToRealtimeQuery, w as createAdapterRegistry, R as createInCondition, C as createSupabaseAdapter, N as executeAdvanceQuery, y as generatePowerSyncAlias, F as getErrorBody, z as getPowerSyncAlias, g as getStorageUrl, p as getSupabaseUrl, W as isTimeoutError, n as newTimeActivity, s as setSupabaseUrl, x as stripSchemaPrefix, I as useAI, ak as useApplyFeedback, c as useAutosave, b as useAutosaveState, ab as useChangelogById, ac as useChangelogBySlug, ad as useChangelogEntries, ae as useChangelogMedia, a9 as useChangelogs, o as useDbRealtimeQuery, a1 as useDeleteChangelog, a4 as useDeleteChangelogEntry, a7 as useDeleteChangelogMedia, af as useFeedbackList, a as useLatestOperationLog, u as useLiveChangeTracking, a5 as useMultiDeleteChangelogEntries, a3 as useMultiUpsertChangelogEntries, r as useMutationSuccess, t as useMutationSuccessRN, aa as usePublishedChangelogs, o as useRealtimeQuery, al as useResolveFeedback, L as useSearchQuery, K as useServerAvailability, l as useStorageQueueContext, f as useStorageSource, ai as useSubmitFeedback, e as useToastError, a8 as useUploadChangelogMedia, a0 as useUpsertChangelog, a2 as useUpsertChangelogEntry, a6 as useUpsertChangelogMedia } from './useResolveFeedback-thFi-4h8.js';
5
5
  export { u as useBatchDelete, a as useBatchUpsert } from './useBatchUpsert-DAkiCNo3.js';
6
6
  export { AdapterRegistry as AdapterRegistryInterface, AutoStrategy, BuiltQuery, CachedStrategy, ColumnInfo, ColumnType, ConnectionConfig, DataAdapter, DataLayerConfig, DataLayerHooks, DatabaseSchema, DeleteMutationResult, ExtractInsert, ExtractRow, ExtractUpdate, HybridStrategy, MutationHookResult, MutationResult, OrderBy, ParsedSelect, PowerSyncStrategy, QueryOptions, QueryResult, QuerySingleResult, RelationshipInfo, RelationshipType, ResolvedRelationship, ScopeDefinition, SelectColumn, SelectRelation, SupabaseStrategy, SyncControl, SyncSchedule, SyncScope, SyncStatus, TableNames, TableSchema, TableStrategy, UseDbMutationHook, UseDbQueryByIdHook, UseDbQueryHook, WhereClause, WhereOperators } from './core/index.js';
7
- export { f as ADAPTER_STRATEGIES, i as AdapterAutoDetector, c as AdapterCapabilities, a as AdapterConfig, d as AdapterDependencies, b as AdapterFactory, A as AdapterQueryResult, g as AdapterRegistry, e as AdapterStrategyType, k as AutoDetectionResult, l as AutoDetectorOptions, m as BackendChangeListener, B as BackendStatus, C as CapableDataAdapter, D as DataLayerContext, r as DataLayerContextValue, p as DataLayerCoreContext, s as DataLayerCoreContextValue, u as DataLayerStatus, q as DataLayerStatusContext, t as DataLayerStatusContextValue, S as SyncStatusInfo, o as SyncTracker, n as SyncTrackingAdapter, T as TableDataAdapter, j as createAdapterAutoDetector, h as createAdapterRegistry } from './DataLayerContext-BYZtDD0g.js';
7
+ export { f as ADAPTER_STRATEGIES, g as AdapterAutoDetector, c as AdapterCapabilities, a as AdapterConfig, d as AdapterDependencies, b as AdapterFactory, A as AdapterQueryResult, e as AdapterStrategyType, i as AutoDetectionResult, j as AutoDetectorOptions, k as BackendChangeListener, B as BackendStatus, C as CapableDataAdapter, D as DataLayerContext, o as DataLayerContextValue, l as DataLayerCoreContext, p as DataLayerCoreContextValue, n as DataLayerNestingContext, r as DataLayerStatus, m as DataLayerStatusContext, q as DataLayerStatusContextValue, s as SimpleAdapterRegistry, S as SyncStatusInfo, T as TableDataAdapter, h as createAdapterAutoDetector } from './DataLayerContext-V5FotiSk.js';
8
8
  export { ConflictCheckResult, ConflictContext, ConflictContextValue, ConflictProvider, ConflictProviderProps, ConflictResolution, DataLayerProvider, DataLayerProviderProps, FieldConflict, PowerSyncAdapter, UseConflictResolutionReturn, UseSupabaseUploadOptions, UseSupabaseUploadReturn, createPowerSyncAdapter, useBulkConflictResolution, useConflictCountByTable, useConflictForRecord, useConflictResolution, useConflictState, useConflictsForTable, useHasConflicts, usePendingConflicts, useSupabaseUpload } from './index.native.js';
9
- export { D as DatabaseTypes, P as PublicTableNames, R as ResolveRowType, S as SchemaNames, m as SchemaTableNames, T as TableIdentifier, U as UseAdvanceQueryOptions, n as UseAdvanceQueryResult, o as UseDbCountOptions, p as UseDbCountResult, q as UseDbInfiniteQueryOptions, r as UseDbInfiniteQueryResult, s as UseDbQueryOptions, t as UseDbQueryResult, u as useAdvanceQuery, a as useDataLayer, b as useDataLayerCore, c as useDataLayerOptional, d as useDataLayerStatus, e as useDbCount, e as useDbCountV3, f as useDbDelete, g as useDbInfiniteQuery, g as useDbInfiniteQueryV3, h as useDbInsert, i as useDbQuery, j as useDbQueryById, k as useDbUpdate, l as useDbUpsert } from './useDbCount-Ckb-FhZk.js';
9
+ export { D as DatabaseTypes, P as PublicTableNames, R as ResolveRowType, S as SchemaNames, m as SchemaTableNames, T as TableIdentifier, U as UseAdvanceQueryOptions, n as UseAdvanceQueryResult, o as UseDbCountOptions, p as UseDbCountResult, q as UseDbInfiniteQueryOptions, r as UseDbInfiniteQueryResult, s as UseDbQueryOptions, t as UseDbQueryResult, u as useAdvanceQuery, a as useDataLayer, b as useDataLayerCore, c as useDataLayerOptional, d as useDataLayerStatus, e as useDbCount, e as useDbCountV3, f as useDbDelete, g as useDbInfiniteQuery, g as useDbInfiniteQueryV3, h as useDbInsert, i as useDbQuery, j as useDbQueryById, k as useDbUpdate, l as useDbUpsert } from './useDbCount-dCkdaBpP.js';
10
10
  export { useOnlineStatus, useSyncControl, useSyncStatus } from './hooks/index.js';
11
11
  export { C as ClientInstanceId, S as SupabaseDatabaseTypes, a as SupabaseProvider, T as TypedSupabaseClient, U as UserSessionId, c as createNewSupabaseClient, u as default, o as onSupabaseInitialized, s as setDefaultOptions, t as typedSupabase, u as useSupabase } from './useSupabase-DSZNeXnF.js';
12
12
  export { B as BatchAnalysisProgress, E as ExtractedReceipt, P as PendingExpense, a as useReceiptAI, u as useSupabaseFunction } from './useReceiptAI-6HkRpRml.js';
@@ -27,7 +27,7 @@ import '@pol-studios/utils';
27
27
  import '@supabase-cache-helpers/postgrest-react-query';
28
28
  import 'react/jsx-runtime';
29
29
  import '@supabase/storage-js';
30
- import './executor-D15yjeMo.js';
30
+ import './executor-Bu1OlqCl.js';
31
31
  import 'react-dropzone';
32
32
  import '@supabase/supabase-js/dist/module/lib/types.js';
33
33
 
package/dist/index.js CHANGED
@@ -24,27 +24,27 @@ import {
24
24
  useHasConflicts,
25
25
  usePendingConflicts,
26
26
  useSupabaseUpload
27
- } from "./chunk-VSJKGPRI.js";
27
+ } from "./chunk-K46TGKB2.js";
28
28
  import {
29
29
  ADAPTER_STRATEGIES,
30
- AdapterAutoDetector,
31
30
  AdapterRegistry,
32
31
  BUCKETS,
33
- BackendStatus,
34
32
  StorageQueueContext,
35
33
  StorageQueueProvider,
36
34
  SupabaseAdapter,
37
35
  SyncTrackingAdapter,
38
36
  convertFilterToRealtimeQuery,
39
- createAdapterAutoDetector,
40
37
  createAdapterRegistry,
41
38
  createInCondition,
42
39
  createSupabaseAdapter,
43
40
  executeAdvanceQuery,
41
+ generatePowerSyncAlias,
44
42
  getErrorBody,
43
+ getPowerSyncAlias,
45
44
  getStorageUrl,
46
45
  isStorageAuthError,
47
46
  newTimeActivity,
47
+ stripSchemaPrefix,
48
48
  useAI,
49
49
  useApplyFeedback,
50
50
  useAutosave,
@@ -77,7 +77,7 @@ import {
77
77
  useUpsertChangelog,
78
78
  useUpsertChangelogEntry,
79
79
  useUpsertChangelogMedia
80
- } from "./chunk-DDL63KLQ.js";
80
+ } from "./chunk-VADZSRHY.js";
81
81
  import {
82
82
  LiveChangeContext,
83
83
  LiveChangeContextProvider,
@@ -88,7 +88,7 @@ import {
88
88
  useUserMetadataState,
89
89
  useUserMetadataValue,
90
90
  userMetadataContext
91
- } from "./chunk-4EO55YV2.js";
91
+ } from "./chunk-VSY6766U.js";
92
92
  import {
93
93
  PostgrestFilter,
94
94
  binarySearch,
@@ -128,11 +128,11 @@ import {
128
128
  useOnlineStatus,
129
129
  useSyncControl,
130
130
  useSyncStatus
131
- } from "./chunk-VYFAMTHI.js";
131
+ } from "./chunk-WY6MNB6K.js";
132
132
  import {
133
133
  Constants,
134
134
  createCombinedStatus
135
- } from "./chunk-Z456IHCB.js";
135
+ } from "./chunk-F4HW4NT5.js";
136
136
  import {
137
137
  Accessory,
138
138
  Address,
@@ -321,25 +321,29 @@ import {
321
321
  UserMetadata
322
322
  } from "./chunk-SM73S2DY.js";
323
323
  import "./chunk-NSIAAYW3.js";
324
- import "./chunk-MEBT5YHA.js";
324
+ import "./chunk-SNPZMRBC.js";
325
325
  import {
326
326
  DEFAULT_QUERY_TIMEOUT,
327
327
  TIMEOUT_ERROR_MESSAGE,
328
328
  isTimeoutError
329
- } from "./chunk-6SDH7M7J.js";
329
+ } from "./chunk-ARALLEDJ.js";
330
330
  import {
331
+ AdapterAutoDetector,
332
+ BackendStatus,
331
333
  DataLayerContext,
332
334
  DataLayerCoreContext,
335
+ DataLayerNestingContext,
333
336
  DataLayerStatusContext,
337
+ createAdapterAutoDetector,
334
338
  useDataLayer,
335
339
  useDataLayerCore,
336
340
  useDataLayerOptional,
337
341
  useDataLayerStatus,
338
342
  useDbQuery,
339
343
  useDbQueryById
340
- } from "./chunk-GWYTROSD.js";
344
+ } from "./chunk-L4DFVMTS.js";
341
345
  import "./chunk-RT4O5H2E.js";
342
- import "./chunk-YRIPM2AN.js";
346
+ import "./chunk-4PZ744G2.js";
343
347
  import {
344
348
  getSupabaseUrl,
345
349
  setSupabaseUrl
@@ -420,6 +424,7 @@ export {
420
424
  DataExchangeImport,
421
425
  DataLayerContext,
422
426
  DataLayerCoreContext,
427
+ DataLayerNestingContext,
423
428
  DataLayerProvider,
424
429
  DataLayerStatusContext,
425
430
  Datasheet,
@@ -612,8 +617,10 @@ export {
612
617
  findFilters,
613
618
  findIndexOrdered,
614
619
  findLastIndex,
620
+ generatePowerSyncAlias,
615
621
  get,
616
622
  getErrorBody,
623
+ getPowerSyncAlias,
617
624
  getPowerSyncInstance,
618
625
  getStorageUrl,
619
626
  getSupabaseUrl,
@@ -648,6 +655,7 @@ export {
648
655
  setFilterValue,
649
656
  setSupabaseUrl,
650
657
  sortSearchParams,
658
+ stripSchemaPrefix,
651
659
  typedSupabase,
652
660
  useAI,
653
661
  useAdvanceQuery,
@@ -1,15 +1,15 @@
1
1
  export { C as CompositeTypes, c as Constants, D as Database, E as Enums, J as Json, T as Tables, a as TablesInsert, b as TablesUpdate } from './database.types-ChFCG-4M.js';
2
2
  export { a as FilterConfig, F as FilterConfigOption, G as Group, P as PropertyType, S as SortConfig, T as TableInfo, V as ValueForPropertyType, W as WhereFilter } from './FilterConfig-Bt2Ek74z.js';
3
- export { r as BackendSelectionResult, B as BooleanOperator, l as ClarificationQuestion, k as ClarificationSuggestion, C as CombinedProviderStatus, j as ComputedSortConfig, n as DataLayerWithPowerSyncProps, D as DbChangeLog, E as EnhancedSyncControl, a as EnhancedSyncStatus, e as Filter, d as FilterConditionType, m as FilterContextType, f as FilterGroup, g as FilterInput, F as FilterOperator, h as FilterState, H as HasPowerSyncConfig, O as OrderColumn, i as Pagination, P as PowerSyncEnabledConfig, b as PowerSyncEnabledContextValue, q as PowerSyncTables, Q as QueryState, S as Sort, U as UseDataLayerWithPowerSync, p as UseSyncControlWithPowerSync, o as UseSyncStatusWithPowerSync, V as ValueOrArrayForPropertyType, c as createCombinedStatus, u as useDbAdvanceFilterQuery } from './index-CFUuTzXO.js';
4
- export { y as AIOptions, z as AIResponse, P as AlertProps, A as AttachmentQueueProvider, I as BUCKETS, J as BucketName, H as CustomPageQueryResult, L as DEFAULT_QUERY_TIMEOUT, a9 as FeedbackListItem, aa as FeedbackListParams, Q as LiveChangeContext, R as LiveChangeContextProvider, C as ServerAvailabilityState, k as StorageQueueContext, m as StorageQueueContextValue, S as StorageQueueProvider, j as StorageQueueProviderProps, ac as SubmitFeedbackParams, v as SupabaseAdapter, T as TIMEOUT_ERROR_MESSAGE, F as UpdateOptions, U as UseAutosaveOptions, d as UseAutosaveResult, N as UseDbRealtimeQueryResult, q as UseMutationSuccessOptions, h as UseStorageSourceOptions, i as UseStorageSourceResult, O as convertFilterToRealtimeQuery, K as createInCondition, w as createSupabaseAdapter, G as executeAdvanceQuery, x as getErrorBody, g as getStorageUrl, p as getSupabaseUrl, M as isTimeoutError, n as newTimeActivity, s as setSupabaseUrl, B as useAI, ad as useApplyFeedback, c as useAutosave, b as useAutosaveState, a4 as useChangelogById, a5 as useChangelogBySlug, a6 as useChangelogEntries, a7 as useChangelogMedia, a2 as useChangelogs, o as useDbRealtimeQuery, W as useDeleteChangelog, Z as useDeleteChangelogEntry, a0 as useDeleteChangelogMedia, a8 as useFeedbackList, a as useLatestOperationLog, u as useLiveChangeTracking, _ as useMultiDeleteChangelogEntries, Y as useMultiUpsertChangelogEntries, r as useMutationSuccess, t as useMutationSuccessRN, a3 as usePublishedChangelogs, o as useRealtimeQuery, ae as useResolveFeedback, E as useSearchQuery, D as useServerAvailability, l as useStorageQueueContext, f as useStorageSource, ab as useSubmitFeedback, e as useToastError, a1 as useUploadChangelogMedia, V as useUpsertChangelog, X as useUpsertChangelogEntry, $ as useUpsertChangelogMedia } from './useResolveFeedback-CuUkdHoR.js';
5
- export { D as DatabaseTypes, P as PublicTableNames, R as ResolveRowType, S as SchemaNames, m as SchemaTableNames, T as TableIdentifier, U as UseAdvanceQueryOptions, n as UseAdvanceQueryResult, o as UseDbCountOptions, p as UseDbCountResult, q as UseDbInfiniteQueryOptions, r as UseDbInfiniteQueryResult, s as UseDbQueryOptions, t as UseDbQueryResult, u as useAdvanceQuery, a as useDataLayer, b as useDataLayerCore, c as useDataLayerOptional, d as useDataLayerStatus, e as useDbCount, e as useDbCountV3, f as useDbDelete, f as useDbDeleteV3, g as useDbInfiniteQuery, g as useDbInfiniteQueryV3, h as useDbInsert, h as useDbInsertV3, i as useDbQuery, j as useDbQueryById, i as useDbQueryV3, k as useDbUpdate, k as useDbUpdateV3, l as useDbUpsert, l as useDbUpsertV3, l as useUpsert } from './useDbCount-Ckb-FhZk.js';
3
+ export { r as BackendSelectionResult, B as BooleanOperator, l as ClarificationQuestion, k as ClarificationSuggestion, C as CombinedProviderStatus, j as ComputedSortConfig, n as DataLayerWithPowerSyncProps, D as DbChangeLog, E as EnhancedSyncControl, a as EnhancedSyncStatus, e as Filter, d as FilterConditionType, m as FilterContextType, f as FilterGroup, g as FilterInput, F as FilterOperator, h as FilterState, H as HasPowerSyncConfig, O as OrderColumn, i as Pagination, P as PowerSyncEnabledConfig, b as PowerSyncEnabledContextValue, q as PowerSyncTables, Q as QueryState, S as Sort, U as UseDataLayerWithPowerSync, p as UseSyncControlWithPowerSync, o as UseSyncStatusWithPowerSync, V as ValueOrArrayForPropertyType, c as createCombinedStatus, u as useDbAdvanceFilterQuery } from './index-vwVJ0BWj.js';
4
+ export { G as AIOptions, H as AIResponse, v as AdapterRegistry, Z as AlertProps, A as AttachmentQueueProvider, P as BUCKETS, Q as BucketName, O as CustomPageQueryResult, V as DEFAULT_QUERY_TIMEOUT, ag as FeedbackListItem, ah as FeedbackListParams, _ as LiveChangeContext, $ as LiveChangeContextProvider, J as ServerAvailabilityState, k as StorageQueueContext, m as StorageQueueContextValue, S as StorageQueueProvider, j as StorageQueueProviderProps, aj as SubmitFeedbackParams, B as SupabaseAdapter, E as SyncTracker, D as SyncTrackingAdapter, T as TIMEOUT_ERROR_MESSAGE, M as UpdateOptions, U as UseAutosaveOptions, d as UseAutosaveResult, X as UseDbRealtimeQueryResult, q as UseMutationSuccessOptions, h as UseStorageSourceOptions, i as UseStorageSourceResult, Y as convertFilterToRealtimeQuery, w as createAdapterRegistry, R as createInCondition, C as createSupabaseAdapter, N as executeAdvanceQuery, y as generatePowerSyncAlias, F as getErrorBody, z as getPowerSyncAlias, g as getStorageUrl, p as getSupabaseUrl, W as isTimeoutError, n as newTimeActivity, s as setSupabaseUrl, x as stripSchemaPrefix, I as useAI, ak as useApplyFeedback, c as useAutosave, b as useAutosaveState, ab as useChangelogById, ac as useChangelogBySlug, ad as useChangelogEntries, ae as useChangelogMedia, a9 as useChangelogs, o as useDbRealtimeQuery, a1 as useDeleteChangelog, a4 as useDeleteChangelogEntry, a7 as useDeleteChangelogMedia, af as useFeedbackList, a as useLatestOperationLog, u as useLiveChangeTracking, a5 as useMultiDeleteChangelogEntries, a3 as useMultiUpsertChangelogEntries, r as useMutationSuccess, t as useMutationSuccessRN, aa as usePublishedChangelogs, o as useRealtimeQuery, al as useResolveFeedback, L as useSearchQuery, K as useServerAvailability, l as useStorageQueueContext, f as useStorageSource, ai as useSubmitFeedback, e as useToastError, a8 as useUploadChangelogMedia, a0 as useUpsertChangelog, a2 as useUpsertChangelogEntry, a6 as useUpsertChangelogMedia } from './useResolveFeedback-thFi-4h8.js';
5
+ export { D as DatabaseTypes, P as PublicTableNames, R as ResolveRowType, S as SchemaNames, m as SchemaTableNames, T as TableIdentifier, U as UseAdvanceQueryOptions, n as UseAdvanceQueryResult, o as UseDbCountOptions, p as UseDbCountResult, q as UseDbInfiniteQueryOptions, r as UseDbInfiniteQueryResult, s as UseDbQueryOptions, t as UseDbQueryResult, u as useAdvanceQuery, a as useDataLayer, b as useDataLayerCore, c as useDataLayerOptional, d as useDataLayerStatus, e as useDbCount, e as useDbCountV3, f as useDbDelete, f as useDbDeleteV3, g as useDbInfiniteQuery, g as useDbInfiniteQueryV3, h as useDbInsert, h as useDbInsertV3, i as useDbQuery, j as useDbQueryById, i as useDbQueryV3, k as useDbUpdate, k as useDbUpdateV3, l as useDbUpsert, l as useDbUpsertV3, l as useUpsert } from './useDbCount-dCkdaBpP.js';
6
6
  export { useOnlineStatus, useSyncControl, useSyncStatus } from './hooks/index.js';
7
7
  export { u as useBatchDelete, a as useBatchUpsert } from './useBatchUpsert-DAkiCNo3.js';
8
8
  import { DatabaseSchema, QueryOptions, DataLayerConfig, SyncControl } from './core/index.js';
9
9
  export { AdapterRegistry as AdapterRegistryInterface, AutoStrategy, BuiltQuery, CachedStrategy, ColumnInfo, ColumnType, ConnectionConfig, DataAdapter, DataLayerHooks, DeleteMutationResult, ExtractInsert, ExtractRow, ExtractUpdate, HybridStrategy, MutationHookResult, MutationResult, OrderBy, ParsedSelect, PowerSyncStrategy, QueryResult, QuerySingleResult, RelationshipInfo, RelationshipType, ResolvedRelationship, ScopeDefinition, SelectColumn, SelectRelation, SupabaseStrategy, SyncSchedule, SyncScope, SyncStatus, TableNames, TableSchema, TableStrategy, UseDbMutationHook, UseDbQueryByIdHook, UseDbQueryHook, WhereClause, WhereOperators } from './core/index.js';
10
- import { T as TableDataAdapter, C as CapableDataAdapter, c as AdapterCapabilities, A as AdapterQueryResult, r as DataLayerContextValue, S as SyncStatusInfo } from './DataLayerContext-BYZtDD0g.js';
11
- export { f as ADAPTER_STRATEGIES, i as AdapterAutoDetector, a as AdapterConfig, d as AdapterDependencies, b as AdapterFactory, g as AdapterRegistry, e as AdapterStrategyType, k as AutoDetectionResult, l as AutoDetectorOptions, m as BackendChangeListener, B as BackendStatus, D as DataLayerContext, p as DataLayerCoreContext, s as DataLayerCoreContextValue, u as DataLayerStatus, q as DataLayerStatusContext, t as DataLayerStatusContextValue, o as SyncTracker, n as SyncTrackingAdapter, j as createAdapterAutoDetector, h as createAdapterRegistry } from './DataLayerContext-BYZtDD0g.js';
12
- import { Q as QueryExecutor, P as PowerSyncDatabase$1 } from './executor-D15yjeMo.js';
10
+ import { T as TableDataAdapter, C as CapableDataAdapter, c as AdapterCapabilities, A as AdapterQueryResult, S as SyncStatusInfo } from './DataLayerContext-V5FotiSk.js';
11
+ export { f as ADAPTER_STRATEGIES, g as AdapterAutoDetector, a as AdapterConfig, d as AdapterDependencies, b as AdapterFactory, e as AdapterStrategyType, i as AutoDetectionResult, j as AutoDetectorOptions, k as BackendChangeListener, B as BackendStatus, D as DataLayerContext, o as DataLayerContextValue, l as DataLayerCoreContext, p as DataLayerCoreContextValue, n as DataLayerNestingContext, r as DataLayerStatus, m as DataLayerStatusContext, q as DataLayerStatusContextValue, s as SimpleAdapterRegistry, h as createAdapterAutoDetector } from './DataLayerContext-V5FotiSk.js';
12
+ import { Q as QueryExecutor, P as PowerSyncDatabase$1 } from './executor-Bu1OlqCl.js';
13
13
  import * as react from 'react';
14
14
  import react__default, { ReactNode, JSX } from 'react';
15
15
  import { SupabaseClient } from '@supabase/supabase-js';
@@ -302,60 +302,96 @@ declare class PowerSyncAdapter implements TableDataAdapter, CapableDataAdapter {
302
302
  *
303
303
  * @param db - PowerSync database instance
304
304
  * @param schema - Database schema for relationship resolution
305
+ * @param options - Optional configuration:
306
+ * - `tableNameResolver`: Function to resolve schema-qualified table names to PowerSync aliases.
307
+ * Used for explicit FK syntax (e.g., "Profile!userId:core.Profile(*)") to look up
308
+ * configured aliases from DataLayerConfig.
309
+ * - `maxSubscriptions`: Maximum number of subscriptions in the registry (default: 100)
305
310
  * @returns A new PowerSyncAdapter instance
306
311
  *
307
312
  * @example
308
313
  * import { createPowerSyncAdapter } from "./adapters/powersync-adapter";
309
314
  *
315
+ * // Basic usage
310
316
  * const adapter = createPowerSyncAdapter(powerSyncDb, databaseSchema);
311
317
  *
318
+ * // With table alias resolver (for explicit FK syntax support)
319
+ * const adapter = createPowerSyncAdapter(powerSyncDb, databaseSchema, {
320
+ * tableNameResolver: (table) => registry.getTableAlias(table),
321
+ * });
322
+ *
312
323
  * // Use the adapter
313
324
  * const { data } = await adapter.query("EquipmentUnit", {
314
325
  * where: { status: "active" }
315
326
  * });
316
327
  */
317
- declare function createPowerSyncAdapter(db: PowerSyncDatabase, schema: DatabaseSchema): PowerSyncAdapter;
328
+ declare function createPowerSyncAdapter(db: PowerSyncDatabase, schema: DatabaseSchema, options?: TableNameResolver | PowerSyncAdapterOptions): PowerSyncAdapter;
318
329
 
319
330
  /**
320
- * V3 Data Layer Provider
331
+ * V3 Data Layer Provider - SIMPLIFIED
332
+ *
333
+ * Single provider with stable context values and lazy PowerSync initialization.
334
+ * Starts with Supabase and automatically switches to PowerSync when available.
335
+ *
336
+ * The provider supports two usage patterns:
337
+ *
338
+ * 1. **Lazy Init (recommended)** - Mount immediately, PowerSync arrives later:
339
+ * @example
340
+ * ```tsx
341
+ * function App() {
342
+ * const { db } = usePowerSync(); // db may be null initially
343
+ *
344
+ * return (
345
+ * <DataLayerProvider
346
+ * powerSyncInstance={db} // null -> uses Supabase, db -> uses PowerSync
347
+ * supabaseClient={supabase}
348
+ * queryClient={queryClient}
349
+ * config={dataLayerConfig}
350
+ * >
351
+ * <YourApp />
352
+ * </DataLayerProvider>
353
+ * );
354
+ * }
355
+ * ```
356
+ *
357
+ * 2. **Eager Init** - Wait for PowerSync before mounting:
358
+ * @example
359
+ * ```tsx
360
+ * function App() {
361
+ * const { db, isReady } = usePowerSync();
362
+ * if (!isReady) return <Loading />;
321
363
  *
322
- * React context provider that initializes adapters, manages the PowerSync lifecycle,
323
- * and provides context for all V3 hooks. This is the main entry point for the V3
324
- * data layer in a React application.
364
+ * return (
365
+ * <DataLayerProvider
366
+ * powerSyncInstance={db}
367
+ * supabaseClient={supabase}
368
+ * queryClient={queryClient}
369
+ * config={dataLayerConfig}
370
+ * >
371
+ * <YourApp />
372
+ * </DataLayerProvider>
373
+ * );
374
+ * }
375
+ * ```
325
376
  */
326
377
 
327
- /**
328
- * Props for DataLayerProvider
329
- */
330
378
  interface DataLayerProviderProps {
331
379
  /** Data layer configuration */
332
380
  config: DataLayerConfig;
333
381
  /** Children to render */
334
382
  children: ReactNode;
335
383
  /**
336
- * Optional PowerSync database instance.
384
+ * PowerSync database instance.
337
385
  *
338
- * This accepts any object that implements the PowerSyncDatabase interface,
339
- * including the AbstractPowerSyncDatabase from @pol-studios/powersync.
386
+ * Supports lazy initialization:
387
+ * - Pass null initially to use Supabase as the backend
388
+ * - When PowerSync becomes available, pass the db instance
389
+ * - The provider automatically switches adapters when this prop changes
340
390
  *
341
- * When using with @pol-studios/powersync, pass the `db` value from usePowerSync():
342
391
  * @example
343
392
  * ```tsx
344
- * // With @pol-studios/powersync
345
- * const { db, isReady } = usePowerSync();
346
- *
347
- * if (!isReady) return <Loading />;
348
- *
349
- * return (
350
- * <DataLayerProvider
351
- * config={config}
352
- * powerSyncInstance={db}
353
- * supabaseClient={supabase}
354
- * queryClient={queryClient}
355
- * >
356
- * {children}
357
- * </DataLayerProvider>
358
- * );
393
+ * const { db } = usePowerSync(); // db may be null initially
394
+ * return <DataLayerProvider powerSyncInstance={db} ... />
359
395
  * ```
360
396
  */
361
397
  powerSyncInstance?: PowerSyncDatabase$1 | null;
@@ -363,53 +399,18 @@ interface DataLayerProviderProps {
363
399
  supabaseClient: SupabaseClient;
364
400
  /** React Query client (required) */
365
401
  queryClient: QueryClient;
366
- /** Callback when initialization completes */
367
- onInitialized?: (context: DataLayerContextValue) => void;
368
- /** Callback when error occurs */
369
- onError?: (error: Error) => void;
370
402
  /**
371
- * Current sync status from @pol-studios/powersync.
372
- * Pass the status object from useSyncStatus() hook.
373
- * When hasSynced is false and useOnlineUntilSynced is true (default),
374
- * queries will use Supabase until initial sync completes.
403
+ * Sync control from PowerSync provider.
404
+ * Enables mutation tracking and sync controls.
375
405
  */
376
- powerSyncSyncStatus?: SyncStatusInfo;
406
+ syncControl?: SyncControl;
377
407
  /**
378
- * Optional sync control from @pol-studios/powersync.
379
- * When provided, enables mutation hooks to refresh pending mutations
380
- * after writes without polling.
408
+ * Sync status from PowerSync.
409
+ * Used to determine hasSynced and isOnline.
381
410
  */
382
- syncControl?: SyncControl;
411
+ powerSyncSyncStatus?: SyncStatusInfo;
383
412
  }
384
- /**
385
- * Provider component for the V3 data layer.
386
- *
387
- * This provider:
388
- * - Creates and manages the AdapterRegistry
389
- * - Initializes the AdapterAutoDetector for backend selection
390
- * - Sets up Supabase and PowerSync adapters
391
- * - Tracks online/offline status
392
- * - Provides context for all V3 hooks
393
- *
394
- * @example
395
- * ```tsx
396
- * import { DataLayerProvider } from "@pol-studios/db";
397
- *
398
- * function App() {
399
- * return (
400
- * <DataLayerProvider
401
- * config={dataLayerConfig}
402
- * supabaseClient={supabase}
403
- * queryClient={queryClient}
404
- * powerSyncInstance={powerSyncDb}
405
- * >
406
- * <YourApp />
407
- * </DataLayerProvider>
408
- * );
409
- * }
410
- * ```
411
- */
412
- declare function DataLayerProvider({ config, children, powerSyncInstance, supabaseClient, queryClient, onInitialized, onError, powerSyncSyncStatus, syncControl: externalSyncControl, }: DataLayerProviderProps): JSX.Element;
413
+ declare function DataLayerProvider({ config, children, powerSyncInstance, supabaseClient, queryClient, syncControl: externalSyncControl, powerSyncSyncStatus, }: DataLayerProviderProps): JSX.Element;
413
414
 
414
415
  interface FileWithPreview extends File {
415
416
  preview?: string;
@@ -832,4 +833,4 @@ declare function useBulkConflictResolution(): {
832
833
  conflictCount: number;
833
834
  };
834
835
 
835
- export { AdapterCapabilities, AdapterQueryResult, CapableDataAdapter, type ConflictCheckResult, ConflictContext, type ConflictContextValue, ConflictProvider, type ConflictProviderProps, type ConflictResolution, DataLayerConfig, DataLayerContextValue, DataLayerProvider, type DataLayerProviderProps, DatabaseSchema, type FieldConflict, PowerSyncAdapter, QueryOptions, SyncControl, SyncStatusInfo, TableDataAdapter, type UseConflictResolutionReturn, type UseSupabaseUploadOptions, type UseSupabaseUploadReturn, createPowerSyncAdapter, useBulkConflictResolution, useConflictCountByTable, useConflictForRecord, useConflictResolution, useConflictState, useConflictsForTable, useHasConflicts, usePendingConflicts, useSupabaseUpload };
836
+ export { AdapterCapabilities, AdapterQueryResult, CapableDataAdapter, type ConflictCheckResult, ConflictContext, type ConflictContextValue, ConflictProvider, type ConflictProviderProps, type ConflictResolution, DataLayerConfig, DataLayerProvider, type DataLayerProviderProps, DatabaseSchema, type FieldConflict, PowerSyncAdapter, QueryOptions, SyncControl, SyncStatusInfo, TableDataAdapter, type UseConflictResolutionReturn, type UseSupabaseUploadOptions, type UseSupabaseUploadReturn, createPowerSyncAdapter, useBulkConflictResolution, useConflictCountByTable, useConflictForRecord, useConflictResolution, useConflictState, useConflictsForTable, useHasConflicts, usePendingConflicts, useSupabaseUpload };