@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,40 +1,69 @@
1
- import Logger, { type ILogger, type ILogLevel } from 'js-logger';
2
- export { GlobalLogger, ILogger, ILoggerOpts, ILogHandler, ILogLevel } from 'js-logger';
3
1
  /**
4
2
  * @public
5
3
  */
6
- export declare const LogLevel: {
7
- TRACE: Logger.ILogLevel;
8
- DEBUG: Logger.ILogLevel;
9
- INFO: Logger.ILogLevel;
10
- TIME: Logger.ILogLevel;
11
- WARN: Logger.ILogLevel;
12
- ERROR: Logger.ILogLevel;
13
- OFF: Logger.ILogLevel;
4
+ export declare const LogLevels: {
5
+ readonly trace: 10;
6
+ readonly debug: 20;
7
+ readonly info: 30;
8
+ readonly warn: 40;
9
+ readonly error: 50;
14
10
  };
15
11
  /**
12
+ * A log record passed to a {@link PowerSyncLogger}.
13
+ *
16
14
  * @public
17
15
  */
18
- export interface CreateLoggerOptions {
19
- logLevel?: ILogLevel;
16
+ export interface LogRecord {
17
+ /**
18
+ * The log level (see {@link LogLevels} for preconfigured values) for the message. Depending on how a receiving logger
19
+ * has been configured, messages below a configured minimum level may be ignored.
20
+ */
21
+ level: number;
22
+ /**
23
+ * The main message to log.
24
+ */
25
+ message: string;
26
+ /**
27
+ * When the log message contains an error, the error causing the log.
28
+ *
29
+ * This is not guaranteed to be an `Error` instance. On the web, we might have to serialize objects across message
30
+ * channels and represent them as a string.
31
+ */
32
+ error?: unknown;
20
33
  }
21
34
  /**
22
- * Retrieves the base (default) logger instance.
35
+ * A logger used by the PowerSync SDK.
36
+ *
37
+ * This is deliberately a very simple interface, and it's not a designed to be a general-purpose logger you would use in
38
+ * your application. Instead, you can provide an implementation of this to PowerSync to make it use your preferred
39
+ * logging libraries.
23
40
  *
24
- * This base logger controls the default logging configuration and is shared
25
- * across all loggers created with `createLogger`. Adjusting settings on this
26
- * base logger affects all loggers derived from it unless explicitly overridden.
41
+ * By default, the SDK uses a {@link createConsoleLogger} instance forwarding messages to `console.log`.
27
42
  *
28
43
  * @public
29
44
  */
30
- export declare function createBaseLogger(): typeof Logger;
45
+ export interface PowerSyncLogger {
46
+ log(record: LogRecord): void;
47
+ }
31
48
  /**
32
- * Creates and configures a new named logger based on the base logger.
33
- *
34
- * Named loggers allow specific modules or areas of your application to have
35
- * their own logging levels and behaviors. These loggers inherit configuration
36
- * from the base logger by default but can override settings independently.
49
+ * @public
50
+ */
51
+ export interface CreateLoggerOptions {
52
+ /**
53
+ * A prefix for messages emitted by {@link createConsoleLogger} to make them more recognizable.
54
+ *
55
+ * Defaults to `'PowerSync'`.
56
+ */
57
+ prefix: string;
58
+ /**
59
+ * The minimum log level to consider for messages. Defaults to {@link LogLevels.info}.
60
+ */
61
+ minLevel: number;
62
+ }
63
+ /**
64
+ * A very simple {@link PowerSyncLogger} implementation forwarding messages to `console.log`.
37
65
  *
66
+ * @param options - Options to configure a minimum severity of the logger or a prefix to make messages more recognizable.
38
67
  * @public
39
68
  */
40
- export declare function createLogger(name: string, options?: CreateLoggerOptions): ILogger;
69
+ export declare function createConsoleLogger(options?: Partial<CreateLoggerOptions>): PowerSyncLogger & CreateLoggerOptions;
@@ -1,43 +1,45 @@
1
- import Logger from 'js-logger';
2
- const TypedLogger = Logger;
3
1
  /**
4
2
  * @public
5
3
  */
6
- export const LogLevel = {
7
- TRACE: TypedLogger.TRACE,
8
- DEBUG: TypedLogger.DEBUG,
9
- INFO: TypedLogger.INFO,
10
- TIME: TypedLogger.TIME,
11
- WARN: TypedLogger.WARN,
12
- ERROR: TypedLogger.ERROR,
13
- OFF: TypedLogger.OFF
4
+ export const LogLevels = {
5
+ trace: 10,
6
+ debug: 20,
7
+ info: 30,
8
+ warn: 40,
9
+ error: 50
14
10
  };
15
11
  /**
16
- * Retrieves the base (default) logger instance.
17
- *
18
- * This base logger controls the default logging configuration and is shared
19
- * across all loggers created with `createLogger`. Adjusting settings on this
20
- * base logger affects all loggers derived from it unless explicitly overridden.
21
- *
22
- * @public
23
- */
24
- export function createBaseLogger() {
25
- return Logger;
26
- }
27
- /**
28
- * Creates and configures a new named logger based on the base logger.
29
- *
30
- * Named loggers allow specific modules or areas of your application to have
31
- * their own logging levels and behaviors. These loggers inherit configuration
32
- * from the base logger by default but can override settings independently.
12
+ * A very simple {@link PowerSyncLogger} implementation forwarding messages to `console.log`.
33
13
  *
14
+ * @param options - Options to configure a minimum severity of the logger or a prefix to make messages more recognizable.
34
15
  * @public
35
16
  */
36
- export function createLogger(name, options = {}) {
37
- const logger = Logger.get(name);
38
- if (options.logLevel) {
39
- logger.setLevel(options.logLevel);
40
- }
41
- return logger;
17
+ export function createConsoleLogger(options) {
18
+ const { prefix = 'PowerSync', minLevel = LogLevels.info } = options ?? {};
19
+ return {
20
+ prefix,
21
+ minLevel,
22
+ log({ level, message, error }) {
23
+ if (level < this.minLevel)
24
+ return;
25
+ let emitter = console.log;
26
+ if (level >= LogLevels.error) {
27
+ emitter = console.error;
28
+ }
29
+ else if (level >= LogLevels.warn) {
30
+ emitter = console.warn;
31
+ }
32
+ else if (level >= LogLevels.info) {
33
+ emitter = console.info;
34
+ }
35
+ const messageWithPrefix = `[${prefix}]: ${message}`;
36
+ if (error) {
37
+ emitter(messageWithPrefix, error);
38
+ }
39
+ else {
40
+ emitter(messageWithPrefix);
41
+ }
42
+ }
43
+ };
42
44
  }
43
45
  //# sourceMappingURL=Logger.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Logger.js","sourceRoot":"","sources":["../../src/utils/Logger.ts"],"names":[],"mappings":"AAAA,OAAO,MAAwC,MAAM,WAAW,CAAC;AAIjE,MAAM,WAAW,GAAY,MAAa,CAAC;AAE3C;;GAEG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,KAAK,EAAE,WAAW,CAAC,KAAK;IACxB,KAAK,EAAE,WAAW,CAAC,KAAK;IACxB,IAAI,EAAE,WAAW,CAAC,IAAI;IACtB,IAAI,EAAE,WAAW,CAAC,IAAI;IACtB,IAAI,EAAE,WAAW,CAAC,IAAI;IACtB,KAAK,EAAE,WAAW,CAAC,KAAK;IACxB,GAAG,EAAE,WAAW,CAAC,GAAG;CACrB,CAAC;AASF;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB;IAC9B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,UAA+B,EAAE;IAC1E,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACpC,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"Logger.js","sourceRoot":"","sources":["../../src/utils/Logger.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,KAAK,EAAE,EAAE;IACT,KAAK,EAAE,EAAE;IACT,IAAI,EAAE,EAAE;IACR,IAAI,EAAE,EAAE;IACR,KAAK,EAAE,EAAE;CACD,CAAC;AA4DX;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAsC;IACxE,MAAM,EAAE,MAAM,GAAG,WAAW,EAAE,QAAQ,GAAG,SAAS,CAAC,IAAI,EAAE,GAAG,OAAO,IAAI,EAAE,CAAC;IAE1E,OAAO;QACL,MAAM;QACN,QAAQ;QACR,GAAG,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;YAC3B,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ;gBAAE,OAAO;YAElC,IAAI,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC;YAC1B,IAAI,KAAK,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;gBAC7B,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC;YAC1B,CAAC;iBAAM,IAAI,KAAK,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC;gBACnC,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;YACzB,CAAC;iBAAM,IAAI,KAAK,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC;gBACnC,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;YACzB,CAAC;YAED,MAAM,iBAAiB,GAAG,IAAI,MAAM,MAAM,OAAO,EAAE,CAAC;YACpD,IAAI,KAAK,EAAE,CAAC;gBACV,OAAO,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;YACpC,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,iBAAiB,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -1,29 +1,29 @@
1
- import { BaseListener, BaseObserver, BaseObserverInterface } from './BaseObserver.js';
1
+ import { BaseListener, BaseObserverInterface } from './BaseObserver.js';
2
2
  /**
3
3
  * Represents the counts of listeners for each event type in a BaseListener.
4
+ *
5
+ * @public
4
6
  */
5
7
  export type ListenerCounts<Listener extends BaseListener> = Partial<Record<keyof Listener, number>> & {
6
8
  total: number;
7
9
  };
8
10
  /**
9
11
  * Meta listener which reports the counts of listeners for each event type.
12
+ *
13
+ * @public
10
14
  */
11
15
  export interface MetaListener<ParentListener extends BaseListener> extends BaseListener {
12
16
  listenersChanged?: (counts: ListenerCounts<ParentListener>) => void;
13
17
  }
18
+ /**
19
+ * @public
20
+ */
14
21
  export interface ListenerMetaManager<Listener extends BaseListener> extends BaseObserverInterface<MetaListener<Listener>> {
15
22
  counts: ListenerCounts<Listener>;
16
23
  }
17
- export interface MetaBaseObserverInterface<Listener extends BaseListener> extends BaseObserverInterface<Listener> {
18
- listenerMeta: ListenerMetaManager<Listener>;
19
- }
20
24
  /**
21
- * A BaseObserver that tracks the counts of listeners for each event type.
25
+ * @public
22
26
  */
23
- export declare class MetaBaseObserver<Listener extends BaseListener> extends BaseObserver<Listener> implements MetaBaseObserverInterface<Listener> {
24
- protected get listenerCounts(): ListenerCounts<Listener>;
25
- get listenerMeta(): ListenerMetaManager<Listener>;
26
- protected metaListener: BaseObserver<MetaListener<Listener>>;
27
- constructor();
28
- registerListener(listener: Partial<Listener>): () => void;
27
+ export interface MetaBaseObserverInterface<Listener extends BaseListener> extends BaseObserverInterface<Listener> {
28
+ listenerMeta: ListenerMetaManager<Listener>;
29
29
  }
@@ -1,51 +1,2 @@
1
- import { BaseObserver } from './BaseObserver.js';
2
- /**
3
- * A BaseObserver that tracks the counts of listeners for each event type.
4
- */
5
- export class MetaBaseObserver extends BaseObserver {
6
- get listenerCounts() {
7
- const counts = {};
8
- let total = 0;
9
- for (const listener of this.listeners) {
10
- for (const key in listener) {
11
- if (listener[key]) {
12
- counts[key] = (counts[key] ?? 0) + 1;
13
- total++;
14
- }
15
- }
16
- }
17
- return {
18
- ...counts,
19
- total
20
- };
21
- }
22
- get listenerMeta() {
23
- return {
24
- counts: this.listenerCounts,
25
- // Allows registering a meta listener that will be notified of changes in listener counts
26
- registerListener: (listener) => {
27
- return this.metaListener.registerListener(listener);
28
- }
29
- };
30
- }
31
- metaListener;
32
- constructor() {
33
- super();
34
- this.metaListener = new BaseObserver();
35
- }
36
- registerListener(listener) {
37
- const dispose = super.registerListener(listener);
38
- const updatedCount = this.listenerCounts;
39
- this.metaListener.iterateListeners((l) => {
40
- l.listenersChanged?.(updatedCount);
41
- });
42
- return () => {
43
- dispose();
44
- const updatedCount = this.listenerCounts;
45
- this.metaListener.iterateListeners((l) => {
46
- l.listenersChanged?.(updatedCount);
47
- });
48
- };
49
- }
50
- }
1
+ export {};
51
2
  //# sourceMappingURL=MetaBaseObserver.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MetaBaseObserver.js","sourceRoot":"","sources":["../../src/utils/MetaBaseObserver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,YAAY,EAAyB,MAAM,mBAAmB,CAAC;AAyBtF;;GAEG;AACH,MAAM,OAAO,gBACX,SAAQ,YAAsB;IAG9B,IAAc,cAAc;QAC1B,MAAM,MAAM,GAAG,EAA6C,CAAC;QAC7D,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACtC,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;gBAC3B,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;oBAClB,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;oBACrC,KAAK,EAAE,CAAC;gBACV,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO;YACL,GAAG,MAAM;YACT,KAAK;SACN,CAAC;IACJ,CAAC;IAED,IAAI,YAAY;QACd,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,cAAc;YAC3B,yFAAyF;YACzF,gBAAgB,EAAE,CAAC,QAAyC,EAAE,EAAE;gBAC9D,OAAO,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YACtD,CAAC;SACF,CAAC;IACJ,CAAC;IAES,YAAY,CAAuC;IAE7D;QACE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,EAA0B,CAAC;IACjE,CAAC;IAED,gBAAgB,CAAC,QAA2B;QAC1C,MAAM,OAAO,GAAG,KAAK,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QACjD,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC;QACzC,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,EAAE;YACvC,CAAC,CAAC,gBAAgB,EAAE,CAAC,YAAY,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;QACH,OAAO,GAAG,EAAE;YACV,OAAO,EAAE,CAAC;YACV,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC;YACzC,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,EAAE;gBACvC,CAAC,CAAC,gBAAgB,EAAE,CAAC,YAAY,CAAC,CAAC;YACrC,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"MetaBaseObserver.js","sourceRoot":"","sources":["../../src/utils/MetaBaseObserver.ts"],"names":[],"mappings":""}
@@ -1,57 +1,7 @@
1
1
  /**
2
- * @internal
2
+ * @internal This is implemented in `@powersync/shared-internals`, but we need it in the attachment service
3
+ * implementation.
3
4
  */
4
- export type UnlockFn = () => void;
5
- /**
6
- * An asynchronous semaphore implementation with associated items per lease.
7
- *
8
- * @internal This class is meant to be used in PowerSync SDKs only, and is not part of the public API.
9
- */
10
- export declare class Semaphore<T> {
11
- private readonly available;
12
- readonly size: number;
13
- private firstWaiter?;
14
- private lastWaiter?;
15
- constructor(elements: Iterable<T>);
16
- private addWaiter;
17
- private deactivateWaiter;
18
- private requestPermits;
19
- /**
20
- * Requests a single item from the pool.
21
- *
22
- * The returned `release` callback must be invoked to return the item into the pool.
23
- */
24
- requestOne(abort?: AbortSignal): Promise<{
25
- item: T;
26
- release: UnlockFn;
27
- }>;
28
- /**
29
- * Requests access to all items from the pool.
30
- *
31
- * The returned `release` callback must be invoked to return items into the pool.
32
- */
33
- requestAll(abort?: AbortSignal): Promise<{
34
- items: T[];
35
- release: UnlockFn;
36
- }>;
37
- }
38
- /**
39
- * An asynchronous mutex implementation.
40
- *
41
- * @internal This class is meant to be used in PowerSync SDKs only, and is not part of the public API.
42
- */
43
- export declare class Mutex {
44
- private inner;
45
- acquire(abort?: AbortSignal): Promise<UnlockFn>;
5
+ export interface Mutex {
46
6
  runExclusive<T>(fn: () => PromiseLike<T> | T, abort?: AbortSignal): Promise<T>;
47
7
  }
48
- /**
49
- * Creates a signal aborting after the set timeout.
50
- *
51
- * @internal
52
- */
53
- export declare function timeoutSignal(timeout: number): AbortSignal;
54
- /**
55
- * @internal
56
- */
57
- export declare function timeoutSignal(timeout?: number): AbortSignal | undefined;
@@ -1,157 +1,2 @@
1
- import { Queue } from './queue.js';
2
- /**
3
- * An asynchronous semaphore implementation with associated items per lease.
4
- *
5
- * @internal This class is meant to be used in PowerSync SDKs only, and is not part of the public API.
6
- */
7
- export class Semaphore {
8
- // Available items that are not currently assigned to a waiter.
9
- available;
10
- size;
11
- // Linked list of waiters. We don't expect the wait list to become particularly large, and this allows removing
12
- // aborted waiters from the middle of the list efficiently.
13
- firstWaiter;
14
- lastWaiter;
15
- constructor(elements) {
16
- this.available = new Queue(elements);
17
- this.size = this.available.length;
18
- }
19
- addWaiter(requestedItems, onAcquire) {
20
- const node = {
21
- isActive: true,
22
- acquiredItems: [],
23
- remainingItems: requestedItems,
24
- onAcquire,
25
- prev: this.lastWaiter
26
- };
27
- if (this.lastWaiter) {
28
- this.lastWaiter.next = node;
29
- this.lastWaiter = node;
30
- }
31
- else {
32
- // First waiter
33
- this.lastWaiter = this.firstWaiter = node;
34
- }
35
- return node;
36
- }
37
- deactivateWaiter(waiter) {
38
- const { prev, next } = waiter;
39
- waiter.isActive = false;
40
- if (prev)
41
- prev.next = next;
42
- if (next)
43
- next.prev = prev;
44
- if (waiter == this.firstWaiter)
45
- this.firstWaiter = next;
46
- if (waiter == this.lastWaiter)
47
- this.lastWaiter = prev;
48
- }
49
- requestPermits(amount, abort) {
50
- if (amount <= 0 || amount > this.size) {
51
- throw new Error(`Invalid amount of items requested (${amount}), must be between 1 and ${this.size}`);
52
- }
53
- return new Promise((resolve, reject) => {
54
- function rejectAborted() {
55
- reject(abort?.reason ?? new Error('Semaphore acquire aborted'));
56
- }
57
- if (abort?.aborted) {
58
- return rejectAborted();
59
- }
60
- let waiter;
61
- const markCompleted = () => {
62
- const items = waiter.acquiredItems;
63
- waiter.acquiredItems = []; // Avoid releasing items twice.
64
- for (const element of items) {
65
- // Give to next waiter, if possible.
66
- const nextWaiter = this.firstWaiter;
67
- if (nextWaiter) {
68
- nextWaiter.acquiredItems.push(element);
69
- nextWaiter.remainingItems--;
70
- if (nextWaiter.remainingItems == 0) {
71
- nextWaiter.onAcquire();
72
- }
73
- }
74
- else {
75
- // No pending waiter, return lease into pool.
76
- this.available.addLast(element);
77
- }
78
- }
79
- };
80
- const onAbort = () => {
81
- abort?.removeEventListener('abort', onAbort);
82
- if (waiter.isActive) {
83
- this.deactivateWaiter(waiter);
84
- rejectAborted();
85
- }
86
- };
87
- const resolvePromise = () => {
88
- this.deactivateWaiter(waiter);
89
- abort?.removeEventListener('abort', onAbort);
90
- const items = waiter.acquiredItems;
91
- resolve({ items, release: markCompleted });
92
- };
93
- waiter = this.addWaiter(amount, resolvePromise);
94
- // If there are items in the pool that haven't been assigned, we can pull them into this waiter. Note that this is
95
- // only the case if we're the first waiter (otherwise, items would have been assigned to an earlier waiter).
96
- while (!this.available.isEmpty && waiter.remainingItems > 0) {
97
- waiter.acquiredItems.push(this.available.removeFirst());
98
- waiter.remainingItems--;
99
- }
100
- if (waiter.remainingItems == 0) {
101
- return resolvePromise();
102
- }
103
- abort?.addEventListener('abort', onAbort);
104
- });
105
- }
106
- /**
107
- * Requests a single item from the pool.
108
- *
109
- * The returned `release` callback must be invoked to return the item into the pool.
110
- */
111
- async requestOne(abort) {
112
- const { items, release } = await this.requestPermits(1, abort);
113
- return { release, item: items[0] };
114
- }
115
- /**
116
- * Requests access to all items from the pool.
117
- *
118
- * The returned `release` callback must be invoked to return items into the pool.
119
- */
120
- requestAll(abort) {
121
- return this.requestPermits(this.size, abort);
122
- }
123
- }
124
- /**
125
- * An asynchronous mutex implementation.
126
- *
127
- * @internal This class is meant to be used in PowerSync SDKs only, and is not part of the public API.
128
- */
129
- export class Mutex {
130
- inner = new Semaphore([null]);
131
- async acquire(abort) {
132
- const { release } = await this.inner.requestOne(abort);
133
- return release;
134
- }
135
- async runExclusive(fn, abort) {
136
- const returnMutex = await this.acquire(abort);
137
- try {
138
- return await fn();
139
- }
140
- finally {
141
- returnMutex();
142
- }
143
- }
144
- }
145
- /**
146
- * @internal
147
- */
148
- export function timeoutSignal(timeout) {
149
- if (timeout == null)
150
- return;
151
- if ('timeout' in AbortSignal)
152
- return AbortSignal.timeout(timeout);
153
- const controller = new AbortController();
154
- setTimeout(() => controller.abort(new Error('Timeout waiting for lock')), timeout);
155
- return controller.signal;
156
- }
1
+ export {};
157
2
  //# sourceMappingURL=mutex.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mutex.js","sourceRoot":"","sources":["../../src/utils/mutex.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mutex.js","sourceRoot":"","sources":["../../src/utils/mutex.ts"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,38 +1,17 @@
1
1
  {
2
2
  "name": "@powersync/common",
3
- "version": "1.57.1",
3
+ "version": "2.0.0",
4
4
  "publishConfig": {
5
5
  "registry": "https://registry.npmjs.org/",
6
6
  "access": "public"
7
7
  },
8
8
  "description": "API definitions for PowerSync",
9
9
  "type": "module",
10
- "main": "dist/bundle.mjs",
11
- "module": "dist/bundle.mjs",
12
- "types": "lib/index.d.ts",
10
+ "types": "./lib/index.d.ts",
13
11
  "exports": {
14
12
  ".": {
15
- "node": {
16
- "import": {
17
- "types": "./lib/index.d.ts",
18
- "default": "./dist/bundle.node.mjs"
19
- },
20
- "require": {
21
- "types": "./dist/index.d.cts",
22
- "require": "./dist/bundle.node.cjs"
23
- }
24
- },
25
- "import": {
26
- "types": "./lib/index.d.ts",
27
- "default": "./dist/bundle.mjs"
28
- },
29
- "require": {
30
- "types": "./dist/index.d.cts",
31
- "require": "./dist/bundle.cjs"
32
- }
33
- },
34
- "./internal/sync_protocol": {
35
- "types": "./legacy/sync_protocol.d.ts"
13
+ "types": "./lib/index.d.ts",
14
+ "default": "./lib/index.js"
36
15
  }
37
16
  },
38
17
  "author": "PowerSync",
@@ -40,8 +19,7 @@
40
19
  "files": [
41
20
  "lib",
42
21
  "dist",
43
- "src",
44
- "legacy"
22
+ "src"
45
23
  ],
46
24
  "repository": {
47
25
  "type": "git",
@@ -51,31 +29,16 @@
51
29
  "url": "https://github.com/powersync-ja/powersync-js/issues"
52
30
  },
53
31
  "homepage": "https://docs.powersync.com",
54
- "dependencies": {
55
- "js-logger": "^1.6.1"
56
- },
57
32
  "devDependencies": {
58
- "@rollup/plugin-commonjs": "^29.0.0",
59
- "@rollup/plugin-inject": "^5.0.5",
60
- "@rollup/plugin-json": "^6.1.0",
61
- "@rollup/plugin-node-resolve": "^16.0.3",
62
33
  "@types/node": "^24.0.0",
63
34
  "@types/uuid": "^9.0.6",
64
- "buffer": "^6.0.3",
65
- "cross-fetch": "^4.1.0",
66
- "estree-walker": "^3.0.3",
67
- "magic-string": "^0.30.21",
68
- "rollup": "^4.52.5",
69
- "rollup-plugin-dts": "^6.2.1",
70
- "rsocket-core": "1.0.0-alpha.3",
71
- "rsocket-websocket-client": "1.0.0-alpha.3",
72
35
  "@microsoft/api-extractor": "^7.58.7"
73
36
  },
74
37
  "scripts": {
75
- "build": "tsc -b && rollup -c rollup.config.mjs",
76
- "build:prod": "tsc -b && rollup -c rollup.config.mjs",
38
+ "build": "tsc -b",
39
+ "build:prod": "tsc -b",
77
40
  "clean": "rm -rf lib dist tsconfig.tsbuildinfo",
78
41
  "test": "vitest",
79
- "test:exports": "attw --pack . --exclude-entrypoints internal/sync_protocol"
42
+ "test:exports": "attw --pack . --ignore-rules no-resolution cjs-resolves-to-esm"
80
43
  }
81
44
  }
@@ -1,7 +1,7 @@
1
- import { AbstractPowerSyncDatabase } from '../client/AbstractPowerSyncDatabase.js';
1
+ import { LogLevels, PowerSyncLogger } from '../utils/Logger.js';
2
2
  import { Transaction } from '../db/DBAdapter.js';
3
- import { ILogger } from '../utils/Logger.js';
4
3
  import { AttachmentRecord, AttachmentState, attachmentFromSql } from './Schema.js';
4
+ import { CommonPowerSyncDatabase } from '../client/CommonPowerSyncDatabase.js';
5
5
 
6
6
  /**
7
7
  * AttachmentContext provides database operations for managing attachment records.
@@ -14,13 +14,13 @@ import { AttachmentRecord, AttachmentState, attachmentFromSql } from './Schema.j
14
14
  */
15
15
  export class AttachmentContext {
16
16
  /** PowerSync database instance for executing queries */
17
- readonly db: AbstractPowerSyncDatabase;
17
+ readonly db: CommonPowerSyncDatabase;
18
18
 
19
19
  /** Name of the database table storing attachment records */
20
20
  readonly tableName: string;
21
21
 
22
22
  /** Logger instance for diagnostic information */
23
- readonly logger: ILogger;
23
+ readonly logger: PowerSyncLogger;
24
24
 
25
25
  /** Maximum number of archived attachments to keep before cleanup */
26
26
  readonly archivedCacheLimit: number = 100;
@@ -33,9 +33,9 @@ export class AttachmentContext {
33
33
  * @param logger - Logger instance for diagnostic output
34
34
  */
35
35
  constructor(
36
- db: AbstractPowerSyncDatabase,
36
+ db: CommonPowerSyncDatabase,
37
37
  tableName: string = 'attachments',
38
- logger: ILogger,
38
+ logger: PowerSyncLogger,
39
39
  archivedCacheLimit: number
40
40
  ) {
41
41
  this.db = db;
@@ -234,9 +234,10 @@ export class AttachmentContext {
234
234
  if (archivedAttachments.length === 0) return false;
235
235
 
236
236
  await callback?.(archivedAttachments);
237
- this.logger.info(
238
- `Deleting ${archivedAttachments.length} archived attachments. Archived attachment exceeds cache archiveCacheLimit of ${this.archivedCacheLimit}.`
239
- );
237
+ this.logger.log({
238
+ level: LogLevels.info,
239
+ message: `Deleting ${archivedAttachments.length} archived attachments. Archived attachment exceeds cache archiveCacheLimit of ${this.archivedCacheLimit}.`
240
+ });
240
241
 
241
242
  const ids = archivedAttachments.map((attachment) => attachment.id);
242
243
 
@@ -255,7 +256,7 @@ export class AttachmentContext {
255
256
  [JSON.stringify(ids)]
256
257
  );
257
258
 
258
- this.logger.info(`Deleted ${archivedAttachments.length} archived attachments`);
259
+ this.logger.log({ level: LogLevels.info, message: `Deleted ${archivedAttachments.length} archived attachments` });
259
260
  return archivedAttachments.length < limit;
260
261
  }
261
262