@syncular/migrations 0.0.6-244 → 0.0.6-246
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/README.md +42 -11
- package/dist/checksum.d.ts +9 -0
- package/dist/checksum.d.ts.map +1 -0
- package/dist/checksum.js +142 -0
- package/dist/checksum.js.map +1 -0
- package/dist/define.d.ts +22 -18
- package/dist/define.d.ts.map +1 -1
- package/dist/define.js +39 -166
- package/dist/define.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/runner.d.ts +8 -2
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +50 -15
- package/dist/runner.js.map +1 -1
- package/dist/tracking.d.ts.map +1 -1
- package/dist/tracking.js +32 -3
- package/dist/tracking.js.map +1 -1
- package/dist/types.d.ts +15 -15
- package/dist/types.d.ts.map +1 -1
- package/package.json +3 -2
- package/src/checksum.ts +190 -0
- package/src/define.ts +49 -201
- package/src/index.ts +1 -0
- package/src/runner.ts +94 -20
- package/src/tracking.ts +36 -3
- package/src/types.ts +21 -16
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @syncular/migrations
|
|
2
2
|
|
|
3
|
-
Versioned migration utilities for Syncular apps. Provides `defineMigrations()` and `runMigrations()` with migration tracking and checksum validation (plus an optional reset strategy for client DBs).
|
|
3
|
+
Versioned migration utilities for Syncular apps. Provides `defineMigrations()` and `runMigrations()` with migration tracking and optional generated checksum validation (plus an optional reset strategy for client DBs).
|
|
4
4
|
|
|
5
5
|
## Install
|
|
6
6
|
|
|
@@ -13,30 +13,61 @@ npm install @syncular/migrations
|
|
|
13
13
|
```ts
|
|
14
14
|
import {
|
|
15
15
|
createMigrationTrackingTableName,
|
|
16
|
-
defineMigrations,
|
|
17
16
|
runMigrations,
|
|
18
17
|
} from '@syncular/migrations';
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
v1: async (db) => {
|
|
22
|
-
await db.schema.createTable('tasks').addColumn('id', 'text').execute();
|
|
23
|
-
},
|
|
24
|
-
v2: async (db) => {
|
|
25
|
-
await db.schema.alterTable('tasks').addColumn('done', 'integer').execute();
|
|
26
|
-
},
|
|
27
|
-
});
|
|
18
|
+
import { migrations } from './migrations';
|
|
19
|
+
import { migrationChecksums } from './migrations.checksums.generated';
|
|
28
20
|
|
|
29
21
|
await runMigrations({
|
|
30
22
|
db,
|
|
31
23
|
migrations,
|
|
24
|
+
checksums: migrationChecksums,
|
|
32
25
|
trackingTable: createMigrationTrackingTableName(['my_app', 'client']),
|
|
33
26
|
});
|
|
34
27
|
```
|
|
35
28
|
|
|
29
|
+
Define the migrations in a separate source module, for example:
|
|
30
|
+
|
|
31
|
+
```ts
|
|
32
|
+
// migrations.ts
|
|
33
|
+
import { defineMigrations } from '@syncular/migrations';
|
|
34
|
+
|
|
35
|
+
export const migrations = defineMigrations({
|
|
36
|
+
v1: {
|
|
37
|
+
up: async (db) => {
|
|
38
|
+
await db.schema.createTable('tasks').addColumn('id', 'text').execute();
|
|
39
|
+
},
|
|
40
|
+
down: async (db) => {
|
|
41
|
+
await db.schema.dropTable('tasks').ifExists().execute();
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
v2: {
|
|
45
|
+
up: async (db) => {
|
|
46
|
+
await db.schema
|
|
47
|
+
.alterTable('tasks')
|
|
48
|
+
.addColumn('done', 'integer')
|
|
49
|
+
.execute();
|
|
50
|
+
},
|
|
51
|
+
down: async (db) => {
|
|
52
|
+
await db.schema.alterTable('tasks').dropColumn('done').execute();
|
|
53
|
+
},
|
|
54
|
+
},
|
|
55
|
+
});
|
|
56
|
+
```
|
|
57
|
+
|
|
36
58
|
Use `createMigrationTrackingTableName(...)` whenever you want a custom table.
|
|
37
59
|
It keeps names lowercase, predictable, and consistently suffixed with
|
|
38
60
|
`migration_state`.
|
|
39
61
|
|
|
62
|
+
Use `checksum: 'deterministic'` for migrations that have a generated checksum
|
|
63
|
+
manifest. Generate that manifest with `@syncular/typegen`; `runMigrations`
|
|
64
|
+
compares the stored checksum against the generated SQL-trace checksum at
|
|
65
|
+
runtime.
|
|
66
|
+
|
|
67
|
+
Use `checksum: 'disabled'` for migrations that cannot be replayed safely during
|
|
68
|
+
build-time checksum generation. Disabled migrations still track
|
|
69
|
+
version/application state, but they skip checksum creation and mismatch checks.
|
|
70
|
+
|
|
40
71
|
## Documentation
|
|
41
72
|
|
|
42
73
|
- Schema migrations: https://syncular.dev/docs/build/migrations
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { MigrationChecksumAlgorithm, MigrationChecksums, ParsedMigration } from './types';
|
|
2
|
+
export declare const DISABLED_MIGRATION_CHECKSUM = "__syncular_checksum_disabled__";
|
|
3
|
+
export declare const LEGACY_SOURCE_MIGRATION_CHECKSUM_ALGORITHM = "legacy_source_v1";
|
|
4
|
+
export declare const SQL_TRACE_MIGRATION_CHECKSUM_ALGORITHM = "sql_trace_v1";
|
|
5
|
+
export declare const DISABLED_MIGRATION_CHECKSUM_ALGORITHM = "disabled";
|
|
6
|
+
export declare function getLegacyMigrationChecksum<DB>(migration: ParsedMigration<DB>): string;
|
|
7
|
+
export declare function getStoredDeterministicChecksum<DB>(migration: ParsedMigration<DB>, checksums: MigrationChecksums | undefined): string;
|
|
8
|
+
export declare function getMigrationChecksumAlgorithm<DB>(migration: ParsedMigration<DB>, checksums: MigrationChecksums | undefined): MigrationChecksumAlgorithm;
|
|
9
|
+
//# sourceMappingURL=checksum.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checksum.d.ts","sourceRoot":"","sources":["../src/checksum.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,0BAA0B,EAC1B,kBAAkB,EAClB,eAAe,EAChB,MAAM,SAAS,CAAC;AAEjB,eAAO,MAAM,2BAA2B,mCAAmC,CAAC;AAC5E,eAAO,MAAM,0CAA0C,qBAAqB,CAAC;AAC7E,eAAO,MAAM,sCAAsC,iBAAiB,CAAC;AACrE,eAAO,MAAM,qCAAqC,aAAa,CAAC;AAmIhE,wBAAgB,0BAA0B,CAAC,EAAE,EAC3C,SAAS,EAAE,eAAe,CAAC,EAAE,CAAC,GAC7B,MAAM,CAER;AAED,wBAAgB,8BAA8B,CAAC,EAAE,EAC/C,SAAS,EAAE,eAAe,CAAC,EAAE,CAAC,EAC9B,SAAS,EAAE,kBAAkB,GAAG,SAAS,GACxC,MAAM,CAsBR;AAED,wBAAgB,6BAA6B,CAAC,EAAE,EAC9C,SAAS,EAAE,eAAe,CAAC,EAAE,CAAC,EAC9B,SAAS,EAAE,kBAAkB,GAAG,SAAS,GACxC,0BAA0B,CAa5B"}
|
package/dist/checksum.js
ADDED
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
export const DISABLED_MIGRATION_CHECKSUM = '__syncular_checksum_disabled__';
|
|
2
|
+
export const LEGACY_SOURCE_MIGRATION_CHECKSUM_ALGORITHM = 'legacy_source_v1';
|
|
3
|
+
export const SQL_TRACE_MIGRATION_CHECKSUM_ALGORITHM = 'sql_trace_v1';
|
|
4
|
+
export const DISABLED_MIGRATION_CHECKSUM_ALGORITHM = 'disabled';
|
|
5
|
+
function stripCommentsPreservingStrings(source) {
|
|
6
|
+
let out = '';
|
|
7
|
+
let index = 0;
|
|
8
|
+
let mode = 'code';
|
|
9
|
+
while (index < source.length) {
|
|
10
|
+
const char = source[index];
|
|
11
|
+
const next = source[index + 1];
|
|
12
|
+
if (mode === 'lineComment') {
|
|
13
|
+
if (char === '\n') {
|
|
14
|
+
out += '\n';
|
|
15
|
+
mode = 'code';
|
|
16
|
+
}
|
|
17
|
+
index += 1;
|
|
18
|
+
continue;
|
|
19
|
+
}
|
|
20
|
+
if (mode === 'blockComment') {
|
|
21
|
+
if (char === '*' && next === '/') {
|
|
22
|
+
index += 2;
|
|
23
|
+
mode = 'code';
|
|
24
|
+
continue;
|
|
25
|
+
}
|
|
26
|
+
if (char === '\n') {
|
|
27
|
+
out += '\n';
|
|
28
|
+
}
|
|
29
|
+
index += 1;
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
if (mode === 'singleQuote') {
|
|
33
|
+
out += char;
|
|
34
|
+
if (char === '\\' && next !== undefined) {
|
|
35
|
+
out += next;
|
|
36
|
+
index += 2;
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
if (char === "'") {
|
|
40
|
+
mode = 'code';
|
|
41
|
+
}
|
|
42
|
+
index += 1;
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
if (mode === 'doubleQuote') {
|
|
46
|
+
out += char;
|
|
47
|
+
if (char === '\\' && next !== undefined) {
|
|
48
|
+
out += next;
|
|
49
|
+
index += 2;
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
if (char === '"') {
|
|
53
|
+
mode = 'code';
|
|
54
|
+
}
|
|
55
|
+
index += 1;
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
if (mode === 'template') {
|
|
59
|
+
out += char;
|
|
60
|
+
if (char === '\\' && next !== undefined) {
|
|
61
|
+
out += next;
|
|
62
|
+
index += 2;
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
if (char === '`') {
|
|
66
|
+
mode = 'code';
|
|
67
|
+
}
|
|
68
|
+
index += 1;
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
if (char === '/' && next === '/') {
|
|
72
|
+
mode = 'lineComment';
|
|
73
|
+
index += 2;
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
if (char === '/' && next === '*') {
|
|
77
|
+
mode = 'blockComment';
|
|
78
|
+
index += 2;
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
if (char === "'") {
|
|
82
|
+
mode = 'singleQuote';
|
|
83
|
+
out += char;
|
|
84
|
+
index += 1;
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
if (char === '"') {
|
|
88
|
+
mode = 'doubleQuote';
|
|
89
|
+
out += char;
|
|
90
|
+
index += 1;
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
if (char === '`') {
|
|
94
|
+
mode = 'template';
|
|
95
|
+
out += char;
|
|
96
|
+
index += 1;
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
out += char;
|
|
100
|
+
index += 1;
|
|
101
|
+
}
|
|
102
|
+
return out;
|
|
103
|
+
}
|
|
104
|
+
function hashString(value) {
|
|
105
|
+
let hash = 0;
|
|
106
|
+
for (let index = 0; index < value.length; index += 1) {
|
|
107
|
+
hash = (hash * 31 + value.charCodeAt(index)) >>> 0;
|
|
108
|
+
}
|
|
109
|
+
return hash.toString(16).padStart(8, '0');
|
|
110
|
+
}
|
|
111
|
+
function normalizeLegacySource(source) {
|
|
112
|
+
return stripCommentsPreservingStrings(source).replace(/\s+/g, ' ').trim();
|
|
113
|
+
}
|
|
114
|
+
export function getLegacyMigrationChecksum(migration) {
|
|
115
|
+
return hashString(normalizeLegacySource(migration.up.toString()));
|
|
116
|
+
}
|
|
117
|
+
export function getStoredDeterministicChecksum(migration, checksums) {
|
|
118
|
+
if (migration.checksum === 'disabled') {
|
|
119
|
+
return DISABLED_MIGRATION_CHECKSUM;
|
|
120
|
+
}
|
|
121
|
+
if (!checksums) {
|
|
122
|
+
throw new Error(`Migration v${migration.version} (${migration.name}) requires generated checksums. ` +
|
|
123
|
+
'Generate a checksum manifest with @syncular/typegen and pass it to runMigrations({ checksums }).');
|
|
124
|
+
}
|
|
125
|
+
const checksum = checksums[String(migration.version)];
|
|
126
|
+
if (!checksum) {
|
|
127
|
+
throw new Error(`Missing generated checksum for migration v${migration.version} (${migration.name}). ` +
|
|
128
|
+
'Regenerate the checksum manifest before running migrations.');
|
|
129
|
+
}
|
|
130
|
+
return checksum;
|
|
131
|
+
}
|
|
132
|
+
export function getMigrationChecksumAlgorithm(migration, checksums) {
|
|
133
|
+
if (migration.checksum === 'disabled') {
|
|
134
|
+
return DISABLED_MIGRATION_CHECKSUM_ALGORITHM;
|
|
135
|
+
}
|
|
136
|
+
if (!checksums) {
|
|
137
|
+
throw new Error(`Migration v${migration.version} (${migration.name}) requires generated checksums. ` +
|
|
138
|
+
'Generate a checksum manifest with @syncular/typegen and pass it to runMigrations({ checksums }).');
|
|
139
|
+
}
|
|
140
|
+
return SQL_TRACE_MIGRATION_CHECKSUM_ALGORITHM;
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=checksum.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checksum.js","sourceRoot":"","sources":["../src/checksum.ts"],"names":[],"mappings":"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"}
|
package/dist/define.d.ts
CHANGED
|
@@ -1,34 +1,38 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @syncular/migrations - Migration definition
|
|
3
3
|
*/
|
|
4
|
-
import type { DefinedMigrations, MigrationRecord
|
|
4
|
+
import type { DefinedMigrations, MigrationRecord } from './types';
|
|
5
5
|
/**
|
|
6
6
|
* Define versioned migrations with automatic version parsing and sorting.
|
|
7
7
|
*
|
|
8
8
|
* @example
|
|
9
9
|
* ```typescript
|
|
10
10
|
* export const migrations = defineMigrations({
|
|
11
|
-
* v1:
|
|
12
|
-
*
|
|
13
|
-
* .
|
|
14
|
-
*
|
|
15
|
-
*
|
|
11
|
+
* v1: {
|
|
12
|
+
* up: async (db) => {
|
|
13
|
+
* await db.schema.createTable('tasks')
|
|
14
|
+
* .addColumn('id', 'text', col => col.primaryKey())
|
|
15
|
+
* .addColumn('title', 'text', col => col.notNull())
|
|
16
|
+
* .execute();
|
|
17
|
+
* },
|
|
18
|
+
* down: async (db) => {
|
|
19
|
+
* await db.schema.dropTable('tasks').ifExists().execute();
|
|
20
|
+
* },
|
|
16
21
|
* },
|
|
17
|
-
* v2:
|
|
18
|
-
*
|
|
19
|
-
* .
|
|
20
|
-
*
|
|
22
|
+
* v2: {
|
|
23
|
+
* up: async (db) => {
|
|
24
|
+
* await db.schema.alterTable('tasks')
|
|
25
|
+
* .addColumn('priority', 'integer', col => col.defaultTo(0))
|
|
26
|
+
* .execute();
|
|
27
|
+
* },
|
|
28
|
+
* down: async (db) => {
|
|
29
|
+
* await db.schema.alterTable('tasks')
|
|
30
|
+
* .dropColumn('priority')
|
|
31
|
+
* .execute();
|
|
32
|
+
* },
|
|
21
33
|
* },
|
|
22
34
|
* });
|
|
23
35
|
* ```
|
|
24
36
|
*/
|
|
25
37
|
export declare function defineMigrations<DB = unknown, T extends MigrationRecord<DB> = MigrationRecord<DB>>(versionedMigrations: T): DefinedMigrations<DB>;
|
|
26
|
-
/**
|
|
27
|
-
* Get the checksum for a migration.
|
|
28
|
-
*/
|
|
29
|
-
export declare function getMigrationChecksum<DB>(migration: ParsedMigration<DB>): string;
|
|
30
|
-
/**
|
|
31
|
-
* Get the accepted checksums for a migration, including the current checksum.
|
|
32
|
-
*/
|
|
33
|
-
export declare function getCompatibleMigrationChecksums<DB>(migration: ParsedMigration<DB>): string[];
|
|
34
38
|
//# sourceMappingURL=define.d.ts.map
|
package/dist/define.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"define.d.ts","sourceRoot":"","sources":["../src/define.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,iBAAiB,EAGjB,eAAe,
|
|
1
|
+
{"version":3,"file":"define.d.ts","sourceRoot":"","sources":["../src/define.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,iBAAiB,EAGjB,eAAe,EAEhB,MAAM,SAAS,CAAC;AAmCjB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,gBAAgB,CAC9B,EAAE,GAAG,OAAO,EACZ,CAAC,SAAS,eAAe,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,EAAE,CAAC,EACnD,mBAAmB,EAAE,CAAC,GAAG,iBAAiB,CAAC,EAAE,CAAC,CA4D/C"}
|
package/dist/define.js
CHANGED
|
@@ -12,146 +12,46 @@ function parseVersionKey(key) {
|
|
|
12
12
|
const version = Number.parseInt(match[1], 10);
|
|
13
13
|
return Number.isNaN(version) ? null : version;
|
|
14
14
|
}
|
|
15
|
-
/**
|
|
16
|
-
* Normalize a function source string for checksum comparison.
|
|
17
|
-
* Strips comments and collapses whitespace so that formatting-only
|
|
18
|
-
* changes don't break checksums.
|
|
19
|
-
*/
|
|
20
|
-
function stripCommentsPreservingStrings(source) {
|
|
21
|
-
let out = '';
|
|
22
|
-
let i = 0;
|
|
23
|
-
let mode = 'code';
|
|
24
|
-
while (i < source.length) {
|
|
25
|
-
const char = source[i];
|
|
26
|
-
const next = source[i + 1];
|
|
27
|
-
if (mode === 'lineComment') {
|
|
28
|
-
if (char === '\n') {
|
|
29
|
-
out += '\n';
|
|
30
|
-
mode = 'code';
|
|
31
|
-
}
|
|
32
|
-
i += 1;
|
|
33
|
-
continue;
|
|
34
|
-
}
|
|
35
|
-
if (mode === 'blockComment') {
|
|
36
|
-
if (char === '*' && next === '/') {
|
|
37
|
-
i += 2;
|
|
38
|
-
mode = 'code';
|
|
39
|
-
continue;
|
|
40
|
-
}
|
|
41
|
-
if (char === '\n') {
|
|
42
|
-
out += '\n';
|
|
43
|
-
}
|
|
44
|
-
i += 1;
|
|
45
|
-
continue;
|
|
46
|
-
}
|
|
47
|
-
if (mode === 'singleQuote') {
|
|
48
|
-
out += char;
|
|
49
|
-
if (char === '\\' && next !== undefined) {
|
|
50
|
-
out += next;
|
|
51
|
-
i += 2;
|
|
52
|
-
continue;
|
|
53
|
-
}
|
|
54
|
-
if (char === "'") {
|
|
55
|
-
mode = 'code';
|
|
56
|
-
}
|
|
57
|
-
i += 1;
|
|
58
|
-
continue;
|
|
59
|
-
}
|
|
60
|
-
if (mode === 'doubleQuote') {
|
|
61
|
-
out += char;
|
|
62
|
-
if (char === '\\' && next !== undefined) {
|
|
63
|
-
out += next;
|
|
64
|
-
i += 2;
|
|
65
|
-
continue;
|
|
66
|
-
}
|
|
67
|
-
if (char === '"') {
|
|
68
|
-
mode = 'code';
|
|
69
|
-
}
|
|
70
|
-
i += 1;
|
|
71
|
-
continue;
|
|
72
|
-
}
|
|
73
|
-
if (mode === 'template') {
|
|
74
|
-
out += char;
|
|
75
|
-
if (char === '\\' && next !== undefined) {
|
|
76
|
-
out += next;
|
|
77
|
-
i += 2;
|
|
78
|
-
continue;
|
|
79
|
-
}
|
|
80
|
-
if (char === '`') {
|
|
81
|
-
mode = 'code';
|
|
82
|
-
}
|
|
83
|
-
i += 1;
|
|
84
|
-
continue;
|
|
85
|
-
}
|
|
86
|
-
if (char === '/' && next === '/') {
|
|
87
|
-
mode = 'lineComment';
|
|
88
|
-
i += 2;
|
|
89
|
-
continue;
|
|
90
|
-
}
|
|
91
|
-
if (char === '/' && next === '*') {
|
|
92
|
-
mode = 'blockComment';
|
|
93
|
-
i += 2;
|
|
94
|
-
continue;
|
|
95
|
-
}
|
|
96
|
-
if (char === "'") {
|
|
97
|
-
mode = 'singleQuote';
|
|
98
|
-
out += char;
|
|
99
|
-
i += 1;
|
|
100
|
-
continue;
|
|
101
|
-
}
|
|
102
|
-
if (char === '"') {
|
|
103
|
-
mode = 'doubleQuote';
|
|
104
|
-
out += char;
|
|
105
|
-
i += 1;
|
|
106
|
-
continue;
|
|
107
|
-
}
|
|
108
|
-
if (char === '`') {
|
|
109
|
-
mode = 'template';
|
|
110
|
-
out += char;
|
|
111
|
-
i += 1;
|
|
112
|
-
continue;
|
|
113
|
-
}
|
|
114
|
-
out += char;
|
|
115
|
-
i += 1;
|
|
116
|
-
}
|
|
117
|
-
return out;
|
|
118
|
-
}
|
|
119
|
-
function normalizeSource(source) {
|
|
120
|
-
return stripCommentsPreservingStrings(source)
|
|
121
|
-
.replace(/\s+/g, ' ') // collapse whitespace
|
|
122
|
-
.trim();
|
|
123
|
-
}
|
|
124
|
-
/**
|
|
125
|
-
* Compute a simple checksum for a migration function.
|
|
126
|
-
* Used to detect if a migration has changed after being applied.
|
|
127
|
-
*/
|
|
128
|
-
function computeChecksum(fn) {
|
|
129
|
-
const fnStr = normalizeSource(fn.toString());
|
|
130
|
-
let hash = 0;
|
|
131
|
-
for (let i = 0; i < fnStr.length; i++) {
|
|
132
|
-
hash = (hash * 31 + fnStr.charCodeAt(i)) >>> 0;
|
|
133
|
-
}
|
|
134
|
-
return hash.toString(16).padStart(8, '0');
|
|
135
|
-
}
|
|
136
15
|
function isMigrationDefinitionObject(value) {
|
|
137
16
|
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
138
17
|
}
|
|
18
|
+
function normalizeChecksumMode(key, checksum) {
|
|
19
|
+
if (checksum === undefined) {
|
|
20
|
+
return 'deterministic';
|
|
21
|
+
}
|
|
22
|
+
if (checksum === 'deterministic' || checksum === 'disabled') {
|
|
23
|
+
return checksum;
|
|
24
|
+
}
|
|
25
|
+
throw new Error(`Invalid migration "${key}": "checksum" must be "deterministic" or "disabled" when provided.`);
|
|
26
|
+
}
|
|
139
27
|
/**
|
|
140
28
|
* Define versioned migrations with automatic version parsing and sorting.
|
|
141
29
|
*
|
|
142
30
|
* @example
|
|
143
31
|
* ```typescript
|
|
144
32
|
* export const migrations = defineMigrations({
|
|
145
|
-
* v1:
|
|
146
|
-
*
|
|
147
|
-
* .
|
|
148
|
-
*
|
|
149
|
-
*
|
|
33
|
+
* v1: {
|
|
34
|
+
* up: async (db) => {
|
|
35
|
+
* await db.schema.createTable('tasks')
|
|
36
|
+
* .addColumn('id', 'text', col => col.primaryKey())
|
|
37
|
+
* .addColumn('title', 'text', col => col.notNull())
|
|
38
|
+
* .execute();
|
|
39
|
+
* },
|
|
40
|
+
* down: async (db) => {
|
|
41
|
+
* await db.schema.dropTable('tasks').ifExists().execute();
|
|
42
|
+
* },
|
|
150
43
|
* },
|
|
151
|
-
* v2:
|
|
152
|
-
*
|
|
153
|
-
* .
|
|
154
|
-
*
|
|
44
|
+
* v2: {
|
|
45
|
+
* up: async (db) => {
|
|
46
|
+
* await db.schema.alterTable('tasks')
|
|
47
|
+
* .addColumn('priority', 'integer', col => col.defaultTo(0))
|
|
48
|
+
* .execute();
|
|
49
|
+
* },
|
|
50
|
+
* down: async (db) => {
|
|
51
|
+
* await db.schema.alterTable('tasks')
|
|
52
|
+
* .dropColumn('priority')
|
|
53
|
+
* .execute();
|
|
54
|
+
* },
|
|
155
55
|
* },
|
|
156
56
|
* });
|
|
157
57
|
* ```
|
|
@@ -166,33 +66,23 @@ export function defineMigrations(versionedMigrations) {
|
|
|
166
66
|
if (version < 1) {
|
|
167
67
|
throw new Error(`Invalid migration version ${version}: versions must be >= 1`);
|
|
168
68
|
}
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
: definition;
|
|
172
|
-
const down = isMigrationDefinitionObject(definition)
|
|
173
|
-
? definition.down
|
|
174
|
-
: undefined;
|
|
175
|
-
const compatibleChecksums = isMigrationDefinitionObject(definition)
|
|
176
|
-
? (definition.compatibleChecksums ?? [])
|
|
177
|
-
: [];
|
|
178
|
-
if (typeof up !== 'function') {
|
|
179
|
-
throw new Error(`Invalid migration "${key}": expected an async function or { up, down? } object.`);
|
|
69
|
+
if (!isMigrationDefinitionObject(definition)) {
|
|
70
|
+
throw new Error(`Invalid migration "${key}": expected a { up, down } object. Shorthand migration functions are not supported.`);
|
|
180
71
|
}
|
|
181
|
-
|
|
182
|
-
|
|
72
|
+
const { up, down } = definition;
|
|
73
|
+
const checksum = normalizeChecksumMode(key, definition.checksum);
|
|
74
|
+
if (typeof up !== 'function') {
|
|
75
|
+
throw new Error(`Invalid migration "${key}": "up" must be a function.`);
|
|
183
76
|
}
|
|
184
|
-
if (
|
|
185
|
-
|
|
186
|
-
throw new Error(`Invalid migration "${key}": "compatibleChecksums" must be an array of non-empty strings when provided.`);
|
|
77
|
+
if (typeof down !== 'function') {
|
|
78
|
+
throw new Error(`Invalid migration "${key}": "down" must be a function.`);
|
|
187
79
|
}
|
|
188
80
|
migrations.push({
|
|
189
81
|
version,
|
|
190
82
|
name: key,
|
|
191
83
|
up,
|
|
192
84
|
down,
|
|
193
|
-
|
|
194
|
-
...new Set(compatibleChecksums.map((v) => v.trim())),
|
|
195
|
-
],
|
|
85
|
+
checksum,
|
|
196
86
|
});
|
|
197
87
|
}
|
|
198
88
|
// Sort by version number
|
|
@@ -212,21 +102,4 @@ export function defineMigrations(versionedMigrations) {
|
|
|
212
102
|
},
|
|
213
103
|
};
|
|
214
104
|
}
|
|
215
|
-
/**
|
|
216
|
-
* Get the checksum for a migration.
|
|
217
|
-
*/
|
|
218
|
-
export function getMigrationChecksum(migration) {
|
|
219
|
-
return computeChecksum(migration.up);
|
|
220
|
-
}
|
|
221
|
-
/**
|
|
222
|
-
* Get the accepted checksums for a migration, including the current checksum.
|
|
223
|
-
*/
|
|
224
|
-
export function getCompatibleMigrationChecksums(migration) {
|
|
225
|
-
return [
|
|
226
|
-
...new Set([
|
|
227
|
-
getMigrationChecksum(migration),
|
|
228
|
-
...migration.compatibleChecksums,
|
|
229
|
-
]),
|
|
230
|
-
];
|
|
231
|
-
}
|
|
232
105
|
//# sourceMappingURL=define.js.map
|
package/dist/define.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"define.js","sourceRoot":"","sources":["../src/define.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH;;GAEG;AACH,SAAS,eAAe,CAAC,GAAW;IAClC,oCAAoC;IACpC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACtC,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAE,EAAE,EAAE,CAAC,CAAC;IAC/C,OAAO,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;AAChD,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"define.js","sourceRoot":"","sources":["../src/define.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC"}
|
package/dist/runner.d.ts
CHANGED
|
@@ -10,8 +10,14 @@ import type { RunMigrationsOptions, RunMigrationsResult, RunMigrationsToVersionO
|
|
|
10
10
|
* import { defineMigrations, runMigrations } from '@syncular/migrations';
|
|
11
11
|
*
|
|
12
12
|
* const migrations = defineMigrations({
|
|
13
|
-
* v1:
|
|
14
|
-
*
|
|
13
|
+
* v1: {
|
|
14
|
+
* up: async (db) => { ... },
|
|
15
|
+
* down: async (db) => { ... },
|
|
16
|
+
* },
|
|
17
|
+
* v2: {
|
|
18
|
+
* up: async (db) => { ... },
|
|
19
|
+
* down: async (db) => { ... },
|
|
20
|
+
* },
|
|
15
21
|
* });
|
|
16
22
|
*
|
|
17
23
|
* const result = await runMigrations({
|
package/dist/runner.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAAA;;GAEG;AAkBH,OAAO,KAAK,EAIV,oBAAoB,EACpB,mBAAmB,EACnB,6BAA6B,EAC7B,4BAA4B,EAC7B,MAAM,SAAS,CAAC;AA4EjB;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAsB,aAAa,CAAC,EAAE,EACpC,OAAO,EAAE,oBAAoB,CAAC,EAAE,CAAC,GAChC,OAAO,CAAC,mBAAmB,CAAC,CAU9B;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,EAAE,EAC7C,OAAO,EAAE,6BAA6B,CAAC,EAAE,CAAC,GACzC,OAAO,CAAC,4BAA4B,CAAC,CA4KvC;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,EAAE,EACvC,EAAE,EAAE,OAAO,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC,EAC/B,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,MAAM,CAAC,CAKjB"}
|