@pol-studios/db 1.0.54 → 1.0.56

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/dist/{DataLayerContext-C7cJtiO8.d.ts → DataLayerContext-BYZtDD0g.d.ts} +1 -1
  2. package/dist/auth/context.js +6 -4
  3. package/dist/auth/hooks.js +7 -5
  4. package/dist/auth/index.js +7 -5
  5. package/dist/{chunk-FIAXWEBK.js → chunk-4EO55YV2.js} +10 -7
  6. package/dist/chunk-4EO55YV2.js.map +1 -0
  7. package/dist/{chunk-DP3YEVSX.js → chunk-6SDH7M7J.js} +26 -10
  8. package/dist/chunk-6SDH7M7J.js.map +1 -0
  9. package/dist/{chunk-UJWETW36.js → chunk-AKIRHA4Q.js} +527 -418
  10. package/dist/chunk-AKIRHA4Q.js.map +1 -0
  11. package/dist/{chunk-2XS2PM62.js → chunk-DDL63KLQ.js} +388 -107
  12. package/dist/chunk-DDL63KLQ.js.map +1 -0
  13. package/dist/{chunk-YA6MUTA7.js → chunk-FI6JAD5G.js} +3 -3
  14. package/dist/{chunk-WQLIGVQR.js → chunk-GWYTROSD.js} +98 -1
  15. package/dist/chunk-GWYTROSD.js.map +1 -0
  16. package/dist/chunk-JOULSXOI.js +415 -0
  17. package/dist/chunk-JOULSXOI.js.map +1 -0
  18. package/dist/{chunk-OKYHI6JG.js → chunk-LF3V3ERS.js} +3 -3
  19. package/dist/{chunk-FMYXG4VN.js → chunk-MEBT5YHA.js} +2 -2
  20. package/dist/{chunk-BZSAPFFB.js → chunk-N4KK5G5T.js} +116 -18
  21. package/dist/chunk-N4KK5G5T.js.map +1 -0
  22. package/dist/chunk-QYAFI34Q.js +64 -0
  23. package/dist/chunk-QYAFI34Q.js.map +1 -0
  24. package/dist/{chunk-3Q74DK5K.js → chunk-VYFAMTHI.js} +2 -2
  25. package/dist/chunk-W7PERM66.js +215 -0
  26. package/dist/chunk-W7PERM66.js.map +1 -0
  27. package/dist/{chunk-ZGQ7Q4ZU.js → chunk-WM25QE7E.js} +2 -2
  28. package/dist/{chunk-HZIVE5AZ.js → chunk-YRIPM2AN.js} +253 -338
  29. package/dist/chunk-YRIPM2AN.js.map +1 -0
  30. package/dist/chunk-YUX6RGLZ.js +1858 -0
  31. package/dist/chunk-YUX6RGLZ.js.map +1 -0
  32. package/dist/{chunk-Z3EJX3VG.js → chunk-Z456IHCB.js} +3 -3
  33. package/dist/core/index.d.ts +24 -1
  34. package/dist/{executor-YJw4m7Q7.d.ts → executor-D15yjeMo.d.ts} +20 -0
  35. package/dist/hooks/index.d.ts +3 -3
  36. package/dist/hooks/index.js +4 -2
  37. package/dist/{index-jVYdTeWx.d.ts → index-CFUuTzXO.d.ts} +1 -1
  38. package/dist/index.d.ts +5 -5
  39. package/dist/index.js +16 -14
  40. package/dist/index.native.d.ts +62 -8
  41. package/dist/index.native.js +16 -14
  42. package/dist/index.web.d.ts +10 -9
  43. package/dist/index.web.js +30 -19
  44. package/dist/index.web.js.map +1 -1
  45. package/dist/mutation/index.js +3 -3
  46. package/dist/parser/index.js +3 -3
  47. package/dist/powersync-bridge/index.d.ts +1 -1
  48. package/dist/query/index.d.ts +4 -83
  49. package/dist/query/index.js +17 -7
  50. package/dist/realtime/index.d.ts +80 -1
  51. package/dist/realtime/index.js +14 -12
  52. package/dist/realtime/index.js.map +1 -1
  53. package/dist/select-parser-BAV7fOaM.d.ts +144 -0
  54. package/dist/types/index.d.ts +3 -3
  55. package/dist/types/index.js +4 -4
  56. package/dist/{useDbCount-DHLJzmkO.d.ts → useDbCount-Ckb-FhZk.d.ts} +1 -1
  57. package/dist/{useResolveFeedback-B0UcYWVI.d.ts → useResolveFeedback-CuUkdHoR.d.ts} +13 -29
  58. package/dist/with-auth/index.js +9 -7
  59. package/dist/with-auth/index.js.map +1 -1
  60. package/package.json +9 -4
  61. package/dist/chunk-2XS2PM62.js.map +0 -1
  62. package/dist/chunk-BZSAPFFB.js.map +0 -1
  63. package/dist/chunk-CTRY7JDP.js +0 -4112
  64. package/dist/chunk-CTRY7JDP.js.map +0 -1
  65. package/dist/chunk-DP3YEVSX.js.map +0 -1
  66. package/dist/chunk-FIAXWEBK.js.map +0 -1
  67. package/dist/chunk-HZIVE5AZ.js.map +0 -1
  68. package/dist/chunk-INEUG6MC.js +0 -521
  69. package/dist/chunk-INEUG6MC.js.map +0 -1
  70. package/dist/chunk-UJWETW36.js.map +0 -1
  71. package/dist/chunk-WQLIGVQR.js.map +0 -1
  72. /package/dist/{chunk-YA6MUTA7.js.map → chunk-FI6JAD5G.js.map} +0 -0
  73. /package/dist/{chunk-OKYHI6JG.js.map → chunk-LF3V3ERS.js.map} +0 -0
  74. /package/dist/{chunk-FMYXG4VN.js.map → chunk-MEBT5YHA.js.map} +0 -0
  75. /package/dist/{chunk-3Q74DK5K.js.map → chunk-VYFAMTHI.js.map} +0 -0
  76. /package/dist/{chunk-ZGQ7Q4ZU.js.map → chunk-WM25QE7E.js.map} +0 -0
  77. /package/dist/{chunk-Z3EJX3VG.js.map → chunk-Z456IHCB.js.map} +0 -0
