apeframework 0.0.0-dev.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.
- package/LICENSE +21 -0
- package/README.md +55 -0
- package/api/api.d.ts +7 -0
- package/api/api.js +2 -0
- package/api/api.ts +8 -0
- package/api/auth.d.ts +9 -0
- package/api/auth.js +11 -0
- package/api/auth.ts +9 -0
- package/api/config.d.ts +13 -0
- package/api/config.js +59 -0
- package/api/config.ts +69 -0
- package/api/endpoint.d.ts +20 -0
- package/api/endpoint.js +5 -0
- package/api/endpoint.ts +23 -0
- package/api/handler.d.ts +8 -0
- package/api/handler.js +13 -0
- package/api/handler.ts +23 -0
- package/api/index.d.ts +7 -0
- package/api/index.js +187 -0
- package/api/index.ts +97 -0
- package/api/route.d.ts +6 -0
- package/api/route.js +2 -0
- package/api/route.ts +4 -0
- package/api/router.d.ts +4 -0
- package/api/router.js +111 -0
- package/api/router.ts +36 -0
- package/api/schema.d.ts +29 -0
- package/api/schema.js +69 -0
- package/api/schema.ts +98 -0
- package/app/app.d.ts +6 -0
- package/app/app.js +2 -0
- package/app/app.ts +7 -0
- package/app/boot.d.ts +4 -0
- package/app/boot.js +2 -0
- package/app/boot.ts +5 -0
- package/app/bundle.d.ts +14 -0
- package/app/bundle.js +2 -0
- package/app/bundle.ts +15 -0
- package/app/config.d.ts +4 -0
- package/app/config.js +9 -0
- package/app/config.ts +9 -0
- package/app/index.d.ts +9 -0
- package/app/index.js +103 -0
- package/app/index.ts +32 -0
- package/bin/ape-cli-ts.js +4 -0
- package/bin/ape-cli.js +2 -0
- package/cli/command.d.ts +4 -0
- package/cli/command.js +2 -0
- package/cli/command.ts +7 -0
- package/cli/index.d.ts +2 -0
- package/cli/index.js +103 -0
- package/cli/index.ts +41 -0
- package/cli/internal/api.d.ts +3 -0
- package/cli/internal/api.js +110 -0
- package/cli/internal/api.ts +38 -0
- package/cli/internal/index.d.ts +2 -0
- package/cli/internal/index.js +13 -0
- package/cli/internal/index.ts +9 -0
- package/cli/internal/migration.d.ts +3 -0
- package/cli/internal/migration.js +214 -0
- package/cli/internal/migration.ts +110 -0
- package/cli/internal/queue.d.ts +3 -0
- package/cli/internal/queue.js +147 -0
- package/cli/internal/queue.ts +60 -0
- package/cli/utils.d.ts +18 -0
- package/cli/utils.js +52 -0
- package/cli/utils.ts +48 -0
- package/config/config.d.ts +5 -0
- package/config/config.js +2 -0
- package/config/config.ts +6 -0
- package/config/configuration.d.ts +63 -0
- package/config/configuration.js +2 -0
- package/config/configuration.ts +72 -0
- package/config/default.d.ts +33 -0
- package/config/default.js +34 -0
- package/config/default.ts +40 -0
- package/config/env.d.ts +66 -0
- package/config/env.js +72 -0
- package/config/env.ts +79 -0
- package/config/index.d.ts +8 -0
- package/config/index.js +91 -0
- package/config/index.ts +101 -0
- package/config/loadFile.d.ts +2 -0
- package/config/loadFile.js +13 -0
- package/config/loadFile.ts +9 -0
- package/config/node.d.ts +5 -0
- package/config/node.js +11 -0
- package/config/node.ts +7 -0
- package/config/store.d.ts +6 -0
- package/config/store.js +20 -0
- package/config/store.ts +15 -0
- package/db/config/index.d.ts +10 -0
- package/db/config/index.js +43 -0
- package/db/config/index.ts +35 -0
- package/db/config/memory.d.ts +3 -0
- package/db/config/memory.js +15 -0
- package/db/config/memory.ts +13 -0
- package/db/config/mysql.d.ts +3 -0
- package/db/config/mysql.js +56 -0
- package/db/config/mysql.ts +58 -0
- package/db/config/postgres.d.ts +3 -0
- package/db/config/postgres.js +59 -0
- package/db/config/postgres.ts +61 -0
- package/db/config/sqlite.d.ts +3 -0
- package/db/config/sqlite.js +21 -0
- package/db/config/sqlite.ts +20 -0
- package/db/database.d.ts +3 -0
- package/db/database.js +3 -0
- package/db/database.ts +5 -0
- package/db/index.d.ts +10 -0
- package/db/index.js +32 -0
- package/db/index.ts +26 -0
- package/db/postProcess.d.ts +3 -0
- package/db/postProcess.js +25 -0
- package/db/postProcess.ts +27 -0
- package/db/schema/builder/_.d.ts +30 -0
- package/db/schema/builder/_.js +87 -0
- package/db/schema/builder/_.ts +101 -0
- package/db/schema/builder/columnBuilder.d.ts +7 -0
- package/db/schema/builder/columnBuilder.js +14 -0
- package/db/schema/builder/columnBuilder.ts +15 -0
- package/db/schema/builder/dataType.d.ts +28 -0
- package/db/schema/builder/dataType.js +170 -0
- package/db/schema/builder/dataType.ts +184 -0
- package/db/schema/builder/index.d.ts +15 -0
- package/db/schema/builder/index.js +42 -0
- package/db/schema/builder/index.ts +50 -0
- package/db/schema/builder/tableBuilder.d.ts +45 -0
- package/db/schema/builder/tableBuilder.js +307 -0
- package/db/schema/builder/tableBuilder.ts +409 -0
- package/db/schema/config.d.ts +4 -0
- package/db/schema/config.js +5 -0
- package/db/schema/config.ts +3 -0
- package/db/schema/index.d.ts +7 -0
- package/db/schema/index.js +252 -0
- package/db/schema/index.ts +88 -0
- package/db/schema/migration.d.ts +6 -0
- package/db/schema/migration.js +2 -0
- package/db/schema/migration.ts +7 -0
- package/db/schema/migrationList.d.ts +5 -0
- package/db/schema/migrationList.js +2 -0
- package/db/schema/migrationList.ts +5 -0
- package/db/schema/migrationSource.d.ts +10 -0
- package/db/schema/migrationSource.js +60 -0
- package/db/schema/migrationSource.ts +24 -0
- package/db/schema/schema.d.ts +6 -0
- package/db/schema/schema.js +2 -0
- package/db/schema/schema.ts +7 -0
- package/db/utils/index.d.ts +7 -0
- package/db/utils/index.js +10 -0
- package/db/utils/index.ts +8 -0
- package/db/utils/insertGetKey.d.ts +8 -0
- package/db/utils/insertGetKey.js +109 -0
- package/db/utils/insertGetKey.ts +80 -0
- package/i18n/config.d.ts +4 -0
- package/i18n/config.js +9 -0
- package/i18n/config.ts +9 -0
- package/i18n/i18n.d.ts +5 -0
- package/i18n/i18n.js +2 -0
- package/i18n/i18n.ts +6 -0
- package/i18n/index.d.ts +8 -0
- package/i18n/index.js +155 -0
- package/i18n/index.ts +42 -0
- package/i18n/internationalization.d.ts +3 -0
- package/i18n/internationalization.js +2 -0
- package/i18n/internationalization.ts +5 -0
- package/i18n/translation.d.ts +4 -0
- package/i18n/translation.js +2 -0
- package/i18n/translation.ts +4 -0
- package/jwt/config.d.ts +5 -0
- package/jwt/config.js +12 -0
- package/jwt/config.ts +11 -0
- package/jwt/index.d.ts +8 -0
- package/jwt/index.js +90 -0
- package/jwt/index.ts +60 -0
- package/jwt/jwt.d.ts +6 -0
- package/jwt/jwt.js +2 -0
- package/jwt/jwt.ts +19 -0
- package/jwt/user.d.ts +4 -0
- package/jwt/user.js +2 -0
- package/jwt/user.ts +4 -0
- package/log/config.d.ts +23 -0
- package/log/config.js +47 -0
- package/log/config.ts +43 -0
- package/log/index.d.ts +4 -0
- package/log/index.js +9 -0
- package/log/index.ts +9 -0
- package/log/logger.d.ts +3 -0
- package/log/logger.js +2 -0
- package/log/logger.ts +5 -0
- package/mail/config.d.ts +4 -0
- package/mail/config.js +5 -0
- package/mail/config.ts +3 -0
- package/mail/email.d.ts +20 -0
- package/mail/email.js +2 -0
- package/mail/email.ts +21 -0
- package/mail/index.d.ts +2 -0
- package/mail/index.js +4 -0
- package/mail/index.ts +3 -0
- package/mail/mail.d.ts +12 -0
- package/mail/mail.js +2 -0
- package/mail/mail.ts +13 -0
- package/mail/module/bypass/index.d.ts +6 -0
- package/mail/module/bypass/index.js +74 -0
- package/mail/module/bypass/index.ts +9 -0
- package/mail/module/config.d.ts +11 -0
- package/mail/module/config.js +24 -0
- package/mail/module/config.ts +25 -0
- package/mail/module/index.d.ts +8 -0
- package/mail/module/index.js +107 -0
- package/mail/module/index.ts +61 -0
- package/mail/module/smtp/config.d.ts +6 -0
- package/mail/module/smtp/config.js +25 -0
- package/mail/module/smtp/config.ts +25 -0
- package/mail/module/smtp/index.d.ts +9 -0
- package/mail/module/smtp/index.js +104 -0
- package/mail/module/smtp/index.ts +36 -0
- package/mq/index.d.ts +3 -0
- package/mq/index.js +27 -0
- package/mq/index.ts +4 -0
- package/mq/module/bypass/index.d.ts +13 -0
- package/mq/module/bypass/index.js +86 -0
- package/mq/module/bypass/index.ts +20 -0
- package/mq/module/config.d.ts +6 -0
- package/mq/module/config.js +15 -0
- package/mq/module/config.ts +14 -0
- package/mq/module/index.d.ts +9 -0
- package/mq/module/index.js +93 -0
- package/mq/module/index.ts +24 -0
- package/mq/module/redis/config.d.ts +27 -0
- package/mq/module/redis/config.js +37 -0
- package/mq/module/redis/config.ts +34 -0
- package/mq/module/redis/index.d.ts +15 -0
- package/mq/module/redis/index.js +132 -0
- package/mq/module/redis/index.ts +60 -0
- package/mq/mq.d.ts +15 -0
- package/mq/mq.js +2 -0
- package/mq/mq.ts +18 -0
- package/mq/queue.d.ts +9 -0
- package/mq/queue.js +2 -0
- package/mq/queue.ts +11 -0
- package/package.json +53 -0
- package/pwd/config.d.ts +4 -0
- package/pwd/config.js +9 -0
- package/pwd/config.ts +9 -0
- package/pwd/index.d.ts +6 -0
- package/pwd/index.js +21 -0
- package/pwd/index.ts +20 -0
- package/pwd/pwd.d.ts +4 -0
- package/pwd/pwd.js +2 -0
- package/pwd/pwd.ts +4 -0
- package/utils/index.d.ts +25 -0
- package/utils/index.js +72 -0
- package/utils/index.ts +56 -0
|
@@ -0,0 +1,409 @@
|
|
|
1
|
+
import { booleanColumnRegex } from '../../postProcess'
|
|
2
|
+
import { ColumnBuilder } from './columnBuilder'
|
|
3
|
+
import dataType from './dataType'
|
|
4
|
+
import type { Database } from '../../database'
|
|
5
|
+
|
|
6
|
+
export type NullConstraint = 'null' | 'notNull'
|
|
7
|
+
|
|
8
|
+
export class TableBuilder {
|
|
9
|
+
private knexTableBuilder: Database.TableBuilder
|
|
10
|
+
|
|
11
|
+
constructor(knexTableBuilder: Database.TableBuilder) {
|
|
12
|
+
this.knexTableBuilder = knexTableBuilder
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
boolean(
|
|
16
|
+
name: string,
|
|
17
|
+
nullConstraint: NullConstraint,
|
|
18
|
+
) {
|
|
19
|
+
if (!name.match(booleanColumnRegex)) {
|
|
20
|
+
throw new Error(`db: invalid column name "${name}"`)
|
|
21
|
+
}
|
|
22
|
+
const knexColumnBuilder = this.knexTableBuilder
|
|
23
|
+
.specificType(name, dataType.boolean())
|
|
24
|
+
if (nullConstraint === 'notNull') knexColumnBuilder.notNullable()
|
|
25
|
+
return new ColumnBuilder(knexColumnBuilder)
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
tinyInt(
|
|
29
|
+
name: string,
|
|
30
|
+
nullConstraint: NullConstraint,
|
|
31
|
+
) {
|
|
32
|
+
if (name.match(booleanColumnRegex)) {
|
|
33
|
+
throw new Error(`db: invalid column name "${name}"`)
|
|
34
|
+
}
|
|
35
|
+
const knexColumnBuilder = this.knexTableBuilder
|
|
36
|
+
.specificType(name, dataType.tinyInt())
|
|
37
|
+
if (nullConstraint === 'notNull') knexColumnBuilder.notNullable()
|
|
38
|
+
return new ColumnBuilder(knexColumnBuilder)
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
smallInt(
|
|
42
|
+
name: string,
|
|
43
|
+
nullConstraint: NullConstraint,
|
|
44
|
+
) {
|
|
45
|
+
if (name.match(booleanColumnRegex)) {
|
|
46
|
+
throw new Error(`db: invalid column name "${name}"`)
|
|
47
|
+
}
|
|
48
|
+
const knexColumnBuilder = this.knexTableBuilder
|
|
49
|
+
.specificType(name, dataType.smallInt())
|
|
50
|
+
if (nullConstraint === 'notNull') knexColumnBuilder.notNullable()
|
|
51
|
+
return new ColumnBuilder(knexColumnBuilder)
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
smallIntPrimaryAutoIncrement(
|
|
55
|
+
name: string,
|
|
56
|
+
) {
|
|
57
|
+
if (name.match(booleanColumnRegex)) {
|
|
58
|
+
throw new Error(`db: invalid column name "${name}"`)
|
|
59
|
+
}
|
|
60
|
+
const knexColumnBuilder = this.knexTableBuilder
|
|
61
|
+
.specificType(name, dataType.smallIntPrimaryAutoIncrement())
|
|
62
|
+
return new ColumnBuilder(knexColumnBuilder)
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
int(
|
|
66
|
+
name: string,
|
|
67
|
+
nullConstraint: NullConstraint,
|
|
68
|
+
) {
|
|
69
|
+
if (name.match(booleanColumnRegex)) {
|
|
70
|
+
throw new Error(`db: invalid column name "${name}"`)
|
|
71
|
+
}
|
|
72
|
+
const knexColumnBuilder = this.knexTableBuilder
|
|
73
|
+
.specificType(name, dataType.int())
|
|
74
|
+
if (nullConstraint === 'notNull') knexColumnBuilder.notNullable()
|
|
75
|
+
return new ColumnBuilder(knexColumnBuilder)
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
intPrimaryAutoIncrement(
|
|
79
|
+
name: string,
|
|
80
|
+
) {
|
|
81
|
+
if (name.match(booleanColumnRegex)) {
|
|
82
|
+
throw new Error(`db: invalid column name "${name}"`)
|
|
83
|
+
}
|
|
84
|
+
const knexColumnBuilder = this.knexTableBuilder
|
|
85
|
+
.specificType(name, dataType.intPrimaryAutoIncrement())
|
|
86
|
+
return new ColumnBuilder(knexColumnBuilder)
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
bigInt(
|
|
90
|
+
name: string,
|
|
91
|
+
nullConstraint: NullConstraint,
|
|
92
|
+
) {
|
|
93
|
+
if (name.match(booleanColumnRegex)) {
|
|
94
|
+
throw new Error(`db: invalid column name "${name}"`)
|
|
95
|
+
}
|
|
96
|
+
const knexColumnBuilder = this.knexTableBuilder
|
|
97
|
+
.specificType(name, dataType.bigInt())
|
|
98
|
+
if (nullConstraint === 'notNull') knexColumnBuilder.notNullable()
|
|
99
|
+
return new ColumnBuilder(knexColumnBuilder)
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
bigIntPrimaryAutoIncrement(
|
|
103
|
+
name: string,
|
|
104
|
+
) {
|
|
105
|
+
if (name.match(booleanColumnRegex)) {
|
|
106
|
+
throw new Error(`db: invalid column name "${name}"`)
|
|
107
|
+
}
|
|
108
|
+
const knexColumnBuilder = this.knexTableBuilder
|
|
109
|
+
.specificType(name, dataType.bigIntPrimaryAutoIncrement())
|
|
110
|
+
return new ColumnBuilder(knexColumnBuilder)
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
float(
|
|
114
|
+
name: string,
|
|
115
|
+
nullConstraint: NullConstraint,
|
|
116
|
+
) {
|
|
117
|
+
if (name.match(booleanColumnRegex)) {
|
|
118
|
+
throw new Error(`db: invalid column name "${name}"`)
|
|
119
|
+
}
|
|
120
|
+
const knexColumnBuilder = this.knexTableBuilder
|
|
121
|
+
.specificType(name, dataType.float())
|
|
122
|
+
if (nullConstraint === 'notNull') knexColumnBuilder.notNullable()
|
|
123
|
+
return new ColumnBuilder(knexColumnBuilder)
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
double(
|
|
127
|
+
name: string,
|
|
128
|
+
nullConstraint: NullConstraint,
|
|
129
|
+
) {
|
|
130
|
+
if (name.match(booleanColumnRegex)) {
|
|
131
|
+
throw new Error(`db: invalid column name "${name}"`)
|
|
132
|
+
}
|
|
133
|
+
const knexColumnBuilder = this.knexTableBuilder
|
|
134
|
+
.specificType(name, dataType.double())
|
|
135
|
+
if (nullConstraint === 'notNull') knexColumnBuilder.notNullable()
|
|
136
|
+
return new ColumnBuilder(knexColumnBuilder)
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
numeric(
|
|
140
|
+
name: string,
|
|
141
|
+
precision: number,
|
|
142
|
+
scale: number,
|
|
143
|
+
nullConstraint: NullConstraint,
|
|
144
|
+
) {
|
|
145
|
+
if (name.match(booleanColumnRegex)) {
|
|
146
|
+
throw new Error(`db: invalid column name "${name}"`)
|
|
147
|
+
}
|
|
148
|
+
if (precision < 1 || precision > 15) {
|
|
149
|
+
throw new Error(`db: invalid column precision "${precision}"`)
|
|
150
|
+
}
|
|
151
|
+
if (scale < 0 || scale >= precision) {
|
|
152
|
+
throw new Error(`db: invalid column scale "${scale}"`)
|
|
153
|
+
}
|
|
154
|
+
const knexColumnBuilder = this.knexTableBuilder
|
|
155
|
+
.specificType(name, dataType.numeric(precision, scale))
|
|
156
|
+
if (nullConstraint === 'notNull') knexColumnBuilder.notNullable()
|
|
157
|
+
return new ColumnBuilder(knexColumnBuilder)
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
char(
|
|
161
|
+
name: string,
|
|
162
|
+
length: number,
|
|
163
|
+
nullConstraint: NullConstraint,
|
|
164
|
+
) {
|
|
165
|
+
if (name.match(booleanColumnRegex)) {
|
|
166
|
+
throw new Error(`db: invalid column name "${name}"`)
|
|
167
|
+
}
|
|
168
|
+
if (length < 1 || length > 255) {
|
|
169
|
+
throw new Error(`db: invalid column length "${length}"`)
|
|
170
|
+
}
|
|
171
|
+
const knexColumnBuilder = this.knexTableBuilder
|
|
172
|
+
.specificType(name, dataType.char(length))
|
|
173
|
+
if (nullConstraint === 'notNull') knexColumnBuilder.notNullable()
|
|
174
|
+
return new ColumnBuilder(knexColumnBuilder)
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
varChar(
|
|
178
|
+
name: string,
|
|
179
|
+
maxLength: number,
|
|
180
|
+
nullConstraint: NullConstraint,
|
|
181
|
+
) {
|
|
182
|
+
if (name.match(booleanColumnRegex)) {
|
|
183
|
+
throw new Error(`db: invalid column name "${name}"`)
|
|
184
|
+
}
|
|
185
|
+
if (maxLength < 1 || maxLength > 65535) {
|
|
186
|
+
throw new Error(`db: invalid column maxLength "${maxLength}"`)
|
|
187
|
+
}
|
|
188
|
+
const knexColumnBuilder = this.knexTableBuilder
|
|
189
|
+
.specificType(name, dataType.varChar(maxLength))
|
|
190
|
+
if (nullConstraint === 'notNull') knexColumnBuilder.notNullable()
|
|
191
|
+
return new ColumnBuilder(knexColumnBuilder)
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
tinyText(
|
|
195
|
+
name: string,
|
|
196
|
+
nullConstraint: NullConstraint,
|
|
197
|
+
) {
|
|
198
|
+
if (name.match(booleanColumnRegex)) {
|
|
199
|
+
throw new Error(`db: invalid column name "${name}"`)
|
|
200
|
+
}
|
|
201
|
+
const knexColumnBuilder = this.knexTableBuilder
|
|
202
|
+
.specificType(name, dataType.tinyText())
|
|
203
|
+
if (nullConstraint === 'notNull') knexColumnBuilder.notNullable()
|
|
204
|
+
return new ColumnBuilder(knexColumnBuilder)
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
text(
|
|
208
|
+
name: string,
|
|
209
|
+
nullConstraint: NullConstraint,
|
|
210
|
+
) {
|
|
211
|
+
if (name.match(booleanColumnRegex)) {
|
|
212
|
+
throw new Error(`db: invalid column name "${name}"`)
|
|
213
|
+
}
|
|
214
|
+
const knexColumnBuilder = this.knexTableBuilder
|
|
215
|
+
.specificType(name, dataType.text())
|
|
216
|
+
if (nullConstraint === 'notNull') knexColumnBuilder.notNullable()
|
|
217
|
+
return new ColumnBuilder(knexColumnBuilder)
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
longText(
|
|
221
|
+
name: string,
|
|
222
|
+
nullConstraint: NullConstraint,
|
|
223
|
+
) {
|
|
224
|
+
if (name.match(booleanColumnRegex)) {
|
|
225
|
+
throw new Error(`db: invalid column name "${name}"`)
|
|
226
|
+
}
|
|
227
|
+
const knexColumnBuilder = this.knexTableBuilder
|
|
228
|
+
.specificType(name, dataType.longText())
|
|
229
|
+
if (nullConstraint === 'notNull') knexColumnBuilder.notNullable()
|
|
230
|
+
return new ColumnBuilder(knexColumnBuilder)
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
binary(
|
|
234
|
+
name: string,
|
|
235
|
+
length: number,
|
|
236
|
+
nullConstraint: NullConstraint,
|
|
237
|
+
) {
|
|
238
|
+
if (name.match(booleanColumnRegex)) {
|
|
239
|
+
throw new Error(`db: invalid column name "${name}"`)
|
|
240
|
+
}
|
|
241
|
+
if (length < 1 || length > 255) {
|
|
242
|
+
throw new Error(`db: invalid column length "${length}"`)
|
|
243
|
+
}
|
|
244
|
+
const knexColumnBuilder = this.knexTableBuilder
|
|
245
|
+
.specificType(name, dataType.binary(length))
|
|
246
|
+
if (nullConstraint === 'notNull') knexColumnBuilder.notNullable()
|
|
247
|
+
return new ColumnBuilder(knexColumnBuilder)
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
varBinary(
|
|
251
|
+
name: string,
|
|
252
|
+
maxLength: number,
|
|
253
|
+
nullConstraint: NullConstraint,
|
|
254
|
+
) {
|
|
255
|
+
if (name.match(booleanColumnRegex)) {
|
|
256
|
+
throw new Error(`db: invalid column name "${name}"`)
|
|
257
|
+
}
|
|
258
|
+
if (maxLength < 1 || maxLength > 65535) {
|
|
259
|
+
throw new Error(`db: invalid column maxLength "${maxLength}"`)
|
|
260
|
+
}
|
|
261
|
+
const knexColumnBuilder = this.knexTableBuilder
|
|
262
|
+
.specificType(name, dataType.varBinary(maxLength))
|
|
263
|
+
if (nullConstraint === 'notNull') knexColumnBuilder.notNullable()
|
|
264
|
+
return new ColumnBuilder(knexColumnBuilder)
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
tinyBlob(
|
|
268
|
+
name: string,
|
|
269
|
+
nullConstraint: NullConstraint,
|
|
270
|
+
) {
|
|
271
|
+
if (name.match(booleanColumnRegex)) {
|
|
272
|
+
throw new Error(`db: invalid column name "${name}"`)
|
|
273
|
+
}
|
|
274
|
+
const knexColumnBuilder = this.knexTableBuilder
|
|
275
|
+
.specificType(name, dataType.tinyBlob())
|
|
276
|
+
if (nullConstraint === 'notNull') knexColumnBuilder.notNullable()
|
|
277
|
+
return new ColumnBuilder(knexColumnBuilder)
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
blob(
|
|
281
|
+
name: string,
|
|
282
|
+
nullConstraint: NullConstraint,
|
|
283
|
+
) {
|
|
284
|
+
if (name.match(booleanColumnRegex)) {
|
|
285
|
+
throw new Error(`db: invalid column name "${name}"`)
|
|
286
|
+
}
|
|
287
|
+
const knexColumnBuilder = this.knexTableBuilder
|
|
288
|
+
.specificType(name, dataType.blob())
|
|
289
|
+
if (nullConstraint === 'notNull') knexColumnBuilder.notNullable()
|
|
290
|
+
return new ColumnBuilder(knexColumnBuilder)
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
longBlob(
|
|
294
|
+
name: string,
|
|
295
|
+
nullConstraint: NullConstraint,
|
|
296
|
+
) {
|
|
297
|
+
if (name.match(booleanColumnRegex)) {
|
|
298
|
+
throw new Error(`db: invalid column name "${name}"`)
|
|
299
|
+
}
|
|
300
|
+
const knexColumnBuilder = this.knexTableBuilder
|
|
301
|
+
.specificType(name, dataType.longBlob())
|
|
302
|
+
if (nullConstraint === 'notNull') knexColumnBuilder.notNullable()
|
|
303
|
+
return new ColumnBuilder(knexColumnBuilder)
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
timestamp(
|
|
307
|
+
name: string,
|
|
308
|
+
nullConstraint: NullConstraint,
|
|
309
|
+
) {
|
|
310
|
+
if (name.match(booleanColumnRegex)) {
|
|
311
|
+
throw new Error(`db: invalid column name "${name}"`)
|
|
312
|
+
}
|
|
313
|
+
const knexColumnBuilder = this.knexTableBuilder
|
|
314
|
+
.specificType(name, dataType.timestamp())
|
|
315
|
+
if (nullConstraint === 'notNull') knexColumnBuilder.notNullable()
|
|
316
|
+
return new ColumnBuilder(knexColumnBuilder)
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
dateTime(
|
|
320
|
+
name: string,
|
|
321
|
+
nullConstraint: NullConstraint,
|
|
322
|
+
) {
|
|
323
|
+
if (name.match(booleanColumnRegex)) {
|
|
324
|
+
throw new Error(`db: invalid column name "${name}"`)
|
|
325
|
+
}
|
|
326
|
+
const knexColumnBuilder = this.knexTableBuilder
|
|
327
|
+
.specificType(name, dataType.dateTime())
|
|
328
|
+
if (nullConstraint === 'notNull') knexColumnBuilder.notNullable()
|
|
329
|
+
return new ColumnBuilder(knexColumnBuilder)
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
date(
|
|
333
|
+
name: string,
|
|
334
|
+
nullConstraint: NullConstraint,
|
|
335
|
+
) {
|
|
336
|
+
if (name.match(booleanColumnRegex)) {
|
|
337
|
+
throw new Error(`db: invalid column name "${name}"`)
|
|
338
|
+
}
|
|
339
|
+
const knexColumnBuilder = this.knexTableBuilder
|
|
340
|
+
.specificType(name, dataType.date())
|
|
341
|
+
if (nullConstraint === 'notNull') knexColumnBuilder.notNullable()
|
|
342
|
+
return new ColumnBuilder(knexColumnBuilder)
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
time(
|
|
346
|
+
name: string,
|
|
347
|
+
nullConstraint: NullConstraint,
|
|
348
|
+
) {
|
|
349
|
+
if (name.match(booleanColumnRegex)) {
|
|
350
|
+
throw new Error(`db: invalid column name "${name}"`)
|
|
351
|
+
}
|
|
352
|
+
const knexColumnBuilder = this.knexTableBuilder
|
|
353
|
+
.specificType(name, dataType.time())
|
|
354
|
+
if (nullConstraint === 'notNull') knexColumnBuilder.notNullable()
|
|
355
|
+
return new ColumnBuilder(knexColumnBuilder)
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
dropColumn(name: string) {
|
|
359
|
+
this.knexTableBuilder.dropColumn(name)
|
|
360
|
+
return this
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
renameColumn(name: string, toName: string) {
|
|
364
|
+
this.knexTableBuilder.renameColumn(name, toName)
|
|
365
|
+
return this
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
setNull() {
|
|
369
|
+
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
setNotNull() {
|
|
373
|
+
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
setPrimary() {
|
|
377
|
+
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
dropPrimary() {
|
|
381
|
+
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
addForeign() {
|
|
385
|
+
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
dropForeign() {
|
|
389
|
+
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
addUnique() {
|
|
393
|
+
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
dropUnique() {
|
|
397
|
+
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
addIndex() {
|
|
401
|
+
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
dropIndex() {
|
|
405
|
+
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
export default TableBuilder
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { MigrationList } from './migrationList';
|
|
2
|
+
import type { Schema } from './schema';
|
|
3
|
+
export declare const listMigrations: (bundleId?: string, pending?: boolean) => Promise<MigrationList>;
|
|
4
|
+
export declare const runMigrations: (bundleId?: string, one?: boolean) => Promise<MigrationList>;
|
|
5
|
+
export declare const rollbackMigrations: (bundleId?: string, one?: boolean) => Promise<MigrationList>;
|
|
6
|
+
declare const schema: Schema;
|
|
7
|
+
export default schema;
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
+
function step(op) {
|
|
16
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
18
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
+
switch (op[0]) {
|
|
21
|
+
case 0: case 1: t = op; break;
|
|
22
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
+
default:
|
|
26
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
+
if (t[2]) _.ops.pop();
|
|
31
|
+
_.trys.pop(); continue;
|
|
32
|
+
}
|
|
33
|
+
op = body.call(thisArg, _);
|
|
34
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
39
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
40
|
+
};
|
|
41
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
+
exports.rollbackMigrations = exports.runMigrations = exports.listMigrations = void 0;
|
|
43
|
+
var app_1 = require("../../app");
|
|
44
|
+
var migrationSource_1 = require("./migrationSource");
|
|
45
|
+
var config_1 = __importDefault(require("./config"));
|
|
46
|
+
var __1 = __importDefault(require(".."));
|
|
47
|
+
var migrationConfig = function (bundle) { return ({
|
|
48
|
+
migrationSource: new migrationSource_1.MigrationSource(bundle),
|
|
49
|
+
tableName: "".concat(config_1.default.tablePrefix, "_").concat(bundle.bundleId),
|
|
50
|
+
}); };
|
|
51
|
+
var filterBundles = function (bundleId, reverse, one) { return __awaiter(void 0, void 0, void 0, function () {
|
|
52
|
+
var bundles, bundle, _i, _a, bundle, _b;
|
|
53
|
+
return __generator(this, function (_c) {
|
|
54
|
+
switch (_c.label) {
|
|
55
|
+
case 0:
|
|
56
|
+
bundles = [];
|
|
57
|
+
if (!bundleId) return [3 /*break*/, 2];
|
|
58
|
+
return [4 /*yield*/, (0, app_1.getBundle)(bundleId)];
|
|
59
|
+
case 1:
|
|
60
|
+
bundle = _c.sent();
|
|
61
|
+
if (bundle)
|
|
62
|
+
bundles.push(bundle);
|
|
63
|
+
return [3 /*break*/, 8];
|
|
64
|
+
case 2:
|
|
65
|
+
_i = 0;
|
|
66
|
+
return [4 /*yield*/, (0, app_1.getBundles)()];
|
|
67
|
+
case 3:
|
|
68
|
+
_a = _c.sent();
|
|
69
|
+
_c.label = 4;
|
|
70
|
+
case 4:
|
|
71
|
+
if (!(_i < _a.length)) return [3 /*break*/, 8];
|
|
72
|
+
bundle = _a[_i];
|
|
73
|
+
_b = bundle.migrations;
|
|
74
|
+
if (!_b) return [3 /*break*/, 6];
|
|
75
|
+
return [4 /*yield*/, bundle.migrations()];
|
|
76
|
+
case 5:
|
|
77
|
+
_b = (_c.sent()).length;
|
|
78
|
+
_c.label = 6;
|
|
79
|
+
case 6:
|
|
80
|
+
if (_b) {
|
|
81
|
+
bundles.push(bundle);
|
|
82
|
+
}
|
|
83
|
+
_c.label = 7;
|
|
84
|
+
case 7:
|
|
85
|
+
_i++;
|
|
86
|
+
return [3 /*break*/, 4];
|
|
87
|
+
case 8:
|
|
88
|
+
if (reverse)
|
|
89
|
+
bundles.reverse();
|
|
90
|
+
return [2 /*return*/, bundles.slice(0, one ? 1 : undefined)];
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
}); };
|
|
94
|
+
var listMigrations = function (bundleId, pending) { return __awaiter(void 0, void 0, void 0, function () {
|
|
95
|
+
var migrationList, _loop_1, _i, _a, bundle;
|
|
96
|
+
return __generator(this, function (_b) {
|
|
97
|
+
switch (_b.label) {
|
|
98
|
+
case 0:
|
|
99
|
+
migrationList = [];
|
|
100
|
+
_loop_1 = function (bundle) {
|
|
101
|
+
var result, done, pendingMigrations;
|
|
102
|
+
return __generator(this, function (_c) {
|
|
103
|
+
switch (_c.label) {
|
|
104
|
+
case 0: return [4 /*yield*/, __1.default.migrate.list(migrationConfig(bundle))];
|
|
105
|
+
case 1:
|
|
106
|
+
result = _c.sent();
|
|
107
|
+
done = result[0];
|
|
108
|
+
pendingMigrations = result[1];
|
|
109
|
+
if (!pending) {
|
|
110
|
+
done.forEach(function (migration) { return migrationList.push({
|
|
111
|
+
bundleId: bundle.bundleId,
|
|
112
|
+
migrationId: migration.name,
|
|
113
|
+
pending: false,
|
|
114
|
+
}); });
|
|
115
|
+
}
|
|
116
|
+
pendingMigrations.forEach(function (migration) { return migrationList.push({
|
|
117
|
+
bundleId: bundle.bundleId,
|
|
118
|
+
migrationId: migration.migrationId,
|
|
119
|
+
pending: true,
|
|
120
|
+
}); });
|
|
121
|
+
return [2 /*return*/];
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
};
|
|
125
|
+
_i = 0;
|
|
126
|
+
return [4 /*yield*/, filterBundles(bundleId)];
|
|
127
|
+
case 1:
|
|
128
|
+
_a = _b.sent();
|
|
129
|
+
_b.label = 2;
|
|
130
|
+
case 2:
|
|
131
|
+
if (!(_i < _a.length)) return [3 /*break*/, 5];
|
|
132
|
+
bundle = _a[_i];
|
|
133
|
+
return [5 /*yield**/, _loop_1(bundle)];
|
|
134
|
+
case 3:
|
|
135
|
+
_b.sent();
|
|
136
|
+
_b.label = 4;
|
|
137
|
+
case 4:
|
|
138
|
+
_i++;
|
|
139
|
+
return [3 /*break*/, 2];
|
|
140
|
+
case 5: return [2 /*return*/, migrationList];
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
}); };
|
|
144
|
+
exports.listMigrations = listMigrations;
|
|
145
|
+
var runMigrations = function (bundleId, one) { return __awaiter(void 0, void 0, void 0, function () {
|
|
146
|
+
var migrationList, _loop_2, _i, _a, bundle;
|
|
147
|
+
return __generator(this, function (_b) {
|
|
148
|
+
switch (_b.label) {
|
|
149
|
+
case 0:
|
|
150
|
+
migrationList = [];
|
|
151
|
+
_loop_2 = function (bundle) {
|
|
152
|
+
var result, _c, done;
|
|
153
|
+
return __generator(this, function (_d) {
|
|
154
|
+
switch (_d.label) {
|
|
155
|
+
case 0:
|
|
156
|
+
if (!one) return [3 /*break*/, 2];
|
|
157
|
+
return [4 /*yield*/, __1.default.migrate.up(migrationConfig(bundle))];
|
|
158
|
+
case 1:
|
|
159
|
+
_c = _d.sent();
|
|
160
|
+
return [3 /*break*/, 4];
|
|
161
|
+
case 2: return [4 /*yield*/, __1.default.migrate.latest(migrationConfig(bundle))];
|
|
162
|
+
case 3:
|
|
163
|
+
_c = _d.sent();
|
|
164
|
+
_d.label = 4;
|
|
165
|
+
case 4:
|
|
166
|
+
result = _c;
|
|
167
|
+
done = result[1];
|
|
168
|
+
done.forEach(function (migration) { return migrationList.push({
|
|
169
|
+
bundleId: bundle.bundleId,
|
|
170
|
+
migrationId: migration,
|
|
171
|
+
}); });
|
|
172
|
+
return [2 /*return*/];
|
|
173
|
+
}
|
|
174
|
+
});
|
|
175
|
+
};
|
|
176
|
+
_i = 0;
|
|
177
|
+
return [4 /*yield*/, filterBundles(bundleId, false, one)];
|
|
178
|
+
case 1:
|
|
179
|
+
_a = _b.sent();
|
|
180
|
+
_b.label = 2;
|
|
181
|
+
case 2:
|
|
182
|
+
if (!(_i < _a.length)) return [3 /*break*/, 5];
|
|
183
|
+
bundle = _a[_i];
|
|
184
|
+
return [5 /*yield**/, _loop_2(bundle)];
|
|
185
|
+
case 3:
|
|
186
|
+
_b.sent();
|
|
187
|
+
_b.label = 4;
|
|
188
|
+
case 4:
|
|
189
|
+
_i++;
|
|
190
|
+
return [3 /*break*/, 2];
|
|
191
|
+
case 5: return [2 /*return*/, migrationList];
|
|
192
|
+
}
|
|
193
|
+
});
|
|
194
|
+
}); };
|
|
195
|
+
exports.runMigrations = runMigrations;
|
|
196
|
+
var rollbackMigrations = function (bundleId, one) { return __awaiter(void 0, void 0, void 0, function () {
|
|
197
|
+
var migrationList, _loop_3, _i, _a, bundle;
|
|
198
|
+
return __generator(this, function (_b) {
|
|
199
|
+
switch (_b.label) {
|
|
200
|
+
case 0:
|
|
201
|
+
migrationList = [];
|
|
202
|
+
_loop_3 = function (bundle) {
|
|
203
|
+
var result, _c, done;
|
|
204
|
+
return __generator(this, function (_d) {
|
|
205
|
+
switch (_d.label) {
|
|
206
|
+
case 0:
|
|
207
|
+
if (!one) return [3 /*break*/, 2];
|
|
208
|
+
return [4 /*yield*/, __1.default.migrate.down(migrationConfig(bundle))];
|
|
209
|
+
case 1:
|
|
210
|
+
_c = _d.sent();
|
|
211
|
+
return [3 /*break*/, 4];
|
|
212
|
+
case 2: return [4 /*yield*/, __1.default.migrate.rollback(migrationConfig(bundle))];
|
|
213
|
+
case 3:
|
|
214
|
+
_c = _d.sent();
|
|
215
|
+
_d.label = 4;
|
|
216
|
+
case 4:
|
|
217
|
+
result = _c;
|
|
218
|
+
done = result[1];
|
|
219
|
+
done.forEach(function (migration) { return migrationList.push({
|
|
220
|
+
bundleId: bundle.bundleId,
|
|
221
|
+
migrationId: migration,
|
|
222
|
+
}); });
|
|
223
|
+
return [2 /*return*/];
|
|
224
|
+
}
|
|
225
|
+
});
|
|
226
|
+
};
|
|
227
|
+
_i = 0;
|
|
228
|
+
return [4 /*yield*/, filterBundles(bundleId, true, one)];
|
|
229
|
+
case 1:
|
|
230
|
+
_a = _b.sent();
|
|
231
|
+
_b.label = 2;
|
|
232
|
+
case 2:
|
|
233
|
+
if (!(_i < _a.length)) return [3 /*break*/, 5];
|
|
234
|
+
bundle = _a[_i];
|
|
235
|
+
return [5 /*yield**/, _loop_3(bundle)];
|
|
236
|
+
case 3:
|
|
237
|
+
_b.sent();
|
|
238
|
+
_b.label = 4;
|
|
239
|
+
case 4:
|
|
240
|
+
_i++;
|
|
241
|
+
return [3 /*break*/, 2];
|
|
242
|
+
case 5: return [2 /*return*/, migrationList];
|
|
243
|
+
}
|
|
244
|
+
});
|
|
245
|
+
}); };
|
|
246
|
+
exports.rollbackMigrations = rollbackMigrations;
|
|
247
|
+
var schema = {
|
|
248
|
+
listMigrations: exports.listMigrations,
|
|
249
|
+
rollbackMigrations: exports.rollbackMigrations,
|
|
250
|
+
runMigrations: exports.runMigrations,
|
|
251
|
+
};
|
|
252
|
+
exports.default = schema;
|