@syncular/migrations 0.0.6-225 → 0.0.6-228

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
@@ -11,7 +11,11 @@ npm install @syncular/migrations
11
11
  ## Usage
12
12
 
13
13
  ```ts
14
- import { defineMigrations, runMigrations } from '@syncular/migrations';
14
+ import {
15
+ createMigrationTrackingTableName,
16
+ defineMigrations,
17
+ runMigrations,
18
+ } from '@syncular/migrations';
15
19
 
16
20
  export const migrations = defineMigrations({
17
21
  v1: async (db) => {
@@ -22,9 +26,17 @@ export const migrations = defineMigrations({
22
26
  },
23
27
  });
24
28
 
25
- await runMigrations({ db, migrations });
29
+ await runMigrations({
30
+ db,
31
+ migrations,
32
+ trackingTable: createMigrationTrackingTableName(['my_app', 'client']),
33
+ });
26
34
  ```
27
35
 
36
+ Use `createMigrationTrackingTableName(...)` whenever you want a custom table.
37
+ It keeps names lowercase, predictable, and consistently suffixed with
38
+ `migration_state`.
39
+
28
40
  ## Documentation
29
41
 
30
42
  - Schema migrations: https://syncular.dev/docs/build/migrations
package/dist/index.d.ts CHANGED
@@ -4,6 +4,7 @@
4
4
  * Provides migration definition, tracking, and execution.
5
5
  */
6
6
  export * from './define';
7
+ export * from './naming';
7
8
  export * from './runner';
8
9
  export * from './tracking';
9
10
  export * from './types';
@@ -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,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC"}
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"}
package/dist/index.js CHANGED
@@ -4,6 +4,7 @@
4
4
  * Provides migration definition, tracking, and execution.
5
5
  */
6
6
  export * from './define.js';
7
+ export * from './naming.js';
7
8
  export * from './runner.js';
8
9
  export * from './tracking.js';
