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,58 @@
|
|
|
1
|
+
import fs from 'fs-extra'
|
|
2
|
+
import { getConfig } from '../../config'
|
|
3
|
+
import type { Database } from '../database'
|
|
4
|
+
|
|
5
|
+
const dbConfig: () => Database.Config = () => {
|
|
6
|
+
const config = getConfig()
|
|
7
|
+
|
|
8
|
+
if (!config.dbMysqlHost) throw new Error('db: mysql host not provided')
|
|
9
|
+
if (!config.dbMysqlPort) throw new Error('db: mysql port not provided')
|
|
10
|
+
if (!config.dbMysqlDatabase) throw new Error('db: mysql database not provided')
|
|
11
|
+
|
|
12
|
+
let typeCastValue: any
|
|
13
|
+
|
|
14
|
+
const typeCast = (field: any, next: any) => {
|
|
15
|
+
switch (field.type) {
|
|
16
|
+
case 'BIT':
|
|
17
|
+
typeCastValue = field.buffer()
|
|
18
|
+
return typeCastValue === null ? null : !!typeCastValue[0]
|
|
19
|
+
case 'NEWDECIMAL':
|
|
20
|
+
typeCastValue = field.string()
|
|
21
|
+
return typeCastValue === null ? null : parseFloat(typeCastValue)
|
|
22
|
+
default:
|
|
23
|
+
return next()
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
return {
|
|
28
|
+
client: 'mysql2',
|
|
29
|
+
connection: {
|
|
30
|
+
host: config.dbMysqlHost,
|
|
31
|
+
port: config.dbMysqlPort,
|
|
32
|
+
...config.dbMysqlUser ? { user: config.dbMysqlUser } : {},
|
|
33
|
+
...config.dbMysqlPassword ? { password: config.dbMysqlPassword } : {},
|
|
34
|
+
database: config.dbMysqlDatabase,
|
|
35
|
+
...config.dbMysqlSsl
|
|
36
|
+
? {
|
|
37
|
+
ssl: {
|
|
38
|
+
...config.dbMysqlSslCa
|
|
39
|
+
? { ca: fs.readFileSync(config.dbMysqlSslCa).toString() }
|
|
40
|
+
: {},
|
|
41
|
+
...config.dbMysqlSslCert
|
|
42
|
+
? { cert: fs.readFileSync(config.dbMysqlSslCert).toString() }
|
|
43
|
+
: {},
|
|
44
|
+
...config.dbMysqlSslKey
|
|
45
|
+
? { key: fs.readFileSync(config.dbMysqlSslKey).toString() }
|
|
46
|
+
: {},
|
|
47
|
+
rejectUnauthorized: config.dbMysqlSslVerify,
|
|
48
|
+
},
|
|
49
|
+
}
|
|
50
|
+
: {},
|
|
51
|
+
dateStrings: true,
|
|
52
|
+
typeCast,
|
|
53
|
+
},
|
|
54
|
+
pool: { min: 0, max: config.dbMysqlPoolMax },
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export default dbConfig
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
13
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
14
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
var fs_extra_1 = __importDefault(require("fs-extra"));
|
|
18
|
+
var pg_1 = require("pg");
|
|
19
|
+
var config_1 = require("../../config");
|
|
20
|
+
var dbConfig = function () {
|
|
21
|
+
var config = (0, config_1.getConfig)();
|
|
22
|
+
if (!config.dbPostgresHost)
|
|
23
|
+
throw new Error('db: postgres host not provided');
|
|
24
|
+
if (!config.dbPostgresPort)
|
|
25
|
+
throw new Error('db: postgres port not provided');
|
|
26
|
+
if (!config.dbPostgresDatabase)
|
|
27
|
+
throw new Error('db: postgres database not provided');
|
|
28
|
+
var timeRegex = /^(.{8})(\..{0,3})?/;
|
|
29
|
+
var timestampRegex = /^(.{19})(\..{0,3})?/;
|
|
30
|
+
var timeMatch;
|
|
31
|
+
var timeParser = function (regex) { return function (value) {
|
|
32
|
+
timeMatch = value.match(regex);
|
|
33
|
+
return timeMatch
|
|
34
|
+
? "".concat(timeMatch[1]).concat(timeMatch[2] ? timeMatch[2].padEnd(4, '0') : '.000')
|
|
35
|
+
: value;
|
|
36
|
+
}; };
|
|
37
|
+
pg_1.types.setTypeParser(pg_1.types.builtins.BPCHAR, function (value) { return value.trimEnd(); });
|
|
38
|
+
pg_1.types.setTypeParser(pg_1.types.builtins.DATE, function (value) { return value; });
|
|
39
|
+
pg_1.types.setTypeParser(pg_1.types.builtins.INT8, function (value) { return parseInt(value, 10); });
|
|
40
|
+
pg_1.types.setTypeParser(pg_1.types.builtins.NUMERIC, function (value) { return parseFloat(value); });
|
|
41
|
+
pg_1.types.setTypeParser(pg_1.types.builtins.TIME, timeParser(timeRegex));
|
|
42
|
+
pg_1.types.setTypeParser(pg_1.types.builtins.TIMESTAMP, timeParser(timestampRegex));
|
|
43
|
+
return {
|
|
44
|
+
client: 'pg',
|
|
45
|
+
connection: __assign(__assign(__assign(__assign({ host: config.dbPostgresHost, port: config.dbPostgresPort }, config.dbPostgresUser ? { user: config.dbPostgresUser } : {}), config.dbPostgresPassword ? { password: config.dbPostgresPassword } : {}), { database: config.dbPostgresDatabase }), config.dbPostgresSsl
|
|
46
|
+
? {
|
|
47
|
+
ssl: __assign(__assign(__assign(__assign({}, config.dbPostgresSslCa
|
|
48
|
+
? { ca: fs_extra_1.default.readFileSync(config.dbPostgresSslCa).toString() }
|
|
49
|
+
: {}), config.dbPostgresSslCert
|
|
50
|
+
? { cert: fs_extra_1.default.readFileSync(config.dbPostgresSslCert).toString() }
|
|
51
|
+
: {}), config.dbPostgresSslKey
|
|
52
|
+
? { key: fs_extra_1.default.readFileSync(config.dbPostgresSslKey).toString() }
|
|
53
|
+
: {}), { rejectUnauthorized: config.dbPostgresSslVerify }),
|
|
54
|
+
}
|
|
55
|
+
: {}),
|
|
56
|
+
pool: { min: 0, max: config.dbPostgresPoolMax },
|
|
57
|
+
};
|
|
58
|
+
};
|
|
59
|
+
exports.default = dbConfig;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import fs from 'fs-extra'
|
|
2
|
+
import { types } from 'pg'
|
|
3
|
+
import { getConfig } from '../../config'
|
|
4
|
+
import type { Database } from '../database'
|
|
5
|
+
|
|
6
|
+
const dbConfig: () => Database.Config = () => {
|
|
7
|
+
const config = getConfig()
|
|
8
|
+
|
|
9
|
+
if (!config.dbPostgresHost) throw new Error('db: postgres host not provided')
|
|
10
|
+
if (!config.dbPostgresPort) throw new Error('db: postgres port not provided')
|
|
11
|
+
if (!config.dbPostgresDatabase) throw new Error('db: postgres database not provided')
|
|
12
|
+
|
|
13
|
+
const timeRegex = /^(.{8})(\..{0,3})?/
|
|
14
|
+
const timestampRegex = /^(.{19})(\..{0,3})?/
|
|
15
|
+
|
|
16
|
+
let timeMatch: any
|
|
17
|
+
|
|
18
|
+
const timeParser = (regex: RegExp) => (value: string) => {
|
|
19
|
+
timeMatch = value.match(regex)
|
|
20
|
+
return timeMatch
|
|
21
|
+
? `${timeMatch[1]}${timeMatch[2] ? timeMatch[2].padEnd(4, '0') : '.000'}`
|
|
22
|
+
: value
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
types.setTypeParser(types.builtins.BPCHAR, (value: string) => value.trimEnd())
|
|
26
|
+
types.setTypeParser(types.builtins.DATE, (value: string) => value)
|
|
27
|
+
types.setTypeParser(types.builtins.INT8, (value: string) => parseInt(value, 10))
|
|
28
|
+
types.setTypeParser(types.builtins.NUMERIC, (value: string) => parseFloat(value))
|
|
29
|
+
types.setTypeParser(types.builtins.TIME, timeParser(timeRegex))
|
|
30
|
+
types.setTypeParser(types.builtins.TIMESTAMP, timeParser(timestampRegex))
|
|
31
|
+
|
|
32
|
+
return {
|
|
33
|
+
client: 'pg',
|
|
34
|
+
connection: {
|
|
35
|
+
host: config.dbPostgresHost,
|
|
36
|
+
port: config.dbPostgresPort,
|
|
37
|
+
...config.dbPostgresUser ? { user: config.dbPostgresUser } : {},
|
|
38
|
+
...config.dbPostgresPassword ? { password: config.dbPostgresPassword } : {},
|
|
39
|
+
database: config.dbPostgresDatabase,
|
|
40
|
+
...config.dbPostgresSsl
|
|
41
|
+
? {
|
|
42
|
+
ssl: {
|
|
43
|
+
...config.dbPostgresSslCa
|
|
44
|
+
? { ca: fs.readFileSync(config.dbPostgresSslCa).toString() }
|
|
45
|
+
: {},
|
|
46
|
+
...config.dbPostgresSslCert
|
|
47
|
+
? { cert: fs.readFileSync(config.dbPostgresSslCert).toString() }
|
|
48
|
+
: {},
|
|
49
|
+
...config.dbPostgresSslKey
|
|
50
|
+
? { key: fs.readFileSync(config.dbPostgresSslKey).toString() }
|
|
51
|
+
: {},
|
|
52
|
+
rejectUnauthorized: config.dbPostgresSslVerify,
|
|
53
|
+
},
|
|
54
|
+
}
|
|
55
|
+
: {},
|
|
56
|
+
},
|
|
57
|
+
pool: { min: 0, max: config.dbPostgresPoolMax },
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export default dbConfig
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
var config_1 = require("../../config");
|
|
7
|
+
var postProcess_1 = __importDefault(require("../postProcess"));
|
|
8
|
+
var dbConfig = function () {
|
|
9
|
+
var config = (0, config_1.getConfig)();
|
|
10
|
+
if (!config.dbSqliteFile)
|
|
11
|
+
throw new Error('db: sqlite file not provided');
|
|
12
|
+
return {
|
|
13
|
+
client: 'sqlite3',
|
|
14
|
+
connection: {
|
|
15
|
+
filename: config.dbSqliteFile,
|
|
16
|
+
},
|
|
17
|
+
pool: { min: 0, max: 1 },
|
|
18
|
+
postProcessResponse: postProcess_1.default,
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
exports.default = dbConfig;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { getConfig } from '../../config'
|
|
2
|
+
import postProcessResponse from '../postProcess'
|
|
3
|
+
import type { Database } from '../database'
|
|
4
|
+
|
|
5
|
+
const dbConfig: () => Database.Config = () => {
|
|
6
|
+
const config = getConfig()
|
|
7
|
+
|
|
8
|
+
if (!config.dbSqliteFile) throw new Error('db: sqlite file not provided')
|
|
9
|
+
|
|
10
|
+
return {
|
|
11
|
+
client: 'sqlite3',
|
|
12
|
+
connection: {
|
|
13
|
+
filename: config.dbSqliteFile,
|
|
14
|
+
},
|
|
15
|
+
pool: { min: 0, max: 1 },
|
|
16
|
+
postProcessResponse,
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export default dbConfig
|
package/db/database.d.ts
ADDED
package/db/database.js
ADDED
package/db/database.ts
ADDED
package/db/index.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ColumnBuilder } from './schema/builder/columnBuilder';
|
|
2
|
+
import { SchemaBuilder } from './schema/builder';
|
|
3
|
+
import { TableBuilder } from './schema/builder/tableBuilder';
|
|
4
|
+
import type { Database } from './database';
|
|
5
|
+
import type { Migration } from './schema/migration';
|
|
6
|
+
import type { MigrationList } from './schema/migrationList';
|
|
7
|
+
import type { Schema } from './schema/schema';
|
|
8
|
+
export { ColumnBuilder, Database, Migration, MigrationList, Schema, SchemaBuilder, TableBuilder, };
|
|
9
|
+
declare const database: Database;
|
|
10
|
+
export default database;
|
package/db/index.js
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
13
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
14
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.TableBuilder = exports.SchemaBuilder = exports.ColumnBuilder = void 0;
|
|
18
|
+
var knex_1 = __importDefault(require("knex"));
|
|
19
|
+
var columnBuilder_1 = require("./schema/builder/columnBuilder");
|
|
20
|
+
Object.defineProperty(exports, "ColumnBuilder", { enumerable: true, get: function () { return columnBuilder_1.ColumnBuilder; } });
|
|
21
|
+
var builder_1 = require("./schema/builder");
|
|
22
|
+
Object.defineProperty(exports, "SchemaBuilder", { enumerable: true, get: function () { return builder_1.SchemaBuilder; } });
|
|
23
|
+
var tableBuilder_1 = require("./schema/builder/tableBuilder");
|
|
24
|
+
Object.defineProperty(exports, "TableBuilder", { enumerable: true, get: function () { return tableBuilder_1.TableBuilder; } });
|
|
25
|
+
var config_1 = __importDefault(require("./config"));
|
|
26
|
+
var log_1 = __importDefault(require("../log"));
|
|
27
|
+
config_1.default.pool = __assign(__assign({}, config_1.default.pool), { afterCreate: function (connection, done) {
|
|
28
|
+
log_1.default.debug('db: new connection');
|
|
29
|
+
done(undefined, connection);
|
|
30
|
+
} });
|
|
31
|
+
var database = (0, knex_1.default)(config_1.default);
|
|
32
|
+
exports.default = database;
|
package/db/index.ts
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import knex from 'knex'
|
|
2
|
+
import { ColumnBuilder } from './schema/builder/columnBuilder'
|
|
3
|
+
import { SchemaBuilder } from './schema/builder'
|
|
4
|
+
import { TableBuilder } from './schema/builder/tableBuilder'
|
|
5
|
+
import config from './config'
|
|
6
|
+
import log from '../log'
|
|
7
|
+
import type { Database } from './database'
|
|
8
|
+
import type { Migration } from './schema/migration'
|
|
9
|
+
import type { MigrationList } from './schema/migrationList'
|
|
10
|
+
import type { Schema } from './schema/schema'
|
|
11
|
+
|
|
12
|
+
export {
|
|
13
|
+
ColumnBuilder, Database, Migration, MigrationList, Schema, SchemaBuilder, TableBuilder,
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
config.pool = {
|
|
17
|
+
...config.pool,
|
|
18
|
+
afterCreate: (connection: any, done: any) => {
|
|
19
|
+
log.debug('db: new connection')
|
|
20
|
+
done(undefined, connection)
|
|
21
|
+
},
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const database: Database = knex(config)
|
|
25
|
+
|
|
26
|
+
export default database
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.booleanColumnRegex = void 0;
|
|
4
|
+
exports.booleanColumnRegex = /^((is|has)(_|[A-Z]))/;
|
|
5
|
+
var booleanColumns = function (columns) { return columns.filter(function (column) { return column.match(exports.booleanColumnRegex); }); };
|
|
6
|
+
var postProcessRow = function (row, boolColumns) {
|
|
7
|
+
boolColumns.forEach(function (column) {
|
|
8
|
+
row[column] = row[column] === null ? null : !!row[column];
|
|
9
|
+
});
|
|
10
|
+
return row;
|
|
11
|
+
};
|
|
12
|
+
var postProcess = function (response) {
|
|
13
|
+
if (Array.isArray(response) && typeof response[0] === 'object') {
|
|
14
|
+
for (var _i = 0, response_1 = response; _i < response_1.length; _i++) {
|
|
15
|
+
var row = response_1[_i];
|
|
16
|
+
postProcessRow(row, booleanColumns(Object.keys(response[0])));
|
|
17
|
+
}
|
|
18
|
+
return response;
|
|
19
|
+
}
|
|
20
|
+
if (typeof response === 'object') {
|
|
21
|
+
return postProcessRow(response, booleanColumns(Object.keys(response)));
|
|
22
|
+
}
|
|
23
|
+
return response;
|
|
24
|
+
};
|
|
25
|
+
exports.default = postProcess;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export const booleanColumnRegex = /^((is|has)(_|[A-Z]))/
|
|
2
|
+
|
|
3
|
+
const booleanColumns = (columns: string[]) => columns.filter(
|
|
4
|
+
(column) => column.match(booleanColumnRegex),
|
|
5
|
+
)
|
|
6
|
+
|
|
7
|
+
const postProcessRow = (row: any, boolColumns: string[]) => {
|
|
8
|
+
boolColumns.forEach((column) => {
|
|
9
|
+
row[column] = row[column] === null ? null : !!row[column]
|
|
10
|
+
})
|
|
11
|
+
return row
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const postProcess = (response: any) => {
|
|
15
|
+
if (Array.isArray(response) && typeof response[0] === 'object') {
|
|
16
|
+
for (const row of response) {
|
|
17
|
+
postProcessRow(row, booleanColumns(Object.keys(response[0])))
|
|
18
|
+
}
|
|
19
|
+
return response
|
|
20
|
+
}
|
|
21
|
+
if (typeof response === 'object') {
|
|
22
|
+
return postProcessRow(response, booleanColumns(Object.keys(response)))
|
|
23
|
+
}
|
|
24
|
+
return response
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export default postProcess
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { Database } from '../../database';
|
|
2
|
+
export interface Table {
|
|
3
|
+
db: Database;
|
|
4
|
+
name: string;
|
|
5
|
+
}
|
|
6
|
+
export interface Column {
|
|
7
|
+
name: string;
|
|
8
|
+
dataType: DataType;
|
|
9
|
+
nullConstraint: NullConstraint;
|
|
10
|
+
index?: Index;
|
|
11
|
+
referencedTable?: string;
|
|
12
|
+
onDelete?: OnDelete;
|
|
13
|
+
}
|
|
14
|
+
export type DataType = 'boolean' | 'decimal' | 'integer' | 'string';
|
|
15
|
+
export type NullConstraint = 'notNull' | 'null';
|
|
16
|
+
export type Index = 'index' | 'noIndex' | 'primary' | 'unique';
|
|
17
|
+
export type OnDelete = 'cascade' | 'restrict';
|
|
18
|
+
export declare const shortName: (...name: string[]) => string;
|
|
19
|
+
export declare const createTable: (table: Table, ...columns: Column[]) => Database.SchemaBuilder;
|
|
20
|
+
export declare const dropTable: (table: Table) => Database.SchemaBuilder;
|
|
21
|
+
export declare const table: (db: Database, name: string) => Table;
|
|
22
|
+
export declare const column: (name: string, dataType: DataType, nullConstraint: NullConstraint, index?: Index, referencedTable?: string, onDelete?: OnDelete) => Column;
|
|
23
|
+
declare const _default: {
|
|
24
|
+
column: (name: string, dataType: DataType, nullConstraint: NullConstraint, index?: Index | undefined, referencedTable?: string | undefined, onDelete?: OnDelete | undefined) => Column;
|
|
25
|
+
createTable: (table: Table, ...columns: Column[]) => Database.SchemaBuilder;
|
|
26
|
+
dropTable: (table: Table) => Database.SchemaBuilder;
|
|
27
|
+
shortName: (...name: string[]) => string;
|
|
28
|
+
table: (db: Database<any, any[]>, name: string) => Table;
|
|
29
|
+
};
|
|
30
|
+
export default _default;
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.column = exports.table = exports.dropTable = exports.createTable = exports.shortName = void 0;
|
|
4
|
+
var longNameRegex = /[A-Z][a-z]{4,}|[a-z]{5,}/g;
|
|
5
|
+
var shortName = function () {
|
|
6
|
+
var name = [];
|
|
7
|
+
for (var _i = 0; _i < arguments.length; _i++) {
|
|
8
|
+
name[_i] = arguments[_i];
|
|
9
|
+
}
|
|
10
|
+
return name
|
|
11
|
+
.map(function (string) { return string.replace(longNameRegex, function (match) { return match.substring(0, 4); }); })
|
|
12
|
+
.join('_');
|
|
13
|
+
};
|
|
14
|
+
exports.shortName = shortName;
|
|
15
|
+
var createTable = function (table) {
|
|
16
|
+
var columns = [];
|
|
17
|
+
for (var _i = 1; _i < arguments.length; _i++) {
|
|
18
|
+
columns[_i - 1] = arguments[_i];
|
|
19
|
+
}
|
|
20
|
+
return table.db.schema
|
|
21
|
+
.createTable(table.name, function (tableBuilder) {
|
|
22
|
+
var primaryKey = [];
|
|
23
|
+
columns.forEach(function (column) {
|
|
24
|
+
var columnBuilder;
|
|
25
|
+
switch (column.dataType) {
|
|
26
|
+
case 'boolean':
|
|
27
|
+
columnBuilder = tableBuilder.boolean(column.name);
|
|
28
|
+
break;
|
|
29
|
+
case 'decimal':
|
|
30
|
+
columnBuilder = tableBuilder.decimal(column.name, 32, 16);
|
|
31
|
+
break;
|
|
32
|
+
case 'integer':
|
|
33
|
+
columnBuilder = tableBuilder.integer(column.name);
|
|
34
|
+
break;
|
|
35
|
+
default:
|
|
36
|
+
columnBuilder = tableBuilder.string(column.name);
|
|
37
|
+
}
|
|
38
|
+
switch (column.nullConstraint) {
|
|
39
|
+
case 'null':
|
|
40
|
+
columnBuilder.nullable();
|
|
41
|
+
break;
|
|
42
|
+
default:
|
|
43
|
+
columnBuilder.notNullable();
|
|
44
|
+
}
|
|
45
|
+
switch (column.index) {
|
|
46
|
+
case 'index':
|
|
47
|
+
columnBuilder.index((0, exports.shortName)('IDX', table.name, column.name));
|
|
48
|
+
break;
|
|
49
|
+
case 'primary':
|
|
50
|
+
if (primaryKey.length) {
|
|
51
|
+
columnBuilder.index((0, exports.shortName)('IDX', table.name, column.name));
|
|
52
|
+
}
|
|
53
|
+
primaryKey.push(column.name);
|
|
54
|
+
break;
|
|
55
|
+
case 'unique':
|
|
56
|
+
columnBuilder.unique({ indexName: (0, exports.shortName)('UNQ', table.name, column.name) });
|
|
57
|
+
break;
|
|
58
|
+
default:
|
|
59
|
+
}
|
|
60
|
+
if (column.referencedTable) {
|
|
61
|
+
columnBuilder
|
|
62
|
+
.references(column.name)
|
|
63
|
+
.inTable(column.referencedTable)
|
|
64
|
+
.withKeyName((0, exports.shortName)('FK', table.name, column.referencedTable, column.name))
|
|
65
|
+
.onUpdate('CASCADE')
|
|
66
|
+
.onDelete(column.onDelete ? column.onDelete.toUpperCase() : 'RESTRICT');
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
if (primaryKey.length) {
|
|
70
|
+
tableBuilder.primary(primaryKey);
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
};
|
|
74
|
+
exports.createTable = createTable;
|
|
75
|
+
var dropTable = function (table) { return table.db.schema.dropTable(table.name); };
|
|
76
|
+
exports.dropTable = dropTable;
|
|
77
|
+
var table = function (db, name) { return ({ db: db, name: name }); };
|
|
78
|
+
exports.table = table;
|
|
79
|
+
var column = function (name, dataType, nullConstraint, index, referencedTable, onDelete) { return ({ name: name, dataType: dataType, nullConstraint: nullConstraint, index: index, referencedTable: referencedTable, onDelete: onDelete }); };
|
|
80
|
+
exports.column = column;
|
|
81
|
+
exports.default = {
|
|
82
|
+
column: exports.column,
|
|
83
|
+
createTable: exports.createTable,
|
|
84
|
+
dropTable: exports.dropTable,
|
|
85
|
+
shortName: exports.shortName,
|
|
86
|
+
table: exports.table,
|
|
87
|
+
};
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import type { Database } from '../../database'
|
|
2
|
+
|
|
3
|
+
export interface Table {
|
|
4
|
+
db: Database,
|
|
5
|
+
name: string,
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export interface Column {
|
|
9
|
+
name: string,
|
|
10
|
+
dataType: DataType,
|
|
11
|
+
nullConstraint: NullConstraint,
|
|
12
|
+
index?: Index,
|
|
13
|
+
referencedTable?: string,
|
|
14
|
+
onDelete?: OnDelete,
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export type DataType = 'boolean' | 'decimal' | 'integer' | 'string'
|
|
18
|
+
export type NullConstraint = 'notNull' | 'null'
|
|
19
|
+
export type Index = 'index' | 'noIndex' | 'primary' | 'unique'
|
|
20
|
+
export type OnDelete = 'cascade' | 'restrict'
|
|
21
|
+
|
|
22
|
+
const longNameRegex = /[A-Z][a-z]{4,}|[a-z]{5,}/g
|
|
23
|
+
|
|
24
|
+
export const shortName = (...name: string[]) => name
|
|
25
|
+
.map((string) => string.replace(longNameRegex, (match) => match.substring(0, 4)))
|
|
26
|
+
.join('_')
|
|
27
|
+
|
|
28
|
+
export const createTable = (table: Table, ...columns: Column[]) => table.db.schema
|
|
29
|
+
.createTable(table.name, (tableBuilder) => {
|
|
30
|
+
const primaryKey: string[] = []
|
|
31
|
+
columns.forEach((column) => {
|
|
32
|
+
let columnBuilder: Database.ColumnBuilder
|
|
33
|
+
switch (column.dataType) {
|
|
34
|
+
case 'boolean':
|
|
35
|
+
columnBuilder = tableBuilder.boolean(column.name)
|
|
36
|
+
break
|
|
37
|
+
case 'decimal':
|
|
38
|
+
columnBuilder = tableBuilder.decimal(column.name, 32, 16)
|
|
39
|
+
break
|
|
40
|
+
case 'integer':
|
|
41
|
+
columnBuilder = tableBuilder.integer(column.name)
|
|
42
|
+
break
|
|
43
|
+
default:
|
|
44
|
+
columnBuilder = tableBuilder.string(column.name)
|
|
45
|
+
}
|
|
46
|
+
switch (column.nullConstraint) {
|
|
47
|
+
case 'null':
|
|
48
|
+
columnBuilder.nullable()
|
|
49
|
+
break
|
|
50
|
+
default:
|
|
51
|
+
columnBuilder.notNullable()
|
|
52
|
+
}
|
|
53
|
+
switch (column.index) {
|
|
54
|
+
case 'index':
|
|
55
|
+
columnBuilder.index(shortName('IDX', table.name, column.name))
|
|
56
|
+
break
|
|
57
|
+
case 'primary':
|
|
58
|
+
if (primaryKey.length) {
|
|
59
|
+
columnBuilder.index(shortName('IDX', table.name, column.name))
|
|
60
|
+
}
|
|
61
|
+
primaryKey.push(column.name)
|
|
62
|
+
break
|
|
63
|
+
case 'unique':
|
|
64
|
+
columnBuilder.unique({ indexName: shortName('UNQ', table.name, column.name) })
|
|
65
|
+
break
|
|
66
|
+
default:
|
|
67
|
+
}
|
|
68
|
+
if (column.referencedTable) {
|
|
69
|
+
columnBuilder
|
|
70
|
+
.references(column.name)
|
|
71
|
+
.inTable(column.referencedTable)
|
|
72
|
+
.withKeyName(shortName('FK', table.name, column.referencedTable, column.name))
|
|
73
|
+
.onUpdate('CASCADE')
|
|
74
|
+
.onDelete(column.onDelete ? column.onDelete.toUpperCase() : 'RESTRICT')
|
|
75
|
+
}
|
|
76
|
+
})
|
|
77
|
+
if (primaryKey.length) {
|
|
78
|
+
tableBuilder.primary(primaryKey)
|
|
79
|
+
}
|
|
80
|
+
})
|
|
81
|
+
|
|
82
|
+
export const dropTable = (table: Table) => table.db.schema.dropTable(table.name)
|
|
83
|
+
|
|
84
|
+
export const table = (db: Database, name: string): Table => ({ db, name })
|
|
85
|
+
|
|
86
|
+
export const column = (
|
|
87
|
+
name: string,
|
|
88
|
+
dataType: DataType,
|
|
89
|
+
nullConstraint: NullConstraint,
|
|
90
|
+
index?: Index,
|
|
91
|
+
referencedTable?: string,
|
|
92
|
+
onDelete?: OnDelete,
|
|
93
|
+
): Column => ({ name, dataType, nullConstraint, index, referencedTable, onDelete })
|
|
94
|
+
|
|
95
|
+
export default {
|
|
96
|
+
column,
|
|
97
|
+
createTable,
|
|
98
|
+
dropTable,
|
|
99
|
+
shortName,
|
|
100
|
+
table,
|
|
101
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ColumnBuilder = void 0;
|
|
4
|
+
var ColumnBuilder = /** @class */ (function () {
|
|
5
|
+
function ColumnBuilder(knexColumnBuilder) {
|
|
6
|
+
this.knexColumnBuilder = knexColumnBuilder;
|
|
7
|
+
}
|
|
8
|
+
ColumnBuilder.prototype.index = function () {
|
|
9
|
+
this.knexColumnBuilder.index();
|
|
10
|
+
};
|
|
11
|
+
return ColumnBuilder;
|
|
12
|
+
}());
|
|
13
|
+
exports.ColumnBuilder = ColumnBuilder;
|
|
14
|
+
exports.default = ColumnBuilder;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Database } from '../../database'
|
|
2
|
+
|
|
3
|
+
export class ColumnBuilder {
|
|
4
|
+
private knexColumnBuilder: Database.ColumnBuilder
|
|
5
|
+
|
|
6
|
+
constructor(knexColumnBuilder: Database.ColumnBuilder) {
|
|
7
|
+
this.knexColumnBuilder = knexColumnBuilder
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
index() {
|
|
11
|
+
this.knexColumnBuilder.index()
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export default ColumnBuilder
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
declare const _default: {
|
|
2
|
+
bigInt: () => string;
|
|
3
|
+
bigIntPrimaryAutoIncrement: () => string;
|
|
4
|
+
binary: (length: number) => string;
|
|
5
|
+
blob: () => string;
|
|
6
|
+
boolean: () => string;
|
|
7
|
+
char: (length: number) => string;
|
|
8
|
+
date: () => string;
|
|
9
|
+
dateTime: () => string;
|
|
10
|
+
double: () => string;
|
|
11
|
+
float: () => string;
|
|
12
|
+
int: () => string;
|
|
13
|
+
intPrimaryAutoIncrement: () => string;
|
|
14
|
+
longBlob: () => string;
|
|
15
|
+
longText: () => string;
|
|
16
|
+
numeric: (precision: number, scale: number) => string;
|
|
17
|
+
smallInt: () => string;
|
|
18
|
+
smallIntPrimaryAutoIncrement: () => string;
|
|
19
|
+
text: () => string;
|
|
20
|
+
time: () => string;
|
|
21
|
+
timestamp: () => string;
|
|
22
|
+
tinyBlob: () => string;
|
|
23
|
+
tinyInt: () => string;
|
|
24
|
+
tinyText: () => string;
|
|
25
|
+
varBinary: (maxLength: number) => string;
|
|
26
|
+
varChar: (maxLength: number) => string;
|
|
27
|
+
};
|
|
28
|
+
export default _default;
|