@stemy/backend 2.6.1 → 2.7.3
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/README.md +2 -2
- package/bundles/stemy-backend.umd.js +5553 -5465
- package/bundles/stemy-backend.umd.js.map +1 -1
- package/bundles/stemy-backend.umd.min.js +1 -1
- package/bundles/stemy-backend.umd.min.js.map +1 -1
- package/common-types.d.ts +226 -214
- package/esm2015/common-types.js +18 -18
- package/esm2015/public_api.js +338 -338
- package/esm2015/rest-controllers/assets.controller.js +116 -116
- package/esm2015/rest-controllers/auth.controller.js +75 -75
- package/esm2015/rest-controllers/gallery.controller.js +37 -37
- package/esm2015/rest-controllers/progresses.controller.js +57 -57
- package/esm2015/rest-middlewares/container.middleware.js +32 -32
- package/esm2015/rest-middlewares/error-handler.middleware.js +83 -83
- package/esm2015/rest-middlewares/language.middleware.js +28 -28
- package/esm2015/rest-middlewares/request-ended.middleware.js +25 -25
- package/esm2015/rest-middlewares/request-started.middleware.js +24 -24
- package/esm2015/rest-openapi.js +44 -44
- package/esm2015/services/asset-processor.js +101 -101
- package/esm2015/services/asset-resolver.js +53 -53
- package/esm2015/services/assets.js +110 -110
- package/esm2015/services/backend-provider.js +32 -32
- package/esm2015/services/cache-processor.js +34 -34
- package/esm2015/services/cache.js +94 -94
- package/esm2015/services/configuration.js +55 -55
- package/esm2015/services/endpoint-provider.js +29 -29
- package/esm2015/services/entities/asset.js +166 -112
- package/esm2015/services/entities/lazy-asset.js +93 -93
- package/esm2015/services/entities/progress.js +181 -181
- package/esm2015/services/fixtures.js +45 -45
- package/esm2015/services/gallery-cache.js +36 -36
- package/esm2015/services/gallery-image.js +48 -48
- package/esm2015/services/gallery.js +138 -138
- package/esm2015/services/id-generator.js +63 -63
- package/esm2015/services/job-manager.js +203 -203
- package/esm2015/services/lazy-assets.js +74 -74
- package/esm2015/services/mail-sender.js +59 -59
- package/esm2015/services/memory-cache.js +84 -84
- package/esm2015/services/mongo-connector.js +61 -61
- package/esm2015/services/progresses.js +91 -91
- package/esm2015/services/template-renderer.js +89 -89
- package/esm2015/services/translation-provider.js +31 -31
- package/esm2015/services/translator.js +85 -85
- package/esm2015/services/user-manager.js +47 -47
- package/esm2015/socket-controllers/progress.controller.js +82 -82
- package/esm2015/socket-middlewares/compression.middleware.js +19 -19
- package/esm2015/static.js +33 -33
- package/esm2015/stemy-backend.js +4 -4
- package/esm2015/utilities/di-container.js +84 -84
- package/esm2015/utilities/lazy-asset-generator.js +40 -40
- package/esm2015/utilities/tree.js +111 -111
- package/esm2015/utils.js +618 -601
- package/esm2015/validators.js +51 -51
- package/fesm2015/stemy-backend.js +3656 -3585
- package/fesm2015/stemy-backend.js.map +1 -1
- package/package.json +1 -1
- package/public_api.d.ts +33 -33
- package/rest-controllers/assets.controller.d.ts +16 -16
- package/rest-controllers/auth.controller.d.ts +14 -14
- package/rest-controllers/gallery.controller.d.ts +7 -7
- package/rest-controllers/progresses.controller.d.ts +9 -9
- 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 +5 -5
- package/rest-middlewares/request-started.middleware.d.ts +5 -5
- package/rest-openapi.d.ts +3 -3
- package/services/asset-processor.d.ts +12 -12
- package/services/asset-resolver.d.ts +9 -9
- package/services/assets.d.ts +19 -19
- package/services/backend-provider.d.ts +11 -11
- package/services/cache-processor.d.ts +4 -4
- package/services/cache.d.ts +23 -23
- package/services/configuration.d.ts +10 -10
- package/services/endpoint-provider.d.ts +4 -4
- package/services/entities/asset.d.ts +25 -23
- package/services/entities/lazy-asset.d.ts +29 -29
- package/services/entities/progress.d.ts +49 -49
- package/services/fixtures.d.ts +6 -6
- package/services/gallery-cache.d.ts +9 -9
- package/services/gallery-image.d.ts +11 -11
- package/services/gallery.d.ts +13 -13
- package/services/id-generator.d.ts +11 -11
- package/services/job-manager.d.ts +27 -27
- package/services/lazy-assets.d.ts +19 -19
- package/services/mail-sender.d.ts +20 -20
- package/services/memory-cache.d.ts +10 -10
- package/services/mongo-connector.d.ts +14 -14
- package/services/progresses.d.ts +18 -18
- package/services/template-renderer.d.ts +14 -14
- package/services/translation-provider.d.ts +10 -10
- 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-middlewares/compression.middleware.d.ts +4 -4
- package/static.d.ts +2 -2
- package/stemy-backend.d.ts +4 -4
- package/stemy-backend.metadata.json +1 -1
- package/utilities/di-container.d.ts +43 -43
- package/utilities/lazy-asset-generator.d.ts +15 -15
- package/utilities/tree.d.ts +14 -14
- package/utils.d.ts +76 -73
- package/validators.d.ts +7 -7
- package/di-container.d.ts +0 -40
- package/esm2015/di-container.js +0 -75
- package/esm2015/models/lazy-asset.js +0 -12
- package/esm2015/models/progress.js +0 -23
- package/esm2015/rest-middlewares/injector.middleware.js +0 -26
- package/esm2015/services/lazy-asset-helper.js +0 -74
- package/esm2015/services/logger.js +0 -14
- package/esm2015/services/progress-helper.js +0 -168
- package/models/lazy-asset.d.ts +0 -45
- package/models/progress.d.ts +0 -56
- package/rest-middlewares/injector.middleware.d.ts +0 -8
- package/services/lazy-asset-helper.d.ts +0 -15
- package/services/logger.d.ts +0 -2
- package/services/progress-helper.d.ts +0 -37
|
@@ -1,61 +1,61 @@
|
|
|
1
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
-
};
|
|
7
|
-
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
-
};
|
|
10
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
11
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
12
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
13
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
14
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
15
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
16
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
17
|
-
});
|
|
18
|
-
};
|
|
19
|
-
import { injectable, singleton } from "tsyringe";
|
|
20
|
-
import { GridFSBucket } from "mongodb";
|
|
21
|
-
import { connect } from "mongoose";
|
|
22
|
-
import { Configuration } from "./configuration";
|
|
23
|
-
let MongoConnector = class MongoConnector {
|
|
24
|
-
constructor(configuration) {
|
|
25
|
-
this.configuration = configuration;
|
|
26
|
-
this.conn = null;
|
|
27
|
-
this.db = null;
|
|
28
|
-
this.fsBucket = null;
|
|
29
|
-
}
|
|
30
|
-
get connection() {
|
|
31
|
-
return this.conn;
|
|
32
|
-
}
|
|
33
|
-
get database() {
|
|
34
|
-
return this.db;
|
|
35
|
-
}
|
|
36
|
-
get bucket() {
|
|
37
|
-
return this.fsBucket;
|
|
38
|
-
}
|
|
39
|
-
connect() {
|
|
40
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
41
|
-
if (this.db)
|
|
42
|
-
return this.db;
|
|
43
|
-
this.conn = (yield connect(this.configuration.resolve("mongoUri"), {
|
|
44
|
-
dbName: this.configuration.resolve("mongoDb"),
|
|
45
|
-
user: this.configuration.resolve("mongoUser"),
|
|
46
|
-
pass: this.configuration.resolve("mongoPassword"),
|
|
47
|
-
useNewUrlParser: true,
|
|
48
|
-
useUnifiedTopology: true
|
|
49
|
-
})).connection;
|
|
50
|
-
this.db = this.conn.db;
|
|
51
|
-
this.fsBucket = new GridFSBucket(this.db, { bucketName: "assets" });
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
};
|
|
55
|
-
MongoConnector = __decorate([
|
|
56
|
-
injectable(),
|
|
57
|
-
singleton(),
|
|
58
|
-
__metadata("design:paramtypes", [Configuration])
|
|
59
|
-
], MongoConnector);
|
|
60
|
-
export { MongoConnector };
|
|
61
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
11
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
12
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
13
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
14
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
15
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
16
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
17
|
+
});
|
|
18
|
+
};
|
|
19
|
+
import { injectable, singleton } from "tsyringe";
|
|
20
|
+
import { GridFSBucket } from "mongodb";
|
|
21
|
+
import { connect } from "mongoose";
|
|
22
|
+
import { Configuration } from "./configuration";
|
|
23
|
+
let MongoConnector = class MongoConnector {
|
|
24
|
+
constructor(configuration) {
|
|
25
|
+
this.configuration = configuration;
|
|
26
|
+
this.conn = null;
|
|
27
|
+
this.db = null;
|
|
28
|
+
this.fsBucket = null;
|
|
29
|
+
}
|
|
30
|
+
get connection() {
|
|
31
|
+
return this.conn;
|
|
32
|
+
}
|
|
33
|
+
get database() {
|
|
34
|
+
return this.db;
|
|
35
|
+
}
|
|
36
|
+
get bucket() {
|
|
37
|
+
return this.fsBucket;
|
|
38
|
+
}
|
|
39
|
+
connect() {
|
|
40
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
41
|
+
if (this.db)
|
|
42
|
+
return this.db;
|
|
43
|
+
this.conn = (yield connect(this.configuration.resolve("mongoUri"), {
|
|
44
|
+
dbName: this.configuration.resolve("mongoDb"),
|
|
45
|
+
user: this.configuration.resolve("mongoUser"),
|
|
46
|
+
pass: this.configuration.resolve("mongoPassword"),
|
|
47
|
+
useNewUrlParser: true,
|
|
48
|
+
useUnifiedTopology: true
|
|
49
|
+
})).connection;
|
|
50
|
+
this.db = this.conn.db;
|
|
51
|
+
this.fsBucket = new GridFSBucket(this.db, { bucketName: "assets" });
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
MongoConnector = __decorate([
|
|
56
|
+
injectable(),
|
|
57
|
+
singleton(),
|
|
58
|
+
__metadata("design:paramtypes", [Configuration])
|
|
59
|
+
], MongoConnector);
|
|
60
|
+
export { MongoConnector };
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9uZ28tY29ubmVjdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL21vbmdvLWNvbm5lY3Rvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFFLFNBQVMsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUMvQyxPQUFPLEVBQUssWUFBWSxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBQ3pDLE9BQU8sRUFBQyxPQUFPLEVBQWEsTUFBTSxVQUFVLENBQUM7QUFDN0MsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0lBSWpDLGNBQWMsU0FBZCxjQUFjO0lBa0J2QixZQUFxQixhQUE0QjtRQUE1QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM3QyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztRQUNmLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0lBQ3pCLENBQUM7SUFwQkQsSUFBSSxVQUFVO1FBQ1YsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDUixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVELElBQUksTUFBTTtRQUNOLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN6QixDQUFDO0lBWUssT0FBTzs7WUFDVCxJQUFJLElBQUksQ0FBQyxFQUFFO2dCQUFFLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUU7Z0JBQy9ELE1BQU0sRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUM7Z0JBQzdDLElBQUksRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7Z0JBQzdDLElBQUksRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUM7Z0JBQ2pELGVBQWUsRUFBRSxJQUFJO2dCQUNyQixrQkFBa0IsRUFBRSxJQUFJO2FBQzNCLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQztZQUNmLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUMsVUFBVSxFQUFFLFFBQVEsRUFBQyxDQUFDLENBQUM7UUFDdEUsQ0FBQztLQUFBO0NBQ0osQ0FBQTtBQXBDWSxjQUFjO0lBRjFCLFVBQVUsRUFBRTtJQUNaLFNBQVMsRUFBRTtxQ0FtQjRCLGFBQWE7R0FsQnhDLGNBQWMsQ0FvQzFCO1NBcENZLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2luamVjdGFibGUsIHNpbmdsZXRvbn0gZnJvbSBcInRzeXJpbmdlXCI7XHJcbmltcG9ydCB7RGIsIEdyaWRGU0J1Y2tldH0gZnJvbSBcIm1vbmdvZGJcIjtcclxuaW1wb3J0IHtjb25uZWN0LCBDb25uZWN0aW9ufSBmcm9tIFwibW9uZ29vc2VcIjtcclxuaW1wb3J0IHtDb25maWd1cmF0aW9ufSBmcm9tIFwiLi9jb25maWd1cmF0aW9uXCI7XHJcblxyXG5AaW5qZWN0YWJsZSgpXHJcbkBzaW5nbGV0b24oKVxyXG5leHBvcnQgY2xhc3MgTW9uZ29Db25uZWN0b3Ige1xyXG5cclxuICAgIGdldCBjb25uZWN0aW9uKCk6IENvbm5lY3Rpb24ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbm47XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGRhdGFiYXNlKCk6IERiIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYjtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgYnVja2V0KCk6IEdyaWRGU0J1Y2tldCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZnNCdWNrZXQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGNvbm46IENvbm5lY3Rpb247XHJcbiAgICBwcm90ZWN0ZWQgZGI6IERiO1xyXG4gICAgcHJvdGVjdGVkIGZzQnVja2V0OiBHcmlkRlNCdWNrZXQ7XHJcblxyXG4gICAgY29uc3RydWN0b3IocmVhZG9ubHkgY29uZmlndXJhdGlvbjogQ29uZmlndXJhdGlvbikge1xyXG4gICAgICAgIHRoaXMuY29ubiA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5kYiA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5mc0J1Y2tldCA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY29ubmVjdCgpOiBQcm9taXNlPERiPiB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGIpIHJldHVybiB0aGlzLmRiO1xyXG4gICAgICAgIHRoaXMuY29ubiA9IChhd2FpdCBjb25uZWN0KHRoaXMuY29uZmlndXJhdGlvbi5yZXNvbHZlKFwibW9uZ29VcmlcIiksIHtcclxuICAgICAgICAgICAgZGJOYW1lOiB0aGlzLmNvbmZpZ3VyYXRpb24ucmVzb2x2ZShcIm1vbmdvRGJcIiksXHJcbiAgICAgICAgICAgIHVzZXI6IHRoaXMuY29uZmlndXJhdGlvbi5yZXNvbHZlKFwibW9uZ29Vc2VyXCIpLFxyXG4gICAgICAgICAgICBwYXNzOiB0aGlzLmNvbmZpZ3VyYXRpb24ucmVzb2x2ZShcIm1vbmdvUGFzc3dvcmRcIiksXHJcbiAgICAgICAgICAgIHVzZU5ld1VybFBhcnNlcjogdHJ1ZSxcclxuICAgICAgICAgICAgdXNlVW5pZmllZFRvcG9sb2d5OiB0cnVlXHJcbiAgICAgICAgfSkpLmNvbm5lY3Rpb247XHJcbiAgICAgICAgdGhpcy5kYiA9IHRoaXMuY29ubi5kYjtcclxuICAgICAgICB0aGlzLmZzQnVja2V0ID0gbmV3IEdyaWRGU0J1Y2tldCh0aGlzLmRiLCB7YnVja2V0TmFtZTogXCJhc3NldHNcIn0pO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -1,91 +1,91 @@
|
|
|
1
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
-
};
|
|
7
|
-
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
-
};
|
|
10
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
11
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
12
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
13
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
14
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
15
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
16
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
17
|
-
});
|
|
18
|
-
};
|
|
19
|
-
import { injectable, singleton } from "tsyringe";
|
|
20
|
-
import socket_io_client from "socket.io-client";
|
|
21
|
-
import { ObjectId } from "bson";
|
|
22
|
-
import { promiseTimeout } from "../utils";
|
|
23
|
-
import { Configuration } from "./configuration";
|
|
24
|
-
import { Progress } from "./entities/progress";
|
|
25
|
-
import { MongoConnector } from "./mongo-connector";
|
|
26
|
-
const socketIOClient = socket_io_client;
|
|
27
|
-
let Progresses = class Progresses {
|
|
28
|
-
constructor(connector, config) {
|
|
29
|
-
this.connector = connector;
|
|
30
|
-
this.config = config;
|
|
31
|
-
const mainEndpoint = this.config.resolve("mainEndpoint");
|
|
32
|
-
this.client = !mainEndpoint ? null : socketIOClient(mainEndpoint, { path: "/socket" });
|
|
33
|
-
this.collection = connector.database.collection("progresses");
|
|
34
|
-
}
|
|
35
|
-
waitToFinish(id) {
|
|
36
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
37
|
-
let isFinished = false;
|
|
38
|
-
let progress = null;
|
|
39
|
-
while (!isFinished) {
|
|
40
|
-
progress = yield this.get(id);
|
|
41
|
-
if (!progress) {
|
|
42
|
-
throw `Progress does not exists with id: ${id}`;
|
|
43
|
-
}
|
|
44
|
-
if (progress.error) {
|
|
45
|
-
throw progress.error;
|
|
46
|
-
}
|
|
47
|
-
isFinished = progress.percent == 100;
|
|
48
|
-
if (!isFinished) {
|
|
49
|
-
yield promiseTimeout(150);
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
return progress;
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
|
-
get(id) {
|
|
56
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
57
|
-
return this.find({ _id: new ObjectId(id) });
|
|
58
|
-
});
|
|
59
|
-
}
|
|
60
|
-
find(where) {
|
|
61
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
62
|
-
const data = yield this.collection.findOne(where);
|
|
63
|
-
return !data ? null : new Progress(data._id, data.current, data.max, data.message, data.error, this.client, this.collection);
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
create(max = 100) {
|
|
67
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
68
|
-
if (isNaN(max) || max <= 0) {
|
|
69
|
-
throw "Max progress value must be bigger than zero";
|
|
70
|
-
}
|
|
71
|
-
const res = yield this.collection.insertOne({
|
|
72
|
-
current: 0,
|
|
73
|
-
max
|
|
74
|
-
});
|
|
75
|
-
return new Progress(res.insertedId, 0, max, "", "", this.client, this.collection);
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
remove(id) {
|
|
79
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
80
|
-
yield this.collection.deleteOne({ _id: new ObjectId(id) });
|
|
81
|
-
return id;
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
};
|
|
85
|
-
Progresses = __decorate([
|
|
86
|
-
injectable(),
|
|
87
|
-
singleton(),
|
|
88
|
-
__metadata("design:paramtypes", [MongoConnector, Configuration])
|
|
89
|
-
], Progresses);
|
|
90
|
-
export { Progresses };
|
|
91
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
11
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
12
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
13
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
14
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
15
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
16
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
17
|
+
});
|
|
18
|
+
};
|
|
19
|
+
import { injectable, singleton } from "tsyringe";
|
|
20
|
+
import socket_io_client from "socket.io-client";
|
|
21
|
+
import { ObjectId } from "bson";
|
|
22
|
+
import { promiseTimeout } from "../utils";
|
|
23
|
+
import { Configuration } from "./configuration";
|
|
24
|
+
import { Progress } from "./entities/progress";
|
|
25
|
+
import { MongoConnector } from "./mongo-connector";
|
|
26
|
+
const socketIOClient = socket_io_client;
|
|
27
|
+
let Progresses = class Progresses {
|
|
28
|
+
constructor(connector, config) {
|
|
29
|
+
this.connector = connector;
|
|
30
|
+
this.config = config;
|
|
31
|
+
const mainEndpoint = this.config.resolve("mainEndpoint");
|
|
32
|
+
this.client = !mainEndpoint ? null : socketIOClient(mainEndpoint, { path: "/socket" });
|
|
33
|
+
this.collection = connector.database.collection("progresses");
|
|
34
|
+
}
|
|
35
|
+
waitToFinish(id) {
|
|
36
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
37
|
+
let isFinished = false;
|
|
38
|
+
let progress = null;
|
|
39
|
+
while (!isFinished) {
|
|
40
|
+
progress = yield this.get(id);
|
|
41
|
+
if (!progress) {
|
|
42
|
+
throw `Progress does not exists with id: ${id}`;
|
|
43
|
+
}
|
|
44
|
+
if (progress.error) {
|
|
45
|
+
throw progress.error;
|
|
46
|
+
}
|
|
47
|
+
isFinished = progress.percent == 100;
|
|
48
|
+
if (!isFinished) {
|
|
49
|
+
yield promiseTimeout(150);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return progress;
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
get(id) {
|
|
56
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
57
|
+
return this.find({ _id: new ObjectId(id) });
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
find(where) {
|
|
61
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
62
|
+
const data = yield this.collection.findOne(where);
|
|
63
|
+
return !data ? null : new Progress(data._id, data.current, data.max, data.message, data.error, this.client, this.collection);
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
create(max = 100) {
|
|
67
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
68
|
+
if (isNaN(max) || max <= 0) {
|
|
69
|
+
throw "Max progress value must be bigger than zero";
|
|
70
|
+
}
|
|
71
|
+
const res = yield this.collection.insertOne({
|
|
72
|
+
current: 0,
|
|
73
|
+
max
|
|
74
|
+
});
|
|
75
|
+
return new Progress(res.insertedId, 0, max, "", "", this.client, this.collection);
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
remove(id) {
|
|
79
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
80
|
+
yield this.collection.deleteOne({ _id: new ObjectId(id) });
|
|
81
|
+
return id;
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
Progresses = __decorate([
|
|
86
|
+
injectable(),
|
|
87
|
+
singleton(),
|
|
88
|
+
__metadata("design:paramtypes", [MongoConnector, Configuration])
|
|
89
|
+
], Progresses);
|
|
90
|
+
export { Progresses };
|
|
91
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3Nlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9wcm9ncmVzc2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUUsU0FBUyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQy9DLE9BQU8sZ0JBQWdCLE1BQU0sa0JBQWtCLENBQUE7QUFDL0MsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUc5QixPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ3hDLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM5QyxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDN0MsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBR2pELE1BQU0sY0FBYyxHQUFHLGdCQUFnQixDQUFDO0lBSTNCLFVBQVUsU0FBVixVQUFVO0lBS25CLFlBQXFCLFNBQXlCLEVBQVcsTUFBcUI7UUFBekQsY0FBUyxHQUFULFNBQVMsQ0FBZ0I7UUFBVyxXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQzFFLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxFQUFDLElBQUksRUFBRSxTQUFTLEVBQUMsQ0FBQyxDQUFDO1FBQ3JGLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVLLFlBQVksQ0FBQyxFQUFVOztZQUN6QixJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUM7WUFDdkIsSUFBSSxRQUFRLEdBQWMsSUFBSSxDQUFDO1lBQy9CLE9BQU8sQ0FBQyxVQUFVLEVBQUU7Z0JBQ2hCLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxRQUFRLEVBQUU7b0JBQ1gsTUFBTSxxQ0FBcUMsRUFBRSxFQUFFLENBQUM7aUJBQ25EO2dCQUNELElBQUksUUFBUSxDQUFDLEtBQUssRUFBRTtvQkFDaEIsTUFBTSxRQUFRLENBQUMsS0FBSyxDQUFDO2lCQUN4QjtnQkFDRCxVQUFVLEdBQUcsUUFBUSxDQUFDLE9BQU8sSUFBSSxHQUFHLENBQUM7Z0JBQ3JDLElBQUksQ0FBQyxVQUFVLEVBQUU7b0JBQ2IsTUFBTSxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQzdCO2FBQ0o7WUFDRCxPQUFPLFFBQVEsQ0FBQztRQUNwQixDQUFDO0tBQUE7SUFFSyxHQUFHLENBQUMsRUFBVTs7WUFDaEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUMsR0FBRyxFQUFFLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQztRQUM5QyxDQUFDO0tBQUE7SUFFSyxJQUFJLENBQUMsS0FBNkI7O1lBQ3BDLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbEQsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FDOUIsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSyxFQUMxRCxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQy9CLENBQUM7UUFDTixDQUFDO0tBQUE7SUFFSyxNQUFNLENBQUMsTUFBYyxHQUFHOztZQUMxQixJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFO2dCQUN4QixNQUFNLDZDQUE2QyxDQUFDO2FBQ3ZEO1lBQ0QsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQztnQkFDeEMsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsR0FBRzthQUNOLENBQUMsQ0FBQztZQUNILE9BQU8sSUFBSSxRQUFRLENBQ2YsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQzlCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FDL0IsQ0FBQztRQUNOLENBQUM7S0FBQTtJQUVLLE1BQU0sQ0FBQyxFQUFVOztZQUNuQixNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEVBQUMsR0FBRyxFQUFFLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQztZQUN6RCxPQUFPLEVBQUUsQ0FBQztRQUNkLENBQUM7S0FBQTtDQUNKLENBQUE7QUE1RFksVUFBVTtJQUZ0QixVQUFVLEVBQUU7SUFDWixTQUFTLEVBQUU7cUNBTXdCLGNBQWMsRUFBbUIsYUFBYTtHQUxyRSxVQUFVLENBNER0QjtTQTVEWSxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtpbmplY3RhYmxlLCBzaW5nbGV0b259IGZyb20gXCJ0c3lyaW5nZVwiO1xyXG5pbXBvcnQgc29ja2V0X2lvX2NsaWVudCBmcm9tIFwic29ja2V0LmlvLWNsaWVudFwiXHJcbmltcG9ydCB7T2JqZWN0SWR9IGZyb20gXCJic29uXCI7XHJcbmltcG9ydCB7RmlsdGVyUXVlcnl9IGZyb20gXCJtb25nb29zZVwiO1xyXG5pbXBvcnQge0lQcm9ncmVzc30gZnJvbSBcIi4uL2NvbW1vbi10eXBlc1wiO1xyXG5pbXBvcnQge3Byb21pc2VUaW1lb3V0fSBmcm9tIFwiLi4vdXRpbHNcIjtcclxuaW1wb3J0IHtDb25maWd1cmF0aW9ufSBmcm9tIFwiLi9jb25maWd1cmF0aW9uXCI7XHJcbmltcG9ydCB7UHJvZ3Jlc3N9IGZyb20gXCIuL2VudGl0aWVzL3Byb2dyZXNzXCI7XHJcbmltcG9ydCB7TW9uZ29Db25uZWN0b3J9IGZyb20gXCIuL21vbmdvLWNvbm5lY3RvclwiO1xyXG5pbXBvcnQge0NvbGxlY3Rpb259IGZyb20gXCJtb25nb2RiXCI7XHJcblxyXG5jb25zdCBzb2NrZXRJT0NsaWVudCA9IHNvY2tldF9pb19jbGllbnQ7XHJcblxyXG5AaW5qZWN0YWJsZSgpXHJcbkBzaW5nbGV0b24oKVxyXG5leHBvcnQgY2xhc3MgUHJvZ3Jlc3NlcyB7XHJcblxyXG4gICAgcHJvdGVjdGVkIGNsaWVudDogU29ja2V0SU9DbGllbnQuU29ja2V0O1xyXG4gICAgcmVhZG9ubHkgY29sbGVjdGlvbjogQ29sbGVjdGlvbjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihyZWFkb25seSBjb25uZWN0b3I6IE1vbmdvQ29ubmVjdG9yLCByZWFkb25seSBjb25maWc6IENvbmZpZ3VyYXRpb24pIHtcclxuICAgICAgICBjb25zdCBtYWluRW5kcG9pbnQgPSB0aGlzLmNvbmZpZy5yZXNvbHZlKFwibWFpbkVuZHBvaW50XCIpO1xyXG4gICAgICAgIHRoaXMuY2xpZW50ID0gIW1haW5FbmRwb2ludCA/IG51bGwgOiBzb2NrZXRJT0NsaWVudChtYWluRW5kcG9pbnQsIHtwYXRoOiBcIi9zb2NrZXRcIn0pO1xyXG4gICAgICAgIHRoaXMuY29sbGVjdGlvbiA9IGNvbm5lY3Rvci5kYXRhYmFzZS5jb2xsZWN0aW9uKFwicHJvZ3Jlc3Nlc1wiKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyB3YWl0VG9GaW5pc2goaWQ6IHN0cmluZyk6IFByb21pc2U8SVByb2dyZXNzPiB7XHJcbiAgICAgICAgbGV0IGlzRmluaXNoZWQgPSBmYWxzZTtcclxuICAgICAgICBsZXQgcHJvZ3Jlc3M6IElQcm9ncmVzcyA9IG51bGw7XHJcbiAgICAgICAgd2hpbGUgKCFpc0ZpbmlzaGVkKSB7XHJcbiAgICAgICAgICAgIHByb2dyZXNzID0gYXdhaXQgdGhpcy5nZXQoaWQpO1xyXG4gICAgICAgICAgICBpZiAoIXByb2dyZXNzKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBgUHJvZ3Jlc3MgZG9lcyBub3QgZXhpc3RzIHdpdGggaWQ6ICR7aWR9YDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocHJvZ3Jlc3MuZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IHByb2dyZXNzLmVycm9yO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlzRmluaXNoZWQgPSBwcm9ncmVzcy5wZXJjZW50ID09IDEwMDtcclxuICAgICAgICAgICAgaWYgKCFpc0ZpbmlzaGVkKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBwcm9taXNlVGltZW91dCgxNTApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwcm9ncmVzcztcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXQoaWQ6IHN0cmluZyk6IFByb21pc2U8SVByb2dyZXNzPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZmluZCh7X2lkOiBuZXcgT2JqZWN0SWQoaWQpfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZmluZCh3aGVyZTogRmlsdGVyUXVlcnk8SVByb2dyZXNzPik6IFByb21pc2U8SVByb2dyZXNzPiB7XHJcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuY29sbGVjdGlvbi5maW5kT25lKHdoZXJlKTtcclxuICAgICAgICByZXR1cm4gIWRhdGEgPyBudWxsIDogbmV3IFByb2dyZXNzKFxyXG4gICAgICAgICAgICBkYXRhLl9pZCwgZGF0YS5jdXJyZW50LCBkYXRhLm1heCwgZGF0YS5tZXNzYWdlLCBkYXRhLmVycm9yLFxyXG4gICAgICAgICAgICB0aGlzLmNsaWVudCwgdGhpcy5jb2xsZWN0aW9uXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjcmVhdGUobWF4OiBudW1iZXIgPSAxMDApOiBQcm9taXNlPElQcm9ncmVzcz4ge1xyXG4gICAgICAgIGlmIChpc05hTihtYXgpIHx8IG1heCA8PSAwKSB7XHJcbiAgICAgICAgICAgIHRocm93IFwiTWF4IHByb2dyZXNzIHZhbHVlIG11c3QgYmUgYmlnZ2VyIHRoYW4gemVyb1wiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmNvbGxlY3Rpb24uaW5zZXJ0T25lKHtcclxuICAgICAgICAgICAgY3VycmVudDogMCxcclxuICAgICAgICAgICAgbWF4XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9ncmVzcyhcclxuICAgICAgICAgICAgcmVzLmluc2VydGVkSWQsIDAsIG1heCwgXCJcIiwgXCJcIixcclxuICAgICAgICAgICAgdGhpcy5jbGllbnQsIHRoaXMuY29sbGVjdGlvblxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcmVtb3ZlKGlkOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuY29sbGVjdGlvbi5kZWxldGVPbmUoe19pZDogbmV3IE9iamVjdElkKGlkKX0pO1xyXG4gICAgICAgIHJldHVybiBpZDtcclxuICAgIH1cclxufVxyXG4iXX0=
|
|
@@ -1,89 +1,89 @@
|
|
|
1
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
-
};
|
|
7
|
-
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
-
};
|
|
10
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
11
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
12
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
13
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
14
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
15
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
16
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
17
|
-
});
|
|
18
|
-
};
|
|
19
|
-
import { injectable, singleton } from "tsyringe";
|
|
20
|
-
import { lstatSync, readdir, readFileSync } from "fs";
|
|
21
|
-
import { join } from "path";
|
|
22
|
-
import * as Handlebars from "handlebars";
|
|
23
|
-
import { Translator } from "./translator";
|
|
24
|
-
import { Configuration } from "./configuration";
|
|
25
|
-
let TemplateRenderer = class TemplateRenderer {
|
|
26
|
-
constructor(translator, config) {
|
|
27
|
-
this.translator = translator;
|
|
28
|
-
this.config = config;
|
|
29
|
-
this.templates = {};
|
|
30
|
-
Handlebars.registerHelper(`object`, function ({ hash }) {
|
|
31
|
-
return hash;
|
|
32
|
-
});
|
|
33
|
-
Handlebars.registerHelper(`now`, function () {
|
|
34
|
-
return new Date().getTime();
|
|
35
|
-
});
|
|
36
|
-
Handlebars.registerHelper(`keys`, function (obj) {
|
|
37
|
-
return !obj ? [] : Object.keys(obj);
|
|
38
|
-
});
|
|
39
|
-
Handlebars.registerHelper(`translate`, function (key, params) {
|
|
40
|
-
return translator.getTranslationSync(this.language, key, params);
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
init() {
|
|
44
|
-
this.initPromise = this.initPromise || this.parseTemplates(this.config.resolve("templatesDir"), []);
|
|
45
|
-
return this.initPromise;
|
|
46
|
-
}
|
|
47
|
-
parseTemplates(dir, dirPath) {
|
|
48
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
49
|
-
return new Promise(resolve => {
|
|
50
|
-
readdir(dir, (err, files) => __awaiter(this, void 0, void 0, function* () {
|
|
51
|
-
for (let file of files) {
|
|
52
|
-
const path = join(dir, file);
|
|
53
|
-
if (lstatSync(path).isDirectory()) {
|
|
54
|
-
yield this.parseTemplates(join(dir, file), dirPath.concat([file]));
|
|
55
|
-
continue;
|
|
56
|
-
}
|
|
57
|
-
const parts = file.split(".");
|
|
58
|
-
parts.pop();
|
|
59
|
-
const name = parts.join(".");
|
|
60
|
-
const fullName = dirPath.concat([name]).join("-");
|
|
61
|
-
const content = readFileSync(path).toString("utf8");
|
|
62
|
-
this.templates[fullName] = Handlebars.compile(content);
|
|
63
|
-
Handlebars.registerPartial(fullName, content);
|
|
64
|
-
}
|
|
65
|
-
resolve();
|
|
66
|
-
}));
|
|
67
|
-
});
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
render(template, language, context) {
|
|
71
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
72
|
-
yield this.init();
|
|
73
|
-
yield this.translator.getDictionary(language);
|
|
74
|
-
if (!this.templates[template]) {
|
|
75
|
-
return Promise.reject(`Template not found with name: ${template}`);
|
|
76
|
-
}
|
|
77
|
-
context = Object.assign({ language }, context || {});
|
|
78
|
-
const res = this.templates[template](context);
|
|
79
|
-
return res instanceof Error ? yield Promise.reject(res) : res;
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
};
|
|
83
|
-
TemplateRenderer = __decorate([
|
|
84
|
-
injectable(),
|
|
85
|
-
singleton(),
|
|
86
|
-
__metadata("design:paramtypes", [Translator, Configuration])
|
|
87
|
-
], TemplateRenderer);
|
|
88
|
-
export { TemplateRenderer };
|
|
89
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
11
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
12
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
13
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
14
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
15
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
16
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
17
|
+
});
|
|
18
|
+
};
|
|
19
|
+
import { injectable, singleton } from "tsyringe";
|
|
20
|
+
import { lstatSync, readdir, readFileSync } from "fs";
|
|
21
|
+
import { join } from "path";
|
|
22
|
+
import * as Handlebars from "handlebars";
|
|
23
|
+
import { Translator } from "./translator";
|
|
24
|
+
import { Configuration } from "./configuration";
|
|
25
|
+
let TemplateRenderer = class TemplateRenderer {
|
|
26
|
+
constructor(translator, config) {
|
|
27
|
+
this.translator = translator;
|
|
28
|
+
this.config = config;
|
|
29
|
+
this.templates = {};
|
|
30
|
+
Handlebars.registerHelper(`object`, function ({ hash }) {
|
|
31
|
+
return hash;
|
|
32
|
+
});
|
|
33
|
+
Handlebars.registerHelper(`now`, function () {
|
|
34
|
+
return new Date().getTime();
|
|
35
|
+
});
|
|
36
|
+
Handlebars.registerHelper(`keys`, function (obj) {
|
|
37
|
+
return !obj ? [] : Object.keys(obj);
|
|
38
|
+
});
|
|
39
|
+
Handlebars.registerHelper(`translate`, function (key, params) {
|
|
40
|
+
return translator.getTranslationSync(this.language, key, params);
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
init() {
|
|
44
|
+
this.initPromise = this.initPromise || this.parseTemplates(this.config.resolve("templatesDir"), []);
|
|
45
|
+
return this.initPromise;
|
|
46
|
+
}
|
|
47
|
+
parseTemplates(dir, dirPath) {
|
|
48
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
49
|
+
return new Promise(resolve => {
|
|
50
|
+
readdir(dir, (err, files) => __awaiter(this, void 0, void 0, function* () {
|
|
51
|
+
for (let file of files) {
|
|
52
|
+
const path = join(dir, file);
|
|
53
|
+
if (lstatSync(path).isDirectory()) {
|
|
54
|
+
yield this.parseTemplates(join(dir, file), dirPath.concat([file]));
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
const parts = file.split(".");
|
|
58
|
+
parts.pop();
|
|
59
|
+
const name = parts.join(".");
|
|
60
|
+
const fullName = dirPath.concat([name]).join("-");
|
|
61
|
+
const content = readFileSync(path).toString("utf8");
|
|
62
|
+
this.templates[fullName] = Handlebars.compile(content);
|
|
63
|
+
Handlebars.registerPartial(fullName, content);
|
|
64
|
+
}
|
|
65
|
+
resolve();
|
|
66
|
+
}));
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
render(template, language, context) {
|
|
71
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
72
|
+
yield this.init();
|
|
73
|
+
yield this.translator.getDictionary(language);
|
|
74
|
+
if (!this.templates[template]) {
|
|
75
|
+
return Promise.reject(`Template not found with name: ${template}`);
|
|
76
|
+
}
|
|
77
|
+
context = Object.assign({ language }, context || {});
|
|
78
|
+
const res = this.templates[template](context);
|
|
79
|
+
return res instanceof Error ? yield Promise.reject(res) : res;
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
TemplateRenderer = __decorate([
|
|
84
|
+
injectable(),
|
|
85
|
+
singleton(),
|
|
86
|
+
__metadata("design:paramtypes", [Translator, Configuration])
|
|
87
|
+
], TemplateRenderer);
|
|
88
|
+
export { TemplateRenderer };
|
|
89
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtcmVuZGVyZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvdGVtcGxhdGUtcmVuZGVyZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDL0MsT0FBTyxFQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFDLE1BQU0sSUFBSSxDQUFDO0FBQ3BELE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDMUIsT0FBTyxLQUFLLFVBQVUsTUFBTSxZQUFZLENBQUM7QUFFekMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0saUJBQWlCLENBQUM7SUFJakMsZ0JBQWdCLFNBQWhCLGdCQUFnQjtJQU16QixZQUFxQixVQUFzQixFQUFXLE1BQXFCO1FBQXRELGVBQVUsR0FBVixVQUFVLENBQVk7UUFBVyxXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQ3ZFLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLFVBQVUsQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLFVBQVMsRUFBQyxJQUFJLEVBQUM7WUFDL0MsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQyxDQUFDLENBQUM7UUFDSCxVQUFVLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRTtZQUM3QixPQUFPLElBQUksSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDaEMsQ0FBQyxDQUFDLENBQUM7UUFDSCxVQUFVLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxVQUFTLEdBQVE7WUFDL0MsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FB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QUFHLENBQUM7UUFDbEUsQ0FBQztLQUFBO0NBQ0osQ0FBQTtBQTNEWSxnQkFBZ0I7SUFGNUIsVUFBVSxFQUFFO0lBQ1osU0FBUyxFQUFFO3FDQU95QixVQUFVLEVBQW1CLGFBQWE7R0FObEUsZ0JBQWdCLENBMkQ1QjtTQTNEWSxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2luamVjdGFibGUsIHNpbmdsZXRvbn0gZnJvbSBcInRzeXJpbmdlXCI7XHJcbmltcG9ydCB7bHN0YXRTeW5jLCByZWFkZGlyLCByZWFkRmlsZVN5bmN9IGZyb20gXCJmc1wiO1xyXG5pbXBvcnQge2pvaW59IGZyb20gXCJwYXRoXCI7XHJcbmltcG9ydCAqIGFzIEhhbmRsZWJhcnMgZnJvbSBcImhhbmRsZWJhcnNcIjtcclxuXHJcbmltcG9ydCB7VHJhbnNsYXRvcn0gZnJvbSBcIi4vdHJhbnNsYXRvclwiO1xyXG5pbXBvcnQge0NvbmZpZ3VyYXRpb259IGZyb20gXCIuL2NvbmZpZ3VyYXRpb25cIjtcclxuXHJcbkBpbmplY3RhYmxlKClcclxuQHNpbmdsZXRvbigpXHJcbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZVJlbmRlcmVyIHtcclxuXHJcbiAgICB0ZW1wbGF0ZXM6IHtbbmFtZTogc3RyaW5nXTogRnVuY3Rpb259O1xyXG5cclxuICAgIHByb3RlY3RlZCBpbml0UHJvbWlzZTogUHJvbWlzZTxhbnk+O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHJlYWRvbmx5IHRyYW5zbGF0b3I6IFRyYW5zbGF0b3IsIHJlYWRvbmx5IGNvbmZpZzogQ29uZmlndXJhdGlvbikge1xyXG4gICAgICAgIHRoaXMudGVtcGxhdGVzID0ge307XHJcbiAgICAgICAgSGFuZGxlYmFycy5yZWdpc3RlckhlbHBlcihgb2JqZWN0YCwgZnVuY3Rpb24oe2hhc2h9KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBoYXNoO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIEhhbmRsZWJhcnMucmVnaXN0ZXJIZWxwZXIoYG5vd2AsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgSGFuZGxlYmFycy5yZWdpc3RlckhlbHBlcihga2V5c2AsIGZ1bmN0aW9uKG9iajogYW55KSB7XHJcbiAgICAgICAgICAgIHJldHVybiAhb2JqID8gW10gOiBPYmplY3Qua2V5cyhvYmopO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIEhhbmRsZWJhcnMucmVnaXN0ZXJIZWxwZXIoYHRyYW5zbGF0ZWAsIGZ1bmN0aW9uIChrZXk6IHN0cmluZywgcGFyYW1zOiBhbnkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRyYW5zbGF0b3IuZ2V0VHJhbnNsYXRpb25TeW5jKHRoaXMubGFuZ3VhZ2UsIGtleSwgcGFyYW1zKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgaW5pdCgpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHRoaXMuaW5pdFByb21pc2UgPSB0aGlzLmluaXRQcm9taXNlIHx8IHRoaXMucGFyc2VUZW1wbGF0ZXModGhpcy5jb25maWcucmVzb2x2ZShcInRlbXBsYXRlc0RpclwiKSwgW10pO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmluaXRQcm9taXNlO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHBhcnNlVGVtcGxhdGVzKGRpcjogc3RyaW5nLCBkaXJQYXRoOiBzdHJpbmdbXSk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPGFueT4ocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgICAgIHJlYWRkaXIoZGlyLCBhc3luYyAoZXJyLCBmaWxlcykgPT4ge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgZmlsZSBvZiBmaWxlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdGggPSBqb2luKGRpciwgZmlsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxzdGF0U3luYyhwYXRoKS5pc0RpcmVjdG9yeSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGFyc2VUZW1wbGF0ZXMoam9pbihkaXIsIGZpbGUpLCBkaXJQYXRoLmNvbmNhdChbZmlsZV0pKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnRzID0gZmlsZS5zcGxpdChcIi5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFydHMucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IHBhcnRzLmpvaW4oXCIuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZ1bGxOYW1lID0gZGlyUGF0aC5jb25jYXQoW25hbWVdKS5qb2luKFwiLVwiKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250ZW50ID0gcmVhZEZpbGVTeW5jKHBhdGgpLnRvU3RyaW5nKFwidXRmOFwiKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRlbXBsYXRlc1tmdWxsTmFtZV0gPSBIYW5kbGViYXJzLmNvbXBpbGUoY29udGVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgSGFuZGxlYmFycy5yZWdpc3RlclBhcnRpYWwoZnVsbE5hbWUsIGNvbnRlbnQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyByZW5kZXIodGVtcGxhdGU6IHN0cmluZywgbGFuZ3VhZ2U6IHN0cmluZywgY29udGV4dD86IGFueSk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5pbml0KCk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy50cmFuc2xhdG9yLmdldERpY3Rpb25hcnkobGFuZ3VhZ2UpO1xyXG4gICAgICAgIGlmICghdGhpcy50ZW1wbGF0ZXNbdGVtcGxhdGVdKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChgVGVtcGxhdGUgbm90IGZvdW5kIHdpdGggbmFtZTogJHt0ZW1wbGF0ZX1gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29udGV4dCA9IE9iamVjdC5hc3NpZ24oe2xhbmd1YWdlfSwgY29udGV4dCB8fCB7fSk7XHJcbiAgICAgICAgY29uc3QgcmVzID0gdGhpcy50ZW1wbGF0ZXNbdGVtcGxhdGVdKGNvbnRleHQpO1xyXG4gICAgICAgIHJldHVybiByZXMgaW5zdGFuY2VvZiBFcnJvciA/IGF3YWl0IFByb21pc2UucmVqZWN0KHJlcykgOiByZXM7XHJcbiAgICB9XHJcbn1cclxuIl19
|