@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 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
- export const migrations = defineMigrations({
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"}
@@ -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, ParsedMigration } from './types';
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: async (db) => {
12
- * await db.schema.createTable('tasks')
13
- * .addColumn('id', 'text', col => col.primaryKey())
14
- * .addColumn('title', 'text', col => col.notNull())
15
- * .execute();
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: async (db) => {
18
- * await db.schema.alterTable('tasks')
19
- * .addColumn('priority', 'integer', col => col.defaultTo(0))
20
- * .execute();
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
@@ -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,EACf,eAAe,EAChB,MAAM,SAAS,CAAC;AA8JjB;;;;;;;;;;;;;;;;;;;GAmBG;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,CA8E/C;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,EACrC,SAAS,EAAE,eAAe,CAAC,EAAE,CAAC,GAC7B,MAAM,CAER;AAED;;GAEG;AACH,wBAAgB,+BAA+B,CAAC,EAAE,EAChD,SAAS,EAAE,eAAe,CAAC,EAAE,CAAC,GAC7B,MAAM,EAAE,CAOV"}
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: async (db) => {
146
- * await db.schema.createTable('tasks')
147
- * .addColumn('id', 'text', col => col.primaryKey())
148
- * .addColumn('title', 'text', col => col.notNull())
149
- * .execute();
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: async (db) => {
152
- * await db.schema.alterTable('tasks')
153
- * .addColumn('priority', 'integer', col => col.defaultTo(0))
154
- * .execute();
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
- const up = isMigrationDefinitionObject(definition)
170
- ? definition.up
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
- if (down !== undefined && typeof down !== 'function') {
182
- throw new Error(`Invalid migration "${key}": "down" must be a function when provided.`);
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 (!Array.isArray(compatibleChecksums) ||
185
- compatibleChecksums.some((checksum) => typeof checksum !== 'string' || checksum.trim().length === 0)) {
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
- compatibleChecksums: [
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
@@ -1 +1 @@
1
- {"version":3,"file":"define.js","sourceRoot":"","sources":["../src/define.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"define.js","sourceRoot":"","sources":["../src/define.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -3,6 +3,7 @@
3
3
  *
4
4
  * Provides migration definition, tracking, naming, and execution.
5
5
  */
6
+ export * from './checksum';
6
7
  export * from './define';
7
8
  export * from './naming';
8
9
  export * from './runner';
@@ -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
@@ -3,6 +3,7 @@
3
3
  *
4
4
  * Provides migration definition, tracking, naming, and execution.
5
5
  */
6
+ export * from './checksum.js';
6
7
  export * from './define.js';
7
8
  export * from './naming.js';
8
9
  export * from './runner.js';
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: async (db) => { ... },
14
- * v2: async (db) => { ... },
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({
@@ -1 +1 @@
1
- {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAAA;;GAEG;AAcH,OAAO,KAAK,EACV,oBAAoB,EACpB,mBAAmB,EACnB,6BAA6B,EAC7B,4BAA4B,EAC7B,MAAM,SAAS,CAAC;AAuCjB;;;;;;;;;;;;;;;;;;;;;GAqBG;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,CAoJvC;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"}
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"}