@anthonyalayo/drizzle-kit 1.0.1

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.
Files changed (161) hide show
  1. package/.gitignore +25 -0
  2. package/README.md +79 -0
  3. package/build.dev.ts +51 -0
  4. package/build.ts +112 -0
  5. package/imports-checker/analyze.ts +78 -0
  6. package/imports-checker/checker.ts +296 -0
  7. package/imports-checker/grammar/grammar.ohm +121 -0
  8. package/imports-checker/grammar/grammar.ohm-bundle.d.ts +164 -0
  9. package/imports-checker/grammar/grammar.ohm-bundle.js +753 -0
  10. package/imports-checker/index.ts +48 -0
  11. package/package.json +142 -0
  12. package/patches/difflib@0.2.4.patch +31 -0
  13. package/src/@types/utils.ts +58 -0
  14. package/src/api.ts +504 -0
  15. package/src/cli/commands/_es5.ts +2 -0
  16. package/src/cli/commands/check.ts +52 -0
  17. package/src/cli/commands/drop.ts +60 -0
  18. package/src/cli/commands/introspect.ts +772 -0
  19. package/src/cli/commands/libSqlPushUtils.ts +355 -0
  20. package/src/cli/commands/migrate.ts +1526 -0
  21. package/src/cli/commands/mysqlIntrospect.ts +53 -0
  22. package/src/cli/commands/mysqlPushUtils.ts +352 -0
  23. package/src/cli/commands/mysqlUp.ts +102 -0
  24. package/src/cli/commands/pgIntrospect.ts +55 -0
  25. package/src/cli/commands/pgPushUtils.ts +269 -0
  26. package/src/cli/commands/pgUp.ts +217 -0
  27. package/src/cli/commands/push.ts +637 -0
  28. package/src/cli/commands/singlestoreIntrospect.ts +53 -0
  29. package/src/cli/commands/singlestorePushUtils.ts +456 -0
  30. package/src/cli/commands/singlestoreUp.ts +1 -0
  31. package/src/cli/commands/sqliteIntrospect.ts +96 -0
  32. package/src/cli/commands/sqlitePushUtils.ts +322 -0
  33. package/src/cli/commands/sqliteUp.ts +52 -0
  34. package/src/cli/commands/utils.ts +858 -0
  35. package/src/cli/connections.ts +914 -0
  36. package/src/cli/index.ts +48 -0
  37. package/src/cli/schema.ts +794 -0
  38. package/src/cli/selector-ui.ts +38 -0
  39. package/src/cli/utils.ts +112 -0
  40. package/src/cli/validations/cli.ts +79 -0
  41. package/src/cli/validations/common.ts +193 -0
  42. package/src/cli/validations/libsql.ts +27 -0
  43. package/src/cli/validations/mysql.ts +61 -0
  44. package/src/cli/validations/outputs.ts +91 -0
  45. package/src/cli/validations/postgres.ts +83 -0
  46. package/src/cli/validations/singlestore.ts +61 -0
  47. package/src/cli/validations/sqlite.ts +104 -0
  48. package/src/cli/validations/studio.ts +24 -0
  49. package/src/cli/views.ts +658 -0
  50. package/src/extensions/getTablesFilterByExtensions.ts +16 -0
  51. package/src/extensions/vector.ts +10 -0
  52. package/src/global.ts +61 -0
  53. package/src/index.ts +326 -0
  54. package/src/introspect-mysql.ts +1030 -0
  55. package/src/introspect-pg.ts +1435 -0
  56. package/src/introspect-singlestore.ts +913 -0
  57. package/src/introspect-sqlite.ts +533 -0
  58. package/src/jsonDiffer.js +882 -0
  59. package/src/jsonStatements.ts +3590 -0
  60. package/src/loader.mjs +57 -0
  61. package/src/migrationPreparator.ts +217 -0
  62. package/src/schemaValidator.ts +23 -0
  63. package/src/serializer/index.ts +142 -0
  64. package/src/serializer/mysqlImports.ts +38 -0
  65. package/src/serializer/mysqlSchema.ts +423 -0
  66. package/src/serializer/mysqlSerializer.ts +999 -0
  67. package/src/serializer/pgImports.ts +106 -0
  68. package/src/serializer/pgSchema.ts +937 -0
  69. package/src/serializer/pgSerializer.ts +2223 -0
  70. package/src/serializer/singlestoreImports.ts +38 -0
  71. package/src/serializer/singlestoreSchema.ts +257 -0
  72. package/src/serializer/singlestoreSerializer.ts +767 -0
  73. package/src/serializer/sqliteImports.ts +41 -0
  74. package/src/serializer/sqliteSchema.ts +352 -0
  75. package/src/serializer/sqliteSerializer.ts +931 -0
  76. package/src/serializer/studio.ts +694 -0
  77. package/src/serializer/utils.ts +45 -0
  78. package/src/simulator.ts +157 -0
  79. package/src/snapshotsDiffer.ts +4398 -0
  80. package/src/sqlgenerator.ts +4212 -0
  81. package/src/statementCombiner.ts +597 -0
  82. package/src/utils/certs.ts +44 -0
  83. package/src/utils/words.ts +1333 -0
  84. package/src/utils.ts +370 -0
  85. package/tests/bin.test.ts +58 -0
  86. package/tests/cli/d1http.config.ts +12 -0
  87. package/tests/cli/drizzle.config.ts +9 -0
  88. package/tests/cli/durable-sqlite.config.ts +7 -0
  89. package/tests/cli/expo.config.ts +7 -0
  90. package/tests/cli/postgres.config.ts +13 -0
  91. package/tests/cli/postgres2.config.ts +17 -0
  92. package/tests/cli/schema.ts +1 -0
  93. package/tests/cli/turso.config.ts +10 -0
  94. package/tests/cli-export.test.ts +79 -0
  95. package/tests/cli-generate.test.ts +259 -0
  96. package/tests/cli-migrate.test.ts +103 -0
  97. package/tests/cli-push.test.ts +126 -0
  98. package/tests/common.ts +15 -0
  99. package/tests/indexes/common.ts +21 -0
  100. package/tests/indexes/pg.test.ts +245 -0
  101. package/tests/introspect/libsql.test.ts +35 -0
  102. package/tests/introspect/mysql.test.ts +319 -0
  103. package/tests/introspect/pg.test.ts +894 -0
  104. package/tests/introspect/singlestore.test.ts +275 -0
  105. package/tests/introspect/sqlite.test.ts +122 -0
  106. package/tests/libsql-checks.test.ts +308 -0
  107. package/tests/libsql-statements.test.ts +989 -0
  108. package/tests/libsql-views.test.ts +218 -0
  109. package/tests/migrate/libsq-schema.ts +6 -0
  110. package/tests/migrate/libsql-migrate.test.ts +58 -0
  111. package/tests/migrate/migrations/0000_little_blizzard.sql +4 -0
  112. package/tests/migrate/migrations/0001_nebulous_storm.sql +10 -0
  113. package/tests/migrate/migrations/meta/0000_snapshot.json +40 -0
  114. package/tests/migrate/migrations/meta/0001_snapshot.json +40 -0
  115. package/tests/migrate/migrations/meta/_journal.json +20 -0
  116. package/tests/mysql-checks.test.ts +291 -0
  117. package/tests/mysql-generated.test.ts +1290 -0
  118. package/tests/mysql-schemas.test.ts +156 -0
  119. package/tests/mysql-views.test.ts +553 -0
  120. package/tests/mysql.test.ts +863 -0
  121. package/tests/pg-array.test.ts +368 -0
  122. package/tests/pg-checks.test.ts +329 -0
  123. package/tests/pg-columns.test.ts +484 -0
  124. package/tests/pg-domains.test.ts +306 -0
  125. package/tests/pg-enums.test.ts +751 -0
  126. package/tests/pg-generated.test.ts +529 -0
  127. package/tests/pg-identity.test.ts +447 -0
  128. package/tests/pg-schemas.test.ts +105 -0
  129. package/tests/pg-sequences.test.ts +298 -0
  130. package/tests/pg-tables.test.ts +1021 -0
  131. package/tests/pg-views.test.ts +1929 -0
  132. package/tests/push/common.ts +58 -0
  133. package/tests/push/libsql.test.ts +1400 -0
  134. package/tests/push/mysql-push.test.ts +345 -0
  135. package/tests/push/mysql.test.ts +788 -0
  136. package/tests/push/pg.test.ts +4341 -0
  137. package/tests/push/singlestore-push.test.ts +894 -0
  138. package/tests/push/singlestore.test.ts +444 -0
  139. package/tests/push/sqlite.test.ts +1613 -0
  140. package/tests/rls/pg-policy.test.ts +1656 -0
  141. package/tests/rls/pg-role.test.ts +234 -0
  142. package/tests/schemaDiffer.ts +2852 -0
  143. package/tests/singlestore-generated.test.ts +1290 -0
  144. package/tests/singlestore-schemas.test.ts +155 -0
  145. package/tests/singlestore.test.ts +978 -0
  146. package/tests/sqlite-checks.test.ts +308 -0
  147. package/tests/sqlite-columns.test.ts +1049 -0
  148. package/tests/sqlite-generated.test.ts +1726 -0
  149. package/tests/sqlite-tables.test.ts +637 -0
  150. package/tests/sqlite-views.test.ts +218 -0
  151. package/tests/statements-combiner/libsql-statements-combiner.test.ts +1812 -0
  152. package/tests/statements-combiner/singlestore-statements-combiner.test.ts +882 -0
  153. package/tests/statements-combiner/sqlite-statements-combiner.test.ts +1211 -0
  154. package/tests/test/sqlite.test.ts +39 -0
  155. package/tests/testsinglestore.ts +29 -0
  156. package/tests/validations.test.ts +869 -0
  157. package/tests/wrap-param.test.ts +16 -0
  158. package/tsconfig.build.json +4 -0
  159. package/tsconfig.cli-types.json +9 -0
  160. package/tsconfig.json +28 -0
  161. package/vitest.config.ts +34 -0
