@powersync/common 1.53.1 → 1.54.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 (217) hide show
  1. package/dist/bundle.cjs +560 -353
  2. package/dist/bundle.cjs.map +1 -1
  3. package/dist/bundle.mjs +560 -353
  4. package/dist/bundle.mjs.map +1 -1
  5. package/dist/bundle.node.cjs +560 -353
  6. package/dist/bundle.node.cjs.map +1 -1
  7. package/dist/bundle.node.mjs +560 -353
  8. package/dist/bundle.node.mjs.map +1 -1
  9. package/dist/index.d.cts +733 -198
  10. package/lib/attachments/AttachmentContext.d.ts +7 -6
  11. package/lib/attachments/AttachmentContext.js +2 -1
  12. package/lib/attachments/AttachmentContext.js.map +1 -1
  13. package/lib/attachments/AttachmentErrorHandler.d.ts +6 -6
  14. package/lib/attachments/AttachmentQueue.d.ts +61 -20
  15. package/lib/attachments/AttachmentQueue.js +16 -18
  16. package/lib/attachments/AttachmentQueue.js.map +1 -1
  17. package/lib/attachments/LocalStorageAdapter.d.ts +14 -8
  18. package/lib/attachments/LocalStorageAdapter.js +3 -0
  19. package/lib/attachments/LocalStorageAdapter.js.map +1 -1
  20. package/lib/attachments/RemoteStorageAdapter.d.ts +4 -4
  21. package/lib/attachments/Schema.d.ts +12 -4
  22. package/lib/attachments/Schema.js +8 -3
  23. package/lib/attachments/Schema.js.map +1 -1
  24. package/lib/attachments/WatchedAttachmentItem.d.ts +3 -1
  25. package/lib/client/AbstractPowerSyncDatabase.d.ts +110 -58
  26. package/lib/client/AbstractPowerSyncDatabase.js +59 -48
  27. package/lib/client/AbstractPowerSyncDatabase.js.map +1 -1
  28. package/lib/client/AbstractPowerSyncOpenFactory.d.ts +6 -0
  29. package/lib/client/AbstractPowerSyncOpenFactory.js +3 -0
  30. package/lib/client/AbstractPowerSyncOpenFactory.js.map +1 -1
  31. package/lib/client/ConnectionManager.d.ts +4 -1
  32. package/lib/client/ConnectionManager.js +1 -1
  33. package/lib/client/ConnectionManager.js.map +1 -1
  34. package/lib/client/Query.d.ts +9 -0
  35. package/lib/client/SQLOpenFactory.d.ts +12 -0
  36. package/lib/client/SQLOpenFactory.js +6 -0
  37. package/lib/client/SQLOpenFactory.js.map +1 -1
  38. package/lib/client/compilableQueryWatch.d.ts +6 -0
  39. package/lib/client/compilableQueryWatch.js +3 -0
  40. package/lib/client/compilableQueryWatch.js.map +1 -1
  41. package/lib/client/connection/PowerSyncBackendConnector.d.ts +3 -0
  42. package/lib/client/connection/PowerSyncCredentials.d.ts +3 -0
  43. package/lib/client/constants.d.ts +3 -0
  44. package/lib/client/constants.js +3 -0
  45. package/lib/client/constants.js.map +1 -1
  46. package/lib/client/runOnSchemaChange.d.ts +3 -0
  47. package/lib/client/runOnSchemaChange.js +3 -0
  48. package/lib/client/runOnSchemaChange.js.map +1 -1
  49. package/lib/client/sync/bucket/BucketStorageAdapter.d.ts +12 -0
  50. package/lib/client/sync/bucket/BucketStorageAdapter.js +6 -0
  51. package/lib/client/sync/bucket/BucketStorageAdapter.js.map +1 -1
  52. package/lib/client/sync/bucket/CrudBatch.d.ts +2 -0
  53. package/lib/client/sync/bucket/CrudBatch.js +2 -0
  54. package/lib/client/sync/bucket/CrudBatch.js.map +1 -1
  55. package/lib/client/sync/bucket/CrudEntry.d.ts +9 -0
  56. package/lib/client/sync/bucket/CrudEntry.js +4 -0
  57. package/lib/client/sync/bucket/CrudEntry.js.map +1 -1
  58. package/lib/client/sync/bucket/CrudTransaction.d.ts +3 -0
  59. package/lib/client/sync/bucket/CrudTransaction.js +3 -0
  60. package/lib/client/sync/bucket/CrudTransaction.js.map +1 -1
  61. package/lib/client/sync/bucket/SqliteBucketStorage.d.ts +3 -0
  62. package/lib/client/sync/bucket/SqliteBucketStorage.js +3 -0
  63. package/lib/client/sync/bucket/SqliteBucketStorage.js.map +1 -1
  64. package/lib/client/sync/stream/AbstractRemote.d.ts +30 -1
  65. package/lib/client/sync/stream/AbstractRemote.js +15 -1
  66. package/lib/client/sync/stream/AbstractRemote.js.map +1 -1
  67. package/lib/client/sync/stream/AbstractStreamingSyncImplementation.d.ts +61 -14
  68. package/lib/client/sync/stream/AbstractStreamingSyncImplementation.js +60 -47
  69. package/lib/client/sync/stream/AbstractStreamingSyncImplementation.js.map +1 -1
  70. package/lib/client/sync/stream/JsonValue.d.ts +3 -0
  71. package/lib/client/sync/stream/WebsocketClientTransport.js +2 -1
  72. package/lib/client/sync/stream/WebsocketClientTransport.js.map +1 -1
  73. package/lib/client/sync/sync-streams.d.ts +22 -7
  74. package/lib/client/triggers/TriggerManager.d.ts +19 -18
  75. package/lib/client/triggers/TriggerManager.js +2 -1
  76. package/lib/client/triggers/TriggerManager.js.map +1 -1
  77. package/lib/client/triggers/TriggerManagerImpl.d.ts +1 -1
  78. package/lib/client/triggers/TriggerManagerImpl.js +3 -3
  79. package/lib/client/triggers/TriggerManagerImpl.js.map +1 -1
  80. package/lib/client/triggers/sanitizeSQL.d.ts +4 -0
  81. package/lib/client/triggers/sanitizeSQL.js +4 -0
  82. package/lib/client/triggers/sanitizeSQL.js.map +1 -1
  83. package/lib/client/watched/GetAllQuery.d.ts +4 -0
  84. package/lib/client/watched/GetAllQuery.js +2 -0
  85. package/lib/client/watched/GetAllQuery.js.map +1 -1
  86. package/lib/client/watched/WatchedQuery.d.ts +24 -2
  87. package/lib/client/watched/WatchedQuery.js +9 -0
  88. package/lib/client/watched/WatchedQuery.js.map +1 -1
  89. package/lib/client/watched/processors/AbstractQueryProcessor.d.ts +1 -1
  90. package/lib/client/watched/processors/AbstractQueryProcessor.js.map +1 -1
  91. package/lib/client/watched/processors/DifferentialQueryProcessor.d.ts +20 -0
  92. package/lib/client/watched/processors/DifferentialQueryProcessor.js +4 -0
  93. package/lib/client/watched/processors/DifferentialQueryProcessor.js.map +1 -1
  94. package/lib/client/watched/processors/OnChangeQueryProcessor.d.ts +4 -0
  95. package/lib/client/watched/processors/OnChangeQueryProcessor.js.map +1 -1
  96. package/lib/client/watched/processors/comparators.d.ts +8 -0
  97. package/lib/client/watched/processors/comparators.js +4 -0
  98. package/lib/client/watched/processors/comparators.js.map +1 -1
  99. package/lib/db/ConnectionClosedError.d.ts +2 -0
  100. package/lib/db/ConnectionClosedError.js +2 -0
  101. package/lib/db/ConnectionClosedError.js.map +1 -1
  102. package/lib/db/DBAdapter.d.ts +56 -6
  103. package/lib/db/DBAdapter.js +15 -3
  104. package/lib/db/DBAdapter.js.map +1 -1
  105. package/lib/db/crud/SyncProgress.d.ts +6 -1
  106. package/lib/db/crud/SyncProgress.js +2 -0
  107. package/lib/db/crud/SyncProgress.js.map +1 -1
  108. package/lib/db/crud/SyncStatus.d.ts +36 -38
  109. package/lib/db/crud/SyncStatus.js +19 -14
  110. package/lib/db/crud/SyncStatus.js.map +1 -1
  111. package/lib/db/crud/UploadQueueStatus.d.ts +3 -0
  112. package/lib/db/crud/UploadQueueStatus.js +3 -0
  113. package/lib/db/crud/UploadQueueStatus.js.map +1 -1
  114. package/lib/db/schema/Column.d.ts +28 -0
  115. package/lib/db/schema/Column.js +16 -3
  116. package/lib/db/schema/Column.js.map +1 -1
  117. package/lib/db/schema/Index.d.ts +9 -0
  118. package/lib/db/schema/Index.js +6 -0
  119. package/lib/db/schema/Index.js.map +1 -1
  120. package/lib/db/schema/IndexedColumn.d.ts +9 -0
  121. package/lib/db/schema/IndexedColumn.js +6 -0
  122. package/lib/db/schema/IndexedColumn.js.map +1 -1
  123. package/lib/db/schema/RawTable.d.ts +7 -1
  124. package/lib/db/schema/Schema.d.ts +6 -1
  125. package/lib/db/schema/Schema.js +3 -1
  126. package/lib/db/schema/Schema.js.map +1 -1
  127. package/lib/db/schema/Table.d.ts +27 -3
  128. package/lib/db/schema/Table.js +9 -0
  129. package/lib/db/schema/Table.js.map +1 -1
  130. package/lib/db/schema/TableV2.d.ts +2 -0
  131. package/lib/db/schema/TableV2.js +2 -0
  132. package/lib/db/schema/TableV2.js.map +1 -1
  133. package/lib/index.d.ts +1 -1
  134. package/lib/types/types.d.ts +6 -0
  135. package/lib/utils/AbortOperation.d.ts +2 -0
  136. package/lib/utils/AbortOperation.js +2 -0
  137. package/lib/utils/AbortOperation.js.map +1 -1
  138. package/lib/utils/BaseObserver.d.ts +12 -0
  139. package/lib/utils/BaseObserver.js +3 -0
  140. package/lib/utils/BaseObserver.js.map +1 -1
  141. package/lib/utils/ControlledExecutor.d.ts +6 -0
  142. package/lib/utils/ControlledExecutor.js +3 -0
  143. package/lib/utils/ControlledExecutor.js.map +1 -1
  144. package/lib/utils/Logger.d.ts +9 -0
  145. package/lib/utils/Logger.js +6 -0
  146. package/lib/utils/Logger.js.map +1 -1
  147. package/lib/utils/async.d.ts +13 -7
  148. package/lib/utils/async.js +38 -24
  149. package/lib/utils/async.js.map +1 -1
  150. package/lib/utils/mutex.d.ts +8 -0
  151. package/lib/utils/mutex.js +3 -0
  152. package/lib/utils/mutex.js.map +1 -1
  153. package/lib/utils/parseQuery.d.ts +6 -0
  154. package/lib/utils/parseQuery.js +3 -0
  155. package/lib/utils/parseQuery.js.map +1 -1
  156. package/lib/utils/stream_transform.d.ts +3 -1
  157. package/lib/utils/stream_transform.js.map +1 -1
  158. package/package.json +3 -2
  159. package/src/attachments/AttachmentContext.ts +7 -6
  160. package/src/attachments/AttachmentErrorHandler.ts +6 -6
  161. package/src/attachments/AttachmentQueue.ts +71 -23
  162. package/src/attachments/LocalStorageAdapter.ts +14 -8
  163. package/src/attachments/README.md +2 -0
  164. package/src/attachments/RemoteStorageAdapter.ts +4 -4
  165. package/src/attachments/Schema.ts +12 -4
  166. package/src/attachments/WatchedAttachmentItem.ts +3 -1
  167. package/src/client/AbstractPowerSyncDatabase.ts +117 -62
  168. package/src/client/AbstractPowerSyncOpenFactory.ts +6 -0
  169. package/src/client/ConnectionManager.ts +4 -1
  170. package/src/client/Query.ts +9 -0
  171. package/src/client/SQLOpenFactory.ts +12 -0
  172. package/src/client/compilableQueryWatch.ts +6 -0
  173. package/src/client/connection/PowerSyncBackendConnector.ts +3 -0
  174. package/src/client/connection/PowerSyncCredentials.ts +3 -0
  175. package/src/client/constants.ts +3 -0
  176. package/src/client/runOnSchemaChange.ts +3 -0
  177. package/src/client/sync/bucket/BucketStorageAdapter.ts +12 -0
  178. package/src/client/sync/bucket/CrudBatch.ts +2 -0
  179. package/src/client/sync/bucket/CrudEntry.ts +9 -0
  180. package/src/client/sync/bucket/CrudTransaction.ts +3 -0
  181. package/src/client/sync/bucket/SqliteBucketStorage.ts +3 -0
  182. package/src/client/sync/stream/AbstractRemote.ts +30 -1
  183. package/src/client/sync/stream/AbstractStreamingSyncImplementation.ts +86 -59
  184. package/src/client/sync/stream/JsonValue.ts +3 -0
  185. package/src/client/sync/stream/WebsocketClientTransport.ts +3 -1
  186. package/src/client/sync/sync-streams.ts +22 -9
  187. package/src/client/triggers/TriggerManager.ts +19 -18
  188. package/src/client/triggers/TriggerManagerImpl.ts +5 -5
  189. package/src/client/triggers/sanitizeSQL.ts +5 -0
  190. package/src/client/watched/GetAllQuery.ts +5 -1
  191. package/src/client/watched/WatchedQuery.ts +24 -2
  192. package/src/client/watched/processors/AbstractQueryProcessor.ts +6 -6
  193. package/src/client/watched/processors/DifferentialQueryProcessor.ts +28 -5
  194. package/src/client/watched/processors/OnChangeQueryProcessor.ts +9 -3
  195. package/src/client/watched/processors/comparators.ts +8 -0
  196. package/src/db/ConnectionClosedError.ts +2 -0
  197. package/src/db/DBAdapter.ts +58 -6
  198. package/src/db/crud/SyncProgress.ts +6 -1
  199. package/src/db/crud/SyncStatus.ts +40 -21
  200. package/src/db/crud/UploadQueueStatus.ts +3 -0
  201. package/src/db/schema/Column.ts +28 -3
  202. package/src/db/schema/Index.ts +9 -0
  203. package/src/db/schema/IndexedColumn.ts +9 -0
  204. package/src/db/schema/RawTable.ts +7 -1
  205. package/src/db/schema/Schema.ts +8 -3
  206. package/src/db/schema/Table.ts +30 -5
  207. package/src/db/schema/TableV2.ts +2 -0
  208. package/src/index.ts +1 -1
  209. package/src/types/types.ts +6 -0
  210. package/src/utils/AbortOperation.ts +2 -0
  211. package/src/utils/BaseObserver.ts +12 -0
  212. package/src/utils/ControlledExecutor.ts +6 -0
  213. package/src/utils/Logger.ts +9 -0
  214. package/src/utils/async.ts +51 -24
  215. package/src/utils/mutex.ts +12 -0
  216. package/src/utils/parseQuery.ts +6 -0
  217. package/src/utils/stream_transform.ts +3 -1
