@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,306 @@
1
+ import { sql } from 'drizzle-orm';
2
+ import {
3
+ check,
4
+ integer,
5
+ numeric,
6
+ pgDomain,
7
+ pgEnum,
8
+ pgSchema,
9
+ pgTable,
10
+ serial,
11
+ text,
12
+ varchar,
13
+ } from 'drizzle-orm/pg-core';
14
+ import { expect, test } from 'vitest';
15
+ import { diffTestSchemas } from './schemaDiffer';
16
+
17
+ test('domains #1 create domain simple', async () => {
18
+ const to = {
19
+ domain: pgDomain('domain', text()),
20
+ };
21
+
22
+ const { statements, sqlStatements } = await diffTestSchemas({}, to, []);
23
+
24
+ expect(sqlStatements.length).toBe(1);
25
+ expect(sqlStatements[0]).toBe(`CREATE DOMAIN "public"."domain" AS text;`);
26
+ expect(statements.length).toBe(1);
27
+ expect(statements[0]).toStrictEqual({
28
+ type: 'create_domain',
29
+ name: 'domain',
30
+ schema: 'public',
31
+ baseType: 'text',
32
+ notNull: false,
33
+ defaultValue: undefined,
34
+ checkConstraints: [],
35
+ });
36
+ });
37
+
38
+ test('domains #2 create domain not null', async () => {
39
+ const folder = pgSchema('folder');
40
+ const to = {
41
+ domain: folder.domain('domain', varchar({ length: 256 }).notNull()),
42
+ };
43
+
44
+ const { statements, sqlStatements } = await diffTestSchemas({}, to, []);
45
+
46
+ expect(sqlStatements.length).toBe(1);
47
+ expect(sqlStatements[0]).toBe(`CREATE DOMAIN "folder"."domain" AS varchar(256) NOT NULL;`);
48
+ expect(statements.length).toBe(1);
49
+ expect(statements[0]).toStrictEqual({
50
+ type: 'create_domain',
51
+ name: 'domain',
52
+ schema: 'folder',
53
+ baseType: 'varchar(256)',
54
+ notNull: true,
55
+ defaultValue: undefined,
56
+ checkConstraints: [],
57
+ });
58
+ });
59
+
60
+ test('domains #3 drop domain simple', async () => {
61
+ const from = {
62
+ domain: pgDomain('domain', numeric()),
63
+ };
64
+
65
+ const { statements, sqlStatements } = await diffTestSchemas(from, {}, []);
66
+
67
+ expect(sqlStatements.length).toBe(1);
68
+ expect(sqlStatements[0]).toBe(`DROP DOMAIN "public"."domain" CASCADE;`);
69
+ expect(statements.length).toBe(1);
70
+ expect(statements[0]).toStrictEqual({
71
+ type: 'drop_domain',
72
+ name: 'domain',
73
+ schema: 'public',
74
+ });
75
+ });
76
+
77
+ test('domains #4 create domain with constraint', async () => {
78
+ const to = {
79
+ domain: pgDomain('domain', text().checkConstraint('custom_check', sql`VALUE ~ '^[A-Za-z]+$'`)),
80
+ };
81
+
82
+ const { statements, sqlStatements } = await diffTestSchemas({}, to, []);
83
+
84
+ expect(sqlStatements.length).toBe(1);
85
+ expect(sqlStatements[0]).toBe(
86
+ `CREATE DOMAIN "public"."domain" AS text CONSTRAINT custom_check CHECK (VALUE ~ '^[A-Za-z]+$');`,
87
+ );
88
+ expect(statements.length).toBe(1);
89
+ expect(statements[0]).toStrictEqual({
90
+ type: 'create_domain',
91
+ name: 'domain',
92
+ schema: 'public',
93
+ baseType: 'text',
94
+ notNull: false,
95
+ defaultValue: undefined,
96
+ checkConstraints: [
97
+ "custom_check;VALUE ~ '^[A-Za-z]+$'",
98
+ ],
99
+ });
100
+ });
101
+
102
+ test('domains #5 create domain with default value', async () => {
103
+ const to = {
104
+ domain: pgDomain('domain', integer().default(42)),
105
+ };
106
+
107
+ const { statements, sqlStatements } = await diffTestSchemas({}, to, []);
108
+
109
+ expect(sqlStatements.length).toBe(1);
110
+ expect(sqlStatements[0]).toBe(
111
+ `CREATE DOMAIN "public"."domain" AS integer DEFAULT '42';`,
112
+ );
113
+ expect(statements.length).toBe(1);
114
+ expect(statements[0]).toStrictEqual({
115
+ type: 'create_domain',
116
+ name: 'domain',
117
+ schema: 'public',
118
+ baseType: 'integer',
119
+ notNull: false,
120
+ defaultValue: 42,
121
+ checkConstraints: [],
122
+ });
123
+ });
124
+
125
+ test('domains #6 alter domain to add constraint', async () => {
126
+ const from = {
127
+ domain: pgDomain('domain', text()),
128
+ };
129
+
130
+ const to = {
131
+ domain: pgDomain('domain', text().checkConstraint('custom_check', sql`VALUE ~ '^[A-Za-z]+$'`)),
132
+ };
133
+
134
+ const { statements, sqlStatements } = await diffTestSchemas(from, to, []);
135
+
136
+ expect(sqlStatements.length).toBe(1);
137
+ expect(sqlStatements[0]).toBe(
138
+ `ALTER DOMAIN "public"."domain" ADD CONSTRAINT custom_check CHECK (VALUE ~ '^[A-Za-z]+$');`,
139
+ );
140
+ expect(statements.length).toBe(1);
141
+ expect(statements[0]).toStrictEqual({
142
+ type: 'alter_domain',
143
+ name: 'domain',
144
+ schema: 'public',
145
+ action: 'add_constraint',
146
+ checkConstraints: [
147
+ "custom_check;VALUE ~ '^[A-Za-z]+$'",
148
+ ],
149
+ });
150
+ });
151
+
152
+ test('domains #7 alter domain to drop constraint', async () => {
153
+ const from = {
154
+ domain: pgDomain('domain', text().checkConstraint('domain_check', sql`VALUE ~ '^[A-Za-z]+$'`)),
155
+ };
156
+
157
+ const to = {
158
+ domain: pgDomain('domain', text()),
159
+ };
160
+
161
+ const { statements, sqlStatements } = await diffTestSchemas(from, to, []);
162
+
163
+ expect(sqlStatements.length).toBe(1);
164
+ expect(sqlStatements[0]).toBe(
165
+ `ALTER DOMAIN "public"."domain" DROP CONSTRAINT domain_check;`,
166
+ );
167
+ expect(statements.length).toBe(1);
168
+ expect(statements[0]).toStrictEqual({
169
+ type: 'alter_domain',
170
+ name: 'domain',
171
+ schema: 'public',
172
+ action: 'drop_constraint',
173
+ checkConstraints: [
174
+ "domain_check;VALUE ~ '^[A-Za-z]+$'",
175
+ ],
176
+ });
177
+ });
178
+
179
+ test('domains #8 alter domain to set not null', async () => {
180
+ const from = {
181
+ domain: pgDomain('domain', text()),
182
+ };
183
+
184
+ const to = {
185
+ domain: pgDomain('domain', text().notNull()),
186
+ };
187
+
188
+ const { statements, sqlStatements } = await diffTestSchemas(from, to, []);
189
+
190
+ expect(sqlStatements.length).toBe(1);
191
+ expect(sqlStatements[0]).toBe(
192
+ `ALTER DOMAIN "public"."domain" SET NOT NULL;`,
193
+ );
194
+ expect(statements.length).toBe(1);
195
+ expect(statements[0]).toStrictEqual({
196
+ type: 'alter_domain',
197
+ name: 'domain',
198
+ schema: 'public',
199
+ action: 'set_not_null',
200
+ checkConstraints: [],
201
+ defaultValue: undefined,
202
+ });
203
+ });
204
+
205
+ test('domains #9 alter domain to drop not null', async () => {
206
+ const from = {
207
+ domain: pgDomain('domain', text().notNull()),
208
+ };
209
+
210
+ const to = {
211
+ domain: pgDomain('domain', text()),
212
+ };
213
+
214
+ const { statements, sqlStatements } = await diffTestSchemas(from, to, []);
215
+
216
+ expect(sqlStatements.length).toBe(1);
217
+ expect(sqlStatements[0]).toBe(
218
+ `ALTER DOMAIN "public"."domain" DROP NOT NULL;`,
219
+ );
220
+ expect(statements.length).toBe(1);
221
+ expect(statements[0]).toStrictEqual({
222
+ type: 'alter_domain',
223
+ name: 'domain',
224
+ schema: 'public',
225
+ action: 'drop_not_null',
226
+ checkConstraints: [],
227
+ defaultValue: undefined,
228
+ });
229
+ });
230
+
231
+ test('domains #10 alter domain to set default value', async () => {
232
+ const from = {
233
+ domain: pgDomain('domain', text()),
234
+ };
235
+
236
+ const to = {
237
+ domain: pgDomain('domain', text().default('default_value')),
238
+ };
239
+
240
+ const { statements, sqlStatements } = await diffTestSchemas(from, to, []);
241
+
242
+ expect(sqlStatements.length).toBe(1);
243
+ expect(sqlStatements[0]).toBe(
244
+ `ALTER DOMAIN "public"."domain" SET DEFAULT default_value;`,
245
+ );
246
+ expect(statements.length).toBe(1);
247
+ expect(statements[0]).toStrictEqual({
248
+ type: 'alter_domain',
249
+ name: 'domain',
250
+ schema: 'public',
251
+ action: 'set_default',
252
+ defaultValue: 'default_value',
253
+ checkConstraints: [],
254
+ });
255
+ });
256
+
257
+ test('domains #11 alter domain to drop default value', async () => {
258
+ const from = {
259
+ domain: pgDomain('domain', text().default('default_value')),
260
+ };
261
+
262
+ const to = {
263
+ domain: pgDomain('domain', text()),
264
+ };
265
+
266
+ const { statements, sqlStatements } = await diffTestSchemas(from, to, []);
267
+
268
+ expect(sqlStatements.length).toBe(1);
269
+ expect(sqlStatements[0]).toBe(
270
+ `ALTER DOMAIN "public"."domain" DROP DEFAULT;`,
271
+ );
272
+ expect(statements.length).toBe(1);
273
+ expect(statements[0]).toStrictEqual({
274
+ type: 'alter_domain',
275
+ name: 'domain',
276
+ schema: 'public',
277
+ action: 'drop_default',
278
+ checkConstraints: [],
279
+ defaultValue: undefined,
280
+ });
281
+ });
282
+
283
+ test('domains #12 create domain with unnamed constraint', async () => {
284
+ const to = {
285
+ domain: pgDomain('domain', text().checkConstraint(sql`VALUE ~ '^[A-Za-z]+$'`)),
286
+ };
287
+
288
+ const { statements, sqlStatements } = await diffTestSchemas({}, to, []);
289
+
290
+ expect(sqlStatements.length).toBe(1);
291
+ expect(sqlStatements[0]).toBe(
292
+ `CREATE DOMAIN "public"."domain" AS text CHECK (VALUE ~ '^[A-Za-z]+$');`,
293
+ );
294
+ expect(statements.length).toBe(1);
295
+ expect(statements[0]).toStrictEqual({
296
+ type: 'create_domain',
297
+ name: 'domain',
298
+ schema: 'public',
299
+ baseType: 'text',
300
+ notNull: false,
301
+ defaultValue: undefined,
302
+ checkConstraints: [
303
+ ";VALUE ~ '^[A-Za-z]+$'",
304
+ ],
305
+ });
306
+ });