@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,218 @@
1
+ import { sql } from 'drizzle-orm';
2
+ import { int, sqliteTable, sqliteView } from 'drizzle-orm/sqlite-core';
3
+ import { expect, test } from 'vitest';
4
+ import { diffTestSchemasSqlite } from './schemaDiffer';
5
+
6
+ test('create view', async () => {
7
+ const users = sqliteTable('users', { id: int('id').default(1) });
8
+ const view = sqliteView('view').as((qb) => qb.select().from(users));
9
+ const to = {
10
+ users: users,
11
+ testView: view,
12
+ };
13
+
14
+ const { statements, sqlStatements } = await diffTestSchemasSqlite({}, to, []);
15
+
16
+ expect(statements.length).toBe(2);
17
+ expect(statements[0]).toStrictEqual({
18
+ type: 'sqlite_create_table',
19
+ tableName: 'users',
20
+ columns: [{
21
+ autoincrement: false,
22
+ default: 1,
23
+ name: 'id',
24
+ type: 'integer',
25
+ primaryKey: false,
26
+ notNull: false,
27
+ }],
28
+ compositePKs: [],
29
+ uniqueConstraints: [],
30
+ referenceData: [],
31
+ checkConstraints: [],
32
+ });
33
+ expect(statements[1]).toStrictEqual({
34
+ type: 'sqlite_create_view',
35
+ name: 'view',
36
+ definition: 'select "id" from "users"',
37
+ });
38
+
39
+ expect(sqlStatements.length).toBe(2);
40
+ expect(sqlStatements[0]).toBe(`CREATE TABLE \`users\` (
41
+ \t\`id\` integer DEFAULT 1
42
+ );\n`);
43
+ expect(sqlStatements[1]).toBe(`CREATE VIEW \`view\` AS select "id" from "users";`);
44
+ });
45
+
46
+ test('drop view', async () => {
47
+ const users = sqliteTable('users', {
48
+ id: int('id').primaryKey({ autoIncrement: true }),
49
+ });
50
+
51
+ const from = {
52
+ users: users,
53
+ testView: sqliteView('view', { id: int('id') }).as(sql`SELECT * FROM users`),
54
+ };
55
+ const to = {
56
+ users,
57
+ };
58
+
59
+ const { statements, sqlStatements } = await diffTestSchemasSqlite(from, to, []);
60
+
61
+ expect(statements.length).toBe(1);
62
+ expect(statements[0]).toStrictEqual({
63
+ name: 'view',
64
+ type: 'drop_view',
65
+ });
66
+
67
+ expect(sqlStatements.length).toBe(1);
68
+ expect(sqlStatements[0]).toBe(
69
+ `DROP VIEW \`view\`;`,
70
+ );
71
+ });
72
+
73
+ test('alter view', async () => {
74
+ const users = sqliteTable('users', {
75
+ id: int('id').primaryKey({ autoIncrement: true }),
76
+ });
77
+
78
+ const from = {
79
+ users: users,
80
+ testView: sqliteView('view', { id: int('id') }).as(sql`SELECT * FROM users`),
81
+ };
82
+ const to = {
83
+ users,
84
+ testView: sqliteView('view', { id: int('id') }).as(sql`SELECT * FROM users WHERE users.id = 1`),
85
+ };
86
+ const { statements, sqlStatements } = await diffTestSchemasSqlite(from, to, []);
87
+
88
+ expect(statements.length).toBe(2);
89
+ expect(statements[0]).toStrictEqual({
90
+ name: 'view',
91
+ type: 'drop_view',
92
+ });
93
+ expect(statements[1]).toStrictEqual({
94
+ name: 'view',
95
+ type: 'sqlite_create_view',
96
+ definition: 'SELECT * FROM users WHERE users.id = 1',
97
+ });
98
+
99
+ expect(sqlStatements.length).toBe(2);
100
+ expect(sqlStatements[0]).toBe(
101
+ `DROP VIEW \`view\`;`,
102
+ );
103
+ expect(sqlStatements[1]).toBe(
104
+ `CREATE VIEW \`view\` AS SELECT * FROM users WHERE users.id = 1;`,
105
+ );
106
+ });
107
+
108
+ test('create view with existing flag', async () => {
109
+ const view = sqliteView('view', {}).existing();
110
+ const to = {
111
+ testView: view,
112
+ };
113
+
114
+ const { statements, sqlStatements } = await diffTestSchemasSqlite({}, to, []);
115
+
116
+ expect(statements.length).toBe(0);
117
+ expect(sqlStatements.length).toBe(0);
118
+ });
119
+
120
+ test('drop view with existing flag', async () => {
121
+ const users = sqliteTable('users', {
122
+ id: int('id').primaryKey({ autoIncrement: true }),
123
+ });
124
+
125
+ const from = {
126
+ users: users,
127
+ testView: sqliteView('view', { id: int('id') }).existing(),
128
+ };
129
+ const to = {
130
+ users,
131
+ };
132
+
133
+ const { statements, sqlStatements } = await diffTestSchemasSqlite(from, to, []);
134
+
135
+ expect(statements.length).toBe(0);
136
+ expect(sqlStatements.length).toBe(0);
137
+ });
138
+
139
+ test('rename view with existing flag', async () => {
140
+ const users = sqliteTable('users', {
141
+ id: int('id').primaryKey({ autoIncrement: true }),
142
+ });
143
+
144
+ const from = {
145
+ users: users,
146
+ testView: sqliteView('view', { id: int('id') }).existing(),
147
+ };
148
+ const to = {
149
+ users,
150
+ testView: sqliteView('new_view', { id: int('id') }).existing(),
151
+ };
152
+ const { statements, sqlStatements } = await diffTestSchemasSqlite(from, to, ['view->new_view']);
153
+
154
+ expect(statements.length).toBe(0);
155
+ expect(sqlStatements.length).toBe(0);
156
+ });
157
+
158
+ test('rename view and drop existing flag', async () => {
159
+ const users = sqliteTable('users', {
160
+ id: int('id').primaryKey({ autoIncrement: true }),
161
+ });
162
+
163
+ const from = {
164
+ users: users,
165
+ testView: sqliteView('view', { id: int('id') }).existing(),
166
+ };
167
+ const to = {
168
+ users,
169
+ testView: sqliteView('new_view', { id: int('id') }).as(sql`SELECT * FROM users`),
170
+ };
171
+ const { statements, sqlStatements } = await diffTestSchemasSqlite(from, to, ['view->new_view']);
172
+
173
+ expect(statements.length).toBe(2);
174
+ expect(statements[0]).toStrictEqual({
175
+ name: 'view',
176
+ type: 'drop_view',
177
+ });
178
+ expect(statements[1]).toStrictEqual({
179
+ type: 'sqlite_create_view',
180
+ name: 'new_view',
181
+ definition: 'SELECT * FROM users',
182
+ });
183
+
184
+ expect(sqlStatements.length).toBe(2);
185
+ expect(sqlStatements[0]).toBe(`DROP VIEW \`view\`;`);
186
+ expect(sqlStatements[1]).toBe(`CREATE VIEW \`new_view\` AS SELECT * FROM users;`);
187
+ });
188
+
189
+ test('rename view and alter ".as"', async () => {
190
+ const users = sqliteTable('users', {
191
+ id: int('id').primaryKey({ autoIncrement: true }),
192
+ });
193
+
194
+ const from = {
195
+ users: users,
196
+ testView: sqliteView('view', { id: int('id') }).as(sql`SELECT * FROM users`),
197
+ };
198
+ const to = {
199
+ users,
200
+ testView: sqliteView('new_view', { id: int('id') }).as(sql`SELECT * FROM users WHERE 1=1`),
201
+ };
202
+ const { statements, sqlStatements } = await diffTestSchemasSqlite(from, to, ['view->new_view']);
203
+
204
+ expect(statements.length).toBe(2);
205
+ expect(statements[0]).toStrictEqual({
206
+ name: 'view',
207
+ type: 'drop_view',
208
+ });
209
+ expect(statements[1]).toStrictEqual({
210
+ type: 'sqlite_create_view',
211
+ name: 'new_view',
212
+ definition: 'SELECT * FROM users WHERE 1=1',
213
+ });
214
+
215
+ expect(sqlStatements.length).toBe(2);
216
+ expect(sqlStatements[0]).toBe('DROP VIEW `view`;');
217
+ expect(sqlStatements[1]).toBe(`CREATE VIEW \`new_view\` AS SELECT * FROM users WHERE 1=1;`);
218
+ });