drizzle-kit 0.9.38 → 0.9.41

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 (136) hide show
  1. package/.eslintrc +21 -0
  2. package/LICENSE +674 -0
  3. package/package.json +17 -16
  4. package/pnpm-lock.yaml +2209 -0
  5. package/readme.rst +2 -0
  6. package/src/cli/commands/migrate.ts +79 -0
  7. package/src/cli/components-api/index.ts +287 -0
  8. package/src/cli/enq.ts +41 -0
  9. package/src/cli/index.ts +14 -0
  10. package/src/cli/machines/resolveColumnsMachine.ts +173 -0
  11. package/src/cli/machines/resolveTablesMachine.ts +167 -0
  12. package/src/cli/utils/formatDataForTable.ts +29 -0
  13. package/src/cli/utils/valuesForPrompts.ts +35 -0
  14. package/src/diff.ts +37 -0
  15. package/src/jsonDiffer.js +197 -115
  16. package/src/jsonStatements.ts +482 -0
  17. package/src/migrationPreparator.ts +44 -0
  18. package/src/serializer/factory.ts +415 -0
  19. package/src/serializer/index.ts +23 -0
  20. package/src/simulator.ts +155 -0
  21. package/src/snapshotsDiffer.ts +267 -0
  22. package/src/sqlgenerator.ts +323 -0
  23. package/src/tests/columnsMachine.test.ts +338 -0
  24. package/src/tests/tablesMachine.test.ts +339 -0
  25. package/tests/alters/index.test.ts +22 -0
  26. package/tests/alters/suite1/_patch.yaml +16 -0
  27. package/tests/alters/suite1/from.ts +16 -0
  28. package/tests/alters/suite1/to.ts +15 -0
  29. package/tsconfig.json +7 -0
  30. package/dev/data/column_rename/with_talbe_rename/new.js +0 -15
  31. package/dev/data/column_rename/with_talbe_rename/new.js.map +0 -1
  32. package/dev/data/column_rename/with_talbe_rename/prev.js +0 -15
  33. package/dev/data/column_rename/with_talbe_rename/prev.js.map +0 -1
  34. package/dev/data/column_rename/without_table_rename/v1/usersTable.js +0 -15
  35. package/dev/data/column_rename/without_table_rename/v1/usersTable.js.map +0 -1
  36. package/dev/data/column_rename/without_table_rename/v2/usersTable.js +0 -15
  37. package/dev/data/column_rename/without_table_rename/v2/usersTable.js.map +0 -1
  38. package/dev/data/jobs/from/from.js +0 -22
  39. package/dev/data/jobs/from/from.js.map +0 -1
  40. package/dev/data/jobs/to/to.js +0 -23
  41. package/dev/data/jobs/to/to.js.map +0 -1
  42. package/dev/data/leha/UsersTable.js +0 -36
  43. package/dev/data/leha/UsersTable.js.map +0 -1
  44. package/dev/data/leha/types.js +0 -13
  45. package/dev/data/leha/types.js.map +0 -1
  46. package/dev/data/v1/authOtpTable.js +0 -20
  47. package/dev/data/v1/authOtpTable.js.map +0 -1
  48. package/dev/data/v1/deletedTable.js +0 -14
  49. package/dev/data/v1/deletedTable.js.map +0 -1
  50. package/dev/data/v1/types.js +0 -9
  51. package/dev/data/v1/types.js.map +0 -1
  52. package/dev/data/v1/usersTable.js +0 -18
  53. package/dev/data/v1/usersTable.js.map +0 -1
  54. package/dev/data/v2/authOtpTable.js +0 -29
  55. package/dev/data/v2/authOtpTable.js.map +0 -1
  56. package/dev/data/v2/cityTable.js +0 -15
  57. package/dev/data/v2/cityTable.js.map +0 -1
  58. package/dev/data/v2/types.js +0 -13
  59. package/dev/data/v2/types.js.map +0 -1
  60. package/dev/data/v2/usersTable.js +0 -21
  61. package/dev/data/v2/usersTable.js.map +0 -1
  62. package/dev/data/v3/authOtpTable.js +0 -27
  63. package/dev/data/v3/authOtpTable.js.map +0 -1
  64. package/dev/data/v3/cityTable.js +0 -23
  65. package/dev/data/v3/cityTable.js.map +0 -1
  66. package/dev/data/v3/types.js +0 -13
  67. package/dev/data/v3/types.js.map +0 -1
  68. package/dev/data/v3/usersTable.js +0 -22
  69. package/dev/data/v3/usersTable.js.map +0 -1
  70. package/dev/data/v4/multi.js +0 -46
  71. package/dev/data/v4/multi.js.map +0 -1
  72. package/dev/diff.js +0 -28
  73. package/dev/diff.js.map +0 -1
  74. package/dev/factory.js +0 -78
  75. package/dev/factory.js.map +0 -1
  76. package/dev/fstest.js +0 -45
  77. package/dev/fstest.js.map +0 -1
  78. package/dev/index.js +0 -16
  79. package/dev/index.js.map +0 -1
  80. package/dev/prepare-snapshot.js +0 -19
  81. package/dev/prepare-snapshot.js.map +0 -1
  82. package/dev/quokka.js +0 -90
  83. package/dev/quokka.js.map +0 -1
  84. package/dev/serialiser.js +0 -30
  85. package/dev/serialiser.js.map +0 -1
  86. package/dev/simulate.js +0 -29
  87. package/dev/simulate.js.map +0 -1
  88. package/dev/test-build.js +0 -32
  89. package/dev/test-build.js.map +0 -1
  90. package/dev/testFactory.js +0 -42
  91. package/dev/testFactory.js.map +0 -1
  92. package/dev/testiko.js +0 -57
  93. package/dev/testiko.js.map +0 -1
  94. package/dev/yuup.js +0 -36
  95. package/dev/yuup.js.map +0 -1
  96. package/index.js +0 -168169
  97. package/index.js.map +0 -7
  98. package/jest.config.js +0 -7
  99. package/jest.config.js.map +0 -1
  100. package/src/cli/commands/migrate.js +0 -64
  101. package/src/cli/commands/migrate.js.map +0 -1
  102. package/src/cli/components-api/index.js +0 -205
  103. package/src/cli/components-api/index.js.map +0 -1
  104. package/src/cli/enq.js +0 -38
  105. package/src/cli/enq.js.map +0 -1
  106. package/src/cli/index.js +0 -15
  107. package/src/cli/index.js.map +0 -1
  108. package/src/cli/machines/resolveColumnsMachine.js +0 -116
  109. package/src/cli/machines/resolveColumnsMachine.js.map +0 -1
  110. package/src/cli/machines/resolveTablesMachine.js +0 -114
  111. package/src/cli/machines/resolveTablesMachine.js.map +0 -1
  112. package/src/cli/utils/formatDataForTable.js +0 -21
  113. package/src/cli/utils/formatDataForTable.js.map +0 -1
  114. package/src/cli/utils/valuesForPrompts.js +0 -38
  115. package/src/cli/utils/valuesForPrompts.js.map +0 -1
  116. package/src/diff.js +0 -28
  117. package/src/diff.js.map +0 -1
  118. package/src/jsonDiffer.js.map +0 -1
  119. package/src/jsonStatements.js +0 -197
  120. package/src/jsonStatements.js.map +0 -1
  121. package/src/migrationPreparator.js +0 -37
  122. package/src/migrationPreparator.js.map +0 -1
  123. package/src/serializer/factory.js +0 -113
  124. package/src/serializer/factory.js.map +0 -1
  125. package/src/serializer/index.js +0 -25
  126. package/src/serializer/index.js.map +0 -1
  127. package/src/simulator.js +0 -105
  128. package/src/simulator.js.map +0 -1
  129. package/src/snapshotsDiffer.js +0 -127
  130. package/src/snapshotsDiffer.js.map +0 -1
  131. package/src/sqlgenerator.js +0 -241
  132. package/src/sqlgenerator.js.map +0 -1
  133. package/src/tests/columnsMachine.test.js +0 -270
  134. package/src/tests/columnsMachine.test.js.map +0 -1
  135. package/src/tests/tablesMachine.test.js +0 -272
  136. package/src/tests/tablesMachine.test.js.map +0 -1
