@stemy/backend 3.5.16 → 4.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 -0
- package/commands/fixtures-command.d.ts +9 -0
- package/commands/index.d.ts +2 -0
- package/common-types.d.ts +29 -7
- package/esm2020/commands/clear-command.mjs +17 -0
- package/esm2020/commands/fixtures-command.mjs +23 -0
- package/esm2020/commands/index.mjs +7 -0
- package/esm2020/common-types.mjs +21 -0
- package/esm2020/public_api.mjs +379 -0
- package/esm2020/requests/asset-image-params.mjs +53 -0
- package/esm2020/rest-controllers/assets.controller.mjs +126 -0
- package/esm2020/rest-controllers/auth.controller.mjs +46 -0
- package/esm2020/rest-controllers/gallery.controller.mjs +21 -0
- package/esm2020/rest-controllers/progresses.controller.mjs +29 -0
- package/esm2020/rest-controllers/terminal-styles.mjs +67 -0
- package/esm2020/rest-controllers/terminal.controller.mjs +125 -0
- package/esm2020/rest-middlewares/container.middleware.mjs +20 -0
- package/esm2020/rest-middlewares/error-handler.middleware.mjs +74 -0
- package/esm2020/rest-middlewares/language.middleware.mjs +18 -0
- package/esm2020/rest-middlewares/request-ended.middleware.mjs +23 -0
- package/esm2020/rest-middlewares/request-started.middleware.mjs +22 -0
- package/esm2020/services/asset-processor.mjs +90 -0
- package/esm2020/services/asset-resolver.mjs +31 -0
- package/esm2020/services/assets.mjs +140 -0
- package/esm2020/services/backend-provider.mjs +22 -0
- package/esm2020/services/cache-processor.mjs +16 -0
- package/esm2020/services/cache.mjs +62 -0
- package/esm2020/services/configuration.mjs +65 -0
- package/esm2020/services/endpoint-provider.mjs +13 -0
- package/esm2020/services/entities/asset.mjs +43 -0
- package/esm2020/services/entities/base-entity.mjs +26 -0
- package/esm2020/services/entities/lazy-asset.mjs +73 -0
- package/esm2020/services/entities/progress.mjs +176 -0
- package/esm2020/services/entities/temp-asset.mjs +45 -0
- package/esm2020/services/fixtures.mjs +26 -0
- package/esm2020/services/gallery-cache.mjs +27 -0
- package/esm2020/services/gallery-image.mjs +37 -0
- package/esm2020/services/gallery.mjs +116 -0
- package/esm2020/services/id-generator.mjs +42 -0
- package/esm2020/services/job-manager.mjs +187 -0
- package/esm2020/services/lazy-assets.mjs +48 -0
- package/esm2020/services/logger.mjs +21 -0
- package/esm2020/services/mail-sender.mjs +36 -0
- package/esm2020/services/memory-cache.mjs +57 -0
- package/esm2020/services/mongo-connector.mjs +37 -0
- package/esm2020/services/open-api.mjs +114 -0
- package/esm2020/services/progresses.mjs +86 -0
- package/esm2020/services/template-renderer.mjs +64 -0
- package/esm2020/services/terminal-manager.mjs +77 -0
- package/esm2020/services/token-generator.mjs +35 -0
- package/esm2020/services/translation-provider.mjs +34 -0
- package/esm2020/services/translator.mjs +63 -0
- package/esm2020/services/user-manager.mjs +27 -0
- package/esm2020/socket-controllers/progress.controller.mjs +52 -0
- package/esm2020/socket-controllers/terminal.controller.mjs +48 -0
- package/esm2020/socket-controllers/terminal.mjs +85 -0
- package/esm2020/socket-middlewares/compression.middleware.mjs +14 -0
- package/esm2020/static.mjs +23 -0
- package/esm2020/utilities/decorators.mjs +52 -0
- package/esm2020/utilities/di-container.mjs +83 -0
- package/esm2020/utilities/empty-job.mjs +13 -0
- package/esm2020/utilities/lazy-asset-generator.mjs +35 -0
- package/esm2020/utilities/mongoose.mjs +216 -0
- package/esm2020/utils.mjs +693 -0
- package/esm2020/validators.mjs +46 -0
- package/fesm2015/{stemy-backend.js → stemy-backend.mjs} +1923 -2220
- package/fesm2015/stemy-backend.mjs.map +1 -0
- package/fesm2020/stemy-backend.mjs +4202 -0
- package/fesm2020/stemy-backend.mjs.map +1 -0
- package/{stemy-backend.d.ts → index.d.ts} +1 -0
- package/package.json +36 -23
- package/public_api.d.ts +3 -2
- package/rest-controllers/terminal-styles.d.ts +2 -0
- package/rest-controllers/terminal.controller.d.ts +10 -0
- package/services/asset-processor.d.ts +0 -3
- package/services/assets.d.ts +1 -0
- package/services/configuration.d.ts +2 -1
- package/services/entities/asset.d.ts +1 -0
- package/services/entities/temp-asset.d.ts +1 -0
- package/services/fixtures.d.ts +2 -2
- package/services/terminal-manager.d.ts +15 -0
- package/socket-controllers/terminal.controller.d.ts +13 -0
- package/socket-controllers/terminal.d.ts +20 -0
- package/utils.d.ts +7 -1
- package/bundles/stemy-backend.umd.js +0 -7081
- package/bundles/stemy-backend.umd.js.map +0 -1
- package/esm2015/common-types.js +0 -19
- package/esm2015/public_api.js +0 -359
- package/esm2015/requests/asset-image-params.js +0 -70
- package/esm2015/rest-controllers/assets.controller.js +0 -180
- package/esm2015/rest-controllers/auth.controller.js +0 -76
- package/esm2015/rest-controllers/gallery.controller.js +0 -37
- package/esm2015/rest-controllers/progresses.controller.js +0 -57
- package/esm2015/rest-middlewares/container.middleware.js +0 -32
- package/esm2015/rest-middlewares/error-handler.middleware.js +0 -99
- package/esm2015/rest-middlewares/language.middleware.js +0 -28
- package/esm2015/rest-middlewares/request-ended.middleware.js +0 -33
- package/esm2015/rest-middlewares/request-started.middleware.js +0 -32
- package/esm2015/rest-openapi.js +0 -44
- package/esm2015/services/asset-processor.js +0 -129
- package/esm2015/services/asset-resolver.js +0 -53
- package/esm2015/services/assets.js +0 -181
- package/esm2015/services/backend-provider.js +0 -32
- package/esm2015/services/cache-processor.js +0 -34
- package/esm2015/services/cache.js +0 -93
- package/esm2015/services/configuration.js +0 -69
- package/esm2015/services/endpoint-provider.js +0 -29
- package/esm2015/services/entities/asset.js +0 -60
- package/esm2015/services/entities/base-entity.js +0 -37
- package/esm2015/services/entities/lazy-asset.js +0 -90
- package/esm2015/services/entities/progress.js +0 -213
- package/esm2015/services/entities/temp-asset.js +0 -64
- package/esm2015/services/fixtures.js +0 -45
- package/esm2015/services/gallery-cache.js +0 -36
- package/esm2015/services/gallery-image.js +0 -48
- package/esm2015/services/gallery.js +0 -138
- package/esm2015/services/id-generator.js +0 -63
- package/esm2015/services/job-manager.js +0 -221
- package/esm2015/services/lazy-assets.js +0 -83
- package/esm2015/services/logger.js +0 -31
- package/esm2015/services/mail-sender.js +0 -58
- package/esm2015/services/memory-cache.js +0 -84
- package/esm2015/services/mongo-connector.js +0 -58
- package/esm2015/services/open-api.js +0 -140
- package/esm2015/services/progresses.js +0 -118
- package/esm2015/services/template-renderer.js +0 -89
- package/esm2015/services/token-generator.js +0 -55
- package/esm2015/services/translation-provider.js +0 -54
- package/esm2015/services/translator.js +0 -84
- package/esm2015/services/user-manager.js +0 -47
- package/esm2015/socket-controllers/progress.controller.js +0 -82
- package/esm2015/socket-middlewares/compression.middleware.js +0 -19
- package/esm2015/static.js +0 -33
- package/esm2015/utilities/decorators.js +0 -54
- package/esm2015/utilities/di-container.js +0 -84
- package/esm2015/utilities/empty-job.js +0 -29
- package/esm2015/utilities/lazy-asset-generator.js +0 -46
- package/esm2015/utilities/mongoose.js +0 -225
- package/esm2015/utils.js +0 -672
- package/esm2015/validators.js +0 -51
- package/fesm2015/stemy-backend.js.map +0 -1
- package/rest-openapi.d.ts +0 -3
- package/stemy-backend.metadata.json +0 -1
- /package/{esm2015/stemy-backend.js → esm2020/stemy-backend.mjs} +0 -0
- /package/{esm2015/utilities/base-doc.js → esm2020/utilities/base-doc.mjs} +0 -0
- /package/{esm2015/utilities/tree.js → esm2020/utilities/tree.mjs} +0 -0
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { __decorate, __param } from "tslib";
|
|
2
|
+
import { inject, singleton } from "tsyringe";
|
|
3
|
+
import { getMetadataArgsStorage } from "routing-controllers";
|
|
4
|
+
import { routingControllersToSpec } from "routing-controllers-openapi";
|
|
5
|
+
import { validationMetadatasToSchemas } from "class-validator-jsonschema";
|
|
6
|
+
import { ValidationTypes } from "class-validator";
|
|
7
|
+
import { isDefined, isFunction, isObject } from "../utils";
|
|
8
|
+
import { IsFile, IsObjectId } from "../validators";
|
|
9
|
+
import { DI_CONTAINER, OPENAPI_VALIDATION } from "../common-types";
|
|
10
|
+
let OpenApi = class OpenApi {
|
|
11
|
+
constructor(container, customValidation) {
|
|
12
|
+
this.container = container;
|
|
13
|
+
this.customValidation = customValidation;
|
|
14
|
+
this.docs = null;
|
|
15
|
+
}
|
|
16
|
+
get apiDocs() {
|
|
17
|
+
if (!this.docs)
|
|
18
|
+
this.docs = this.createApiDocs();
|
|
19
|
+
return this.docs;
|
|
20
|
+
}
|
|
21
|
+
get apiDocsStr() {
|
|
22
|
+
if (!this.docsStr)
|
|
23
|
+
this.docsStr = JSON.stringify(this.apiDocs);
|
|
24
|
+
return this.docsStr;
|
|
25
|
+
}
|
|
26
|
+
async schemaToExample(src, req) {
|
|
27
|
+
if (src.$ref) {
|
|
28
|
+
const schemas = this.apiDocs.components.schemas;
|
|
29
|
+
const schema = src.$ref
|
|
30
|
+
.replace("#/components/schemas/", "")
|
|
31
|
+
.replace("#/definitions/", "");
|
|
32
|
+
return this.schemaToExample(schemas[schema], req);
|
|
33
|
+
}
|
|
34
|
+
let schema = src;
|
|
35
|
+
if (schema.oneOf) {
|
|
36
|
+
schema = Object.assign({}, schema, schema.oneOf[0]);
|
|
37
|
+
}
|
|
38
|
+
if (schema.type === "object") {
|
|
39
|
+
const result = {};
|
|
40
|
+
await Promise.all(Object.keys(schema.properties).map(async (key) => {
|
|
41
|
+
result[key] = await this.schemaToExample(schema.properties[key], req);
|
|
42
|
+
}));
|
|
43
|
+
return result;
|
|
44
|
+
}
|
|
45
|
+
if (schema.type === "array") {
|
|
46
|
+
return [await this.schemaToExample(schema.items, req)];
|
|
47
|
+
}
|
|
48
|
+
if (schema.type === "string") {
|
|
49
|
+
if (isDefined(schema.default)) {
|
|
50
|
+
if (isFunction(schema.default)) {
|
|
51
|
+
return schema.default(this.container);
|
|
52
|
+
}
|
|
53
|
+
return schema.default;
|
|
54
|
+
}
|
|
55
|
+
if (schema.format == "date") {
|
|
56
|
+
return new Date().toISOString().substr(0, 10);
|
|
57
|
+
}
|
|
58
|
+
if (schema.format == "date-time") {
|
|
59
|
+
return new Date().toISOString();
|
|
60
|
+
}
|
|
61
|
+
if (schema.enum) {
|
|
62
|
+
return schema.enum[0];
|
|
63
|
+
}
|
|
64
|
+
return "string";
|
|
65
|
+
}
|
|
66
|
+
if (schema.type === "number") {
|
|
67
|
+
return schema.default ?? 0;
|
|
68
|
+
}
|
|
69
|
+
else if (schema.type === "boolean") {
|
|
70
|
+
return schema.default ?? false;
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
return schema.default ?? null;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
createApiDocs() {
|
|
77
|
+
const storage = getMetadataArgsStorage();
|
|
78
|
+
const docs = routingControllersToSpec(storage);
|
|
79
|
+
docs.basePath = "/api/";
|
|
80
|
+
docs.definitions = validationMetadatasToSchemas({
|
|
81
|
+
additionalConverters: {
|
|
82
|
+
[ValidationTypes.CUSTOM_VALIDATION]: (meta, options) => {
|
|
83
|
+
const res = isFunction(this.customValidation) ? this.customValidation(meta, options) : this.customValidation;
|
|
84
|
+
if (isObject(res))
|
|
85
|
+
return res;
|
|
86
|
+
const constraints = meta.constraints || [];
|
|
87
|
+
if (meta.constraintCls === IsFile) {
|
|
88
|
+
return {
|
|
89
|
+
multi: constraints[0] || false,
|
|
90
|
+
type: "file"
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
if (meta.constraintCls === IsObjectId) {
|
|
94
|
+
return {
|
|
95
|
+
endpoint: constraints[0] || false,
|
|
96
|
+
multi: constraints[1] || false,
|
|
97
|
+
type: "list"
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
docs.components.schemas = docs.definitions;
|
|
105
|
+
return docs;
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
OpenApi = __decorate([
|
|
109
|
+
singleton(),
|
|
110
|
+
__param(0, inject(DI_CONTAINER)),
|
|
111
|
+
__param(1, inject(OPENAPI_VALIDATION))
|
|
112
|
+
], OpenApi);
|
|
113
|
+
export { OpenApi };
|
|
114
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3Blbi1hcGkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvb3Blbi1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxNQUFNLEVBQUUsU0FBUyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBRTNDLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQzNELE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQ3JFLE9BQU8sRUFBQyw0QkFBNEIsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQ3hFLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRCxPQUFPLEVBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDekQsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFDLFlBQVksRUFBa0Msa0JBQWtCLEVBQW9CLE1BQU0saUJBQWlCLENBQUM7QUFHN0csSUFBTSxPQUFPLEdBQWIsTUFBTSxPQUFPO0lBZWhCLFlBQTRDLFNBQStCLEVBQ3pCLGdCQUFtQztRQUR6QyxjQUFTLEdBQVQsU0FBUyxDQUFzQjtRQUN6QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQW1CO1FBQ2pGLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ3JCLENBQUM7SUFiRCxJQUFJLE9BQU87UUFDUCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUk7WUFBRSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNqRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDckIsQ0FBQztJQUVELElBQUksVUFBVTtRQUNWLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTztZQUFFLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0QsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3hCLENBQUM7SUFPRCxLQUFLLENBQUMsZUFBZSxDQUFDLEdBQW1DLEVBQUUsR0FBYztRQUNyRSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEVBQUU7WUFDVixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUM7WUFDaEQsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLElBQUk7aUJBQ2xCLE9BQU8sQ0FBQyx1QkFBdUIsRUFBRSxFQUFFLENBQUM7aUJBQ3BDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNuQyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQ3JEO1FBQ0QsSUFBSSxNQUFNLEdBQUcsR0FBbUIsQ0FBQztRQUNqQyxJQUFJLE1BQU0sQ0FBQyxLQUFLLEVBQUU7WUFDZCxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN2RDtRQUNELElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUU7WUFDMUIsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO1lBQ2xCLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFDLEdBQUcsRUFBQyxFQUFFO2dCQUM3RCxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDMUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNKLE9BQU8sTUFBTSxDQUFDO1NBQ2pCO1FBQ0QsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRTtZQUN6QixPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUMxRDtRQUNELElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUU7WUFDMUIsSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUMzQixJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUU7b0JBQzVCLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7aUJBQ3pDO2dCQUNELE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQzthQUN6QjtZQUNELElBQUksTUFBTSxDQUFDLE1BQU0sSUFBSSxNQUFNLEVBQUU7Z0JBQ3pCLE9BQU8sSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2FBQ2pEO1lBQ0QsSUFBSSxNQUFNLENBQUMsTUFBTSxJQUFJLFdBQVcsRUFBRTtnQkFDOUIsT0FBTyxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO2FBQ25DO1lBQ0QsSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFO2dCQUNiLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN6QjtZQUNELE9BQU8sUUFBUSxDQUFDO1NBQ25CO1FBQ0QsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRTtZQUMxQixPQUFPLE1BQU0sQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDO1NBQzlCO2FBQU0sSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRTtZQUNsQyxPQUFPLE1BQU0sQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDO1NBQ2xDO2FBQU07WUFDSCxPQUFPLE1BQU0sQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDO1NBQ2pDO0lBQ0wsQ0FBQztJQUVTLGFBQWE7UUFDbkIsTUFBTSxPQUFPLEdBQUcsc0JBQXNCLEVBQUUsQ0FBQztRQUN6QyxNQUFNLElBQUksR0FBRyx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztRQUN4QixJQUFJLENBQUMsV0FBVyxHQUFHLDRCQUE0QixDQUFDO1lBQzVDLG9CQUFvQixFQUFFO2dCQUNsQixDQUFDLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFO29CQUNuRCxNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztvQkFDN0csSUFBSSxRQUFRLENBQUMsR0FBRyxDQUFDO3dCQUFFLE9BQU8sR0FBRyxDQUFDO29CQUM5QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQztvQkFDM0MsSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLE1BQU0sRUFBRTt3QkFDL0IsT0FBTzs0QkFDSCxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUs7NEJBQzlCLElBQUksRUFBRSxNQUFNO3lCQUNSLENBQUM7cUJBQ1o7b0JBQ0QsSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLFVBQVUsRUFBRTt3QkFDbkMsT0FBTzs0QkFDSCxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUs7NEJBQ2pDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSzs0QkFDOUIsSUFBSSxFQUFFLE1BQU07eUJBQ1IsQ0FBQztxQkFDWjtvQkFDRCxPQUFPLElBQUksQ0FBQztnQkFDaEIsQ0FBQzthQUNKO1NBQ0osQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUMzQyxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0NBQ0osQ0FBQTtBQW5HWSxPQUFPO0lBRG5CLFNBQVMsRUFBRTtJQWdCSyxXQUFBLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQTtJQUNwQixXQUFBLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO0dBaEI5QixPQUFPLENBbUduQjtTQW5HWSxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtpbmplY3QsIHNpbmdsZXRvbn0gZnJvbSBcInRzeXJpbmdlXCI7XHJcbmltcG9ydCB7T3BlbkFQSU9iamVjdCwgUmVmZXJlbmNlT2JqZWN0LCBTY2hlbWFPYmplY3R9IGZyb20gXCJvcGVuYXBpMy10c1wiO1xyXG5pbXBvcnQge2dldE1ldGFkYXRhQXJnc1N0b3JhZ2V9IGZyb20gXCJyb3V0aW5nLWNvbnRyb2xsZXJzXCI7XHJcbmltcG9ydCB7cm91dGluZ0NvbnRyb2xsZXJzVG9TcGVjfSBmcm9tIFwicm91dGluZy1jb250cm9sbGVycy1vcGVuYXBpXCI7XHJcbmltcG9ydCB7dmFsaWRhdGlvbk1ldGFkYXRhc1RvU2NoZW1hc30gZnJvbSBcImNsYXNzLXZhbGlkYXRvci1qc29uc2NoZW1hXCI7XHJcbmltcG9ydCB7VmFsaWRhdGlvblR5cGVzfSBmcm9tIFwiY2xhc3MtdmFsaWRhdG9yXCI7XHJcbmltcG9ydCB7aXNEZWZpbmVkLCBpc0Z1bmN0aW9uLCBpc09iamVjdH0gZnJvbSBcIi4uL3V0aWxzXCI7XHJcbmltcG9ydCB7SXNGaWxlLCBJc09iamVjdElkfSBmcm9tIFwiLi4vdmFsaWRhdG9yc1wiO1xyXG5pbXBvcnQge0RJX0NPTlRBSU5FUiwgSURlcGVuZGVuY3lDb250YWluZXIsIElSZXF1ZXN0LCBPUEVOQVBJX1ZBTElEQVRJT04sIE9wZW5BcGlWYWxpZGF0aW9ufSBmcm9tIFwiLi4vY29tbW9uLXR5cGVzXCI7XHJcblxyXG5Ac2luZ2xldG9uKClcclxuZXhwb3J0IGNsYXNzIE9wZW5BcGkge1xyXG5cclxuICAgIHByb3RlY3RlZCBkb2NzOiBPcGVuQVBJT2JqZWN0O1xyXG4gICAgcHJvdGVjdGVkIGRvY3NTdHI6IHN0cmluZztcclxuXHJcbiAgICBnZXQgYXBpRG9jcygpOiBPcGVuQVBJT2JqZWN0IHtcclxuICAgICAgICBpZiAoIXRoaXMuZG9jcykgdGhpcy5kb2NzID0gdGhpcy5jcmVhdGVBcGlEb2NzKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZG9jcztcclxuICAgIH1cclxuXHJcbiAgICBnZXQgYXBpRG9jc1N0cigpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICghdGhpcy5kb2NzU3RyKSB0aGlzLmRvY3NTdHIgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmFwaURvY3MpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRvY3NTdHI7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3RydWN0b3IoQGluamVjdChESV9DT05UQUlORVIpIHByb3RlY3RlZCBjb250YWluZXI6IElEZXBlbmRlbmN5Q29udGFpbmVyLFxyXG4gICAgICAgICAgICAgICAgQGluamVjdChPUEVOQVBJX1ZBTElEQVRJT04pIHByb3RlY3RlZCBjdXN0b21WYWxpZGF0aW9uOiBPcGVuQXBpVmFsaWRhdGlvbikge1xyXG4gICAgICAgIHRoaXMuZG9jcyA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc2NoZW1hVG9FeGFtcGxlKHNyYzogUmVmZXJlbmNlT2JqZWN0IHwgU2NoZW1hT2JqZWN0LCByZXE/OiBJUmVxdWVzdCk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgaWYgKHNyYy4kcmVmKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNjaGVtYXMgPSB0aGlzLmFwaURvY3MuY29tcG9uZW50cy5zY2hlbWFzO1xyXG4gICAgICAgICAgICBjb25zdCBzY2hlbWEgPSBzcmMuJHJlZlxyXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoXCIjL2NvbXBvbmVudHMvc2NoZW1hcy9cIiwgXCJcIilcclxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKFwiIy9kZWZpbml0aW9ucy9cIiwgXCJcIik7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNjaGVtYVRvRXhhbXBsZShzY2hlbWFzW3NjaGVtYV0sIHJlcSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBzY2hlbWEgPSBzcmMgYXMgU2NoZW1hT2JqZWN0O1xyXG4gICAgICAgIGlmIChzY2hlbWEub25lT2YpIHtcclxuICAgICAgICAgICAgc2NoZW1hID0gT2JqZWN0LmFzc2lnbih7fSwgc2NoZW1hLCBzY2hlbWEub25lT2ZbMF0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2NoZW1hLnR5cGUgPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0ge307XHJcbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKE9iamVjdC5rZXlzKHNjaGVtYS5wcm9wZXJ0aWVzKS5tYXAoYXN5bmMga2V5ID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdFtrZXldID0gYXdhaXQgdGhpcy5zY2hlbWFUb0V4YW1wbGUoc2NoZW1hLnByb3BlcnRpZXNba2V5XSwgcmVxKTtcclxuICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2NoZW1hLnR5cGUgPT09IFwiYXJyYXlcIikge1xyXG4gICAgICAgICAgICByZXR1cm4gW2F3YWl0IHRoaXMuc2NoZW1hVG9FeGFtcGxlKHNjaGVtYS5pdGVtcywgcmVxKV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzY2hlbWEudHlwZSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICBpZiAoaXNEZWZpbmVkKHNjaGVtYS5kZWZhdWx0KSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24oc2NoZW1hLmRlZmF1bHQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNjaGVtYS5kZWZhdWx0KHRoaXMuY29udGFpbmVyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBzY2hlbWEuZGVmYXVsdDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoc2NoZW1hLmZvcm1hdCA9PSBcImRhdGVcIikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zdWJzdHIoMCwgMTApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChzY2hlbWEuZm9ybWF0ID09IFwiZGF0ZS10aW1lXCIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHNjaGVtYS5lbnVtKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc2NoZW1hLmVudW1bMF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIFwic3RyaW5nXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzY2hlbWEudHlwZSA9PT0gXCJudW1iZXJcIikge1xyXG4gICAgICAgICAgICByZXR1cm4gc2NoZW1hLmRlZmF1bHQgPz8gMDtcclxuICAgICAgICB9IGVsc2UgaWYgKHNjaGVtYS50eXBlID09PSBcImJvb2xlYW5cIikge1xyXG4gICAgICAgICAgICByZXR1cm4gc2NoZW1hLmRlZmF1bHQgPz8gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHNjaGVtYS5kZWZhdWx0ID8/IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBjcmVhdGVBcGlEb2NzKCk6IE9wZW5BUElPYmplY3Qge1xyXG4gICAgICAgIGNvbnN0IHN0b3JhZ2UgPSBnZXRNZXRhZGF0YUFyZ3NTdG9yYWdlKCk7XHJcbiAgICAgICAgY29uc3QgZG9jcyA9IHJvdXRpbmdDb250cm9sbGVyc1RvU3BlYyhzdG9yYWdlKTtcclxuICAgICAgICBkb2NzLmJhc2VQYXRoID0gXCIvYXBpL1wiO1xyXG4gICAgICAgIGRvY3MuZGVmaW5pdGlvbnMgPSB2YWxpZGF0aW9uTWV0YWRhdGFzVG9TY2hlbWFzKHtcclxuICAgICAgICAgICAgYWRkaXRpb25hbENvbnZlcnRlcnM6IHtcclxuICAgICAgICAgICAgICAgIFtWYWxpZGF0aW9uVHlwZXMuQ1VTVE9NX1ZBTElEQVRJT05dOiAobWV0YSwgb3B0aW9ucykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGlzRnVuY3Rpb24odGhpcy5jdXN0b21WYWxpZGF0aW9uKSA/IHRoaXMuY3VzdG9tVmFsaWRhdGlvbihtZXRhLCBvcHRpb25zKSA6IHRoaXMuY3VzdG9tVmFsaWRhdGlvbjtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNPYmplY3QocmVzKSkgcmV0dXJuIHJlcztcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb25zdHJhaW50cyA9IG1ldGEuY29uc3RyYWludHMgfHwgW107XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1ldGEuY29uc3RyYWludENscyA9PT0gSXNGaWxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aTogY29uc3RyYWludHNbMF0gfHwgZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImZpbGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGFzIGFueTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1ldGEuY29uc3RyYWludENscyA9PT0gSXNPYmplY3RJZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnQ6IGNvbnN0cmFpbnRzWzBdIHx8IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGk6IGNvbnN0cmFpbnRzWzFdIHx8IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJsaXN0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBhcyBhbnk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZG9jcy5jb21wb25lbnRzLnNjaGVtYXMgPSBkb2NzLmRlZmluaXRpb25zO1xyXG4gICAgICAgIHJldHVybiBkb2NzO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { singleton } from "tsyringe";
|
|
3
|
+
import { ObjectId } from "bson";
|
|
4
|
+
import { promiseTimeout } from "../utils";
|
|
5
|
+
import { Progress } from "./entities/progress";
|
|
6
|
+
let Progresses = class Progresses {
|
|
7
|
+
constructor(connector, jobMan) {
|
|
8
|
+
this.connector = connector;
|
|
9
|
+
this.jobMan = jobMan;
|
|
10
|
+
this.collection = connector.database.collection("progresses");
|
|
11
|
+
this.progresses = {};
|
|
12
|
+
this.jobMan.on("progress-changed", progress => {
|
|
13
|
+
const id = progress.id;
|
|
14
|
+
this.progresses[id] = new Progress(new ObjectId(id), progress, this.collection);
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
async waitToFinish(id) {
|
|
18
|
+
return Promise.race([
|
|
19
|
+
this.waitForProgress(id, async () => {
|
|
20
|
+
let progress = this.progresses[id];
|
|
21
|
+
if (!progress || progress.percent < 100) {
|
|
22
|
+
progress = await this.get(id);
|
|
23
|
+
}
|
|
24
|
+
if (!progress) {
|
|
25
|
+
throw new Error(`Progress does not exists with id: ${id}`);
|
|
26
|
+
}
|
|
27
|
+
return progress;
|
|
28
|
+
}, 500),
|
|
29
|
+
this.waitForProgress(id, async () => {
|
|
30
|
+
return this.progresses[id] || null;
|
|
31
|
+
}, 25)
|
|
32
|
+
]);
|
|
33
|
+
}
|
|
34
|
+
async get(id) {
|
|
35
|
+
return !id ? null : this.find({ _id: new ObjectId(id) });
|
|
36
|
+
}
|
|
37
|
+
async find(where) {
|
|
38
|
+
const data = await this.collection.findOne(where);
|
|
39
|
+
return !data ? null : new Progress(data._id, data, this.collection);
|
|
40
|
+
}
|
|
41
|
+
async create(max = 100) {
|
|
42
|
+
if (isNaN(max) || max <= 0) {
|
|
43
|
+
throw new Error(`Max progress value must be bigger than zero`);
|
|
44
|
+
}
|
|
45
|
+
const data = {
|
|
46
|
+
current: 0,
|
|
47
|
+
max: max,
|
|
48
|
+
message: "",
|
|
49
|
+
error: "",
|
|
50
|
+
canceled: false
|
|
51
|
+
};
|
|
52
|
+
const res = await this.collection.insertOne(data);
|
|
53
|
+
return new Progress(res.insertedId, data, this.collection);
|
|
54
|
+
}
|
|
55
|
+
async remove(id) {
|
|
56
|
+
await this.collection.deleteOne({ _id: new ObjectId(id) });
|
|
57
|
+
return id;
|
|
58
|
+
}
|
|
59
|
+
async waitForProgress(id, cb, delay) {
|
|
60
|
+
let isFinished = false;
|
|
61
|
+
let progress = null;
|
|
62
|
+
let waitTime = 0;
|
|
63
|
+
while (!isFinished) {
|
|
64
|
+
progress = await cb();
|
|
65
|
+
waitTime += delay;
|
|
66
|
+
if (progress) {
|
|
67
|
+
if (progress.error) {
|
|
68
|
+
throw new Error(progress.error);
|
|
69
|
+
}
|
|
70
|
+
isFinished = progress.percent >= 100;
|
|
71
|
+
}
|
|
72
|
+
if (!isFinished) {
|
|
73
|
+
if (waitTime >= this.jobMan.maxTimeout) {
|
|
74
|
+
throw new Error(`Progress with id: ${id} probably never will be finished!`);
|
|
75
|
+
}
|
|
76
|
+
await promiseTimeout(delay);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return progress;
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
Progresses = __decorate([
|
|
83
|
+
singleton()
|
|
84
|
+
], Progresses);
|
|
85
|
+
export { Progresses };
|
|
86
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3Nlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9wcm9ncmVzc2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ25DLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFJOUIsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUd4QyxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFHdEMsSUFBTSxVQUFVLEdBQWhCLE1BQU0sVUFBVTtJQUtuQixZQUFxQixTQUF5QixFQUFXLE1BQWtCO1FBQXRELGNBQVMsR0FBVCxTQUFTLENBQWdCO1FBQVcsV0FBTSxHQUFOLE1BQU0sQ0FBWTtRQUN2RSxJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLGtCQUFrQixFQUFFLFFBQVEsQ0FBQyxFQUFFO1lBQzFDLE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQyxFQUFZLENBQUM7WUFDakMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLFFBQVEsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRSxRQUFlLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzNGLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELEtBQUssQ0FBQyxZQUFZLENBQUMsRUFBVTtRQUN6QixPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFDaEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxJQUFJLEVBQUU7Z0JBQ2hDLElBQUksUUFBUSxHQUFH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QVUsR0FBRyxRQUFRLENBQUMsT0FBTyxJQUFJLEdBQUcsQ0FBQzthQUN4QztZQUNELElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQ2IsSUFBSSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUU7b0JBQ3BDLE1BQU0sSUFBSSxLQUFLLENBQUMscUJBQXFCLEVBQUUsbUNBQW1DLENBQUMsQ0FBQztpQkFDL0U7Z0JBQ0QsTUFBTSxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDL0I7U0FDSjtRQUNELE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7Q0FDSixDQUFBO0FBbkZZLFVBQVU7SUFEdEIsU0FBUyxFQUFFO0dBQ0MsVUFBVSxDQW1GdEI7U0FuRlksVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7c2luZ2xldG9ufSBmcm9tIFwidHN5cmluZ2VcIjtcclxuaW1wb3J0IHtPYmplY3RJZH0gZnJvbSBcImJzb25cIjtcclxuaW1wb3J0IHtDb2xsZWN0aW9ufSBmcm9tIFwibW9uZ29kYlwiO1xyXG5pbXBvcnQge0ZpbHRlclF1ZXJ5fSBmcm9tIFwibW9uZ29vc2VcIjtcclxuaW1wb3J0IHtJUHJvZ3Jlc3N9IGZyb20gXCIuLi9jb21tb24tdHlwZXNcIjtcclxuaW1wb3J0IHtwcm9taXNlVGltZW91dH0gZnJvbSBcIi4uL3V0aWxzXCI7XHJcbmltcG9ydCB7TW9uZ29Db25uZWN0b3J9IGZyb20gXCIuL21vbmdvLWNvbm5lY3RvclwiO1xyXG5pbXBvcnQge0pvYk1hbmFnZXJ9IGZyb20gXCIuL2pvYi1tYW5hZ2VyXCI7XHJcbmltcG9ydCB7UHJvZ3Jlc3N9IGZyb20gXCIuL2VudGl0aWVzL3Byb2dyZXNzXCI7XHJcblxyXG5Ac2luZ2xldG9uKClcclxuZXhwb3J0IGNsYXNzIFByb2dyZXNzZXMge1xyXG5cclxuICAgIHByb3RlY3RlZCBjb2xsZWN0aW9uOiBDb2xsZWN0aW9uPFBhcnRpYWw8SVByb2dyZXNzPj47XHJcbiAgICBwcm90ZWN0ZWQgcHJvZ3Jlc3Nlczoge1tpZDogc3RyaW5nXTogSVByb2dyZXNzfTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihyZWFkb25seSBjb25uZWN0b3I6IE1vbmdvQ29ubmVjdG9yLCByZWFkb25seSBqb2JNYW46IEpvYk1hbmFnZXIpIHtcclxuICAgICAgICB0aGlzLmNvbGxlY3Rpb24gPSBjb25uZWN0b3IuZGF0YWJhc2UuY29sbGVjdGlvbihcInByb2dyZXNzZXNcIik7XHJcbiAgICAgICAgdGhpcy5wcm9ncmVzc2VzID0ge307XHJcbiAgICAgICAgdGhpcy5qb2JNYW4ub24oXCJwcm9ncmVzcy1jaGFuZ2VkXCIsIHByb2dyZXNzID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaWQgPSBwcm9ncmVzcy5pZCBhcyBzdHJpbmc7XHJcbiAgICAgICAgICAgIHRoaXMucHJvZ3Jlc3Nlc1tpZF0gPSBuZXcgUHJvZ3Jlc3MobmV3IE9iamVjdElkKGlkKSwgcHJvZ3Jlc3MgYXMgYW55LCB0aGlzLmNvbGxlY3Rpb24pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHdhaXRUb0ZpbmlzaChpZDogc3RyaW5nKTogUHJvbWlzZTxJUHJvZ3Jlc3M+IHtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yYWNlKFtcclxuICAgICAgICAgICAgdGhpcy53YWl0Rm9yUHJvZ3Jlc3MoaWQsIGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBwcm9ncmVzcyA9IHRoaXMucHJvZ3Jlc3Nlc1tpZF07XHJcbiAgICAgICAgICAgICAgICBpZiAoIXByb2dyZXNzIHx8IHByb2dyZXNzLnBlcmNlbnQgPCAxMDApIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9ncmVzcyA9IGF3YWl0IHRoaXMuZ2V0KGlkKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICghcHJvZ3Jlc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFByb2dyZXNzIGRvZXMgbm90IGV4aXN0cyB3aXRoIGlkOiAke2lkfWApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb2dyZXNzO1xyXG4gICAgICAgICAgICB9LCA1MDApLFxyXG4gICAgICAgICAgICB0aGlzLndhaXRGb3JQcm9ncmVzcyhpZCwgYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvZ3Jlc3Nlc1tpZF0gfHwgbnVsbDtcclxuICAgICAgICAgICAgfSwgMjUpXHJcbiAgICAgICAgXSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0KGlkOiBzdHJpbmcpOiBQcm9taXNlPElQcm9ncmVzcz4ge1xyXG4gICAgICAgIHJldHVybiAhaWQgPyBudWxsIDogdGhpcy5maW5kKHtfaWQ6IG5ldyBPYmplY3RJZChpZCl9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmaW5kKHdoZXJlOiBGaWx0ZXJRdWVyeTxJUHJvZ3Jlc3M+KTogUHJvbWlzZTxJUHJvZ3Jlc3M+IHtcclxuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5jb2xsZWN0aW9uLmZpbmRPbmUod2hlcmUpO1xyXG4gICAgICAgIHJldHVybiAhZGF0YSA/IG51bGwgOiBuZXcgUHJvZ3Jlc3MoZGF0YS5faWQsIGRhdGEsIHRoaXMuY29sbGVjdGlvbik7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY3JlYXRlKG1heDogbnVtYmVyID0gMTAwKTogUHJvbWlzZTxJUHJvZ3Jlc3M+IHtcclxuICAgICAgICBpZiAoaXNOYU4obWF4KSB8fCBtYXggPD0gMCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE1heCBwcm9ncmVzcyB2YWx1ZSBtdXN0IGJlIGJpZ2dlciB0aGFuIHplcm9gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZGF0YSA9IHtcclxuICAgICAgICAgICAgY3VycmVudDogMCxcclxuICAgICAgICAgICAgbWF4OiBtYXgsXHJcbiAgICAgICAgICAgIG1lc3NhZ2U6IFwiXCIsXHJcbiAgICAgICAgICAgIGVycm9yOiBcIlwiLFxyXG4gICAgICAgICAgICBjYW5jZWxlZDogZmFsc2VcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuY29sbGVjdGlvbi5pbnNlcnRPbmUoZGF0YSk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9ncmVzcyhyZXMuaW5zZXJ0ZWRJZCwgZGF0YSwgdGhpcy5jb2xsZWN0aW9uKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyByZW1vdmUoaWQ6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5jb2xsZWN0aW9uLmRlbGV0ZU9uZSh7X2lkOiBuZXcgT2JqZWN0SWQoaWQpfSk7XHJcbiAgICAgICAgcmV0dXJuIGlkO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBhc3luYyB3YWl0Rm9yUHJvZ3Jlc3MoaWQ6IHN0cmluZywgY2I6ICgpID0+IFByb21pc2U8SVByb2dyZXNzPiwgZGVsYXk6IG51bWJlcik6IFByb21pc2U8SVByb2dyZXNzPiB7XHJcbiAgICAgICAgbGV0IGlzRmluaXNoZWQgPSBmYWxzZTtcclxuICAgICAgICBsZXQgcHJvZ3Jlc3M6IElQcm9ncmVzcyA9IG51bGw7XHJcbiAgICAgICAgbGV0IHdhaXRUaW1lOiBudW1iZXIgPSAwO1xyXG4gICAgICAgIHdoaWxlICghaXNGaW5pc2hlZCkge1xyXG4gICAgICAgICAgICBwcm9ncmVzcyA9IGF3YWl0IGNiKCk7XHJcbiAgICAgICAgICAgIHdhaXRUaW1lICs9IGRlbGF5O1xyXG4gICAgICAgICAgICBpZiAocHJvZ3Jlc3MpIHtcclxuICAgICAgICAgICAgICAgIGlmIChwcm9ncmVzcy5lcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihwcm9ncmVzcy5lcnJvcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpc0ZpbmlzaGVkID0gcHJvZ3Jlc3MucGVyY2VudCA+PSAxMDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFpc0ZpbmlzaGVkKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAod2FpdFRpbWUgPj0gdGhpcy5qb2JNYW4ubWF4VGltZW91dCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUHJvZ3Jlc3Mgd2l0aCBpZDogJHtpZH0gcHJvYmFibHkgbmV2ZXIgd2lsbCBiZSBmaW5pc2hlZCFgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGF3YWl0IHByb21pc2VUaW1lb3V0KGRlbGF5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcHJvZ3Jlc3M7XHJcbiAgICB9XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { singleton } from "tsyringe";
|
|
3
|
+
import { lstatSync, readdir, readFileSync } from "fs";
|
|
4
|
+
import { join } from "path";
|
|
5
|
+
import * as Handlebars from "handlebars";
|
|
6
|
+
let TemplateRenderer = class TemplateRenderer {
|
|
7
|
+
constructor(translator, config) {
|
|
8
|
+
this.translator = translator;
|
|
9
|
+
this.config = config;
|
|
10
|
+
this.templates = {};
|
|
11
|
+
Handlebars.registerHelper(`object`, function ({ hash }) {
|
|
12
|
+
return hash;
|
|
13
|
+
});
|
|
14
|
+
Handlebars.registerHelper(`now`, function () {
|
|
15
|
+
return new Date().getTime();
|
|
16
|
+
});
|
|
17
|
+
Handlebars.registerHelper(`keys`, function (obj) {
|
|
18
|
+
return !obj ? [] : Object.keys(obj);
|
|
19
|
+
});
|
|
20
|
+
Handlebars.registerHelper(`translate`, function (key, params) {
|
|
21
|
+
return translator.getTranslationSync(this.language, key, params);
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
init() {
|
|
25
|
+
this.initPromise = this.initPromise || this.parseTemplates(this.config.resolve("templatesDir"), []);
|
|
26
|
+
return this.initPromise;
|
|
27
|
+
}
|
|
28
|
+
async parseTemplates(dir, dirPath) {
|
|
29
|
+
return new Promise(resolve => {
|
|
30
|
+
readdir(dir, async (err, files) => {
|
|
31
|
+
for (let file of files) {
|
|
32
|
+
const path = join(dir, file);
|
|
33
|
+
if (lstatSync(path).isDirectory()) {
|
|
34
|
+
await this.parseTemplates(join(dir, file), dirPath.concat([file]));
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
const parts = file.split(".");
|
|
38
|
+
parts.pop();
|
|
39
|
+
const name = parts.join(".");
|
|
40
|
+
const fullName = dirPath.concat([name]).join("-");
|
|
41
|
+
const content = readFileSync(path).toString("utf8");
|
|
42
|
+
this.templates[fullName] = Handlebars.compile(content);
|
|
43
|
+
Handlebars.registerPartial(fullName, content);
|
|
44
|
+
}
|
|
45
|
+
resolve();
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
async render(template, language, context) {
|
|
50
|
+
await this.init();
|
|
51
|
+
await this.translator.getDictionary(language);
|
|
52
|
+
if (!this.templates[template]) {
|
|
53
|
+
return Promise.reject(`Template not found with name: ${template}`);
|
|
54
|
+
}
|
|
55
|
+
context = Object.assign({ language }, context || {});
|
|
56
|
+
const res = this.templates[template](context);
|
|
57
|
+
return res instanceof Error ? await Promise.reject(res) : res;
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
TemplateRenderer = __decorate([
|
|
61
|
+
singleton()
|
|
62
|
+
], TemplateRenderer);
|
|
63
|
+
export { TemplateRenderer };
|
|
64
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtcmVuZGVyZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvdGVtcGxhdGUtcmVuZGVyZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDbkMsT0FBTyxFQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFDLE1BQU0sSUFBSSxDQUFDO0FBQ3BELE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDMUIsT0FBTyxLQUFLLFVBQVUsTUFBTSxZQUFZLENBQUM7QUFNbEMsSUFBTSxnQkFBZ0IsR0FBdEIsTUFBTSxnQkFBZ0I7SUFNekIsWUFBcUIsVUFBc0IsRUFBVyxNQUFxQjtRQUF0RCxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQVcsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUN2RSxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNwQixVQUFVLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxVQUFTLEVBQUMsSUFBSSxFQUFDO1lBQy9DLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsVUFBVSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUU7WUFDN0IsT0FBTyxJQUFJLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2hDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsVUFBVSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsVUFBUyxHQUFRO1lBQy9DLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN4QyxDQUFDLENBQUMsQ0FBQztRQUNILFVBQVUsQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLFVBQVUsR0FBVyxFQUFFLE1BQVc7WUFDckUsT0FBTyxVQUFVLENB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LCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3NpbmdsZXRvbn0gZnJvbSBcInRzeXJpbmdlXCI7XHJcbmltcG9ydCB7bHN0YXRTeW5jLCByZWFkZGlyLCByZWFkRmlsZVN5bmN9IGZyb20gXCJmc1wiO1xyXG5pbXBvcnQge2pvaW59IGZyb20gXCJwYXRoXCI7XHJcbmltcG9ydCAqIGFzIEhhbmRsZWJhcnMgZnJvbSBcImhhbmRsZWJhcnNcIjtcclxuXHJcbmltcG9ydCB7VHJhbnNsYXRvcn0gZnJvbSBcIi4vdHJhbnNsYXRvclwiO1xyXG5pbXBvcnQge0NvbmZpZ3VyYXRpb259IGZyb20gXCIuL2NvbmZpZ3VyYXRpb25cIjtcclxuXHJcbkBzaW5nbGV0b24oKVxyXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVSZW5kZXJlciB7XHJcblxyXG4gICAgdGVtcGxhdGVzOiB7W25hbWU6IHN0cmluZ106IEZ1bmN0aW9ufTtcclxuXHJcbiAgICBwcm90ZWN0ZWQgaW5pdFByb21pc2U6IFByb21pc2U8YW55PjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihyZWFkb25seSB0cmFuc2xhdG9yOiBUcmFuc2xhdG9yLCByZWFkb25seSBjb25maWc6IENvbmZpZ3VyYXRpb24pIHtcclxuICAgICAgICB0aGlzLnRlbXBsYXRlcyA9IHt9O1xyXG4gICAgICAgIEhhbmRsZWJhcnMucmVnaXN0ZXJIZWxwZXIoYG9iamVjdGAsIGZ1bmN0aW9uKHtoYXNofSkge1xyXG4gICAgICAgICAgICByZXR1cm4gaGFzaDtcclxuICAgICAgICB9KTtcclxuICAgICAgICBIYW5kbGViYXJzLnJlZ2lzdGVySGVscGVyKGBub3dgLCBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIEhhbmRsZWJhcnMucmVnaXN0ZXJIZWxwZXIoYGtleXNgLCBmdW5jdGlvbihvYmo6IGFueSkge1xyXG4gICAgICAgICAgICByZXR1cm4gIW9iaiA/IFtdIDogT2JqZWN0LmtleXMob2JqKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBIYW5kbGViYXJzLnJlZ2lzdGVySGVscGVyKGB0cmFuc2xhdGVgLCBmdW5jdGlvbiAoa2V5OiBzdHJpbmcsIHBhcmFtczogYW55KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cmFuc2xhdG9yLmdldFRyYW5zbGF0aW9uU3luYyh0aGlzLmxhbmd1YWdlLCBrZXksIHBhcmFtcyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGluaXQoKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICB0aGlzLmluaXRQcm9taXNlID0gdGhpcy5pbml0UHJvbWlzZSB8fCB0aGlzLnBhcnNlVGVtcGxhdGVzKHRoaXMuY29uZmlnLnJlc29sdmUoXCJ0ZW1wbGF0ZXNEaXJcIiksIFtdKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5pbml0UHJvbWlzZTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBwYXJzZVRlbXBsYXRlcyhkaXI6IHN0cmluZywgZGlyUGF0aDogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4ocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgICAgIHJlYWRkaXIoZGlyLCBhc3luYyAoZXJyLCBmaWxlcykgPT4ge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgZmlsZSBvZiBmaWxlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdGggPSBqb2luKGRpciwgZmlsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxzdGF0U3luYyhwYXRoKS5pc0RpcmVjdG9yeSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGFyc2VUZW1wbGF0ZXMoam9pbihkaXIsIGZpbGUpLCBkaXJQYXRoLmNvbmNhdChbZmlsZV0pKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnRzID0gZmlsZS5zcGxpdChcIi5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFydHMucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IHBhcnRzLmpvaW4oXCIuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZ1bGxOYW1lID0gZGlyUGF0aC5jb25jYXQoW25hbWVdKS5qb2luKFwiLVwiKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250ZW50ID0gcmVhZEZpbGVTeW5jKHBhdGgpLnRvU3RyaW5nKFwidXRmOFwiKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRlbXBsYXRlc1tmdWxsTmFtZV0gPSBIYW5kbGViYXJzLmNvbXBpbGUoY29udGVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgSGFuZGxlYmFycy5yZWdpc3RlclBhcnRpYWwoZnVsbE5hbWUsIGNvbnRlbnQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyByZW5kZXIodGVtcGxhdGU6IHN0cmluZywgbGFuZ3VhZ2U6IHN0cmluZywgY29udGV4dD86IGFueSk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5pbml0KCk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy50cmFuc2xhdG9yLmdldERpY3Rpb25hcnkobGFuZ3VhZ2UpO1xyXG4gICAgICAgIGlmICghdGhpcy50ZW1wbGF0ZXNbdGVtcGxhdGVdKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChgVGVtcGxhdGUgbm90IGZvdW5kIHdpdGggbmFtZTogJHt0ZW1wbGF0ZX1gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29udGV4dCA9IE9iamVjdC5hc3NpZ24oe2xhbmd1YWdlfSwgY29udGV4dCB8fCB7fSk7XHJcbiAgICAgICAgY29uc3QgcmVzID0gdGhpcy50ZW1wbGF0ZXNbdGVtcGxhdGVdKGNvbnRleHQpO1xyXG4gICAgICAgIHJldHVybiByZXMgaW5zdGFuY2VvZiBFcnJvciA/IGF3YWl0IFByb21pc2UucmVqZWN0KHJlcykgOiByZXM7XHJcbiAgICB9XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { __decorate, __param } from "tslib";
|
|
2
|
+
import { injectAll, singleton } from "tsyringe";
|
|
3
|
+
import { CommandsAddon } from "@stemy/terminal-commands-addon";
|
|
4
|
+
import { TERMINAL_COMMAND } from "../common-types";
|
|
5
|
+
import { camelCaseToDash, colorize, ConsoleColor } from "../utils";
|
|
6
|
+
let TerminalManager = class TerminalManager {
|
|
7
|
+
constructor(logger, config, commands) {
|
|
8
|
+
this.logger = logger;
|
|
9
|
+
this.config = config;
|
|
10
|
+
this.servicePassword = config.resolve("servicePassword");
|
|
11
|
+
this.suggestions = {
|
|
12
|
+
login: async (args) => {
|
|
13
|
+
if (args.length > 2) {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
const input = `${args.at(1).label}`;
|
|
17
|
+
return (!input) ? [] : [{
|
|
18
|
+
id: input,
|
|
19
|
+
label: input,
|
|
20
|
+
masked: true
|
|
21
|
+
}];
|
|
22
|
+
},
|
|
23
|
+
...commands.reduce((acc, command) => {
|
|
24
|
+
command.name = camelCaseToDash(command.name || command.constructor.name || "");
|
|
25
|
+
if (!command.name || !command.suggest)
|
|
26
|
+
return acc;
|
|
27
|
+
acc[command.name] = async (a, t) => command.suggest(a, t);
|
|
28
|
+
return acc;
|
|
29
|
+
}, {})
|
|
30
|
+
};
|
|
31
|
+
this.commands = commands.reduce((acc, command) => {
|
|
32
|
+
if (!command.name)
|
|
33
|
+
return acc;
|
|
34
|
+
acc[command.name] = async (a, t) => command.execute(a, t);
|
|
35
|
+
return acc;
|
|
36
|
+
}, {});
|
|
37
|
+
this.loggedOutCommands = ["login", "clear"];
|
|
38
|
+
this.loggedInCommands = Object.keys(this.commands);
|
|
39
|
+
this.loggedInCommands.push("logout");
|
|
40
|
+
console.log(`Current service password is: ${colorize(this.servicePassword, ConsoleColor.FgGreen)}`);
|
|
41
|
+
}
|
|
42
|
+
loadAddons(terminal) {
|
|
43
|
+
let loggedIn = false;
|
|
44
|
+
const addon = new CommandsAddon({
|
|
45
|
+
commands: {
|
|
46
|
+
login: async (args, terminal) => {
|
|
47
|
+
if (args.at(1).label === this.servicePassword) {
|
|
48
|
+
loggedIn = true;
|
|
49
|
+
terminal.writeln("Logged in as admin");
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
throw new Error("Invalid login");
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
logout: async (args, terminal) => {
|
|
56
|
+
loggedIn = false;
|
|
57
|
+
terminal.writeln("Logged out");
|
|
58
|
+
},
|
|
59
|
+
...this.commands
|
|
60
|
+
},
|
|
61
|
+
suggestCommands: async () => {
|
|
62
|
+
if (loggedIn) {
|
|
63
|
+
return this.loggedInCommands;
|
|
64
|
+
}
|
|
65
|
+
return this.loggedOutCommands;
|
|
66
|
+
},
|
|
67
|
+
suggestions: this.suggestions
|
|
68
|
+
});
|
|
69
|
+
terminal.loadAddon(addon);
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
TerminalManager = __decorate([
|
|
73
|
+
singleton(),
|
|
74
|
+
__param(2, injectAll(TERMINAL_COMMAND))
|
|
75
|
+
], TerminalManager);
|
|
76
|
+
export { TerminalManager };
|
|
77
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVybWluYWwtbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy90ZXJtaW5hbC1tYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFNBQVMsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUM5QyxPQUFPLEVBQUMsYUFBYSxFQUE4QixNQUFNLGdDQUFnQyxDQUFDO0FBQzFGLE9BQU8sRUFBOEIsZ0JBQWdCLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUc5RSxPQUFPLEVBQUMsZUFBZSxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFHMUQsSUFBTSxlQUFlLEdBQXJCLE1BQU0sZUFBZTtJQU94QixZQUFzQixNQUFjLEVBQ2QsTUFBcUIsRUFDRixRQUE0QjtRQUYvQyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUV2QyxJQUFJLENBQUMsZUFBZSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsV0FBVyxHQUFHO1lBQ2YsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRTtnQkFDbEIsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtvQkFDakIsT0FBTyxJQUFJLENBQUM7aUJBQ2Y7Z0JBQ0QsTUFBTSxLQUFLLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNwQyxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUNwQixFQUFFLEVBQUUsS0FBSzt3QkFDVCxLQUFLLEVBQUUsS0FBSzt3QkFDWixNQUFNLEVBQUUsSUFBSTtxQkFDZixDQUFDLENBQUM7WUFDUCxDQUFDO1lB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QUFyRVksZUFBZTtJQUQzQixTQUFTLEVBQUU7SUFVSyxXQUFBLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO0dBVC9CLGVBQWUsQ0FxRTNCO1NBckVZLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2luamVjdEFsbCwgc2luZ2xldG9ufSBmcm9tIFwidHN5cmluZ2VcIjtcclxuaW1wb3J0IHtDb21tYW5kc0FkZG9uLCBJQ29tbWFuZE1hcCwgSVN1Z2dlc3Rpb25NYXB9IGZyb20gXCJAc3RlbXkvdGVybWluYWwtY29tbWFuZHMtYWRkb25cIjtcclxuaW1wb3J0IHtJVGVybWluYWwsIElUZXJtaW5hbENvbW1hbmQsIFRFUk1JTkFMX0NPTU1BTkR9IGZyb20gXCIuLi9jb21tb24tdHlwZXNcIjtcclxuaW1wb3J0IHtMb2dnZXJ9IGZyb20gXCIuL2xvZ2dlclwiO1xyXG5pbXBvcnQge0NvbmZpZ3VyYXRpb259IGZyb20gXCIuL2NvbmZpZ3VyYXRpb25cIjtcclxuaW1wb3J0IHtjYW1lbENhc2VUb0Rhc2gsIGNvbG9yaXplLCBDb25zb2xlQ29sb3J9IGZyb20gXCIuLi91dGlsc1wiO1xyXG5cclxuQHNpbmdsZXRvbigpXHJcbmV4cG9ydCBjbGFzcyBUZXJtaW5hbE1hbmFnZXIge1xyXG4gICAgcHJvdGVjdGVkIHNlcnZpY2VQYXNzd29yZDogc3RyaW5nO1xyXG4gICAgcHJvdGVjdGVkIHN1Z2dlc3Rpb25zOiBJU3VnZ2VzdGlvbk1hcDtcclxuICAgIHByb3RlY3RlZCBjb21tYW5kczogSUNvbW1hbmRNYXA7XHJcbiAgICBwcm90ZWN0ZWQgbG9nZ2VkT3V0Q29tbWFuZHM6IHN0cmluZ1tdO1xyXG4gICAgcHJvdGVjdGVkIGxvZ2dlZEluQ29tbWFuZHM6IHN0cmluZ1tdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBsb2dnZXI6IExvZ2dlcixcclxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCBjb25maWc6IENvbmZpZ3VyYXRpb24sXHJcbiAgICAgICAgICAgICAgICBAaW5qZWN0QWxsKFRFUk1JTkFMX0NPTU1BTkQpIGNvbW1hbmRzOiBJVGVybWluYWxDb21tYW5kW10pIHtcclxuICAgICAgICB0aGlzLnNlcnZpY2VQYXNzd29yZCA9IGNvbmZpZy5yZXNvbHZlKFwic2VydmljZVBhc3N3b3JkXCIpO1xyXG4gICAgICAgIHRoaXMuc3VnZ2VzdGlvbnMgPSB7XHJcbiAgICAgICAgICAgIGxvZ2luOiBhc3luYyAoYXJncykgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgaW5wdXQgPSBgJHthcmdzLmF0KDEpLmxhYmVsfWA7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKCFpbnB1dCkgPyBbXSA6IFt7XHJcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGlucHV0LFxyXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBpbnB1dCxcclxuICAgICAgICAgICAgICAgICAgICBtYXNrZWQ6IHRydWVcclxuICAgICAgICAgICAgICAgIH1dO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAuLi5jb21tYW5kcy5yZWR1Y2UoKGFjYywgY29tbWFuZCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29tbWFuZC5uYW1lID0gY2FtZWxDYXNlVG9EYXNoKGNvbW1hbmQubmFtZSB8fCBjb21tYW5kLmNvbnN0cnVjdG9yLm5hbWUgfHwgXCJcIik7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWNvbW1hbmQubmFtZSB8fCAhY29tbWFuZC5zdWdnZXN0KSByZXR1cm4gYWNjO1xyXG4gICAgICAgICAgICAgICAgYWNjW2NvbW1hbmQubmFtZV0gPSBhc3luYyAoYSwgdCkgPT4gY29tbWFuZC5zdWdnZXN0KGEsIHQpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjYztcclxuICAgICAgICAgICAgfSwge30pXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmNvbW1hbmRzID0gY29tbWFuZHMucmVkdWNlKChhY2MsIGNvbW1hbmQpID0+IHtcclxuICAgICAgICAgICAgaWYgKCFjb21tYW5kLm5hbWUpIHJldHVybiBhY2M7XHJcbiAgICAgICAgICAgIGFjY1tjb21tYW5kLm5hbWVdID0gYXN5bmMgKGEsIHQpID0+IGNvbW1hbmQuZXhlY3V0ZShhLCB0KTtcclxuICAgICAgICAgICAgcmV0dXJuIGFjYztcclxuICAgICAgICB9LCB7fSk7XHJcbiAgICAgICAgdGhpcy5sb2dnZWRPdXRDb21tYW5kcyA9IFtcImxvZ2luXCIsIFwiY2xlYXJcIl07XHJcbiAgICAgICAgdGhpcy5sb2dnZWRJbkNvbW1hbmRzID0gT2JqZWN0LmtleXModGhpcy5jb21tYW5kcyk7XHJcbiAgICAgICAgdGhpcy5sb2dnZWRJbkNvbW1hbmRzLnB1c2goXCJsb2dvdXRcIik7XHJcbiAgICAgICAgY29uc29sZS5sb2coYEN1cnJlbnQgc2VydmljZSBwYXNzd29yZCBpczogJHtjb2xvcml6ZSh0aGlzLnNlcnZpY2VQYXNzd29yZCwgQ29uc29sZUNvbG9yLkZnR3JlZW4pfWApO1xyXG4gICAgfVxyXG5cclxuICAgIGxvYWRBZGRvbnModGVybWluYWw6IElUZXJtaW5hbCk6IHZvaWQge1xyXG4gICAgICAgIGxldCBsb2dnZWRJbiA9IGZhbHNlO1xyXG4gICAgICAgIGNvbnN0IGFkZG9uID0gbmV3IENvbW1hbmRzQWRkb24oe1xyXG4gICAgICAgICAgICBjb21tYW5kczoge1xyXG4gICAgICAgICAgICAgICAgbG9naW46IGFzeW5jIChhcmdzLCB0ZXJtaW5hbCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhcmdzLmF0KDEpLmxhYmVsID09PSB0aGlzLnNlcnZpY2VQYXNzd29yZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2dnZWRJbiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlcm1pbmFsLndyaXRlbG4oXCJMb2dnZWQgaW4gYXMgYWRtaW5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBsb2dpblwiKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgbG9nb3V0OiBhc3luYyAoYXJncywgdGVybWluYWwpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBsb2dnZWRJbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRlcm1pbmFsLndyaXRlbG4oXCJMb2dnZWQgb3V0XCIpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIC4uLnRoaXMuY29tbWFuZHNcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc3VnZ2VzdENvbW1hbmRzOiBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAobG9nZ2VkSW4pIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2dnZWRJbkNvbW1hbmRzO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9nZ2VkT3V0Q29tbWFuZHM7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHN1Z2dlc3Rpb25zOiB0aGlzLnN1Z2dlc3Rpb25zXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGVybWluYWwubG9hZEFkZG9uKGFkZG9uKTtcclxuICAgIH1cclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { singleton } from "tsyringe";
|
|
3
|
+
import { rand } from "../utils";
|
|
4
|
+
let TokenGenerator = class TokenGenerator {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
|
|
7
|
+
}
|
|
8
|
+
async generate(checkCb) {
|
|
9
|
+
let token = null;
|
|
10
|
+
let tries = 0;
|
|
11
|
+
let notGood = true;
|
|
12
|
+
while (notGood && tries < 5) {
|
|
13
|
+
token = this.generateToken();
|
|
14
|
+
notGood = await checkCb(token);
|
|
15
|
+
tries++;
|
|
16
|
+
}
|
|
17
|
+
if (notGood) {
|
|
18
|
+
throw new Error(`Couldn't generate an unique token..`);
|
|
19
|
+
}
|
|
20
|
+
return token;
|
|
21
|
+
}
|
|
22
|
+
generateToken() {
|
|
23
|
+
let s = "";
|
|
24
|
+
for (let i = 0; i < 15; i++) {
|
|
25
|
+
const ix = rand(0, this.chars.length - 1);
|
|
26
|
+
s += this.chars[ix];
|
|
27
|
+
}
|
|
28
|
+
return s;
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
TokenGenerator = __decorate([
|
|
32
|
+
singleton()
|
|
33
|
+
], TokenGenerator);
|
|
34
|
+
export { TokenGenerator };
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4tZ2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL3Rva2VuLWdlbmVyYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUNuQyxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBR3ZCLElBQU0sY0FBYyxHQUFwQixNQUFNLGNBQWM7SUFJdkI7UUFDSSxJQUFJLENBQUMsS0FBSyxHQUFHLGdFQUFnRSxDQUFDO0lBQ2xGLENBQUM7SUFFRCxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQTRDO1FBQ3ZELElBQUksS0FBSyxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDZCxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxPQUFPLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRTtZQUN6QixLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzdCLE9BQU8sR0FBRyxNQUFNLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMvQixLQUFLLEVBQUUsQ0FBQztTQUNYO1FBQ0QsSUFBSSxPQUFPLEVBQUU7WUFDVCxNQUFNLElBQUksS0FBSyxDQUFDLHFDQUFxQyxDQUFDLENBQUM7U0FDMUQ7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRU8sYUFBYTtRQUNqQixJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDWCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3pCLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDMUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDdkI7UUFDRCxPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7Q0FDSixDQUFBO0FBL0JZLGNBQWM7SUFEMUIsU0FBUyxFQUFFO0dBQ0MsY0FBYyxDQStCMUI7U0EvQlksY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7c2luZ2xldG9ufSBmcm9tIFwidHN5cmluZ2VcIjtcclxuaW1wb3J0IHtyYW5kfSBmcm9tIFwiLi4vdXRpbHNcIjtcclxuXHJcbkBzaW5nbGV0b24oKVxyXG5leHBvcnQgY2xhc3MgVG9rZW5HZW5lcmF0b3Ige1xyXG5cclxuICAgIHByb3RlY3RlZCBjaGFyczogc3RyaW5nO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuY2hhcnMgPSBcIjAxMjM0NTY3ODlBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6XCI7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2VuZXJhdGUoY2hlY2tDYjogKHRva2VuOiBzdHJpbmcpID0+IFByb21pc2U8Ym9vbGVhbj4pOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgICAgIGxldCB0b2tlbiA9IG51bGw7XHJcbiAgICAgICAgbGV0IHRyaWVzID0gMDtcclxuICAgICAgICBsZXQgbm90R29vZCA9IHRydWU7XHJcbiAgICAgICAgd2hpbGUgKG5vdEdvb2QgJiYgdHJpZXMgPCA1KSB7XHJcbiAgICAgICAgICAgIHRva2VuID0gdGhpcy5nZW5lcmF0ZVRva2VuKCk7XHJcbiAgICAgICAgICAgIG5vdEdvb2QgPSBhd2FpdCBjaGVja0NiKHRva2VuKTtcclxuICAgICAgICAgICAgdHJpZXMrKztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5vdEdvb2QpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZG4ndCBnZW5lcmF0ZSBhbiB1bmlxdWUgdG9rZW4uLmApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdG9rZW47XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZW5lcmF0ZVRva2VuKCk6IHN0cmluZyB7XHJcbiAgICAgICAgbGV0IHMgPSBcIlwiO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTU7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBpeCA9IHJhbmQoMCwgdGhpcy5jaGFycy5sZW5ndGggLSAxKTtcclxuICAgICAgICAgICAgcyArPSB0aGlzLmNoYXJzW2l4XTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHM7XHJcbiAgICB9XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { singleton } from "tsyringe";
|
|
3
|
+
import axios from "axios";
|
|
4
|
+
import { isObject } from "../utils";
|
|
5
|
+
let TranslationProvider = class TranslationProvider {
|
|
6
|
+
constructor(config, cache) {
|
|
7
|
+
this.config = config;
|
|
8
|
+
this.cache = cache;
|
|
9
|
+
}
|
|
10
|
+
getDictionary(language) {
|
|
11
|
+
return this.cache.getOrSet(`translations-${language}`, async () => {
|
|
12
|
+
try {
|
|
13
|
+
const url = this.config.resolve("translationsTemplate")
|
|
14
|
+
.replace(`__lang__`, language)
|
|
15
|
+
.replace(`[lang]`, language);
|
|
16
|
+
const data = await axios.get(url).then(t => t.data);
|
|
17
|
+
if (isObject(data[language])) {
|
|
18
|
+
return data[language];
|
|
19
|
+
}
|
|
20
|
+
return data;
|
|
21
|
+
}
|
|
22
|
+
catch (e) {
|
|
23
|
+
return {
|
|
24
|
+
message: `${e}`
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
}, 5 * 60);
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
TranslationProvider = __decorate([
|
|
31
|
+
singleton()
|
|
32
|
+
], TranslationProvider);
|
|
33
|
+
export { TranslationProvider };
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRpb24tcHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvdHJhbnNsYXRpb24tcHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDbkMsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFNM0IsSUFBTSxtQkFBbUIsR0FBekIsTUFBTSxtQkFBbUI7SUFFNUIsWUFBcUIsTUFBcUIsRUFBVyxLQUFZO1FBQTVDLFdBQU0sR0FBTixNQUFNLENBQWU7UUFBVyxVQUFLLEdBQUwsS0FBSyxDQUFPO0lBRWpFLENBQUM7SUFFRCxhQUFhLENBQUMsUUFBZ0I7UUFDMUIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsUUFBUSxFQUFFLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDOUQsSUFBSTtnQkFDQSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQztxQkFDbEQsT0FBTyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUM7cUJBQzdCLE9BQU8sQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQ2pDLE1BQU0sSUFBSSxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3BELElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFO29CQUMxQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztpQkFDekI7Z0JBQ0QsT0FBTyxJQUFJLENBQUM7YUFDZjtZQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNSLE9BQU87b0JBQ0gsT0FBTyxFQUFFLEdBQUcsQ0FBQyxFQUFFO2lCQUNsQixDQUFBO2FBQ0o7UUFDTCxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ2YsQ0FBQztDQUNKLENBQUE7QUF4QlksbUJBQW1CO0lBRC9CLFNBQVMsRUFBRTtHQUNDLG1CQUFtQixDQXdCL0I7U0F4QlksbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtzaW5nbGV0b259IGZyb20gXCJ0c3lyaW5nZVwiO1xyXG5pbXBvcnQgYXhpb3MgZnJvbSBcImF4aW9zXCI7XHJcbmltcG9ydCB7aXNPYmplY3R9IGZyb20gXCIuLi91dGlsc1wiO1xyXG5pbXBvcnQge0NvbmZpZ3VyYXRpb259IGZyb20gXCIuL2NvbmZpZ3VyYXRpb25cIjtcclxuaW1wb3J0IHtJVHJhbnNsYXRpb25zfSBmcm9tIFwiLi4vY29tbW9uLXR5cGVzXCI7XHJcbmltcG9ydCB7Q2FjaGV9IGZyb20gXCIuL2NhY2hlXCI7XHJcblxyXG5Ac2luZ2xldG9uKClcclxuZXhwb3J0IGNsYXNzIFRyYW5zbGF0aW9uUHJvdmlkZXIge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHJlYWRvbmx5IGNvbmZpZzogQ29uZmlndXJhdGlvbiwgcmVhZG9ubHkgY2FjaGU6IENhY2hlKSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGdldERpY3Rpb25hcnkobGFuZ3VhZ2U6IHN0cmluZyk6IFByb21pc2U8SVRyYW5zbGF0aW9ucz4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNhY2hlLmdldE9yU2V0KGB0cmFuc2xhdGlvbnMtJHtsYW5ndWFnZX1gLCBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmNvbmZpZy5yZXNvbHZlKFwidHJhbnNsYXRpb25zVGVtcGxhdGVcIilcclxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZShgX19sYW5nX19gLCBsYW5ndWFnZSlcclxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZShgW2xhbmddYCwgbGFuZ3VhZ2UpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGF4aW9zLmdldCh1cmwpLnRoZW4odCA9PiB0LmRhdGEpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzT2JqZWN0KGRhdGFbbGFuZ3VhZ2VdKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhW2xhbmd1YWdlXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGAke2V9YFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSwgNSAqIDYwKTtcclxuICAgIH1cclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { injectable, singleton } from "tsyringe";
|
|
3
|
+
import { getValue, isDefined, isString } from "../utils";
|
|
4
|
+
let Translator = class Translator {
|
|
5
|
+
constructor(translationProvider) {
|
|
6
|
+
this.translationProvider = translationProvider;
|
|
7
|
+
this.dictionaries = {};
|
|
8
|
+
}
|
|
9
|
+
async getDictionary(language) {
|
|
10
|
+
this.dictionaries[language] = await this.translationProvider.getDictionary(language);
|
|
11
|
+
return this.dictionaries[language];
|
|
12
|
+
}
|
|
13
|
+
getTranslationSync(language, key, params) {
|
|
14
|
+
if (!isString(key) || !key.length) {
|
|
15
|
+
throw new Error(`Parameter "key" required`);
|
|
16
|
+
}
|
|
17
|
+
const dictionary = this.dictionaries[language];
|
|
18
|
+
const translation = getValue(dictionary, key, key) || key;
|
|
19
|
+
return this.interpolate(translation, params);
|
|
20
|
+
}
|
|
21
|
+
getTranslation(language, key, params) {
|
|
22
|
+
if (!isString(key) || !key.length) {
|
|
23
|
+
throw new Error(`Parameter "key" required`);
|
|
24
|
+
}
|
|
25
|
+
return this.getDictionary(language).then(dictionary => {
|
|
26
|
+
const translation = getValue(dictionary, key, key) || key;
|
|
27
|
+
return this.interpolate(translation, params);
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
getTranslations(language, ...keys) {
|
|
31
|
+
return new Promise(resolve => {
|
|
32
|
+
Promise.all(keys.map(key => this.getTranslation(language, key))).then(translations => {
|
|
33
|
+
resolve(keys.reduce((result, key, i) => {
|
|
34
|
+
result[key] = translations[i];
|
|
35
|
+
return result;
|
|
36
|
+
}, {}));
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
interpolate(expr, params) {
|
|
41
|
+
if (typeof expr === "string") {
|
|
42
|
+
return this.interpolateString(expr, params);
|
|
43
|
+
}
|
|
44
|
+
if (typeof expr === "function") {
|
|
45
|
+
return expr(params);
|
|
46
|
+
}
|
|
47
|
+
return expr;
|
|
48
|
+
}
|
|
49
|
+
interpolateString(expr, params) {
|
|
50
|
+
if (!expr || !params)
|
|
51
|
+
return expr;
|
|
52
|
+
return expr.replace(/{{\s?([^{}\s]*)\s?}}/g, (substring, b) => {
|
|
53
|
+
const r = getValue(params, b);
|
|
54
|
+
return isDefined(r) ? r : substring;
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
Translator = __decorate([
|
|
59
|
+
injectable(),
|
|
60
|
+
singleton()
|
|
61
|
+
], Translator);
|
|
62
|
+
export { Translator };
|
|
63
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy90cmFuc2xhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFFLFNBQVMsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUMvQyxPQUFPLEVBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFNaEQsSUFBTSxVQUFVLEdBQWhCLE1BQU0sVUFBVTtJQUluQixZQUFvQixtQkFBd0M7UUFBeEMsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4RCxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsS0FBSyxDQUFDLGFBQWEsQ0FBQyxRQUFnQjtRQUNoQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxHQUFHLE1BQU0sSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNyRixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELGtCQUFrQixDQUFDLFFBQWdCLEVBQUUsR0FBVyxFQUFFLE1BQVk7UUFDMUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUU7WUFDL0IsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1NBQy9DO1FBQ0QsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMvQyxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUM7UUFDMUQsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsY0FBYyxDQUFDLFFBQWdCLEVBQUUsR0FBVyxFQUFFLE1BQVk7UUFDdEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUU7WUFDL0IsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1NBQy9DO1FBQ0QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUNsRCxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUM7WUFDMUQsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNqRCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxlQUFlLENBQUMsUUFBZ0IsRUFBRSxHQUFHLElBQWM7UUFDL0MsT0FBTyxJQUFJLE9BQU8sQ0FBZ0IsT0FBTyxDQUFDLEVBQUU7WUFDeEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRTtnQkFDakYsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUNuQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUM5QixPQUFPLE1BQU0sQ0FBQztnQkFDbEIsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDWixDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVTLFdBQVcsQ0FBQyxJQUF1QixFQUFFLE1BQVk7UUFDdkQsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUU7WUFDMUIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQy9DO1FBQ0QsSUFBSSxPQUFPLElBQUksS0FBSyxVQUFVLEVBQUU7WUFDNUIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDdkI7UUFDRCxPQUFPLElBQWMsQ0FBQztJQUMxQixDQUFDO0lBRVMsaUJBQWlCLENBQUMsSUFBWSxFQUFFLE1BQVk7UUFDbEQsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPLElBQUksQ0FBQztRQUNsQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLEVBQUUsQ0FBQyxTQUFpQixFQUFFLENBQVMsRUFBRSxFQUFFO1lBQzFFLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDOUIsT0FBTyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztDQUNKLENBQUE7QUE1RFksVUFBVTtJQUZ0QixVQUFVLEVBQUU7SUFDWixTQUFTLEVBQUU7R0FDQyxVQUFVLENBNER0QjtTQTVEWSxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtpbmplY3RhYmxlLCBzaW5nbGV0b259IGZyb20gXCJ0c3lyaW5nZVwiO1xyXG5pbXBvcnQge2dldFZhbHVlLCBpc0RlZmluZWQsIGlzU3RyaW5nfSBmcm9tIFwiLi4vdXRpbHNcIjtcclxuaW1wb3J0IHtJVHJhbnNsYXRpb25zfSBmcm9tIFwiLi4vY29tbW9uLXR5cGVzXCI7XHJcbmltcG9ydCB7VHJhbnNsYXRpb25Qcm92aWRlcn0gZnJvbSBcIi4vdHJhbnNsYXRpb24tcHJvdmlkZXJcIjtcclxuXHJcbkBpbmplY3RhYmxlKClcclxuQHNpbmdsZXRvbigpXHJcbmV4cG9ydCBjbGFzcyBUcmFuc2xhdG9yIHtcclxuXHJcbiAgICBwcm90ZWN0ZWQgZGljdGlvbmFyaWVzOiB7IFtsYW5nOiBzdHJpbmddOiBJVHJhbnNsYXRpb25zIH07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSB0cmFuc2xhdGlvblByb3ZpZGVyOiBUcmFuc2xhdGlvblByb3ZpZGVyKSB7XHJcbiAgICAgICAgdGhpcy5kaWN0aW9uYXJpZXMgPSB7fTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXREaWN0aW9uYXJ5KGxhbmd1YWdlOiBzdHJpbmcpOiBQcm9taXNlPElUcmFuc2xhdGlvbnM+IHtcclxuICAgICAgICB0aGlzLmRpY3Rpb25hcmllc1tsYW5ndWFnZV0gPSBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uUHJvdmlkZXIuZ2V0RGljdGlvbmFyeShsYW5ndWFnZSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGljdGlvbmFyaWVzW2xhbmd1YWdlXTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRUcmFuc2xhdGlvblN5bmMobGFuZ3VhZ2U6IHN0cmluZywga2V5OiBzdHJpbmcsIHBhcmFtcz86IGFueSk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKCFpc1N0cmluZyhrZXkpIHx8ICFrZXkubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUGFyYW1ldGVyIFwia2V5XCIgcmVxdWlyZWRgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZGljdGlvbmFyeSA9IHRoaXMuZGljdGlvbmFyaWVzW2xhbmd1YWdlXTtcclxuICAgICAgICBjb25zdCB0cmFuc2xhdGlvbiA9IGdldFZhbHVlKGRpY3Rpb25hcnksIGtleSwga2V5KSB8fCBrZXk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaW50ZXJwb2xhdGUodHJhbnNsYXRpb24sIHBhcmFtcyk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VHJhbnNsYXRpb24obGFuZ3VhZ2U6IHN0cmluZywga2V5OiBzdHJpbmcsIHBhcmFtcz86IGFueSk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICAgICAgaWYgKCFpc1N0cmluZyhrZXkpIHx8ICFrZXkubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUGFyYW1ldGVyIFwia2V5XCIgcmVxdWlyZWRgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RGljdGlvbmFyeShsYW5ndWFnZSkudGhlbihkaWN0aW9uYXJ5ID0+IHtcclxuICAgICAgICAgICAgY29uc3QgdHJhbnNsYXRpb24gPSBnZXRWYWx1ZShkaWN0aW9uYXJ5LCBrZXksIGtleSkgfHwga2V5O1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbnRlcnBvbGF0ZSh0cmFuc2xhdGlvbiwgcGFyYW1zKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRUcmFuc2xhdGlvbnMobGFuZ3VhZ2U6IHN0cmluZywgLi4ua2V5czogc3RyaW5nW10pOiBQcm9taXNlPElUcmFuc2xhdGlvbnM+IHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8SVRyYW5zbGF0aW9ucz4ocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgICAgIFByb21pc2UuYWxsKGtleXMubWFwKGtleSA9PiB0aGlzLmdldFRyYW5zbGF0aW9uKGxhbmd1YWdlLCBrZXkpKSkudGhlbih0cmFuc2xhdGlvbnMgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShrZXlzLnJlZHVjZSgocmVzdWx0LCBrZXksIGkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IHRyYW5zbGF0aW9uc1tpXTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgfSwge30pKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGludGVycG9sYXRlKGV4cHI6IHN0cmluZyB8IEZ1bmN0aW9uLCBwYXJhbXM/OiBhbnkpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICh0eXBlb2YgZXhwciA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbnRlcnBvbGF0ZVN0cmluZyhleHByLCBwYXJhbXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodHlwZW9mIGV4cHIgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgICByZXR1cm4gZXhwcihwYXJhbXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZXhwciBhcyBzdHJpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGludGVycG9sYXRlU3RyaW5nKGV4cHI6IHN0cmluZywgcGFyYW1zPzogYW55KSB7XHJcbiAgICAgICAgaWYgKCFleHByIHx8ICFwYXJhbXMpIHJldHVybiBleHByO1xyXG4gICAgICAgIHJldHVybiBleHByLnJlcGxhY2UoL3t7XFxzPyhbXnt9XFxzXSopXFxzP319L2csIChzdWJzdHJpbmc6IHN0cmluZywgYjogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHIgPSBnZXRWYWx1ZShwYXJhbXMsIGIpO1xyXG4gICAgICAgICAgICByZXR1cm4gaXNEZWZpbmVkKHIpID8gciA6IHN1YnN0cmluZztcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { injectable, Lifecycle, scoped } from "tsyringe";
|
|
3
|
+
const sampleUser = {
|
|
4
|
+
id: "5a3cdf7c6a9cf0ba32feccdf",
|
|
5
|
+
email: "admin@site.com",
|
|
6
|
+
password: "",
|
|
7
|
+
roles: ["admin"]
|
|
8
|
+
};
|
|
9
|
+
let UserManager = class UserManager {
|
|
10
|
+
async getByCredentials(credentials) {
|
|
11
|
+
return (sampleUser.email == credentials.email) ? sampleUser : await Promise.reject("message.login.error");
|
|
12
|
+
}
|
|
13
|
+
async getById(id) {
|
|
14
|
+
return (sampleUser.id == id) ? sampleUser : null;
|
|
15
|
+
}
|
|
16
|
+
async serialize(user) {
|
|
17
|
+
const res = Object.assign({}, user);
|
|
18
|
+
delete res.password;
|
|
19
|
+
return res;
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
UserManager = __decorate([
|
|
23
|
+
injectable(),
|
|
24
|
+
scoped(Lifecycle.ContainerScoped)
|
|
25
|
+
], UserManager);
|
|
26
|
+
export { UserManager };
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL3VzZXItbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBR3ZELE1BQU0sVUFBVSxHQUFVO0lBQ3RCLEVBQUUsRUFBRSwwQkFBMEI7SUFDOUIsS0FBSyxFQUFFLGdCQUFnQjtJQUN2QixRQUFRLEVBQUUsRUFBRTtJQUNaLEtBQUssRUFBRSxDQUFDLE9BQU8sQ0FBQztDQUNuQixDQUFDO0FBSUssSUFBTSxXQUFXLEdBQWpCLE1BQU0sV0FBVztJQUVwQixLQUFLLENBQUMsZ0JBQWdCLENBQUMsV0FBZ0I7UUFDbkMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLE1BQU0sT0FBTyxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQzlHLENBQUM7SUFFRCxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQVU7UUFDcEIsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3JELENBQUM7SUFFRCxLQUFLLENBQUMsU0FBUyxDQUFDLElBQVc7UUFDdkIsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDcEMsT0FBTyxHQUFHLENBQUMsUUFBUSxDQUFDO1FBQ3BCLE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztDQUNKLENBQUE7QUFmWSxXQUFXO0lBRnZCLFVBQVUsRUFBRTtJQUNaLE1BQU0sQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDO0dBQ3JCLFdBQVcsQ0FldkI7U0FmWSxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtpbmplY3RhYmxlLCBMaWZlY3ljbGUsIHNjb3BlZH0gZnJvbSBcInRzeXJpbmdlXCI7XHJcbmltcG9ydCB7SVVzZXJ9IGZyb20gXCIuLi9jb21tb24tdHlwZXNcIjtcclxuXHJcbmNvbnN0IHNhbXBsZVVzZXI6IElVc2VyID0ge1xyXG4gICAgaWQ6IFwiNWEzY2RmN2M2YTljZjBiYTMyZmVjY2RmXCIsXHJcbiAgICBlbWFpbDogXCJhZG1pbkBzaXRlLmNvbVwiLFxyXG4gICAgcGFzc3dvcmQ6IFwiXCIsXHJcbiAgICByb2xlczogW1wiYWRtaW5cIl1cclxufTtcclxuXHJcbkBpbmplY3RhYmxlKClcclxuQHNjb3BlZChMaWZlY3ljbGUuQ29udGFpbmVyU2NvcGVkKVxyXG5leHBvcnQgY2xhc3MgVXNlck1hbmFnZXIge1xyXG5cclxuICAgIGFzeW5jIGdldEJ5Q3JlZGVudGlhbHMoY3JlZGVudGlhbHM6IGFueSk6IFByb21pc2U8SVVzZXI+IHtcclxuICAgICAgICByZXR1cm4gKHNhbXBsZVVzZXIuZW1haWwgPT0gY3JlZGVudGlhbHMuZW1haWwpID8gc2FtcGxlVXNlciA6IGF3YWl0IFByb21pc2UucmVqZWN0KFwibWVzc2FnZS5sb2dpbi5lcnJvclwiKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRCeUlkKGlkOiBzdHJpbmcpOiBQcm9taXNlPElVc2VyPiB7XHJcbiAgICAgICAgcmV0dXJuIChzYW1wbGVVc2VyLmlkID09IGlkKSA/IHNhbXBsZVVzZXIgOiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHNlcmlhbGl6ZSh1c2VyOiBJVXNlcik6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgY29uc3QgcmVzID0gT2JqZWN0LmFzc2lnbih7fSwgdXNlcik7XHJcbiAgICAgICAgZGVsZXRlIHJlcy5wYXNzd29yZDtcclxuICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|