@powersync/common 1.57.3 → 2.1.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 (229) 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 +85 -47
  5. package/lib/attachments/AttachmentQueue.js +55 -18
  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/AttachmentTransportAdapter.d.ts +47 -0
  11. package/lib/attachments/AttachmentTransportAdapter.js +2 -0
  12. package/lib/attachments/AttachmentTransportAdapter.js.map +1 -0
  13. package/lib/attachments/BufferedAttachmentTransport.d.ts +24 -0
  14. package/lib/attachments/BufferedAttachmentTransport.js +32 -0
  15. package/lib/attachments/BufferedAttachmentTransport.js.map +1 -0
  16. package/lib/attachments/LocalStorageAdapter.d.ts +19 -0
  17. package/lib/attachments/Schema.d.ts +2 -2
  18. package/lib/attachments/SyncingService.d.ts +8 -5
  19. package/lib/attachments/SyncingService.js +31 -15
  20. package/lib/attachments/SyncingService.js.map +1 -1
  21. package/lib/client/{AbstractPowerSyncDatabase.d.ts → CommonPowerSyncDatabase.d.ts} +56 -232
  22. package/lib/client/CommonPowerSyncDatabase.js +2 -0
  23. package/lib/client/CommonPowerSyncDatabase.js.map +1 -0
  24. package/lib/client/SQLOpenFactory.d.ts +35 -13
  25. package/lib/client/SQLOpenFactory.js +1 -25
  26. package/lib/client/SQLOpenFactory.js.map +1 -1
  27. package/lib/client/compilableQueryWatch.d.ts +2 -2
  28. package/lib/client/compilableQueryWatch.js +1 -2
  29. package/lib/client/compilableQueryWatch.js.map +1 -1
  30. package/lib/client/connection/PowerSyncBackendConnector.d.ts +3 -3
  31. package/lib/client/runOnSchemaChange.d.ts +2 -2
  32. package/lib/client/runOnSchemaChange.js.map +1 -1
  33. package/lib/client/sync/bucket/CrudEntry.d.ts +3 -34
  34. package/lib/client/sync/bucket/CrudEntry.js +0 -99
  35. package/lib/client/sync/bucket/CrudEntry.js.map +1 -1
  36. package/lib/client/sync/options.d.ts +65 -0
  37. package/lib/client/sync/options.js +25 -0
  38. package/lib/client/sync/options.js.map +1 -0
  39. package/lib/client/sync/sync-streams.d.ts +1 -1
  40. package/lib/client/triggers/TriggerManager.d.ts +9 -38
  41. package/lib/client/watched/GetAllQuery.d.ts +3 -3
  42. package/lib/client/watched/GetAllQuery.js +1 -1
  43. package/lib/client/watched/GetAllQuery.js.map +1 -1
  44. package/lib/client/watched/WatchedQuery.d.ts +2 -10
  45. package/lib/client/watched/WatchedQuery.js +0 -11
  46. package/lib/client/watched/WatchedQuery.js.map +1 -1
  47. package/lib/client/watched/processors/DifferentialQueryProcessor.d.ts +0 -50
  48. package/lib/client/watched/processors/DifferentialQueryProcessor.js +1 -176
  49. package/lib/client/watched/processors/DifferentialQueryProcessor.js.map +1 -1
  50. package/lib/client/watched/processors/OnChangeQueryProcessor.d.ts +0 -22
  51. package/lib/client/watched/processors/OnChangeQueryProcessor.js +1 -82
  52. package/lib/client/watched/processors/OnChangeQueryProcessor.js.map +1 -1
  53. package/lib/db/DBAdapter.d.ts +72 -154
  54. package/lib/db/DBAdapter.js +70 -108
  55. package/lib/db/DBAdapter.js.map +1 -1
  56. package/lib/db/QueryResult.d.ts +104 -0
  57. package/lib/db/QueryResult.js +96 -0
  58. package/lib/db/QueryResult.js.map +1 -0
  59. package/lib/db/crud/SyncProgress.d.ts +1 -13
  60. package/lib/db/crud/SyncProgress.js +1 -62
  61. package/lib/db/crud/SyncProgress.js.map +1 -1
  62. package/lib/db/crud/SyncStatus.d.ts +32 -66
  63. package/lib/db/crud/SyncStatus.js +1 -253
  64. package/lib/db/crud/SyncStatus.js.map +1 -1
  65. package/lib/db/schema/Column.d.ts +0 -7
  66. package/lib/db/schema/Column.js +0 -7
  67. package/lib/db/schema/Column.js.map +1 -1
  68. package/lib/db/schema/Index.d.ts +2 -6
  69. package/lib/db/schema/Index.js +1 -4
  70. package/lib/db/schema/Index.js.map +1 -1
  71. package/lib/db/schema/IndexedColumn.d.ts +2 -6
  72. package/lib/db/schema/IndexedColumn.js +1 -4
  73. package/lib/db/schema/IndexedColumn.js.map +1 -1
  74. package/lib/db/schema/Schema.d.ts +4 -28
  75. package/lib/db/schema/Schema.js.map +1 -1
  76. package/lib/db/schema/Table.d.ts +50 -96
  77. package/lib/db/schema/Table.js +83 -91
  78. package/lib/db/schema/Table.js.map +1 -1
  79. package/lib/index.d.ts +6 -21
  80. package/lib/index.js +6 -22
  81. package/lib/index.js.map +1 -1
  82. package/lib/utils/BaseObserver.d.ts +1 -1
  83. package/lib/utils/BaseObserver.js +1 -1
  84. package/lib/utils/Logger.d.ts +52 -23
  85. package/lib/utils/Logger.js +35 -33
  86. package/lib/utils/Logger.js.map +1 -1
  87. package/lib/utils/MetaBaseObserver.d.ts +11 -11
  88. package/lib/utils/MetaBaseObserver.js +1 -50
  89. package/lib/utils/MetaBaseObserver.js.map +1 -1
  90. package/lib/utils/mutex.d.ts +3 -53
  91. package/lib/utils/mutex.js +1 -156
  92. package/lib/utils/mutex.js.map +1 -1
  93. package/package.json +8 -45
  94. package/src/attachments/AttachmentContext.ts +11 -10
  95. package/src/attachments/AttachmentQueue.ts +129 -70
  96. package/src/attachments/AttachmentService.ts +7 -6
  97. package/src/attachments/AttachmentTransportAdapter.ts +49 -0
  98. package/src/attachments/BufferedAttachmentTransport.ts +37 -0
  99. package/src/attachments/LocalStorageAdapter.ts +20 -0
  100. package/src/attachments/Schema.ts +2 -2
  101. package/src/attachments/SyncingService.ts +34 -20
  102. package/src/client/CommonPowerSyncDatabase.ts +540 -0
  103. package/src/client/SQLOpenFactory.ts +38 -22
  104. package/src/client/compilableQueryWatch.ts +3 -4
  105. package/src/client/connection/PowerSyncBackendConnector.ts +3 -3
  106. package/src/client/runOnSchemaChange.ts +2 -2
  107. package/src/client/sync/bucket/CrudEntry.ts +4 -104
  108. package/src/client/sync/options.ts +77 -0
  109. package/src/client/sync/sync-streams.ts +1 -1
  110. package/src/client/triggers/TriggerManager.ts +10 -41
  111. package/src/client/watched/GetAllQuery.ts +3 -3
  112. package/src/client/watched/WatchedQuery.ts +2 -15
  113. package/src/client/watched/processors/DifferentialQueryProcessor.ts +0 -223
  114. package/src/client/watched/processors/OnChangeQueryProcessor.ts +0 -111
  115. package/src/db/DBAdapter.ts +141 -226
  116. package/src/db/QueryResult.ts +195 -0
  117. package/src/db/crud/SyncProgress.ts +2 -42
  118. package/src/db/crud/SyncStatus.ts +45 -220
  119. package/src/db/schema/Column.ts +0 -8
  120. package/src/db/schema/Index.ts +3 -6
  121. package/src/db/schema/IndexedColumn.ts +3 -6
  122. package/src/db/schema/Schema.ts +4 -4
  123. package/src/db/schema/Table.ts +111 -186
  124. package/src/index.ts +6 -21
  125. package/src/utils/BaseObserver.ts +1 -1
  126. package/src/utils/Logger.ts +80 -42
  127. package/src/utils/MetaBaseObserver.ts +14 -60
  128. package/src/utils/mutex.ts +4 -201
  129. package/dist/bundle.cjs +0 -14398
  130. package/dist/bundle.cjs.map +0 -1
  131. package/dist/bundle.mjs +0 -14317
  132. package/dist/bundle.mjs.map +0 -1
  133. package/dist/bundle.node.cjs +0 -12029
  134. package/dist/bundle.node.cjs.map +0 -1
  135. package/dist/bundle.node.mjs +0 -11948
  136. package/dist/bundle.node.mjs.map +0 -1
  137. package/dist/index.d.cts +0 -4651
  138. package/legacy/sync_protocol.d.ts +0 -103
  139. package/lib/client/AbstractPowerSyncDatabase.js +0 -990
  140. package/lib/client/AbstractPowerSyncDatabase.js.map +0 -1
  141. package/lib/client/AbstractPowerSyncOpenFactory.d.ts +0 -28
  142. package/lib/client/AbstractPowerSyncOpenFactory.js +0 -28
  143. package/lib/client/AbstractPowerSyncOpenFactory.js.map +0 -1
  144. package/lib/client/ConnectionManager.d.ts +0 -115
  145. package/lib/client/ConnectionManager.js +0 -294
  146. package/lib/client/ConnectionManager.js.map +0 -1
  147. package/lib/client/CustomQuery.d.ts +0 -22
  148. package/lib/client/CustomQuery.js +0 -43
  149. package/lib/client/CustomQuery.js.map +0 -1
  150. package/lib/client/constants.d.ts +0 -4
  151. package/lib/client/constants.js +0 -5
  152. package/lib/client/constants.js.map +0 -1
  153. package/lib/client/sync/bucket/BucketStorageAdapter.d.ts +0 -56
  154. package/lib/client/sync/bucket/BucketStorageAdapter.js +0 -29
  155. package/lib/client/sync/bucket/BucketStorageAdapter.js.map +0 -1
  156. package/lib/client/sync/bucket/SqliteBucketStorage.d.ts +0 -37
  157. package/lib/client/sync/bucket/SqliteBucketStorage.js +0 -165
  158. package/lib/client/sync/bucket/SqliteBucketStorage.js.map +0 -1
  159. package/lib/client/sync/stream/AbstractRemote.d.ts +0 -180
  160. package/lib/client/sync/stream/AbstractRemote.js +0 -508
  161. package/lib/client/sync/stream/AbstractRemote.js.map +0 -1
  162. package/lib/client/sync/stream/AbstractStreamingSyncImplementation.d.ts +0 -265
  163. package/lib/client/sync/stream/AbstractStreamingSyncImplementation.js +0 -706
  164. package/lib/client/sync/stream/AbstractStreamingSyncImplementation.js.map +0 -1
  165. package/lib/client/sync/stream/WebsocketClientTransport.d.ts +0 -15
  166. package/lib/client/sync/stream/WebsocketClientTransport.js +0 -62
  167. package/lib/client/sync/stream/WebsocketClientTransport.js.map +0 -1
  168. package/lib/client/sync/stream/core-instruction.d.ts +0 -77
  169. package/lib/client/sync/stream/core-instruction.js +0 -30
  170. package/lib/client/sync/stream/core-instruction.js.map +0 -1
  171. package/lib/client/triggers/MemoryTriggerClaimManager.d.ts +0 -6
  172. package/lib/client/triggers/MemoryTriggerClaimManager.js +0 -21
  173. package/lib/client/triggers/MemoryTriggerClaimManager.js.map +0 -1
  174. package/lib/client/triggers/TriggerManagerImpl.d.ts +0 -39
  175. package/lib/client/triggers/TriggerManagerImpl.js +0 -410
  176. package/lib/client/triggers/TriggerManagerImpl.js.map +0 -1
  177. package/lib/client/watched/processors/AbstractQueryProcessor.d.ts +0 -68
  178. package/lib/client/watched/processors/AbstractQueryProcessor.js +0 -151
  179. package/lib/client/watched/processors/AbstractQueryProcessor.js.map +0 -1
  180. package/lib/db/ConnectionClosedError.d.ts +0 -12
  181. package/lib/db/ConnectionClosedError.js +0 -23
  182. package/lib/db/ConnectionClosedError.js.map +0 -1
  183. package/lib/db/schema/TableV2.d.ts +0 -11
  184. package/lib/db/schema/TableV2.js +0 -11
  185. package/lib/db/schema/TableV2.js.map +0 -1
  186. package/lib/utils/AbortOperation.d.ts +0 -11
  187. package/lib/utils/AbortOperation.js +0 -21
  188. package/lib/utils/AbortOperation.js.map +0 -1
  189. package/lib/utils/ControlledExecutor.d.ts +0 -31
  190. package/lib/utils/ControlledExecutor.js +0 -58
  191. package/lib/utils/ControlledExecutor.js.map +0 -1
  192. package/lib/utils/async.d.ts +0 -46
  193. package/lib/utils/async.js +0 -147
  194. package/lib/utils/async.js.map +0 -1
  195. package/lib/utils/compatibility.d.ts +0 -8
  196. package/lib/utils/compatibility.js +0 -9
  197. package/lib/utils/compatibility.js.map +0 -1
  198. package/lib/utils/parseQuery.d.ts +0 -12
  199. package/lib/utils/parseQuery.js +0 -20
  200. package/lib/utils/parseQuery.js.map +0 -1
  201. package/lib/utils/queue.d.ts +0 -16
  202. package/lib/utils/queue.js +0 -42
  203. package/lib/utils/queue.js.map +0 -1
  204. package/lib/utils/stream_transform.d.ts +0 -41
  205. package/lib/utils/stream_transform.js +0 -211
  206. package/lib/utils/stream_transform.js.map +0 -1
  207. package/src/client/AbstractPowerSyncDatabase.ts +0 -1408
  208. package/src/client/AbstractPowerSyncOpenFactory.ts +0 -45
  209. package/src/client/ConnectionManager.ts +0 -405
  210. package/src/client/CustomQuery.ts +0 -56
  211. package/src/client/constants.ts +0 -4
  212. package/src/client/sync/bucket/BucketStorageAdapter.ts +0 -65
  213. package/src/client/sync/bucket/SqliteBucketStorage.ts +0 -202
  214. package/src/client/sync/stream/AbstractRemote.ts +0 -648
  215. package/src/client/sync/stream/AbstractStreamingSyncImplementation.ts +0 -971
  216. package/src/client/sync/stream/WebsocketClientTransport.ts +0 -82
  217. package/src/client/sync/stream/core-instruction.ts +0 -109
  218. package/src/client/triggers/MemoryTriggerClaimManager.ts +0 -25
  219. package/src/client/triggers/TriggerManagerImpl.ts +0 -501
  220. package/src/client/watched/processors/AbstractQueryProcessor.ts +0 -226
  221. package/src/db/ConnectionClosedError.ts +0 -25
  222. package/src/db/schema/TableV2.ts +0 -11
  223. package/src/utils/AbortOperation.ts +0 -19
  224. package/src/utils/ControlledExecutor.ts +0 -81
  225. package/src/utils/async.ts +0 -185
  226. package/src/utils/compatibility.ts +0 -9
  227. package/src/utils/parseQuery.ts +0 -31
  228. package/src/utils/queue.ts +0 -48
  229. package/src/utils/stream_transform.ts +0 -260
