@syncular/migrations 0.0.1 → 0.0.2-126

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 ADDED
@@ -0,0 +1,37 @@
1
+ # @syncular/migrations
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).
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ npm install @syncular/migrations
9
+ ```
10
+
11
+ ## Usage
12
+
13
+ ```ts
14
+ import { defineMigrations, runMigrations } from '@syncular/migrations';
15
+
16
+ export const migrations = defineMigrations({
17
+ v1: async (db) => {
18
+ await db.schema.createTable('tasks').addColumn('id', 'text').execute();
19
+ },
20
+ v2: async (db) => {
21
+ await db.schema.alterTable('tasks').addColumn('done', 'integer').execute();
22
+ },
23
+ });
24
+
25
+ await runMigrations({ db, migrations });
26
+ ```
27
+
28
+ ## Documentation
29
+
30
+ - Schema migrations: https://syncular.dev/docs/build/migrations
31
+
32
+ ## Links
33
+
34
+ - GitHub: https://github.com/syncular/syncular
35
+ - Issues: https://github.com/syncular/syncular/issues
36
+
37
+ > Status: Alpha. APIs and storage layouts may change between releases.
@@ -1 +1 @@
1
- {"version":3,"file":"define.d.ts","sourceRoot":"","sources":["../src/define.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,iBAAiB,EAEjB,eAAe,EACf,eAAe,EAChB,MAAM,SAAS,CAAC;AAuCjB;;;;;;;;;;;;;;;;;;;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,CA0C/C;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,EACrC,SAAS,EAAE,eAAe,CAAC,EAAE,CAAC,GAC7B,MAAM,CAER"}
1
+ {"version":3,"file":"define.d.ts","sourceRoot":"","sources":["../src/define.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,iBAAiB,EAEjB,eAAe,EACf,eAAe,EAChB,MAAM,SAAS,CAAC;AAwJjB;;;;;;;;;;;;;;;;;;;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,CA0C/C;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,EACrC,SAAS,EAAE,eAAe,CAAC,EAAE,CAAC,GAC7B,MAAM,CAER"}
package/dist/define.js CHANGED
@@ -17,10 +17,107 @@ function parseVersionKey(key) {
17
17
  * Strips comments and collapses whitespace so that formatting-only
18
18
  * changes don't break checksums.
19
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
+ }
20
119
  function normalizeSource(source) {
21
- return source
22
- .replace(/\/\/[^\n]*/g, '') // strip // comments
23
- .replace(/\/\*[\s\S]*?\*\//g, '') // strip /* */ comments
120
+ return stripCommentsPreservingStrings(source)
24
121
  .replace(/\s+/g, ' ') // collapse whitespace
25
122
  .trim();
26
123
  }
@@ -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.js CHANGED
@@ -3,8 +3,8 @@
3
3
  *
4
4
  * Provides migration definition, tracking, and execution.
5
5
  */
6
- export * from './define';
7
- export * from './runner';
8
- export * from './tracking';
9
- export * from './types';
6
+ export * from './define.js';
7
+ export * from './runner.js';
8
+ export * from './tracking.js';
9
+ export * from './types.js';
10
10
  //# sourceMappingURL=index.js.map
package/dist/runner.js CHANGED
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * @syncular/migrations - Migration runner
3
3
  */
4
- import { getMigrationChecksum } from './define';
5
- import { clearAppliedMigrations, ensureTrackingTable, getAppliedMigrations, recordAppliedMigration, } from './tracking';
4
+ import { getMigrationChecksum } from './define.js';
5
+ import { clearAppliedMigrations, ensureTrackingTable, getAppliedMigrations, recordAppliedMigration, } from './tracking.js';
6
6
  const DEFAULT_TRACKING_TABLE = 'sync_migration_state';
7
7
  /**
8
8
  * Run pending migrations and track their state.
package/package.json CHANGED
@@ -1,6 +1,27 @@
1
1
  {
2
2
  "name": "@syncular/migrations",
3
- "version": "0.0.1",
3
+ "version": "0.0.2-126",
4
+ "description": "Database migration utilities for Syncular",
5
+ "license": "MIT",
6
+ "author": "Benjamin Kniffler",
7
+ "homepage": "https://syncular.dev",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "https://github.com/syncular/syncular.git",
11
+ "directory": "packages/migrations"
12
+ },
13
+ "bugs": {
14
+ "url": "https://github.com/syncular/syncular/issues"
15
+ },
16
+ "keywords": [
17
+ "sync",
18
+ "offline-first",
19
+ "realtime",
20
+ "database",
21
+ "typescript",
22
+ "migrations",
23
+ "database"
24
+ ],
4
25
  "private": false,
5
26
  "publishConfig": {
6
27
  "access": "public"
@@ -18,13 +39,14 @@
18
39
  "scripts": {
19
40
  "test": "bun test --pass-with-no-tests",
20
41
  "tsgo": "tsgo --noEmit",
21
- "build": "rm -rf dist && tsgo"
42
+ "build": "tsgo",
43
+ "release": "bunx syncular-publish"
22
44
  },
23
45
  "peerDependencies": {
24
46
  "kysely": "^0.28.0"
25
47
  },
26
48
  "devDependencies": {
27
- "@syncular/config": "workspace:*",
49
+ "@syncular/config": "0.0.0",
28
50
  "kysely": "*"
29
51
  },
30
52
  "files": [
package/src/define.ts CHANGED
@@ -25,10 +25,123 @@ function parseVersionKey(key: string): number | null {
25
25
  * Strips comments and collapses whitespace so that formatting-only
26
26
  * changes don't break checksums.
27
27
  */
28
+ function stripCommentsPreservingStrings(source: string): string {
29
+ let out = '';
30
+ let i = 0;
31
+ let mode:
32
+ | 'code'
33
+ | 'singleQuote'
34
+ | 'doubleQuote'
35
+ | 'template'
36
+ | 'lineComment'
37
+ | 'blockComment' = 'code';
38
+
39
+ while (i < source.length) {
40
+ const char = source[i]!;
41
+ const next = source[i + 1];
42
+
43
+ if (mode === 'lineComment') {
44
+ if (char === '\n') {
45
+ out += '\n';
46
+ mode = 'code';
47
+ }
48
+ i += 1;
49
+ continue;
50
+ }
51
+
52
+ if (mode === 'blockComment') {
53
+ if (char === '*' && next === '/') {
54
+ i += 2;
55
+ mode = 'code';
56
+ continue;
57
+ }
58
+ if (char === '\n') {
59
+ out += '\n';
60
+ }
61
+ i += 1;
62
+ continue;
63
+ }
64
+
65
+ if (mode === 'singleQuote') {
66
+ out += char;
67
+ if (char === '\\' && next !== undefined) {
68
+ out += next;
69
+ i += 2;
70
+ continue;
71
+ }
72
+ if (char === "'") {
73
+ mode = 'code';
74
+ }
75
+ i += 1;
76
+ continue;
77
+ }
78
+
79
+ if (mode === 'doubleQuote') {
80
+ out += char;
81
+ if (char === '\\' && next !== undefined) {
82
+ out += next;
83
+ i += 2;
84
+ continue;
85
+ }
86
+ if (char === '"') {
87
+ mode = 'code';
88
+ }
89
+ i += 1;
90
+ continue;
91
+ }
92
+
93
+ if (mode === 'template') {
94
+ out += char;
95
+ if (char === '\\' && next !== undefined) {
96
+ out += next;
97
+ i += 2;
98
+ continue;
99
+ }
100
+ if (char === '`') {
101
+ mode = 'code';
102
+ }
103
+ i += 1;
104
+ continue;
105
+ }
106
+
107
+ if (char === '/' && next === '/') {
108
+ mode = 'lineComment';
109
+ i += 2;
110
+ continue;
111
+ }
112
+ if (char === '/' && next === '*') {
113
+ mode = 'blockComment';
114
+ i += 2;
115
+ continue;
116
+ }
117
+ if (char === "'") {
118
+ mode = 'singleQuote';
119
+ out += char;
120
+ i += 1;
121
+ continue;
122
+ }
123
+ if (char === '"') {
124
+ mode = 'doubleQuote';
125
+ out += char;
126
+ i += 1;
127
+ continue;
128
+ }
129
+ if (char === '`') {
130
+ mode = 'template';
131
+ out += char;
132
+ i += 1;
133
+ continue;
134
+ }
135
+
136
+ out += char;
137
+ i += 1;
138
+ }
139
+
140
+ return out;
141
+ }
142
+
28
143
  function normalizeSource(source: string): string {
29
- return source
30
- .replace(/\/\/[^\n]*/g, '') // strip // comments
31
- .replace(/\/\*[\s\S]*?\*\//g, '') // strip /* */ comments
144
+ return stripCommentsPreservingStrings(source)
32
145
  .replace(/\s+/g, ' ') // collapse whitespace
33
146
  .trim();
34
147
  }