@@ -0,0 +1,338 @@
1
+ import createResolveColumnsMachine from '../cli/machines/resolveColumnsMachine';
2
+ import { interpret } from 'xstate';
3
+ import { log } from "console";
4
+
5
+
6
+ test('Dry run, empty data', () => {
7
+ const resolveTablesMachine = createResolveColumnsMachine({ name: 'Test', deleted: [], added: [] });
8
+ const service = interpret(resolveTablesMachine).start();
9
+
10
+ service.subscribe((state) => {
11
+ const {
12
+ created,
13
+ renamed,
14
+ deleted,
15
+ } = state.context;
16
+
17
+ if (state.changed && state.matches('done')) {
18
+ expect({
19
+ created,
20
+ renamed,
21
+ deleted,
22
+ }).toStrictEqual({
23
+ created: [],
24
+ renamed: [],
25
+ deleted: [],
26
+ });
27
+
28
+ service.stop();
29
+ }
30
+ });
31
+ });
32
+
33
+ test('Dry run, empty missing', () => {
34
+ const resolveTablesMachine = createResolveColumnsMachine({ name: 'Test', deleted: [], added: [{ name: 'new1' }, { name: 'new2' }] });
35
+ const service = interpret(resolveTablesMachine).start();
36
+
37
+ service.subscribe((state) => {
38
+ const {
39
+ created,
40
+ renamed,
41
+ deleted,
42
+ } = state.context;
43
+
44
+ if (state.changed && state.matches('done')) {
45
+ expect({
46
+ created,
47
+ renamed,
48
+ deleted,
49
+ }).toStrictEqual({
50
+ created: [{ name: 'new1' }, { name: 'new2' }],
51
+ renamed: [],
52
+ deleted: [],
53
+ });
54
+
55
+ service.stop();
56
+ }
57
+ });
58
+ });
59
+
60
+ test('Dry run, empty new', () => {
61
+ const resolveTablesMachine = createResolveColumnsMachine({ name: 'Test', deleted: [{ name: 'missing1' }, { name: 'missing2' }], added: [] });
62
+ const service = interpret(resolveTablesMachine).start();
63
+
64
+ service.subscribe((state) => {
65
+ const {
66
+ created,
67
+ renamed,
68
+ deleted,
69
+ } = state.context;
70
+
71
+ if (state.changed && state.matches('done')) {
72
+ expect({
73
+ created,
74
+ renamed,
75
+ deleted,
76
+ }).toStrictEqual({
77
+ created: [],
78
+ renamed: [],
79
+ deleted: [{ name: 'missing1' }, { name: 'missing2' }],
80
+ });
81
+
82
+ service.stop();
83
+ }
84
+ });
85
+ });
86
+
87
+ test('Delete 2 columns and resolve remaining new columns', () => {
88
+ const resolveTablesMachine = createResolveColumnsMachine({
89
+ name: 'Test',
90
+ deleted: [
91
+ { name: 'missing1' },
92
+ { name: 'missing2' }
93
+ ],
94
+ added: [{ name: 'new1' }, { name: 'new2' }]
95
+ });
96
+ const service = interpret(resolveTablesMachine).start();
97
+
98
+ service.subscribe((state) => {
99
+ const {
100
+ created,
101
+ renamed,
102
+ deleted,
103
+ } = state.context;
104
+
105
+ if (state.changed && state.matches('done')) {
106
+ expect({
107
+ created,
108
+ renamed,
109
+ deleted,
110
+ }).toStrictEqual({
111
+ created: [{ name: 'new1' }, { name: 'new2' }],
112
+ renamed: [],
113
+ deleted: [{ name: 'missing1' }, { name: 'missing2' }],
114
+ });
115
+
116
+ service.stop();
117
+ }
118
+ });
119
+
120
+ service.send({ type: 'CHOICE_ITEM', itemIndex: 0 });
121
+ service.send({ type: 'DELETED' });
122
+ service.send({ type: 'CONFIRM' });
123
+ service.send({ type: 'CHOICE_ITEM', itemIndex: 0 });
124
+ service.send({ type: 'DELETED' });
125
+ service.send({ type: 'CONFIRM' });
126
+ });
127
+
128
+ test('Rename 1 column', (done) => {
129
+ const machine = createResolveColumnsMachine({
130
+ name: 'Table',
131
+ deleted: [
132
+ { name: 'from' },
133
+ ],
134
+ added: [
135
+ { name: 'to' },
136
+ ]
137
+ });
138
+
139
+ const service = interpret(machine).start();
140
+
141
+ service.subscribe((state) => {
142
+ const {
143
+ created,
144
+ renamed,
145
+ deleted,
146
+ } = state.context;
147
+
148
+ if (state.changed && state.matches('done')) {
149
+ expect({
150
+ created,
151
+ renamed,
152
+ deleted,
153
+ }).toStrictEqual({
154
+ created: [],
155
+ renamed: [
156
+ { from: { name: 'from' }, to: { name: 'to' } },
157
+ ],
158
+ deleted: []
159
+ });
160
+
161
+ service.stop();
162
+ done()
163
+ }
164
+ });
165
+
166
+ service.send({ type: 'CHOICE_ITEM', itemIndex: 0 });
167
+ service.send({ type: 'RENAMED' });
168
+ service.send({ type: 'CHOICE_NEW_ITEM', itemIndex: 0 });
169
+ service.send({ type: 'CONFIRM' });
170
+ });
171
+
172
+ test('Rename 2 columns and resolve remaining missing columns', () => {
173
+ const resolveTablesMachine = createResolveColumnsMachine({
174
+ name: 'Test',
175
+ deleted: [
176
+ { name: 'missing1' },
177
+ { name: 'missing2' },
178
+ { name: 'missing3' },
179
+ ],
180
+ added: [
181
+ { name: 'new1' },
182
+ { name: 'new2' }
183
+ ]
184
+ });
185
+ const service = interpret(resolveTablesMachine).start();
186
+
187
+ service.subscribe((state) => {
188
+ const {
189
+ created,
190
+ renamed,
191
+ deleted,
192
+ } = state.context;
193
+
194
+ if (state.changed && state.matches('done')) {
195
+ expect({
196
+ created,
197
+ renamed,
198
+ deleted,
199
+ }).toStrictEqual({
200
+ created: [],
201
+ renamed: [
202
+ { from: { name: 'missing1' }, to: { name: 'new1' } },
203
+ { from: { name: 'missing2' }, to: { name: 'new2' } }
204
+ ],
205
+ deleted: [{ name: 'missing3' }]
206
+ });
207
+
208
+ service.stop();
209
+ }
210
+ });
211
+
212
+ service.send({ type: 'CHOICE_ITEM', itemIndex: 0 });
213
+ service.send({ type: 'RENAMED' });
214
+ service.send({ type: 'CHOICE_NEW_ITEM', itemIndex: 0 });
215
+ service.send({ type: 'CONFIRM' });
216
+ service.send({ type: 'CHOICE_ITEM', itemIndex: 0 });
217
+ service.send({ type: 'RENAMED' });
218
+ service.send({ type: 'CHOICE_NEW_ITEM', itemIndex: 0 });
219
+ service.send({ type: 'CONFIRM' });
220
+ });
221
+
222
+ test('Rename 2 columns and delete 2 columns', () => {
223
+ const resolveTablesMachine = createResolveColumnsMachine({
224
+ name: 'Test',
225
+ deleted: [
226
+ { name: 'missing1' },
227
+ { name: 'missing2' },
228
+ { name: 'missing3' },
229
+ { name: 'missing4' },
230
+ ],
231
+ added: [
232
+ { name: 'new1' },
233
+ { name: 'new2' },
234
+ ]
235
+ });
236
+ const service = interpret(resolveTablesMachine).start();
237
+
238
+ service.subscribe((state) => {
239
+ const {
240
+ created,
241
+ renamed,
242
+ deleted,
243
+ } = state.context;
244
+
245
+ if (state.changed && state.matches('done')) {
246
+ expect({
247
+ created,
248
+ renamed,
249
+ deleted
250
+ }).toStrictEqual({
251
+ created: [],
252
+ renamed: [
253
+ { from: { name: 'missing1' }, to: { name: 'new1' } },
254
+ { from: { name: 'missing3' }, to: { name: 'new2' } }
255
+ ],
256
+ deleted: [{ name: 'missing2' }, { name: 'missing4' }]
257
+ });
258
+
259
+ service.stop();
260
+ }
261
+ });
262
+
263
+ service.send({ type: 'CHOICE_ITEM', itemIndex: 0 });
264
+ service.send({ type: 'RENAMED' });
265
+ service.send({ type: 'CHOICE_NEW_ITEM', itemIndex: 0 });
266
+ service.send({ type: 'CONFIRM' });
267
+ service.send({ type: 'CHOICE_ITEM', itemIndex: 0 });
268
+ service.send({ type: 'DELETED' });
269
+ service.send({ type: 'CONFIRM' });
270
+ service.send({ type: 'CHOICE_ITEM', itemIndex: 0 });
271
+ service.send({ type: 'RENAMED' });
272
+ service.send({ type: 'CHOICE_NEW_ITEM', itemIndex: 0 });
273
+ service.send({ type: 'CONFIRM' });
274
+ service.send({ type: 'CHOICE_ITEM', itemIndex: 0 });
275
+ service.send({ type: 'DELETED' });
276
+ service.send({ type: 'CONFIRM' });
277
+ });
278
+
279
+ test('Delete 2 columns, rename 2 columns and resolve remaining missing', () => {
280
+ const resolveTablesMachine = createResolveColumnsMachine({
281
+ name: 'Test',
282
+ deleted: [
283
+ { name: 'missing1' },
284
+ { name: 'missing2' },
285
+ { name: 'missing3' },
286
+ { name: 'missing4' },
287
+ { name: 'missing5' },
288
+ { name: 'missing6' },
289
+ ],
290
+ added: [
291
+ { name: 'new1' },
292
+ { name: 'new2' },
293
+ ]
294
+ });
295
+ const service = interpret(resolveTablesMachine).start();
296
+
297
+ service.subscribe((state) => {
298
+ const {
299
+ created,
300
+ renamed,
301
+ deleted,
302
+ } = state.context;
303
+
304
+ if (state.changed && state.matches('done')) {
305
+ expect({
306
+ created,
307
+ renamed,
308
+ deleted,
309
+ }).toStrictEqual({
310
+ created: [],
311
+ renamed: [
312
+ { from: { name: 'missing2' }, to: { name: 'new1' } },
313
+ { from: { name: 'missing4' }, to: { name: 'new2' } }
314
+ ],
315
+ deleted: [{ name: 'missing1' }, { name: 'missing3' }, { name: 'missing5' }, { name: 'missing6' }]
316
+ });
317
+
318
+ service.stop();
319
+ }
320
+ });
321
+
322
+ service.send({ type: 'CHOICE_ITEM', itemIndex: 0 });
323
+ service.send({ type: 'DELETED' });
324
+ service.send({ type: 'CONFIRM' });
325
+ service.send({ type: 'CHOICE_ITEM', itemIndex: 0 });
326
+ service.send({ type: 'RENAMED' });
327
+ service.send({ type: 'CHOICE_NEW_ITEM', itemIndex: 0 });
328
+ service.send({ type: 'CONFIRM' });
329
+ service.send({ type: 'CHOICE_ITEM', itemIndex: 0 });
330
+ service.send({ type: 'DELETED' });
331
+ service.send({ type: 'CONFIRM' });
332
+ service.send({ type: 'CHOICE_ITEM', itemIndex: 0 });
333
+ service.send({ type: 'RENAMED' });
334
+ service.send({ type: 'CHOICE_NEW_ITEM', itemIndex: 0 });
335
+ service.send({ type: 'CONFIRM' });
336
+ });
337
+
338
+ export { };
@@ -0,0 +1,339 @@
1
+ import createResolveTablesMachine from '../cli/machines/resolveTablesMachine';
2
+ import { log } from "console";
3
+
4
+ import { interpret } from 'xstate';
5
+
6
+ test('Dry run, empty data', (done) => {
7
+ const resolveTablesMachine = createResolveTablesMachine({ missingTables: [], newTables: [] });
8
+ const service = interpret(resolveTablesMachine).start();
9
+
10
+ service.subscribe((state) => {
11
+ const {
12
+ createdTables,
13
+ renamedTables,
14
+ deletedTables,
15
+ } = state.context;
16
+
17
+ if (state.matches('done')) {
18
+ expect({
19
+ created: createdTables,
20
+ renamed: renamedTables,
21
+ deleted: deletedTables,
22
+ }).toStrictEqual({
23
+ created: [],
24
+ renamed: [],
25
+ deleted: [],
26
+ });
27
+
28
+ service.stop();
29
+ done()
30
+ }
31
+ });
32
+ });
33
+
34
+ test('Dry run, empty missing', (done) => {
35
+ const resolveTablesMachine = createResolveTablesMachine({ missingTables: [], newTables: [{ name: 'new1' }, { name: 'new2' }] });
36
+ const service = interpret(resolveTablesMachine).start();
37
+
38
+ service.subscribe((state) => {
39
+ const {
40
+ createdTables,
41
+ renamedTables,
42
+ deletedTables,
43
+ } = state.context;
44
+
45
+ if (state.changed && state.matches('done')) {
46
+ expect({
47
+ created: createdTables,
48
+ renamed: renamedTables,
49
+ deleted: deletedTables,
50
+ }).toStrictEqual({
51
+ created: [{ name: 'new1' }, { name: 'new2' }],
52
+ renamed: [],
53
+ deleted: [],
54
+ });
55
+
56
+ service.stop();
57
+ done()
58
+ }
59
+ });
60
+ });
61
+
62
+ test('Rename 1 table', (done) => {
63
+ const machine = createResolveTablesMachine({
64
+ missingTables: [
65
+ { name: 'from' },
66
+ ],
67
+ newTables: [
68
+ { name: 'to' },
69
+ ]
70
+ });
71
+
72
+ const service = interpret(machine).start();
73
+ service.subscribe((state) => {
74
+ const {
75
+ createdTables,
76
+ renamedTables,
77
+ deletedTables,
78
+ } = state.context;
79
+
80
+ if (state.changed && state.matches('done')) {
81
+ expect({
82
+ created: createdTables,
83
+ renamed: renamedTables,
84
+ deleted: deletedTables,
85
+ }).toStrictEqual({
86
+ created: [],
87
+ renamed: [
88
+ { from: { name: 'from' }, to: { name: 'to' } },
89
+ ],
90
+ deleted: []
91
+ });
92
+
93
+ service.stop();
94
+ done()
95
+ }
96
+ });
97
+
98
+ service.send({ type: 'CHOICE_ITEM', itemIndex: 0 });
99
+ service.send({ type: 'RENAMED' });
100
+ service.send({ type: 'CHOICE_NEW_ITEM', itemIndex: 0 });
101
+ service.send({ type: 'CONFIRM' });
102
+ });
103
+
104
+ test('Dry run, empty new', (done) => {
105
+ const resolveTablesMachine = createResolveTablesMachine({ missingTables: [{ name: 'missing1' }, { name: 'missing2' }], newTables: [] });
106
+ const service = interpret(resolveTablesMachine).start();
107
+
108
+ service.subscribe((state) => {
109
+ const {
110
+ createdTables,
111
+ renamedTables,
112
+ deletedTables,
113
+ } = state.context;
114
+
115
+ if (state.changed && state.matches('done')) {
116
+ expect({
117
+ created: createdTables,
118
+ renamed: renamedTables,
119
+ deleted: deletedTables,
120
+ }).toStrictEqual({
121
+ created: [],
122
+ renamed: [],
123
+ deleted: [{ name: 'missing1' }, { name: 'missing2' }],
124
+ });
125
+
126
+ service.stop();
127
+ done()
128
+ }
129
+ });
130
+ });
131
+
132
+ test('Delete 2 tables and resolve remaining new tables', (done) => {
133
+ const resolveTablesMachine = createResolveTablesMachine({
134
+ missingTables: [
135
+ { name: 'missing1' },
136
+ { name: 'missing2' }
137
+ ],
138
+ newTables: [{ name: 'new1' }, { name: 'new2' }]
139
+ });
140
+ const service = interpret(resolveTablesMachine).start();
141
+
142
+ service.subscribe((state) => {
143
+ const {
144
+ createdTables,
145
+ renamedTables,
146
+ deletedTables,
147
+ } = state.context;
148
+
149
+ if (state.changed && state.matches('done')) {
150
+ expect({
151
+ created: createdTables,
152
+ renamed: renamedTables,
153
+ deleted: deletedTables,
154
+ }).toStrictEqual({
155
+ created: [{ name: 'new1' }, { name: 'new2' }],
156
+ renamed: [],
157
+ deleted: [{ name: 'missing1' }, { name: 'missing2' }],
158
+ });
159
+
160
+ service.stop();
161
+ done()
162
+ }
163
+ });
164
+
165
+ service.send({ type: 'CHOICE_ITEM', itemIndex: 0 });
166
+ service.send({ type: 'DELETED' });
167
+ service.send({ type: 'CONFIRM' });
168
+ service.send({ type: 'CHOICE_ITEM', itemIndex: 0 });
169
+ service.send({ type: 'DELETED' });
170
+ service.send({ type: 'CONFIRM' });
171
+ });
172
+
173
+ test('Rename 2 tables and resolve remaining missing tables', (done) => {
174
+ const resolveTablesMachine = createResolveTablesMachine({
175
+ missingTables: [
176
+ { name: 'missing1' },
177
+ { name: 'missing2' },
178
+ { name: 'missing3' },
179
+ ],
180
+ newTables: [
181
+ { name: 'new1' },
182
+ { name: 'new2' }
183
+ ]
184
+ });
185
+ const service = interpret(resolveTablesMachine).start();
186
+
187
+ service.subscribe((state) => {
188
+ const {
189
+ createdTables,
190
+ renamedTables,
191
+ deletedTables,
192
+ } = state.context;
193
+
194
+ if (state.changed && state.matches('done')) {
195
+ expect({
196
+ created: createdTables,
197
+ renamed: renamedTables,
198
+ deleted: deletedTables,
199
+ }).toStrictEqual({
200
+ created: [],
201
+ renamed: [
202
+ { from: { name: 'missing1' }, to: { name: 'new1' } },
203
+ { from: { name: 'missing2' }, to: { name: 'new2' } }
204
+ ],
205
+ deleted: [{ name: 'missing3' }]
206
+ });
207
+
208
+ service.stop();
209
+ done()
210
+ }
211
+ });
212
+
213
+ service.send({ type: 'CHOICE_ITEM', itemIndex: 0 });
214
+ service.send({ type: 'RENAMED' });
215
+ service.send({ type: 'CHOICE_NEW_ITEM', itemIndex: 0 });
216
+ service.send({ type: 'CONFIRM' });
217
+ service.send({ type: 'CHOICE_ITEM', itemIndex: 0 });
218
+ service.send({ type: 'RENAMED' });
219
+ service.send({ type: 'CHOICE_NEW_ITEM', itemIndex: 0 });
220
+ service.send({ type: 'CONFIRM' });
221
+ });
222
+
223
+ test('Rename 2 tables and delete 2 tables', (done) => {
224
+ const resolveTablesMachine = createResolveTablesMachine({
225
+ missingTables: [
226
+ { name: 'missing1' },
227
+ { name: 'missing2' },
228
+ { name: 'missing3' },
229
+ { name: 'missing4' },
230
+ ],
231
+ newTables: [
232
+ { name: 'new1' },
233
+ { name: 'new2' }
234
+ ]
235
+ });
236
+ const service = interpret(resolveTablesMachine).start();
237
+
238
+ service.subscribe((state) => {
239
+ const {
240
+ createdTables,
241
+ renamedTables,
242
+ deletedTables,
243
+ } = state.context;
244
+
245
+ if (state.changed && state.matches('done')) {
246
+ expect({
247
+ created: createdTables,
248
+ renamed: renamedTables,
249
+ deleted: deletedTables,
250
+ }).toStrictEqual({
251
+ created: [],
252
+ renamed: [
253
+ { from: { name: 'missing1' }, to: { name: 'new1' } },
254
+ { from: { name: 'missing3' }, to: { name: 'new2' } }
255
+ ],
256
+ deleted: [{ name: 'missing2' }, { name: 'missing4' }]
257
+ });
258
+
259
+ service.stop();
260
+ done()
261
+ }
262
+ });
263
+
264
+ service.send({ type: 'CHOICE_ITEM', itemIndex: 0 });
265
+ service.send({ type: 'RENAMED' });
266
+ service.send({ type: 'CHOICE_NEW_ITEM', itemIndex: 0 });
267
+ service.send({ type: 'CONFIRM' });
268
+ service.send({ type: 'CHOICE_ITEM', itemIndex: 0 });
269
+ service.send({ type: 'DELETED' });
270
+ service.send({ type: 'CONFIRM' });
271
+ service.send({ type: 'CHOICE_ITEM', itemIndex: 0 });
272
+ service.send({ type: 'RENAMED' });
273
+ service.send({ type: 'CHOICE_NEW_ITEM', itemIndex: 0 });
274
+ service.send({ type: 'CONFIRM' });
275
+ service.send({ type: 'CHOICE_ITEM', itemIndex: 0 });
276
+ service.send({ type: 'DELETED' });
277
+ service.send({ type: 'CONFIRM' });
278
+ });
279
+
280
+ test('Delete 2 tables, rename 2 tables and resolve remaining missing', (done) => {
281
+ const resolveTablesMachine = createResolveTablesMachine({
282
+ missingTables: [
283
+ { name: 'missing1' },
284
+ { name: 'missing2' },
285
+ { name: 'missing3' },
286
+ { name: 'missing4' },
287
+ { name: 'missing5' },
288
+ { name: 'missing6' },
289
+ ],
290
+ newTables: [
291
+ { name: 'new1' },
292
+ { name: 'new2' },
293
+ ]
294
+ });
295
+ const service = interpret(resolveTablesMachine).start();
296
+
297
+ service.subscribe((state) => {
298
+ const {
299
+ createdTables,
300
+ renamedTables,
301
+ deletedTables,
302
+ } = state.context;
303
+
304
+ if (state.changed && state.matches('done')) {
305
+ expect({
306
+ created: createdTables,
307
+ renamed: renamedTables,
308
+ deleted: deletedTables,
309
+ }).toStrictEqual({
310
+ created: [],
311
+ renamed: [
312
+ { from: { name: 'missing2' }, to: { name: 'new1' } },
313
+ { from: { name: 'missing4' }, to: { name: 'new2' } }
314
+ ],
315
+ deleted: [{ name: 'missing1' }, { name: 'missing3' }, { name: 'missing5' }, { name: 'missing6' }]
316
+ });
317
+
318
+ service.stop();
319
+ done()
320
+ }
321
+ });
322
+
323
+ service.send({ type: 'CHOICE_ITEM', itemIndex: 0 });
324
+ service.send({ type: 'DELETED' });
325
+ service.send({ type: 'CONFIRM' });
326
+ service.send({ type: 'CHOICE_ITEM', itemIndex: 0 });
327
+ service.send({ type: 'RENAMED' });
328
+ service.send({ type: 'CHOICE_NEW_ITEM', itemIndex: 0 });
329
+ service.send({ type: 'CONFIRM' });
330
+ service.send({ type: 'CHOICE_ITEM', itemIndex: 0 });
331
+ service.send({ type: 'DELETED' });
332
+ service.send({ type: 'CONFIRM' });
333
+ service.send({ type: 'CHOICE_ITEM', itemIndex: 0 });
334
+ service.send({ type: 'RENAMED' });
335
+ service.send({ type: 'CHOICE_NEW_ITEM', itemIndex: 0 });
336
+ service.send({ type: 'CONFIRM' });
337
+ });
338
+
339
+ export { };
@@ -0,0 +1,22 @@
1
+ import { prepareTestSQL } from "../../dev/testrunner";
2
+ import { DbConnector } from "drizzle-orm";
3
+ import path from "path";
4
+ import "pretty-error/start";
5
+ import { test } from "uvu";
6
+
7
+ test("import dry json", async () => {
8
+ const { initSQL, migrationSQL } = await prepareTestSQL(
9
+ path.join(__dirname, "suite1")
10
+ );
11
+ const db = await new DbConnector()
12
+ .connectionString(
13
+ "postgresql://postgres:lambdapass@127.0.0.1:5432/postgres"
14
+ )
15
+ .connect();
16
+ console.log(initSQL);
17
+ await db.session().execute(initSQL);
18
+ console.log(migrationSQL);
19
+ await db.session().execute(migrationSQL);
20
+ });
21
+
22
+ test.run();
@@ -0,0 +1,16 @@
1
+ ## auth_otp renamed to auth_otp1
2
+ tables:
3
+ removed:
4
+ - auth_otp
5
+ added:
6
+ - auth_otp1
7
+ sequence:
8
+ - 0-0
9
+ columns_in_tables:
10
+ auth_otp1:
11
+ removed:
12
+ - phone1
13
+ added:
14
+ - phone
15
+ sequence:
16
+ - 0-0