@powersync/service-core 0.13.0 → 0.14.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 (181) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/entry/commands/compact-action.js +14 -14
  3. package/dist/entry/commands/compact-action.js.map +1 -1
  4. package/dist/entry/commands/migrate-action.js +15 -4
  5. package/dist/entry/commands/migrate-action.js.map +1 -1
  6. package/dist/index.d.ts +1 -3
  7. package/dist/index.js +1 -3
  8. package/dist/index.js.map +1 -1
  9. package/dist/migrations/PowerSyncMigrationManager.d.ts +17 -0
  10. package/dist/migrations/PowerSyncMigrationManager.js +21 -0
  11. package/dist/migrations/PowerSyncMigrationManager.js.map +1 -0
  12. package/dist/migrations/ensure-automatic-migrations.d.ts +4 -0
  13. package/dist/migrations/ensure-automatic-migrations.js +14 -0
  14. package/dist/migrations/ensure-automatic-migrations.js.map +1 -0
  15. package/dist/migrations/migrations-index.d.ts +2 -3
  16. package/dist/migrations/migrations-index.js +2 -3
  17. package/dist/migrations/migrations-index.js.map +1 -1
  18. package/dist/routes/configure-fastify.d.ts +12 -12
  19. package/dist/routes/endpoints/admin.d.ts +24 -24
  20. package/dist/storage/BucketStorage.d.ts +49 -1
  21. package/dist/storage/BucketStorage.js +26 -0
  22. package/dist/storage/BucketStorage.js.map +1 -1
  23. package/dist/storage/bson.d.ts +24 -0
  24. package/dist/storage/bson.js +73 -0
  25. package/dist/storage/bson.js.map +1 -0
  26. package/dist/storage/storage-index.d.ts +3 -14
  27. package/dist/storage/storage-index.js +3 -14
  28. package/dist/storage/storage-index.js.map +1 -1
  29. package/dist/sync/sync.js +3 -1
  30. package/dist/sync/sync.js.map +1 -1
  31. package/dist/system/ServiceContext.d.ts +3 -0
  32. package/dist/system/ServiceContext.js +11 -3
  33. package/dist/system/ServiceContext.js.map +1 -1
  34. package/dist/util/config/types.d.ts +2 -2
  35. package/dist/util/utils.d.ts +13 -1
  36. package/dist/util/utils.js +20 -1
  37. package/dist/util/utils.js.map +1 -1
  38. package/package.json +7 -8
  39. package/src/entry/commands/compact-action.ts +19 -14
  40. package/src/entry/commands/migrate-action.ts +17 -4
  41. package/src/index.ts +1 -4
  42. package/src/migrations/PowerSyncMigrationManager.ts +42 -0
  43. package/src/migrations/ensure-automatic-migrations.ts +15 -0
  44. package/src/migrations/migrations-index.ts +2 -3
  45. package/src/storage/BucketStorage.ts +53 -1
  46. package/src/storage/bson.ts +78 -0
  47. package/src/storage/storage-index.ts +3 -15
  48. package/src/sync/sync.ts +3 -1
  49. package/src/system/ServiceContext.ts +17 -4
  50. package/src/util/config/types.ts +2 -2
  51. package/src/util/utils.ts +21 -1
  52. package/test/src/env.ts +0 -1
  53. package/tsconfig.tsbuildinfo +1 -1
  54. package/dist/db/db-index.d.ts +0 -1
  55. package/dist/db/db-index.js +0 -2
  56. package/dist/db/db-index.js.map +0 -1
  57. package/dist/db/mongo.d.ts +0 -35
  58. package/dist/db/mongo.js +0 -73
  59. package/dist/db/mongo.js.map +0 -1
  60. package/dist/locks/LockManager.d.ts +0 -10
  61. package/dist/locks/LockManager.js +0 -7
  62. package/dist/locks/LockManager.js.map +0 -1
  63. package/dist/locks/MongoLocks.d.ts +0 -36
  64. package/dist/locks/MongoLocks.js +0 -81
  65. package/dist/locks/MongoLocks.js.map +0 -1
  66. package/dist/locks/locks-index.d.ts +0 -2
  67. package/dist/locks/locks-index.js +0 -3
  68. package/dist/locks/locks-index.js.map +0 -1
  69. package/dist/migrations/db/migrations/1684951997326-init.d.ts +0 -3
  70. package/dist/migrations/db/migrations/1684951997326-init.js +0 -33
  71. package/dist/migrations/db/migrations/1684951997326-init.js.map +0 -1
  72. package/dist/migrations/db/migrations/1688556755264-initial-sync-rules.d.ts +0 -2
  73. package/dist/migrations/db/migrations/1688556755264-initial-sync-rules.js +0 -5
  74. package/dist/migrations/db/migrations/1688556755264-initial-sync-rules.js.map +0 -1
  75. package/dist/migrations/db/migrations/1702295701188-sync-rule-state.d.ts +0 -3
  76. package/dist/migrations/db/migrations/1702295701188-sync-rule-state.js +0 -56
  77. package/dist/migrations/db/migrations/1702295701188-sync-rule-state.js.map +0 -1
  78. package/dist/migrations/db/migrations/1711543888062-write-checkpoint-index.d.ts +0 -3
  79. package/dist/migrations/db/migrations/1711543888062-write-checkpoint-index.js +0 -29
  80. package/dist/migrations/db/migrations/1711543888062-write-checkpoint-index.js.map +0 -1
  81. package/dist/migrations/db/migrations/1727099539247-custom-write-checkpoint-index.d.ts +0 -3
  82. package/dist/migrations/db/migrations/1727099539247-custom-write-checkpoint-index.js +0 -31
  83. package/dist/migrations/db/migrations/1727099539247-custom-write-checkpoint-index.js.map +0 -1
  84. package/dist/migrations/definitions.d.ts +0 -18
  85. package/dist/migrations/definitions.js +0 -6
  86. package/dist/migrations/definitions.js.map +0 -1
  87. package/dist/migrations/executor.d.ts +0 -16
  88. package/dist/migrations/executor.js +0 -64
  89. package/dist/migrations/executor.js.map +0 -1
  90. package/dist/migrations/migrations.d.ts +0 -18
  91. package/dist/migrations/migrations.js +0 -110
  92. package/dist/migrations/migrations.js.map +0 -1
  93. package/dist/migrations/store/migration-store.d.ts +0 -11
  94. package/dist/migrations/store/migration-store.js +0 -46
  95. package/dist/migrations/store/migration-store.js.map +0 -1
  96. package/dist/storage/MongoBucketStorage.d.ts +0 -48
  97. package/dist/storage/MongoBucketStorage.js +0 -427
  98. package/dist/storage/MongoBucketStorage.js.map +0 -1
  99. package/dist/storage/mongo/MongoBucketBatch.d.ts +0 -74
  100. package/dist/storage/mongo/MongoBucketBatch.js +0 -683
  101. package/dist/storage/mongo/MongoBucketBatch.js.map +0 -1
  102. package/dist/storage/mongo/MongoCompactor.d.ts +0 -40
  103. package/dist/storage/mongo/MongoCompactor.js +0 -310
  104. package/dist/storage/mongo/MongoCompactor.js.map +0 -1
  105. package/dist/storage/mongo/MongoIdSequence.d.ts +0 -12
  106. package/dist/storage/mongo/MongoIdSequence.js +0 -21
  107. package/dist/storage/mongo/MongoIdSequence.js.map +0 -1
  108. package/dist/storage/mongo/MongoPersistedSyncRules.d.ts +0 -9
  109. package/dist/storage/mongo/MongoPersistedSyncRules.js +0 -9
  110. package/dist/storage/mongo/MongoPersistedSyncRules.js.map +0 -1
  111. package/dist/storage/mongo/MongoPersistedSyncRulesContent.d.ts +0 -20
  112. package/dist/storage/mongo/MongoPersistedSyncRulesContent.js +0 -26
  113. package/dist/storage/mongo/MongoPersistedSyncRulesContent.js.map +0 -1
  114. package/dist/storage/mongo/MongoStorageProvider.d.ts +0 -5
  115. package/dist/storage/mongo/MongoStorageProvider.js +0 -26
  116. package/dist/storage/mongo/MongoStorageProvider.js.map +0 -1
  117. package/dist/storage/mongo/MongoSyncBucketStorage.d.ts +0 -38
  118. package/dist/storage/mongo/MongoSyncBucketStorage.js +0 -534
  119. package/dist/storage/mongo/MongoSyncBucketStorage.js.map +0 -1
  120. package/dist/storage/mongo/MongoSyncRulesLock.d.ts +0 -16
  121. package/dist/storage/mongo/MongoSyncRulesLock.js +0 -65
  122. package/dist/storage/mongo/MongoSyncRulesLock.js.map +0 -1
  123. package/dist/storage/mongo/MongoWriteCheckpointAPI.d.ts +0 -20
  124. package/dist/storage/mongo/MongoWriteCheckpointAPI.js +0 -104
  125. package/dist/storage/mongo/MongoWriteCheckpointAPI.js.map +0 -1
  126. package/dist/storage/mongo/OperationBatch.d.ts +0 -35
  127. package/dist/storage/mongo/OperationBatch.js +0 -119
  128. package/dist/storage/mongo/OperationBatch.js.map +0 -1
  129. package/dist/storage/mongo/PersistedBatch.d.ts +0 -46
  130. package/dist/storage/mongo/PersistedBatch.js +0 -223
  131. package/dist/storage/mongo/PersistedBatch.js.map +0 -1
  132. package/dist/storage/mongo/config.d.ts +0 -19
  133. package/dist/storage/mongo/config.js +0 -26
  134. package/dist/storage/mongo/config.js.map +0 -1
  135. package/dist/storage/mongo/db.d.ts +0 -36
  136. package/dist/storage/mongo/db.js +0 -47
  137. package/dist/storage/mongo/db.js.map +0 -1
  138. package/dist/storage/mongo/models.d.ts +0 -163
  139. package/dist/storage/mongo/models.js +0 -27
  140. package/dist/storage/mongo/models.js.map +0 -1
  141. package/dist/storage/mongo/util.d.ts +0 -54
  142. package/dist/storage/mongo/util.js +0 -190
  143. package/dist/storage/mongo/util.js.map +0 -1
  144. package/src/db/db-index.ts +0 -1
  145. package/src/db/mongo.ts +0 -81
  146. package/src/locks/LockManager.ts +0 -16
  147. package/src/locks/MongoLocks.ts +0 -142
  148. package/src/locks/locks-index.ts +0 -2
  149. package/src/migrations/db/migrations/1684951997326-init.ts +0 -38
  150. package/src/migrations/db/migrations/1688556755264-initial-sync-rules.ts +0 -5
  151. package/src/migrations/db/migrations/1702295701188-sync-rule-state.ts +0 -102
  152. package/src/migrations/db/migrations/1711543888062-write-checkpoint-index.ts +0 -34
  153. package/src/migrations/db/migrations/1727099539247-custom-write-checkpoint-index.ts +0 -37
  154. package/src/migrations/definitions.ts +0 -21
  155. package/src/migrations/executor.ts +0 -87
  156. package/src/migrations/migrations.ts +0 -142
  157. package/src/migrations/store/migration-store.ts +0 -63
  158. package/src/storage/MongoBucketStorage.ts +0 -541
  159. package/src/storage/mongo/MongoBucketBatch.ts +0 -900
  160. package/src/storage/mongo/MongoCompactor.ts +0 -393
  161. package/src/storage/mongo/MongoIdSequence.ts +0 -24
  162. package/src/storage/mongo/MongoPersistedSyncRules.ts +0 -16
  163. package/src/storage/mongo/MongoPersistedSyncRulesContent.ts +0 -50
  164. package/src/storage/mongo/MongoStorageProvider.ts +0 -31
  165. package/src/storage/mongo/MongoSyncBucketStorage.ts +0 -640
  166. package/src/storage/mongo/MongoSyncRulesLock.ts +0 -85
  167. package/src/storage/mongo/MongoWriteCheckpointAPI.ts +0 -154
  168. package/src/storage/mongo/OperationBatch.ts +0 -131
  169. package/src/storage/mongo/PersistedBatch.ts +0 -285
  170. package/src/storage/mongo/config.ts +0 -40
  171. package/src/storage/mongo/db.ts +0 -88
  172. package/src/storage/mongo/models.ts +0 -187
  173. package/src/storage/mongo/util.ts +0 -203
  174. package/test/src/__snapshots__/sync.test.ts.snap +0 -332
  175. package/test/src/bucket_validation.test.ts +0 -143
  176. package/test/src/bucket_validation.ts +0 -60
  177. package/test/src/compacting.test.ts +0 -295
  178. package/test/src/data_storage.test.ts +0 -1569
  179. package/test/src/stream_utils.ts +0 -42
  180. package/test/src/sync.test.ts +0 -511
  181. package/test/src/util.ts +0 -150
@@ -1 +0,0 @@
1
- export * as mongo from './mongo.js';
@@ -1,2 +0,0 @@
1
- export * as mongo from './mongo.js';
2
- //# sourceMappingURL=db-index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"db-index.js","sourceRoot":"","sources":["../../src/db/db-index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC"}
@@ -1,35 +0,0 @@
1
- import * as mongo from 'mongodb';
2
- import { configFile } from '@powersync/service-types';
3
- /**
4
- * Time for new connection to timeout.
5
- */
6
- export declare const MONGO_CONNECT_TIMEOUT_MS = 10000;
7
- /**
8
- * Time for individual requests to timeout the socket.
9
- */
10
- export declare const MONGO_SOCKET_TIMEOUT_MS = 60000;
11
- /**
12
- * Time for individual requests to timeout the operation.
13
- *
14
- * This is time spent on the cursor, not total time.
15
- *
16
- * Must be less than MONGO_SOCKET_TIMEOUT_MS to ensure proper error handling.
17
- */
18
- export declare const MONGO_OPERATION_TIMEOUT_MS = 30000;
19
- /**
20
- * Same as above, but specifically for clear operations.
21
- *
22
- * These are retried when reaching the timeout.
23
- */
24
- export declare const MONGO_CLEAR_OPERATION_TIMEOUT_MS = 5000;
25
- export declare function createMongoClient(config: configFile.PowerSyncConfig['storage']): mongo.MongoClient;
26
- /**
27
- * Wait up to a minute for authentication errors to resolve.
28
- *
29
- * There can be a delay between an Atlas user being created, and that user being
30
- * available on the database cluster. This works around it.
31
- *
32
- * This is specifically relevant for migrations and teardown - other parts of the stack
33
- * can generate handle these failures and just retry or restart.
34
- */
35
- export declare function waitForAuth(db: mongo.Db): Promise<void>;
package/dist/db/mongo.js DELETED
@@ -1,73 +0,0 @@
1
- import * as mongo from 'mongodb';
2
- import * as timers from 'timers/promises';
3
- import { normalizeMongoConfig } from '../storage/storage-index.js';
4
- /**
5
- * Time for new connection to timeout.
6
- */
7
- export const MONGO_CONNECT_TIMEOUT_MS = 10000;
8
- /**
9
- * Time for individual requests to timeout the socket.
10
- */
11
- export const MONGO_SOCKET_TIMEOUT_MS = 60000;
12
- /**
13
- * Time for individual requests to timeout the operation.
14
- *
15
- * This is time spent on the cursor, not total time.
16
- *
17
- * Must be less than MONGO_SOCKET_TIMEOUT_MS to ensure proper error handling.
18
- */
19
- export const MONGO_OPERATION_TIMEOUT_MS = 30000;
20
- /**
21
- * Same as above, but specifically for clear operations.
22
- *
23
- * These are retried when reaching the timeout.
24
- */
25
- export const MONGO_CLEAR_OPERATION_TIMEOUT_MS = 5000;
26
- export function createMongoClient(config) {
27
- const normalized = normalizeMongoConfig(config);
28
- return new mongo.MongoClient(normalized.uri, {
29
- auth: {
30
- username: normalized.username,
31
- password: normalized.password
32
- },
33
- // Time for connection to timeout
34
- connectTimeoutMS: MONGO_CONNECT_TIMEOUT_MS,
35
- // Time for individual requests to timeout
36
- socketTimeoutMS: MONGO_SOCKET_TIMEOUT_MS,
37
- // How long to wait for new primary selection
38
- serverSelectionTimeoutMS: 30000,
39
- // Avoid too many connections:
40
- // 1. It can overwhelm the source database.
41
- // 2. Processing too many queries in parallel can cause the process to run out of memory.
42
- maxPoolSize: 8,
43
- maxConnecting: 3,
44
- maxIdleTimeMS: 60000
45
- });
46
- }
47
- /**
48
- * Wait up to a minute for authentication errors to resolve.
49
- *
50
- * There can be a delay between an Atlas user being created, and that user being
51
- * available on the database cluster. This works around it.
52
- *
53
- * This is specifically relevant for migrations and teardown - other parts of the stack
54
- * can generate handle these failures and just retry or restart.
55
- */
56
- export async function waitForAuth(db) {
57
- const start = Date.now();
58
- while (Date.now() - start < 60000) {
59
- try {
60
- await db.command({ ping: 1 });
61
- // Success
62
- break;
63
- }
64
- catch (e) {
65
- if (e.codeName == 'AuthenticationFailed') {
66
- await timers.setTimeout(1000);
67
- continue;
68
- }
69
- throw e;
70
- }
71
- }
72
- }
73
- //# sourceMappingURL=mongo.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mongo.js","sourceRoot":"","sources":["../../src/db/mongo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AACjC,OAAO,KAAK,MAAM,MAAM,iBAAiB,CAAC;AAG1C,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAEnE;;GAEG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAM,CAAC;AAE/C;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAM,CAAC;AAE9C;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,KAAM,CAAC;AAEjD;;;;GAIG;AACH,MAAM,CAAC,MAAM,gCAAgC,GAAG,IAAK,CAAC;AAEtD,MAAM,UAAU,iBAAiB,CAAC,MAA6C;IAC7E,MAAM,UAAU,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAChD,OAAO,IAAI,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,GAAG,EAAE;QAC3C,IAAI,EAAE;YACJ,QAAQ,EAAE,UAAU,CAAC,QAAQ;YAC7B,QAAQ,EAAE,UAAU,CAAC,QAAQ;SAC9B;QACD,iCAAiC;QACjC,gBAAgB,EAAE,wBAAwB;QAC1C,0CAA0C;QAC1C,eAAe,EAAE,uBAAuB;QACxC,6CAA6C;QAC7C,wBAAwB,EAAE,KAAM;QAEhC,8BAA8B;QAC9B,2CAA2C;QAC3C,yFAAyF;QACzF,WAAW,EAAE,CAAC;QAEd,aAAa,EAAE,CAAC;QAChB,aAAa,EAAE,KAAM;KACtB,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,EAAY;IAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,KAAM,EAAE,CAAC;QACnC,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;YAC9B,UAAU;YACV,MAAM;QACR,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,CAAC,QAAQ,IAAI,sBAAsB,EAAE,CAAC;gBACzC,MAAM,MAAM,CAAC,UAAU,CAAC,IAAK,CAAC,CAAC;gBAC/B,SAAS;YACX,CAAC;YACD,MAAM,CAAC,CAAC;QACV,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -1,10 +0,0 @@
1
- import * as bson from 'bson';
2
- export declare class LockActiveError extends Error {
3
- constructor();
4
- }
5
- export type LockManager = {
6
- acquire: () => Promise<bson.ObjectId | null>;
7
- refresh: (lock_id: bson.ObjectId) => Promise<void>;
8
- release: (lock_id: bson.ObjectId) => Promise<void>;
9
- lock: (handler: (refresh: () => Promise<void>) => Promise<void>) => Promise<void>;
10
- };
@@ -1,7 +0,0 @@
1
- export class LockActiveError extends Error {
2
- constructor() {
3
- super('Lock is already active');
4
- this.name = this.constructor.name;
5
- }
6
- }
7
- //# sourceMappingURL=LockManager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LockManager.js","sourceRoot":"","sources":["../../src/locks/LockManager.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,eAAgB,SAAQ,KAAK;IACxC;QACE,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAChC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;IACpC,CAAC;CACF"}
@@ -1,36 +0,0 @@
1
- import * as mongo from 'mongodb';
2
- import * as bson from 'bson';
3
- import { LockManager } from './LockManager.js';
4
- /**
5
- * Lock Document Schema
6
- */
7
- export type Lock = {
8
- name: string;
9
- active_lock?: {
10
- lock_id: bson.ObjectId;
11
- ts: Date;
12
- };
13
- };
14
- export type Collection = mongo.Collection<Lock>;
15
- export type AcquireLockParams = {
16
- /**
17
- * Name of the process/user trying to acquire the lock.
18
- */
19
- name: string;
20
- /**
21
- * The TTL of the lock (ms). Default: 60000 ms (1 min)
22
- */
23
- timeout?: number;
24
- };
25
- export declare const releaseLock: (collection: Collection, lock_id: bson.ObjectId) => Promise<void>;
26
- export type CreateLockManagerParams = {
27
- /**
28
- * Name of the process/user trying to acquire the lock.
29
- */
30
- name: string;
31
- /**
32
- * The TTL for each lock (ms). Default: 60000 ms (1 min)
33
- */
34
- timeout?: number;
35
- };
36
- export declare const createMongoLockManager: (collection: Collection, params: CreateLockManagerParams) => LockManager;
@@ -1,81 +0,0 @@
1
- import * as bson from 'bson';
2
- import { LockActiveError } from './LockManager.js';
3
- const DEFAULT_LOCK_TIMEOUT = 60 * 1000; // 1 minute
4
- const acquireLock = async (collection, params) => {
5
- const now = new Date();
6
- const lock_timeout = params.timeout ?? DEFAULT_LOCK_TIMEOUT;
7
- const lock_id = new bson.ObjectId();
8
- await collection.updateOne({
9
- name: params.name
10
- }, {
11
- $setOnInsert: {
12
- name: params.name
13
- }
14
- }, {
15
- upsert: true
16
- });
17
- const expired_ts = now.getTime() - lock_timeout;
18
- const res = await collection.updateOne({
19
- $and: [
20
- { name: params.name },
21
- {
22
- $or: [{ active_lock: { $exists: false } }, { 'active_lock.ts': { $lte: new Date(expired_ts) } }]
23
- }
24
- ]
25
- }, {
26
- $set: {
27
- active_lock: {
28
- lock_id: lock_id,
29
- ts: now
30
- }
31
- }
32
- });
33
- if (res.modifiedCount === 0) {
34
- return null;
35
- }
36
- return lock_id;
37
- };
38
- const refreshLock = async (collection, lock_id) => {
39
- const res = await collection.updateOne({
40
- 'active_lock.lock_id': lock_id
41
- }, {
42
- $set: {
43
- 'active_lock.ts': new Date()
44
- }
45
- });
46
- if (res.modifiedCount === 0) {
47
- throw new Error('Lock not found, could not refresh');
48
- }
49
- };
50
- export const releaseLock = async (collection, lock_id) => {
51
- const res = await collection.updateOne({
52
- 'active_lock.lock_id': lock_id
53
- }, {
54
- $unset: {
55
- active_lock: true
56
- }
57
- });
58
- if (res.modifiedCount === 0) {
59
- throw new Error('Lock not found, could not release');
60
- }
61
- };
62
- export const createMongoLockManager = (collection, params) => {
63
- return {
64
- acquire: () => acquireLock(collection, params),
65
- refresh: (lock_id) => refreshLock(collection, lock_id),
66
- release: (lock_id) => releaseLock(collection, lock_id),
67
- lock: async (handler) => {
68
- const lock_id = await acquireLock(collection, params);
69
- if (!lock_id) {
70
- throw new LockActiveError();
71
- }
72
- try {
73
- await handler(() => refreshLock(collection, lock_id));
74
- }
75
- finally {
76
- await releaseLock(collection, lock_id);
77
- }
78
- }
79
- };
80
- };
81
- //# sourceMappingURL=MongoLocks.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MongoLocks.js","sourceRoot":"","sources":["../../src/locks/MongoLocks.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAe,MAAM,kBAAkB,CAAC;AA0BhE,MAAM,oBAAoB,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,WAAW;AAEnD,MAAM,WAAW,GAAG,KAAK,EAAE,UAAsB,EAAE,MAAyB,EAAE,EAAE;IAC9E,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,IAAI,oBAAoB,CAAC;IAC5D,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;IAEpC,MAAM,UAAU,CAAC,SAAS,CACxB;QACE,IAAI,EAAE,MAAM,CAAC,IAAI;KAClB,EACD;QACE,YAAY,EAAE;YACZ,IAAI,EAAE,MAAM,CAAC,IAAI;SAClB;KACF,EACD;QACE,MAAM,EAAE,IAAI;KACb,CACF,CAAC;IAEF,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,YAAY,CAAC;IAEhD,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,SAAS,CACpC;QACE,IAAI,EAAE;YACJ,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE;YACrB;gBACE,GAAG,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,gBAAgB,EAAE,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC;aACjG;SACF;KACF,EACD;QACE,IAAI,EAAE;YACJ,WAAW,EAAE;gBACX,OAAO,EAAE,OAAO;gBAChB,EAAE,EAAE,GAAG;aACR;SACF;KACF,CACF,CAAC;IAEF,IAAI,GAAG,CAAC,aAAa,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,KAAK,EAAE,UAAsB,EAAE,OAAsB,EAAE,EAAE;IAC3E,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,SAAS,CACpC;QACE,qBAAqB,EAAE,OAAO;KAC/B,EACD;QACE,IAAI,EAAE;YACJ,gBAAgB,EAAE,IAAI,IAAI,EAAE;SAC7B;KACF,CACF,CAAC;IAEF,IAAI,GAAG,CAAC,aAAa,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACvD,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,EAAE,UAAsB,EAAE,OAAsB,EAAE,EAAE;IAClF,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,SAAS,CACpC;QACE,qBAAqB,EAAE,OAAO;KAC/B,EACD;QACE,MAAM,EAAE;YACN,WAAW,EAAE,IAAI;SAClB;KACF,CACF,CAAC;IAEF,IAAI,GAAG,CAAC,aAAa,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACvD,CAAC;AACH,CAAC,CAAC;AAaF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,UAAsB,EAAE,MAA+B,EAAe,EAAE;IAC7G,OAAO;QACL,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,UAAU,EAAE,MAAM,CAAC;QAC9C,OAAO,EAAE,CAAC,OAAsB,EAAE,EAAE,CAAC,WAAW,CAAC,UAAU,EAAE,OAAO,CAAC;QACrE,OAAO,EAAE,CAAC,OAAsB,EAAE,EAAE,CAAC,WAAW,CAAC,UAAU,EAAE,OAAO,CAAC;QAErE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACtB,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YACtD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,eAAe,EAAE,CAAC;YAC9B,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,OAAO,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;YACxD,CAAC;oBAAS,CAAC;gBACT,MAAM,WAAW,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export * from './LockManager.js';
2
- export * from './MongoLocks.js';
@@ -1,3 +0,0 @@
1
- export * from './LockManager.js';
2
- export * from './MongoLocks.js';
3
- //# sourceMappingURL=locks-index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"locks-index.js","sourceRoot":"","sources":["../../src/locks/locks-index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC"}
@@ -1,3 +0,0 @@
1
- import * as utils from '../../../util/util-index.js';
2
- export declare const up: (context: utils.MigrationContext) => Promise<void>;
3
- export declare const down: (context: utils.MigrationContext) => Promise<void>;
@@ -1,33 +0,0 @@
1
- import * as mongo from '../../../db/mongo.js';
2
- import * as storage from '../../../storage/storage-index.js';
3
- import * as utils from '../../../util/util-index.js';
4
- export const up = async (context) => {
5
- const { runner_config } = context;
6
- const config = await utils.loadConfig(runner_config);
7
- const database = storage.createPowerSyncMongo(config.storage);
8
- await mongo.waitForAuth(database.db);
9
- try {
10
- await database.bucket_parameters.createIndex({
11
- 'key.g': 1,
12
- lookup: 1,
13
- _id: 1
14
- }, { name: 'lookup1' });
15
- }
16
- finally {
17
- await database.client.close();
18
- }
19
- };
20
- export const down = async (context) => {
21
- const { runner_config } = context;
22
- const config = await utils.loadConfig(runner_config);
23
- const database = storage.createPowerSyncMongo(config.storage);
24
- try {
25
- if (await database.bucket_parameters.indexExists('lookup')) {
26
- await database.bucket_parameters.dropIndex('lookup1');
27
- }
28
- }
29
- finally {
30
- await database.client.close();
31
- }
32
- };
33
- //# sourceMappingURL=1684951997326-init.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"1684951997326-init.js","sourceRoot":"","sources":["../../../../src/migrations/db/migrations/1684951997326-init.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,sBAAsB,CAAC;AAC9C,OAAO,KAAK,OAAO,MAAM,mCAAmC,CAAC;AAC7D,OAAO,KAAK,KAAK,MAAM,6BAA6B,CAAC;AAErD,MAAM,CAAC,MAAM,EAAE,GAAG,KAAK,EAAE,OAA+B,EAAE,EAAE;IAC1D,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC;IAElC,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;IAErD,MAAM,QAAQ,GAAG,OAAO,CAAC,oBAAoB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC9D,MAAM,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACrC,IAAI,CAAC;QACH,MAAM,QAAQ,CAAC,iBAAiB,CAAC,WAAW,CAC1C;YACE,OAAO,EAAE,CAAC;YACV,MAAM,EAAE,CAAC;YACT,GAAG,EAAE,CAAC;SACP,EACD,EAAE,IAAI,EAAE,SAAS,EAAE,CACpB,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,MAAM,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IAChC,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,IAAI,GAAG,KAAK,EAAE,OAA+B,EAAE,EAAE;IAC5D,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC;IAClC,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;IAErD,MAAM,QAAQ,GAAG,OAAO,CAAC,oBAAoB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC9D,IAAI,CAAC;QACH,IAAI,MAAM,QAAQ,CAAC,iBAAiB,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC3D,MAAM,QAAQ,CAAC,iBAAiB,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;YAAS,CAAC;QACT,MAAM,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IAChC,CAAC;AACH,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export declare const up: () => Promise<void>;
2
- export declare const down: () => Promise<void>;
@@ -1,5 +0,0 @@
1
- export const up = async () => {
2
- // No-op - we don't auto-create sync rules anymore
3
- };
4
- export const down = async () => { };
5
- //# sourceMappingURL=1688556755264-initial-sync-rules.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"1688556755264-initial-sync-rules.js","sourceRoot":"","sources":["../../../../src/migrations/db/migrations/1688556755264-initial-sync-rules.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,EAAE,GAAG,KAAK,IAAI,EAAE;IAC3B,kDAAkD;AACpD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE,GAAE,CAAC,CAAC"}
@@ -1,3 +0,0 @@
1
- import * as utils from '../../../util/util-index.js';
2
- export declare const up: (context: utils.MigrationContext) => Promise<void>;
3
- export declare const down: (context: utils.MigrationContext) => Promise<void>;
@@ -1,56 +0,0 @@
1
- import * as mongo from '../../../db/mongo.js';
2
- import * as storage from '../../../storage/storage-index.js';
3
- import * as utils from '../../../util/util-index.js';
4
- export const up = async (context) => {
5
- const { runner_config } = context;
6
- const config = await utils.loadConfig(runner_config);
7
- const db = storage.createPowerSyncMongo(config.storage);
8
- await mongo.waitForAuth(db.db);
9
- try {
10
- // We keep the old flags for existing deployments still shutting down.
11
- // 1. New sync rules: `active = false, snapshot_done = false, replicating = true, auto_activate = true`
12
- await db.sync_rules.updateMany({
13
- active: { $ne: true },
14
- replicating: true,
15
- auto_activate: true
16
- }, { $set: { state: storage.SyncRuleState.PROCESSING } });
17
- // 2. Snapshot done: `active = true, snapshot_done = true, replicating = true, auto_activate = false`
18
- await db.sync_rules.updateMany({
19
- active: true
20
- }, { $set: { state: storage.SyncRuleState.ACTIVE } });
21
- // 3. Stopped: `active = false, snapshot_done = true, replicating = false, auto_activate = false`.
22
- await db.sync_rules.updateMany({
23
- active: { $ne: true },
24
- replicating: { $ne: true },
25
- auto_activate: { $ne: true }
26
- }, { $set: { state: storage.SyncRuleState.STOP } });
27
- const remaining = await db.sync_rules.find({ state: null }).toArray();
28
- if (remaining.length > 0) {
29
- const slots = remaining.map((doc) => doc.slot_name).join(', ');
30
- throw new Error(`Invalid state for sync rules: ${slots}`);
31
- }
32
- }
33
- finally {
34
- await db.client.close();
35
- }
36
- };
37
- export const down = async (context) => {
38
- const { runner_config } = context;
39
- const config = await utils.loadConfig(runner_config);
40
- const db = storage.createPowerSyncMongo(config.storage);
41
- try {
42
- await db.sync_rules.updateMany({
43
- state: storage.SyncRuleState.ACTIVE
44
- }, { $set: { active: true, replicating: true } });
45
- await db.sync_rules.updateMany({
46
- state: storage.SyncRuleState.PROCESSING
47
- }, { $set: { active: false, replicating: true, auto_activate: true } });
48
- await db.sync_rules.updateMany({
49
- $or: [{ state: storage.SyncRuleState.STOP }, { state: storage.SyncRuleState.TERMINATED }]
50
- }, { $set: { active: false, replicating: false, auto_activate: false } });
51
- }
52
- finally {
53
- await db.client.close();
54
- }
55
- };
56
- //# sourceMappingURL=1702295701188-sync-rule-state.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"1702295701188-sync-rule-state.js","sourceRoot":"","sources":["../../../../src/migrations/db/migrations/1702295701188-sync-rule-state.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import * as utils from '../../../util/util-index.js';
2
- export declare const up: (context: utils.MigrationContext) => Promise<void>;
3
- export declare const down: (context: utils.MigrationContext) => Promise<void>;
@@ -1,29 +0,0 @@
1
- import * as storage from '../../../storage/storage-index.js';
2
- import * as utils from '../../../util/util-index.js';
3
- export const up = async (context) => {
4
- const { runner_config } = context;
5
- const config = await utils.loadConfig(runner_config);
6
- const db = storage.createPowerSyncMongo(config.storage);
7
- try {
8
- await db.write_checkpoints.createIndex({
9
- user_id: 1
10
- }, { name: 'user_id' });
11
- }
12
- finally {
13
- await db.client.close();
14
- }
15
- };
16
- export const down = async (context) => {
17
- const { runner_config } = context;
18
- const config = await utils.loadConfig(runner_config);
19
- const db = storage.createPowerSyncMongo(config.storage);
20
- try {
21
- if (await db.write_checkpoints.indexExists('user_id')) {
22
- await db.write_checkpoints.dropIndex('user_id');
23
- }
24
- }
25
- finally {
26
- await db.client.close();
27
- }
28
- };
29
- //# sourceMappingURL=1711543888062-write-checkpoint-index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"1711543888062-write-checkpoint-index.js","sourceRoot":"","sources":["../../../../src/migrations/db/migrations/1711543888062-write-checkpoint-index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,mCAAmC,CAAC;AAC7D,OAAO,KAAK,KAAK,MAAM,6BAA6B,CAAC;AAErD,MAAM,CAAC,MAAM,EAAE,GAAG,KAAK,EAAE,OAA+B,EAAE,EAAE;IAC1D,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC;IAClC,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;IACrD,MAAM,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAExD,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,iBAAiB,CAAC,WAAW,CACpC;YACE,OAAO,EAAE,CAAC;SACX,EACD,EAAE,IAAI,EAAE,SAAS,EAAE,CACpB,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,MAAM,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,IAAI,GAAG,KAAK,EAAE,OAA+B,EAAE,EAAE;IAC5D,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC;IAClC,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;IAErD,MAAM,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAExD,IAAI,CAAC;QACH,IAAI,MAAM,EAAE,CAAC,iBAAiB,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC;YACtD,MAAM,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;YAAS,CAAC;QACT,MAAM,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC;AACH,CAAC,CAAC"}
@@ -1,3 +0,0 @@
1
- import * as utils from '../../../util/util-index.js';
2
- export declare const up: (context: utils.MigrationContext) => Promise<void>;
3
- export declare const down: (context: utils.MigrationContext) => Promise<void>;
@@ -1,31 +0,0 @@
1
- import * as storage from '../../../storage/storage-index.js';
2
- import * as utils from '../../../util/util-index.js';
3
- const INDEX_NAME = 'user_sync_rule_unique';
4
- export const up = async (context) => {
5
- const { runner_config } = context;
6
- const config = await utils.loadConfig(runner_config);
7
- const db = storage.createPowerSyncMongo(config.storage);
8
- try {
9
- await db.custom_write_checkpoints.createIndex({
10
- user_id: 1,
11
- sync_rules_id: 1
12
- }, { name: INDEX_NAME, unique: true });
13
- }
14
- finally {
15
- await db.client.close();
16
- }
17
- };
18
- export const down = async (context) => {
19
- const { runner_config } = context;
20
- const config = await utils.loadConfig(runner_config);
21
- const db = storage.createPowerSyncMongo(config.storage);
22
- try {
23
- if (await db.custom_write_checkpoints.indexExists(INDEX_NAME)) {
24
- await db.custom_write_checkpoints.dropIndex(INDEX_NAME);
25
- }
26
- }
27
- finally {
28
- await db.client.close();
29
- }
30
- };
31
- //# sourceMappingURL=1727099539247-custom-write-checkpoint-index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"1727099539247-custom-write-checkpoint-index.js","sourceRoot":"","sources":["../../../../src/migrations/db/migrations/1727099539247-custom-write-checkpoint-index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,mCAAmC,CAAC;AAC7D,OAAO,KAAK,KAAK,MAAM,6BAA6B,CAAC;AAErD,MAAM,UAAU,GAAG,uBAAuB,CAAC;AAE3C,MAAM,CAAC,MAAM,EAAE,GAAG,KAAK,EAAE,OAA+B,EAAE,EAAE;IAC1D,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC;IAClC,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;IACrD,MAAM,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAExD,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,wBAAwB,CAAC,WAAW,CAC3C;YACE,OAAO,EAAE,CAAC;YACV,aAAa,EAAE,CAAC;SACjB,EACD,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,CACnC,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,MAAM,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,IAAI,GAAG,KAAK,EAAE,OAA+B,EAAE,EAAE;IAC5D,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC;IAClC,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;IAErD,MAAM,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAExD,IAAI,CAAC;QACH,IAAI,MAAM,EAAE,CAAC,wBAAwB,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9D,MAAM,EAAE,CAAC,wBAAwB,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;YAAS,CAAC;QACT,MAAM,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC;AACH,CAAC,CAAC"}
@@ -1,18 +0,0 @@
1
- export type Migration = {
2
- name: string;
3
- up: () => Promise<void>;
4
- down: () => Promise<void>;
5
- };
6
- export declare enum Direction {
7
- Up = "up",
8
- Down = "down"
9
- }
10
- export type ExecutedMigration = {
11
- name: string;
12
- direction: Direction;
13
- timestamp: Date;
14
- };
15
- export type MigrationState = {
16
- last_run: string;
17
- log: ExecutedMigration[];
18
- };
@@ -1,6 +0,0 @@
1
- export var Direction;
2
- (function (Direction) {
3
- Direction["Up"] = "up";
4
- Direction["Down"] = "down";
5
- })(Direction || (Direction = {}));
6
- //# sourceMappingURL=definitions.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/migrations/definitions.ts"],"names":[],"mappings":"AAMA,MAAM,CAAN,IAAY,SAGX;AAHD,WAAY,SAAS;IACnB,sBAAS,CAAA;IACT,0BAAa,CAAA;AACf,CAAC,EAHW,SAAS,KAAT,SAAS,QAGpB"}
@@ -1,16 +0,0 @@
1
- import * as defs from './definitions.js';
2
- import { MigrationStore } from './store/migration-store.js';
3
- type ExecuteParams = {
4
- migrations: defs.Migration[];
5
- state?: defs.MigrationState;
6
- direction: defs.Direction;
7
- count?: number;
8
- };
9
- export declare function execute(params: ExecuteParams): AsyncGenerator<defs.ExecutedMigration>;
10
- type WriteLogsParams = {
11
- store: MigrationStore;
12
- state?: defs.MigrationState;
13
- log_stream: Iterable<defs.ExecutedMigration> | AsyncIterable<defs.ExecutedMigration>;
14
- };
15
- export declare const writeLogsToStore: (params: WriteLogsParams) => Promise<void>;
16
- export {};
@@ -1,64 +0,0 @@
1
- import { logger } from '@powersync/lib-services-framework';
2
- import * as defs from './definitions.js';
3
- export async function* execute(params) {
4
- let migrations = [...params.migrations];
5
- if (params.direction === defs.Direction.Down) {
6
- migrations = migrations.reverse();
7
- }
8
- let index = 0;
9
- if (params.state) {
10
- // Find the index of the last run
11
- index = migrations.findIndex((migration) => {
12
- return migration.name === params.state.last_run;
13
- });
14
- if (index === -1) {
15
- throw new Error(`The last run migration ${params.state?.last_run} was not found in the given set of migrations`);
16
- }
17
- // If we are migrating down then we want to include the last run migration, otherwise we want to start at the next one
18
- if (params.direction === defs.Direction.Up) {
19
- index += 1;
20
- }
21
- }
22
- migrations = migrations.slice(index);
23
- let i = 0;
24
- for (const migration of migrations) {
25
- if (params.count && params.count === i) {
26
- return;
27
- }
28
- logger.info(`Executing ${migration.name} (${params.direction})`);
29
- try {
30
- switch (params.direction) {
31
- case defs.Direction.Up: {
32
- await migration.up();
33
- break;
34
- }
35
- case defs.Direction.Down: {
36
- await migration.down();
37
- break;
38
- }
39
- }
40
- logger.debug(`Success`);
41
- }
42
- catch (err) {
43
- logger.error(`Failed`, err);
44
- process.exit(1);
45
- }
46
- yield {
47
- name: migration.name,
48
- direction: params.direction,
49
- timestamp: new Date()
50
- };
51
- i++;
52
- }
53
- }
54
- export const writeLogsToStore = async (params) => {
55
- const log = [...(params.state?.log || [])];
56
- for await (const migration of params.log_stream) {
57
- log.push(migration);
58
- await params.store.save({
59
- last_run: migration.name,
60
- log: log
61
- });
62
- }
63
- };
64
- //# sourceMappingURL=executor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"executor.js","sourceRoot":"","sources":["../../src/migrations/executor.ts"],"names":[],"mappings":"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"}
@@ -1,18 +0,0 @@
1
- import * as util from '../util/util-index.js';
2
- import { Direction } from './definitions.js';
3
- export type MigrationOptions = {
4
- direction: Direction;
5
- runner_config: util.RunnerConfig;
6
- };
7
- export type AutomaticMigrationParams = {
8
- config: util.ResolvedPowerSyncConfig;
9
- runner_config: util.RunnerConfig;
10
- };
11
- /**
12
- * Runs migration scripts exclusively using Mongo locks
13
- */
14
- export declare const migrate: (options: MigrationOptions) => Promise<void>;
15
- /**
16
- * Ensures automatic migrations are executed
17
- */
18
- export declare const ensureAutomaticMigrations: (params: AutomaticMigrationParams) => Promise<void>;