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.
Files changed (254) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +55 -0
  3. package/api/api.d.ts +7 -0
  4. package/api/api.js +2 -0
  5. package/api/api.ts +8 -0
  6. package/api/auth.d.ts +9 -0
  7. package/api/auth.js +11 -0
  8. package/api/auth.ts +9 -0
  9. package/api/config.d.ts +13 -0
  10. package/api/config.js +59 -0
  11. package/api/config.ts +69 -0
  12. package/api/endpoint.d.ts +20 -0
  13. package/api/endpoint.js +5 -0
  14. package/api/endpoint.ts +23 -0
  15. package/api/handler.d.ts +8 -0
  16. package/api/handler.js +13 -0
  17. package/api/handler.ts +23 -0
  18. package/api/index.d.ts +7 -0
  19. package/api/index.js +187 -0
  20. package/api/index.ts +97 -0
  21. package/api/route.d.ts +6 -0
  22. package/api/route.js +2 -0
  23. package/api/route.ts +4 -0
  24. package/api/router.d.ts +4 -0
  25. package/api/router.js +111 -0
  26. package/api/router.ts +36 -0
  27. package/api/schema.d.ts +29 -0
  28. package/api/schema.js +69 -0
  29. package/api/schema.ts +98 -0
  30. package/app/app.d.ts +6 -0
  31. package/app/app.js +2 -0
  32. package/app/app.ts +7 -0
  33. package/app/boot.d.ts +4 -0
  34. package/app/boot.js +2 -0
  35. package/app/boot.ts +5 -0
  36. package/app/bundle.d.ts +14 -0
  37. package/app/bundle.js +2 -0
  38. package/app/bundle.ts +15 -0
  39. package/app/config.d.ts +4 -0
  40. package/app/config.js +9 -0
  41. package/app/config.ts +9 -0
  42. package/app/index.d.ts +9 -0
  43. package/app/index.js +103 -0
  44. package/app/index.ts +32 -0
  45. package/bin/ape-cli-ts.js +4 -0
  46. package/bin/ape-cli.js +2 -0
  47. package/cli/command.d.ts +4 -0
  48. package/cli/command.js +2 -0
  49. package/cli/command.ts +7 -0
  50. package/cli/index.d.ts +2 -0
  51. package/cli/index.js +103 -0
  52. package/cli/index.ts +41 -0
  53. package/cli/internal/api.d.ts +3 -0
  54. package/cli/internal/api.js +110 -0
  55. package/cli/internal/api.ts +38 -0
  56. package/cli/internal/index.d.ts +2 -0
  57. package/cli/internal/index.js +13 -0
  58. package/cli/internal/index.ts +9 -0
  59. package/cli/internal/migration.d.ts +3 -0
  60. package/cli/internal/migration.js +214 -0
  61. package/cli/internal/migration.ts +110 -0
  62. package/cli/internal/queue.d.ts +3 -0
  63. package/cli/internal/queue.js +147 -0
  64. package/cli/internal/queue.ts +60 -0
  65. package/cli/utils.d.ts +18 -0
  66. package/cli/utils.js +52 -0
  67. package/cli/utils.ts +48 -0
  68. package/config/config.d.ts +5 -0
  69. package/config/config.js +2 -0
  70. package/config/config.ts +6 -0
  71. package/config/configuration.d.ts +63 -0
  72. package/config/configuration.js +2 -0
  73. package/config/configuration.ts +72 -0
  74. package/config/default.d.ts +33 -0
  75. package/config/default.js +34 -0
  76. package/config/default.ts +40 -0
  77. package/config/env.d.ts +66 -0
  78. package/config/env.js +72 -0
  79. package/config/env.ts +79 -0
  80. package/config/index.d.ts +8 -0
  81. package/config/index.js +91 -0
  82. package/config/index.ts +101 -0
  83. package/config/loadFile.d.ts +2 -0
  84. package/config/loadFile.js +13 -0
  85. package/config/loadFile.ts +9 -0
  86. package/config/node.d.ts +5 -0
  87. package/config/node.js +11 -0
  88. package/config/node.ts +7 -0
  89. package/config/store.d.ts +6 -0
  90. package/config/store.js +20 -0
  91. package/config/store.ts +15 -0
  92. package/db/config/index.d.ts +10 -0
  93. package/db/config/index.js +43 -0
  94. package/db/config/index.ts +35 -0
  95. package/db/config/memory.d.ts +3 -0
  96. package/db/config/memory.js +15 -0
  97. package/db/config/memory.ts +13 -0
  98. package/db/config/mysql.d.ts +3 -0
  99. package/db/config/mysql.js +56 -0
  100. package/db/config/mysql.ts +58 -0
  101. package/db/config/postgres.d.ts +3 -0
  102. package/db/config/postgres.js +59 -0
  103. package/db/config/postgres.ts +61 -0
  104. package/db/config/sqlite.d.ts +3 -0
  105. package/db/config/sqlite.js +21 -0
  106. package/db/config/sqlite.ts +20 -0
  107. package/db/database.d.ts +3 -0
  108. package/db/database.js +3 -0
  109. package/db/database.ts +5 -0
  110. package/db/index.d.ts +10 -0
  111. package/db/index.js +32 -0
  112. package/db/index.ts +26 -0
  113. package/db/postProcess.d.ts +3 -0
  114. package/db/postProcess.js +25 -0
  115. package/db/postProcess.ts +27 -0
  116. package/db/schema/builder/_.d.ts +30 -0
  117. package/db/schema/builder/_.js +87 -0
  118. package/db/schema/builder/_.ts +101 -0
  119. package/db/schema/builder/columnBuilder.d.ts +7 -0
  120. package/db/schema/builder/columnBuilder.js +14 -0
  121. package/db/schema/builder/columnBuilder.ts +15 -0
  122. package/db/schema/builder/dataType.d.ts +28 -0
  123. package/db/schema/builder/dataType.js +170 -0
  124. package/db/schema/builder/dataType.ts +184 -0
  125. package/db/schema/builder/index.d.ts +15 -0
  126. package/db/schema/builder/index.js +42 -0
  127. package/db/schema/builder/index.ts +50 -0
  128. package/db/schema/builder/tableBuilder.d.ts +45 -0
  129. package/db/schema/builder/tableBuilder.js +307 -0
  130. package/db/schema/builder/tableBuilder.ts +409 -0
  131. package/db/schema/config.d.ts +4 -0
  132. package/db/schema/config.js +5 -0
  133. package/db/schema/config.ts +3 -0
  134. package/db/schema/index.d.ts +7 -0
  135. package/db/schema/index.js +252 -0
  136. package/db/schema/index.ts +88 -0
  137. package/db/schema/migration.d.ts +6 -0
  138. package/db/schema/migration.js +2 -0
  139. package/db/schema/migration.ts +7 -0
  140. package/db/schema/migrationList.d.ts +5 -0
  141. package/db/schema/migrationList.js +2 -0
  142. package/db/schema/migrationList.ts +5 -0
  143. package/db/schema/migrationSource.d.ts +10 -0
  144. package/db/schema/migrationSource.js +60 -0
  145. package/db/schema/migrationSource.ts +24 -0
  146. package/db/schema/schema.d.ts +6 -0
  147. package/db/schema/schema.js +2 -0
  148. package/db/schema/schema.ts +7 -0
  149. package/db/utils/index.d.ts +7 -0
  150. package/db/utils/index.js +10 -0
  151. package/db/utils/index.ts +8 -0
  152. package/db/utils/insertGetKey.d.ts +8 -0
  153. package/db/utils/insertGetKey.js +109 -0
  154. package/db/utils/insertGetKey.ts +80 -0
  155. package/i18n/config.d.ts +4 -0
  156. package/i18n/config.js +9 -0
  157. package/i18n/config.ts +9 -0
  158. package/i18n/i18n.d.ts +5 -0
  159. package/i18n/i18n.js +2 -0
  160. package/i18n/i18n.ts +6 -0
  161. package/i18n/index.d.ts +8 -0
  162. package/i18n/index.js +155 -0
  163. package/i18n/index.ts +42 -0
  164. package/i18n/internationalization.d.ts +3 -0
  165. package/i18n/internationalization.js +2 -0
  166. package/i18n/internationalization.ts +5 -0
  167. package/i18n/translation.d.ts +4 -0
  168. package/i18n/translation.js +2 -0
  169. package/i18n/translation.ts +4 -0
  170. package/jwt/config.d.ts +5 -0
  171. package/jwt/config.js +12 -0
  172. package/jwt/config.ts +11 -0
  173. package/jwt/index.d.ts +8 -0
  174. package/jwt/index.js +90 -0
  175. package/jwt/index.ts +60 -0
  176. package/jwt/jwt.d.ts +6 -0
  177. package/jwt/jwt.js +2 -0
  178. package/jwt/jwt.ts +19 -0
  179. package/jwt/user.d.ts +4 -0
  180. package/jwt/user.js +2 -0
  181. package/jwt/user.ts +4 -0
  182. package/log/config.d.ts +23 -0
  183. package/log/config.js +47 -0
  184. package/log/config.ts +43 -0
  185. package/log/index.d.ts +4 -0
  186. package/log/index.js +9 -0
  187. package/log/index.ts +9 -0
  188. package/log/logger.d.ts +3 -0
  189. package/log/logger.js +2 -0
  190. package/log/logger.ts +5 -0
  191. package/mail/config.d.ts +4 -0
  192. package/mail/config.js +5 -0
  193. package/mail/config.ts +3 -0
  194. package/mail/email.d.ts +20 -0
  195. package/mail/email.js +2 -0
  196. package/mail/email.ts +21 -0
  197. package/mail/index.d.ts +2 -0
  198. package/mail/index.js +4 -0
  199. package/mail/index.ts +3 -0
  200. package/mail/mail.d.ts +12 -0
  201. package/mail/mail.js +2 -0
  202. package/mail/mail.ts +13 -0
  203. package/mail/module/bypass/index.d.ts +6 -0
  204. package/mail/module/bypass/index.js +74 -0
  205. package/mail/module/bypass/index.ts +9 -0
  206. package/mail/module/config.d.ts +11 -0
  207. package/mail/module/config.js +24 -0
  208. package/mail/module/config.ts +25 -0
  209. package/mail/module/index.d.ts +8 -0
  210. package/mail/module/index.js +107 -0
  211. package/mail/module/index.ts +61 -0
  212. package/mail/module/smtp/config.d.ts +6 -0
  213. package/mail/module/smtp/config.js +25 -0
  214. package/mail/module/smtp/config.ts +25 -0
  215. package/mail/module/smtp/index.d.ts +9 -0
  216. package/mail/module/smtp/index.js +104 -0
  217. package/mail/module/smtp/index.ts +36 -0
  218. package/mq/index.d.ts +3 -0
  219. package/mq/index.js +27 -0
  220. package/mq/index.ts +4 -0
  221. package/mq/module/bypass/index.d.ts +13 -0
  222. package/mq/module/bypass/index.js +86 -0
  223. package/mq/module/bypass/index.ts +20 -0
  224. package/mq/module/config.d.ts +6 -0
  225. package/mq/module/config.js +15 -0
  226. package/mq/module/config.ts +14 -0
  227. package/mq/module/index.d.ts +9 -0
  228. package/mq/module/index.js +93 -0
  229. package/mq/module/index.ts +24 -0
  230. package/mq/module/redis/config.d.ts +27 -0
  231. package/mq/module/redis/config.js +37 -0
  232. package/mq/module/redis/config.ts +34 -0
  233. package/mq/module/redis/index.d.ts +15 -0
  234. package/mq/module/redis/index.js +132 -0
  235. package/mq/module/redis/index.ts +60 -0
  236. package/mq/mq.d.ts +15 -0
  237. package/mq/mq.js +2 -0
  238. package/mq/mq.ts +18 -0
  239. package/mq/queue.d.ts +9 -0
  240. package/mq/queue.js +2 -0
  241. package/mq/queue.ts +11 -0
  242. package/package.json +53 -0
  243. package/pwd/config.d.ts +4 -0
  244. package/pwd/config.js +9 -0
  245. package/pwd/config.ts +9 -0
  246. package/pwd/index.d.ts +6 -0
  247. package/pwd/index.js +21 -0
  248. package/pwd/index.ts +20 -0
  249. package/pwd/pwd.d.ts +4 -0
  250. package/pwd/pwd.js +2 -0
  251. package/pwd/pwd.ts +4 -0
  252. package/utils/index.d.ts +25 -0
  253. package/utils/index.js +72 -0
  254. 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,3 @@
1
+ import type { Database } from '../database';
2
+ declare const dbConfig: () => Database.Config;
3
+ 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,3 @@
1
+ import type { Database } from '../database';
2
+ declare const dbConfig: () => Database.Config;
3
+ 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
@@ -0,0 +1,3 @@
1
+ import type { Knex as Database } from 'knex';
2
+ export { Database };
3
+ export default Database;
package/db/database.js ADDED
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = Database;
package/db/database.ts ADDED
@@ -0,0 +1,5 @@
1
+ import type { Knex as Database } from 'knex'
2
+
3
+ export { Database }
4
+
5
+ export default Database
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,3 @@
1
+ export declare const booleanColumnRegex: RegExp;
2
+ declare const postProcess: (response: any) => any;
3
+ export default postProcess;
@@ -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,7 @@
1
+ import type { Database } from '../../database';
2
+ export declare class ColumnBuilder {
3
+ private knexColumnBuilder;
4
+ constructor(knexColumnBuilder: Database.ColumnBuilder);
5
+ index(): void;
6
+ }
7
+ export default ColumnBuilder;
@@ -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;