package/src/index.ts CHANGED
@@ -35,7 +35,7 @@ export * from './db/DBAdapter.js';
35
35
  export * from './db/schema/Column.js';
36
36
  export * from './db/schema/Index.js';
37
37
  export * from './db/schema/IndexedColumn.js';
38
- export { RawTableType, PendingStatementParameter, PendingStatement } from './db/schema/RawTable.js';
38
+ export { PendingStatement, PendingStatementParameter, RawTableType } from './db/schema/RawTable.js';
39
39
  export * from './db/schema/Schema.js';
40
40
  export * from './db/schema/Table.js';
41
41
  export * from './db/schema/TableV2.js';
@@ -1,8 +1,14 @@
1
+ /**
2
+ * @public
3
+ */
1
4
  export interface CompilableQuery<T> {
2
5
  execute(): Promise<T[]>;
3
6
  compile(): CompiledQuery;
4
7
  }
5
8
 
9
+ /**
10
+ * @public
11
+ */
6
12
  export interface CompiledQuery {
7
13
  readonly sql: string;
8
14
  readonly parameters: ReadonlyArray<unknown>;
@@ -2,6 +2,8 @@
2
2
  * Calls to Abortcontroller.abort(reason: any) will result in the
3
3
  * `reason` being thrown. This is not necessarily an error,
4
4
  * but extends error for better logging purposes.
5
+ *
6
+ * @internal
5
7
  */
6
8
  export class AbortOperation extends Error {
7
9
  constructor(protected reason: string) {
@@ -1,13 +1,25 @@
1
+ /**
2
+ * @public
3
+ */
1
4
  export interface Disposable {
2
5
  dispose: () => Promise<void> | void;
3
6
  }
4
7
 
8
+ /**
9
+ * @public
10
+ */
5
11
  export type BaseListener = Record<string, ((...event: any) => any) | undefined>;
6
12
 
13
+ /**
14
+ * @public
15
+ */
7
16
  export interface BaseObserverInterface<T extends BaseListener> {
8
17
  registerListener(listener: Partial<T>): () => void;
9
18
  }
10
19
 
20
+ /**
21
+ * @internal
22
+ */
11
23
  export class BaseObserver<T extends BaseListener = BaseListener> implements BaseObserverInterface<T> {
12
24
  protected listeners = new Set<Partial<T>>();
13
25
 
@@ -1,3 +1,6 @@
1
+ /**
2
+ * @internal
3
+ */
1
4
  export interface ControlledExecutorOptions {
2
5
  /**
3
6
  * If throttling is enabled, it ensures only one task runs at a time,
@@ -7,6 +10,9 @@ export interface ControlledExecutorOptions {
7
10
  throttleEnabled?: boolean;
8
11
  }
9
12
 
13
+ /**
14
+ * @internal
15
+ */
10
16
  export class ControlledExecutor<T> {
11
17
  private task: (param: T) => Promise<void> | void;
12
18
 
@@ -4,6 +4,9 @@ export { GlobalLogger, ILogger, ILoggerOpts, ILogHandler, ILogLevel } from 'js-l
4
4
 
5
5
  const TypedLogger: ILogger = Logger as any;
6
6
 
7
+ /**
8
+ * @public
9
+ */
7
10
  export const LogLevel = {
8
11
  TRACE: TypedLogger.TRACE,
9
12
  DEBUG: TypedLogger.DEBUG,
@@ -14,6 +17,9 @@ export const LogLevel = {
14
17
  OFF: TypedLogger.OFF
15
18
  };
16
19
 
20
+ /**
21
+ * @public
22
+ */
17
23
  export interface CreateLoggerOptions {
18
24
  logLevel?: ILogLevel;
19
25
  }
@@ -25,6 +31,7 @@ export interface CreateLoggerOptions {
25
31
  * across all loggers created with `createLogger`. Adjusting settings on this
26
32
  * base logger affects all loggers derived from it unless explicitly overridden.
27
33
  *
34
+ * @public
28
35
  */
29
36
  export function createBaseLogger() {
30
37
  return Logger;
@@ -36,6 +43,8 @@ export function createBaseLogger() {
36
43
  * Named loggers allow specific modules or areas of your application to have
37
44
  * their own logging levels and behaviors. These loggers inherit configuration
38
45
  * from the base logger by default but can override settings independently.
46
+ *
47
+ * @public
39
48
  */
40
49
  export function createLogger(name: string, options: CreateLoggerOptions = {}): ILogger {
41
50
  const logger = Logger.get(name);
@@ -19,32 +19,59 @@ export function throttleTrailing(func: () => void, wait: number) {
19
19
  };
20
20
  }
21
21
 
22
- /**
23
- * Throttle a function to be called at most once every "wait" milliseconds,
24
- * on the leading and trailing edge.
25
- *
26
- * Roughly equivalent to lodash/throttle with {leading: true, trailing: true}
27
- */
28
- export function throttleLeadingTrailing(func: () => void, wait: number) {
29
- let timeoutId: ReturnType<typeof setTimeout> | null = null;
30
- let lastCallTime: number = 0;
22
+ export interface AsyncNotifier {
23
+ /**
24
+ * @param signal Also resolve the promise once this signal completes.
25
+ * @returns A promise that resolves once {@link notify} is called after this promise was last resolved.
26
+ */
27
+ waitForNotification(signal: AbortSignal): Promise<void>;
31
28
 
32
- const invokeFunction = () => {
33
- func();
34
- lastCallTime = Date.now();
35
- timeoutId = null;
36
- };
29
+ /**
30
+ * Notifies a pending listener, or makes the next {@link waitForNotification} complete immediately if no listener
31
+ * is currently active.
32
+ */
33
+ notify(): void;
34
+ }
37
35
 
38
- return function () {
39
- const now = Date.now();
40
- const timeToWait = wait - (now - lastCallTime);
41
-
42
- if (timeToWait <= 0) {
43
- // Leading edge: Call the function immediately if enough time has passed
44
- invokeFunction();
45
- } else if (!timeoutId) {
46
- // Set a timeout for the trailing edge if not already set
47
- timeoutId = setTimeout(invokeFunction, timeToWait);
36
+ export function asyncNotifier(): AsyncNotifier {
37
+ let waitingConsumer: (() => void) | null = null;
38
+ let hasPendingNotification = false;
39
+
40
+ return {
41
+ notify() {
42
+ if (waitingConsumer != null) {
43
+ waitingConsumer();
44
+ waitingConsumer = null;
45
+ } else {
46
+ hasPendingNotification = true;
47
+ }
48
+ },
49
+ waitForNotification(signal: AbortSignal) {
50
+ return new Promise((resolve) => {
51
+ if (waitingConsumer != null) {
52
+ throw new Error('Illegal call to waitForNotification, already has a waiter.');
53
+ }
54
+
55
+ if (signal.aborted) {
56
+ resolve();
57
+ } else if (hasPendingNotification) {
58
+ resolve();
59
+ hasPendingNotification = false;
60
+ } else {
61
+ function complete() {
62
+ signal.removeEventListener('abort', onAbort);
63
+ resolve();
64
+ }
65
+
66
+ function onAbort() {
67
+ waitingConsumer = null;
68
+ resolve();
69
+ }
70
+
71
+ waitingConsumer = complete;
72
+ signal.addEventListener('abort', onAbort);
73
+ }
74
+ });
48
75
  }
49
76
  };
50
77
  }
@@ -1,5 +1,8 @@
1
1
  import { Queue } from './queue.js';
2
2
 
3
+ /**
4
+ * @internal
5
+ */
3
6
  export type UnlockFn = () => void;
4
7
 
5
8
  /**
@@ -178,10 +181,19 @@ export class Mutex {
178
181
 
179
182
  /**
180
183
  * Creates a signal aborting after the set timeout.
184
+ *
185
+ * @internal
181
186
  */
182
187
  export function timeoutSignal(timeout: number): AbortSignal;
188
+
189
+ /**
190
+ * @internal
191
+ */
183
192
  export function timeoutSignal(timeout?: number): AbortSignal | undefined;
184
193
 
194
+ /**
195
+ * @internal
196
+ */
185
197
  export function timeoutSignal(timeout?: number): AbortSignal | undefined {
186
198
  if (timeout == null) return;
187
199
  if ('timeout' in AbortSignal) return AbortSignal.timeout(timeout);
@@ -1,10 +1,16 @@
1
1
  import type { CompilableQuery } from '../types/types.js';
2
2
 
3
+ /**
4
+ * @internal
5
+ */
3
6
  export interface ParsedQuery {
4
7
  sqlStatement: string;
5
8
  parameters: any[];
6
9
  }
7
10
 
11
+ /**
12
+ * @internal
13
+ */
8
14
  export const parseQuery = <T>(query: string | CompilableQuery<T>, parameters: any[]): ParsedQuery => {
9
15
  let sqlStatement: string;
10
16
 
@@ -2,9 +2,11 @@
2
2
  * An async iterator that can't be cancelled.
3
3
  *
4
4
  * To keep data flow simple, we always pass an explicit cancellation token when subscribing to async streams. Once the
5
- * {@link AbortSignal} aborts, iterators are supposed to clean up and then emit a final `{done: true}` event. This means
5
+ * `AbortSignal` aborts, iterators are supposed to clean up and then emit a final `{done: true}` event. This means
6
6
  * that there's no way to distinguish between streams that have completed normally and streams that have been cancelled,
7
7
  * but that is acceptable for our uses of this.
8
+ *
9
+ * @internal
8
10
  */
9
11
  export type SimpleAsyncIterator<T> = Pick<AsyncIterator<T>, 'next'>;
10
12