@powersync/common 1.57.1 → 2.0.0

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 (219) hide show
  1. package/lib/attachments/AttachmentContext.d.ts +5 -5
  2. package/lib/attachments/AttachmentContext.js +6 -2
  3. package/lib/attachments/AttachmentContext.js.map +1 -1
  4. package/lib/attachments/AttachmentQueue.d.ts +6 -6
  5. package/lib/attachments/AttachmentQueue.js +9 -8
  6. package/lib/attachments/AttachmentQueue.js.map +1 -1
  7. package/lib/attachments/AttachmentService.d.ts +3 -3
  8. package/lib/attachments/AttachmentService.js +4 -3
  9. package/lib/attachments/AttachmentService.js.map +1 -1
  10. package/lib/attachments/Schema.d.ts +2 -2
  11. package/lib/attachments/SyncingService.d.ts +2 -2
  12. package/lib/attachments/SyncingService.js +21 -6
  13. package/lib/attachments/SyncingService.js.map +1 -1
  14. package/lib/client/{AbstractPowerSyncDatabase.d.ts → CommonPowerSyncDatabase.d.ts} +56 -232
  15. package/lib/client/CommonPowerSyncDatabase.js +2 -0
  16. package/lib/client/CommonPowerSyncDatabase.js.map +1 -0
  17. package/lib/client/SQLOpenFactory.d.ts +35 -13
  18. package/lib/client/SQLOpenFactory.js +1 -25
  19. package/lib/client/SQLOpenFactory.js.map +1 -1
  20. package/lib/client/compilableQueryWatch.d.ts +2 -2
  21. package/lib/client/compilableQueryWatch.js +1 -2
  22. package/lib/client/compilableQueryWatch.js.map +1 -1
  23. package/lib/client/connection/PowerSyncBackendConnector.d.ts +3 -3
  24. package/lib/client/runOnSchemaChange.d.ts +2 -2
  25. package/lib/client/runOnSchemaChange.js.map +1 -1
  26. package/lib/client/sync/bucket/CrudEntry.d.ts +3 -34
  27. package/lib/client/sync/bucket/CrudEntry.js +0 -99
  28. package/lib/client/sync/bucket/CrudEntry.js.map +1 -1
  29. package/lib/client/sync/options.d.ts +65 -0
  30. package/lib/client/sync/options.js +25 -0
  31. package/lib/client/sync/options.js.map +1 -0
  32. package/lib/client/sync/sync-streams.d.ts +1 -1
  33. package/lib/client/triggers/TriggerManager.d.ts +9 -38
  34. package/lib/client/watched/GetAllQuery.d.ts +3 -3
  35. package/lib/client/watched/GetAllQuery.js +1 -1
  36. package/lib/client/watched/GetAllQuery.js.map +1 -1
  37. package/lib/client/watched/WatchedQuery.d.ts +2 -10
  38. package/lib/client/watched/WatchedQuery.js +0 -11
  39. package/lib/client/watched/WatchedQuery.js.map +1 -1
  40. package/lib/client/watched/processors/DifferentialQueryProcessor.d.ts +0 -50
  41. package/lib/client/watched/processors/DifferentialQueryProcessor.js +1 -176
  42. package/lib/client/watched/processors/DifferentialQueryProcessor.js.map +1 -1
  43. package/lib/client/watched/processors/OnChangeQueryProcessor.d.ts +0 -22
  44. package/lib/client/watched/processors/OnChangeQueryProcessor.js +1 -82
  45. package/lib/client/watched/processors/OnChangeQueryProcessor.js.map +1 -1
  46. package/lib/db/DBAdapter.d.ts +72 -154
  47. package/lib/db/DBAdapter.js +70 -108
  48. package/lib/db/DBAdapter.js.map +1 -1
  49. package/lib/db/QueryResult.d.ts +104 -0
  50. package/lib/db/QueryResult.js +96 -0
  51. package/lib/db/QueryResult.js.map +1 -0
  52. package/lib/db/crud/SyncProgress.d.ts +1 -13
  53. package/lib/db/crud/SyncProgress.js +1 -62
  54. package/lib/db/crud/SyncProgress.js.map +1 -1
  55. package/lib/db/crud/SyncStatus.d.ts +32 -66
  56. package/lib/db/crud/SyncStatus.js +1 -253
  57. package/lib/db/crud/SyncStatus.js.map +1 -1
  58. package/lib/db/schema/Column.d.ts +0 -7
  59. package/lib/db/schema/Column.js +0 -7
  60. package/lib/db/schema/Column.js.map +1 -1
  61. package/lib/db/schema/Index.d.ts +2 -6
  62. package/lib/db/schema/Index.js +1 -4
  63. package/lib/db/schema/Index.js.map +1 -1
  64. package/lib/db/schema/IndexedColumn.d.ts +2 -6
  65. package/lib/db/schema/IndexedColumn.js +1 -4
  66. package/lib/db/schema/IndexedColumn.js.map +1 -1
  67. package/lib/db/schema/Schema.d.ts +4 -28
  68. package/lib/db/schema/Schema.js.map +1 -1
  69. package/lib/db/schema/Table.d.ts +50 -96
  70. package/lib/db/schema/Table.js +83 -91
  71. package/lib/db/schema/Table.js.map +1 -1
  72. package/lib/index.d.ts +5 -21
  73. package/lib/index.js +5 -22
  74. package/lib/index.js.map +1 -1
  75. package/lib/utils/BaseObserver.d.ts +1 -1
  76. package/lib/utils/BaseObserver.js +1 -1
  77. package/lib/utils/Logger.d.ts +52 -23
  78. package/lib/utils/Logger.js +35 -33
  79. package/lib/utils/Logger.js.map +1 -1
  80. package/lib/utils/MetaBaseObserver.d.ts +11 -11
  81. package/lib/utils/MetaBaseObserver.js +1 -50
  82. package/lib/utils/MetaBaseObserver.js.map +1 -1
  83. package/lib/utils/mutex.d.ts +3 -53
  84. package/lib/utils/mutex.js +1 -156
  85. package/lib/utils/mutex.js.map +1 -1
  86. package/package.json +8 -45
  87. package/src/attachments/AttachmentContext.ts +11 -10
  88. package/src/attachments/AttachmentQueue.ts +15 -14
  89. package/src/attachments/AttachmentService.ts +7 -6
  90. package/src/attachments/Schema.ts +2 -2
  91. package/src/attachments/SyncingService.ts +23 -9
  92. package/src/client/CommonPowerSyncDatabase.ts +540 -0
  93. package/src/client/SQLOpenFactory.ts +38 -22
  94. package/src/client/compilableQueryWatch.ts +3 -4
  95. package/src/client/connection/PowerSyncBackendConnector.ts +3 -3
  96. package/src/client/runOnSchemaChange.ts +2 -2
  97. package/src/client/sync/bucket/CrudEntry.ts +4 -104
  98. package/src/client/sync/options.ts +77 -0
  99. package/src/client/sync/sync-streams.ts +1 -1
  100. package/src/client/triggers/TriggerManager.ts +10 -41
  101. package/src/client/watched/GetAllQuery.ts +3 -3
  102. package/src/client/watched/WatchedQuery.ts +2 -15
  103. package/src/client/watched/processors/DifferentialQueryProcessor.ts +0 -223
  104. package/src/client/watched/processors/OnChangeQueryProcessor.ts +0 -111
  105. package/src/db/DBAdapter.ts +141 -226
  106. package/src/db/QueryResult.ts +195 -0
  107. package/src/db/crud/SyncProgress.ts +2 -42
  108. package/src/db/crud/SyncStatus.ts +45 -220
  109. package/src/db/schema/Column.ts +0 -8
  110. package/src/db/schema/Index.ts +3 -6
  111. package/src/db/schema/IndexedColumn.ts +3 -6
  112. package/src/db/schema/Schema.ts +4 -4
  113. package/src/db/schema/Table.ts +111 -186
  114. package/src/index.ts +5 -21
  115. package/src/utils/BaseObserver.ts +1 -1
  116. package/src/utils/Logger.ts +80 -34
  117. package/src/utils/MetaBaseObserver.ts +14 -60
  118. package/src/utils/mutex.ts +4 -201
  119. package/dist/bundle.cjs +0 -14390
  120. package/dist/bundle.cjs.map +0 -1
  121. package/dist/bundle.mjs +0 -14309
  122. package/dist/bundle.mjs.map +0 -1
  123. package/dist/bundle.node.cjs +0 -12021
  124. package/dist/bundle.node.cjs.map +0 -1
  125. package/dist/bundle.node.mjs +0 -11940
  126. package/dist/bundle.node.mjs.map +0 -1
  127. package/dist/index.d.cts +0 -4651
  128. package/legacy/sync_protocol.d.ts +0 -103
  129. package/lib/client/AbstractPowerSyncDatabase.js +0 -990
  130. package/lib/client/AbstractPowerSyncDatabase.js.map +0 -1
  131. package/lib/client/AbstractPowerSyncOpenFactory.d.ts +0 -28
  132. package/lib/client/AbstractPowerSyncOpenFactory.js +0 -28
  133. package/lib/client/AbstractPowerSyncOpenFactory.js.map +0 -1
  134. package/lib/client/ConnectionManager.d.ts +0 -115
  135. package/lib/client/ConnectionManager.js +0 -294
  136. package/lib/client/ConnectionManager.js.map +0 -1
  137. package/lib/client/CustomQuery.d.ts +0 -22
  138. package/lib/client/CustomQuery.js +0 -43
  139. package/lib/client/CustomQuery.js.map +0 -1
  140. package/lib/client/constants.d.ts +0 -4
  141. package/lib/client/constants.js +0 -5
  142. package/lib/client/constants.js.map +0 -1
  143. package/lib/client/sync/bucket/BucketStorageAdapter.d.ts +0 -56
  144. package/lib/client/sync/bucket/BucketStorageAdapter.js +0 -29
  145. package/lib/client/sync/bucket/BucketStorageAdapter.js.map +0 -1
  146. package/lib/client/sync/bucket/SqliteBucketStorage.d.ts +0 -37
  147. package/lib/client/sync/bucket/SqliteBucketStorage.js +0 -165
  148. package/lib/client/sync/bucket/SqliteBucketStorage.js.map +0 -1
  149. package/lib/client/sync/stream/AbstractRemote.d.ts +0 -180
  150. package/lib/client/sync/stream/AbstractRemote.js +0 -505
  151. package/lib/client/sync/stream/AbstractRemote.js.map +0 -1
  152. package/lib/client/sync/stream/AbstractStreamingSyncImplementation.d.ts +0 -265
  153. package/lib/client/sync/stream/AbstractStreamingSyncImplementation.js +0 -705
  154. package/lib/client/sync/stream/AbstractStreamingSyncImplementation.js.map +0 -1
  155. package/lib/client/sync/stream/WebsocketClientTransport.d.ts +0 -15
  156. package/lib/client/sync/stream/WebsocketClientTransport.js +0 -62
  157. package/lib/client/sync/stream/WebsocketClientTransport.js.map +0 -1
  158. package/lib/client/sync/stream/core-instruction.d.ts +0 -77
  159. package/lib/client/sync/stream/core-instruction.js +0 -30
  160. package/lib/client/sync/stream/core-instruction.js.map +0 -1
  161. package/lib/client/triggers/MemoryTriggerClaimManager.d.ts +0 -6
  162. package/lib/client/triggers/MemoryTriggerClaimManager.js +0 -21
  163. package/lib/client/triggers/MemoryTriggerClaimManager.js.map +0 -1
  164. package/lib/client/triggers/TriggerManagerImpl.d.ts +0 -39
  165. package/lib/client/triggers/TriggerManagerImpl.js +0 -410
  166. package/lib/client/triggers/TriggerManagerImpl.js.map +0 -1
  167. package/lib/client/watched/processors/AbstractQueryProcessor.d.ts +0 -68
  168. package/lib/client/watched/processors/AbstractQueryProcessor.js +0 -151
  169. package/lib/client/watched/processors/AbstractQueryProcessor.js.map +0 -1
  170. package/lib/db/ConnectionClosedError.d.ts +0 -12
  171. package/lib/db/ConnectionClosedError.js +0 -23
  172. package/lib/db/ConnectionClosedError.js.map +0 -1
  173. package/lib/db/schema/TableV2.d.ts +0 -11
  174. package/lib/db/schema/TableV2.js +0 -11
  175. package/lib/db/schema/TableV2.js.map +0 -1
  176. package/lib/utils/AbortOperation.d.ts +0 -11
  177. package/lib/utils/AbortOperation.js +0 -21
  178. package/lib/utils/AbortOperation.js.map +0 -1
  179. package/lib/utils/ControlledExecutor.d.ts +0 -31
  180. package/lib/utils/ControlledExecutor.js +0 -54
  181. package/lib/utils/ControlledExecutor.js.map +0 -1
  182. package/lib/utils/async.d.ts +0 -46
  183. package/lib/utils/async.js +0 -147
  184. package/lib/utils/async.js.map +0 -1
  185. package/lib/utils/compatibility.d.ts +0 -8
  186. package/lib/utils/compatibility.js +0 -9
  187. package/lib/utils/compatibility.js.map +0 -1
  188. package/lib/utils/parseQuery.d.ts +0 -12
  189. package/lib/utils/parseQuery.js +0 -20
  190. package/lib/utils/parseQuery.js.map +0 -1
  191. package/lib/utils/queue.d.ts +0 -16
  192. package/lib/utils/queue.js +0 -42
  193. package/lib/utils/queue.js.map +0 -1
  194. package/lib/utils/stream_transform.d.ts +0 -41
  195. package/lib/utils/stream_transform.js +0 -211
  196. package/lib/utils/stream_transform.js.map +0 -1
  197. package/src/client/AbstractPowerSyncDatabase.ts +0 -1408
  198. package/src/client/AbstractPowerSyncOpenFactory.ts +0 -45
  199. package/src/client/ConnectionManager.ts +0 -405
  200. package/src/client/CustomQuery.ts +0 -56
  201. package/src/client/constants.ts +0 -4
  202. package/src/client/sync/bucket/BucketStorageAdapter.ts +0 -65
  203. package/src/client/sync/bucket/SqliteBucketStorage.ts +0 -202
  204. package/src/client/sync/stream/AbstractRemote.ts +0 -644
  205. package/src/client/sync/stream/AbstractStreamingSyncImplementation.ts +0 -970
  206. package/src/client/sync/stream/WebsocketClientTransport.ts +0 -82
  207. package/src/client/sync/stream/core-instruction.ts +0 -109
  208. package/src/client/triggers/MemoryTriggerClaimManager.ts +0 -25
  209. package/src/client/triggers/TriggerManagerImpl.ts +0 -501
  210. package/src/client/watched/processors/AbstractQueryProcessor.ts +0 -226
  211. package/src/db/ConnectionClosedError.ts +0 -25
  212. package/src/db/schema/TableV2.ts +0 -11
  213. package/src/utils/AbortOperation.ts +0 -19
  214. package/src/utils/ControlledExecutor.ts +0 -78
  215. package/src/utils/async.ts +0 -185
  216. package/src/utils/compatibility.ts +0 -9
  217. package/src/utils/parseQuery.ts +0 -31
  218. package/src/utils/queue.ts +0 -48
  219. package/src/utils/stream_transform.ts +0 -260