@@ -0,0 +1,308 @@
1
+ import { sql } from 'drizzle-orm';
2
+ import { check, int, sqliteTable, text } from 'drizzle-orm/sqlite-core';
3
+ import { expect, test } from 'vitest';
4
+ import { diffTestSchemasSqlite } from './schemaDiffer';
5
+
6
+ test('create table with check', async (t) => {
7
+ const to = {
8
+ users: sqliteTable('users', {
9
+ id: int('id').primaryKey(),
10
+ age: int('age'),
11
+ }, (table) => ({
12
+ checkConstraint: check('some_check_name', sql`${table.age} > 21`),
13
+ })),
14
+ };
15
+
16
+ const { sqlStatements, statements } = await diffTestSchemasSqlite({}, to, []);
17
+
18
+ expect(statements.length).toBe(1);
19
+ expect(statements[0]).toStrictEqual({
20
+ type: 'sqlite_create_table',
21
+ tableName: 'users',
22
+ columns: [
23
+ {
24
+ name: 'id',
25
+ type: 'integer',
26
+ notNull: true,
27
+ primaryKey: true,
28
+ autoincrement: false,
29
+ },
30
+ {
31
+ name: 'age',
32
+ type: 'integer',
33
+ notNull: false,
34
+ primaryKey: false,
35
+ autoincrement: false,
36
+ },
37
+ ],
38
+ compositePKs: [],
39
+ checkConstraints: ['some_check_name;"users"."age" > 21'],
40
+ referenceData: [],
41
+ uniqueConstraints: [],
42
+ });
43
+
44
+ expect(sqlStatements.length).toBe(1);
45
+ expect(sqlStatements[0]).toBe(`CREATE TABLE \`users\` (
46
+ \t\`id\` integer PRIMARY KEY NOT NULL,
47
+ \t\`age\` integer,
48
+ \tCONSTRAINT "some_check_name" CHECK("users"."age" > 21)
49
+ );\n`);
50
+ });
51
+
52
+ test('add check contraint to existing table', async (t) => {
53
+ const to = {
54
+ users: sqliteTable('users', {
55
+ id: int('id').primaryKey(),
56
+ age: int('age'),
57
+ }, (table) => ({
58
+ checkConstraint: check('some_check_name', sql`${table.age} > 21`),
59
+ })),
60
+ };
61
+
62
+ const from = {
63
+ users: sqliteTable('users', {
64
+ id: int('id').primaryKey(),
65
+ age: int('age'),
66
+ }),
67
+ };
68
+
69
+ const { sqlStatements, statements } = await diffTestSchemasSqlite(from, to, []);
70
+
71
+ expect(statements.length).toBe(1);
72
+ expect(statements[0]).toStrictEqual({
73
+ columns: [
74
+ {
75
+ autoincrement: false,
76
+ generated: undefined,
77
+ name: 'id',
78
+ notNull: true,
79
+ primaryKey: true,
80
+ type: 'integer',
81
+ },
82
+ {
83
+ autoincrement: false,
84
+ generated: undefined,
85
+ name: 'age',
86
+ notNull: false,
87
+ primaryKey: false,
88
+ type: 'integer',
89
+ },
90
+ ],
91
+ compositePKs: [],
92
+ referenceData: [],
93
+ tableName: 'users',
94
+ type: 'recreate_table',
95
+ uniqueConstraints: [],
96
+ checkConstraints: ['some_check_name;"users"."age" > 21'],
97
+ });
98
+
99
+ expect(sqlStatements.length).toBe(6);
100
+ expect(sqlStatements[0]).toBe('PRAGMA foreign_keys=OFF;');
101
+ expect(sqlStatements[1]).toBe(`CREATE TABLE \`__new_users\` (
102
+ \t\`id\` integer PRIMARY KEY NOT NULL,
103
+ \t\`age\` integer,
104
+ \tCONSTRAINT "some_check_name" CHECK("__new_users"."age" > 21)
105
+ );\n`);
106
+ expect(sqlStatements[2]).toBe(`INSERT INTO \`__new_users\`("id", "age") SELECT "id", "age" FROM \`users\`;`);
107
+ expect(sqlStatements[3]).toBe(`DROP TABLE \`users\`;`);
108
+ expect(sqlStatements[4]).toBe(`ALTER TABLE \`__new_users\` RENAME TO \`users\`;`);
109
+ expect(sqlStatements[5]).toBe(`PRAGMA foreign_keys=ON;`);
110
+ });
111
+
112
+ test('drop check contraint to existing table', async (t) => {
113
+ const from = {
114
+ users: sqliteTable('users', {
115
+ id: int('id').primaryKey(),
116
+ age: int('age'),
117
+ }, (table) => ({
118
+ checkConstraint: check('some_check_name', sql`${table.age} > 21`),
119
+ })),
120
+ };
121
+
122
+ const to = {
123
+ users: sqliteTable('users', {
124
+ id: int('id').primaryKey(),
125
+ age: int('age'),
126
+ }),
127
+ };
128
+
129
+ const { sqlStatements, statements } = await diffTestSchemasSqlite(from, to, []);
130
+
131
+ expect(statements.length).toBe(1);
132
+ expect(statements[0]).toStrictEqual({
133
+ columns: [
134
+ {
135
+ autoincrement: false,
136
+ generated: undefined,
137
+ name: 'id',
138
+ notNull: true,
139
+ primaryKey: true,
140
+ type: 'integer',
141
+ },
142
+ {
143
+ autoincrement: false,
144
+ generated: undefined,
145
+ name: 'age',
146
+ notNull: false,
147
+ primaryKey: false,
148
+ type: 'integer',
149
+ },
150
+ ],
151
+ compositePKs: [],
152
+ referenceData: [],
153
+ tableName: 'users',
154
+ type: 'recreate_table',
155
+ uniqueConstraints: [],
156
+ checkConstraints: [],
157
+ });
158
+
159
+ expect(sqlStatements.length).toBe(6);
160
+ expect(sqlStatements[0]).toBe('PRAGMA foreign_keys=OFF;');
161
+ expect(sqlStatements[1]).toBe(`CREATE TABLE \`__new_users\` (
162
+ \t\`id\` integer PRIMARY KEY NOT NULL,
163
+ \t\`age\` integer
164
+ );\n`);
165
+ expect(sqlStatements[2]).toBe(`INSERT INTO \`__new_users\`("id", "age") SELECT "id", "age" FROM \`users\`;`);
166
+ expect(sqlStatements[3]).toBe(`DROP TABLE \`users\`;`);
167
+ expect(sqlStatements[4]).toBe(`ALTER TABLE \`__new_users\` RENAME TO \`users\`;`);
168
+ expect(sqlStatements[5]).toBe(`PRAGMA foreign_keys=ON;`);
169
+ });
170
+
171
+ test('rename check constraint', async (t) => {
172
+ const from = {
173
+ users: sqliteTable('users', {
174
+ id: int('id').primaryKey(),
175
+ age: int('age'),
176
+ }, (table) => ({
177
+ checkConstraint: check('some_check_name', sql`${table.age} > 21`),
178
+ })),
179
+ };
180
+
181
+ const to = {
182
+ users: sqliteTable('users', {
183
+ id: int('id').primaryKey(),
184
+ age: int('age'),
185
+ }, (table) => ({
186
+ checkConstraint: check('new_some_check_name', sql`${table.age} > 21`),
187
+ })),
188
+ };
189
+
190
+ const { sqlStatements, statements } = await diffTestSchemasSqlite(from, to, []);
191
+
192
+ expect(statements.length).toBe(1);
193
+ expect(statements[0]).toStrictEqual({
194
+ columns: [
195
+ {
196
+ autoincrement: false,
197
+ generated: undefined,
198
+ name: 'id',
199
+ notNull: true,
200
+ primaryKey: true,
201
+ type: 'integer',
202
+ },
203
+ {
204
+ autoincrement: false,
205
+ generated: undefined,
206
+ name: 'age',
207
+ notNull: false,
208
+ primaryKey: false,
209
+ type: 'integer',
210
+ },
211
+ ],
212
+ compositePKs: [],
213
+ referenceData: [],
214
+ tableName: 'users',
215
+ type: 'recreate_table',
216
+ uniqueConstraints: [],
217
+ checkConstraints: [`new_some_check_name;"users"."age" > 21`],
218
+ });
219
+
220
+ expect(sqlStatements.length).toBe(6);
221
+ expect(sqlStatements[0]).toBe('PRAGMA foreign_keys=OFF;');
222
+ expect(sqlStatements[1]).toBe(`CREATE TABLE \`__new_users\` (
223
+ \t\`id\` integer PRIMARY KEY NOT NULL,
224
+ \t\`age\` integer,
225
+ \tCONSTRAINT "new_some_check_name" CHECK("__new_users"."age" > 21)
226
+ );\n`);
227
+ expect(sqlStatements[2]).toBe(`INSERT INTO \`__new_users\`("id", "age") SELECT "id", "age" FROM \`users\`;`);
228
+ expect(sqlStatements[3]).toBe(`DROP TABLE \`users\`;`);
229
+ expect(sqlStatements[4]).toBe(`ALTER TABLE \`__new_users\` RENAME TO \`users\`;`);
230
+ expect(sqlStatements[5]).toBe(`PRAGMA foreign_keys=ON;`);
231
+ });
232
+
233
+ test('rename check constraint', async (t) => {
234
+ const from = {
235
+ users: sqliteTable('users', {
236
+ id: int('id').primaryKey(),
237
+ age: int('age'),
238
+ }, (table) => ({
239
+ checkConstraint: check('some_check_name', sql`${table.age} > 21`),
240
+ })),
241
+ };
242
+
243
+ const to = {
244
+ users: sqliteTable('users', {
245
+ id: int('id').primaryKey(),
246
+ age: int('age'),
247
+ }, (table) => ({
248
+ checkConstraint: check('some_check_name', sql`${table.age} > 10`),
249
+ })),
250
+ };
251
+
252
+ const { sqlStatements, statements } = await diffTestSchemasSqlite(from, to, []);
253
+
254
+ expect(statements.length).toBe(1);
255
+ expect(statements[0]).toStrictEqual({
256
+ columns: [
257
+ {
258
+ autoincrement: false,
259
+ generated: undefined,
260
+ name: 'id',
261
+ notNull: true,
262
+ primaryKey: true,
263
+ type: 'integer',
264
+ },
265
+ {
266
+ autoincrement: false,
267
+ generated: undefined,
268
+ name: 'age',
269
+ notNull: false,
270
+ primaryKey: false,
271
+ type: 'integer',
272
+ },
273
+ ],
274
+ compositePKs: [],
275
+ referenceData: [],
276
+ tableName: 'users',
277
+ type: 'recreate_table',
278
+ uniqueConstraints: [],
279
+ checkConstraints: [`some_check_name;"users"."age" > 10`],
280
+ });
281
+
282
+ expect(sqlStatements.length).toBe(6);
283
+ expect(sqlStatements[0]).toBe('PRAGMA foreign_keys=OFF;');
284
+ expect(sqlStatements[1]).toBe(`CREATE TABLE \`__new_users\` (
285
+ \t\`id\` integer PRIMARY KEY NOT NULL,
286
+ \t\`age\` integer,
287
+ \tCONSTRAINT "some_check_name" CHECK("__new_users"."age" > 10)
288
+ );\n`);
289
+ expect(sqlStatements[2]).toBe(`INSERT INTO \`__new_users\`("id", "age") SELECT "id", "age" FROM \`users\`;`);
290
+ expect(sqlStatements[3]).toBe(`DROP TABLE \`users\`;`);
291
+ expect(sqlStatements[4]).toBe(`ALTER TABLE \`__new_users\` RENAME TO \`users\`;`);
292
+ expect(sqlStatements[5]).toBe(`PRAGMA foreign_keys=ON;`);
293
+ });
294
+
295
+ test('create checks with same names', async (t) => {
296
+ const to = {
297
+ users: sqliteTable('users', {
298
+ id: int('id').primaryKey(),
299
+ age: int('age'),
300
+ name: text('name'),
301
+ }, (table) => ({
302
+ checkConstraint1: check('some_check_name', sql`${table.age} > 21`),
303
+ checkConstraint2: check('some_check_name', sql`${table.name} != 'Alex'`),
304
+ })),
305
+ };
306
+
307
+ await expect(diffTestSchemasSqlite({}, to, [])).rejects.toThrowError();
308
+ });