@stemy/backend 5.2.1 → 6.0.0
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/commands/clear-command.d.ts +6 -6
- package/commands/fixtures-command.d.ts +9 -9
- package/commands/index.d.ts +2 -2
- package/common-types.d.ts +325 -326
- package/esm2020/services/assets.mjs +2 -2
- package/esm2022/commands/clear-command.mjs +15 -0
- package/esm2022/commands/fixtures-command.mjs +26 -0
- package/esm2022/commands/index.mjs +7 -0
- package/esm2022/common-types.mjs +26 -0
- package/esm2022/fixtures/index.mjs +5 -0
- package/esm2022/fixtures/ttl.fixture.mjs +23 -0
- package/esm2022/public_api.mjs +378 -0
- package/esm2022/requests/asset-image-params.mjs +60 -0
- package/esm2022/rest-controllers/assets.controller.mjs +177 -0
- package/esm2022/rest-controllers/auth.controller.mjs +57 -0
- package/esm2022/rest-controllers/gallery.controller.mjs +27 -0
- package/esm2022/rest-controllers/progresses.controller.mjs +38 -0
- package/esm2022/rest-controllers/terminal-styles.mjs +67 -0
- package/esm2022/rest-controllers/terminal.controller.mjs +132 -0
- package/esm2022/rest-middlewares/container.middleware.mjs +22 -0
- package/esm2022/rest-middlewares/error-handler.middleware.mjs +79 -0
- package/esm2022/rest-middlewares/language.middleware.mjs +21 -0
- package/esm2022/rest-middlewares/request-ended.middleware.mjs +26 -0
- package/esm2022/rest-middlewares/request-started.middleware.mjs +25 -0
- package/esm2022/services/asset-processor.mjs +90 -0
- package/esm2022/services/asset-resolver.mjs +36 -0
- package/esm2022/services/assets.mjs +154 -0
- package/esm2022/services/backend-provider.mjs +83 -0
- package/esm2022/services/cache-processor.mjs +16 -0
- package/esm2022/services/cache.mjs +70 -0
- package/esm2022/services/configuration.mjs +68 -0
- package/esm2022/services/drivers/asset-grid.driver.mjs +27 -0
- package/esm2022/services/drivers/asset-local.driver.mjs +41 -0
- package/esm2022/services/endpoint-provider.mjs +13 -0
- package/esm2022/services/entities/asset.mjs +61 -0
- package/esm2022/services/entities/base-entity.mjs +32 -0
- package/esm2022/services/entities/lazy-asset.mjs +87 -0
- package/esm2022/services/entities/progress.mjs +182 -0
- package/esm2022/services/entities/temp-asset.mjs +53 -0
- package/esm2022/services/fixtures.mjs +38 -0
- package/esm2022/services/gallery-cache.mjs +29 -0
- package/esm2022/services/gallery-image.mjs +42 -0
- package/esm2022/services/gallery.mjs +124 -0
- package/esm2022/services/id-generator.mjs +49 -0
- package/esm2022/services/job-manager.mjs +198 -0
- package/esm2022/services/lazy-assets.mjs +68 -0
- package/esm2022/services/logger.mjs +26 -0
- package/esm2022/services/mail-sender.mjs +42 -0
- package/esm2022/services/memory-cache.mjs +61 -0
- package/esm2022/services/mongo-connector.mjs +36 -0
- package/esm2022/services/open-api.mjs +124 -0
- package/esm2022/services/progresses.mjs +93 -0
- package/esm2022/services/template-renderer.mjs +71 -0
- package/esm2022/services/terminal-manager.mjs +88 -0
- package/esm2022/services/token-generator.mjs +37 -0
- package/esm2022/services/translation-provider.mjs +39 -0
- package/esm2022/services/translator.mjs +67 -0
- package/esm2022/services/user-manager.mjs +27 -0
- package/esm2022/socket-controllers/progress.controller.mjs +63 -0
- package/esm2022/socket-controllers/terminal.controller.mjs +61 -0
- package/esm2022/socket-controllers/terminal.mjs +89 -0
- package/esm2022/socket-middlewares/compression.middleware.mjs +14 -0
- package/esm2022/static.mjs +23 -0
- package/esm2022/stemy-backend.mjs +5 -0
- package/esm2022/utilities/base-doc.mjs +33 -0
- package/esm2022/utilities/decorators.mjs +51 -0
- package/esm2022/utilities/di-container.mjs +88 -0
- package/esm2022/utilities/empty-job.mjs +13 -0
- package/esm2022/utilities/lazy-asset-generator.mjs +38 -0
- package/esm2022/utilities/mongoose.mjs +216 -0
- package/esm2022/utilities/tree.mjs +119 -0
- package/esm2022/utils.mjs +726 -0
- package/esm2022/validators.mjs +46 -0
- package/fesm2015/stemy-backend.mjs +1 -1
- package/fesm2015/stemy-backend.mjs.map +1 -1
- package/fesm2020/stemy-backend.mjs +1 -1
- package/fesm2020/stemy-backend.mjs.map +1 -1
- package/fesm2022/stemy-backend.mjs +4690 -0
- package/fesm2022/stemy-backend.mjs.map +1 -0
- package/fixtures/index.d.ts +2 -2
- package/fixtures/ttl.fixture.d.ts +7 -7
- package/index.d.ts +5 -5
- package/package.json +43 -49
- package/public_api.d.ts +44 -44
- package/requests/asset-image-params.d.ts +12 -12
- package/rest-controllers/assets.controller.d.ts +25 -27
- package/rest-controllers/auth.controller.d.ts +14 -14
- package/rest-controllers/gallery.controller.d.ts +6 -7
- package/rest-controllers/progresses.controller.d.ts +9 -9
- package/rest-controllers/terminal-styles.d.ts +2 -2
- package/rest-controllers/terminal.controller.d.ts +10 -10
- package/rest-middlewares/container.middleware.d.ts +8 -8
- package/rest-middlewares/error-handler.middleware.d.ts +13 -13
- package/rest-middlewares/language.middleware.d.ts +8 -8
- package/rest-middlewares/request-ended.middleware.d.ts +8 -8
- package/rest-middlewares/request-started.middleware.d.ts +8 -8
- package/services/asset-processor.d.ts +10 -11
- package/services/asset-resolver.d.ts +10 -10
- package/services/assets.d.ts +24 -26
- package/services/backend-provider.d.ts +19 -20
- package/services/cache-processor.d.ts +4 -4
- package/services/cache.d.ts +23 -23
- package/services/configuration.d.ts +15 -15
- package/services/drivers/asset-grid.driver.d.ts +11 -11
- package/services/drivers/asset-local.driver.d.ts +10 -11
- package/services/endpoint-provider.d.ts +4 -4
- package/services/entities/asset.d.ts +19 -21
- package/services/entities/base-entity.d.ts +13 -13
- package/services/entities/lazy-asset.d.ts +25 -25
- package/services/entities/progress.d.ts +49 -49
- package/services/entities/temp-asset.d.ts +20 -22
- package/services/fixtures.d.ts +8 -8
- package/services/gallery-cache.d.ts +8 -9
- package/services/gallery-image.d.ts +10 -11
- package/services/gallery.d.ts +13 -13
- package/services/id-generator.d.ts +11 -11
- package/services/job-manager.d.ts +35 -35
- package/services/lazy-assets.d.ts +22 -22
- package/services/logger.d.ts +8 -8
- package/services/mail-sender.d.ts +20 -20
- package/services/memory-cache.d.ts +10 -10
- package/services/mongo-connector.d.ts +12 -12
- package/services/open-api.d.ts +13 -13
- package/services/progresses.d.ts +20 -20
- package/services/template-renderer.d.ts +14 -14
- package/services/terminal-manager.d.ts +15 -15
- package/services/token-generator.d.ts +6 -6
- package/services/translation-provider.d.ts +9 -9
- package/services/translator.d.ts +15 -15
- package/services/user-manager.d.ts +6 -6
- package/socket-controllers/progress.controller.d.ts +10 -10
- package/socket-controllers/terminal.controller.d.ts +13 -13
- package/socket-controllers/terminal.d.ts +19 -20
- package/socket-middlewares/compression.middleware.d.ts +4 -4
- package/static.d.ts +2 -2
- package/utilities/base-doc.d.ts +40 -40
- package/utilities/decorators.d.ts +10 -10
- package/utilities/di-container.d.ts +43 -43
- package/utilities/empty-job.d.ts +4 -4
- package/utilities/lazy-asset-generator.d.ts +15 -15
- package/utilities/mongoose.d.ts +36 -36
- package/utilities/tree.d.ts +15 -15
- package/utils.d.ts +120 -123
- package/validators.d.ts +7 -7
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { __decorate, __metadata } from "tslib";
|
|
2
|
+
import { injectable } from "tsyringe";
|
|
3
|
+
import { BadRequestError, Middleware } from "routing-controllers";
|
|
4
|
+
import axios from "axios";
|
|
5
|
+
import { Translator } from "../services/translator";
|
|
6
|
+
import { Configuration } from "../services/configuration";
|
|
7
|
+
let ErrorHandlerMiddleware = class ErrorHandlerMiddleware {
|
|
8
|
+
configuration;
|
|
9
|
+
translator;
|
|
10
|
+
get isDev() {
|
|
11
|
+
return this.configuration.resolve("nodeEnv") === "development";
|
|
12
|
+
}
|
|
13
|
+
constructor(configuration, translator) {
|
|
14
|
+
this.configuration = configuration;
|
|
15
|
+
this.translator = translator;
|
|
16
|
+
}
|
|
17
|
+
async error(error, req, res, next) {
|
|
18
|
+
const result = await this.getResult(error, req, res);
|
|
19
|
+
if (this.isDev) {
|
|
20
|
+
if (axios.isAxiosError(error)) {
|
|
21
|
+
console.log(`Axios error:`, result);
|
|
22
|
+
console.log(error.config.data);
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
console.log(error.constructor?.name || "Error", result, res.statusCode);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
res.json(result);
|
|
29
|
+
}
|
|
30
|
+
async getResult(error, req, res) {
|
|
31
|
+
const result = {};
|
|
32
|
+
if (axios.isAxiosError(error)) {
|
|
33
|
+
res.status(error.response.status);
|
|
34
|
+
result.message = error.message;
|
|
35
|
+
result.error = error.response.data;
|
|
36
|
+
result.headers = error.response.headers;
|
|
37
|
+
result.url = `${error.config.baseURL}${error.config.url}`;
|
|
38
|
+
return result;
|
|
39
|
+
}
|
|
40
|
+
if (error instanceof BadRequestError) {
|
|
41
|
+
res.status(400);
|
|
42
|
+
if (error.constructor.name === "ParamRequiredError") {
|
|
43
|
+
result.message = await this.translator.getTranslation(req.language, "message.parameter-required.error");
|
|
44
|
+
result.param = error.message;
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
result.message = error.message || await this.translator.getTranslation(req.language, "message.form-validation.error");
|
|
48
|
+
result.errors = error["errors"];
|
|
49
|
+
if (error.stack && this.isDev) {
|
|
50
|
+
result.stack = error.stack;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return result;
|
|
54
|
+
}
|
|
55
|
+
res.status(error.httpCode || 500);
|
|
56
|
+
if (error instanceof Error) {
|
|
57
|
+
if (error.name) {
|
|
58
|
+
result.name = error.name;
|
|
59
|
+
}
|
|
60
|
+
if (error.message) {
|
|
61
|
+
result.message = error.message;
|
|
62
|
+
}
|
|
63
|
+
if (error.stack && this.isDev) {
|
|
64
|
+
result.stack = error.stack;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
else if (typeof error === "string") {
|
|
68
|
+
result.message = error;
|
|
69
|
+
}
|
|
70
|
+
return result;
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
ErrorHandlerMiddleware = __decorate([
|
|
74
|
+
injectable(),
|
|
75
|
+
Middleware({ type: "after" }),
|
|
76
|
+
__metadata("design:paramtypes", [Configuration, Translator])
|
|
77
|
+
], ErrorHandlerMiddleware);
|
|
78
|
+
export { ErrorHandlerMiddleware };
|
|
79
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3ItaGFuZGxlci5taWRkbGV3YXJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Jlc3QtbWlkZGxld2FyZXMvZXJyb3ItaGFuZGxlci5taWRkbGV3YXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ3BDLE9BQU8sRUFBQyxlQUFlLEVBQW1DLFVBQVUsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ2pHLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUkxQixPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDbEQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBSWpELElBQU0sc0JBQXNCLEdBQTVCLE1BQU0sc0JBQXNCO0lBTVY7SUFBdUM7SUFKNUQsSUFBSSxLQUFLO1FBQ0wsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxhQUFhLENBQUM7SUFDbkUsQ0FBQztJQUVELFlBQXFCLGFBQTRCLEVBQVcsVUFBc0I7UUFBN0Qsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFBVyxlQUFVLEdBQVYsVUFBVSxDQUFZO0lBRWxGLENBQUM7SUFFRCxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQVUsRUFBRSxHQUFhLEVBQUUsR0FBYSxFQUFFLElBQXdCO1FBQzFFLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3JELElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2IsSUFBSSxLQUFLLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQzVCLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUNwQyxPQUFPLENBQUMs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QUFNLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUMzQixDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztDQUNKLENBQUE7QUFyRVksc0JBQXNCO0lBRmxDLFVBQVUsRUFBRTtJQUNaLFVBQVUsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQztxQ0FPVSxhQUFhLEVBQXVCLFVBQVU7R0FOekUsc0JBQXNCLENBcUVsQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7aW5qZWN0YWJsZX0gZnJvbSBcInRzeXJpbmdlXCI7XHJcbmltcG9ydCB7QmFkUmVxdWVzdEVycm9yLCBFeHByZXNzRXJyb3JNaWRkbGV3YXJlSW50ZXJmYWNlLCBNaWRkbGV3YXJlfSBmcm9tIFwicm91dGluZy1jb250cm9sbGVyc1wiO1xyXG5pbXBvcnQgYXhpb3MgZnJvbSBcImF4aW9zXCI7XHJcbmltcG9ydCB7UmVzcG9uc2V9IGZyb20gXCJleHByZXNzXCI7XHJcblxyXG5pbXBvcnQge0lSZXF1ZXN0fSBmcm9tIFwiLi4vY29tbW9uLXR5cGVzXCI7XHJcbmltcG9ydCB7VHJhbnNsYXRvcn0gZnJvbSBcIi4uL3NlcnZpY2VzL3RyYW5zbGF0b3JcIjtcclxuaW1wb3J0IHtDb25maWd1cmF0aW9ufSBmcm9tIFwiLi4vc2VydmljZXMvY29uZmlndXJhdGlvblwiO1xyXG5cclxuQGluamVjdGFibGUoKVxyXG5ATWlkZGxld2FyZSh7IHR5cGU6IFwiYWZ0ZXJcIiB9KVxyXG5leHBvcnQgY2xhc3MgRXJyb3JIYW5kbGVyTWlkZGxld2FyZSBpbXBsZW1lbnRzIEV4cHJlc3NFcnJvck1pZGRsZXdhcmVJbnRlcmZhY2Uge1xyXG5cclxuICAgIGdldCBpc0RldigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb25maWd1cmF0aW9uLnJlc29sdmUoXCJub2RlRW52XCIpID09PSBcImRldmVsb3BtZW50XCI7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3RydWN0b3IocmVhZG9ubHkgY29uZmlndXJhdGlvbjogQ29uZmlndXJhdGlvbiwgcmVhZG9ubHkgdHJhbnNsYXRvcjogVHJhbnNsYXRvcikge1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBlcnJvcihlcnJvcjogYW55LCByZXE6IElSZXF1ZXN0LCByZXM6IFJlc3BvbnNlLCBuZXh0OiAoZXJyPzogYW55KSA9PiBhbnkpIHtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmdldFJlc3VsdChlcnJvciwgcmVxLCByZXMpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzRGV2KSB7XHJcbiAgICAgICAgICAgIGlmIChheGlvcy5pc0F4aW9zRXJyb3IoZXJyb3IpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgQXhpb3MgZXJyb3I6YCwgcmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yLmNvbmZpZy5kYXRhKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yLmNvbnN0cnVjdG9yPy5uYW1lIHx8IFwiRXJyb3JcIiwgcmVzdWx0LCByZXMuc3RhdHVzQ29kZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzLmpzb24ocmVzdWx0KTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgYXN5bmMgZ2V0UmVzdWx0KGVycm9yLCByZXE6IElSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSB7XHJcblxyXG4gICAgICAgIGNvbnN0IHJlc3VsdDogYW55ID0ge307XHJcblxyXG4gICAgICAgIGlmIChheGlvcy5pc0F4aW9zRXJyb3IoZXJyb3IpKSB7XHJcbiAgICAgICAgICAgIHJlcy5zdGF0dXMoZXJyb3IucmVzcG9uc2Uuc3RhdHVzKTtcclxuICAgICAgICAgICAgcmVzdWx0Lm1lc3NhZ2UgPSBlcnJvci5tZXNzYWdlO1xyXG4gICAgICAgICAgICByZXN1bHQuZXJyb3IgPSBlcnJvci5yZXNwb25zZS5kYXRhO1xyXG4gICAgICAgICAgICByZXN1bHQuaGVhZGVycyA9IGVycm9yLnJlc3BvbnNlLmhlYWRlcnM7XHJcbiAgICAgICAgICAgIHJlc3VsdC51cmwgPSBgJHtlcnJvci5jb25maWcuYmFzZVVSTH0ke2Vycm9yLmNvbmZpZy51cmx9YDtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEJhZFJlcXVlc3RFcnJvcikge1xyXG4gICAgICAgICAgICByZXMuc3RhdHVzKDQwMCk7XHJcbiAgICAgICAgICAgIGlmIChlcnJvci5jb25zdHJ1Y3Rvci5uYW1lID09PSBcIlBhcmFtUmVxdWlyZWRFcnJvclwiKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQubWVzc2FnZSA9IGF3YWl0IHRoaXMudHJhbnNsYXRvci5nZXRUcmFuc2xhdGlvbihyZXEubGFuZ3VhZ2UsIFwibWVzc2FnZS5wYXJhbWV0ZXItcmVxdWlyZWQuZXJyb3JcIik7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQucGFyYW0gPSBlcnJvci5tZXNzYWdlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0Lm1lc3NhZ2UgPSBlcnJvci5tZXNzYWdlIHx8IGF3YWl0IHRoaXMudHJhbnNsYXRvci5nZXRUcmFuc2xhdGlvbihyZXEubGFuZ3VhZ2UsIFwibWVzc2FnZS5mb3JtLXZhbGlkYXRpb24uZXJyb3JcIik7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQuZXJyb3JzID0gZXJyb3JbXCJlcnJvcnNcIl07XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3Iuc3RhY2sgJiYgdGhpcy5pc0Rldikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFjayA9IGVycm9yLnN0YWNrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXMuc3RhdHVzKGVycm9yLmh0dHBDb2RlIHx8IDUwMCk7XHJcblxyXG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XHJcbiAgICAgICAgICAgIGlmIChlcnJvci5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQubmFtZSA9IGVycm9yLm5hbWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGVycm9yLm1lc3NhZ2UpIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5tZXNzYWdlID0gZXJyb3IubWVzc2FnZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZXJyb3Iuc3RhY2sgJiYgdGhpcy5pc0Rldikge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YWNrID0gZXJyb3Iuc3RhY2s7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBlcnJvciA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICByZXN1bHQubWVzc2FnZSA9IGVycm9yO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { __decorate, __metadata } from "tslib";
|
|
2
|
+
import { injectable } from "tsyringe";
|
|
3
|
+
import { Middleware } from "routing-controllers";
|
|
4
|
+
import { Configuration } from "../services/configuration";
|
|
5
|
+
let LanguageMiddleware = class LanguageMiddleware {
|
|
6
|
+
config;
|
|
7
|
+
constructor(config) {
|
|
8
|
+
this.config = config;
|
|
9
|
+
}
|
|
10
|
+
use(request, response, next) {
|
|
11
|
+
request.language = request.query.language || this.config.resolve("defaultLanguage");
|
|
12
|
+
next(null);
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
LanguageMiddleware = __decorate([
|
|
16
|
+
injectable(),
|
|
17
|
+
Middleware({ type: "before" }),
|
|
18
|
+
__metadata("design:paramtypes", [Configuration])
|
|
19
|
+
], LanguageMiddleware);
|
|
20
|
+
export { LanguageMiddleware };
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFuZ3VhZ2UubWlkZGxld2FyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yZXN0LW1pZGRsZXdhcmVzL2xhbmd1YWdlLm1pZGRsZXdhcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDcEMsT0FBTyxFQUE2QixVQUFVLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUUzRSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFJakQsSUFBTSxrQkFBa0IsR0FBeEIsTUFBTSxrQkFBa0I7SUFFTjtJQUFyQixZQUFxQixNQUFxQjtRQUFyQixXQUFNLEdBQU4sTUFBTSxDQUFlO0lBRTFDLENBQUM7SUFFRCxHQUFHLENBQUMsT0FBaUIsRUFBRSxRQUFhLEVBQUUsSUFBd0I7UUFDMUQsT0FBTyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQWtCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUM5RixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDZixDQUFDO0NBRUosQ0FBQTtBQVhZLGtCQUFrQjtJQUY5QixVQUFVLEVBQUU7SUFDWixVQUFVLENBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUM7cUNBR0UsYUFBYTtHQUZqQyxrQkFBa0IsQ0FXOUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2luamVjdGFibGV9IGZyb20gXCJ0c3lyaW5nZVwiO1xyXG5pbXBvcnQge0V4cHJlc3NNaWRkbGV3YXJlSW50ZXJmYWNlLCBNaWRkbGV3YXJlfSBmcm9tIFwicm91dGluZy1jb250cm9sbGVyc1wiO1xyXG5pbXBvcnQge0lSZXF1ZXN0fSBmcm9tIFwiLi4vY29tbW9uLXR5cGVzXCI7XHJcbmltcG9ydCB7Q29uZmlndXJhdGlvbn0gZnJvbSBcIi4uL3NlcnZpY2VzL2NvbmZpZ3VyYXRpb25cIjtcclxuXHJcbkBpbmplY3RhYmxlKClcclxuQE1pZGRsZXdhcmUoeyB0eXBlOiBcImJlZm9yZVwiIH0pXHJcbmV4cG9ydCBjbGFzcyBMYW5ndWFnZU1pZGRsZXdhcmUgaW1wbGVtZW50cyBFeHByZXNzTWlkZGxld2FyZUludGVyZmFjZSB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocmVhZG9ubHkgY29uZmlnOiBDb25maWd1cmF0aW9uKSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVzZShyZXF1ZXN0OiBJUmVxdWVzdCwgcmVzcG9uc2U6IGFueSwgbmV4dDogKGVycj86IGFueSkgPT4gYW55KTogdm9pZCB7XHJcbiAgICAgICAgcmVxdWVzdC5sYW5ndWFnZSA9IHJlcXVlc3QucXVlcnkubGFuZ3VhZ2UgYXMgc3RyaW5nIHx8IHRoaXMuY29uZmlnLnJlc29sdmUoXCJkZWZhdWx0TGFuZ3VhZ2VcIik7XHJcbiAgICAgICAgbmV4dChudWxsKTtcclxuICAgIH1cclxuXHJcbn1cclxuIl19
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { __decorate, __metadata } from "tslib";
|
|
2
|
+
import { injectable } from "tsyringe";
|
|
3
|
+
import { Middleware } from "routing-controllers";
|
|
4
|
+
import moment from "moment";
|
|
5
|
+
import { Logger } from "../services/logger";
|
|
6
|
+
let RequestEndedMiddleware = class RequestEndedMiddleware {
|
|
7
|
+
logger;
|
|
8
|
+
constructor(logger) {
|
|
9
|
+
this.logger = logger;
|
|
10
|
+
}
|
|
11
|
+
use(request, response, next) {
|
|
12
|
+
request.ended = moment();
|
|
13
|
+
const diff = request.ended.diff(request.started);
|
|
14
|
+
const duration = moment.duration(diff);
|
|
15
|
+
this.logger.log("request-time", `Request '${request.id}' ended at: ${request.ended.format("YYYY-MM-DD HH:mm:ss")} [${request.method}] ${request.url}`);
|
|
16
|
+
this.logger.log("request-time", `Request '${request.id}' lasted: ${duration.asMilliseconds()}ms`);
|
|
17
|
+
next(null);
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
RequestEndedMiddleware = __decorate([
|
|
21
|
+
injectable(),
|
|
22
|
+
Middleware({ type: "after" }),
|
|
23
|
+
__metadata("design:paramtypes", [Logger])
|
|
24
|
+
], RequestEndedMiddleware);
|
|
25
|
+
export { RequestEndedMiddleware };
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC1lbmRlZC5taWRkbGV3YXJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Jlc3QtbWlkZGxld2FyZXMvcmVxdWVzdC1lbmRlZC5taWRkbGV3YXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ3BDLE9BQU8sRUFBNkIsVUFBVSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDM0UsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBRTVCLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUluQyxJQUFNLHNCQUFzQixHQUE1QixNQUFNLHNCQUFzQjtJQUVWO0lBQXJCLFlBQXFCLE1BQWM7UUFBZCxXQUFNLEdBQU4sTUFBTSxDQUFRO0lBQ25DLENBQUM7SUFFRCxHQUFHLENBQUMsT0FBaUIsRUFBRSxRQUFhLEVBQUUsSUFBd0I7UUFDMUQsT0FBTyxDQUFDLEtBQUssR0FBRyxNQUFNLEVBQUUsQ0FBQztRQUN6QixNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDakQsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FDWCxjQUFjLEVBQ2QsWUFBWSxPQUFPLENBQUMsRUFBRSxlQUFlLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLEtBQUssT0FBTyxDQUFDLE1BQU0sS0FBSyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQ3hILENBQUM7UUFDRixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FDWCxjQUFjLEVBQ2QsWUFBWSxPQUFPLENBQUMsRUFBRSxhQUFhLFFBQVEsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUNuRSxDQUFDO1FBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2YsQ0FBQztDQUVKLENBQUE7QUFwQlksc0JBQXNCO0lBRmxDLFVBQVUsRUFBRTtJQUNaLFVBQVUsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQztxQ0FHRyxNQUFNO0dBRjFCLHNCQUFzQixDQW9CbEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2luamVjdGFibGV9IGZyb20gXCJ0c3lyaW5nZVwiO1xyXG5pbXBvcnQge0V4cHJlc3NNaWRkbGV3YXJlSW50ZXJmYWNlLCBNaWRkbGV3YXJlfSBmcm9tIFwicm91dGluZy1jb250cm9sbGVyc1wiO1xyXG5pbXBvcnQgbW9tZW50IGZyb20gXCJtb21lbnRcIjtcclxuaW1wb3J0IHtJUmVxdWVzdH0gZnJvbSBcIi4uL2NvbW1vbi10eXBlc1wiO1xyXG5pbXBvcnQge0xvZ2dlcn0gZnJvbSBcIi4uL3NlcnZpY2VzL2xvZ2dlclwiO1xyXG5cclxuQGluamVjdGFibGUoKVxyXG5ATWlkZGxld2FyZSh7IHR5cGU6IFwiYWZ0ZXJcIiB9KVxyXG5leHBvcnQgY2xhc3MgUmVxdWVzdEVuZGVkTWlkZGxld2FyZSBpbXBsZW1lbnRzIEV4cHJlc3NNaWRkbGV3YXJlSW50ZXJmYWNlIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihyZWFkb25seSBsb2dnZXI6IExvZ2dlcikge1xyXG4gICAgfVxyXG5cclxuICAgIHVzZShyZXF1ZXN0OiBJUmVxdWVzdCwgcmVzcG9uc2U6IGFueSwgbmV4dDogKGVycj86IGFueSkgPT4gYW55KTogdm9pZCB7XHJcbiAgICAgICAgcmVxdWVzdC5lbmRlZCA9IG1vbWVudCgpO1xyXG4gICAgICAgIGNvbnN0IGRpZmYgPSByZXF1ZXN0LmVuZGVkLmRpZmYocmVxdWVzdC5zdGFydGVkKTtcclxuICAgICAgICBjb25zdCBkdXJhdGlvbiA9IG1vbWVudC5kdXJhdGlvbihkaWZmKTtcclxuICAgICAgICB0aGlzLmxvZ2dlci5sb2coXHJcbiAgICAgICAgICAgIFwicmVxdWVzdC10aW1lXCIsXHJcbiAgICAgICAgICAgIGBSZXF1ZXN0ICcke3JlcXVlc3QuaWR9JyBlbmRlZCBhdDogJHtyZXF1ZXN0LmVuZGVkLmZvcm1hdChcIllZWVktTU0tREQgSEg6bW06c3NcIil9IFske3JlcXVlc3QubWV0aG9kfV0gJHtyZXF1ZXN0LnVybH1gXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmxvZ2dlci5sb2coXHJcbiAgICAgICAgICAgIFwicmVxdWVzdC10aW1lXCIsXHJcbiAgICAgICAgICAgIGBSZXF1ZXN0ICcke3JlcXVlc3QuaWR9JyBsYXN0ZWQ6ICR7ZHVyYXRpb24uYXNNaWxsaXNlY29uZHMoKX1tc2BcclxuICAgICAgICApO1xyXG4gICAgICAgIG5leHQobnVsbCk7XHJcbiAgICB9XHJcblxyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { __decorate, __metadata } from "tslib";
|
|
2
|
+
import { injectable } from "tsyringe";
|
|
3
|
+
import { Middleware } from "routing-controllers";
|
|
4
|
+
import { ObjectId } from "bson";
|
|
5
|
+
import moment from "moment";
|
|
6
|
+
import { Logger } from "../services/logger";
|
|
7
|
+
let RequestStartedMiddleware = class RequestStartedMiddleware {
|
|
8
|
+
logger;
|
|
9
|
+
constructor(logger) {
|
|
10
|
+
this.logger = logger;
|
|
11
|
+
}
|
|
12
|
+
use(request, response, next) {
|
|
13
|
+
request.id = new ObjectId().toHexString();
|
|
14
|
+
request.started = moment();
|
|
15
|
+
this.logger.log("request-time", `Request '${request.id}' started at: ${request.started.format("YYYY-MM-DD HH:mm:ss")} [${request.method}] ${request.url}`);
|
|
16
|
+
next(null);
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
RequestStartedMiddleware = __decorate([
|
|
20
|
+
injectable(),
|
|
21
|
+
Middleware({ type: "before" }),
|
|
22
|
+
__metadata("design:paramtypes", [Logger])
|
|
23
|
+
], RequestStartedMiddleware);
|
|
24
|
+
export { RequestStartedMiddleware };
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC1zdGFydGVkLm1pZGRsZXdhcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcmVzdC1taWRkbGV3YXJlcy9yZXF1ZXN0LXN0YXJ0ZWQubWlkZGxld2FyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUNwQyxPQUFPLEVBQTZCLFVBQVUsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQzNFLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDOUIsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBRTVCLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUluQyxJQUFNLHdCQUF3QixHQUE5QixNQUFNLHdCQUF3QjtJQUVaO0lBQXJCLFlBQXFCLE1BQWM7UUFBZCxXQUFNLEdBQU4sTUFBTSxDQUFRO0lBQ25DLENBQUM7SUFFRCxHQUFHLENBQUMsT0FBaUIsRUFBRSxRQUFhLEVBQUUsSUFBd0I7UUFDMUQsT0FBTyxDQUFDLEVBQUUsR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzFDLE9BQU8sQ0FBQyxPQUFPLEdBQUcsTUFBTSxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQ1gsY0FBYyxFQUNkLFlBQVksT0FBTyxDQUFDLEVBQUUsaUJBQWlCLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLEtBQUssT0FBTyxDQUFDLE1BQU0sS0FBSyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQzVILENBQUM7UUFDRixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDZixDQUFDO0NBRUosQ0FBQTtBQWZZLHdCQUF3QjtJQUZwQyxVQUFVLEVBQUU7SUFDWixVQUFVLENBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUM7cUNBR0UsTUFBTTtHQUYxQix3QkFBd0IsQ0FlcEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2luamVjdGFibGV9IGZyb20gXCJ0c3lyaW5nZVwiO1xyXG5pbXBvcnQge0V4cHJlc3NNaWRkbGV3YXJlSW50ZXJmYWNlLCBNaWRkbGV3YXJlfSBmcm9tIFwicm91dGluZy1jb250cm9sbGVyc1wiO1xyXG5pbXBvcnQge09iamVjdElkfSBmcm9tIFwiYnNvblwiO1xyXG5pbXBvcnQgbW9tZW50IGZyb20gXCJtb21lbnRcIjtcclxuaW1wb3J0IHtJUmVxdWVzdH0gZnJvbSBcIi4uL2NvbW1vbi10eXBlc1wiO1xyXG5pbXBvcnQge0xvZ2dlcn0gZnJvbSBcIi4uL3NlcnZpY2VzL2xvZ2dlclwiO1xyXG5cclxuQGluamVjdGFibGUoKVxyXG5ATWlkZGxld2FyZSh7IHR5cGU6IFwiYmVmb3JlXCIgfSlcclxuZXhwb3J0IGNsYXNzIFJlcXVlc3RTdGFydGVkTWlkZGxld2FyZSBpbXBsZW1lbnRzIEV4cHJlc3NNaWRkbGV3YXJlSW50ZXJmYWNlIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihyZWFkb25seSBsb2dnZXI6IExvZ2dlcikge1xyXG4gICAgfVxyXG5cclxuICAgIHVzZShyZXF1ZXN0OiBJUmVxdWVzdCwgcmVzcG9uc2U6IGFueSwgbmV4dDogKGVycj86IGFueSkgPT4gYW55KTogdm9pZCB7XHJcbiAgICAgICAgcmVxdWVzdC5pZCA9IG5ldyBPYmplY3RJZCgpLnRvSGV4U3RyaW5nKCk7XHJcbiAgICAgICAgcmVxdWVzdC5zdGFydGVkID0gbW9tZW50KCk7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIubG9nKFxyXG4gICAgICAgICAgICBcInJlcXVlc3QtdGltZVwiLFxyXG4gICAgICAgICAgICBgUmVxdWVzdCAnJHtyZXF1ZXN0LmlkfScgc3RhcnRlZCBhdDogJHtyZXF1ZXN0LnN0YXJ0ZWQuZm9ybWF0KFwiWVlZWS1NTS1ERCBISDptbTpzc1wiKX0gWyR7cmVxdWVzdC5tZXRob2R9XSAke3JlcXVlc3QudXJsfWBcclxuICAgICAgICApO1xyXG4gICAgICAgIG5leHQobnVsbCk7XHJcbiAgICB9XHJcblxyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
var AssetProcessor_1;
|
|
2
|
+
import { __decorate } from "tslib";
|
|
3
|
+
import { injectable, Lifecycle, scoped } from "tsyringe";
|
|
4
|
+
import fontKit_ from "fontkit";
|
|
5
|
+
import sharp_ from "sharp";
|
|
6
|
+
const sharp = sharp_;
|
|
7
|
+
const fontKit = fontKit_;
|
|
8
|
+
const fontTypes = [
|
|
9
|
+
"application/font-woff", "application/font-woff2", "application/x-font-opentype", "application/x-font-truetype", "application/x-font-datafork",
|
|
10
|
+
"font/woff", "font/woff2", "font/otf", "font/ttf", "font/datafork"
|
|
11
|
+
];
|
|
12
|
+
const imageTypes = ["image/jpeg", "image/jpg", "image/png", "image/svg+xml"];
|
|
13
|
+
const fontProps = [
|
|
14
|
+
"postscriptName", "fullName", "familyName", "subfamilyName",
|
|
15
|
+
"copyright", "version", "unitsPerEm", "ascent", "descent", "lineGap",
|
|
16
|
+
"underlinePosition", "underlineThickness", "italicAngle", "capHeight",
|
|
17
|
+
"xHeight", "numGlyphs", "characterSet", "availableFeatures"
|
|
18
|
+
];
|
|
19
|
+
let AssetProcessor = AssetProcessor_1 = class AssetProcessor {
|
|
20
|
+
static extractFontFormat(font) {
|
|
21
|
+
const name = font.constructor.name;
|
|
22
|
+
const tag = font["directory"].tag;
|
|
23
|
+
switch (name) {
|
|
24
|
+
case "TTFFont":
|
|
25
|
+
return tag === "OTTO" ? "opentype" : "truetype";
|
|
26
|
+
case "WOFF2Font":
|
|
27
|
+
return "woff2";
|
|
28
|
+
case "WOFFFont":
|
|
29
|
+
return "woff";
|
|
30
|
+
case "DFont":
|
|
31
|
+
return "datafork";
|
|
32
|
+
}
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
static isImage(contentType) {
|
|
36
|
+
return imageTypes.indexOf(contentType) >= 0;
|
|
37
|
+
}
|
|
38
|
+
static async copyImageMeta(buffer, metadata, fileType) {
|
|
39
|
+
if (fileType.mime === "image/svg+xml") {
|
|
40
|
+
const match = /<svg([^<>]+)>/gi.exec(buffer.toString("utf8"));
|
|
41
|
+
if (match && match.length > 1) {
|
|
42
|
+
const attrs = match[1].match(/([a-z]+)="([^"]+)"/gi);
|
|
43
|
+
attrs.forEach(attr => {
|
|
44
|
+
if (attr.length < 5)
|
|
45
|
+
return;
|
|
46
|
+
const [name, value] = attr.split("=");
|
|
47
|
+
const val = value.replace(/"/gi, "");
|
|
48
|
+
metadata[name] = isNaN(val) ? val : Number(val);
|
|
49
|
+
});
|
|
50
|
+
if (metadata.viewBox && (isNaN(metadata.width) || isNaN(metadata.height))) {
|
|
51
|
+
const parts = metadata.viewBox.split(" ");
|
|
52
|
+
metadata.width = Number(parts[0]) + Number(parts[2]);
|
|
53
|
+
metadata.height = Number(parts[1]) + Number(parts[3]);
|
|
54
|
+
}
|
|
55
|
+
if (!isNaN(metadata.width) && !isNaN(metadata.height)) {
|
|
56
|
+
metadata.svgSize = { x: metadata.width, y: metadata.height };
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return buffer;
|
|
60
|
+
}
|
|
61
|
+
const output = await sharp(buffer).rotate().toBuffer({ resolveWithObject: true });
|
|
62
|
+
Object.assign(metadata, output.info);
|
|
63
|
+
return output.data;
|
|
64
|
+
}
|
|
65
|
+
static isFont(contentType) {
|
|
66
|
+
return fontTypes.indexOf(contentType) >= 0;
|
|
67
|
+
}
|
|
68
|
+
static copyFontMeta(buffer, metadata) {
|
|
69
|
+
const font = fontKit.create(buffer);
|
|
70
|
+
metadata.format = AssetProcessor_1.extractFontFormat(font);
|
|
71
|
+
fontProps.forEach(prop => {
|
|
72
|
+
metadata[prop] = font[prop];
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
async process(buffer, metadata, fileType) {
|
|
76
|
+
if (AssetProcessor_1.isImage(fileType.mime)) {
|
|
77
|
+
buffer = await AssetProcessor_1.copyImageMeta(buffer, metadata, fileType);
|
|
78
|
+
}
|
|
79
|
+
if (AssetProcessor_1.isFont(fileType.mime)) {
|
|
80
|
+
AssetProcessor_1.copyFontMeta(buffer, metadata);
|
|
81
|
+
}
|
|
82
|
+
return buffer;
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
AssetProcessor = AssetProcessor_1 = __decorate([
|
|
86
|
+
injectable(),
|
|
87
|
+
scoped(Lifecycle.ContainerScoped)
|
|
88
|
+
], AssetProcessor);
|
|
89
|
+
export { AssetProcessor };
|
|
90
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQtcHJvY2Vzc29yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL2Fzc2V0LXByb2Nlc3Nvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUN2RCxPQUFPLFFBQWdCLE1BQU0sU0FBUyxDQUFDO0FBQ3ZDLE9BQU8sTUFBTSxNQUFNLE9BQU8sQ0FBQztBQUczQixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUM7QUFDckIsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDO0FBRXpCLE1BQU0sU0FBUyxHQUFHO0lBQ2QsdUJBQXVCLEVBQUUsd0JBQXdCLEVBQUUsNkJBQTZCLEVBQUUsNkJBQTZCLEVBQUUsNkJBQTZCO0lBQzlJLFdBQVcsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxlQUFlO0NBQ3JFLENBQUM7QUFFRixNQUFNLFVBQVUsR0FBRyxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0FBRTdFLE1BQU0sU0FBUyxHQUFHO0lBQ2QsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxlQUFlO0lBQzNELFdBQVcsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUztJQUNwRSxtQkFBbUIsRUFBRSxvQkFBb0IsRUFBRSxhQUFhLEVBQUUsV0FBVztJQUNyRSxTQUFTLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxtQkFBbUI7Q0FDOUQsQ0FBQztBQUlLLElBQU0sY0FBYyxzQkFBcEIsTUFBTSxjQUFjO0lBRXZCLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxJQUFVO1FBQy9CLE1BQU0sSUFBSSxHQUFXLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO1FBQzNDLE1BQU0sR0FBRyxHQUFZLElBQUks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SixDQUFBO0FBdEVZLGNBQWM7SUFGMUIsVUFBVSxFQUFFO0lBQ1osTUFBTSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUM7R0FDckIsY0FBYyxDQXNFMUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2luamVjdGFibGUsIExpZmVjeWNsZSwgc2NvcGVkfSBmcm9tIFwidHN5cmluZ2VcIjtcclxuaW1wb3J0IGZvbnRLaXRfLCB7Rm9udH0gZnJvbSBcImZvbnRraXRcIjtcclxuaW1wb3J0IHNoYXJwXyBmcm9tIFwic2hhcnBcIjtcclxuaW1wb3J0IHtGb250Rm9ybWF0LCBJQXNzZXRNZXRhLCBJRmlsZVR5cGV9IGZyb20gXCIuLi9jb21tb24tdHlwZXNcIjtcclxuXHJcbmNvbnN0IHNoYXJwID0gc2hhcnBfO1xyXG5jb25zdCBmb250S2l0ID0gZm9udEtpdF87XHJcblxyXG5jb25zdCBmb250VHlwZXMgPSBbXHJcbiAgICBcImFwcGxpY2F0aW9uL2ZvbnQtd29mZlwiLCBcImFwcGxpY2F0aW9uL2ZvbnQtd29mZjJcIiwgXCJhcHBsaWNhdGlvbi94LWZvbnQtb3BlbnR5cGVcIiwgXCJhcHBsaWNhdGlvbi94LWZvbnQtdHJ1ZXR5cGVcIiwgXCJhcHBsaWNhdGlvbi94LWZvbnQtZGF0YWZvcmtcIixcclxuICAgIFwiZm9udC93b2ZmXCIsIFwiZm9udC93b2ZmMlwiLCBcImZvbnQvb3RmXCIsIFwiZm9udC90dGZcIiwgXCJmb250L2RhdGFmb3JrXCJcclxuXTtcclxuXHJcbmNvbnN0IGltYWdlVHlwZXMgPSBbXCJpbWFnZS9qcGVnXCIsIFwiaW1hZ2UvanBnXCIsIFwiaW1hZ2UvcG5nXCIsIFwiaW1hZ2Uvc3ZnK3htbFwiXTtcclxuXHJcbmNvbnN0IGZvbnRQcm9wcyA9IFtcclxuICAgIFwicG9zdHNjcmlwdE5hbWVcIiwgXCJmdWxsTmFtZVwiLCBcImZhbWlseU5hbWVcIiwgXCJzdWJmYW1pbHlOYW1lXCIsXHJcbiAgICBcImNvcHlyaWdodFwiLCBcInZlcnNpb25cIiwgXCJ1bml0c1BlckVtXCIsIFwiYXNjZW50XCIsIFwiZGVzY2VudFwiLCBcImxpbmVHYXBcIixcclxuICAgIFwidW5kZXJsaW5lUG9zaXRpb25cIiwgXCJ1bmRlcmxpbmVUaGlja25lc3NcIiwgXCJpdGFsaWNBbmdsZVwiLCBcImNhcEhlaWdodFwiLFxyXG4gICAgXCJ4SGVpZ2h0XCIsIFwibnVtR2x5cGhzXCIsIFwiY2hhcmFjdGVyU2V0XCIsIFwiYXZhaWxhYmxlRmVhdHVyZXNcIlxyXG5dO1xyXG5cclxuQGluamVjdGFibGUoKVxyXG5Ac2NvcGVkKExpZmVjeWNsZS5Db250YWluZXJTY29wZWQpXHJcbmV4cG9ydCBjbGFzcyBBc3NldFByb2Nlc3NvciB7XHJcblxyXG4gICAgc3RhdGljIGV4dHJhY3RGb250Rm9ybWF0KGZvbnQ6IEZvbnQpOiBGb250Rm9ybWF0IHtcclxuICAgICAgICBjb25zdCBuYW1lOiBzdHJpbmcgPSBmb250LmNvbnN0cnVjdG9yLm5hbWU7XHJcbiAgICAgICAgY29uc3QgdGFnOiBzdHJpbmcgID0gZm9udFtcImRpcmVjdG9yeVwiXS50YWc7XHJcbiAgICAgICAgc3dpdGNoIChuYW1lKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJUVEZGb250XCI6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGFnID09PSBcIk9UVE9cIiA/IFwib3BlbnR5cGVcIiA6IFwidHJ1ZXR5cGVcIjtcclxuICAgICAgICAgICAgY2FzZSBcIldPRkYyRm9udFwiOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwid29mZjJcIjtcclxuICAgICAgICAgICAgY2FzZSBcIldPRkZGb250XCI6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJ3b2ZmXCI7XHJcbiAgICAgICAgICAgIGNhc2UgXCJERm9udFwiOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiZGF0YWZvcmtcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGlzSW1hZ2UoY29udGVudFR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBpbWFnZVR5cGVzLmluZGV4T2YoY29udGVudFR5cGUpID49IDA7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGFzeW5jIGNvcHlJbWFnZU1ldGEoYnVmZmVyOiBCdWZmZXIsIG1ldGFkYXRhOiBJQXNzZXRNZXRhLCBmaWxlVHlwZTogSUZpbGVUeXBlKTogUHJvbWlzZTxCdWZmZXI+IHtcclxuICAgICAgICBpZiAoZmlsZVR5cGUubWltZSA9PT0gXCJpbWFnZS9zdmcreG1sXCIpIHtcclxuICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSAvPHN2ZyhbXjw+XSspPi9naS5leGVjKGJ1ZmZlci50b1N0cmluZyhcInV0ZjhcIikpO1xyXG4gICAgICAgICAgICBpZiAobWF0Y2ggJiYgbWF0Y2gubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYXR0cnMgPSBtYXRjaFsxXS5tYXRjaCgvKFthLXpdKyk9XCIoW15cIl0rKVwiL2dpKTtcclxuICAgICAgICAgICAgICAgIGF0dHJzLmZvckVhY2goYXR0ciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGF0dHIubGVuZ3RoIDwgNSkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IFtuYW1lLCB2YWx1ZV0gPSBhdHRyLnNwbGl0KFwiPVwiKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWwgPSB2YWx1ZS5yZXBsYWNlKC9cIi9naSwgXCJcIikgYXMgYW55O1xyXG4gICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhW25hbWVdID0gaXNOYU4odmFsKSA/IHZhbCA6IE51bWJlcih2YWwpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBpZiAobWV0YWRhdGEudmlld0JveCAmJiAoaXNOYU4obWV0YWRhdGEud2lkdGgpIHx8IGlzTmFOKG1ldGFkYXRhLmhlaWdodCkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFydHMgPSAobWV0YWRhdGEudmlld0JveCBhcyBzdHJpbmcpLnNwbGl0KFwiIFwiKTtcclxuICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YS53aWR0aCA9IE51bWJlcihwYXJ0c1swXSkgKyBOdW1iZXIocGFydHNbMl0pO1xyXG4gICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLmhlaWdodCA9IE51bWJlcihwYXJ0c1sxXSkgKyBOdW1iZXIocGFydHNbM10pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKCFpc05hTihtZXRhZGF0YS53aWR0aCkgJiYgIWlzTmFOKG1ldGFkYXRhLmhlaWdodCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YS5zdmdTaXplID0ge3g6IG1ldGFkYXRhLndpZHRoLCB5OiBtZXRhZGF0YS5oZWlnaHR9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBidWZmZXI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IHNoYXJwKGJ1ZmZlcikucm90YXRlKCkudG9CdWZmZXIoe3Jlc29sdmVXaXRoT2JqZWN0OiB0cnVlfSk7XHJcbiAgICAgICAgT2JqZWN0LmFzc2lnbihtZXRhZGF0YSwgb3V0cHV0LmluZm8pO1xyXG4gICAgICAgIHJldHVybiBvdXRwdXQuZGF0YTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgaXNGb250KGNvbnRlbnRUeXBlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gZm9udFR5cGVzLmluZGV4T2YoY29udGVudFR5cGUpID49IDA7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGNvcHlGb250TWV0YShidWZmZXI6IEJ1ZmZlciwgbWV0YWRhdGE6IElBc3NldE1ldGEpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBmb250ID0gZm9udEtpdC5jcmVhdGUoYnVmZmVyKSBhcyBGb250O1xyXG4gICAgICAgIG1ldGFkYXRhLmZvcm1hdCA9IEFzc2V0UHJvY2Vzc29yLmV4dHJhY3RGb250Rm9ybWF0KGZvbnQpO1xyXG4gICAgICAgIGZvbnRQcm9wcy5mb3JFYWNoKHByb3AgPT4ge1xyXG4gICAgICAgICAgICBtZXRhZGF0YVtwcm9wXSA9IGZvbnRbcHJvcF07XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcHJvY2VzcyhidWZmZXI6IEJ1ZmZlciwgbWV0YWRhdGE6IElBc3NldE1ldGEsIGZpbGVUeXBlOiBJRmlsZVR5cGUpOiBQcm9taXNlPEJ1ZmZlcj4ge1xyXG4gICAgICAgIGlmIChBc3NldFByb2Nlc3Nvci5pc0ltYWdlKGZpbGVUeXBlLm1pbWUpKSB7XHJcbiAgICAgICAgICAgIGJ1ZmZlciA9IGF3YWl0IEFzc2V0UHJvY2Vzc29yLmNvcHlJbWFnZU1ldGEoYnVmZmVyLCBtZXRhZGF0YSwgZmlsZVR5cGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoQXNzZXRQcm9jZXNzb3IuaXNGb250KGZpbGVUeXBlLm1pbWUpKSB7XHJcbiAgICAgICAgICAgIEFzc2V0UHJvY2Vzc29yLmNvcHlGb250TWV0YShidWZmZXIsIG1ldGFkYXRhKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGJ1ZmZlcjtcclxuICAgIH1cclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { __decorate, __metadata } from "tslib";
|
|
2
|
+
import { injectable, Lifecycle, scoped } from "tsyringe";
|
|
3
|
+
import { Assets } from "./assets";
|
|
4
|
+
import { LazyAssets } from "./lazy-assets";
|
|
5
|
+
let AssetResolver = class AssetResolver {
|
|
6
|
+
assets;
|
|
7
|
+
lazyAssets;
|
|
8
|
+
constructor(assets, lazyAssets) {
|
|
9
|
+
this.assets = assets;
|
|
10
|
+
this.lazyAssets = lazyAssets;
|
|
11
|
+
}
|
|
12
|
+
async resolve(id, lazy = false) {
|
|
13
|
+
let asset = null;
|
|
14
|
+
if (lazy) {
|
|
15
|
+
const lazyAsset = await this.lazyAssets.read(id);
|
|
16
|
+
if (!lazyAsset)
|
|
17
|
+
return null;
|
|
18
|
+
return lazyAsset.loadAsset();
|
|
19
|
+
}
|
|
20
|
+
asset = await this.assets.read(id);
|
|
21
|
+
if (!asset) {
|
|
22
|
+
const lazyAsset = await this.lazyAssets.read(id);
|
|
23
|
+
if (!lazyAsset)
|
|
24
|
+
return null;
|
|
25
|
+
return lazyAsset.loadAsset();
|
|
26
|
+
}
|
|
27
|
+
return asset;
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
AssetResolver = __decorate([
|
|
31
|
+
injectable(),
|
|
32
|
+
scoped(Lifecycle.ContainerScoped),
|
|
33
|
+
__metadata("design:paramtypes", [Assets, LazyAssets])
|
|
34
|
+
], AssetResolver);
|
|
35
|
+
export { AssetResolver };
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQtcmVzb2x2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvYXNzZXQtcmVzb2x2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUd2RCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFJbEMsSUFBTSxhQUFhLEdBQW5CLE1BQU0sYUFBYTtJQUVEO0lBQXlCO0lBQTlDLFlBQXFCLE1BQWMsRUFBVyxVQUFzQjtRQUEvQyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQVcsZUFBVSxHQUFWLFVBQVUsQ0FBWTtJQUVwRSxDQUFDO0lBRUQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFxQixFQUFFLE9BQWdCLEtBQUs7UUFDdEQsSUFBSSxLQUFLLEdBQVcsSUFBSSxDQUFDO1FBQ3pCLElBQUksSUFBSSxFQUFFLENBQUM7WUFDUCxNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2pELElBQUksQ0FBQyxTQUFTO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1lBQzVCLE9BQU8sU0FBUyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2pDLENBQUM7UUFDRCxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDVCxNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2pELElBQUksQ0FBQyxTQUFTO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1lBQzVCLE9BQU8sU0FBUyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2pDLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0NBQ0osQ0FBQTtBQXJCWSxhQUFhO0lBRnpCLFVBQVUsRUFBRTtJQUNaLE1BQU0sQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDO3FDQUdELE1BQU0sRUFBdUIsVUFBVTtHQUYzRCxhQUFhLENBcUJ6QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7aW5qZWN0YWJsZSwgTGlmZWN5Y2xlLCBzY29wZWR9IGZyb20gXCJ0c3lyaW5nZVwiO1xyXG5pbXBvcnQge09iamVjdElkfSBmcm9tIFwiYnNvblwiO1xyXG5pbXBvcnQge0lBc3NldH0gZnJvbSBcIi4uL2NvbW1vbi10eXBlc1wiO1xyXG5pbXBvcnQge0Fzc2V0c30gZnJvbSBcIi4vYXNzZXRzXCI7XHJcbmltcG9ydCB7TGF6eUFzc2V0c30gZnJvbSBcIi4vbGF6eS1hc3NldHNcIjtcclxuXHJcbkBpbmplY3RhYmxlKClcclxuQHNjb3BlZChMaWZlY3ljbGUuQ29udGFpbmVyU2NvcGVkKVxyXG5leHBvcnQgY2xhc3MgQXNzZXRSZXNvbHZlciB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocmVhZG9ubHkgYXNzZXRzOiBBc3NldHMsIHJlYWRvbmx5IGxhenlBc3NldHM6IExhenlBc3NldHMpIHtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcmVzb2x2ZShpZDogc3RyaW5nIHwgT2JqZWN0SWQsIGxhenk6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8SUFzc2V0PiB7XHJcbiAgICAgICAgbGV0IGFzc2V0OiBJQXNzZXQgPSBudWxsO1xyXG4gICAgICAgIGlmIChsYXp5KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGxhenlBc3NldCA9IGF3YWl0IHRoaXMubGF6eUFzc2V0cy5yZWFkKGlkKTtcclxuICAgICAgICAgICAgaWYgKCFsYXp5QXNzZXQpIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICByZXR1cm4gbGF6eUFzc2V0LmxvYWRBc3NldCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhc3NldCA9IGF3YWl0IHRoaXMuYXNzZXRzLnJlYWQoaWQpO1xyXG4gICAgICAgIGlmICghYXNzZXQpIHtcclxuICAgICAgICAgICAgY29uc3QgbGF6eUFzc2V0ID0gYXdhaXQgdGhpcy5sYXp5QXNzZXRzLnJlYWQoaWQpO1xyXG4gICAgICAgICAgICBpZiAoIWxhenlBc3NldCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIHJldHVybiBsYXp5QXNzZXQubG9hZEFzc2V0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhc3NldDtcclxuICAgIH1cclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import { __decorate, __metadata, __param } from "tslib";
|
|
2
|
+
import { inject, injectable, Lifecycle, scoped } from "tsyringe";
|
|
3
|
+
import { ObjectId } from "bson";
|
|
4
|
+
import axios from "axios";
|
|
5
|
+
import { bufferToStream, copyStream, fileTypeFromBuffer, streamToBuffer } from "../utils";
|
|
6
|
+
import { ASSET_DRIVER } from "../common-types";
|
|
7
|
+
import { MongoConnector } from "./mongo-connector";
|
|
8
|
+
import { AssetProcessor } from "./asset-processor";
|
|
9
|
+
import { Asset } from "./entities/asset";
|
|
10
|
+
import { TempAsset } from "./entities/temp-asset";
|
|
11
|
+
let Assets = class Assets {
|
|
12
|
+
connector;
|
|
13
|
+
assetProcessor;
|
|
14
|
+
driver;
|
|
15
|
+
collection;
|
|
16
|
+
constructor(connector, assetProcessor, driver) {
|
|
17
|
+
this.connector = connector;
|
|
18
|
+
this.assetProcessor = assetProcessor;
|
|
19
|
+
this.driver = driver;
|
|
20
|
+
this.collection = connector.database?.collection("assets.metadata");
|
|
21
|
+
}
|
|
22
|
+
async write(stream, contentType = null, metadata = null) {
|
|
23
|
+
const uploadStream = copyStream(stream);
|
|
24
|
+
const buffer = await streamToBuffer(stream);
|
|
25
|
+
let fileType = { ext: "", mime: contentType };
|
|
26
|
+
try {
|
|
27
|
+
fileType = await fileTypeFromBuffer(buffer);
|
|
28
|
+
}
|
|
29
|
+
catch (e) {
|
|
30
|
+
if (!fileType.mime) {
|
|
31
|
+
throw new Error(`Can't determine mime type: ${e}`);
|
|
32
|
+
}
|
|
33
|
+
console.log(`Can't determine mime type`, e);
|
|
34
|
+
}
|
|
35
|
+
metadata = metadata || {};
|
|
36
|
+
return this.upload(uploadStream, fileType, metadata);
|
|
37
|
+
}
|
|
38
|
+
async writeBuffer(buffer, metadata = null, contentType = null) {
|
|
39
|
+
let fileType = { ext: "", mime: contentType };
|
|
40
|
+
try {
|
|
41
|
+
fileType = await fileTypeFromBuffer(buffer);
|
|
42
|
+
}
|
|
43
|
+
catch (e) {
|
|
44
|
+
if (!fileType.mime) {
|
|
45
|
+
throw `Can't determine mime type`;
|
|
46
|
+
}
|
|
47
|
+
console.log(`Can't determine mime type`, e);
|
|
48
|
+
}
|
|
49
|
+
metadata = metadata || {};
|
|
50
|
+
buffer = await this.assetProcessor.process(buffer, metadata, fileType);
|
|
51
|
+
return this.upload(bufferToStream(buffer), fileType, metadata);
|
|
52
|
+
}
|
|
53
|
+
async writeUrl(url, metadata = null) {
|
|
54
|
+
metadata = metadata || {};
|
|
55
|
+
metadata.filename = metadata.filename || url;
|
|
56
|
+
metadata.url = url;
|
|
57
|
+
metadata.uploadTime = new Date().getTime();
|
|
58
|
+
const oneWeek = 1000 * 3600 * 24 * 7;
|
|
59
|
+
const asset = await this.find({ "metadata.url": url, "metadata.uploadTime": { $gt: metadata.uploadTime - oneWeek } });
|
|
60
|
+
if (asset)
|
|
61
|
+
return asset;
|
|
62
|
+
const buffer = (await axios({ url, responseType: "arraybuffer" })).data;
|
|
63
|
+
return this.writeBuffer(buffer, metadata);
|
|
64
|
+
}
|
|
65
|
+
async download(url, contentType = null) {
|
|
66
|
+
let buffer = (await axios({ url, responseType: "arraybuffer" })).data;
|
|
67
|
+
let fileType = { ext: "", mime: contentType };
|
|
68
|
+
try {
|
|
69
|
+
fileType = await fileTypeFromBuffer(buffer);
|
|
70
|
+
}
|
|
71
|
+
catch (e) {
|
|
72
|
+
if (!fileType.mime) {
|
|
73
|
+
throw `Can't determine mime type`;
|
|
74
|
+
}
|
|
75
|
+
console.log(`Can't determine mime type`, e);
|
|
76
|
+
}
|
|
77
|
+
const metadata = {
|
|
78
|
+
filename: url,
|
|
79
|
+
extension: (fileType.ext || "").trim()
|
|
80
|
+
};
|
|
81
|
+
buffer = await this.assetProcessor.process(buffer, metadata, fileType);
|
|
82
|
+
return new TempAsset(buffer, url, fileType.mime, metadata);
|
|
83
|
+
}
|
|
84
|
+
async read(id) {
|
|
85
|
+
return !id ? null : this.find({ _id: new ObjectId(id) });
|
|
86
|
+
}
|
|
87
|
+
async find(where) {
|
|
88
|
+
const data = await this.collection.findOne(where);
|
|
89
|
+
return !data ? null : new Asset(data._id, data, this.collection, this.driver);
|
|
90
|
+
}
|
|
91
|
+
async findMany(where) {
|
|
92
|
+
const cursor = this.collection.find(where);
|
|
93
|
+
const items = await cursor.toArray() || [];
|
|
94
|
+
const result = [];
|
|
95
|
+
for (let item of items) {
|
|
96
|
+
if (!item)
|
|
97
|
+
continue;
|
|
98
|
+
result.push(new Asset(item._id, item, this.collection, this.driver));
|
|
99
|
+
}
|
|
100
|
+
return result;
|
|
101
|
+
}
|
|
102
|
+
async deleteMany(where) {
|
|
103
|
+
const assets = await this.findMany(where);
|
|
104
|
+
return Promise.all(assets.map(a => a.unlink()));
|
|
105
|
+
}
|
|
106
|
+
async unlink(id) {
|
|
107
|
+
const asset = await this.read(id);
|
|
108
|
+
if (!asset)
|
|
109
|
+
return null;
|
|
110
|
+
return asset.unlink();
|
|
111
|
+
}
|
|
112
|
+
async upload(stream, fileType, metadata) {
|
|
113
|
+
const contentType = fileType.mime.trim();
|
|
114
|
+
metadata = Object.assign({
|
|
115
|
+
downloadCount: 0,
|
|
116
|
+
firstDownload: null,
|
|
117
|
+
lastDownload: null
|
|
118
|
+
}, metadata || {});
|
|
119
|
+
metadata.filename = metadata.filename || new ObjectId().toHexString();
|
|
120
|
+
metadata.extension = (fileType.ext || "").trim();
|
|
121
|
+
return new Promise(((resolve, reject) => {
|
|
122
|
+
const uploaderStream = this.driver.openUploadStream(metadata.filename, {
|
|
123
|
+
chunkSizeBytes: 1048576,
|
|
124
|
+
metadata,
|
|
125
|
+
contentType: fileType.mime
|
|
126
|
+
});
|
|
127
|
+
stream.pipe(uploaderStream)
|
|
128
|
+
.on("error", error => {
|
|
129
|
+
reject(error.message || error);
|
|
130
|
+
})
|
|
131
|
+
.on("finish", () => {
|
|
132
|
+
const asset = new Asset(uploaderStream.id, {
|
|
133
|
+
filename: metadata.filename,
|
|
134
|
+
contentType,
|
|
135
|
+
metadata
|
|
136
|
+
}, this.collection, this.driver);
|
|
137
|
+
asset.save().then(() => {
|
|
138
|
+
resolve(asset);
|
|
139
|
+
}, error => {
|
|
140
|
+
reject(error.message || error);
|
|
141
|
+
});
|
|
142
|
+
});
|
|
143
|
+
}));
|
|
144
|
+
}
|
|
145
|
+
};
|
|
146
|
+
Assets = __decorate([
|
|
147
|
+
injectable(),
|
|
148
|
+
scoped(Lifecycle.ContainerScoped),
|
|
149
|
+
__param(2, inject(ASSET_DRIVER)),
|
|
150
|
+
__metadata("design:paramtypes", [MongoConnector,
|
|
151
|
+
AssetProcessor, Object])
|
|
152
|
+
], Assets);
|
|
153
|
+
export { Assets };
|
|
154
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL2Fzc2V0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUUvRCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRzlCLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUUxQixPQUFPLEVBQUMsY0FBYyxFQUFFLFVBQVUsRUFBRSxrQkFBa0IsRUFBRSxjQUFjLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDeEYsT0FBTyxFQUFDLFlBQVksRUFBOEMsTUFBTSxpQkFBaUIsQ0FBQztBQUMxRixPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUN2QyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFJekMsSUFBTSxNQUFNLEdBQVosTUFBTSxNQUFNO0lBSU07SUFDQTtJQUNzQjtJQUpsQyxVQUFVLENBQThCO0lBRWpELFlBQXFCLFNBQXlCLEVBQ3pCLGNBQThCLEVBQ1IsTUFBb0I7UUFGMUMsY0FBUyxHQUFULFNBQVMsQ0FBZ0I7UUFDekIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQ1IsV0FBTSxHQUFOLE1BQU0sQ0FBYztRQUMzRCxJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVELEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBZ0IsRUFBRSxjQUFzQixJQUFJLEVBQUUsV0FBdUIsSUFBSTtRQUNqRixNQUFNLFlBQVksR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUMsSUFBSSxRQUFRLEdBQUcsRUFBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQWMsQ0FBQztRQUN6RCxJQUFJLENBQUM7WUFDRCxRQUFRLEdBQUcsTUFBTSxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNoRCxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNULElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDdkQsQ0FBQztZQUNELE9BQU8sQ0FBQyxHQUFHLENBQUMsMkJBQTJCLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDaEQsQ0FBQztRQUNELFFBQVEsR0FBRyxRQUFRLElBQUksRUFBRSxDQUFDO1FBQzFCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVyxDQUFDLE1BQWMsRUFBRSxXQUF1QixJQUFJLEVBQUUsY0FBc0IsSUFBSTtRQUNyRixJQUFJLFFBQVEsR0FBRyxFQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBYyxDQUFDO1FBQ3pELElBQUksQ0FBQztZQUNELFFBQVEsR0FBRyxNQUFNLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hELENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDakIsTUFBTSwyQkFBMkIsQ0FBQztZQUN0QyxDQUFDO1lBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNoRCxDQUFDO1FBQ0QsUUFBUSxHQUFHLFFBQVEsSUFBSSxFQUFFLENBQUM7UUFDMUIsTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN2RSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFXLEVBQUUsV0FBdUIsSUFBSTtRQUNuRCxRQUFRLEdBQUcsUUFBUSxJQUFJLEVBQUUsQ0FBQztRQUMxQixRQUFRLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxRQUFRLElBQUksR0FBRyxDQUFDO1FBQzdDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ25CLFFBQVEsQ0FBQyxVQUFVLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMzQyxNQUFNLE9BQU8sR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDckMsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUMsY0FBYyxFQUFFLEdBQUcsRUFBRSxxQkFBcUIsRUFBRSxFQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsVUFBVSxHQUFHLE9BQU8sRUFBQyxFQUFDLENBQUMsQ0FBQztRQUNsSCxJQUFJLEtBQUs7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUN4QixNQUFNLE1BQU0sR0FBRyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBYyxDQUFDO1FBQ2xGLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBVyxFQUFFLGNBQXNCLElBQUk7UUFDbEQsSUFBSSxNQUFNLEdBQUcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQWMsQ0FBQztRQUNoRixJQUFJLFFBQVEsR0FBRyxFQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBYyxDQUFDO1FBQ3pELElBQUksQ0FBQztZQUNELFFBQVEsR0FBRyxNQUFNLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hELENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDakIsTUFBTSwyQkFBMkIsQ0FBQztZQUN0QyxDQUFDO1lBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNoRCxDQUFDO1FBQ0QsTUFBTSxRQUFRLEdBQWU7WUFDekIsUUFBUSxFQUFFLEdBQUc7WUFDYixTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRTtTQUN6QyxDQUFDO1FBQ0YsTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN2RSxPQUFPLElBQUksU0FBUyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFxQjtRQUM1QixPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBQyxHQUFHLEVBQUUsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUMsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQTBCO1FBQ2pDLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEQsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsRixDQUFDO0lBRUQsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUEwQjtRQUNyQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzQyxNQUFNLEtBQUssR0FBRyxNQUFNLE1BQU0sQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDM0MsTUFBTSxNQUFNLEdBQWEsRUFBRSxDQUFDO1FBQzVCLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLElBQUk7Z0JBQUUsU0FBUztZQUNwQixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDekUsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQTBCO1FBQ3ZDLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQyxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBVTtRQUNuQixNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPLElBQUksQ0FBQztRQUN4QixPQUFPLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRVMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFnQixFQUFFLFFBQW1CLEVBQUUsUUFBb0I7UUFDOUUsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN6QyxRQUFRLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztZQUNyQixhQUFhLEVBQUUsQ0FBQztZQUNoQixhQUFhLEVBQUUsSUFBSTtZQUNuQixZQUFZLEVBQUUsSUFBSTtTQUNyQixFQUFFLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNuQixRQUFRLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxRQUFRLElBQUksSUFBSSxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN0RSxRQUFRLENBQUMsU0FBUyxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNqRCxPQUFPLElBQUksT0FBTyxDQUFTLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDNUMsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFO2dCQUNuRSxjQUFjLEVBQUUsT0FBTztnQkFDdkIsUUFBUTtnQkFDUixXQUFXLEVBQUUsUUFBUSxDQUFDLElBQUk7YUFDN0IsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7aUJBQ3RCLEVBQUUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLEVBQUU7Z0JBQ2pCLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxDQUFDO1lBQ25DLENBQUMsQ0FBQztpQkFDRCxFQUFFLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRTtnQkFDZixNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxjQUFjLENBQUMsRUFBYyxFQUFFO29CQUNuRCxRQUFRLEVBQUUsUUFBUSxDQUFDLFFBQVE7b0JBQzNCLFdBQVc7b0JBQ1gsUUFBUTtpQkFDWCxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNqQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtvQkFDbkIsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNuQixDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUU7b0JBQ1AsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLENBQUM7Z0JBQ25DLENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQyxDQUFDLENBQUM7UUFDWCxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ1IsQ0FBQztDQUNKLENBQUE7QUF4SVksTUFBTTtJQUZsQixVQUFVLEVBQUU7SUFDWixNQUFNLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQztJQU9qQixXQUFBLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQTtxQ0FGRCxjQUFjO1FBQ1QsY0FBYztHQUwxQyxNQUFNLENBd0lsQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7aW5qZWN0LCBpbmplY3RhYmxlLCBMaWZlY3ljbGUsIHNjb3BlZH0gZnJvbSBcInRzeXJpbmdlXCI7XG5pbXBvcnQge1JlYWRhYmxlfSBmcm9tIFwic3RyZWFtXCI7XG5pbXBvcnQge09iamVjdElkfSBmcm9tIFwiYnNvblwiO1xuaW1wb3J0IHtDb2xsZWN0aW9ufSBmcm9tIFwibW9uZ29kYlwiO1xuaW1wb3J0IHtGaWx0ZXJRdWVyeX0gZnJvbSBcIm1vbmdvb3NlXCI7XG5pbXBvcnQgYXhpb3MgZnJvbSBcImF4aW9zXCI7XG5cbmltcG9ydCB7YnVmZmVyVG9TdHJlYW0sIGNvcHlTdHJlYW0sIGZpbGVUeXBlRnJvbUJ1ZmZlciwgc3RyZWFtVG9CdWZmZXJ9IGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IHtBU1NFVF9EUklWRVIsIElBc3NldCwgSUFzc2V0RHJpdmVyLCBJQXNzZXRNZXRhLCBJRmlsZVR5cGV9IGZyb20gXCIuLi9jb21tb24tdHlwZXNcIjtcbmltcG9ydCB7TW9uZ29Db25uZWN0b3J9IGZyb20gXCIuL21vbmdvLWNvbm5lY3RvclwiO1xuaW1wb3J0IHtBc3NldFByb2Nlc3Nvcn0gZnJvbSBcIi4vYXNzZXQtcHJvY2Vzc29yXCI7XG5pbXBvcnQge0Fzc2V0fSBmcm9tIFwiLi9lbnRpdGllcy9hc3NldFwiO1xuaW1wb3J0IHtUZW1wQXNzZXR9IGZyb20gXCIuL2VudGl0aWVzL3RlbXAtYXNzZXRcIjtcblxuQGluamVjdGFibGUoKVxuQHNjb3BlZChMaWZlY3ljbGUuQ29udGFpbmVyU2NvcGVkKVxuZXhwb3J0IGNsYXNzIEFzc2V0cyB7XG5cbiAgICByZWFkb25seSBjb2xsZWN0aW9uOiBDb2xsZWN0aW9uPFBhcnRpYWw8SUFzc2V0Pj47XG5cbiAgICBjb25zdHJ1Y3RvcihyZWFkb25seSBjb25uZWN0b3I6IE1vbmdvQ29ubmVjdG9yLFxuICAgICAgICAgICAgICAgIHJlYWRvbmx5IGFzc2V0UHJvY2Vzc29yOiBBc3NldFByb2Nlc3NvcixcbiAgICAgICAgICAgICAgICBAaW5qZWN0KEFTU0VUX0RSSVZFUikgcmVhZG9ubHkgZHJpdmVyOiBJQXNzZXREcml2ZXIpIHtcbiAgICAgICAgdGhpcy5jb2xsZWN0aW9uID0gY29ubmVjdG9yLmRhdGFiYXNlPy5jb2xsZWN0aW9uKFwiYXNzZXRzLm1ldGFkYXRhXCIpO1xuICAgIH1cblxuICAgIGFzeW5jIHdyaXRlKHN0cmVhbTogUmVhZGFibGUsIGNvbnRlbnRUeXBlOiBzdHJpbmcgPSBudWxsLCBtZXRhZGF0YTogSUFzc2V0TWV0YSA9IG51bGwpOiBQcm9taXNlPElBc3NldD4ge1xuICAgICAgICBjb25zdCB1cGxvYWRTdHJlYW0gPSBjb3B5U3RyZWFtKHN0cmVhbSk7XG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IGF3YWl0IHN0cmVhbVRvQnVmZmVyKHN0cmVhbSk7XG4gICAgICAgIGxldCBmaWxlVHlwZSA9IHtleHQ6IFwiXCIsIG1pbWU6IGNvbnRlbnRUeXBlfSBhcyBJRmlsZVR5cGU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmaWxlVHlwZSA9IGF3YWl0IGZpbGVUeXBlRnJvbUJ1ZmZlcihidWZmZXIpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoIWZpbGVUeXBlLm1pbWUpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbid0IGRldGVybWluZSBtaW1lIHR5cGU6ICR7ZX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBDYW4ndCBkZXRlcm1pbmUgbWltZSB0eXBlYCwgZSk7XG4gICAgICAgIH1cbiAgICAgICAgbWV0YWRhdGEgPSBtZXRhZGF0YSB8fCB7fTtcbiAgICAgICAgcmV0dXJuIHRoaXMudXBsb2FkKHVwbG9hZFN0cmVhbSwgZmlsZVR5cGUsIG1ldGFkYXRhKTtcbiAgICB9XG5cbiAgICBhc3luYyB3cml0ZUJ1ZmZlcihidWZmZXI6IEJ1ZmZlciwgbWV0YWRhdGE6IElBc3NldE1ldGEgPSBudWxsLCBjb250ZW50VHlwZTogc3RyaW5nID0gbnVsbCk6IFByb21pc2U8SUFzc2V0PiB7XG4gICAgICAgIGxldCBmaWxlVHlwZSA9IHtleHQ6IFwiXCIsIG1pbWU6IGNvbnRlbnRUeXBlfSBhcyBJRmlsZVR5cGU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmaWxlVHlwZSA9IGF3YWl0IGZpbGVUeXBlRnJvbUJ1ZmZlcihidWZmZXIpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoIWZpbGVUeXBlLm1pbWUpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBgQ2FuJ3QgZGV0ZXJtaW5lIG1pbWUgdHlwZWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgQ2FuJ3QgZGV0ZXJtaW5lIG1pbWUgdHlwZWAsIGUpO1xuICAgICAgICB9XG4gICAgICAgIG1ldGFkYXRhID0gbWV0YWRhdGEgfHwge307XG4gICAgICAgIGJ1ZmZlciA9IGF3YWl0IHRoaXMuYXNzZXRQcm9jZXNzb3IucHJvY2VzcyhidWZmZXIsIG1ldGFkYXRhLCBmaWxlVHlwZSk7XG4gICAgICAgIHJldHVybiB0aGlzLnVwbG9hZChidWZmZXJUb1N0cmVhbShidWZmZXIpLCBmaWxlVHlwZSwgbWV0YWRhdGEpO1xuICAgIH1cblxuICAgIGFzeW5jIHdyaXRlVXJsKHVybDogc3RyaW5nLCBtZXRhZGF0YTogSUFzc2V0TWV0YSA9IG51bGwpOiBQcm9taXNlPElBc3NldD4ge1xuICAgICAgICBtZXRhZGF0YSA9IG1ldGFkYXRhIHx8IHt9O1xuICAgICAgICBtZXRhZGF0YS5maWxlbmFtZSA9IG1ldGFkYXRhLmZpbGVuYW1lIHx8IHVybDtcbiAgICAgICAgbWV0YWRhdGEudXJsID0gdXJsO1xuICAgICAgICBtZXRhZGF0YS51cGxvYWRUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgIGNvbnN0IG9uZVdlZWsgPSAxMDAwICogMzYwMCAqIDI0ICogNztcbiAgICAgICAgY29uc3QgYXNzZXQgPSBhd2FpdCB0aGlzLmZpbmQoe1wibWV0YWRhdGEudXJsXCI6IHVybCwgXCJtZXRhZGF0YS51cGxvYWRUaW1lXCI6IHskZ3Q6IG1ldGFkYXRhLnVwbG9hZFRpbWUgLSBvbmVXZWVrfX0pO1xuICAgICAgICBpZiAoYXNzZXQpIHJldHVybiBhc3NldDtcbiAgICAgICAgY29uc3QgYnVmZmVyID0gKGF3YWl0IGF4aW9zKHsgdXJsLCByZXNwb25zZVR5cGU6IFwiYXJyYXlidWZmZXJcIiB9KSkuZGF0YSBhcyBCdWZmZXI7XG4gICAgICAgIHJldHVybiB0aGlzLndyaXRlQnVmZmVyKGJ1ZmZlciwgbWV0YWRhdGEpO1xuICAgIH1cblxuICAgIGFzeW5jIGRvd25sb2FkKHVybDogc3RyaW5nLCBjb250ZW50VHlwZTogc3RyaW5nID0gbnVsbCk6IFByb21pc2U8SUFzc2V0PiB7XG4gICAgICAgIGxldCBidWZmZXIgPSAoYXdhaXQgYXhpb3MoeyB1cmwsIHJlc3BvbnNlVHlwZTogXCJhcnJheWJ1ZmZlclwiIH0pKS5kYXRhIGFzIEJ1ZmZlcjtcbiAgICAgICAgbGV0IGZpbGVUeXBlID0ge2V4dDogXCJcIiwgbWltZTogY29udGVudFR5cGV9IGFzIElGaWxlVHlwZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZpbGVUeXBlID0gYXdhaXQgZmlsZVR5cGVGcm9tQnVmZmVyKGJ1ZmZlcik7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGlmICghZmlsZVR5cGUubWltZSkge1xuICAgICAgICAgICAgICAgIHRocm93IGBDYW4ndCBkZXRlcm1pbmUgbWltZSB0eXBlYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBDYW4ndCBkZXRlcm1pbmUgbWltZSB0eXBlYCwgZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWV0YWRhdGE6IElBc3NldE1ldGEgPSB7XG4gICAgICAgICAgICBmaWxlbmFtZTogdXJsLFxuICAgICAgICAgICAgZXh0ZW5zaW9uOiAoZmlsZVR5cGUuZXh0IHx8IFwiXCIpLnRyaW0oKVxuICAgICAgICB9O1xuICAgICAgICBidWZmZXIgPSBhd2FpdCB0aGlzLmFzc2V0UHJvY2Vzc29yLnByb2Nlc3MoYnVmZmVyLCBtZXRhZGF0YSwgZmlsZVR5cGUpO1xuICAgICAgICByZXR1cm4gbmV3IFRlbXBBc3NldChidWZmZXIsIHVybCwgZmlsZVR5cGUubWltZSwgbWV0YWRhdGEpO1xuICAgIH1cblxuICAgIGFzeW5jIHJlYWQoaWQ6IHN0cmluZyB8IE9iamVjdElkKTogUHJvbWlzZTxJQXNzZXQ+IHtcbiAgICAgICAgcmV0dXJuICFpZCA/IG51bGwgOiB0aGlzLmZpbmQoe19pZDogbmV3IE9iamVjdElkKGlkKX0pO1xuICAgIH1cblxuICAgIGFzeW5jIGZpbmQod2hlcmU6IEZpbHRlclF1ZXJ5PElBc3NldD4pOiBQcm9taXNlPElBc3NldD4ge1xuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5jb2xsZWN0aW9uLmZpbmRPbmUod2hlcmUpO1xuICAgICAgICByZXR1cm4gIWRhdGEgPyBudWxsIDogbmV3IEFzc2V0KGRhdGEuX2lkLCBkYXRhLCB0aGlzLmNvbGxlY3Rpb24sIHRoaXMuZHJpdmVyKTtcbiAgICB9XG5cbiAgICBhc3luYyBmaW5kTWFueSh3aGVyZTogRmlsdGVyUXVlcnk8SUFzc2V0Pik6IFByb21pc2U8UmVhZG9ubHlBcnJheTxJQXNzZXQ+PiB7XG4gICAgICAgIGNvbnN0IGN1cnNvciA9IHRoaXMuY29sbGVjdGlvbi5maW5kKHdoZXJlKTtcbiAgICAgICAgY29uc3QgaXRlbXMgPSBhd2FpdCBjdXJzb3IudG9BcnJheSgpIHx8IFtdO1xuICAgICAgICBjb25zdCByZXN1bHQ6IElBc3NldFtdID0gW107XG4gICAgICAgIGZvciAobGV0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAgICAgICAgIGlmICghaXRlbSkgY29udGludWU7XG4gICAgICAgICAgICByZXN1bHQucHVzaChuZXcgQXNzZXQoaXRlbS5faWQsIGl0ZW0sIHRoaXMuY29sbGVjdGlvbiwgdGhpcy5kcml2ZXIpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGFzeW5jIGRlbGV0ZU1hbnkod2hlcmU6IEZpbHRlclF1ZXJ5PElBc3NldD4pOiBQcm9taXNlPFJlYWRvbmx5QXJyYXk8c3RyaW5nPj4ge1xuICAgICAgICBjb25zdCBhc3NldHMgPSBhd2FpdCB0aGlzLmZpbmRNYW55KHdoZXJlKTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKGFzc2V0cy5tYXAoYSA9PiBhLnVubGluaygpKSk7XG4gICAgfVxuXG4gICAgYXN5bmMgdW5saW5rKGlkOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICBjb25zdCBhc3NldCA9IGF3YWl0IHRoaXMucmVhZChpZCk7XG4gICAgICAgIGlmICghYXNzZXQpIHJldHVybiBudWxsO1xuICAgICAgICByZXR1cm4gYXNzZXQudW5saW5rKCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIHVwbG9hZChzdHJlYW06IFJlYWRhYmxlLCBmaWxlVHlwZTogSUZpbGVUeXBlLCBtZXRhZGF0YTogSUFzc2V0TWV0YSk6IFByb21pc2U8SUFzc2V0PiB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gZmlsZVR5cGUubWltZS50cmltKCk7XG4gICAgICAgIG1ldGFkYXRhID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICAgICAgICBkb3dubG9hZENvdW50OiAwLFxuICAgICAgICAgICAgZmlyc3REb3dubG9hZDogbnVsbCxcbiAgICAgICAgICAgIGxhc3REb3dubG9hZDogbnVsbFxuICAgICAgICB9LCBtZXRhZGF0YSB8fCB7fSk7XG4gICAgICAgIG1ldGFkYXRhLmZpbGVuYW1lID0gbWV0YWRhdGEuZmlsZW5hbWUgfHwgbmV3IE9iamVjdElkKCkudG9IZXhTdHJpbmcoKTtcbiAgICAgICAgbWV0YWRhdGEuZXh0ZW5zaW9uID0gKGZpbGVUeXBlLmV4dCB8fCBcIlwiKS50cmltKCk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxJQXNzZXQ+KCgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB1cGxvYWRlclN0cmVhbSA9IHRoaXMuZHJpdmVyLm9wZW5VcGxvYWRTdHJlYW0obWV0YWRhdGEuZmlsZW5hbWUsIHtcbiAgICAgICAgICAgICAgICBjaHVua1NpemVCeXRlczogMTA0ODU3NixcbiAgICAgICAgICAgICAgICBtZXRhZGF0YSxcbiAgICAgICAgICAgICAgICBjb250ZW50VHlwZTogZmlsZVR5cGUubWltZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzdHJlYW0ucGlwZSh1cGxvYWRlclN0cmVhbSlcbiAgICAgICAgICAgICAgICAub24oXCJlcnJvclwiLCBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvci5tZXNzYWdlIHx8IGVycm9yKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5vbihcImZpbmlzaFwiLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFzc2V0ID0gbmV3IEFzc2V0KHVwbG9hZGVyU3RyZWFtLmlkIGFzIE9iamVjdElkLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZTogbWV0YWRhdGEuZmlsZW5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50VHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhXG4gICAgICAgICAgICAgICAgICAgIH0sIHRoaXMuY29sbGVjdGlvbiwgdGhpcy5kcml2ZXIpO1xuICAgICAgICAgICAgICAgICAgICBhc3NldC5zYXZlKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGFzc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yLm1lc3NhZ2UgfHwgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSkpO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { __decorate, __metadata, __param } from "tslib";
|
|
2
|
+
import { createServer } from "http";
|
|
3
|
+
import { Server as SocketServer } from "socket.io";
|
|
4
|
+
import cors from "cors";
|
|
5
|
+
import express_ from "express";
|
|
6
|
+
import { inject, singleton } from "tsyringe";
|
|
7
|
+
import bodyParser from 'body-parser';
|
|
8
|
+
import { Configuration } from './configuration';
|
|
9
|
+
import { DI_CONTAINER } from '../common-types';
|
|
10
|
+
import { OpenApi } from './open-api';
|
|
11
|
+
import { JobManager } from './job-manager';
|
|
12
|
+
import { Fixtures } from './fixtures';
|
|
13
|
+
const express = express_;
|
|
14
|
+
let BackendProvider = class BackendProvider {
|
|
15
|
+
config;
|
|
16
|
+
container;
|
|
17
|
+
get io() {
|
|
18
|
+
this.ioServer = this.ioServer || new SocketServer(this.server, {
|
|
19
|
+
path: "/socket",
|
|
20
|
+
cors: {
|
|
21
|
+
credentials: true,
|
|
22
|
+
exposedHeaders: ["content-disposition"],
|
|
23
|
+
origin: (origin, callback) => {
|
|
24
|
+
callback(null, true);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
return this.ioServer;
|
|
29
|
+
}
|
|
30
|
+
get express() {
|
|
31
|
+
if (!this.expressApp) {
|
|
32
|
+
this.expressApp = express();
|
|
33
|
+
this.expressApp.set("trust proxy", true);
|
|
34
|
+
this.expressApp.use(bodyParser.json({
|
|
35
|
+
limit: this.config.resolve("jsonLimit")
|
|
36
|
+
}));
|
|
37
|
+
this.expressApp.options("*", cors());
|
|
38
|
+
this.expressApp.get("/api-docs", (req, res) => {
|
|
39
|
+
this.openApi = this.openApi || this.container.get(OpenApi);
|
|
40
|
+
res.header("Content-Type", "application/json")
|
|
41
|
+
.status(200)
|
|
42
|
+
.end(this.openApi.apiDocsStr);
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
return this.expressApp;
|
|
46
|
+
}
|
|
47
|
+
get server() {
|
|
48
|
+
this.httpServer = this.httpServer || createServer(this.express);
|
|
49
|
+
return this.httpServer;
|
|
50
|
+
}
|
|
51
|
+
ioServer;
|
|
52
|
+
httpServer;
|
|
53
|
+
expressApp;
|
|
54
|
+
openApi;
|
|
55
|
+
constructor(config, container) {
|
|
56
|
+
this.config = config;
|
|
57
|
+
this.container = container;
|
|
58
|
+
}
|
|
59
|
+
async quickStart() {
|
|
60
|
+
const port = this.config.resolve("appPort");
|
|
61
|
+
const isWorker = this.config.resolve("isWorker");
|
|
62
|
+
if (isWorker || this.config.resolve("startWorker")) {
|
|
63
|
+
await this.container.resolve(JobManager).startProcessing();
|
|
64
|
+
if (isWorker) {
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
if (this.config.resolve("fixtures")) {
|
|
69
|
+
const fixtures = this.container.resolve(Fixtures);
|
|
70
|
+
await fixtures.load();
|
|
71
|
+
}
|
|
72
|
+
return new Promise(resolve => {
|
|
73
|
+
this.server.listen(port, () => resolve(`Service listening on port ${port}!`));
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
BackendProvider = __decorate([
|
|
78
|
+
singleton(),
|
|
79
|
+
__param(1, inject(DI_CONTAINER)),
|
|
80
|
+
__metadata("design:paramtypes", [Configuration, Object])
|
|
81
|
+
], BackendProvider);
|
|
82
|
+
export { BackendProvider };
|
|
83
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja2VuZC1wcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9iYWNrZW5kLXByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsWUFBWSxFQUFTLE1BQU0sTUFBTSxDQUFDO0FBQzFDLE9BQU8sRUFBQyxNQUFNLElBQUksWUFBWSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pELE9BQU8sSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUN4QixPQUFPLFFBQW1CLE1BQU0sU0FBUyxDQUFDO0FBQzFDLE9BQU8sRUFBQyxNQUFNLEVBQUUsU0FBUyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQzNDLE9BQU8sVUFBVSxNQUFNLGFBQWEsQ0FBQztBQUNyQyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUFDLFlBQVksRUFBdUIsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRSxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ25DLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUVwQyxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUM7QUFHbEIsSUFBTSxlQUFlLEdBQXJCLE1BQU0sZUFBZTtJQTRDSDtJQUN1QjtJQTNDNUMsSUFBSSxFQUFFO1FBQ0YsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDM0QsSUFBSSxFQUFFLFNBQVM7WUFDZixJQUFJLEVBQUU7Z0JBQ0YsV0FBVyxFQUFFLElBQUk7Z0JBQ2pCLGNBQWMsRUFBRSxDQUFDLHFCQUFxQixDQUFDO2dCQUN2QyxNQUFNLEVBQUUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLEVBQUU7b0JBQ3pC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LENBQUMsQ0FBQztJQUNQLENBQUM7Q0FDSixDQUFBO0FBakVZLGVBQWU7SUFEM0IsU0FBUyxFQUFFO0lBOENLLFdBQUEsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFBO3FDQURKLGFBQWE7R0E1Q2pDLGVBQWUsQ0FpRTNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtjcmVhdGVTZXJ2ZXIsIFNlcnZlcn0gZnJvbSBcImh0dHBcIjtcclxuaW1wb3J0IHtTZXJ2ZXIgYXMgU29ja2V0U2VydmVyfSBmcm9tIFwic29ja2V0LmlvXCI7XHJcbmltcG9ydCBjb3JzIGZyb20gXCJjb3JzXCI7XHJcbmltcG9ydCBleHByZXNzXywge0V4cHJlc3N9IGZyb20gXCJleHByZXNzXCI7XHJcbmltcG9ydCB7aW5qZWN0LCBzaW5nbGV0b259IGZyb20gXCJ0c3lyaW5nZVwiO1xyXG5pbXBvcnQgYm9keVBhcnNlciBmcm9tICdib2R5LXBhcnNlcic7XHJcbmltcG9ydCB7Q29uZmlndXJhdGlvbn0gZnJvbSAnLi9jb25maWd1cmF0aW9uJztcclxuaW1wb3J0IHtESV9DT05UQUlORVIsIElEZXBlbmRlbmN5Q29udGFpbmVyfSBmcm9tICcuLi9jb21tb24tdHlwZXMnO1xyXG5pbXBvcnQge09wZW5BcGl9IGZyb20gJy4vb3Blbi1hcGknO1xyXG5pbXBvcnQge0pvYk1hbmFnZXJ9IGZyb20gJy4vam9iLW1hbmFnZXInO1xyXG5pbXBvcnQge0ZpeHR1cmVzfSBmcm9tICcuL2ZpeHR1cmVzJztcclxuXHJcbmNvbnN0IGV4cHJlc3MgPSBleHByZXNzXztcclxuXHJcbkBzaW5nbGV0b24oKVxyXG5leHBvcnQgY2xhc3MgQmFja2VuZFByb3ZpZGVyIHtcclxuXHJcbiAgICBnZXQgaW8oKTogU29ja2V0U2VydmVyIHtcclxuICAgICAgICB0aGlzLmlvU2VydmVyID0gdGhpcy5pb1NlcnZlciB8fCBuZXcgU29ja2V0U2VydmVyKHRoaXMuc2VydmVyLCB7XHJcbiAgICAgICAgICAgIHBhdGg6IFwiL3NvY2tldFwiLFxyXG4gICAgICAgICAgICBjb3JzOiB7XHJcbiAgICAgICAgICAgICAgICBjcmVkZW50aWFsczogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGV4cG9zZWRIZWFkZXJzOiBbXCJjb250ZW50LWRpc3Bvc2l0aW9uXCJdLFxyXG4gICAgICAgICAgICAgICAgb3JpZ2luOiAob3JpZ2luLCBjYWxsYmFjaykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaW9TZXJ2ZXI7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGV4cHJlc3MoKTogRXhwcmVzcyB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmV4cHJlc3NBcHApIHtcclxuICAgICAgICAgICAgdGhpcy5leHByZXNzQXBwID0gZXhwcmVzcygpO1xyXG4gICAgICAgICAgICB0aGlzLmV4cHJlc3NBcHAuc2V0KFwidHJ1c3QgcHJveHlcIiwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuZXhwcmVzc0FwcC51c2UoYm9keVBhcnNlci5qc29uKHtcclxuICAgICAgICAgICAgICAgIGxpbWl0OiB0aGlzLmNvbmZpZy5yZXNvbHZlKFwianNvbkxpbWl0XCIpXHJcbiAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgdGhpcy5leHByZXNzQXBwLm9wdGlvbnMoXCIqXCIsIGNvcnMoKSk7XHJcbiAgICAgICAgICAgIHRoaXMuZXhwcmVzc0FwcC5nZXQoXCIvYXBpLWRvY3NcIiwgKHJlcSwgcmVzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5BcGkgPSB0aGlzLm9wZW5BcGkgfHwgdGhpcy5jb250YWluZXIuZ2V0KE9wZW5BcGkpO1xyXG4gICAgICAgICAgICAgICAgcmVzLmhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL2pzb25cIilcclxuICAgICAgICAgICAgICAgICAgICAuc3RhdHVzKDIwMClcclxuICAgICAgICAgICAgICAgICAgICAuZW5kKHRoaXMub3BlbkFwaS5hcGlEb2NzU3RyKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhwcmVzc0FwcDtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc2VydmVyKCk6IFNlcnZlciB7XHJcbiAgICAgICAgdGhpcy5odHRwU2VydmVyID0gdGhpcy5odHRwU2VydmVyIHx8IGNyZWF0ZVNlcnZlcih0aGlzLmV4cHJlc3MpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2ZXI7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGlvU2VydmVyOiBTb2NrZXRTZXJ2ZXI7XHJcbiAgICBwcm90ZWN0ZWQgaHR0cFNlcnZlcjogU2VydmVyO1xyXG4gICAgcHJvdGVjdGVkIGV4cHJlc3NBcHA6IEV4cHJlc3M7XHJcbiAgICBwcm90ZWN0ZWQgb3BlbkFwaTogT3BlbkFwaTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihyZWFkb25seSBjb25maWc6IENvbmZpZ3VyYXRpb24sXHJcbiAgICAgICAgICAgICAgICBAaW5qZWN0KERJX0NPTlRBSU5FUikgcHJvdGVjdGVkIGNvbnRhaW5lcjogSURlcGVuZGVuY3lDb250YWluZXIpIHtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBxdWlja1N0YXJ0KCk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICAgICAgY29uc3QgcG9ydCA9IHRoaXMuY29uZmlnLnJlc29sdmUoXCJhcHBQb3J0XCIpO1xyXG4gICAgICAgIGNvbnN0IGlzV29ya2VyID0gdGhpcy5jb25maWcucmVzb2x2ZShcImlzV29ya2VyXCIpO1xyXG4gICAgICAgIGlmIChpc1dvcmtlciB8fCB0aGlzLmNvbmZpZy5yZXNvbHZlKFwic3RhcnRXb3JrZXJcIikpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5jb250YWluZXIucmVzb2x2ZShKb2JNYW5hZ2VyKS5zdGFydFByb2Nlc3NpbmcoKTtcclxuICAgICAgICAgICAgaWYgKGlzV29ya2VyKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLnJlc29sdmUoXCJmaXh0dXJlc1wiKSkge1xyXG4gICAgICAgICAgICBjb25zdCBmaXh0dXJlcyA9IHRoaXMuY29udGFpbmVyLnJlc29sdmUoRml4dHVyZXMpO1xyXG4gICAgICAgICAgICBhd2FpdCBmaXh0dXJlcy5sb2FkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zZXJ2ZXIubGlzdGVuKHBvcnQsICgpID0+IHJlc29sdmUoYFNlcnZpY2UgbGlzdGVuaW5nIG9uIHBvcnQgJHtwb3J0fSFgKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { injectable, scoped, Lifecycle } from "tsyringe";
|
|
3
|
+
let CacheProcessor = class CacheProcessor {
|
|
4
|
+
async serialize(data) {
|
|
5
|
+
return data;
|
|
6
|
+
}
|
|
7
|
+
async deserialize(data) {
|
|
8
|
+
return data;
|
|
9
|
+
}
|
|
10
|
+
};
|
|
11
|
+
CacheProcessor = __decorate([
|
|
12
|
+
injectable(),
|
|
13
|
+
scoped(Lifecycle.ContainerScoped)
|
|
14
|
+
], CacheProcessor);
|
|
15
|
+
export { CacheProcessor };
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUtcHJvY2Vzc29yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL2NhY2hlLXByb2Nlc3Nvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBSWhELElBQU0sY0FBYyxHQUFwQixNQUFNLGNBQWM7SUFDdkIsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFTO1FBQ3JCLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVyxDQUFDLElBQVM7UUFDdkIsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztDQUNKLENBQUE7QUFSWSxjQUFjO0lBRjFCLFVBQVUsRUFBRTtJQUNaLE1BQU0sQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDO0dBQ3JCLGNBQWMsQ0FRMUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2luamVjdGFibGUsIHNjb3BlZCwgTGlmZWN5Y2xlfSBmcm9tIFwidHN5cmluZ2VcIjtcclxuXHJcbkBpbmplY3RhYmxlKClcclxuQHNjb3BlZChMaWZlY3ljbGUuQ29udGFpbmVyU2NvcGVkKVxyXG5leHBvcnQgY2xhc3MgQ2FjaGVQcm9jZXNzb3Ige1xyXG4gICAgYXN5bmMgc2VyaWFsaXplKGRhdGE6IGFueSk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIGRhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZGVzZXJpYWxpemUoZGF0YTogYW55KTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gZGF0YTtcclxuICAgIH1cclxufVxyXG4iXX0=
|