drizzle-kit 0.9.2 → 0.9.3

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 (56) hide show
  1. package/{dist/drizzle.js → drizzle.js} +0 -0
  2. package/{dist/drizzle.js.map → drizzle.js.map} +0 -0
  3. package/package.json +1 -1
  4. package/.eslintrc +0 -21
  5. package/config.yml +0 -4
  6. package/data/_prev/multi.ts +0 -43
  7. package/data/_prev/tables/authOtpTable.ts +0 -22
  8. package/data/_prev/tables/cityTable.ts +0 -17
  9. package/data/_prev/tables/usersTable.ts +0 -18
  10. package/data/_prev/types/types.ts +0 -11
  11. package/data/v1/tables/authOtpTable.ts +0 -18
  12. package/data/v1/tables/deletedTable.ts +0 -9
  13. package/data/v1/tables/usersTable.ts +0 -15
  14. package/data/v1/types/types.ts +0 -6
  15. package/data/v2/tables/authOtpTable.ts +0 -22
  16. package/data/v2/tables/cityTable.ts +0 -10
  17. package/data/v2/tables/usersTable.ts +0 -19
  18. package/data/v2/types/types.ts +0 -11
  19. package/data/v3/tables/authOtpTable.ts +0 -21
  20. package/data/v3/tables/cityTable.ts +0 -17
  21. package/data/v3/tables/usersTable.ts +0 -18
  22. package/data/v3/types/types.ts +0 -11
  23. package/dist/package.json +0 -85
  24. package/factory.ts +0 -224
  25. package/fstest.ts +0 -50
  26. package/index.ts +0 -16
  27. package/readme.md +0 -9
  28. package/serializer.ts +0 -139
  29. package/src/cli/commands/migration/index.tsx +0 -10
  30. package/src/cli/commands/migration/migrate/index.tsx +0 -164
  31. package/src/cli/components-api/ComponentsList.tsx +0 -20
  32. package/src/cli/components-api/CreateApp.tsx +0 -19
  33. package/src/cli/components-api/components/PromptColumnsConflicts.tsx +0 -171
  34. package/src/cli/components-api/components/PromptTablesConflicts.tsx +0 -180
  35. package/src/cli/components-api/components/Task.tsx +0 -85
  36. package/src/cli/components-api/index.tsx +0 -76
  37. package/src/cli/enq.ts +0 -41
  38. package/src/cli/index.tsx +0 -8
  39. package/src/cli/machines/resolveColumnsMachine.ts +0 -179
  40. package/src/cli/machines/resolveTablesMachine.ts +0 -169
  41. package/src/cli/utils/formatDataForTable.ts +0 -36
  42. package/src/cli/utils/valuesForPrompts.ts +0 -35
  43. package/src/diff.ts +0 -272
  44. package/src/differ.js +0 -135
  45. package/src/jsonStatements.js +0 -176
  46. package/src/migrationPreparator.ts +0 -47
  47. package/src/serilizer/factory.ts +0 -340
  48. package/src/serilizer/index.ts +0 -25
  49. package/src/simulator.ts +0 -85
  50. package/src/sqlgenerator.js +0 -373
  51. package/test-build.js +0 -26
  52. package/test.ts +0 -57
  53. package/testFactory.js +0 -3
  54. package/testFactory.ts +0 -26
  55. package/tsconfig.json +0 -28
  56. package/webpack.config.js +0 -53
@@ -1,169 +0,0 @@
1
- import { assign, createMachine, send } from 'xstate';
2
- import { Named, RenamedObject } from 'cli/commands/migration/migrate';
3
-
4
- type Event =
5
- | { type: 'CHOICE_ITEM', itemIndex: number }
6
- | { type: 'DELETE' }
7
- | { type: 'RENAME' }
8
- | { type: 'CANCEL' }
9
- | { type: 'CONFIRM' }
10
- | { type: 'NEXT' }
11
- | { type: 'CHOICE_NEW_ITEM'; itemIndex: number };
12
-
13
- interface Context extends Props {
14
- missingItemIndex: number,
15
- newItemIndex: number,
16
- createdTables: Named[];
17
- renamedTables: RenamedObject<Named>[];
18
- deletedTables: Named[];
19
- }
20
-
21
- interface Props {
22
- missingTables: Named[],
23
- newTables: Named[],
24
- }
25
-
26
- const createResolveTablesMachine = (props: Props) => (
27
- createMachine<Context, Event>({
28
- id: 'resolveTables',
29
- initial: 'table',
30
- context: {
31
- ...props,
32
- missingItemIndex: 0,
33
- newItemIndex: 0,
34
- createdTables: [],
35
- renamedTables: [],
36
- deletedTables: [],
37
- },
38
- states: {
39
- table: {
40
- entry: send({ type: 'NEXT' }),
41
- on: {
42
- NEXT: [
43
- {
44
- target: 'done',
45
- cond: 'isMissingTablesResolved',
46
- actions: ['resolveRemaining'],
47
- },
48
- {
49
- target: 'done',
50
- cond: 'isNewTablesResolved',
51
- actions: ['resolveMissing'],
52
- },
53
- ],
54
- CHOICE_ITEM: { target: 'action', actions: ['choseItem'] },
55
- },
56
- },
57
- action: {
58
- initial: 'actionChoice',
59
- states: {
60
- actionChoice: {
61
- on: { DELETE: '#resolveTables.confirmationDelete', RENAME: 'rename' },
62
- },
63
- rename: {
64
- on: {
65
- CHOICE_NEW_ITEM: { target: '#resolveTables.confirmationRename', actions: ['choseNewItem'] },
66
- },
67
- },
68
- },
69
- },
70
- confirmationDelete: {
71
- on: {
72
- CANCEL: 'action.actionChoice',
73
- CONFIRM: [
74
- { target: 'final', actions: ['delete'] },
75
- ],
76
- },
77
- },
78
- confirmationRename: {
79
- on: {
80
- CANCEL: 'action.actionChoice',
81
- CONFIRM: [
82
- { target: 'final', actions: ['rename'] },
83
- ],
84
- },
85
- },
86
- final: {
87
- entry: send({ type: 'NEXT' }),
88
- on: {
89
- NEXT: [
90
- {
91
- target: 'done',
92
- cond: 'isMissingTablesResolved',
93
- actions: ['resolveRemaining'],
94
- },
95
- {
96
- target: 'table',
97
- },
98
- ],
99
- },
100
- },
101
- done: {},
102
- },
103
- },
104
- {
105
- guards: {
106
- isMissingTablesResolved: ({ missingTables }) => !missingTables.length,
107
- isNewTablesResolved: ({ newTables }) => !newTables.length,
108
- },
109
- actions: {
110
- choseItem: assign({
111
- missingItemIndex: (context, event) => (event.type === 'CHOICE_ITEM' ? event.itemIndex : 0),
112
- }),
113
-
114
- choseNewItem: assign({
115
- newItemIndex: (context, event) => (event.type === 'CHOICE_NEW_ITEM' ? event.itemIndex : 0),
116
- }),
117
-
118
- delete: assign({
119
- deletedTables: ({
120
- missingItemIndex,
121
- deletedTables,
122
- missingTables,
123
- }) => [...deletedTables, missingTables[missingItemIndex]],
124
- missingTables: ({
125
- missingItemIndex,
126
- missingTables,
127
- }) => missingTables.filter((_, index) => index !== missingItemIndex),
128
- }),
129
-
130
- rename: assign({
131
- renamedTables: ({
132
- missingItemIndex,
133
- newItemIndex,
134
- renamedTables,
135
- newTables,
136
- missingTables,
137
- }) => [
138
- ...renamedTables,
139
- { old: missingTables[missingItemIndex], new: newTables[newItemIndex] },
140
- ],
141
- missingTables: ({
142
- missingItemIndex,
143
- missingTables,
144
- }) => missingTables.filter((_, index) => index !== missingItemIndex),
145
- newTables: ({
146
- newItemIndex,
147
- newTables,
148
- }) => newTables.filter((_, index) => index !== newItemIndex),
149
- }),
150
-
151
- resolveRemaining: assign({
152
- createdTables: ({
153
- newTables,
154
- createdTables,
155
- }) => [...createdTables, ...newTables],
156
- newTables: (context) => [],
157
- }),
158
-
159
- resolveMissing: assign({
160
- deletedTables: ({
161
- missingTables,
162
- deletedTables,
163
- }) => [...deletedTables, ...missingTables],
164
- missingTables: (context) => [],
165
- }),
166
- },
167
- }));
168
-
169
- export default createResolveTablesMachine;
@@ -1,36 +0,0 @@
1
- import { Named, RenamedObject } from 'cli/commands/migration/migrate';
2
-
3
- interface ScalarDict {
4
- [key: string]: string
5
- }
6
-
7
- export default (
8
- data: {
9
- title: string;
10
- values: Named[] | RenamedObject<Named>[]
11
- }[],
12
- ): ScalarDict[] => {
13
- const array: ScalarDict[] = [];
14
-
15
- array.length = data.reduce((acc: number, { values }) => {
16
- if (acc < values.length) {
17
- return values.length;
18
- }
19
- return acc;
20
- },
21
- 0);
22
-
23
- array.fill({ '': '' });
24
-
25
- return array.map((_, i) => {
26
- const temp = {} as ScalarDict;
27
-
28
- data.forEach((item: any, ind: number) => {
29
- temp[data[ind].title] = item.values[i]?.old?.name
30
- ? `${item.values[i]?.old?.name} -> ${item.values[i]?.new?.name}`
31
- : item.values[i]?.name || '';
32
- });
33
-
34
- return temp as ScalarDict;
35
- });
36
- };
@@ -1,35 +0,0 @@
1
- export enum Action {
2
- RENAME = 'RENAME',
3
- DELETE = 'DELETE'
4
- }
5
-
6
- export enum Confirmation {
7
- CANCEL = 'CANCEL',
8
- CONFIRM = 'CONFIRM'
9
- }
10
-
11
- export const actions = [
12
- {
13
- key: Action.RENAME,
14
- label: 'Renamed',
15
- value: Action.RENAME,
16
- },
17
- {
18
- key: Action.DELETE,
19
- label: 'Deleted',
20
- value: Action.DELETE,
21
- },
22
- ];
23
-
24
- export const confirmations = [
25
- {
26
- key: Confirmation.CONFIRM,
27
- label: 'Yes',
28
- value: Confirmation.CONFIRM,
29
- },
30
- {
31
- key: Confirmation.CANCEL,
32
- label: 'No',
33
- value: Confirmation.CANCEL,
34
- },
35
- ];
package/src/diff.ts DELETED
@@ -1,272 +0,0 @@
1
- import { fromJson } from "./sqlgenerator";
2
- import resolveTables from "./simulator";
3
- import { differ, diffForRenamed } from "./differ";
4
- import fs from 'fs'
5
- import { prepareAddValuesToEnumJson, prepareAlterTableColumnsJson, prepareCreateEnumJson, prepareCreateIndexesJson, prepareCreateTableJson, prepareDropIndexesJson, prepareDropTableJson, prepareRenameTableJson } from "./jsonStatements";
6
-
7
- const json1 = {
8
- tables: {
9
- items: {
10
- name: "items",
11
- columns: {
12
- id: {
13
- name: "id",
14
- type: "int",
15
- primaryKey: true,
16
- autoincrement: true,
17
- },
18
- name: {
19
- name: "name",
20
- type: "character varying(256)",
21
- defaultValue: "Vetal",
22
- notNull: true,
23
- },
24
- unused: {
25
- name: "unused",
26
- type: "character varying(256)",
27
- },
28
- unused2: {
29
- name: "unused2",
30
- type: "character varying(256)",
31
- },
32
- },
33
- indexes: {
34
- index_to_be_deleted: {
35
- name: "index_to_be_deleted",
36
- columns: {
37
- phone: {
38
- name: "phone",
39
- },
40
- },
41
- },
42
- },
43
- },
44
- oldItems: {
45
- name: "old_items",
46
- columns: {},
47
- },
48
- items2: {
49
- name: "items2",
50
- columns: {},
51
- },
52
- },
53
- enums: {
54
- enum0: {
55
- name: "enum0",
56
- values: {
57
- value0: "value0",
58
- value1: "value1",
59
- value2: "value2",
60
- },
61
- },
62
- enum2: {
63
- name: "enum2",
64
- values: {
65
- value1: "value1",
66
- value2: "value2",
67
- },
68
- },
69
- },
70
- };
71
-
72
- const json2 = {
73
- tables: {
74
- items: {
75
- name: "items",
76
- columns: {
77
- id: {
78
- name: "id",
79
- type: "int",
80
- primaryKey: true,
81
- autoincrement: true,
82
- },
83
- name: {
84
- name: "name",
85
- type: "character varying(512)",
86
- },
87
- secondName: {
88
- name: "secondName",
89
- type: "character varying(512)",
90
- defaultValue: "Vitalik",
91
- },
92
- ownerId: {
93
- name: "owner_id",
94
- type: "int",
95
- notNull: true,
96
- defaultValue: 10,
97
- },
98
- },
99
- indexes: {
100
- users_phone_full_name_index: {
101
- name: "users_phone_full_name_index",
102
- columns: {
103
- phone: {
104
- name: "phone",
105
- },
106
- full_name: {
107
- name: "full_name",
108
- },
109
- },
110
- },
111
- users_phone_index: {
112
- name: "users_phone_index",
113
- columns: {
114
- phone: {
115
- name: "phone",
116
- },
117
- },
118
- },
119
- },
120
- },
121
- items3: {
122
- name: "items3",
123
- columns: {
124
- id: {
125
- name: "id",
126
- type: "int",
127
- primaryKey: true,
128
- autoincrement: true,
129
- },
130
- name: {
131
- name: "name",
132
- type: "character varying(512)",
133
- notNull: true,
134
- defaultValue: "defaultValue",
135
- },
136
- ownerId: {
137
- name: "owner_id",
138
- type: "int",
139
- },
140
- },
141
- },
142
- items22: {
143
- name: "items22",
144
- columns: {},
145
- },
146
- },
147
- enums: {
148
- enum0: {
149
- name: "enum0",
150
- values: {
151
- value1: "value1",
152
- value2: "value2",
153
- value3: "value3",
154
- },
155
- },
156
- enum1: {
157
- name: "enum1",
158
- values: {
159
- value1: "value1",
160
- value2: "value2",
161
- },
162
- },
163
- },
164
- };
165
-
166
- const dry = {
167
- version: "1",
168
- tables: {},
169
- enums: {}
170
- }
171
-
172
- // TODO: read snapshots from folder
173
-
174
- // const j1 = JSON.parse(fs.readFileSync('./out/v1_1634546745488.json', 'utf8'))
175
- const j1 = dry
176
- const j2 = JSON.parse(fs.readFileSync('./out/v2_1634549601361.json', 'utf8'))
177
- // const j3 = JSON.parse(fs.readFileSync('./out/1634215063491.json', 'utf8'))
178
- const result = differ(j1, j2)
179
-
180
- const { created, deleted, renamed } = resolveTables(result.addedTables, result.deletedTables)
181
-
182
- const jsonStatements: any[] = []
183
-
184
- const jsonCreateTables = created.map(it => {
185
- return prepareCreateTableJson(it)
186
- })
187
-
188
- const jsonCreateIndexesForCreatedTables = created.map(it => {
189
- return prepareCreateIndexesJson(it.name, it.indexes)
190
- }).flat()
191
-
192
- const jsonDropTables = deleted.map(it => {
193
- return prepareDropTableJson(it)
194
- })
195
-
196
- const jsonRenameTables = renamed.map(it => {
197
- return prepareRenameTableJson(it.from, it.to)
198
- })
199
-
200
- // const createNewTables = created.map(it => {
201
- // return prepareCreateTable(it)
202
- // })
203
- // console.log(createNewTables.join('\n').trim())
204
-
205
- // const deleteTables = deleted.map(it => {
206
- // return prepareDropTable(it)
207
- // })
208
- // console.log(deleteTables.join('\n').trim())
209
-
210
- const renamedWithAlternations = diffForRenamed(renamed)
211
- const allAltered = result.alteredTablesWithColumns.concat(renamedWithAlternations)
212
-
213
- // const renameTables = renamed.map(it => {
214
- // return prepareRenameTable(it.from, it.to)
215
- // })
216
- // console.log(renameTables.join('\n').trim())
217
-
218
- const jsonAlterTables = allAltered.map(it => {
219
- return prepareAlterTableColumnsJson(it)
220
- }).flat()
221
-
222
- const jsonCreateIndexesForAllAlteredTables = allAltered.map(it => {
223
- return prepareCreateIndexesJson(it.name, it.addedIndexes || {})
224
- }).flat()
225
-
226
- const jsonDropIndexesForAllAlteredTables = allAltered.map(it => {
227
- return prepareDropIndexesJson(it.name, it.deletedIndexes || {})
228
- }).flat()
229
-
230
- // // Enums:
231
- // // - создание енама ✅
232
- // // - переименование енама (пока не делаю)⏳
233
- // // - добавление вэлью к енаму ✅
234
- // // - ренейм вейлью у енама (пока не делаю, это надо запрашивать опять же через слай)⏳
235
- // // - удаление енама -> чекать не используется ли где-то енам и сначала ранить миграции и в самом конце удаление енама⏳
236
- // // - удаление вэлью из енама -> блок ❌
237
- // const enums = result.addedEnums.map(it => {
238
- // return prepareCreateEnum(it.name, it.values)
239
- // })
240
-
241
- const createEnums = result.addedEnums.map(it => {
242
- return prepareCreateEnumJson(it.name, it.values)
243
- })
244
-
245
- //todo: block enum rename, enum value rename and enun deletion for now
246
- const jsonAlterEnumsWithAddedValues = result.alteredEnums.map(it => {
247
- return prepareAddValuesToEnumJson(it.name, it.addedValues)
248
- }).flat()
249
-
250
- jsonStatements.push(...createEnums)
251
- jsonStatements.push(...jsonAlterEnumsWithAddedValues)
252
- jsonStatements.push(...jsonCreateTables)
253
- jsonStatements.push(...jsonCreateIndexesForCreatedTables)
254
- jsonStatements.push(...jsonDropTables)
255
- jsonStatements.push(...jsonRenameTables)
256
- jsonStatements.push(...jsonAlterTables)
257
- jsonStatements.push(...jsonCreateIndexesForAllAlteredTables)
258
- jsonStatements.push(...jsonDropIndexesForAllAlteredTables)
259
-
260
- // console.log(JSON.stringify(jsonStatements, null, 2))
261
- console.log(jsonStatements)
262
-
263
- const sqlStatements = fromJson(jsonStatements)
264
- console.log(sqlStatements.join('\n'))
265
-
266
-
267
- // console.log(enums.join('\n').trim())
268
- // console.log(alteredEnums.join('\n').trim())
269
-
270
-
271
- // explicitely ask if tables were renamed, if yes - add those to altered tables, otherwise - deleted
272
- // double check if user wants to delete particular table and warn him on data loss
package/src/differ.js DELETED
@@ -1,135 +0,0 @@
1
- 'use-strict';
2
-
3
- import { diff } from 'json-diff'
4
-
5
-
6
- export function diffForRenamed(pairs) {
7
- // raname table1 to name of table2, so we can apply diffs
8
- const renamed = pairs.map(it => {
9
- const from = it.from || it.old
10
- const to = it.to || it.new
11
- const newFrom = { ...from, name: to.name }
12
- return [newFrom, to]
13
- })
14
-
15
- // find any alternations made to a renamed table
16
- const altered = renamed.map(pair => {
17
- const diffed = diff(pair[0], pair[1]);
18
- diffed.name = pair[0].name
19
-
20
- return findAlternationsInTable(diffed)
21
- })
22
-
23
- return altered
24
- }
25
- export function differ(json1, json2) {
26
- const difference = diff(json1, json2);
27
-
28
- difference.tables = difference.tables ? difference.tables : {}
29
- difference.enums = difference.enums ? difference.enums : {}
30
-
31
- const tableEntries = Object.entries(difference.tables)
32
- const addedTables = tableEntries.filter(it => it[0].includes('__added'))
33
- .map(it => it[1])
34
- .map(it => {
35
- // console.log(it)
36
- return {
37
- ...it, indexes: Object.entries(it.indexes).map(indexEntry => {
38
- const idx = indexEntry[1]
39
- const name = idx['name']
40
- const columns = Object.values(idx['columns']).map(it => it['name'])
41
- return { name, columns }
42
- })
43
- }
44
- })
45
- const deletedTables = tableEntries.filter(it => it[0].includes('__deleted')).map(it => it[1])
46
-
47
- const enumsEntries = Object.entries(difference.enums)
48
-
49
- const addedEnums = enumsEntries.filter(it => it[0].includes('__added'))
50
- .map(it => it[1])
51
- .map(it => {
52
- // values: { val1: 'val1', val2: 'val2' } => values: ['val1', 'val2']
53
- const values = Object.entries(it.values).map(ve => ve[1])
54
- return { name: it.name, values: values }
55
- })
56
- const deletedEnums = enumsEntries.filter(it => it[0].includes('__deleted'))
57
- .map(it => it[1])
58
- .map(it => {
59
-
60
- // values: { val1: 'val1', val2: 'val2' } => values: ['val1', 'val2']
61
- const values = Object.entries(it.values).map(ve => ve[1])
62
- return { name: it.name, values: values }
63
- })
64
- const alteredEnums = enumsEntries.filter(it => !(it[0].includes('__added') || it[0].includes('__deleted')))
65
- .map(it => {
66
- const vals = it[1].values
67
- const addedValues = Object.entries(vals).filter(val => val[0].includes('__added')).map(val => val[1])
68
- const deletedValues = Object.entries(vals).filter(val => val[0].includes('__deleted')).map(val => val[1])
69
- // console.log('values: ', it[1].values)
70
- return { name: it[0], addedValues, deletedValues, }
71
- })
72
-
73
- const alteredTables = Object.keys(difference.tables)
74
- .filter(it => !(it.includes('__added') || it.includes('__deleted')))
75
- .map(it => {
76
- return { name: it, ...difference.tables[it] }
77
- })
78
-
79
- const alteredTablesWithColumns = alteredTables.map(table => findAlternationsInTable(table))
80
-
81
- return {
82
- addedTables,
83
- deletedTables,
84
- alteredTablesWithColumns,
85
- addedEnums,
86
- deletedEnums,
87
- alteredEnums,
88
- }
89
- }
90
-
91
- const findAlternationsInTable = (table) => {
92
- // map each table to have altered, deleted or renamed columns
93
- const columns = table.columns; //in case no columns were altered, but indexes were
94
-
95
- const added = Object.keys(columns).filter(it => it.includes('__added')).map(it => {
96
- return { ...columns[it] }
97
- })
98
- const deleted = Object.keys(columns).filter(it => it.includes('__deleted')).map(it => {
99
- return { ...columns[it] }
100
- })
101
- const altered = Object.keys(columns)
102
- .filter(it => !(it.includes('__deleted') || it.includes('__added')))
103
- .map(it => {
104
- return { name: it, ...columns[it] }
105
- })
106
-
107
- const deletedIndexes = Object.values(table.indexes__deleted || {}).map(it => {
108
- const name = it['name']
109
- const columns = Object.values(it['columns']).map(it => it['name'])
110
- return { name, columns }
111
- }).concat(
112
- Object.keys(table.indexes || {}).filter(it => it.includes('__deleted'))
113
- .map(it => {
114
- const idx = table.indexes[it]
115
- const name = idx['name']
116
- const columns = Object.values(idx['columns']).map(it => it['name'])
117
- return { name, columns }
118
- })
119
- );
120
-
121
- const addedIndexes = Object.values(table.indexes__added || {}).map(it => {
122
- const name = it['name']
123
- const columns = Object.values(it['columns']).map(it => it['name'])
124
- return { name, columns }
125
- }).concat(
126
- Object.keys(table.indexes || {}).filter(it => it.includes('__added'))
127
- .map(it => {
128
- const idx = table.indexes[it]
129
- const name = idx['name']
130
- const columns = Object.values(idx['columns']).map(it => it['name'])
131
- return { name, columns }
132
- })
133
- );
134
- return { name: table.name, deleted, added, altered, addedIndexes, deletedIndexes }
135
- }