@@ -1,211 +0,0 @@
1
- export const doneResult = { done: true, value: undefined };
2
- export function valueResult(value) {
3
- return { done: false, value };
4
- }
5
- /**
6
- * A variant of {@link Array.map} for async iterators.
7
- */
8
- export function map(source, map) {
9
- return {
10
- next: async () => {
11
- const value = await source.next();
12
- if (value.done) {
13
- return value;
14
- }
15
- else {
16
- return { value: map(value.value) };
17
- }
18
- }
19
- };
20
- }
21
- /**
22
- * Expands a source async iterator by allowing to inject events asynchronously.
23
- *
24
- * The resulting iterator will emit all events from its source. Additionally though, events can be injected. These
25
- * events are dropped once the main iterator completes, but are otherwise forwarded.
26
- *
27
- * The iterator completes when its source completes, and it supports backpressure by only calling `next()` on the source
28
- * in response to a `next()` call from downstream if no pending injected events can be dispatched.
29
- */
30
- export function injectable(source) {
31
- let sourceIsDone = false;
32
- let waiter = undefined; // An active, waiting next() call.
33
- // A pending upstream event that couldn't be dispatched because inject() has been called before it was resolved.
34
- let pendingSourceEvent = null;
35
- let sourceFetchInFlight = false;
36
- let pendingInjectedEvents = [];
37
- const consumeWaiter = () => {
38
- const pending = waiter;
39
- waiter = undefined;
40
- return pending;
41
- };
42
- const fetchFromSource = () => {
43
- const resolveWaiter = (propagate) => {
44
- sourceFetchInFlight = false;
45
- const active = consumeWaiter();
46
- if (active) {
47
- propagate(active);
48
- }
49
- else {
50
- pendingSourceEvent = propagate;
51
- }
52
- };
53
- sourceFetchInFlight = true;
54
- const nextFromSource = source.next();
55
- nextFromSource.then((value) => {
56
- sourceIsDone = value.done == true;
57
- resolveWaiter((w) => w.resolve(value));
58
- }, (error) => {
59
- resolveWaiter((w) => w.reject(error));
60
- });
61
- };
62
- return {
63
- next: () => {
64
- return new Promise((resolve, reject) => {
65
- // First priority: Dispatch ready upstream events.
66
- if (sourceIsDone) {
67
- return resolve(doneResult);
68
- }
69
- if (pendingSourceEvent) {
70
- pendingSourceEvent({ resolve, reject });
71
- pendingSourceEvent = null;
72
- return;
73
- }
74
- // Second priority: Dispatch injected events
75
- if (pendingInjectedEvents.length) {
76
- return resolve(valueResult(pendingInjectedEvents.shift()));
77
- }
78
- // Nothing pending? Fetch from source
79
- waiter = { resolve, reject };
80
- if (!sourceFetchInFlight) {
81
- fetchFromSource();
82
- }
83
- });
84
- },
85
- inject: (event) => {
86
- const pending = consumeWaiter();
87
- if (pending != null) {
88
- pending.resolve(valueResult(event));
89
- }
90
- else {
91
- pendingInjectedEvents.push(event);
92
- }
93
- }
94
- };
95
- }
96
- /**
97
- * Splits a byte stream at line endings, emitting each line as a string.
98
- */
99
- export function extractJsonLines(source, decoder) {
100
- let buffer = '';
101
- const pendingLines = [];
102
- let isFinalEvent = false;
103
- return {
104
- next: async () => {
105
- while (true) {
106
- if (isFinalEvent) {
107
- return doneResult;
108
- }
109
- {
110
- const first = pendingLines.shift();
111
- if (first) {
112
- return { done: false, value: first };
113
- }
114
- }
115
- const { done, value } = await source.next();
116
- if (done) {
117
- const remaining = buffer.trim();
118
- if (remaining.length != 0) {
119
- isFinalEvent = true;
120
- return { done: false, value: remaining };
121
- }
122
- return doneResult;
123
- }
124
- const data = decoder.decode(value, { stream: true });
125
- buffer += data;
126
- const lines = buffer.split('\n');
127
- for (let i = 0; i < lines.length - 1; i++) {
128
- const l = lines[i].trim();
129
- if (l.length > 0) {
130
- pendingLines.push(l);
131
- }
132
- }
133
- buffer = lines[lines.length - 1];
134
- }
135
- }
136
- };
137
- }
138
- /**
139
- * Splits a concatenated stream of BSON objects by emitting individual objects.
140
- */
141
- export function extractBsonObjects(source) {
142
- // Fully read but not emitted yet.
143
- const completedObjects = [];
144
- // Whether source has returned { done: true }. We do the same once completed objects have been emitted.
145
- let isDone = false;
146
- const lengthBuffer = new DataView(new ArrayBuffer(4));
147
- let objectBody = null;
148
- // If we're parsing the length field, a number between 1 and 4 (inclusive) describing remaining bytes in the header.
149
- // If we're consuming a document, the bytes remaining.
150
- let remainingLength = 4;
151
- return {
152
- async next() {
153
- while (true) {
154
- // Before fetching new data from upstream, return completed objects.
155
- if (completedObjects.length) {
156
- return valueResult(completedObjects.shift());
157
- }
158
- if (isDone) {
159
- return doneResult;
160
- }
161
- const upstreamEvent = await source.next();
162
- if (upstreamEvent.done) {
163
- isDone = true;
164
- if (objectBody || remainingLength != 4) {
165
- throw new Error('illegal end of stream in BSON object');
166
- }
167
- return doneResult;
168
- }
169
- const chunk = upstreamEvent.value;
170
- for (let i = 0; i < chunk.length;) {
171
- const availableInData = chunk.length - i;
172
- if (objectBody) {
173
- // We're in the middle of reading a BSON document.
174
- const bytesToRead = Math.min(availableInData, remainingLength);
175
- const copySource = new Uint8Array(chunk.buffer, chunk.byteOffset + i, bytesToRead);
176
- objectBody.set(copySource, objectBody.length - remainingLength);
177
- i += bytesToRead;
178
- remainingLength -= bytesToRead;
179
- if (remainingLength == 0) {
180
- completedObjects.push(objectBody);
181
- // Prepare to read another document, starting with its length
182
- objectBody = null;
183
- remainingLength = 4;
184
- }
185
- }
186
- else {
187
- // Copy up to 4 bytes into lengthBuffer, depending on how many we still need.
188
- const bytesToRead = Math.min(availableInData, remainingLength);
189
- for (let j = 0; j < bytesToRead; j++) {
190
- lengthBuffer.setUint8(4 - remainingLength + j, chunk[i + j]);
191
- }
192
- i += bytesToRead;
193
- remainingLength -= bytesToRead;
194
- if (remainingLength == 0) {
195
- // Transition from reading length header to reading document. Subtracting 4 because the length of the
196
- // header is included in length.
197
- const length = lengthBuffer.getInt32(0, true /* little endian */);
198
- remainingLength = length - 4;
199
- if (remainingLength < 1) {
200
- throw new Error(`invalid length for bson: ${length}`);
201
- }
202
- objectBody = new Uint8Array(length);
203
- new DataView(objectBody.buffer).setInt32(0, length, true);
204
- }
205
- }
206
- }
207
- }
208
- }
209
- };
210
- }
211
- //# sourceMappingURL=stream_transform.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"stream_transform.js","sourceRoot":"","sources":["../../src/utils/stream_transform.ts"],"names":[],"mappings":"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"}