@@ -535,6 +535,23 @@ interface SelectColumn {
535
535
  /** Optional alias for the column */
536
536
  alias?: string;
537
537
  }
538
+ /**
539
+ * Explicit FK specification for cross-schema relations without database FK constraints.
540
+ * Allows specifying the join relationship directly in the select string.
541
+ *
542
+ * @example
543
+ * // Syntax: Alias!sourceField:targetTable(columns)
544
+ * "Sender!senderId:core.Profile(*)"
545
+ * // explicitFk: { sourceField: "senderId", targetTable: "core.Profile", targetColumn: "id" }
546
+ */
547
+ interface ExplicitFkSpec {
548
+ /** FK column on the parent table (e.g., "senderId") */
549
+ sourceField: string;
550
+ /** Table to query, optionally schema-qualified (e.g., "core.Profile") */
551
+ targetTable: string;
552
+ /** Column to match in target table, defaults to "id" */
553
+ targetColumn?: string;
554
+ }
538
555
  /**
539
556
  * A relation in a parsed select statement (e.g., RelatedTable(*))
540
557
  */
@@ -547,6 +564,12 @@ interface SelectRelation {
547
564
  columns: "*" | SelectColumn[];
548
565
  /** Nested relations within this relation */
549
566
  relations: SelectRelation[];
567
+ /**
568
+ * Explicit FK specification for cross-schema relations.
569
+ * When present, the relationship is built directly from this spec
570
+ * instead of looking it up in the database schema.
571
+ */
572
+ explicitFk?: ExplicitFkSpec;
550
573
  }
