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
package/mq/index.js ADDED
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ var config_1 = require("./module/config");
27
+ exports.default = (await Promise.resolve("".concat("./module/".concat(config_1.module))).then(function (s) { return __importStar(require(s)); })).default;
package/mq/index.ts ADDED
@@ -0,0 +1,4 @@
1
+ import { module } from './module/config'
2
+ import type { Mq } from './mq'
3
+
4
+ export default (await import(`./module/${module}`)).default as Mq
@@ -0,0 +1,13 @@
1
+ import { MqModule } from '..';
2
+ import type { Job } from '../../queue';
3
+ export declare class BypassMq extends MqModule {
4
+ createSender(): {
5
+ send: <Data>(job: Job, data: Data) => Promise<void>;
6
+ close: () => Promise<void>;
7
+ };
8
+ createWorker(): {
9
+ start: () => Promise<void>;
10
+ close: () => Promise<void>;
11
+ };
12
+ }
13
+ export default BypassMq;
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ var __extends = (this && this.__extends) || (function () {
3
+ var extendStatics = function (d, b) {
4
+ extendStatics = Object.setPrototypeOf ||
5
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
+ return extendStatics(d, b);
8
+ };
9
+ return function (d, b) {
10
+ if (typeof b !== "function" && b !== null)
11
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12
+ extendStatics(d, b);
13
+ function __() { this.constructor = d; }
14
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
+ };
16
+ })();
17
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
18
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
19
+ return new (P || (P = Promise))(function (resolve, reject) {
20
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
21
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
22
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
23
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
24
+ });
25
+ };
26
+ var __generator = (this && this.__generator) || function (thisArg, body) {
27
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
28
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
29
+ function verb(n) { return function (v) { return step([n, v]); }; }
30
+ function step(op) {
31
+ if (f) throw new TypeError("Generator is already executing.");
32
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
33
+ 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;
34
+ if (y = 0, t) op = [op[0] & 2, t.value];
35
+ switch (op[0]) {
36
+ case 0: case 1: t = op; break;
37
+ case 4: _.label++; return { value: op[1], done: false };
38
+ case 5: _.label++; y = op[1]; op = [0]; continue;
39
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
40
+ default:
41
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
42
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
43
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
44
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
45
+ if (t[2]) _.ops.pop();
46
+ _.trys.pop(); continue;
47
+ }
48
+ op = body.call(thisArg, _);
49
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
50
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
51
+ }
52
+ };
53
+ Object.defineProperty(exports, "__esModule", { value: true });
54
+ exports.BypassMq = void 0;
55
+ var __1 = require("..");
56
+ var BypassMq = /** @class */ (function (_super) {
57
+ __extends(BypassMq, _super);
58
+ function BypassMq() {
59
+ return _super !== null && _super.apply(this, arguments) || this;
60
+ }
61
+ BypassMq.prototype.createSender = function () {
62
+ var _this = this;
63
+ return {
64
+ send: function (job, data) { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) {
65
+ return [2 /*return*/, job.process(data, function () { })];
66
+ }); }); },
67
+ close: function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) {
68
+ return [2 /*return*/];
69
+ }); }); },
70
+ };
71
+ };
72
+ BypassMq.prototype.createWorker = function () {
73
+ var _this = this;
74
+ return {
75
+ start: function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) {
76
+ return [2 /*return*/];
77
+ }); }); },
78
+ close: function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) {
79
+ return [2 /*return*/];
80
+ }); }); },
81
+ };
82
+ };
83
+ return BypassMq;
84
+ }(__1.MqModule));
85
+ exports.BypassMq = BypassMq;
86
+ exports.default = BypassMq;
@@ -0,0 +1,20 @@
1
+ import { MqModule } from '..'
2
+ import type { Job } from '../../queue'
3
+
4
+ export class BypassMq extends MqModule {
5
+ createSender() {
6
+ return {
7
+ send: async <Data>(job: Job, data: Data) => job.process(data, () => { }),
8
+ close: async () => { },
9
+ }
10
+ }
11
+
12
+ createWorker() {
13
+ return {
14
+ start: async () => { },
15
+ close: async () => { },
16
+ }
17
+ }
18
+ }
19
+
20
+ export default BypassMq
@@ -0,0 +1,6 @@
1
+ declare enum Module {
2
+ bypass = "bypass",
3
+ redis = "redis"
4
+ }
5
+ export declare const module: Module | undefined;
6
+ export default module;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.module = void 0;
4
+ var config_1 = require("../../config");
5
+ var config = (0, config_1.getConfig)();
6
+ var Module;
7
+ (function (Module) {
8
+ Module["bypass"] = "bypass";
9
+ Module["redis"] = "redis";
10
+ })(Module || (Module = {}));
11
+ exports.module = Object.values(Module)
12
+ .find(function (module) { return module === config.mqModule; });
13
+ if (!exports.module)
14
+ throw new Error("mq: invalid module \"".concat(config.mqModule, "\""));
15
+ exports.default = exports.module;
@@ -0,0 +1,14 @@
1
+ import { getConfig } from '../../config'
2
+
3
+ const config = getConfig()
4
+
5
+ enum Module {
6
+ bypass = 'bypass',
7
+ redis = 'redis',
8
+ }
9
+
10
+ export const module = Object.values(Module)
11
+ .find((module: string) => module === config.mqModule)
12
+ if (!module) throw new Error(`mq: invalid module "${config.mqModule}"`)
13
+
14
+ export default module
@@ -0,0 +1,9 @@
1
+ import type { Mq, Sender, Worker } from '../mq';
2
+ import type { Queue } from '../queue';
3
+ export declare abstract class MqModule implements Mq {
4
+ getQueues(): Promise<Queue[]>;
5
+ getQueue(queueId: string): Promise<Queue | undefined>;
6
+ abstract createSender(queue: Queue): Sender;
7
+ abstract createWorker(queue: Queue): Worker;
8
+ }
9
+ export default MqModule;
@@ -0,0 +1,93 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.MqModule = void 0;
40
+ var app_1 = require("../../app");
41
+ var MqModule = /** @class */ (function () {
42
+ function MqModule() {
43
+ }
44
+ MqModule.prototype.getQueues = function () {
45
+ return __awaiter(this, void 0, void 0, function () {
46
+ var queues, _i, _a, bundle, _b;
47
+ return __generator(this, function (_c) {
48
+ switch (_c.label) {
49
+ case 0:
50
+ queues = [];
51
+ _i = 0;
52
+ return [4 /*yield*/, (0, app_1.getBundles)()];
53
+ case 1:
54
+ _a = _c.sent();
55
+ _c.label = 2;
56
+ case 2:
57
+ if (!(_i < _a.length)) return [3 /*break*/, 7];
58
+ bundle = _a[_i];
59
+ if (!bundle.queues) return [3 /*break*/, 4];
60
+ return [4 /*yield*/, bundle.queues()];
61
+ case 3:
62
+ _b = _c.sent();
63
+ return [3 /*break*/, 5];
64
+ case 4:
65
+ _b = [];
66
+ _c.label = 5;
67
+ case 5:
68
+ (_b)
69
+ .forEach(function (queue) { return queues.push(queue); });
70
+ _c.label = 6;
71
+ case 6:
72
+ _i++;
73
+ return [3 /*break*/, 2];
74
+ case 7: return [2 /*return*/, queues];
75
+ }
76
+ });
77
+ });
78
+ };
79
+ MqModule.prototype.getQueue = function (queueId) {
80
+ return __awaiter(this, void 0, void 0, function () {
81
+ return __generator(this, function (_a) {
82
+ switch (_a.label) {
83
+ case 0: return [4 /*yield*/, this.getQueues()];
84
+ case 1: return [2 /*return*/, (_a.sent())
85
+ .find(function (queue) { return queue.queueId === queueId; })];
86
+ }
87
+ });
88
+ });
89
+ };
90
+ return MqModule;
91
+ }());
92
+ exports.MqModule = MqModule;
93
+ exports.default = MqModule;
@@ -0,0 +1,24 @@
1
+ import { getBundles } from '../../app'
2
+ import type { Mq, Sender, Worker } from '../mq'
3
+ import type { Queue } from '../queue'
4
+
5
+ export abstract class MqModule implements Mq {
6
+ async getQueues() {
7
+ const queues: Queue[] = []
8
+ for (const bundle of await getBundles()) {
9
+ (bundle.queues ? await bundle.queues() : [])
10
+ .forEach((queue) => queues.push(queue))
11
+ }
12
+ return queues
13
+ }
14
+
15
+ async getQueue(queueId: string) {
16
+ return (await this.getQueues())
17
+ .find((queue) => queue.queueId === queueId)
18
+ }
19
+
20
+ abstract createSender(queue: Queue): Sender
21
+ abstract createWorker(queue: Queue): Worker
22
+ }
23
+
24
+ export default MqModule
@@ -0,0 +1,27 @@
1
+ declare const _default: {
2
+ queueOptions: {
3
+ defaultJobOptions: {
4
+ removeOnComplete: boolean;
5
+ };
6
+ connection: {
7
+ host: string;
8
+ port: number;
9
+ username: string | undefined;
10
+ password: string | undefined;
11
+ enableOfflineQueue: boolean;
12
+ };
13
+ prefix: string;
14
+ };
15
+ workerOptions: {
16
+ autorun: boolean;
17
+ connection: {
18
+ host: string;
19
+ port: number;
20
+ username: string | undefined;
21
+ password: string | undefined;
22
+ enableOfflineQueue: boolean;
23
+ };
24
+ prefix: string;
25
+ };
26
+ };
27
+ export default _default;
@@ -0,0 +1,37 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ var config_1 = require("../../../config");
15
+ var config = (0, config_1.getConfig)();
16
+ if (!config.mqRedisHost)
17
+ throw new Error('mq: redis host not provided');
18
+ if (!config.mqRedisPort)
19
+ throw new Error('mq: redis port not provided');
20
+ var commonOptions = {
21
+ connection: {
22
+ host: config.mqRedisHost,
23
+ port: config.mqRedisPort,
24
+ username: config.mqRedisUser || undefined,
25
+ password: config.mqRedisPassword || undefined,
26
+ enableOfflineQueue: false,
27
+ },
28
+ prefix: config.mqRedisPrefix,
29
+ };
30
+ var queueOptions = __assign(__assign({}, commonOptions), { defaultJobOptions: {
31
+ removeOnComplete: true,
32
+ } });
33
+ var workerOptions = __assign(__assign({}, commonOptions), { autorun: false });
34
+ exports.default = {
35
+ queueOptions: queueOptions,
36
+ workerOptions: workerOptions,
37
+ };
@@ -0,0 +1,34 @@
1
+ import { getConfig } from '../../../config'
2
+
3
+ const config = getConfig()
4
+
5
+ if (!config.mqRedisHost) throw new Error('mq: redis host not provided')
6
+ if (!config.mqRedisPort) throw new Error('mq: redis port not provided')
7
+
8
+ const commonOptions = {
9
+ connection: {
10
+ host: config.mqRedisHost,
11
+ port: config.mqRedisPort,
12
+ username: config.mqRedisUser || undefined,
13
+ password: config.mqRedisPassword || undefined,
14
+ enableOfflineQueue: false,
15
+ },
16
+ prefix: config.mqRedisPrefix,
17
+ }
18
+
19
+ const queueOptions = {
20
+ ...commonOptions,
21
+ defaultJobOptions: {
22
+ removeOnComplete: true,
23
+ },
24
+ }
25
+
26
+ const workerOptions = {
27
+ ...commonOptions,
28
+ autorun: false,
29
+ }
30
+
31
+ export default {
32
+ queueOptions,
33
+ workerOptions,
34
+ }
@@ -0,0 +1,15 @@
1
+ import { Job as BullJob } from 'bullmq';
2
+ import { MqModule } from '..';
3
+ import type { Job, Queue } from '../../queue';
4
+ export declare const formatJob: (queue: Queue, job?: BullJob) => string;
5
+ export declare class RedisMq extends MqModule {
6
+ createSender(queue: Queue): {
7
+ send: <Data>(job: Job, data: Data) => Promise<void>;
8
+ close: () => Promise<void>;
9
+ };
10
+ createWorker(queue: Queue): {
11
+ start: () => Promise<void>;
12
+ close: () => Promise<void>;
13
+ };
14
+ }
15
+ export default RedisMq;
@@ -0,0 +1,132 @@
1
+ "use strict";
2
+ var __extends = (this && this.__extends) || (function () {
3
+ var extendStatics = function (d, b) {
4
+ extendStatics = Object.setPrototypeOf ||
5
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
+ return extendStatics(d, b);
8
+ };
9
+ return function (d, b) {
10
+ if (typeof b !== "function" && b !== null)
11
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12
+ extendStatics(d, b);
13
+ function __() { this.constructor = d; }
14
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
+ };
16
+ })();
17
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
18
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
19
+ return new (P || (P = Promise))(function (resolve, reject) {
20
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
21
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
22
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
23
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
24
+ });
25
+ };
26
+ var __generator = (this && this.__generator) || function (thisArg, body) {
27
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
28
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
29
+ function verb(n) { return function (v) { return step([n, v]); }; }
30
+ function step(op) {
31
+ if (f) throw new TypeError("Generator is already executing.");
32
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
33
+ 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;
34
+ if (y = 0, t) op = [op[0] & 2, t.value];
35
+ switch (op[0]) {
36
+ case 0: case 1: t = op; break;
37
+ case 4: _.label++; return { value: op[1], done: false };
38
+ case 5: _.label++; y = op[1]; op = [0]; continue;
39
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
40
+ default:
41
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
42
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
43
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
44
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
45
+ if (t[2]) _.ops.pop();
46
+ _.trys.pop(); continue;
47
+ }
48
+ op = body.call(thisArg, _);
49
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
50
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
51
+ }
52
+ };
53
+ var __importDefault = (this && this.__importDefault) || function (mod) {
54
+ return (mod && mod.__esModule) ? mod : { "default": mod };
55
+ };
56
+ Object.defineProperty(exports, "__esModule", { value: true });
57
+ exports.RedisMq = exports.formatJob = void 0;
58
+ var bullmq_1 = require("bullmq");
59
+ var __1 = require("..");
60
+ var config_1 = __importDefault(require("./config"));
61
+ var log_1 = __importDefault(require("../../../log"));
62
+ var formatJob = function (queue, job) { return queue.queueId + (job ? " #".concat(job.id, " ").concat(job.name) : ''); };
63
+ exports.formatJob = formatJob;
64
+ var RedisMq = /** @class */ (function (_super) {
65
+ __extends(RedisMq, _super);
66
+ function RedisMq() {
67
+ return _super !== null && _super.apply(this, arguments) || this;
68
+ }
69
+ RedisMq.prototype.createSender = function (queue) {
70
+ var _this = this;
71
+ var bullQueue = new bullmq_1.Queue(queue.queueId, config_1.default.queueOptions);
72
+ bullQueue.on('waiting', function (job) {
73
+ log_1.default.debug("mq: job \"".concat((0, exports.formatJob)(queue, job), "\" waiting"));
74
+ });
75
+ return {
76
+ send: function (job, data) { return __awaiter(_this, void 0, void 0, function () {
77
+ return __generator(this, function (_a) {
78
+ switch (_a.label) {
79
+ case 0: return [4 /*yield*/, bullQueue.add(job.jobId, data)];
80
+ case 1:
81
+ _a.sent();
82
+ return [2 /*return*/];
83
+ }
84
+ });
85
+ }); },
86
+ close: function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) {
87
+ return [2 /*return*/, bullQueue.close()];
88
+ }); }); },
89
+ };
90
+ };
91
+ RedisMq.prototype.createWorker = function (queue) {
92
+ var _this = this;
93
+ var jobs = {};
94
+ queue.jobs.forEach(function (job) { return jobs[job.jobId] = job; });
95
+ var bullWorker = new bullmq_1.Worker(queue.queueId, function (bullJob) { return __awaiter(_this, void 0, void 0, function () {
96
+ var progress;
97
+ return __generator(this, function (_a) {
98
+ switch (_a.label) {
99
+ case 0:
100
+ progress = function (c, t) {
101
+ bullJob.updateProgress(Math.floor(c / t * 100));
102
+ };
103
+ return [4 /*yield*/, jobs[bullJob.name].process(bullJob.data, progress)];
104
+ case 1:
105
+ _a.sent();
106
+ return [2 /*return*/];
107
+ }
108
+ });
109
+ }); }, config_1.default.workerOptions);
110
+ bullWorker.on('active', function (job) {
111
+ log_1.default.debug("mq: job \"".concat((0, exports.formatJob)(queue, job), "\" active"));
112
+ });
113
+ bullWorker.on('progress', function (job, progress) {
114
+ log_1.default.debug("mq: job \"".concat((0, exports.formatJob)(queue, job), "\" progress ").concat(String(progress), "%"));
115
+ });
116
+ bullWorker.on('completed', function (job) {
117
+ log_1.default.debug("mq: job \"".concat((0, exports.formatJob)(queue, job), "\" completed"));
118
+ });
119
+ bullWorker.on('failed', function (job, error) {
120
+ log_1.default.error("mq: job \"".concat((0, exports.formatJob)(queue, job), "\" failed"));
121
+ log_1.default.error(error);
122
+ bullWorker.close();
123
+ });
124
+ return {
125
+ start: function () { return bullWorker.run(); },
126
+ close: function () { return bullWorker.close(); },
127
+ };
128
+ };
129
+ return RedisMq;
130
+ }(__1.MqModule));
131
+ exports.RedisMq = RedisMq;
132
+ exports.default = RedisMq;
@@ -0,0 +1,60 @@
1
+ import { Job as BullJob, Queue as BullQueue, Worker as BullWorker } from 'bullmq'
2
+ import { MqModule } from '..'
3
+ import config from './config'
4
+ import log from '../../../log'
5
+ import type { Job, Progress, Queue } from '../../queue'
6
+
7
+ export const formatJob = (
8
+ queue: Queue,
9
+ job?: BullJob,
10
+ ) => queue.queueId + (job ? ` #${job.id} ${job.name}` : '')
11
+
12
+ export class RedisMq extends MqModule {
13
+ createSender(queue: Queue) {
14
+ const bullQueue = new BullQueue(queue.queueId, config.queueOptions)
15
+ bullQueue.on('waiting', (job) => {
16
+ log.debug(`mq: job "${formatJob(queue, job)}" waiting`)
17
+ })
18
+
19
+ return {
20
+ send: async <Data>(job: Job, data: Data) => {
21
+ await bullQueue.add(job.jobId, data)
22
+ },
23
+ close: async () => bullQueue.close(),
24
+ }
25
+ }
26
+
27
+ createWorker(queue: Queue) {
28
+ const jobs: Record<string, Job> = {}
29
+ queue.jobs.forEach((job) => jobs[job.jobId] = job)
30
+
31
+ const bullWorker = new BullWorker(queue.queueId, async (bullJob) => {
32
+ const progress: Progress = (c, t) => {
33
+ bullJob.updateProgress(Math.floor(c / t * 100))
34
+ }
35
+ await jobs[bullJob.name].process(bullJob.data, progress)
36
+ }, config.workerOptions)
37
+
38
+ bullWorker.on('active', (job) => {
39
+ log.debug(`mq: job "${formatJob(queue, job)}" active`)
40
+ })
41
+ bullWorker.on('progress', (job, progress) => {
42
+ log.debug(`mq: job "${formatJob(queue, job)}" progress ${String(progress)}%`)
43
+ })
44
+ bullWorker.on('completed', (job) => {
45
+ log.debug(`mq: job "${formatJob(queue, job)}" completed`)
46
+ })
47
+ bullWorker.on('failed', (job, error) => {
48
+ log.error(`mq: job "${formatJob(queue, job)}" failed`)
49
+ log.error(error)
50
+ bullWorker.close()
51
+ })
52
+
53
+ return {
54
+ start: () => bullWorker.run(),
55
+ close: () => bullWorker.close(),
56
+ }
57
+ }
58
+ }
59
+
60
+ export default RedisMq
package/mq/mq.d.ts ADDED
@@ -0,0 +1,15 @@
1
+ import type { Job, Queue } from './queue';
2
+ export interface Mq {
3
+ getQueues: () => Promise<Queue[]>;
4
+ getQueue: (queueId: string) => Promise<Queue | undefined>;
5
+ createSender: (queue: Queue) => Sender;
6
+ createWorker: (queue: Queue) => Worker;
7
+ }
8
+ export interface Sender {
9
+ send: <Data>(job: Job, data: Data) => Promise<void>;
10
+ close: () => Promise<void>;
11
+ }
12
+ export interface Worker {
13
+ start: () => void;
14
+ close: () => Promise<void>;
15
+ }
package/mq/mq.js ADDED
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });