drizzle-kit 0.9.2 → 0.9.6
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.
- package/drizzle.js +4 -0
- package/drizzle.js.map +1 -0
- package/package.json +2 -2
- package/.eslintrc +0 -21
- package/config.yml +0 -4
- package/data/_prev/multi.ts +0 -43
- package/data/_prev/tables/authOtpTable.ts +0 -22
- package/data/_prev/tables/cityTable.ts +0 -17
- package/data/_prev/tables/usersTable.ts +0 -18
- package/data/_prev/types/types.ts +0 -11
- package/data/v1/tables/authOtpTable.ts +0 -18
- package/data/v1/tables/deletedTable.ts +0 -9
- package/data/v1/tables/usersTable.ts +0 -15
- package/data/v1/types/types.ts +0 -6
- package/data/v2/tables/authOtpTable.ts +0 -22
- package/data/v2/tables/cityTable.ts +0 -10
- package/data/v2/tables/usersTable.ts +0 -19
- package/data/v2/types/types.ts +0 -11
- package/data/v3/tables/authOtpTable.ts +0 -21
- package/data/v3/tables/cityTable.ts +0 -17
- package/data/v3/tables/usersTable.ts +0 -18
- package/data/v3/types/types.ts +0 -11
- package/dist/drizzle.js +0 -2136
- package/dist/drizzle.js.map +0 -1
- package/dist/package.json +0 -85
- package/factory.ts +0 -224
- package/fstest.ts +0 -50
- package/index.ts +0 -16
- package/readme.md +0 -9
- package/serializer.ts +0 -139
- package/src/cli/commands/migration/index.tsx +0 -10
- package/src/cli/commands/migration/migrate/index.tsx +0 -164
- package/src/cli/components-api/ComponentsList.tsx +0 -20
- package/src/cli/components-api/CreateApp.tsx +0 -19
- package/src/cli/components-api/components/PromptColumnsConflicts.tsx +0 -171
- package/src/cli/components-api/components/PromptTablesConflicts.tsx +0 -180
- package/src/cli/components-api/components/Task.tsx +0 -85
- package/src/cli/components-api/index.tsx +0 -76
- package/src/cli/enq.ts +0 -41
- package/src/cli/index.tsx +0 -8
- package/src/cli/machines/resolveColumnsMachine.ts +0 -179
- package/src/cli/machines/resolveTablesMachine.ts +0 -169
- package/src/cli/utils/formatDataForTable.ts +0 -36
- package/src/cli/utils/valuesForPrompts.ts +0 -35
- package/src/diff.ts +0 -272
- package/src/differ.js +0 -135
- package/src/jsonStatements.js +0 -176
- package/src/migrationPreparator.ts +0 -47
- package/src/serilizer/factory.ts +0 -340
- package/src/serilizer/index.ts +0 -25
- package/src/simulator.ts +0 -85
- package/src/sqlgenerator.js +0 -373
- package/test-build.js +0 -26
- package/test.ts +0 -57
- package/testFactory.js +0 -3
- package/testFactory.ts +0 -26
- package/tsconfig.json +0 -28
- package/webpack.config.js +0 -53
package/src/jsonStatements.js
DELETED
|
@@ -1,176 +0,0 @@
|
|
|
1
|
-
export class Types {
|
|
2
|
-
static createTable = 'create_table'
|
|
3
|
-
static dropTable = 'drop_table'
|
|
4
|
-
static renameTable = 'rename_table'
|
|
5
|
-
static alterTableDropColumn = 'alter_table_drop_column'
|
|
6
|
-
static alterTableAddColumn = 'alter_table_add_column'
|
|
7
|
-
static alterTableAlterColumnSetType = 'alter_table_alter_column_set_type'
|
|
8
|
-
static alterTableAlterColumnSetDefault = 'alter_table_alter_column_set_default'
|
|
9
|
-
static alterTableAlterColumnDropDefault = 'alter_table_alter_column_drop_default'
|
|
10
|
-
static alterTableAlterColumnSetNotNull = 'alter_table_alter_column_set_notnull'
|
|
11
|
-
static alterTableAlterColumnDropNotNull = 'alter_table_alter_column_drop_notnull'
|
|
12
|
-
static createIndex = 'create_index'
|
|
13
|
-
static dropIndex = 'drop_index'
|
|
14
|
-
static createTypeEnum = 'create_type_enum'
|
|
15
|
-
static alterTypeAddValue = 'alter_type_add_value'
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export const prepareCreateTableJson = (table) => {
|
|
19
|
-
const { name, columns } = table
|
|
20
|
-
const mappedColumns = Object.keys(columns)
|
|
21
|
-
.map(it => {
|
|
22
|
-
return { ...columns[it] }
|
|
23
|
-
})
|
|
24
|
-
|
|
25
|
-
return {
|
|
26
|
-
type: Types.createTable,
|
|
27
|
-
tableName: name,
|
|
28
|
-
columns: mappedColumns
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
export const prepareDropTableJson = (table) => {
|
|
33
|
-
return {
|
|
34
|
-
type: Types.dropTable,
|
|
35
|
-
tableName: table.name
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
export const prepareRenameTableJson = (tableFrom, tableTo) => {
|
|
40
|
-
return {
|
|
41
|
-
type: Types.renameTable,
|
|
42
|
-
from: tableFrom.name,
|
|
43
|
-
to: tableTo.name
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
export const prepareCreateEnumJson = (name, values) => {
|
|
48
|
-
return {
|
|
49
|
-
type: Types.createTypeEnum,
|
|
50
|
-
enumName: name,
|
|
51
|
-
values
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
// https://blog.yo1.dog/updating-enum-values-in-postgresql-the-safe-and-easy-way/
|
|
56
|
-
export const prepareAddValuesToEnumJson = (name, values) => {
|
|
57
|
-
return values.map(it => {
|
|
58
|
-
return {
|
|
59
|
-
type: Types.alterTypeAddValue,
|
|
60
|
-
enumName: name,
|
|
61
|
-
enumValue: it
|
|
62
|
-
}
|
|
63
|
-
})
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
export const prepareAlterTableColumnsJson = (table) => {
|
|
67
|
-
const tableName = table['name'];
|
|
68
|
-
const statements = []
|
|
69
|
-
|
|
70
|
-
const dropColumns = _prepareDropColumns(tableName, table.deleted)
|
|
71
|
-
const addColumns = _prepareAddColumns(tableName, table.added)
|
|
72
|
-
const alterColumns = _prepareAlterColumns(tableName, table.altered)
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
statements.push(...dropColumns)
|
|
76
|
-
statements.push(...addColumns)
|
|
77
|
-
statements.push(...alterColumns)
|
|
78
|
-
|
|
79
|
-
return statements;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
const _prepareDropColumns = (taleName, columns) => {
|
|
83
|
-
return columns.map(it => {
|
|
84
|
-
return {
|
|
85
|
-
type: Types.alterTableDropColumn,
|
|
86
|
-
tableName: taleName,
|
|
87
|
-
columnName: it.name
|
|
88
|
-
}
|
|
89
|
-
})
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
const _prepareAddColumns = (tableName, columns) => {
|
|
93
|
-
|
|
94
|
-
return columns.map(it => {
|
|
95
|
-
return {
|
|
96
|
-
type: Types.alterTableAddColumn,
|
|
97
|
-
tableName,
|
|
98
|
-
column: it
|
|
99
|
-
}
|
|
100
|
-
})
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
const _prepareAlterColumns = (tableName, columns) => {
|
|
104
|
-
let statements = []
|
|
105
|
-
|
|
106
|
-
for (const column of columns) {
|
|
107
|
-
const columnName = column.name;
|
|
108
|
-
|
|
109
|
-
if (column['type']) {
|
|
110
|
-
const { __new } = column.type
|
|
111
|
-
|
|
112
|
-
statements.push({
|
|
113
|
-
type: Types.alterTableAlterColumnSetType,
|
|
114
|
-
tableName,
|
|
115
|
-
columnName,
|
|
116
|
-
newDataType: __new
|
|
117
|
-
})
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
if (column['defaultValue'] || column['defaultValue__added']) {
|
|
121
|
-
const newDefaultValue = column.defaultValue.__new | column.defaultValue__added
|
|
122
|
-
statements.push({
|
|
123
|
-
type: Types.alterTableAlterColumnSetDefault,
|
|
124
|
-
tableName,
|
|
125
|
-
columnName,
|
|
126
|
-
newDefault: newDefaultValue
|
|
127
|
-
})
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
if (column['defaultValue__deleted']) {
|
|
131
|
-
statements.push({
|
|
132
|
-
type: Types.alterTableAlterColumnDropDefault,
|
|
133
|
-
tableName,
|
|
134
|
-
columnName,
|
|
135
|
-
})
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
if (column['notNull__added'] || (column['notNull'] && column['notNull']['__new'])) {
|
|
139
|
-
statements.push({
|
|
140
|
-
type: Types.alterTableAlterColumnSetNotNull,
|
|
141
|
-
tableName,
|
|
142
|
-
columnName
|
|
143
|
-
})
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
if (column['notNull__deleted'] || (column['notNull'] && !column['notNull']['__new'])) {
|
|
147
|
-
statements.push({
|
|
148
|
-
type: Types.alterTableAlterColumnDropNotNull,
|
|
149
|
-
tableName,
|
|
150
|
-
columnName
|
|
151
|
-
})
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
return statements
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
export const prepareCreateIndexesJson = (tableName, indexes) => {
|
|
159
|
-
return indexes.map(index => {
|
|
160
|
-
return {
|
|
161
|
-
type: Types.createIndex,
|
|
162
|
-
tableName,
|
|
163
|
-
indexName: index.name,
|
|
164
|
-
indexValue: index.columns.join(', ')
|
|
165
|
-
}
|
|
166
|
-
})
|
|
167
|
-
}
|
|
168
|
-
export const prepareDropIndexesJson = (tableName, indexes) => {
|
|
169
|
-
return indexes.map(index => {
|
|
170
|
-
return {
|
|
171
|
-
type: Types.dropIndex,
|
|
172
|
-
tableName,
|
|
173
|
-
indexName: index.name,
|
|
174
|
-
}
|
|
175
|
-
})
|
|
176
|
-
}
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import fs from 'fs'
|
|
2
|
-
import serialize from 'serilizer'
|
|
3
|
-
|
|
4
|
-
// TODO: export as a function w
|
|
5
|
-
|
|
6
|
-
const dry = {
|
|
7
|
-
version: "1",
|
|
8
|
-
tables: {},
|
|
9
|
-
enums: {}
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
const prepareMigration = (
|
|
13
|
-
migrationRootFolderName: string = 'drizzle',
|
|
14
|
-
dataFolderPath: string
|
|
15
|
-
): { prev: any, cur: any } => {
|
|
16
|
-
const root = migrationRootFolderName
|
|
17
|
-
const files = fs.readdirSync('./')
|
|
18
|
-
const drizzleFolder = files.find((it) => {
|
|
19
|
-
return it === root
|
|
20
|
-
})
|
|
21
|
-
|
|
22
|
-
if (!drizzleFolder) {
|
|
23
|
-
fs.mkdirSync(root)
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
const migrationFolders = fs.readdirSync(`./${root}`)
|
|
27
|
-
|
|
28
|
-
let prevSnapshot;
|
|
29
|
-
|
|
30
|
-
if (migrationFolders.length === 0) {
|
|
31
|
-
prevSnapshot = dry
|
|
32
|
-
} else {
|
|
33
|
-
migrationFolders.sort()
|
|
34
|
-
const lastSnapshotFolder = migrationFolders[migrationFolders.length - 1]
|
|
35
|
-
console.log(lastSnapshotFolder)
|
|
36
|
-
prevSnapshot = JSON.parse(fs.readFileSync(`./${root}/${lastSnapshotFolder}/snapshot.json`).toString())
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
const tbls = `${dataFolderPath}/tables/`
|
|
40
|
-
const tps = `${dataFolderPath}/types/`
|
|
41
|
-
|
|
42
|
-
const result = serialize(tbls, tps)
|
|
43
|
-
|
|
44
|
-
return { prev: prevSnapshot, cur: result }
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
export default prepareMigration;
|
package/src/serilizer/factory.ts
DELETED
|
@@ -1,340 +0,0 @@
|
|
|
1
|
-
import ts from "typescript";
|
|
2
|
-
import fs from "fs";
|
|
3
|
-
const printer: ts.Printer = ts.createPrinter();
|
|
4
|
-
|
|
5
|
-
const prepareFabricFile = (tablesFolder: string, typesFolder: string) => {
|
|
6
|
-
const staticImports = [
|
|
7
|
-
ts.createImportDeclaration(
|
|
8
|
-
undefined,
|
|
9
|
-
undefined,
|
|
10
|
-
ts.createImportClause(
|
|
11
|
-
undefined,
|
|
12
|
-
ts.createNamedImports([
|
|
13
|
-
ts.createImportSpecifier(
|
|
14
|
-
undefined,
|
|
15
|
-
ts.createIdentifier("AbstractTable"),
|
|
16
|
-
),
|
|
17
|
-
ts.createImportSpecifier(undefined, ts.createIdentifier("DB")),
|
|
18
|
-
]),
|
|
19
|
-
),
|
|
20
|
-
ts.createStringLiteral("drizzle-orm"),
|
|
21
|
-
),
|
|
22
|
-
ts.createImportDeclaration(
|
|
23
|
-
undefined,
|
|
24
|
-
undefined,
|
|
25
|
-
ts.createImportClause(ts.createIdentifier("Enum"), undefined),
|
|
26
|
-
ts.createStringLiteral("drizzle-orm/types/type"),
|
|
27
|
-
),
|
|
28
|
-
ts.createImportDeclaration(
|
|
29
|
-
undefined,
|
|
30
|
-
undefined,
|
|
31
|
-
ts.createImportClause(
|
|
32
|
-
undefined,
|
|
33
|
-
ts.createNamedImports([
|
|
34
|
-
ts.createImportSpecifier(undefined, ts.createIdentifier("Pool")),
|
|
35
|
-
]),
|
|
36
|
-
),
|
|
37
|
-
ts.createStringLiteral("pg"),
|
|
38
|
-
),
|
|
39
|
-
ts.createImportDeclaration(
|
|
40
|
-
undefined,
|
|
41
|
-
undefined,
|
|
42
|
-
ts.createImportClause(ts.createIdentifier("Serializer"), undefined),
|
|
43
|
-
ts.createStringLiteral("./serializer"),
|
|
44
|
-
),
|
|
45
|
-
];
|
|
46
|
-
|
|
47
|
-
const dynamicImports = [];
|
|
48
|
-
const tablesFilenames = fs.readdirSync(tablesFolder);
|
|
49
|
-
for (let i = 0; i < tablesFilenames.length; i++) {
|
|
50
|
-
const filename = tablesFilenames[i];
|
|
51
|
-
const importPath = `${tablesFolder}${filename.split(".")[0]}`;
|
|
52
|
-
dynamicImports.push(ts.createImportDeclaration(
|
|
53
|
-
undefined,
|
|
54
|
-
undefined,
|
|
55
|
-
ts.createImportClause(
|
|
56
|
-
undefined,
|
|
57
|
-
ts.createNamespaceImport(ts.createIdentifier(`i${i}`)),
|
|
58
|
-
),
|
|
59
|
-
ts.createStringLiteral(importPath),
|
|
60
|
-
));
|
|
61
|
-
}
|
|
62
|
-
const typesFilenames = fs.readdirSync(typesFolder);
|
|
63
|
-
for (let i = 0; i < typesFilenames.length; i++) {
|
|
64
|
-
const filename = typesFilenames[i];
|
|
65
|
-
const importPath = `${typesFolder}${filename.split(".")[0]}`;
|
|
66
|
-
dynamicImports.push(ts.createImportDeclaration(
|
|
67
|
-
undefined,
|
|
68
|
-
undefined,
|
|
69
|
-
ts.createImportClause(
|
|
70
|
-
undefined,
|
|
71
|
-
ts.createNamespaceImport(ts.createIdentifier(`t${i}`)),
|
|
72
|
-
),
|
|
73
|
-
ts.createStringLiteral(importPath),
|
|
74
|
-
));
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
const variablesStatements = [
|
|
78
|
-
ts.createVariableStatement(
|
|
79
|
-
undefined,
|
|
80
|
-
ts.createVariableDeclarationList(
|
|
81
|
-
[
|
|
82
|
-
ts.createVariableDeclaration(
|
|
83
|
-
ts.createIdentifier("db"),
|
|
84
|
-
undefined,
|
|
85
|
-
ts.createNew(ts.createIdentifier("DB"), undefined, [
|
|
86
|
-
ts.createNew(ts.createIdentifier("Pool"), undefined, []),
|
|
87
|
-
]),
|
|
88
|
-
),
|
|
89
|
-
],
|
|
90
|
-
ts.NodeFlags.Const,
|
|
91
|
-
),
|
|
92
|
-
),
|
|
93
|
-
ts.createVariableStatement(
|
|
94
|
-
undefined,
|
|
95
|
-
ts.createVariableDeclarationList(
|
|
96
|
-
[
|
|
97
|
-
ts.createVariableDeclaration(
|
|
98
|
-
ts.createIdentifier("serializer"),
|
|
99
|
-
undefined,
|
|
100
|
-
ts.createNew(ts.createIdentifier("Serializer"), undefined, []),
|
|
101
|
-
),
|
|
102
|
-
],
|
|
103
|
-
ts.NodeFlags.Const,
|
|
104
|
-
),
|
|
105
|
-
),
|
|
106
|
-
];
|
|
107
|
-
|
|
108
|
-
const blockStatements = [];
|
|
109
|
-
|
|
110
|
-
// const tables = []
|
|
111
|
-
blockStatements.push(ts.createVariableStatement(
|
|
112
|
-
undefined,
|
|
113
|
-
ts.createVariableDeclarationList(
|
|
114
|
-
[
|
|
115
|
-
ts.createVariableDeclaration(
|
|
116
|
-
ts.createIdentifier("tables"),
|
|
117
|
-
undefined,
|
|
118
|
-
ts.createArrayLiteral([], false),
|
|
119
|
-
),
|
|
120
|
-
],
|
|
121
|
-
ts.NodeFlags.Const,
|
|
122
|
-
),
|
|
123
|
-
));
|
|
124
|
-
|
|
125
|
-
for (let i = 0; i < tablesFilenames.length; i++) {
|
|
126
|
-
// const t1 = (new i1.default(db) as unknown as AbstractTable<any>);
|
|
127
|
-
// tables.push(t1)
|
|
128
|
-
const blockStatement = [
|
|
129
|
-
ts.createVariableStatement(
|
|
130
|
-
undefined,
|
|
131
|
-
ts.createVariableDeclarationList(
|
|
132
|
-
[
|
|
133
|
-
ts.createVariableDeclaration(
|
|
134
|
-
ts.createIdentifier("table" + i),
|
|
135
|
-
undefined,
|
|
136
|
-
ts.createParen(
|
|
137
|
-
ts.createAsExpression(
|
|
138
|
-
ts.createAsExpression(
|
|
139
|
-
ts.createNew(
|
|
140
|
-
ts.createPropertyAccess(
|
|
141
|
-
ts.createIdentifier("i" + i),
|
|
142
|
-
ts.createIdentifier("default"),
|
|
143
|
-
),
|
|
144
|
-
undefined,
|
|
145
|
-
[ts.createIdentifier("db")],
|
|
146
|
-
),
|
|
147
|
-
ts.createKeywordTypeNode(
|
|
148
|
-
ts.SyntaxKind.UnknownKeyword,
|
|
149
|
-
),
|
|
150
|
-
),
|
|
151
|
-
ts.createTypeReferenceNode(
|
|
152
|
-
ts.createIdentifier("AbstractTable"),
|
|
153
|
-
[
|
|
154
|
-
ts.createKeywordTypeNode(
|
|
155
|
-
ts.SyntaxKind.AnyKeyword,
|
|
156
|
-
),
|
|
157
|
-
],
|
|
158
|
-
),
|
|
159
|
-
),
|
|
160
|
-
),
|
|
161
|
-
),
|
|
162
|
-
],
|
|
163
|
-
ts.NodeFlags.Const,
|
|
164
|
-
),
|
|
165
|
-
),
|
|
166
|
-
ts.createExpressionStatement(
|
|
167
|
-
ts.createCall(
|
|
168
|
-
ts.createPropertyAccess(
|
|
169
|
-
ts.createIdentifier("tables"),
|
|
170
|
-
ts.createIdentifier("push"),
|
|
171
|
-
),
|
|
172
|
-
undefined,
|
|
173
|
-
[ts.createIdentifier("table" + i)],
|
|
174
|
-
),
|
|
175
|
-
),
|
|
176
|
-
];
|
|
177
|
-
|
|
178
|
-
blockStatements.push(...blockStatement);
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
// const enums = []
|
|
182
|
-
blockStatements.push(ts.createVariableStatement(
|
|
183
|
-
undefined,
|
|
184
|
-
ts.createVariableDeclarationList(
|
|
185
|
-
[
|
|
186
|
-
ts.createVariableDeclaration(
|
|
187
|
-
ts.createIdentifier("enums"),
|
|
188
|
-
undefined,
|
|
189
|
-
ts.createArrayLiteral([], false),
|
|
190
|
-
),
|
|
191
|
-
],
|
|
192
|
-
ts.NodeFlags.Const,
|
|
193
|
-
),
|
|
194
|
-
));
|
|
195
|
-
|
|
196
|
-
// Object.values(t0).forEach((t) => {
|
|
197
|
-
// enums.push(t as Enum<any>);
|
|
198
|
-
// });
|
|
199
|
-
if (typesFilenames.length > 0) {
|
|
200
|
-
blockStatements.push(
|
|
201
|
-
ts.createExpressionStatement(
|
|
202
|
-
ts.createCall(
|
|
203
|
-
ts.createPropertyAccess(
|
|
204
|
-
ts.createCall(
|
|
205
|
-
ts.createPropertyAccess(
|
|
206
|
-
ts.createIdentifier("Object"),
|
|
207
|
-
ts.createIdentifier("values"),
|
|
208
|
-
),
|
|
209
|
-
undefined,
|
|
210
|
-
[ts.createIdentifier("t0")],
|
|
211
|
-
),
|
|
212
|
-
ts.createIdentifier("forEach"),
|
|
213
|
-
),
|
|
214
|
-
undefined,
|
|
215
|
-
[
|
|
216
|
-
ts.createArrowFunction(
|
|
217
|
-
undefined,
|
|
218
|
-
undefined,
|
|
219
|
-
[
|
|
220
|
-
ts.createParameter(
|
|
221
|
-
undefined,
|
|
222
|
-
undefined,
|
|
223
|
-
undefined,
|
|
224
|
-
ts.createIdentifier("t"),
|
|
225
|
-
undefined,
|
|
226
|
-
undefined,
|
|
227
|
-
undefined,
|
|
228
|
-
),
|
|
229
|
-
],
|
|
230
|
-
undefined,
|
|
231
|
-
ts.createToken(ts.SyntaxKind.EqualsGreaterThanToken),
|
|
232
|
-
ts.createBlock(
|
|
233
|
-
[
|
|
234
|
-
ts.createExpressionStatement(
|
|
235
|
-
ts.createCall(
|
|
236
|
-
ts.createPropertyAccess(
|
|
237
|
-
ts.createIdentifier("enums"),
|
|
238
|
-
ts.createIdentifier("push"),
|
|
239
|
-
),
|
|
240
|
-
undefined,
|
|
241
|
-
[
|
|
242
|
-
ts.createAsExpression(
|
|
243
|
-
ts.createAsExpression(
|
|
244
|
-
ts.createIdentifier("t"),
|
|
245
|
-
ts.createKeywordTypeNode(
|
|
246
|
-
ts.SyntaxKind.UnknownKeyword,
|
|
247
|
-
),
|
|
248
|
-
),
|
|
249
|
-
ts.createTypeReferenceNode(
|
|
250
|
-
ts.createIdentifier("Enum"),
|
|
251
|
-
[
|
|
252
|
-
ts.createKeywordTypeNode(
|
|
253
|
-
ts.SyntaxKind.AnyKeyword,
|
|
254
|
-
),
|
|
255
|
-
],
|
|
256
|
-
),
|
|
257
|
-
),
|
|
258
|
-
],
|
|
259
|
-
),
|
|
260
|
-
),
|
|
261
|
-
],
|
|
262
|
-
true,
|
|
263
|
-
),
|
|
264
|
-
),
|
|
265
|
-
],
|
|
266
|
-
),
|
|
267
|
-
),
|
|
268
|
-
);
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
// return serializer.generate(tables, enums)
|
|
272
|
-
blockStatements.push(
|
|
273
|
-
ts.createReturn(
|
|
274
|
-
ts.createCall(
|
|
275
|
-
ts.createPropertyAccess(
|
|
276
|
-
ts.createIdentifier("serializer"),
|
|
277
|
-
ts.createIdentifier("generate"),
|
|
278
|
-
),
|
|
279
|
-
undefined,
|
|
280
|
-
[
|
|
281
|
-
ts.createIdentifier("tables"),
|
|
282
|
-
ts.createIdentifier("enums"),
|
|
283
|
-
],
|
|
284
|
-
),
|
|
285
|
-
),
|
|
286
|
-
);
|
|
287
|
-
|
|
288
|
-
const funcStatement = [
|
|
289
|
-
ts.createVariableStatement(
|
|
290
|
-
undefined,
|
|
291
|
-
ts.createVariableDeclarationList(
|
|
292
|
-
[
|
|
293
|
-
ts.createVariableDeclaration(
|
|
294
|
-
ts.createIdentifier("testFun"),
|
|
295
|
-
undefined,
|
|
296
|
-
ts.createArrowFunction(
|
|
297
|
-
undefined,
|
|
298
|
-
undefined,
|
|
299
|
-
[],
|
|
300
|
-
undefined,
|
|
301
|
-
ts.createToken(ts.SyntaxKind.EqualsGreaterThanToken),
|
|
302
|
-
// function body
|
|
303
|
-
ts.createBlock(
|
|
304
|
-
blockStatements,
|
|
305
|
-
true,
|
|
306
|
-
),
|
|
307
|
-
),
|
|
308
|
-
),
|
|
309
|
-
],
|
|
310
|
-
ts.NodeFlags.Const,
|
|
311
|
-
),
|
|
312
|
-
),
|
|
313
|
-
];
|
|
314
|
-
const invocationStatement = [
|
|
315
|
-
ts.createExpressionStatement(
|
|
316
|
-
ts.createCall(ts.createIdentifier("testFun"), undefined, []),
|
|
317
|
-
),
|
|
318
|
-
];
|
|
319
|
-
|
|
320
|
-
const outFile: ts.SourceFile = ts.createSourceFile(
|
|
321
|
-
"outfile.ts",
|
|
322
|
-
"",
|
|
323
|
-
ts.ScriptTarget.ES2015,
|
|
324
|
-
true,
|
|
325
|
-
ts.ScriptKind.TS,
|
|
326
|
-
);
|
|
327
|
-
|
|
328
|
-
const source = [];
|
|
329
|
-
source.push(...staticImports);
|
|
330
|
-
source.push(...dynamicImports);
|
|
331
|
-
source.push(...variablesStatements);
|
|
332
|
-
source.push(...funcStatement);
|
|
333
|
-
source.push(...invocationStatement);
|
|
334
|
-
|
|
335
|
-
const newFile = ts.factory.updateSourceFile(outFile, source);
|
|
336
|
-
|
|
337
|
-
return printer.printFile(newFile);
|
|
338
|
-
};
|
|
339
|
-
|
|
340
|
-
export default prepareFabricFile;
|
package/src/serilizer/index.ts
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import fs from "fs";
|
|
2
|
-
import { StringDecoder } from "string_decoder";
|
|
3
|
-
import prepareFabricFile from "./factory";
|
|
4
|
-
const esbuild = require("esbuild");
|
|
5
|
-
|
|
6
|
-
const serialize = (pathToTables: string, pathToTypes: string): string => {
|
|
7
|
-
const decoder = new StringDecoder();
|
|
8
|
-
// const preparedFarbic = prepareFabricFile("./examples/tables/", './examples/types/')
|
|
9
|
-
const preparedFarbic = prepareFabricFile(pathToTables, pathToTypes)
|
|
10
|
-
const ts = preparedFarbic;
|
|
11
|
-
|
|
12
|
-
fs.writeFileSync("__out.ts", ts, "utf-8");
|
|
13
|
-
const result = esbuild.buildSync({
|
|
14
|
-
entryPoints: ["__out.ts"],
|
|
15
|
-
bundle: true,
|
|
16
|
-
platform: "node",
|
|
17
|
-
write: false,
|
|
18
|
-
external: ["pg-native"],
|
|
19
|
-
});
|
|
20
|
-
|
|
21
|
-
fs.rmSync("__out.ts");
|
|
22
|
-
return eval(decoder.write(result.outputFiles[0].contents));
|
|
23
|
-
};
|
|
24
|
-
|
|
25
|
-
export default serialize;
|
package/src/simulator.ts
DELETED
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
declare global {
|
|
2
|
-
interface Array<T> {
|
|
3
|
-
exactlyOne(): T;
|
|
4
|
-
}
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
Array.prototype.exactlyOne = function () {
|
|
8
|
-
if (this.length !== 1) {
|
|
9
|
-
return undefined
|
|
10
|
-
}
|
|
11
|
-
return this[0]
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
interface Table {
|
|
15
|
-
name: string,
|
|
16
|
-
indexes?: any
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
interface Handler {
|
|
20
|
-
can(added: Table[], removed: Table[]): boolean
|
|
21
|
-
handle(added: Table[], removed: Table[]): { created: Table[], deleted: Table[], renamed: { from: Table, to: Table }[] }
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
class DryRun implements Handler {
|
|
25
|
-
can(_: Table[], removed: Table[]): boolean {
|
|
26
|
-
return removed.length === 0
|
|
27
|
-
}
|
|
28
|
-
handle(added: Table[], _: Table[]): { created: Table[]; deleted: Table[]; renamed: { from: Table; to: Table; }[]; } {
|
|
29
|
-
return { created: added, deleted: [], renamed: [] }
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
// class Fallback implements Handler {
|
|
35
|
-
// can(_: Table[], __: Table[]): boolean {
|
|
36
|
-
// return true
|
|
37
|
-
// }
|
|
38
|
-
// handle(added: Table[], _: Table[]): { created: Table[]; deleted: Table[]; renamed: { from: Table; to: Table; }[]; } {
|
|
39
|
-
// return { created: added, deleted: , renamed: [] }
|
|
40
|
-
// }
|
|
41
|
-
// }
|
|
42
|
-
|
|
43
|
-
class Case1 implements Handler {
|
|
44
|
-
can(_: Table[], removed: Table[]): boolean {
|
|
45
|
-
return removed.length === 1 && removed[0].name === 'citiess'
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
handle(added: Table[], removed: Table[]): { created: Table[]; deleted: Table[]; renamed: { from: Table; to: Table; }[]; } {
|
|
49
|
-
return { created: added, deleted: [], renamed: [{ from: removed[0], to: added[0] }] }
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
class Case2 implements Handler {
|
|
54
|
-
// authOtp, deleted, users -> authOtp renamed, cities added, deleted deleted
|
|
55
|
-
can(_: Table[], removed: Table[]): boolean {
|
|
56
|
-
return removed.length === 2 && removed[0].name === 'auth_otp'
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
handle(added: Table[], removed: Table[]): { created: Table[]; deleted: Table[]; renamed: { from: Table; to: Table; }[]; } {
|
|
60
|
-
return { created: added.slice(1), deleted: removed.slice(1), renamed: [{ from: removed[0], to: added[0] }] }
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
const handlers: Handler[] = []
|
|
65
|
-
handlers.push(new Case1())
|
|
66
|
-
handlers.push(new Case2())
|
|
67
|
-
handlers.push(new DryRun())
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
const resolveTables = (added: Table[], removed: Table[]) => {
|
|
71
|
-
const handler = handlers.filter(it => {
|
|
72
|
-
return it.can(added, removed)
|
|
73
|
-
}).exactlyOne()
|
|
74
|
-
|
|
75
|
-
if (!handler) {
|
|
76
|
-
console.log('added', added.map(it => it.name).join())
|
|
77
|
-
console.log('removed', removed.map(it => it.name).join())
|
|
78
|
-
throw new Error("No handler");
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
console.log(`Simluated by ${handler.constructor.name}`)
|
|
82
|
-
return handler.handle(added, removed)
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
export default resolveTables;
|