551
574
  /**
552
575
  * Complete parsed select statement AST
@@ -588,4 +611,4 @@ interface BuiltQuery {
588
611
  params: (string | number | boolean | null)[];
589
612
  }
590
613
 
591
- export type { AdapterRegistry, 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 };
614
+ export type { AdapterRegistry, AutoStrategy, BuiltQuery, CachedStrategy, ColumnInfo, ColumnType, ConnectionConfig, DataAdapter, DataLayerConfig, DataLayerHooks, DatabaseSchema, DeleteMutationResult, ExplicitFkSpec, 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 };
@@ -495,6 +495,25 @@ declare class QueryExecutor {
495
495
  * @returns Parent records with relations attached
496
496
  */
497
497
  private queryAndJoinRelations;
498
+ /**
499
+ * Build a ResolvedRelationship from an explicit FK specification.
500
+ * This bypasses schema lookup and constructs the relationship directly.
501
+ *
502
+ * @param parentTable - The parent table name
503
+ * @param relation - The relation with explicitFk specification
504
+ * @returns ResolvedRelationship for the explicit FK
505
+ */
506
+ private buildExplicitFkRelationship;
507
+ /**
508
+ * Extract the table name from a potentially schema-qualified identifier.
509
+ * For PowerSync, tables are flattened to a single namespace, so we need
510
+ * to handle both "core.Profile" -> "CoreProfile" (PowerSync alias) and
511
+ * simple table names.
512
+ *
513
+ * @param qualifiedName - Table name, optionally schema-qualified (e.g., "core.Profile")
514
+ * @returns The table name to use in queries
515
+ */
516
+ private getTableNameFromQualified;
498
517
  /**
499
518
  * Get parent IDs needed for a relation query.
500
519
  */
@@ -517,6 +536,7 @@ declare class QueryExecutor {
517
536
  getJoiner(): ResultJoiner;
518
537
  /**
519
538
  * Resolve a relationship with caching.
539
+ * Uses true LRU eviction: accessed items are moved to the end of the Map.
520
540
  *
521
541
  * @param fromTable - The source table
522
542
  * @param toTable - The target table/relation name
@@ -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-DHLJzmkO.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-Ckb-FhZk.js';
2
2
  import { SyncStatus, SyncControl } from '../core/index.js';
3
- import '../DataLayerContext-C7cJtiO8.js';
3
+ import '../DataLayerContext-BYZtDD0g.js';
4
4
  import 'react';
5
5
  import '@supabase/supabase-js';
6
6
  import '@tanstack/react-query';
7
- import '../executor-YJw4m7Q7.js';
7
+ import '../executor-D15yjeMo.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-3Q74DK5K.js";
12
+ } from "../chunk-VYFAMTHI.js";
13
13
  import {
14
14
  useDataLayer,
15
15
  useDataLayerCore,
@@ -18,8 +18,10 @@ import {
18
18
  useDataLayerStatus,
19
19
  useDbQuery,
20
20
  useDbQueryById
21
- } from "../chunk-WQLIGVQR.js";
21
+ } from "../chunk-GWYTROSD.js";
22
22
  import "../chunk-GC3TBUWE.js";
23
+ import "../chunk-W7PERM66.js";
24
+ import "../chunk-QYAFI34Q.js";
23
25
  import "../chunk-J4ZVCXZ4.js";
24
26
  import "../chunk-DMVUEJG2.js";
25
27
  import "../chunk-7D4SUZUM.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-C7cJtiO8.js';
8
+ import { u as DataLayerStatus, r as DataLayerContextValue } from './DataLayerContext-BYZtDD0g.js';
9
9
 
10
10
  /**
11
11
  * Represents a change log entry for database records.
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-jVYdTeWx.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-B0UcYWVI.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';
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-C7cJtiO8.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';
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-DHLJzmkO.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';
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-YJw4m7Q7.js';
30
+ import './executor-D15yjeMo.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,7 +24,7 @@ import {
24
24
  useHasConflicts,
25
25
  usePendingConflicts,
26
26
  useSupabaseUpload
27
- } from "./chunk-BZSAPFFB.js";
27
+ } from "./chunk-N4KK5G5T.js";
28
28
  import {
29
29
  ADAPTER_STRATEGIES,
30
30
  AdapterAutoDetector,
@@ -77,7 +77,7 @@ import {
77
77
  useUpsertChangelog,
78
78
  useUpsertChangelogEntry,
79
79
  useUpsertChangelogMedia
80
- } from "./chunk-2XS2PM62.js";
80
+ } from "./chunk-DDL63KLQ.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-FIAXWEBK.js";
91
+ } from "./chunk-4EO55YV2.js";
92
92
  import {
93
93
  PostgrestFilter,
94
94
  binarySearch,
@@ -116,7 +116,7 @@ import {
116
116
  removeAliasFromDeclaration,
117
117
  removeFirstPathElement,
118
118
  setFilterValue
119
- } from "./chunk-YA6MUTA7.js";
119
+ } from "./chunk-FI6JAD5G.js";
120
120
  import {
121
121
  useAdvanceQuery,
122
122
  useDbCount,
@@ -128,11 +128,11 @@ import {
128
128
  useOnlineStatus,
129
129
  useSyncControl,
130
130
  useSyncStatus
131
- } from "./chunk-3Q74DK5K.js";
131
+ } from "./chunk-VYFAMTHI.js";
132
132
  import {
133
133
  Constants,
134
134
  createCombinedStatus
135
- } from "./chunk-Z3EJX3VG.js";
135
+ } from "./chunk-Z456IHCB.js";
136
136
  import {
137
137
  Accessory,
138
138
  Address,
@@ -321,12 +321,12 @@ import {
321
321
  UserMetadata
322
322
  } from "./chunk-SM73S2DY.js";
323
323
  import "./chunk-NSIAAYW3.js";
324
- import "./chunk-FMYXG4VN.js";
324
+ import "./chunk-MEBT5YHA.js";
325
325
  import {
326
326
  DEFAULT_QUERY_TIMEOUT,
327
327
  TIMEOUT_ERROR_MESSAGE,
328
328
  isTimeoutError
329
- } from "./chunk-DP3YEVSX.js";
329
+ } from "./chunk-6SDH7M7J.js";
330
330
  import {
331
331
  DataLayerContext,
332
332
  DataLayerCoreContext,
@@ -337,17 +337,19 @@ import {
337
337
  useDataLayerStatus,
338
338
  useDbQuery,
339
339
  useDbQueryById
340
- } from "./chunk-WQLIGVQR.js";
340
+ } from "./chunk-GWYTROSD.js";
341
341
  import "./chunk-RT4O5H2E.js";
342
- import "./chunk-HZIVE5AZ.js";
342
+ import "./chunk-YRIPM2AN.js";
343
343
  import {
344
344
  getSupabaseUrl,
345
345
  setSupabaseUrl
346
346
  } from "./chunk-GC3TBUWE.js";
347
+ import "./chunk-W7PERM66.js";
347
348
  import {
348
349
  useBatchDelete,
349
350
  useBatchUpsert
350
- } from "./chunk-ZGQ7Q4ZU.js";
351
+ } from "./chunk-WM25QE7E.js";
352
+ import "./chunk-QYAFI34Q.js";
351
353
  import {
352
354
  OPERATOR_MAP,
353
355
  PostgrestParser,
@@ -361,10 +363,10 @@ import {
361
363
  parseSelectParam,
362
364
  parseValue,
363
365
  sortSearchParams
364
- } from "./chunk-UJWETW36.js";
366
+ } from "./chunk-JOULSXOI.js";
365
367
  import "./chunk-J4ZVCXZ4.js";
366
- import "./chunk-CTRY7JDP.js";
367
- import "./chunk-INEUG6MC.js";
368
+ import "./chunk-YUX6RGLZ.js";
369
+ import "./chunk-AKIRHA4Q.js";
368
370
  import {
369
371
  ClientInstanceId,
370
372
  SupabaseProvider,
@@ -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-jVYdTeWx.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-B0UcYWVI.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-DHLJzmkO.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';
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-C7cJtiO8.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-C7cJtiO8.js';
12
- import { Q as QueryExecutor, P as PowerSyncDatabase$1 } from './executor-YJw4m7Q7.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';
13
13
  import * as react from 'react';
14
14
  import react__default, { ReactNode, JSX } from 'react';
15
15
  import { SupabaseClient } from '@supabase/supabase-js';
@@ -106,6 +106,21 @@ interface PowerSyncDatabase {
106
106
  * Used to map schema-qualified names like "core.Profile" to aliases like "CoreProfile".
107
107
  */
108
108
  type TableNameResolver = (table: string) => string;
109
+ /**
110
+ * Configuration options for the PowerSyncAdapter.
111
+ */
112
+ interface PowerSyncAdapterOptions {
113
+ /**
114
+ * Optional custom resolver for table names to PowerSync aliases.
115
+ */
116
+ tableNameResolver?: TableNameResolver;
117
+ /**
118
+ * Maximum number of subscriptions to keep in the registry.
119
+ * When exceeded, the least recently used subscriptions are evicted.
120
+ * @default 100
121
+ */
122
+ maxSubscriptions?: number;
123
+ }
109
124
  declare class PowerSyncAdapter implements TableDataAdapter, CapableDataAdapter {
110
125
  private db;
111
126
  private schema;
@@ -126,14 +141,36 @@ declare class PowerSyncAdapter implements TableDataAdapter, CapableDataAdapter {
126
141
  * If not provided, uses default auto-alias generation.
127
142
  */
128
143
  private tableNameResolver?;
144
+ /**
145
+ * Maximum number of subscriptions to keep in the registry.
146
+ */
147
+ private maxSubscriptions;
148
+ /**
149
+ * Subscription deduplication registry.
150
+ * Maps cache keys (table + serialized options) to shared subscription entries.
151
+ * This prevents duplicate PowerSync watch() calls when multiple components
152
+ * subscribe to the same query.
153
+ *
154
+ * Uses Map insertion order for LRU eviction - most recently accessed entries
155
+ * are moved to the end by deleting and re-adding.
156
+ */
157
+ private subscriptionRegistry;
129
158
  /**
130
159
  * Create a new PowerSyncAdapter
131
160
  *
132
161
  * @param db - PowerSync database instance
133
162
  * @param schema - Database schema for relationship resolution
134
- * @param tableNameResolver - Optional custom resolver for table names to PowerSync aliases
163
+ * @param options - Optional configuration (tableNameResolver, maxSubscriptions)
164
+ */
165
+ constructor(db: PowerSyncDatabase, schema: DatabaseSchema, options?: TableNameResolver | PowerSyncAdapterOptions);
166
+ /**
167
+ * Move a subscription entry to the end of the Map for LRU tracking.
168
+ * The most recently accessed entries are at the end; oldest are at the start.
169
+ *
170
+ * @param key - The subscription cache key
171
+ * @param entry - The subscription entry to touch
135
172
  */
136
- constructor(db: PowerSyncDatabase, schema: DatabaseSchema, tableNameResolver?: TableNameResolver);
173
+ private touchSubscription;
137
174
  /**
138
175
  * Resolve a table name to its PowerSync alias.
139
176
  * Schema-qualified names like "chat.Conversation" become "Conversation" (schema stripped).
@@ -160,12 +197,29 @@ declare class PowerSyncAdapter implements TableDataAdapter, CapableDataAdapter {
160
197
  * @returns Promise resolving to the record or null if not found
161
198
  */
162
199
  queryById<T>(table: string, id: string, options?: Pick<QueryOptions, "select">): Promise<T | null>;
200
+ /**
201
+ * Generate a unique cache key for subscription deduplication.
202
+ * Combines table name and serialized options to identify identical queries.
203
+ * Uses sorted keys to ensure consistent serialization regardless of property order.
204
+ *
205
+ * @param table - The table name
206
+ * @param options - Query options
207
+ * @returns A unique string key for the subscription registry
208
+ */
209
+ private generateSubscriptionKey;
163
210
  /**
164
211
  * Subscribe to changes on a query using PowerSync's native watch() API.
165
212
  *
166
213
  * This uses PowerSync's reactive query watching which efficiently detects
167
214
  * changes to the underlying data and re-executes the query only when needed.
168
215
  *
216
+ * Subscription Deduplication:
217
+ * Multiple components subscribing to the same query (same table + options)
218
+ * will share a single underlying PowerSync watch. This optimization:
219
+ * - Reduces database load by avoiding duplicate watches
220
+ * - Provides instant data to new subscribers from cached results
221
+ * - Properly cleans up when all subscribers unsubscribe
222
+ *
169
223
  * If the database doesn't support watch(), falls back to polling every 5 seconds.
170
224
  *
171
225
  * @param table - The table name to watch
@@ -13,7 +13,7 @@ import {
13
13
  useHasConflicts,
14
14
  usePendingConflicts,
15
15
  useSupabaseUpload
16
- } from "./chunk-BZSAPFFB.js";
16
+ } from "./chunk-N4KK5G5T.js";
17
17
  import {
18
18
  ADAPTER_STRATEGIES,
19
19
  AdapterAutoDetector,
@@ -65,7 +65,7 @@ import {
65
65
  useUpsertChangelog,
66
66
  useUpsertChangelogEntry,
67
67
  useUpsertChangelogMedia
68
- } from "./chunk-2XS2PM62.js";
68
+ } from "./chunk-DDL63KLQ.js";
69
69
  import {
70
70
  LiveChangeContext,
71
71
  LiveChangeContextProvider,
@@ -76,7 +76,7 @@ import {
76
76
  useUserMetadataState,
77
77
  useUserMetadataValue,
78
78
  userMetadataContext
79
- } from "./chunk-FIAXWEBK.js";
79
+ } from "./chunk-4EO55YV2.js";
80
80
  import {
81
81
  PostgrestFilter,
82
82
  binarySearch,
@@ -104,7 +104,7 @@ import {
104
104
  removeAliasFromDeclaration,
105
105
  removeFirstPathElement,
106
106
  setFilterValue
107
- } from "./chunk-YA6MUTA7.js";
107
+ } from "./chunk-FI6JAD5G.js";
108
108
  import {
109
109
  useAdvanceQuery,
110
110
  useDbCount,
@@ -116,12 +116,12 @@ import {
116
116
  useOnlineStatus,
117
117
  useSyncControl,
118
118
  useSyncStatus
119
- } from "./chunk-3Q74DK5K.js";
119
+ } from "./chunk-VYFAMTHI.js";
120
120
  import {
121
121
  Constants,
122
122
  createCombinedStatus,
123
123
  useDbAdvanceFilterQuery
124
- } from "./chunk-Z3EJX3VG.js";
124
+ } from "./chunk-Z456IHCB.js";
125
125
  import {
126
126
  Accessory,
127
127
  Address,
@@ -310,12 +310,12 @@ import {
310
310
  UserMetadata
311
311
  } from "./chunk-SM73S2DY.js";
312
312
  import "./chunk-NSIAAYW3.js";
313
- import "./chunk-FMYXG4VN.js";
313
+ import "./chunk-MEBT5YHA.js";
314
314
  import {
315
315
  DEFAULT_QUERY_TIMEOUT,
316
316
  TIMEOUT_ERROR_MESSAGE,
317
317
  isTimeoutError
318
- } from "./chunk-DP3YEVSX.js";
318
+ } from "./chunk-6SDH7M7J.js";
319
319
  import {
320
320
  DataLayerContext,
321
321
  DataLayerCoreContext,
@@ -326,17 +326,19 @@ import {
326
326
  useDataLayerStatus,
327
327
  useDbQuery,
328
328
  useDbQueryById
329
- } from "./chunk-WQLIGVQR.js";
329
+ } from "./chunk-GWYTROSD.js";
330
330
  import "./chunk-RT4O5H2E.js";
331
- import "./chunk-HZIVE5AZ.js";
331
+ import "./chunk-YRIPM2AN.js";
332
332
  import {
333
333
  getSupabaseUrl,
334
334
  setSupabaseUrl
335
335
  } from "./chunk-GC3TBUWE.js";
336
+ import "./chunk-W7PERM66.js";
336
337
  import {
337
338
  useBatchDelete,
338
339
  useBatchUpsert
339
- } from "./chunk-ZGQ7Q4ZU.js";
340
+ } from "./chunk-WM25QE7E.js";
341
+ import "./chunk-QYAFI34Q.js";
340
342
  import {
341
343
  OPERATOR_MAP,
342
344
  PostgrestParser,
@@ -350,10 +352,10 @@ import {
350
352
  parseSelectParam,
351
353
  parseValue,
352
354
  sortSearchParams
353
- } from "./chunk-UJWETW36.js";
355
+ } from "./chunk-JOULSXOI.js";
354
356
  import "./chunk-J4ZVCXZ4.js";
355
- import "./chunk-CTRY7JDP.js";
356
- import "./chunk-INEUG6MC.js";
357
+ import "./chunk-YUX6RGLZ.js";
358
+ import "./chunk-AKIRHA4Q.js";
357
359
  import {
358
360
  ClientInstanceId,
359
361
  SupabaseProvider,
@@ -1,8 +1,8 @@
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
- import { u as useDbAdvanceFilterQuery, Q as QueryState } from './index-jVYdTeWx.js';
4
- export { r as BackendSelectionResult, B as BooleanOperator, k as ClarificationSuggestion, C as CombinedProviderStatus, j as ComputedSortConfig, n as DataLayerWithPowerSyncProps, D as DbChangeLog, E as EnhancedSyncControl, a as EnhancedSyncStatus, d as FilterConditionType, m as FilterContextType, g as FilterInput, h as FilterState, H as HasPowerSyncConfig, O as OrderColumn, P as PowerSyncEnabledConfig, b as PowerSyncEnabledContextValue, q as PowerSyncTables, U as UseDataLayerWithPowerSync, p as UseSyncControlWithPowerSync, o as UseSyncStatusWithPowerSync, V as ValueOrArrayForPropertyType, c as createCombinedStatus, s as normalizeFilter } from './index-jVYdTeWx.js';
5
- 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, af as UseDbPartialQueryResult, 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, ag as useDbPartialQuery, 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-B0UcYWVI.js';
3
+ import { u as useDbAdvanceFilterQuery, Q as QueryState } from './index-CFUuTzXO.js';
4
+ export { r as BackendSelectionResult, B as BooleanOperator, k as ClarificationSuggestion, C as CombinedProviderStatus, j as ComputedSortConfig, n as DataLayerWithPowerSyncProps, D as DbChangeLog, E as EnhancedSyncControl, a as EnhancedSyncStatus, d as FilterConditionType, m as FilterContextType, g as FilterInput, h as FilterState, H as HasPowerSyncConfig, O as OrderColumn, P as PowerSyncEnabledConfig, b as PowerSyncEnabledContextValue, q as PowerSyncTables, U as UseDataLayerWithPowerSync, p as UseSyncControlWithPowerSync, o as UseSyncStatusWithPowerSync, V as ValueOrArrayForPropertyType, c as createCombinedStatus, s as normalizeFilter } from './index-CFUuTzXO.js';
5
+ 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, af as UseDbPartialQueryResult, 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, ag as useDbPartialQuery, 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';
6
6
  import * as _tanstack_react_query from '@tanstack/react-query';
7
7
  import { UseInfiniteQueryOptions, InfiniteData, UseQueryOptions, QueryClient } from '@tanstack/react-query';
8
8
  import { D as Database } from './useSupabase-DSZNeXnF.js';
@@ -14,14 +14,15 @@ export { F as Fetch, i as GenericFunction, g as GenericNonUpdatableView, f as Ge
14
14
  import { PostgrestSingleResponse, RealtimePostgresChangesPayload, SupabaseClient } from '@supabase/supabase-js';
15
15
  import { useInsertMutation, useUpdateMutation } from '@supabase-cache-helpers/postgrest-react-query';
16
16
  export { U as UseDbQuerySingleReturn, u as useDbQuery } from './useDbQuery-C-TL8jY1.js';
17
- 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, c as useDataLayerOptional, e as useDbCount, e as useDbCountV3, f as useDbDeleteV3, g as useDbInfiniteQueryV3, h as useDbInsertV3, j as useDbQueryById, i as useDbQueryV3, k as useDbUpdateV3, l as useDbUpsert, l as useDbUpsertV3, l as useUpsert } from './useDbCount-DHLJzmkO.js';
17
+ 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, c as useDataLayerOptional, e as useDbCount, e as useDbCountV3, f as useDbDeleteV3, g as useDbInfiniteQueryV3, h as useDbInsertV3, j as useDbQueryById, i as useDbQueryV3, k as useDbUpdateV3, l as useDbUpsert, l as useDbUpsertV3, l as useUpsert } from './useDbCount-Ckb-FhZk.js';
18
18
  import { DataLayerConfig } from './core/index.js';
19
- export { AdapterRegistry as AdapterRegistryInterface, AutoStrategy, BuiltQuery, CachedStrategy, ColumnInfo, ColumnType, ConnectionConfig, DataAdapter, 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';
19
+ export { AdapterRegistry as AdapterRegistryInterface, AutoStrategy, BuiltQuery, CachedStrategy, ColumnInfo, ColumnType, ConnectionConfig, DataAdapter, DataLayerHooks, DatabaseSchema, DeleteMutationResult, ExplicitFkSpec, 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';
20
20
  export { u as useBatchDelete, a as useBatchUpsert } from './useBatchUpsert-DAkiCNo3.js';
21
- export { UsePartialAdvancedQueryResult, UsePartialQueryResult, UseQuerySingleReturn, extractColumnNames, extractRelationNames, getRelationSelect, hasRelation, parseSelect, stringifySelect, tokenizeTopLevel, useAdvancedFilterQuery, useAdvancedQuery, useInfiniteQuery, usePartialAdvancedQuery, usePartialQuery, useQuery } from './query/index.js';
22
- export { P as PowerSyncDatabase, Q as QueryExecutor, e as RelationJoinData, R as RelationshipResolver, b as ResultJoiner, S as SQLBuilder, f as createQueryExecutor, c as createRelationshipResolver, d as createResultJoiner, a as createSQLBuilder } from './executor-YJw4m7Q7.js';
23
- import { r as DataLayerContextValue } from './DataLayerContext-C7cJtiO8.js';
24
- 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, u as DataLayerStatus, T as TableDataAdapter, j as createAdapterAutoDetector, h as createAdapterRegistry } from './DataLayerContext-C7cJtiO8.js';
21
+ export { E as ExtractedExplicitFk, e as extractColumnNames, d as extractExplicitFkRelations, f as extractExplicitFkTables, a as extractRelationNames, g as getRelationSelect, b as hasExplicitFk, h as hasRelation, p as parseSelect, c as selectHasExplicitFkSyntax, s as stringifySelect, t as tokenizeTopLevel } from './select-parser-BAV7fOaM.js';
22
+ export { P as PowerSyncDatabase, Q as QueryExecutor, e as RelationJoinData, R as RelationshipResolver, b as ResultJoiner, S as SQLBuilder, f as createQueryExecutor, c as createRelationshipResolver, d as createResultJoiner, a as createSQLBuilder } from './executor-D15yjeMo.js';
23
+ export { UsePartialAdvancedQueryResult, UsePartialQueryResult, UseQuerySingleReturn, useAdvancedFilterQuery, useAdvancedQuery, useInfiniteQuery, usePartialAdvancedQuery, usePartialQuery, useQuery } from './query/index.js';
24
+ import { r as DataLayerContextValue } from './DataLayerContext-BYZtDD0g.js';
25
+ 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, u as DataLayerStatus, T as TableDataAdapter, j as createAdapterAutoDetector, h as createAdapterRegistry } from './DataLayerContext-BYZtDD0g.js';
25
26
  import { ReactNode, JSX } from 'react';
26
27
  export { B as BatchAnalysisProgress, E as ExtractedReceipt, P as PendingExpense, a as useReceiptAI, u as useSupabaseFunction } from './useReceiptAI-6HkRpRml.js';
27
28
  export { e as UserMetadataContextProvider, c as UserMetadataContextType, a as UserMetadataInsert, U as UserMetadataRow, b as UserMetadataUpdate, u as useLiveChangesIndicator, h as useSetUserMetadata, f as useUserMetadata, i as useUserMetadataState, g as useUserMetadataValue, d as userMetadataContext } from './UserMetadataContext-pQb3A8_Q.js';