@@ -1,204 +1,7 @@
1
- import { Queue } from './queue.js';
2
-
3
1
  /**
4
- * @internal
2
+ * @internal This is implemented in `@powersync/shared-internals`, but we need it in the attachment service
3
+ * implementation.
5
4
  */
6
- export type UnlockFn = () => void;
7
-
8
- /**
9
- * An asynchronous semaphore implementation with associated items per lease.
10
- *
11
- * @internal This class is meant to be used in PowerSync SDKs only, and is not part of the public API.
12
- */
13
- export class Semaphore<T> {
14
- // Available items that are not currently assigned to a waiter.
15
- private readonly available: Queue<T>;
16
-
17
- readonly size: number;
18
- // Linked list of waiters. We don't expect the wait list to become particularly large, and this allows removing
19
- // aborted waiters from the middle of the list efficiently.
20
- private firstWaiter?: SemaphoreWaitNode<T>;
21
- private lastWaiter?: SemaphoreWaitNode<T>;
22
-
23
- constructor(elements: Iterable<T>) {
24
- this.available = new Queue(elements);
25
- this.size = this.available.length;
26
- }
27
-
28
- private addWaiter(requestedItems: number, onAcquire: () => void): SemaphoreWaitNode<T> {
29
- const node: SemaphoreWaitNode<T> = {
30
- isActive: true,
31
- acquiredItems: [],
32
- remainingItems: requestedItems,
33
- onAcquire,
34
- prev: this.lastWaiter
35
- };
36
- if (this.lastWaiter) {
37
- this.lastWaiter.next = node;
38
- this.lastWaiter = node;
39
- } else {
40
- // First waiter
41
- this.lastWaiter = this.firstWaiter = node;
42
- }
43
-
44
- return node;
45
- }
46
-
47
- private deactivateWaiter(waiter: SemaphoreWaitNode<T>) {
48
- const { prev, next } = waiter;
49
- waiter.isActive = false;
50
-
51
- if (prev) prev.next = next;
52
- if (next) next.prev = prev;
53
- if (waiter == this.firstWaiter) this.firstWaiter = next;
54
- if (waiter == this.lastWaiter) this.lastWaiter = prev;
55
- }
56
-
57
- private requestPermits(amount: number, abort?: AbortSignal): Promise<{ items: T[]; release: UnlockFn }> {
58
- if (amount <= 0 || amount > this.size) {
59
- throw new Error(`Invalid amount of items requested (${amount}), must be between 1 and ${this.size}`);
60
- }
61
-
62
- return new Promise((resolve, reject) => {
63
- function rejectAborted() {
64
- reject(abort?.reason ?? new Error('Semaphore acquire aborted'));
65
- }
66
- if (abort?.aborted) {
67
- return rejectAborted();
68
- }
69
-
70
- let waiter: SemaphoreWaitNode<T>;
71
-
72
- const markCompleted = () => {
73
- const items = waiter.acquiredItems;
74
- waiter.acquiredItems = []; // Avoid releasing items twice.
75
-
76
- for (const element of items) {
77
- // Give to next waiter, if possible.
78
- const nextWaiter = this.firstWaiter;
79
- if (nextWaiter) {
80
- nextWaiter.acquiredItems.push(element);
81
- nextWaiter.remainingItems--;
82
- if (nextWaiter.remainingItems == 0) {
83
- nextWaiter.onAcquire();
84
- }
85
- } else {
86
- // No pending waiter, return lease into pool.
87
- this.available.addLast(element);
88
- }
89
- }
90
- };
91
-
92
- const onAbort = () => {
93
- abort?.removeEventListener('abort', onAbort);
94
-
95
- if (waiter.isActive) {
96
- this.deactivateWaiter(waiter);
97
- rejectAborted();
98
- }
99
- };
100
-
101
- const resolvePromise = () => {
102
- this.deactivateWaiter(waiter);
103
- abort?.removeEventListener('abort', onAbort);
104
-
105
- const items = waiter.acquiredItems;
106
- resolve({ items, release: markCompleted });
107
- };
108
-
109
- waiter = this.addWaiter(amount, resolvePromise);
110
-
111
- // If there are items in the pool that haven't been assigned, we can pull them into this waiter. Note that this is
112
- // only the case if we're the first waiter (otherwise, items would have been assigned to an earlier waiter).
113
- while (!this.available.isEmpty && waiter.remainingItems > 0) {
114
- waiter.acquiredItems.push(this.available.removeFirst());
115
- waiter.remainingItems--;
116
- }
117
-
118
- if (waiter.remainingItems == 0) {
119
- return resolvePromise();
120
- }
121
-
122
- abort?.addEventListener('abort', onAbort);
123
- });
124
- }
125
-
126
- /**
127
- * Requests a single item from the pool.
128
- *
129
- * The returned `release` callback must be invoked to return the item into the pool.
130
- */
131
- async requestOne(abort?: AbortSignal): Promise<{ item: T; release: UnlockFn }> {
132
- const { items, release } = await this.requestPermits(1, abort);
133
- return { release, item: items[0] };
134
- }
135
-
136
- /**
137
- * Requests access to all items from the pool.
138
- *
139
- * The returned `release` callback must be invoked to return items into the pool.
140
- */
141
- requestAll(abort?: AbortSignal): Promise<{ items: T[]; release: UnlockFn }> {
142
- return this.requestPermits(this.size, abort);
143
- }
144
- }
145
-
146
- interface SemaphoreWaitNode<T> {
147
- /**
148
- * Whether the waiter is currently active (not aborted and not fullfilled).
149
- */
150
- isActive: boolean;
151
- acquiredItems: T[];
152
- remainingItems: number;
153
- onAcquire: () => void;
154
- prev?: SemaphoreWaitNode<T>;
155
- next?: SemaphoreWaitNode<T>;
156
- }
157
-
158
- /**
159
- * An asynchronous mutex implementation.
160
- *
161
- * @internal This class is meant to be used in PowerSync SDKs only, and is not part of the public API.
162
- */
163
- export class Mutex {
164
- private inner = new Semaphore([null]);
165
-
166
- async acquire(abort?: AbortSignal): Promise<UnlockFn> {
167
- const { release } = await this.inner.requestOne(abort);
168
- return release;
169
- }
170
-
171
- async runExclusive<T>(fn: () => PromiseLike<T> | T, abort?: AbortSignal): Promise<T> {
172
- const returnMutex = await this.acquire(abort);
173
-
174
- try {
175
- return await fn();
176
- } finally {
177
- returnMutex();
178
- }
179
- }
180
- }
181
-
182
- /**
183
- * Creates a signal aborting after the set timeout.
184
- *
185
- * @internal
186
- */
187
- export function timeoutSignal(timeout: number): AbortSignal;
188
-
189
- /**
190
- * @internal
191
- */
192
- export function timeoutSignal(timeout?: number): AbortSignal | undefined;
193
-
194
- /**
195
- * @internal
196
- */
197
- export function timeoutSignal(timeout?: number): AbortSignal | undefined {
198
- if (timeout == null) return;
199
- if ('timeout' in AbortSignal) return AbortSignal.timeout(timeout);
200
-
201
- const controller = new AbortController();
202
- setTimeout(() => controller.abort(new Error('Timeout waiting for lock')), timeout);
203
- return controller.signal;
5
+ export interface Mutex {
6
+ runExclusive<T>(fn: () => PromiseLike<T> | T, abort?: AbortSignal): Promise<T>;
204
7
  }