9
10
  export * from './types.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,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC"}
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"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * @syncular/migrations - Migration tracking table naming helpers
3
+ */
4
+ export type MigrationTrackingTableNamePart = string | number | null | undefined | false;
5
+ export interface CreateMigrationTrackingTableNameOptions {
6
+ /**
7
+ * Optional namespace prefix placed before the scope segments.
8
+ * Defaults to `sync`.
9
+ */
10
+ namespace?: MigrationTrackingTableNamePart | readonly MigrationTrackingTableNamePart[];
11
+ /**
12
+ * Optional suffix segments appended after `migration_state`.
13
+ */
14
+ suffix?: MigrationTrackingTableNamePart | readonly MigrationTrackingTableNamePart[];
15
+ }
16
+ export declare const DEFAULT_MIGRATION_TRACKING_TABLE = "sync_migration_state";
17
+ /**
18
+ * Create a stable migration tracking table name.
19
+ *
20
+ * The generated name always includes the `migration_state` suffix and
21
+ * normalizes segments to lowercase snake_case.
22
+ *
23
+ * @example
24
+ * createMigrationTrackingTableName()
25
+ * // => 'sync_migration_state'
26
+ *
27
+ * @example
28
+ * createMigrationTrackingTableName('server')
29
+ * // => 'sync_server_migration_state'
30
+ *
31
+ * @example
32
+ * createMigrationTrackingTableName(['spaces', 'billing'], {
33
+ * suffix: ['prod', 'v2'],
34
+ * })
35
+ * // => 'sync_spaces_billing_migration_state_prod_v2'
36
+ */
37
+ export declare function createMigrationTrackingTableName(scope?: MigrationTrackingTableNamePart | readonly MigrationTrackingTableNamePart[], options?: CreateMigrationTrackingTableNameOptions): string;
38
+ //# sourceMappingURL=naming.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"naming.d.ts","sourceRoot":"","sources":["../src/naming.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,8BAA8B,GACtC,MAAM,GACN,MAAM,GACN,IAAI,GACJ,SAAS,GACT,KAAK,CAAC;AAEV,MAAM,WAAW,uCAAuC;IACtD;;;OAGG;IACH,SAAS,CAAC,EACN,8BAA8B,GAC9B,SAAS,8BAA8B,EAAE,CAAC;IAC9C;;OAEG;IACH,MAAM,CAAC,EACH,8BAA8B,GAC9B,SAAS,8BAA8B,EAAE,CAAC;CAC/C;AAED,eAAO,MAAM,gCAAgC,yBAAyB,CAAC;AAqCvE;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,gCAAgC,CAC9C,KAAK,CAAC,EACF,8BAA8B,GAC9B,SAAS,8BAA8B,EAAE,EAC7C,OAAO,GAAE,uCAA4C,GACpD,MAAM,CAgBR"}
package/dist/naming.js ADDED
@@ -0,0 +1,60 @@
1
+ /**
2
+ * @syncular/migrations - Migration tracking table naming helpers
3
+ */
4
+ export const DEFAULT_MIGRATION_TRACKING_TABLE = 'sync_migration_state';
5
+ function normalizeTrackingTableNamePart(part) {
6
+ if (part === null || part === undefined || part === false) {
7
+ return null;
8
+ }
9
+ const normalized = String(part)
10
+ .trim()
11
+ .toLowerCase()
12
+ .replace(/[^a-z0-9]+/g, '_')
13
+ .replace(/^_+|_+$/g, '')
14
+ .replace(/_+/g, '_');
15
+ return normalized.length > 0 ? normalized : null;
16
+ }
17
+ function normalizeTrackingTableNameParts(input) {
18
+ if (Array.isArray(input)) {
19
+ return input
20
+ .map((part) => normalizeTrackingTableNamePart(part))
21
+ .filter((part) => part !== null);
22
+ }
23
+ const normalized = normalizeTrackingTableNamePart(input);
24
+ return normalized ? [normalized] : [];
25
+ }
26
+ /**
27
+ * Create a stable migration tracking table name.
28
+ *
29
+ * The generated name always includes the `migration_state` suffix and
30
+ * normalizes segments to lowercase snake_case.
31
+ *
32
+ * @example
33
+ * createMigrationTrackingTableName()
34
+ * // => 'sync_migration_state'
35
+ *
36
+ * @example
37
+ * createMigrationTrackingTableName('server')
38
+ * // => 'sync_server_migration_state'
39
+ *
40
+ * @example
41
+ * createMigrationTrackingTableName(['spaces', 'billing'], {
42
+ * suffix: ['prod', 'v2'],
43
+ * })
44
+ * // => 'sync_spaces_billing_migration_state_prod_v2'
45
+ */
46
+ export function createMigrationTrackingTableName(scope, options = {}) {
47
+ const namespace = options.namespace === undefined ? ['sync'] : options.namespace;
48
+ const segments = [
49
+ ...normalizeTrackingTableNameParts(namespace),
50
+ ...normalizeTrackingTableNameParts(scope),
51
+ 'migration',
52
+ 'state',
53
+ ...normalizeTrackingTableNameParts(options.suffix),
54
+ ];
55
+ if (segments.length === 0) {
56
+ return DEFAULT_MIGRATION_TRACKING_TABLE;
57
+ }
58
+ return segments.join('_');
59
+ }
60
+ //# sourceMappingURL=naming.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"naming.js","sourceRoot":"","sources":["../src/naming.ts"],"names":[],"mappings":"AAAA;;GAEG;AAyBH,MAAM,CAAC,MAAM,gCAAgC,GAAG,sBAAsB,CAAC;AAEvE,SAAS,8BAA8B,CACrC,IAAoC,EACrB;IACf,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;QAC1D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC;SAC5B,IAAI,EAAE;SACN,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAEvB,OAAO,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;AAAA,CAClD;AAED,SAAS,+BAA+B,CACtC,KAGa,EACH;IACV,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK;aACT,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,8BAA8B,CAAC,IAAI,CAAC,CAAC;aACnD,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACrD,CAAC;IAED,MAAM,UAAU,GAAG,8BAA8B,CAC/C,KAAuC,CACxC,CAAC;IACF,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAAA,CACvC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,gCAAgC,CAC9C,KAE6C,EAC7C,OAAO,GAA4C,EAAE,EAC7C;IACR,MAAM,SAAS,GACb,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;IACjE,MAAM,QAAQ,GAAG;QACf,GAAG,+BAA+B,CAAC,SAAS,CAAC;QAC7C,GAAG,+BAA+B,CAAC,KAAK,CAAC;QACzC,WAAW;QACX,OAAO;QACP,GAAG,+BAA+B,CAAC,OAAO,CAAC,MAAM,CAAC;KACnD,CAAC;IAEF,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,gCAAgC,CAAC;IAC1C,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAAA,CAC3B"}
@@ -1 +1 @@
1
- {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH,OAAO,KAAK,EACV,oBAAoB,EACpB,mBAAmB,EACnB,6BAA6B,EAC7B,4BAA4B,EAC7B,MAAM,SAAS,CAAC;AAwCjB;;;;;;;;;;;;;;;;;;;;;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,CAgJvC;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;AAWH,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,CAiJvC;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"}
package/dist/runner.js CHANGED
@@ -2,8 +2,8 @@
2
2
  * @syncular/migrations - Migration runner
3
3
  */
4
4
  import { getMigrationChecksum } from './define.js';
5
+ import { DEFAULT_MIGRATION_TRACKING_TABLE } from './naming.js';
5
6
  import { clearAppliedMigrations, ensureTrackingTable, getAppliedMigrations, recordAppliedMigration, removeAppliedMigration, } from './tracking.js';
6
- const DEFAULT_TRACKING_TABLE = 'sync_migration_state';
7
7
  const migrationRunQueues = new Map();
8
8
  function toErrorMessage(error) {
9
9
  return error instanceof Error ? error.message : String(error);
@@ -70,7 +70,7 @@ export async function runMigrations(options) {
70
70
  */
71
71
  export async function runMigrationsToVersion(options) {
72
72
  const { db, migrations, targetVersion } = options;
73
- const trackingTable = options.trackingTable ?? DEFAULT_TRACKING_TABLE;
73
+ const trackingTable = options.trackingTable ?? DEFAULT_MIGRATION_TRACKING_TABLE;
74
74
  const onChecksumMismatch = options.onChecksumMismatch ?? 'error';
75
75
  const beforeReset = options.beforeReset;
76
76
  if (!Number.isInteger(targetVersion) || targetVersion < 0) {
@@ -189,7 +189,7 @@ export async function runMigrationsToVersion(options) {
189
189
  * Get the current schema version without running any migrations.
190
190
  */
191
191
  export async function getSchemaVersion(db, trackingTable) {
192
- const tableName = trackingTable ?? DEFAULT_TRACKING_TABLE;
192
+ const tableName = trackingTable ?? DEFAULT_MIGRATION_TRACKING_TABLE;
193
193
  const applied = await getAppliedMigrations(db, tableName);
194
194
  if (applied.length === 0)
195
195
  return 0;
@@ -1 +1 @@
1
- {"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,YAAY,CAAC;AAQpB,MAAM,sBAAsB,GAAG,sBAAsB,CAAC;AACtD,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAyB,CAAC;AAE5D,SAAS,cAAc,CAAC,KAAc,EAAU;IAC9C,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAAA,CAC/D;AAED,SAAS,0BAA0B,CAAC,KAAc,EAAW;IAC3D,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;IACpD,OAAO,CACL,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QAClC,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAC7D,CAAC;AAAA,CACH;AAED,KAAK,UAAU,qBAAqB,CAClC,QAAgB,EAChB,IAAsB,EACV;IACZ,MAAM,QAAQ,GAAG,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IACvE,IAAI,OAAoB,CAAC;IACzB,MAAM,OAAO,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC;QAC7C,OAAO,GAAG,OAAO,CAAC;IAAA,CACnB,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC;IAC1C,kBAAkB,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAEvC,MAAM,QAAQ,CAAC;IACf,IAAI,CAAC;QACH,OAAO,MAAM,IAAI,EAAE,CAAC;IACtB,CAAC;YAAS,CAAC;QACT,OAAO,EAAE,CAAC;QACV,IAAI,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC;YAC9C,kBAAkB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;AAAA,CACF;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,OAAiC,EACH;IAC9B,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC;QAC1C,GAAG,OAAO;QACV,aAAa,EAAE,OAAO,CAAC,UAAU,CAAC,cAAc;KACjD,CAAC,CAAC;IACH,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,QAAQ,EAAE,MAAM,CAAC,QAAQ;KAC1B,CAAC;AAAA,CACH;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,OAA0C,EACH;IACvC,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC;IAClD,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,sBAAsB,CAAC;IACtE,MAAM,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,IAAI,OAAO,CAAC;IACjE,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IACxC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;QAC1D,MAAM,IAAI,KAAK,CACb,0BAA0B,aAAa,2CAA2C,CACnF,CAAC;IACJ,CAAC;IACD,IAAI,aAAa,GAAG,UAAU,CAAC,cAAc,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CACb,0BAA0B,aAAa,gCAAgC,UAAU,CAAC,cAAc,GAAG,CACpG,CAAC;IACJ,CAAC;IAED,8EAA8E;IAC9E,mFAAmF;IACnF,OAAO,qBAAqB,CAAC,YAAY,aAAa,EAAE,EAAE,KAAK,IAAI,EAAE,CAAC;QACpE,+BAA+B;QAC/B,MAAM,mBAAmB,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;QAE7C,iCAAiC;QACjC,IAAI,OAAO,GAAG,MAAM,oBAAoB,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;QAC5D,IAAI,gBAAgB,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAEnE,MAAM,eAAe,GAAa,EAAE,CAAC;QACrC,MAAM,gBAAgB,GAAa,EAAE,CAAC;QACtC,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,IAAI,2BAA2B,GAAG,KAAK,CAAC;QAExC,oEAAoE;QACpE,IAAI,kBAAkB,KAAK,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzD,MAAM,WAAW,GAAG,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC;gBAC5D,MAAM,QAAQ,GAAG,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;gBACzD,IAAI,CAAC,QAAQ;oBAAE,OAAO,KAAK,CAAC;gBAC5B,OAAO,oBAAoB,CAAC,SAAS,CAAC,KAAK,QAAQ,CAAC,QAAQ,CAAC;YAAA,CAC9D,CAAC,CAAC;YAEH,IAAI,WAAW,EAAE,CAAC;gBAChB,2CAA2C;gBAC3C,MAAM,OAAO,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;gBAChC,gDAAgD;gBAChD,MAAM,sBAAsB,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;gBAChD,QAAQ,GAAG,IAAI,CAAC;gBAEhB,mCAAmC;gBACnC,OAAO,GAAG,MAAM,oBAAoB,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;gBACxD,gBAAgB,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;QAED,KAAK,MAAM,SAAS,IAAI,UAAU,CAAC,UAAU,EAAE,CAAC;YAC9C,MAAM,QAAQ,GAAG,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YACzD,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,SAAS;YACX,CAAC;YACD,MAAM,eAAe,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC;YACxD,IAAI,eAAe,KAAK,QAAQ,CAAC,QAAQ,EAAE,CAAC;gBAC1C,MAAM,IAAI,KAAK,CACb,cAAc,SAAS,CAAC,OAAO,KAAK,SAAS,CAAC,IAAI,sCAAsC;oBACtF,mBAAmB,QAAQ,CAAC,QAAQ,4CAA4C,eAAe,IAAI;oBACnG,sDAAsD,CACzD,CAAC;YACJ,CAAC;QACH,CAAC;QAED,MAAM,cAAc,GAClB,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAEhE,IAAI,aAAa,GAAG,cAAc,EAAE,CAAC;YACnC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;gBACrE,MAAM,SAAS,GAAG,UAAU,CAAC,UAAU,CAAC,KAAK,CAAE,CAAC;gBAChD,IAAI,SAAS,CAAC,OAAO,IAAI,cAAc,EAAE,CAAC;oBACxC,SAAS;gBACX,CAAC;gBACD,IAAI,SAAS,CAAC,OAAO,GAAG,aAAa,EAAE,CAAC;oBACtC,MAAM;gBACR,CAAC;gBAED,IAAI,CAAC;oBACH,MAAM,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;gBACzB,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,MAAM,sBAAsB,GAC1B,kBAAkB,KAAK,OAAO;wBAC9B,OAAO,WAAW,KAAK,UAAU;wBACjC,CAAC,2BAA2B;wBAC5B,0BAA0B,CAAC,KAAK,CAAC,CAAC;oBAEpC,IAAI,CAAC,sBAAsB,EAAE,CAAC;wBAC5B,MAAM,KAAK,CAAC;oBACd,CAAC;oBAED,mEAAmE;oBACnE,kDAAkD;oBAClD,MAAM,WAAW,CAAC,EAAE,CAAC,CAAC;oBACtB,MAAM,sBAAsB,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;oBAChD,QAAQ,GAAG,IAAI,CAAC;oBAChB,2BAA2B,GAAG,IAAI,CAAC;oBACnC,OAAO,GAAG,MAAM,oBAAoB,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;oBACxD,gBAAgB,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC/D,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC;oBAC3B,KAAK,GAAG,CAAC,CAAC,CAAC;oBACX,SAAS;gBACX,CAAC;gBAED,MAAM,sBAAsB,CAAC,EAAE,EAAE,aAAa,EAAE;oBAC9C,OAAO,EAAE,SAAS,CAAC,OAAO;oBAC1B,IAAI,EAAE,SAAS,CAAC,IAAI;oBACpB,QAAQ,EAAE,oBAAoB,CAAC,SAAS,CAAC;iBAC1C,CAAC,CAAC;gBACH,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;aAAM,IAAI,aAAa,GAAG,cAAc,EAAE,CAAC;YAC1C,KACE,IAAI,OAAO,GAAG,cAAc,EAC5B,OAAO,GAAG,aAAa,EACvB,OAAO,IAAI,CAAC,EACZ,CAAC;gBACD,MAAM,SAAS,GAAG,UAAU,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;gBACnD,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,MAAM,IAAI,KAAK,CACb,4BAA4B,OAAO,sDAAsD,CAC1F,CAAC;gBACJ,CAAC;gBACD,IAAI,OAAO,SAAS,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;oBACzC,MAAM,IAAI,KAAK,CACb,4BAA4B,OAAO,KAAK,SAAS,CAAC,IAAI,mCAAmC,CAC1F,CAAC;gBACJ,CAAC;gBAED,MAAM,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACzB,MAAM,sBAAsB,CAAC,EAAE,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;gBACzD,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;QAED,OAAO;YACL,OAAO,EAAE,eAAe;YACxB,QAAQ,EAAE,gBAAgB;YAC1B,cAAc,EAAE,aAAa;YAC7B,QAAQ;SACT,CAAC;IAAA,CACH,CAAC,CAAC;AAAA,CACJ;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,EAA+B,EAC/B,aAAsB,EACL;IACjB,MAAM,SAAS,GAAG,aAAa,IAAI,sBAAsB,CAAC;IAC1D,MAAM,OAAO,GAAG,MAAM,oBAAoB,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;IAC1D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IACnC,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC,OAAO,CAAC;AAAA,CAC7C"}
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@syncular/migrations",
3
- "version": "0.0.6-225",
3
+ "version": "0.0.6-228",
4
4
  "description": "Database migration utilities for Syncular",
5
5
  "license": "Apache-2.0",
6
6
  "author": "Benjamin Kniffler",
package/src/index.ts CHANGED
@@ -5,6 +5,7 @@
5
5
  */
6
6
 
7
7
  export * from './define';
8
+ export * from './naming';
8
9
  export * from './runner';
9
10
  export * from './tracking';
10
11
  export * from './types';
package/src/naming.ts ADDED
@@ -0,0 +1,106 @@
1
+ /**
2
+ * @syncular/migrations - Migration tracking table naming helpers
3
+ */
4
+
5
+ export type MigrationTrackingTableNamePart =
6
+ | string
7
+ | number
8
+ | null
9
+ | undefined
10
+ | false;
11
+
12
+ export interface CreateMigrationTrackingTableNameOptions {
13
+ /**
14
+ * Optional namespace prefix placed before the scope segments.
15
+ * Defaults to `sync`.
16
+ */
17
+ namespace?:
18
+ | MigrationTrackingTableNamePart
19
+ | readonly MigrationTrackingTableNamePart[];
20
+ /**
21
+ * Optional suffix segments appended after `migration_state`.
22
+ */
23
+ suffix?:
24
+ | MigrationTrackingTableNamePart
25
+ | readonly MigrationTrackingTableNamePart[];
26
+ }
27
+
28
+ export const DEFAULT_MIGRATION_TRACKING_TABLE = 'sync_migration_state';
29
+
30
+ function normalizeTrackingTableNamePart(
31
+ part: MigrationTrackingTableNamePart
32
+ ): string | null {
33
+ if (part === null || part === undefined || part === false) {
34
+ return null;
35
+ }
36
+
37
+ const normalized = String(part)
38
+ .trim()
39
+ .toLowerCase()
40
+ .replace(/[^a-z0-9]+/g, '_')
41
+ .replace(/^_+|_+$/g, '')
42
+ .replace(/_+/g, '_');
43
+
44
+ return normalized.length > 0 ? normalized : null;
45
+ }
46
+
47
+ function normalizeTrackingTableNameParts(
48
+ input:
49
+ | MigrationTrackingTableNamePart
50
+ | readonly MigrationTrackingTableNamePart[]
51
+ | undefined
52
+ ): string[] {
53
+ if (Array.isArray(input)) {
54
+ return input
55
+ .map((part) => normalizeTrackingTableNamePart(part))
56
+ .filter((part): part is string => part !== null);
57
+ }
58
+
59
+ const normalized = normalizeTrackingTableNamePart(
60
+ input as MigrationTrackingTableNamePart
61
+ );
62
+ return normalized ? [normalized] : [];
63
+ }
64
+
65
+ /**
66
+ * Create a stable migration tracking table name.
67
+ *
68
+ * The generated name always includes the `migration_state` suffix and
69
+ * normalizes segments to lowercase snake_case.
70
+ *
71
+ * @example
72
+ * createMigrationTrackingTableName()
73
+ * // => 'sync_migration_state'
74
+ *
75
+ * @example
76
+ * createMigrationTrackingTableName('server')
77
+ * // => 'sync_server_migration_state'
78
+ *
79
+ * @example
80
+ * createMigrationTrackingTableName(['spaces', 'billing'], {
81
+ * suffix: ['prod', 'v2'],
82
+ * })
83
+ * // => 'sync_spaces_billing_migration_state_prod_v2'
84
+ */
85
+ export function createMigrationTrackingTableName(
86
+ scope?:
87
+ | MigrationTrackingTableNamePart
88
+ | readonly MigrationTrackingTableNamePart[],
89
+ options: CreateMigrationTrackingTableNameOptions = {}
90
+ ): string {
91
+ const namespace =
92
+ options.namespace === undefined ? ['sync'] : options.namespace;
93
+ const segments = [
94
+ ...normalizeTrackingTableNameParts(namespace),
95
+ ...normalizeTrackingTableNameParts(scope),
96
+ 'migration',
97
+ 'state',
98
+ ...normalizeTrackingTableNameParts(options.suffix),
99
+ ];
100
+
101
+ if (segments.length === 0) {
102
+ return DEFAULT_MIGRATION_TRACKING_TABLE;
103
+ }
104
+
105
+ return segments.join('_');
106
+ }
package/src/runner.ts CHANGED
@@ -3,6 +3,7 @@
3
3
  */
4
4
 
5
5
  import { getMigrationChecksum } from './define';
6
+ import { DEFAULT_MIGRATION_TRACKING_TABLE } from './naming';
6
7
  import {
7
8
  clearAppliedMigrations,
8
9
  ensureTrackingTable,
@@ -17,7 +18,6 @@ import type {
17
18
  RunMigrationsToVersionResult,
18
19
  } from './types';
19
20
 
20
- const DEFAULT_TRACKING_TABLE = 'sync_migration_state';
21
21
  const migrationRunQueues = new Map<string, Promise<void>>();
22
22
 
23
23
  function toErrorMessage(error: unknown): string {
@@ -98,7 +98,8 @@ export async function runMigrationsToVersion<DB>(
98
98
  options: RunMigrationsToVersionOptions<DB>
99
99
  ): Promise<RunMigrationsToVersionResult> {
100
100
  const { db, migrations, targetVersion } = options;
101
- const trackingTable = options.trackingTable ?? DEFAULT_TRACKING_TABLE;
101
+ const trackingTable =
102
+ options.trackingTable ?? DEFAULT_MIGRATION_TRACKING_TABLE;
102
103
  const onChecksumMismatch = options.onChecksumMismatch ?? 'error';
103
104
  const beforeReset = options.beforeReset;
104
105
  if (!Number.isInteger(targetVersion) || targetVersion < 0) {
@@ -249,7 +250,7 @@ export async function getSchemaVersion<DB>(
249
250
  db: import('kysely').Kysely<DB>,
250
251
  trackingTable?: string
251
252
  ): Promise<number> {
252
- const tableName = trackingTable ?? DEFAULT_TRACKING_TABLE;
253
+ const tableName = trackingTable ?? DEFAULT_MIGRATION_TRACKING_TABLE;
253
254
  const applied = await getAppliedMigrations(db, tableName);
254
255
  if (applied.length === 0) return 0;
255
256
  return applied[applied.length - 1]!.version;