@creator.co/wapi 1.6.0 → 2.0.0-alpha.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/.github/workflows/npmpublish.yml +1 -1
- package/.github/workflows/prs.yml +1 -1
- package/dist/index.js +45 -31
- package/dist/index.js.map +1 -1
- package/dist/jest.config.js +2 -4
- package/dist/jest.config.js.map +1 -1
- package/dist/package.json +12 -12
- package/dist/src/API/Request.js +53 -59
- package/dist/src/API/Request.js.map +1 -1
- package/dist/src/API/Response.js +81 -156
- package/dist/src/API/Response.js.map +1 -1
- package/dist/src/BaseEvent/EventProcessor.js +54 -132
- package/dist/src/BaseEvent/EventProcessor.js.map +1 -1
- package/dist/src/BaseEvent/Process.js +40 -98
- package/dist/src/BaseEvent/Process.js.map +1 -1
- package/dist/src/BaseEvent/Transaction.js +122 -310
- package/dist/src/BaseEvent/Transaction.js.map +1 -1
- package/dist/src/Cache/Redis.js +55 -119
- package/dist/src/Cache/Redis.js.map +1 -1
- package/dist/src/Cache/types.js +1 -2
- package/dist/src/Config/Configuration.js +46 -86
- package/dist/src/Config/Configuration.js.map +1 -1
- package/dist/src/Config/EnvironmentVar.js +57 -119
- package/dist/src/Config/EnvironmentVar.js.map +1 -1
- package/dist/src/Crypto/Crypto.js +35 -82
- package/dist/src/Crypto/Crypto.js.map +1 -1
- package/dist/src/Crypto/JWT.js +12 -27
- package/dist/src/Crypto/JWT.js.map +1 -1
- package/dist/src/Database/Database.js +3 -8
- package/dist/src/Database/Database.js.map +1 -1
- package/dist/src/Database/DatabaseManager.js +23 -28
- package/dist/src/Database/DatabaseManager.js.map +1 -1
- package/dist/src/Database/DatabaseTransaction.js +50 -166
- package/dist/src/Database/DatabaseTransaction.js.map +1 -1
- package/dist/src/Database/index.js +11 -15
- package/dist/src/Database/index.js.map +1 -1
- package/dist/src/Database/integrations/knex/KnexDatabase.js +22 -76
- package/dist/src/Database/integrations/knex/KnexDatabase.js.map +1 -1
- package/dist/src/Database/integrations/knex/KnexTransaction.js +19 -85
- package/dist/src/Database/integrations/knex/KnexTransaction.js.map +1 -1
- package/dist/src/Database/integrations/kysely/KyselyDatabase.js +37 -88
- package/dist/src/Database/integrations/kysely/KyselyDatabase.js.map +1 -1
- package/dist/src/Database/integrations/kysely/KyselyTransaction.js +46 -114
- package/dist/src/Database/integrations/kysely/KyselyTransaction.js.map +1 -1
- package/dist/src/Database/integrations/pgsql/PostgresDatabase.js +20 -71
- package/dist/src/Database/integrations/pgsql/PostgresDatabase.js.map +1 -1
- package/dist/src/Database/integrations/pgsql/PostgresTransaction.js +19 -85
- package/dist/src/Database/integrations/pgsql/PostgresTransaction.js.map +1 -1
- package/dist/src/Database/types.js +1 -2
- package/dist/src/Globals.js +93 -98
- package/dist/src/Globals.js.map +1 -1
- package/dist/src/Logger/Logger.js +88 -222
- package/dist/src/Logger/Logger.js.map +1 -1
- package/dist/src/Mailer/Mailer.js +83 -204
- package/dist/src/Mailer/Mailer.js.map +1 -1
- package/dist/src/Publisher/Publisher.js +43 -107
- package/dist/src/Publisher/Publisher.js.map +1 -1
- package/dist/src/Server/RouteResolver.js +22 -49
- package/dist/src/Server/RouteResolver.js.map +1 -1
- package/dist/src/Server/Router.js +12 -16
- package/dist/src/Server/Router.js.map +1 -1
- package/dist/src/Server/lib/ContainerServer.js +21 -83
- package/dist/src/Server/lib/ContainerServer.js.map +1 -1
- package/dist/src/Server/lib/Server.js +50 -99
- package/dist/src/Server/lib/Server.js.map +1 -1
- package/dist/src/Server/lib/container/GenericHandler.js +32 -107
- package/dist/src/Server/lib/container/GenericHandler.js.map +1 -1
- package/dist/src/Server/lib/container/GenericHandlerEvent.js +37 -81
- package/dist/src/Server/lib/container/GenericHandlerEvent.js.map +1 -1
- package/dist/src/Server/lib/container/HealthHandler.js +3 -35
- package/dist/src/Server/lib/container/HealthHandler.js.map +1 -1
- package/dist/src/Server/lib/container/Proxy.js +64 -127
- package/dist/src/Server/lib/container/Proxy.js.map +1 -1
- package/dist/src/Server/lib/container/Utils.js +12 -55
- package/dist/src/Server/lib/container/Utils.js.map +1 -1
- package/dist/src/Util/AsyncSingleton.js +40 -164
- package/dist/src/Util/AsyncSingleton.js.map +1 -1
- package/dist/src/Util/Utils.js +18 -24
- package/dist/src/Util/Utils.js.map +1 -1
- package/dist/src/Validation/Validator.js +10 -16
- package/dist/src/Validation/Validator.js.map +1 -1
- package/package.json +12 -12
- package/src/Logger/Logger.ts +2 -2
- package/tests/Logger/Logger.test.ts +6 -4
- package/tsconfig.json +3 -1
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
2
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
3
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -8,65 +7,37 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
7
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
8
|
});
|
|
10
9
|
};
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
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
|
-
var http_1 = require("http");
|
|
40
|
-
var cors = require("cors");
|
|
41
|
-
var express = require("express");
|
|
42
|
-
var GenericHandler_1 = require("./GenericHandler");
|
|
43
|
-
var HealthHandler_1 = require("./HealthHandler");
|
|
44
|
-
var package_json_1 = require("../../../../package.json");
|
|
45
|
-
var Globals_1 = require("../../../Globals");
|
|
46
|
-
var Utils_1 = require("../../../Util/Utils");
|
|
10
|
+
import { createServer } from 'http';
|
|
11
|
+
import * as cors from 'cors';
|
|
12
|
+
import * as express from 'express';
|
|
13
|
+
import GenericHandler from './GenericHandler';
|
|
14
|
+
import HealthHandler from './HealthHandler';
|
|
15
|
+
import { version as appVersion } from '../../../../package.json';
|
|
16
|
+
import Globals from '../../../Globals';
|
|
17
|
+
import Utils from '../../../Util/Utils';
|
|
47
18
|
/**
|
|
48
19
|
* Represents a Proxy class that handles routing and server functionality.
|
|
49
20
|
*/
|
|
50
|
-
|
|
21
|
+
export default class Proxy {
|
|
51
22
|
/**
|
|
52
23
|
* Constructs a new instance of the Router class.
|
|
53
24
|
* @param {RouterConfig} config - The configuration object for the router.
|
|
54
25
|
* @param {Server['handleServerlessEvent']} serverlessHandler - The handler function for serverless events.
|
|
55
26
|
* @returns None
|
|
56
27
|
*/
|
|
57
|
-
|
|
28
|
+
constructor(config, serverlessHandler) {
|
|
58
29
|
this.stopping = false;
|
|
59
30
|
this.config = config;
|
|
60
31
|
this.serverlessHandler = serverlessHandler;
|
|
61
32
|
this.app = express();
|
|
62
33
|
/* Opinionated Express configs */
|
|
63
34
|
this.app.use(express.json({
|
|
64
|
-
verify
|
|
35
|
+
verify(req, res, buf) {
|
|
65
36
|
req['rawBody'] = buf;
|
|
66
37
|
},
|
|
67
38
|
}));
|
|
68
39
|
// apply cors config
|
|
69
|
-
|
|
40
|
+
const corsConfig = this.config.cors || Utils.parseObjectNullIfEmpty(process.env.CORS);
|
|
70
41
|
this.app.use(cors(corsConfig
|
|
71
42
|
? {
|
|
72
43
|
origin: corsConfig.origin,
|
|
@@ -86,119 +57,85 @@ var Proxy = /** @class */ (function () {
|
|
|
86
57
|
* Loads the necessary components and initializes the application.
|
|
87
58
|
* @returns None
|
|
88
59
|
*/
|
|
89
|
-
|
|
90
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
case 0: return [4 /*yield*/, this.startListeners()];
|
|
94
|
-
case 1:
|
|
95
|
-
_a.sent();
|
|
96
|
-
this.installRoutes();
|
|
97
|
-
return [2 /*return*/];
|
|
98
|
-
}
|
|
99
|
-
});
|
|
60
|
+
load() {
|
|
61
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
62
|
+
yield this.startListeners();
|
|
63
|
+
this.installRoutes();
|
|
100
64
|
});
|
|
101
|
-
}
|
|
65
|
+
}
|
|
102
66
|
/**
|
|
103
67
|
* Unloads the current module, stopping any active listeners.
|
|
104
68
|
* @param {any} [err] - Optional error object to pass to the stopListeners method.
|
|
105
69
|
* @returns {Promise<void>} - A promise that resolves once the listeners have been stopped.
|
|
106
70
|
*/
|
|
107
|
-
|
|
108
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
109
|
-
|
|
110
|
-
switch (_a.label) {
|
|
111
|
-
case 0: return [4 /*yield*/, this.stopListeners(err)];
|
|
112
|
-
case 1:
|
|
113
|
-
_a.sent();
|
|
114
|
-
return [2 /*return*/];
|
|
115
|
-
}
|
|
116
|
-
});
|
|
71
|
+
unload(err) {
|
|
72
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
73
|
+
yield this.stopListeners(err);
|
|
117
74
|
});
|
|
118
|
-
}
|
|
75
|
+
}
|
|
119
76
|
/**
|
|
120
77
|
* Starts the listeners for the proxy server.
|
|
121
78
|
* @returns {Promise<void>} A promise that resolves when the listeners have started.
|
|
122
79
|
*/
|
|
123
|
-
|
|
124
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
125
|
-
|
|
126
|
-
return
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
];
|
|
143
|
-
case 1:
|
|
144
|
-
_a.sent();
|
|
145
|
-
_a.label = 2;
|
|
146
|
-
case 2:
|
|
147
|
-
// Start Server
|
|
148
|
-
this.listener.listen(port, function () {
|
|
149
|
-
console.log("[Proxy] - [STARTED]");
|
|
150
|
-
resolve();
|
|
151
|
-
});
|
|
152
|
-
return [2 /*return*/];
|
|
153
|
-
}
|
|
154
|
-
});
|
|
155
|
-
}); })];
|
|
156
|
-
});
|
|
80
|
+
startListeners() {
|
|
81
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
82
|
+
// eslint-disable-next-line no-async-promise-executor
|
|
83
|
+
return new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {
|
|
84
|
+
const port = this.config.port || Globals.Listener_HTTP_DefaultPort;
|
|
85
|
+
console.log(`[Proxy] - [STARTING] - v.${appVersion} - :${port}`);
|
|
86
|
+
// Create Server
|
|
87
|
+
this.listener = createServer(this.app);
|
|
88
|
+
// Set defaults
|
|
89
|
+
this.listener.setTimeout(this.config.timeout || Globals.Listener_HTTP_DefaultTimeout);
|
|
90
|
+
// Call hook if available
|
|
91
|
+
if (this.config.containerSetupHook)
|
|
92
|
+
yield this.config.containerSetupHook(this.listener, this.app);
|
|
93
|
+
// Start Server
|
|
94
|
+
this.listener.listen(port, () => {
|
|
95
|
+
console.log(`[Proxy] - [STARTED]`);
|
|
96
|
+
resolve();
|
|
97
|
+
});
|
|
98
|
+
}));
|
|
157
99
|
});
|
|
158
|
-
}
|
|
100
|
+
}
|
|
159
101
|
/**
|
|
160
102
|
* Stops the listeners and exits the process.
|
|
161
103
|
* @param {any} [err] - Optional error object.
|
|
162
104
|
* @returns {Promise<void>} - A promise that resolves when the listeners are stopped and the process is exited.
|
|
163
105
|
*/
|
|
164
|
-
|
|
165
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
resolve(null);
|
|
180
|
-
});
|
|
181
|
-
})];
|
|
106
|
+
stopListeners(err) {
|
|
107
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
108
|
+
if (this.stopping)
|
|
109
|
+
return;
|
|
110
|
+
this.stopping = true;
|
|
111
|
+
console.debug('[Proxy] - [STOPPING]');
|
|
112
|
+
return new Promise(resolve => {
|
|
113
|
+
this.listener.close(_err => {
|
|
114
|
+
const err2 = err || _err;
|
|
115
|
+
if (err2)
|
|
116
|
+
console.log('[Proxy] - exit output:', err2);
|
|
117
|
+
console.log('[Proxy] - [STOPPED]');
|
|
118
|
+
process.exit(err2 ? 1 : 0);
|
|
119
|
+
resolve(null);
|
|
120
|
+
});
|
|
182
121
|
});
|
|
183
122
|
});
|
|
184
|
-
}
|
|
123
|
+
}
|
|
185
124
|
/**
|
|
186
125
|
* Installs the routes for the proxy server.
|
|
187
126
|
* @returns None
|
|
188
127
|
*/
|
|
189
|
-
|
|
128
|
+
installRoutes() {
|
|
190
129
|
//Health check route -- This is a bypass route to only check if
|
|
191
130
|
//runtime proxy is working and responding to calls.
|
|
192
|
-
console.log(
|
|
131
|
+
console.log(`[Proxy] - [HEALTH-ROUTE] - ${this.config.healthCheckRoute || Globals.Listener_HTTP_DefaultHealthCheckRoute}`);
|
|
193
132
|
this.app
|
|
194
|
-
.route(this.config.healthCheckRoute ||
|
|
195
|
-
.get(
|
|
133
|
+
.route(this.config.healthCheckRoute || Globals.Listener_HTTP_DefaultHealthCheckRoute)
|
|
134
|
+
.get(HealthHandler);
|
|
196
135
|
//Main route -- We use a wildcard route because is not the job of the runtime and neither
|
|
197
136
|
//the task to deny/constrain routes that invoked this task; all the job is done by the
|
|
198
137
|
//load balancer and we just foward everything we have to the function.
|
|
199
|
-
this.app.route(
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
}());
|
|
203
|
-
exports.default = Proxy;
|
|
138
|
+
this.app.route(Globals.Listener_HTTP_ProxyRoute).all(GenericHandler(this.serverlessHandler));
|
|
139
|
+
}
|
|
140
|
+
}
|
|
204
141
|
//# sourceMappingURL=Proxy.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Proxy.js","sourceRoot":"","sources":["../../../../../src/Server/lib/container/Proxy.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Proxy.js","sourceRoot":"","sources":["../../../../../src/Server/lib/container/Proxy.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,80 +1,37 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __values = (this && this.__values) || function(o) {
|
|
3
|
-
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
4
|
-
if (m) return m.call(o);
|
|
5
|
-
if (o && typeof o.length === "number") return {
|
|
6
|
-
next: function () {
|
|
7
|
-
if (o && i >= o.length) o = void 0;
|
|
8
|
-
return { value: o && o[i++], done: !o };
|
|
9
|
-
}
|
|
10
|
-
};
|
|
11
|
-
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
12
|
-
};
|
|
13
|
-
var __read = (this && this.__read) || function (o, n) {
|
|
14
|
-
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
15
|
-
if (!m) return o;
|
|
16
|
-
var i = m.call(o), r, ar = [], e;
|
|
17
|
-
try {
|
|
18
|
-
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
19
|
-
}
|
|
20
|
-
catch (error) { e = { error: error }; }
|
|
21
|
-
finally {
|
|
22
|
-
try {
|
|
23
|
-
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
24
|
-
}
|
|
25
|
-
finally { if (e) throw e.error; }
|
|
26
|
-
}
|
|
27
|
-
return ar;
|
|
28
|
-
};
|
|
29
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
30
|
-
exports.parseQueryStringParameters = exports.parseMultiValueQueryStringParameters = void 0;
|
|
31
1
|
/**
|
|
32
2
|
* Parses the multi-value query string parameters from the given URL.
|
|
33
3
|
* @param {string} url - The URL containing the query string parameters.
|
|
34
4
|
* @returns {Object} - An object representing the parsed query string parameters.
|
|
35
5
|
*/
|
|
36
|
-
function parseMultiValueQueryStringParameters(url) {
|
|
37
|
-
var e_1, _a;
|
|
6
|
+
export function parseMultiValueQueryStringParameters(url) {
|
|
38
7
|
// dummy placeholder url for the WHATWG URL constructor
|
|
39
8
|
// https://github.com/nodejs/node/issues/12682
|
|
40
|
-
|
|
9
|
+
const { searchParams } = new URL(url, 'http://example');
|
|
41
10
|
//
|
|
42
11
|
if (Array.from(searchParams).length === 0)
|
|
43
12
|
return {};
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
else
|
|
53
|
-
map.set(key, [value]);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
57
|
-
finally {
|
|
58
|
-
try {
|
|
59
|
-
if (searchParams_1_1 && !searchParams_1_1.done && (_a = searchParams_1.return)) _a.call(searchParams_1);
|
|
60
|
-
}
|
|
61
|
-
finally { if (e_1) throw e_1.error; }
|
|
13
|
+
const map = new Map();
|
|
14
|
+
// eslint-disable-next-line no-restricted-syntax
|
|
15
|
+
for (const [key, value] of searchParams) {
|
|
16
|
+
const item = map.get(key);
|
|
17
|
+
if (item)
|
|
18
|
+
item.push(value);
|
|
19
|
+
else
|
|
20
|
+
map.set(key, [value]);
|
|
62
21
|
}
|
|
63
22
|
return Object.fromEntries(map);
|
|
64
23
|
}
|
|
65
|
-
exports.parseMultiValueQueryStringParameters = parseMultiValueQueryStringParameters;
|
|
66
24
|
/**
|
|
67
25
|
* Parses the query string parameters from a given URL.
|
|
68
26
|
* @param {string} url - The URL to parse the query string parameters from.
|
|
69
27
|
* @returns {object | null} - An object containing the parsed query string parameters, or null if there are no parameters.
|
|
70
28
|
*/
|
|
71
|
-
function parseQueryStringParameters(url) {
|
|
29
|
+
export function parseQueryStringParameters(url) {
|
|
72
30
|
// dummy placeholder url for the WHATWG URL constructor
|
|
73
31
|
// https://github.com/nodejs/node/issues/12682
|
|
74
|
-
|
|
32
|
+
const { searchParams } = new URL(url, 'http://example');
|
|
75
33
|
if (Array.from(searchParams).length === 0)
|
|
76
34
|
return {};
|
|
77
35
|
return Object.fromEntries(searchParams);
|
|
78
36
|
}
|
|
79
|
-
exports.parseQueryStringParameters = parseQueryStringParameters;
|
|
80
37
|
//# sourceMappingURL=Utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Utils.js","sourceRoot":"","sources":["../../../../../src/Server/lib/container/Utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Utils.js","sourceRoot":"","sources":["../../../../../src/Server/lib/container/Utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,UAAU,oCAAoC,CAAC,GAAW;IAC9D,uDAAuD;IACvD,8CAA8C;IAC9C,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAA;IACvD,EAAE;IACF,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAA;IACpD,MAAM,GAAG,GAAG,IAAI,GAAG,EAAE,CAAA;IACrB,gDAAgD;IAChD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,YAAY,EAAE,CAAC;QACxC,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACzB,IAAI,IAAI;YAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;;YACrB,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAA;IAC5B,CAAC;IACD,OAAO,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;AAChC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,0BAA0B,CAAC,GAAG;IAC5C,uDAAuD;IACvD,8CAA8C;IAC9C,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAA;IACvD,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAA;IACpD,OAAO,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,CAAA;AACzC,CAAC"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
2
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
3
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -8,75 +7,16 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
7
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
8
|
});
|
|
10
9
|
};
|
|
11
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
-
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
-
function step(op) {
|
|
16
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
-
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
18
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
-
switch (op[0]) {
|
|
21
|
-
case 0: case 1: t = op; break;
|
|
22
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
-
default:
|
|
26
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
-
if (t[2]) _.ops.pop();
|
|
31
|
-
_.trys.pop(); continue;
|
|
32
|
-
}
|
|
33
|
-
op = body.call(thisArg, _);
|
|
34
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
|
-
var __values = (this && this.__values) || function(o) {
|
|
39
|
-
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
40
|
-
if (m) return m.call(o);
|
|
41
|
-
if (o && typeof o.length === "number") return {
|
|
42
|
-
next: function () {
|
|
43
|
-
if (o && i >= o.length) o = void 0;
|
|
44
|
-
return { value: o && o[i++], done: !o };
|
|
45
|
-
}
|
|
46
|
-
};
|
|
47
|
-
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
48
|
-
};
|
|
49
|
-
var __read = (this && this.__read) || function (o, n) {
|
|
50
|
-
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
51
|
-
if (!m) return o;
|
|
52
|
-
var i = m.call(o), r, ar = [], e;
|
|
53
|
-
try {
|
|
54
|
-
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
55
|
-
}
|
|
56
|
-
catch (error) { e = { error: error }; }
|
|
57
|
-
finally {
|
|
58
|
-
try {
|
|
59
|
-
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
60
|
-
}
|
|
61
|
-
finally { if (e) throw e.error; }
|
|
62
|
-
}
|
|
63
|
-
return ar;
|
|
64
|
-
};
|
|
65
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
66
10
|
/**
|
|
67
11
|
* Represents a class that can be used to create a singleton instance of a class that is created asynchronously.
|
|
68
12
|
*/
|
|
69
|
-
|
|
13
|
+
export default class AsyncSingleton {
|
|
70
14
|
/**
|
|
71
15
|
* Creates a new instance of the AsyncSingleton class.
|
|
72
16
|
* @param factory The factory function that creates the instance.
|
|
73
17
|
* @param checker The function that checks if the instance is valid.
|
|
74
18
|
*/
|
|
75
|
-
|
|
76
|
-
if (checker === void 0) { checker = function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) {
|
|
77
|
-
return [2 /*return*/, true];
|
|
78
|
-
}); }); }; }
|
|
79
|
-
var _this = this;
|
|
19
|
+
constructor(factory, checker = () => __awaiter(this, void 0, void 0, function* () { return true; })) {
|
|
80
20
|
this.queue = [];
|
|
81
21
|
this.instantiating = false;
|
|
82
22
|
this.factory = factory;
|
|
@@ -86,122 +26,58 @@ var AsyncSingleton = /** @class */ (function () {
|
|
|
86
26
|
* Gets the instance of the class.
|
|
87
27
|
* @param r The configuration object for creating the instance.
|
|
88
28
|
*/
|
|
89
|
-
|
|
90
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
return [4 /*yield*/, this.checker(this.value)];
|
|
98
|
-
case 1:
|
|
99
|
-
_a = (_b.sent());
|
|
100
|
-
_b.label = 2;
|
|
101
|
-
case 2:
|
|
102
|
-
if (_a)
|
|
103
|
-
return [2 /*return*/, this.value];
|
|
104
|
-
if (!this.instantiating) return [3 /*break*/, 4];
|
|
105
|
-
return [4 /*yield*/, this.awaitOtherInit()];
|
|
106
|
-
case 3: return [2 /*return*/, _b.sent()];
|
|
107
|
-
case 4: return [4 /*yield*/, this.initHere(r)];
|
|
108
|
-
case 5: return [2 /*return*/, _b.sent()];
|
|
109
|
-
}
|
|
110
|
-
});
|
|
29
|
+
instance(r) {
|
|
30
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
31
|
+
if (this.value && (yield this.checker(this.value)))
|
|
32
|
+
return this.value;
|
|
33
|
+
if (this.instantiating) {
|
|
34
|
+
return yield this.awaitOtherInit();
|
|
35
|
+
}
|
|
36
|
+
return yield this.initHere(r);
|
|
111
37
|
});
|
|
112
|
-
}
|
|
38
|
+
}
|
|
113
39
|
/**
|
|
114
40
|
* Gets the current value, may be undefined or invalid.
|
|
115
41
|
*/
|
|
116
|
-
|
|
42
|
+
getValue() {
|
|
117
43
|
return this.value;
|
|
118
|
-
}
|
|
44
|
+
}
|
|
119
45
|
/**
|
|
120
46
|
* Clears the current value and rejects all pending promises.
|
|
121
47
|
*/
|
|
122
|
-
|
|
123
|
-
var e_1, _a;
|
|
48
|
+
clear() {
|
|
124
49
|
this.value = undefined;
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
var _d = __read(_c.value, 2), rej = _d[1];
|
|
128
|
-
rej();
|
|
129
|
-
}
|
|
50
|
+
for (const [, rej] of this.queue) {
|
|
51
|
+
rej();
|
|
130
52
|
}
|
|
131
|
-
|
|
132
|
-
|
|
53
|
+
this.queue = [];
|
|
54
|
+
}
|
|
55
|
+
initHere(r) {
|
|
56
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
133
57
|
try {
|
|
134
|
-
|
|
58
|
+
this.instantiating = true;
|
|
59
|
+
this.value = yield this.factory(r);
|
|
60
|
+
for (const [res] of this.queue) {
|
|
61
|
+
res();
|
|
62
|
+
}
|
|
63
|
+
this.queue = [];
|
|
64
|
+
return this.value;
|
|
135
65
|
}
|
|
136
|
-
finally {
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
};
|
|
140
|
-
AsyncSingleton.prototype.initHere = function (r) {
|
|
141
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
142
|
-
var _a, _b, _c, _d, res, _e, _f, _g, rej;
|
|
143
|
-
var e_2, _h, e_3, _j;
|
|
144
|
-
return __generator(this, function (_k) {
|
|
145
|
-
switch (_k.label) {
|
|
146
|
-
case 0:
|
|
147
|
-
_k.trys.push([0, , 2, 3]);
|
|
148
|
-
this.instantiating = true;
|
|
149
|
-
_a = this;
|
|
150
|
-
return [4 /*yield*/, this.factory(r)];
|
|
151
|
-
case 1:
|
|
152
|
-
_a.value = _k.sent();
|
|
153
|
-
try {
|
|
154
|
-
for (_b = __values(this.queue), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
155
|
-
_d = __read(_c.value, 1), res = _d[0];
|
|
156
|
-
res();
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
160
|
-
finally {
|
|
161
|
-
try {
|
|
162
|
-
if (_c && !_c.done && (_h = _b.return)) _h.call(_b);
|
|
163
|
-
}
|
|
164
|
-
finally { if (e_2) throw e_2.error; }
|
|
165
|
-
}
|
|
166
|
-
this.queue = [];
|
|
167
|
-
return [2 /*return*/, this.value];
|
|
168
|
-
case 2:
|
|
169
|
-
try {
|
|
170
|
-
for (_e = __values(this.queue), _f = _e.next(); !_f.done; _f = _e.next()) {
|
|
171
|
-
_g = __read(_f.value, 2), rej = _g[1];
|
|
172
|
-
rej();
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
176
|
-
finally {
|
|
177
|
-
try {
|
|
178
|
-
if (_f && !_f.done && (_j = _e.return)) _j.call(_e);
|
|
179
|
-
}
|
|
180
|
-
finally { if (e_3) throw e_3.error; }
|
|
181
|
-
}
|
|
182
|
-
this.instantiating = false;
|
|
183
|
-
return [7 /*endfinally*/];
|
|
184
|
-
case 3: return [2 /*return*/];
|
|
66
|
+
finally {
|
|
67
|
+
for (const [, rej] of this.queue) {
|
|
68
|
+
rej();
|
|
185
69
|
}
|
|
186
|
-
|
|
70
|
+
this.instantiating = false;
|
|
71
|
+
}
|
|
187
72
|
});
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
switch (_a.label) {
|
|
194
|
-
case 0: return [4 /*yield*/, new Promise(function (res, rej) {
|
|
195
|
-
_this.queue.push([res, rej]);
|
|
196
|
-
})];
|
|
197
|
-
case 1:
|
|
198
|
-
_a.sent();
|
|
199
|
-
return [2 /*return*/, this.value];
|
|
200
|
-
}
|
|
73
|
+
}
|
|
74
|
+
awaitOtherInit() {
|
|
75
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
76
|
+
yield new Promise((res, rej) => {
|
|
77
|
+
this.queue.push([res, rej]);
|
|
201
78
|
});
|
|
79
|
+
return this.value;
|
|
202
80
|
});
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
}());
|
|
206
|
-
exports.default = AsyncSingleton;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
207
83
|
//# sourceMappingURL=AsyncSingleton.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AsyncSingleton.js","sourceRoot":"","sources":["../../../src/Util/AsyncSingleton.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AsyncSingleton.js","sourceRoot":"","sources":["../../../src/Util/AsyncSingleton.ts"],"names":[],"mappings":";;;;;;;;;AAEA;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,cAAc;IASjC;;;;OAIG;IACH,YACE,OAA6B,EAC7B,UAA0C,GAAS,EAAE,gDAAC,OAAA,IAAI,CAAA,GAAA;QAZpD,UAAK,GAAoB,EAAE,CAAA;QAC3B,kBAAa,GAAY,KAAK,CAAA;QAapC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACxB,CAAC;IAED;;;OAGG;IACU,QAAQ,CAAC,CAAI;;YACxB,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAAE,OAAO,IAAI,CAAC,KAAK,CAAA;YAErE,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;gBACvB,OAAO,MAAM,IAAI,CAAC,cAAc,EAAE,CAAA;YACpC,CAAC;YAED,OAAO,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;QAC/B,CAAC;KAAA;IAED;;OAEG;IACI,QAAQ;QACb,OAAO,IAAI,CAAC,KAAK,CAAA;IACnB,CAAC;IAED;;OAEG;IACI,KAAK;QACV,IAAI,CAAC,KAAK,GAAG,SAAS,CAAA;QACtB,KAAK,MAAM,CAAC,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACjC,GAAG,EAAE,CAAA;QACP,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,EAAE,CAAA;IACjB,CAAC;IAEa,QAAQ,CAAC,CAAI;;YACzB,IAAI,CAAC;gBACH,IAAI,CAAC,aAAa,GAAG,IAAI,CAAA;gBACzB,IAAI,CAAC,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;gBAElC,KAAK,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;oBAC/B,GAAG,EAAE,CAAA;gBACP,CAAC;gBAED,IAAI,CAAC,KAAK,GAAG,EAAE,CAAA;gBAEf,OAAO,IAAI,CAAC,KAAK,CAAA;YACnB,CAAC;oBAAS,CAAC;gBACT,KAAK,MAAM,CAAC,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;oBACjC,GAAG,EAAE,CAAA;gBACP,CAAC;gBACD,IAAI,CAAC,aAAa,GAAG,KAAK,CAAA;YAC5B,CAAC;QACH,CAAC;KAAA;IAEa,cAAc;;YAC1B,MAAM,IAAI,OAAO,CAAO,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;gBACnC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAA;YAC7B,CAAC,CAAC,CAAA;YACF,OAAO,IAAI,CAAC,KAAM,CAAA;QACpB,CAAC;KAAA;CACF"}
|