@powersync/service-core 0.0.0-dev-20240708103353 → 0.0.0-dev-20240709124106
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.
- package/CHANGELOG.md +10 -2
- package/dist/entry/commands/migrate-action.js +12 -4
- package/dist/entry/commands/migrate-action.js.map +1 -1
- package/dist/migrations/migrations.js +8 -0
- package/dist/migrations/migrations.js.map +1 -1
- package/package.json +6 -6
- package/src/entry/commands/migrate-action.ts +12 -4
- package/src/migrations/migrations.ts +8 -0
- package/tsconfig.tsbuildinfo +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,14 +1,22 @@
|
|
|
1
1
|
# @powersync/service-core
|
|
2
2
|
|
|
3
|
-
## 0.0.0-dev-
|
|
3
|
+
## 0.0.0-dev-20240709124106
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 0a250e3: Support `request.parameters()`, `request.jwt()` and `request.user_id()`.
|
|
8
|
+
Warn on potentially dangerous queries using request parameters.
|
|
4
9
|
|
|
5
10
|
### Patch Changes
|
|
6
11
|
|
|
7
12
|
- 299becf: Support expressions on request parameters in parameter queries.
|
|
13
|
+
- 2a0d2de: Add logging and hard exit to migration script
|
|
8
14
|
- 0c2e2f5: Fix schema validation for parameter queries.
|
|
15
|
+
- Updated dependencies [0a250e3]
|
|
9
16
|
- Updated dependencies [299becf]
|
|
10
17
|
- Updated dependencies [0c2e2f5]
|
|
11
|
-
|
|
18
|
+
- Updated dependencies [0a250e3]
|
|
19
|
+
- @powersync/service-sync-rules@0.0.0-dev-20240709124106
|
|
12
20
|
|
|
13
21
|
## 0.3.0
|
|
14
22
|
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { extractRunnerOptions, wrapConfigCommand } from './config-command.js';
|
|
2
2
|
import { migrate } from '../../migrations/migrations.js';
|
|
3
|
+
import { logger } from '@powersync/lib-services-framework';
|
|
3
4
|
const COMMAND_NAME = 'migrate';
|
|
4
5
|
export function registerMigrationAction(program) {
|
|
5
6
|
const migrationCommand = program.command(COMMAND_NAME);
|
|
@@ -9,10 +10,17 @@ export function registerMigrationAction(program) {
|
|
|
9
10
|
.argument('<direction>', 'Migration direction. `up` or `down`')
|
|
10
11
|
.action(async (direction, options) => {
|
|
11
12
|
const runnerConfig = extractRunnerOptions(options);
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
try {
|
|
14
|
+
await migrate({
|
|
15
|
+
direction,
|
|
16
|
+
runner_config: runnerConfig
|
|
17
|
+
});
|
|
18
|
+
process.exit(0);
|
|
19
|
+
}
|
|
20
|
+
catch (e) {
|
|
21
|
+
logger.error(`Migration failure`, e);
|
|
22
|
+
process.exit(1);
|
|
23
|
+
}
|
|
16
24
|
});
|
|
17
25
|
}
|
|
18
26
|
//# sourceMappingURL=migrate-action.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrate-action.js","sourceRoot":"","sources":["../../../src/entry/commands/migrate-action.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"migrate-action.js","sourceRoot":"","sources":["../../../src/entry/commands/migrate-action.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAEzD,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAE3D,MAAM,YAAY,GAAG,SAAS,CAAC;AAE/B,MAAM,UAAU,uBAAuB,CAAC,OAAgB;IACtD,MAAM,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAEvD,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;IAEpC,OAAO,gBAAgB;SACpB,WAAW,CAAC,gBAAgB,CAAC;SAC7B,QAAQ,CAAC,aAAa,EAAE,qCAAqC,CAAC;SAC9D,MAAM,CAAC,KAAK,EAAE,SAAoB,EAAE,OAAO,EAAE,EAAE;QAC9C,MAAM,YAAY,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAEnD,IAAI;YACF,MAAM,OAAO,CAAC;gBACZ,SAAS;gBACT,aAAa,EAAE,YAAY;aAC5B,CAAC,CAAC;YAEH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACjB;QAAC,OAAO,CAAC,EAAE;YACV,MAAM,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC;YACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACjB;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -6,6 +6,7 @@ import * as util from '../util/util-index.js';
|
|
|
6
6
|
import * as locks from '../locks/locks-index.js';
|
|
7
7
|
import { createMongoMigrationStore } from './store/migration-store.js';
|
|
8
8
|
import { execute, writeLogsToStore } from './executor.js';
|
|
9
|
+
import { logger } from '@powersync/lib-services-framework';
|
|
9
10
|
const DEFAULT_MONGO_LOCK_COLLECTION = 'locks';
|
|
10
11
|
const MONGO_LOCK_PROCESS = 'migrations';
|
|
11
12
|
const __filename = fileURLToPath(import.meta.url);
|
|
@@ -44,6 +45,7 @@ export const migrate = async (options) => {
|
|
|
44
45
|
const config = await util.loadConfig(runner_config);
|
|
45
46
|
const { storage } = config;
|
|
46
47
|
const client = db.mongo.createMongoClient(storage);
|
|
48
|
+
logger.info('Connecting to MongoDB');
|
|
47
49
|
await client.connect();
|
|
48
50
|
const clientDB = client.db(storage.database);
|
|
49
51
|
const collection = clientDB.collection(DEFAULT_MONGO_LOCK_COLLECTION);
|
|
@@ -51,6 +53,7 @@ export const migrate = async (options) => {
|
|
|
51
53
|
name: MONGO_LOCK_PROCESS
|
|
52
54
|
});
|
|
53
55
|
// Only one process should execute this at a time.
|
|
56
|
+
logger.info('Acquiring lock');
|
|
54
57
|
const lockId = await manager.acquire();
|
|
55
58
|
if (!lockId) {
|
|
56
59
|
throw new Error('Could not acquire lock_id');
|
|
@@ -66,10 +69,12 @@ export const migrate = async (options) => {
|
|
|
66
69
|
// For the case where the migration is terminated
|
|
67
70
|
process.addListener('beforeExit', releaseLock);
|
|
68
71
|
try {
|
|
72
|
+
logger.info('Loading migrations');
|
|
69
73
|
const migrations = await loadMigrations(MIGRATIONS_DIR, runner_config);
|
|
70
74
|
// Use the provided config to connect to Mongo
|
|
71
75
|
const store = createMongoMigrationStore(clientDB);
|
|
72
76
|
const state = await store.load();
|
|
77
|
+
logger.info('Running migrations');
|
|
73
78
|
const logStream = execute({
|
|
74
79
|
direction: direction,
|
|
75
80
|
migrations,
|
|
@@ -82,9 +87,12 @@ export const migrate = async (options) => {
|
|
|
82
87
|
});
|
|
83
88
|
}
|
|
84
89
|
finally {
|
|
90
|
+
logger.info('Releasing lock');
|
|
85
91
|
await releaseLock();
|
|
92
|
+
logger.info('Closing database');
|
|
86
93
|
await client.close(true);
|
|
87
94
|
process.removeListener('beforeExit', releaseLock);
|
|
95
|
+
logger.info('Done with migrations');
|
|
88
96
|
}
|
|
89
97
|
};
|
|
90
98
|
//# sourceMappingURL=migrations.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../src/migrations/migrations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,OAAO,KAAK,EAAE,MAAM,mBAAmB,CAAC;AACxC,OAAO,KAAK,IAAI,MAAM,uBAAuB,CAAC;AAC9C,OAAO,KAAK,KAAK,MAAM,yBAAyB,CAAC;AAEjD,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../src/migrations/migrations.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
7
7
|
},
|
|
8
|
-
"version": "0.0.0-dev-
|
|
8
|
+
"version": "0.0.0-dev-20240709124106",
|
|
9
9
|
"main": "dist/index.js",
|
|
10
10
|
"license": "FSL-1.1-Apache-2.0",
|
|
11
11
|
"type": "module",
|
|
@@ -33,12 +33,12 @@
|
|
|
33
33
|
"uuid": "^9.0.1",
|
|
34
34
|
"winston": "^3.13.0",
|
|
35
35
|
"yaml": "^2.3.2",
|
|
36
|
-
"@powersync/service-jsonbig": "0.17.10",
|
|
37
|
-
"@powersync/service-rsocket-router": "0.0.8",
|
|
38
|
-
"@powersync/service-jpgwire": "0.17.13",
|
|
39
36
|
"@powersync/lib-services-framework": "0.1.0",
|
|
40
|
-
"@powersync/service-
|
|
41
|
-
"@powersync/service-
|
|
37
|
+
"@powersync/service-jpgwire": "0.17.13",
|
|
38
|
+
"@powersync/service-sync-rules": "0.0.0-dev-20240709124106",
|
|
39
|
+
"@powersync/service-types": "0.1.0",
|
|
40
|
+
"@powersync/service-rsocket-router": "0.0.8",
|
|
41
|
+
"@powersync/service-jsonbig": "0.17.10"
|
|
42
42
|
},
|
|
43
43
|
"devDependencies": {
|
|
44
44
|
"@types/async": "^3.2.24",
|
|
@@ -3,6 +3,7 @@ import { Command } from 'commander';
|
|
|
3
3
|
import { extractRunnerOptions, wrapConfigCommand } from './config-command.js';
|
|
4
4
|
import { migrate } from '../../migrations/migrations.js';
|
|
5
5
|
import { Direction } from '../../migrations/definitions.js';
|
|
6
|
+
import { logger } from '@powersync/lib-services-framework';
|
|
6
7
|
|
|
7
8
|
const COMMAND_NAME = 'migrate';
|
|
8
9
|
|
|
@@ -17,9 +18,16 @@ export function registerMigrationAction(program: Command) {
|
|
|
17
18
|
.action(async (direction: Direction, options) => {
|
|
18
19
|
const runnerConfig = extractRunnerOptions(options);
|
|
19
20
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
21
|
+
try {
|
|
22
|
+
await migrate({
|
|
23
|
+
direction,
|
|
24
|
+
runner_config: runnerConfig
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
process.exit(0);
|
|
28
|
+
} catch (e) {
|
|
29
|
+
logger.error(`Migration failure`, e);
|
|
30
|
+
process.exit(1);
|
|
31
|
+
}
|
|
24
32
|
});
|
|
25
33
|
}
|
|
@@ -8,6 +8,7 @@ import * as locks from '../locks/locks-index.js';
|
|
|
8
8
|
import { Direction } from './definitions.js';
|
|
9
9
|
import { createMongoMigrationStore } from './store/migration-store.js';
|
|
10
10
|
import { execute, writeLogsToStore } from './executor.js';
|
|
11
|
+
import { logger } from '@powersync/lib-services-framework';
|
|
11
12
|
|
|
12
13
|
const DEFAULT_MONGO_LOCK_COLLECTION = 'locks';
|
|
13
14
|
const MONGO_LOCK_PROCESS = 'migrations';
|
|
@@ -63,6 +64,7 @@ export const migrate = async (options: MigrationOptions) => {
|
|
|
63
64
|
const { storage } = config;
|
|
64
65
|
|
|
65
66
|
const client = db.mongo.createMongoClient(storage);
|
|
67
|
+
logger.info('Connecting to MongoDB');
|
|
66
68
|
await client.connect();
|
|
67
69
|
|
|
68
70
|
const clientDB = client.db(storage.database);
|
|
@@ -73,6 +75,7 @@ export const migrate = async (options: MigrationOptions) => {
|
|
|
73
75
|
});
|
|
74
76
|
|
|
75
77
|
// Only one process should execute this at a time.
|
|
78
|
+
logger.info('Acquiring lock');
|
|
76
79
|
const lockId = await manager.acquire();
|
|
77
80
|
|
|
78
81
|
if (!lockId) {
|
|
@@ -92,6 +95,7 @@ export const migrate = async (options: MigrationOptions) => {
|
|
|
92
95
|
process.addListener('beforeExit', releaseLock);
|
|
93
96
|
|
|
94
97
|
try {
|
|
98
|
+
logger.info('Loading migrations');
|
|
95
99
|
const migrations = await loadMigrations(MIGRATIONS_DIR, runner_config);
|
|
96
100
|
|
|
97
101
|
// Use the provided config to connect to Mongo
|
|
@@ -99,6 +103,7 @@ export const migrate = async (options: MigrationOptions) => {
|
|
|
99
103
|
|
|
100
104
|
const state = await store.load();
|
|
101
105
|
|
|
106
|
+
logger.info('Running migrations');
|
|
102
107
|
const logStream = execute({
|
|
103
108
|
direction: direction,
|
|
104
109
|
migrations,
|
|
@@ -111,8 +116,11 @@ export const migrate = async (options: MigrationOptions) => {
|
|
|
111
116
|
state
|
|
112
117
|
});
|
|
113
118
|
} finally {
|
|
119
|
+
logger.info('Releasing lock');
|
|
114
120
|
await releaseLock();
|
|
121
|
+
logger.info('Closing database');
|
|
115
122
|
await client.close(true);
|
|
116
123
|
process.removeListener('beforeExit', releaseLock);
|
|
124
|
+
logger.info('Done with migrations');
|
|
117
125
|
}
|
|
118
126
|
};
|