@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,55 +1,55 @@
|
|
|
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 __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
11
|
-
return function (target, key) { decorator(target, key, paramIndex); }
|
|
12
|
-
};
|
|
13
|
-
import { injectable, injectAll, scoped, Lifecycle } from "tsyringe";
|
|
14
|
-
import { PARAMETER } from "../common-types";
|
|
15
|
-
import { convertValue, getType, isFunction } from "../utils";
|
|
16
|
-
import dotenv from "dotenv";
|
|
17
|
-
let Configuration = class Configuration {
|
|
18
|
-
constructor(params) {
|
|
19
|
-
dotenv.config();
|
|
20
|
-
this.paramMap = {};
|
|
21
|
-
(params || []).forEach(param => this.add(param));
|
|
22
|
-
}
|
|
23
|
-
add(param) {
|
|
24
|
-
const existingParam = this.paramMap[param.name] || param;
|
|
25
|
-
existingParam.defaultValue = param.defaultValue;
|
|
26
|
-
existingParam.resolver = param.resolver || existingParam.resolver;
|
|
27
|
-
this.paramMap[param.name] = existingParam;
|
|
28
|
-
}
|
|
29
|
-
hasParam(name) {
|
|
30
|
-
return !!this.paramMap[name];
|
|
31
|
-
}
|
|
32
|
-
resolve(name) {
|
|
33
|
-
const param = this.paramMap[name];
|
|
34
|
-
if (!param)
|
|
35
|
-
throw new Error(`Parameter with name: '${name}' does not exists in configuration`);
|
|
36
|
-
const envName = param.name.replace(/\.?([A-Z|0-9]+)/g, function (x, y) {
|
|
37
|
-
return "_" + y.toLowerCase();
|
|
38
|
-
}).replace(/\./gi, "_").replace(/^_/, "").toUpperCase();
|
|
39
|
-
const envValue = process.env[envName];
|
|
40
|
-
if (typeof envValue !== "undefined") {
|
|
41
|
-
return isFunction(param.resolver)
|
|
42
|
-
? param.resolver(envValue)
|
|
43
|
-
: convertValue(envValue, getType(param.defaultValue));
|
|
44
|
-
}
|
|
45
|
-
return param.defaultValue;
|
|
46
|
-
}
|
|
47
|
-
};
|
|
48
|
-
Configuration = __decorate([
|
|
49
|
-
injectable(),
|
|
50
|
-
scoped(Lifecycle.ContainerScoped),
|
|
51
|
-
__param(0, injectAll(PARAMETER)),
|
|
52
|
-
__metadata("design:paramtypes", [Array])
|
|
53
|
-
], Configuration);
|
|
54
|
-
export { Configuration };
|
|
55
|
-
//# 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 __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
11
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
12
|
+
};
|
|
13
|
+
import { injectable, injectAll, scoped, Lifecycle } from "tsyringe";
|
|
14
|
+
import { PARAMETER } from "../common-types";
|
|
15
|
+
import { convertValue, getType, isFunction } from "../utils";
|
|
16
|
+
import dotenv from "dotenv";
|
|
17
|
+
let Configuration = class Configuration {
|
|
18
|
+
constructor(params) {
|
|
19
|
+
dotenv.config();
|
|
20
|
+
this.paramMap = {};
|
|
21
|
+
(params || []).forEach(param => this.add(param));
|
|
22
|
+
}
|
|
23
|
+
add(param) {
|
|
24
|
+
const existingParam = this.paramMap[param.name] || param;
|
|
25
|
+
existingParam.defaultValue = param.defaultValue;
|
|
26
|
+
existingParam.resolver = param.resolver || existingParam.resolver;
|
|
27
|
+
this.paramMap[param.name] = existingParam;
|
|
28
|
+
}
|
|
29
|
+
hasParam(name) {
|
|
30
|
+
return !!this.paramMap[name];
|
|
31
|
+
}
|
|
32
|
+
resolve(name) {
|
|
33
|
+
const param = this.paramMap[name];
|
|
34
|
+
if (!param)
|
|
35
|
+
throw new Error(`Parameter with name: '${name}' does not exists in configuration`);
|
|
36
|
+
const envName = param.name.replace(/\.?([A-Z|0-9]+)/g, function (x, y) {
|
|
37
|
+
return "_" + y.toLowerCase();
|
|
38
|
+
}).replace(/\./gi, "_").replace(/^_/, "").toUpperCase();
|
|
39
|
+
const envValue = process.env[envName];
|
|
40
|
+
if (typeof envValue !== "undefined") {
|
|
41
|
+
return isFunction(param.resolver)
|
|
42
|
+
? param.resolver(envValue)
|
|
43
|
+
: convertValue(envValue, getType(param.defaultValue));
|
|
44
|
+
}
|
|
45
|
+
return param.defaultValue;
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
Configuration = __decorate([
|
|
49
|
+
injectable(),
|
|
50
|
+
scoped(Lifecycle.ContainerScoped),
|
|
51
|
+
__param(0, injectAll(PARAMETER)),
|
|
52
|
+
__metadata("design:paramtypes", [Array])
|
|
53
|
+
], Configuration);
|
|
54
|
+
export { Configuration };
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9jb25maWd1cmF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDbEUsT0FBTyxFQUFDLFNBQVMsRUFBWSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JELE9BQU8sRUFBQyxZQUFZLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUMzRCxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7SUFJZixhQUFhLFNBQWIsYUFBYTtJQUl0QixZQUFrQyxNQUFtQjtRQUNqRCxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDaEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDbkIsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFUyxHQUFHLENBQUMsS0FBZ0I7UUFDMUIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDO1FBQ3pELGFBQWEsQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQztRQUNoRCxhQUFhLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLElBQUksYUFBYSxDQUFDLFFBQVEsQ0FBQztRQUNsRSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxhQUFhLENBQUM7SUFDOUMsQ0FBQztJQUVELFFBQVEsQ0FBQyxJQUFZO1FBQ2pCLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELE9BQU8sQ0FBQyxJQUFZO1FBQ2hCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLEtBQUs7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixJQUFJLG9DQUFvQyxDQUFDLENBQUM7UUFDL0YsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLEVBQUUsVUFBVSxDQUFDLEVBQUMsQ0FBQztZQUNoRSxPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUE7UUFDaEMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3hELE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdEMsSUFBSSxPQUFPLFFBQVEsS0FBSyxXQUFXLEVBQUU7WUFDakMsT0FBTyxVQUFVLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztnQkFDN0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO2dCQUMxQixDQUFDLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7U0FDN0Q7UUFDRCxPQUFPLEtBQUssQ0FBQyxZQUFZLENBQUM7SUFDOUIsQ0FBQztDQUNKLENBQUE7QUFuQ1ksYUFBYTtJQUZ6QixVQUFVLEVBQUU7SUFDWixNQUFNLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQztJQUtqQixXQUFBLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQTs7R0FKeEIsYUFBYSxDQW1DekI7U0FuQ1ksYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7aW5qZWN0YWJsZSwgaW5qZWN0QWxsLCBzY29wZWQsIExpZmVjeWNsZX0gZnJvbSBcInRzeXJpbmdlXCI7XHJcbmltcG9ydCB7UEFSQU1FVEVSLCBQYXJhbWV0ZXJ9IGZyb20gXCIuLi9jb21tb24tdHlwZXNcIjtcclxuaW1wb3J0IHtjb252ZXJ0VmFsdWUsIGdldFR5cGUsIGlzRnVuY3Rpb259IGZyb20gXCIuLi91dGlsc1wiO1xyXG5pbXBvcnQgZG90ZW52IGZyb20gXCJkb3RlbnZcIjtcclxuXHJcbkBpbmplY3RhYmxlKClcclxuQHNjb3BlZChMaWZlY3ljbGUuQ29udGFpbmVyU2NvcGVkKVxyXG5leHBvcnQgY2xhc3MgQ29uZmlndXJhdGlvbiB7XHJcblxyXG4gICAgcHJvdGVjdGVkIHBhcmFtTWFwOiB7W25hbWU6IHN0cmluZ106IFBhcmFtZXRlcn07XHJcblxyXG4gICAgY29uc3RydWN0b3IoQGluamVjdEFsbChQQVJBTUVURVIpIHBhcmFtczogUGFyYW1ldGVyW10pIHtcclxuICAgICAgICBkb3RlbnYuY29uZmlnKCk7XHJcbiAgICAgICAgdGhpcy5wYXJhbU1hcCA9IHt9O1xyXG4gICAgICAgIChwYXJhbXMgfHwgW10pLmZvckVhY2gocGFyYW0gPT4gdGhpcy5hZGQocGFyYW0pKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgYWRkKHBhcmFtOiBQYXJhbWV0ZXIpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBleGlzdGluZ1BhcmFtID0gdGhpcy5wYXJhbU1hcFtwYXJhbS5uYW1lXSB8fCBwYXJhbTtcclxuICAgICAgICBleGlzdGluZ1BhcmFtLmRlZmF1bHRWYWx1ZSA9IHBhcmFtLmRlZmF1bHRWYWx1ZTtcclxuICAgICAgICBleGlzdGluZ1BhcmFtLnJlc29sdmVyID0gcGFyYW0ucmVzb2x2ZXIgfHwgZXhpc3RpbmdQYXJhbS5yZXNvbHZlcjtcclxuICAgICAgICB0aGlzLnBhcmFtTWFwW3BhcmFtLm5hbWVdID0gZXhpc3RpbmdQYXJhbTtcclxuICAgIH1cclxuXHJcbiAgICBoYXNQYXJhbShuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gISF0aGlzLnBhcmFtTWFwW25hbWVdO1xyXG4gICAgfVxyXG5cclxuICAgIHJlc29sdmUobmFtZTogc3RyaW5nKTogYW55IHtcclxuICAgICAgICBjb25zdCBwYXJhbSA9IHRoaXMucGFyYW1NYXBbbmFtZV07XHJcbiAgICAgICAgaWYgKCFwYXJhbSkgdGhyb3cgbmV3IEVycm9yKGBQYXJhbWV0ZXIgd2l0aCBuYW1lOiAnJHtuYW1lfScgZG9lcyBub3QgZXhpc3RzIGluIGNvbmZpZ3VyYXRpb25gKTtcclxuICAgICAgICBjb25zdCBlbnZOYW1lID0gcGFyYW0ubmFtZS5yZXBsYWNlKC9cXC4/KFtBLVp8MC05XSspL2csIGZ1bmN0aW9uICh4LHkpe1xyXG4gICAgICAgICAgICByZXR1cm4gXCJfXCIgKyB5LnRvTG93ZXJDYXNlKClcclxuICAgICAgICB9KS5yZXBsYWNlKC9cXC4vZ2ksIFwiX1wiKS5yZXBsYWNlKC9eXy8sIFwiXCIpLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgICAgY29uc3QgZW52VmFsdWUgPSBwcm9jZXNzLmVudltlbnZOYW1lXTtcclxuICAgICAgICBpZiAodHlwZW9mIGVudlZhbHVlICE9PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpc0Z1bmN0aW9uKHBhcmFtLnJlc29sdmVyKVxyXG4gICAgICAgICAgICAgICAgPyBwYXJhbS5yZXNvbHZlcihlbnZWYWx1ZSlcclxuICAgICAgICAgICAgICAgIDogY29udmVydFZhbHVlKGVudlZhbHVlLCBnZXRUeXBlKHBhcmFtLmRlZmF1bHRWYWx1ZSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcGFyYW0uZGVmYXVsdFZhbHVlO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -1,29 +1,29 @@
|
|
|
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 __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
8
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
9
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
10
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
11
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
12
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
13
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
14
|
-
});
|
|
15
|
-
};
|
|
16
|
-
import { injectable, Lifecycle, scoped } from "tsyringe";
|
|
17
|
-
let EndpointProvider = class EndpointProvider {
|
|
18
|
-
configure(app) {
|
|
19
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
20
|
-
console.log(`Express app is mounted to: ${app.mountpath}`);
|
|
21
|
-
});
|
|
22
|
-
}
|
|
23
|
-
};
|
|
24
|
-
EndpointProvider = __decorate([
|
|
25
|
-
injectable(),
|
|
26
|
-
scoped(Lifecycle.ContainerScoped)
|
|
27
|
-
], EndpointProvider);
|
|
28
|
-
export { EndpointProvider };
|
|
29
|
-
//# 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 __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
8
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
9
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
10
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
11
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
12
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
13
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
14
|
+
});
|
|
15
|
+
};
|
|
16
|
+
import { injectable, Lifecycle, scoped } from "tsyringe";
|
|
17
|
+
let EndpointProvider = class EndpointProvider {
|
|
18
|
+
configure(app) {
|
|
19
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
20
|
+
console.log(`Express app is mounted to: ${app.mountpath}`);
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
EndpointProvider = __decorate([
|
|
25
|
+
injectable(),
|
|
26
|
+
scoped(Lifecycle.ContainerScoped)
|
|
27
|
+
], EndpointProvider);
|
|
28
|
+
export { EndpointProvider };
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5kcG9pbnQtcHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvZW5kcG9pbnQtcHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFDLE1BQU0sVUFBVSxDQUFDO0lBSzFDLGdCQUFnQixTQUFoQixnQkFBZ0I7SUFFbkIsU0FBUyxDQUFDLEdBQVk7O1lBQ3hCLE9BQU8sQ0FBQyxHQUFHLENBQUMsOEJBQThCLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQy9ELENBQUM7S0FBQTtDQUNKLENBQUE7QUFMWSxnQkFBZ0I7SUFGNUIsVUFBVSxFQUFFO0lBQ1osTUFBTSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUM7R0FDckIsZ0JBQWdCLENBSzVCO1NBTFksZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtpbmplY3RhYmxlLCBMaWZlY3ljbGUsIHNjb3BlZH0gZnJvbSBcInRzeXJpbmdlXCI7XHJcbmltcG9ydCB7RXhwcmVzc30gZnJvbSBcImV4cHJlc3NcIjtcclxuXHJcbkBpbmplY3RhYmxlKClcclxuQHNjb3BlZChMaWZlY3ljbGUuQ29udGFpbmVyU2NvcGVkKVxyXG5leHBvcnQgY2xhc3MgRW5kcG9pbnRQcm92aWRlciB7XHJcblxyXG4gICAgYXN5bmMgY29uZmlndXJlKGFwcDogRXhwcmVzcyk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coYEV4cHJlc3MgYXBwIGlzIG1vdW50ZWQgdG86ICR7YXBwLm1vdW50cGF0aH1gKTtcclxuICAgIH1cclxufVxyXG4iXX0=
|
|
@@ -1,112 +1,166 @@
|
|
|
1
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
-
});
|
|
9
|
-
};
|
|
10
|
-
import sharp_ from "sharp";
|
|
11
|
-
import { bufferToStream, deleteFromBucket, streamToBuffer } from "../../utils";
|
|
12
|
-
const sharp = sharp_;
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc2VydmljZXMvZW50aXRpZXMvYXNzZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxNQUFNLE1BQU0sT0FBTyxDQUFDO0FBTTNCLE9BQU8sRUFBQyxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRTdFLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQztBQUVyQixNQUFNLE9BQU8sS0FBSztJQXNEZCxZQUFxQixNQUFnQixFQUNoQixRQUFnQixFQUNoQixXQUFtQixFQUNuQixRQUFvQixFQUNuQixNQUFvQixFQUNwQixVQUFzQjtRQUx2QixXQUFNLEdBQU4sTUFBTSxDQUFVO1FBQ2hCLGFBQVEsR0FBUixRQUFRLENBQVE7UUFDaEIsZ0JBQVcsR0FBWCxXQUFXLENBQVE7UUFDbkIsYUFBUSxHQUFSLFFBQVEsQ0FBWTtRQUNuQixXQUFNLEdBQU4sTUFBTSxDQUFjO1FBQ3BCLGVBQVUsR0FBVixVQUFVLENBQVk7SUFDNUMsQ0FBQztJQTFETyxNQUFNLENBQU8sT0FBTyxDQUFDLE1BQWdCLEVBQUUsTUFBMEI7O1lBQ3JFLE1BQU0sR0FBRyxNQUFNLElBQUksRUFBRSxDQUFDO1lBQ3RCLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQztnQkFBRSxPQUFPLE1BQU0sQ0FBQztZQUNuRCxJQUFJLE1BQU0sR0FBRyxNQUFNLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUUxQyxlQUFlO1lBQ2YsTUFBTSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFF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SyxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDaEUsQ0FBQztLQUFBO0lBRUQsTUFBTTtRQUNGLE9BQU87WUFDSCxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7WUFDWCxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdkIsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO1lBQzdCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtTQUMxQixDQUFDO0lBQ04sQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHNoYXJwXyBmcm9tIFwic2hhcnBcIjtcbmltcG9ydCB7UmVhZGFibGV9IGZyb20gXCJzdHJlYW1cIjtcbmltcG9ydCB7Q29sbGVjdGlvbiwgR3JpZEZTQnVja2V0fSBmcm9tIFwibW9uZ29kYlwiO1xuaW1wb3J0IHtPYmplY3RJZH0gZnJvbSBcImJzb25cIjtcblxuaW1wb3J0IHtJQXNzZXQsIElBc3NldEltYWdlUGFyYW1zLCBJQXNzZXRNZXRhfSBmcm9tIFwiLi4vLi4vY29tbW9uLXR5cGVzXCI7XG5pbXBvcnQge2J1ZmZlclRvU3RyZWFtLCBkZWxldGVGcm9tQnVja2V0LCBzdHJlYW1Ub0J1ZmZlcn0gZnJvbSBcIi4uLy4uL3V0aWxzXCI7XG5cbmNvbnN0IHNoYXJwID0gc2hhcnBfO1xuXG5leHBvcnQgY2xhc3MgQXNzZXQgaW1wbGVtZW50cyBJQXNzZXQge1xuXG4gICAgcHJpdmF0ZSBzdGF0aWMgYXN5bmMgdG9JbWFnZShzdHJlYW06IFJlYWRhYmxlLCBwYXJhbXM/OiBJQXNzZXRJbWFnZVBhcmFtcyk6IFByb21pc2U8UmVhZGFibGU+IHtcbiAgICAgICAgcGFyYW1zID0gcGFyYW1zIHx8IHt9O1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMocGFyYW1zKS5sZW5ndGggPT0gMCkgcmV0dXJuIHN0cmVhbTtcbiAgICAgICAgbGV0IGJ1ZmZlciA9IGF3YWl0IHN0cmVhbVRvQnVmZmVyKHN0cmVhbSk7XG5cbiAgICAgICAgLy8gUGFyc2UgcGFyYW1zXG4gICAgICAgIHBhcmFtcy5yb3RhdGlvbiA9IGlzTmFOKHBhcmFtcy5yb3RhdGlvbikgPyAwIDogTWF0aC5yb3VuZChwYXJhbXMucm90YXRpb24gLyA5MCkgKiA5MDtcbiAgICAgICAgcGFyYW1zLmNhbnZhc1NjYWxlWCA9IGlzTmFOKHBhcmFtcy5jYW52YXNTY2FsZVgpID8gMSA6IHBhcmFtcy5jYW52YXNTY2FsZVg7XG4gICAgICAgIHBhcmFtcy5jYW52YXNTY2FsZVkgPSBpc05hTihwYXJhbXMuY2FudmFzU2NhbGVZKSA/IDEgOiBwYXJhbXMuY2FudmFzU2NhbGVZO1xuICAgICAgICBwYXJhbXMuc2NhbGVYID0gaXNOYU4ocGFyYW1zLnNjYWxlWCkgPyAxIDogcGFyYW1zLnNjYWxlWDtcbiAgICAgICAgcGFyYW1zLnNjYWxlWSA9IGlzTmFOKHBhcmFtcy5zY2FsZVkpID8gMSA6IHBhcmFtcy5zY2FsZVk7XG5cbiAgICAgICAgLy8gVHJ5IHRvIG1vZGlmeSBpbWFnZVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gR2V0IG1ldGFkYXRhXG4gICAgICAgICAgICBjb25zdCBtZXRhID0gYXdhaXQgc2hhcnAoYnVmZmVyKS5tZXRhZGF0YSgpO1xuICAgICAgICAgICAgbGV0IHdpZHRoID0gbWV0YS53aWR0aDtcbiAgICAgICAgICAgIGxldCBoZWlnaHQgPSBtZXRhLmhlaWdodDtcbiAgICAgICAgICAgIC8vIFJlc2l6ZSBjYW52YXNcbiAgICAgICAgICAgIGlmIChwYXJhbXMuY2FudmFzU2NhbGVYICE9PSAxIHx8IHBhcmFtcy5jYW52YXNTY2FsZVkgIT09IDEpIHtcbiAgICAgICAgICAgICAgICB3aWR0aCA9IE1hdGgucm91bmQod2lkdGggKiBwYXJhbXMuY2FudmFzU2NhbGVYKTtcbiAgICAgICAgICAgICAgICBoZWlnaHQgPSBNYXRoLnJvdW5kKGhlaWdodCAqIHBhcmFtcy5jYW52YXNTY2FsZVkpO1xuICAgICAgICAgICAgICAgIGJ1ZmZlciA9IGF3YWl0IHNoYXJwKGJ1ZmZlcilcbiAgICAgICAgICAgICAgICAgICAgLnJlc2l6ZSh7d2lkdGgsIGhlaWdodCwgYmFja2dyb3VuZDogXCIjMDAwMDAwMDBcIiwgZml0OiBcImNvbnRhaW5cIn0pXG4gICAgICAgICAgICAgICAgICAgIC50b0J1ZmZlcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gUmVzaXplIGltYWdlXG4gICAgICAgICAgICBpZiAocGFyYW1zLnNjYWxlWCAhPT0gMSB8fCBwYXJhbXMuc2NhbGVZICE9PSAxKSB7XG4gICAgICAgICAgICAgICAgd2lkdGggPSBNYXRoLnJvdW5kKHdpZHRoICogcGFyYW1zLnNjYWxlWCk7XG4gICAgICAgICAgICAgICAgaGVpZ2h0ID0gTWF0aC5yb3VuZChoZWlnaHQgKiBwYXJhbXMuc2NhbGVZKTtcbiAgICAgICAgICAgICAgICBidWZmZXIgPSBhd2FpdCBzaGFycChidWZmZXIpXG4gICAgICAgICAgICAgICAgICAgIC5yZXNpemUoe3dpZHRoLCBoZWlnaHQsIGJhY2tncm91bmQ6IFwiIzAwMDAwMDAwXCIsIGZpdDogXCJmaWxsXCJ9KVxuICAgICAgICAgICAgICAgICAgICAudG9CdWZmZXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFJvdGF0ZVxuICAgICAgICAgICAgaWYgKHBhcmFtcy5yb3RhdGlvbiAhPT0gMCkge1xuICAgICAgICAgICAgICAgIGJ1ZmZlciA9IGF3YWl0IHNoYXJwKGJ1ZmZlcikucm90YXRlKHBhcmFtcy5yb3RhdGlvbikudG9CdWZmZXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBidWZmZXJUb1N0cmVhbShidWZmZXIpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm4gYnVmZmVyVG9TdHJlYW0oYnVmZmVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBpZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5maWxlSWQudG9IZXhTdHJpbmcoKTtcbiAgICB9XG5cbiAgICBnZXQgc3RyZWFtKCk6IFJlYWRhYmxlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVja2V0Lm9wZW5Eb3dubG9hZFN0cmVhbSh0aGlzLmZpbGVJZCk7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IocmVhZG9ubHkgZmlsZUlkOiBPYmplY3RJZCxcbiAgICAgICAgICAgICAgICByZWFkb25seSBmaWxlbmFtZTogc3RyaW5nLFxuICAgICAgICAgICAgICAgIHJlYWRvbmx5IGNvbnRlbnRUeXBlOiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgcmVhZG9ubHkgbWV0YWRhdGE6IElBc3NldE1ldGEsXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIGJ1Y2tldDogR3JpZEZTQnVja2V0LFxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCBjb2xsZWN0aW9uOiBDb2xsZWN0aW9uKSB7XG4gICAgfVxuXG4gICAgYXN5bmMgdW5saW5rKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiBkZWxldGVGcm9tQnVja2V0KHRoaXMuYnVja2V0LCB0aGlzLmZpbGVJZCk7XG4gICAgfVxuXG4gICAgZ2V0QnVmZmVyKCk6IFByb21pc2U8QnVmZmVyPiB7XG4gICAgICAgIHJldHVybiBzdHJlYW1Ub0J1ZmZlcih0aGlzLnN0cmVhbSk7XG4gICAgfVxuXG4gICAgYXN5bmMgZG93bmxvYWQobWV0YWRhdGE/OiBJQXNzZXRNZXRhKTogUHJvbWlzZTxSZWFkYWJsZT4ge1xuICAgICAgICBtZXRhZGF0YSA9IE9iamVjdC5hc3NpZ24odGhpcy5tZXRhZGF0YSBhcyBJQXNzZXRNZXRhLCBtZXRhZGF0YSB8fCB7fSk7XG4gICAgICAgIG1ldGFkYXRhLmRvd25sb2FkQ291bnQgPSBpc05hTihtZXRhZGF0YS5kb3dubG9hZENvdW50KSB8fCAhbWV0YWRhdGEuZmlyc3REb3dubG9hZFxuICAgICAgICAgICAgPyAxXG4gICAgICAgICAgICA6IG1ldGFkYXRhLmRvd25sb2FkQ291bnQgKyAxO1xuICAgICAgICBtZXRhZGF0YS5maXJzdERvd25sb2FkID0gbWV0YWRhdGEuZmlyc3REb3dubG9hZCB8fCBuZXcgRGF0ZSgpO1xuICAgICAgICBtZXRhZGF0YS5sYXN0RG93bmxvYWQgPSBuZXcgRGF0ZSgpO1xuICAgICAgICBhd2FpdCB0aGlzLmNvbGxlY3Rpb24udXBkYXRlT25lKHtfaWQ6IHRoaXMuZmlsZUlkfSwgeyRzZXQ6IHttZXRhZGF0YX19KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RyZWFtO1xuICAgIH1cblxuICAgIGFzeW5jIGdldEltYWdlKHBhcmFtczogSUFzc2V0SW1hZ2VQYXJhbXMgPSBudWxsKTogUHJvbWlzZTxSZWFkYWJsZT4ge1xuICAgICAgICByZXR1cm4gQXNzZXQudG9JbWFnZSh0aGlzLnN0cmVhbSwgcGFyYW1zKTtcbiAgICB9XG5cbiAgICBhc3luYyBkb3dubG9hZEltYWdlKHBhcmFtcz86IElBc3NldEltYWdlUGFyYW1zLCBtZXRhZGF0YT86IElBc3NldE1ldGEpOiBQcm9taXNlPFJlYWRhYmxlPiB7XG4gICAgICAgIHJldHVybiBBc3NldC50b0ltYWdlKGF3YWl0IHRoaXMuZG93bmxvYWQobWV0YWRhdGEpLCBwYXJhbXMpO1xuICAgIH1cblxuICAgIHRvSlNPTigpOiBhbnkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICAgICAgICBmaWxlbmFtZTogdGhpcy5maWxlbmFtZSxcbiAgICAgICAgICAgIGNvbnRlbnRUeXBlOiB0aGlzLmNvbnRlbnRUeXBlLFxuICAgICAgICAgICAgbWV0YWRhdGE6IHRoaXMubWV0YWRhdGFcbiAgICAgICAgfTtcbiAgICB9XG59XG4iXX0=
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import sharp_ from "sharp";
|
|
11
|
+
import { bufferToStream, deleteFromBucket, isBoolean, isInterface, isString, streamToBuffer } from "../../utils";
|
|
12
|
+
const sharp = sharp_;
|
|
13
|
+
const cropInterface = {
|
|
14
|
+
x: "number",
|
|
15
|
+
y: "number",
|
|
16
|
+
w: "number",
|
|
17
|
+
h: "number"
|
|
18
|
+
};
|
|
19
|
+
export class Asset {
|
|
20
|
+
constructor(fileId, filename, contentType, metadata, bucket, collection) {
|
|
21
|
+
this.fileId = fileId;
|
|
22
|
+
this.filename = filename;
|
|
23
|
+
this.contentType = contentType;
|
|
24
|
+
this.metadata = metadata;
|
|
25
|
+
this.bucket = bucket;
|
|
26
|
+
this.collection = collection;
|
|
27
|
+
}
|
|
28
|
+
static toCropRegion(cropInfo) {
|
|
29
|
+
let crop = cropInfo;
|
|
30
|
+
if (isString(cropInfo)) {
|
|
31
|
+
try {
|
|
32
|
+
crop = JSON.parse(cropInfo);
|
|
33
|
+
}
|
|
34
|
+
catch (e) {
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
if (!isInterface(crop, cropInterface))
|
|
39
|
+
return null;
|
|
40
|
+
return {
|
|
41
|
+
width: Math.round(crop.w),
|
|
42
|
+
height: Math.round(crop.h),
|
|
43
|
+
top: Math.round(crop.y),
|
|
44
|
+
left: Math.round(crop.x)
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
static toImage(stream, meta, params) {
|
|
48
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
49
|
+
params = params || {};
|
|
50
|
+
// Get default crop info
|
|
51
|
+
const crop = Asset.toCropRegion(meta.crop);
|
|
52
|
+
// Return back the stream if there is no params and no default crop exists
|
|
53
|
+
if (Object.keys(params).length == 0 && !crop)
|
|
54
|
+
return stream;
|
|
55
|
+
// Parse params
|
|
56
|
+
params.rotation = isNaN(params.rotation) ? 0 : Math.round(params.rotation / 90) * 90;
|
|
57
|
+
params.canvasScaleX = isNaN(params.canvasScaleX) ? 1 : Number(params.canvasScaleX);
|
|
58
|
+
params.canvasScaleY = isNaN(params.canvasScaleY) ? 1 : Number(params.canvasScaleY);
|
|
59
|
+
params.scaleX = isNaN(params.scaleX) ? 1 : Number(params.scaleX);
|
|
60
|
+
params.scaleY = isNaN(params.scaleY) ? 1 : Number(params.scaleY);
|
|
61
|
+
params.crop = isBoolean(params.crop) ? params.crop : params.crop == "true";
|
|
62
|
+
// Try to modify image
|
|
63
|
+
let buffer = yield streamToBuffer(stream);
|
|
64
|
+
try {
|
|
65
|
+
// Get crop info
|
|
66
|
+
const cropBefore = Asset.toCropRegion(params.cropBefore || (params.crop ? meta.cropBefore : null));
|
|
67
|
+
const cropAfter = Asset.toCropRegion(params.cropAfter || (params.crop ? meta.cropAfter : null));
|
|
68
|
+
// Get metadata
|
|
69
|
+
const imgMeta = yield sharp(buffer).metadata();
|
|
70
|
+
let width = imgMeta.width;
|
|
71
|
+
let height = imgMeta.height;
|
|
72
|
+
// Crop before resize
|
|
73
|
+
if (cropBefore) {
|
|
74
|
+
buffer = yield sharp(buffer)
|
|
75
|
+
.extract(cropBefore)
|
|
76
|
+
.toBuffer();
|
|
77
|
+
width = cropBefore.width;
|
|
78
|
+
height = cropBefore.height;
|
|
79
|
+
}
|
|
80
|
+
else if (crop) {
|
|
81
|
+
buffer = yield sharp(buffer)
|
|
82
|
+
.extract(crop)
|
|
83
|
+
.toBuffer();
|
|
84
|
+
width = crop.width;
|
|
85
|
+
height = crop.height;
|
|
86
|
+
}
|
|
87
|
+
// Resize canvas
|
|
88
|
+
if (params.canvasScaleX !== 1 || params.canvasScaleY !== 1) {
|
|
89
|
+
width = Math.round(width * params.canvasScaleX);
|
|
90
|
+
height = Math.round(height * params.canvasScaleY);
|
|
91
|
+
buffer = yield sharp(buffer)
|
|
92
|
+
.resize({ width, height, background: "#00000000", fit: "contain" })
|
|
93
|
+
.toBuffer();
|
|
94
|
+
}
|
|
95
|
+
// Resize image
|
|
96
|
+
if (params.scaleX !== 1 || params.scaleY !== 1) {
|
|
97
|
+
width = Math.round(width * params.scaleX);
|
|
98
|
+
height = Math.round(height * params.scaleY);
|
|
99
|
+
buffer = yield sharp(buffer)
|
|
100
|
+
.resize({ width, height, background: "#00000000", fit: "fill" })
|
|
101
|
+
.toBuffer();
|
|
102
|
+
}
|
|
103
|
+
// Crop after resize
|
|
104
|
+
if (cropAfter) {
|
|
105
|
+
buffer = yield sharp(buffer)
|
|
106
|
+
.extract(cropAfter)
|
|
107
|
+
.toBuffer();
|
|
108
|
+
}
|
|
109
|
+
// Rotate
|
|
110
|
+
if (params.rotation !== 0) {
|
|
111
|
+
buffer = yield sharp(buffer).rotate(params.rotation).toBuffer();
|
|
112
|
+
}
|
|
113
|
+
return bufferToStream(buffer);
|
|
114
|
+
}
|
|
115
|
+
catch (e) {
|
|
116
|
+
console.log("Asset image conversion error", e);
|
|
117
|
+
return bufferToStream(buffer);
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
get id() {
|
|
122
|
+
return this.fileId.toHexString();
|
|
123
|
+
}
|
|
124
|
+
get stream() {
|
|
125
|
+
return this.bucket.openDownloadStream(this.fileId);
|
|
126
|
+
}
|
|
127
|
+
unlink() {
|
|
128
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
129
|
+
return deleteFromBucket(this.bucket, this.fileId);
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
getBuffer() {
|
|
133
|
+
return streamToBuffer(this.stream);
|
|
134
|
+
}
|
|
135
|
+
download(metadata) {
|
|
136
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
137
|
+
metadata = Object.assign(this.metadata, metadata || {});
|
|
138
|
+
metadata.downloadCount = isNaN(metadata.downloadCount) || !metadata.firstDownload
|
|
139
|
+
? 1
|
|
140
|
+
: metadata.downloadCount + 1;
|
|
141
|
+
metadata.firstDownload = metadata.firstDownload || new Date();
|
|
142
|
+
metadata.lastDownload = new Date();
|
|
143
|
+
yield this.collection.updateOne({ _id: this.fileId }, { $set: { metadata } });
|
|
144
|
+
return this.stream;
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
getImage(params = null) {
|
|
148
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
149
|
+
return Asset.toImage(this.stream, this.metadata, params);
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
downloadImage(params, metadata) {
|
|
153
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
154
|
+
return Asset.toImage(yield this.download(metadata), this.metadata, params);
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
toJSON() {
|
|
158
|
+
return {
|
|
159
|
+
id: this.id,
|
|
160
|
+
filename: this.filename,
|
|
161
|
+
contentType: this.contentType,
|
|
162
|
+
metadata: this.metadata
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc2VydmljZXMvZW50aXRpZXMvYXNzZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxNQUFnQixNQUFNLE9BQU8sQ0FBQztBQU1yQyxPQUFPLEVBQUMsY0FBYyxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvRyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUM7QUFDckIsTUFBTSxhQUFhLEdBQUc7SUFDbEIsQ0FBQyxFQUFFLFFBQVE7SUFDWCxDQUFDLEVBQUUsUUFBUTtJQUNYLENBQUMsRUFBRSxRQUFRO0lBQ1gsQ0FBQyxFQUFFLFFBQVE7Q0FDZCxDQUFDO0FBRUYsTUFBTSxPQUFPLEtBQUs7SUFzR2QsWUFBcUIsTUFBZ0IsRUFDaEIsUUFBZ0IsRUFDaEIsV0FBbUIsRUFDbkIsUUFBb0IsRUFDbkIsTUFBb0IsRUFDcEIsVUFBc0I7UUFMdkIsV0FBTSxHQUFOLE1BQU0sQ0FBVTtRQUNoQixhQUFRLEdBQVIsUUFBUSxDQUFRO1FBQ2hCLGdCQUFXLEdBQVgsV0FBVyxDQUFRO1FBQ25CLGFBQVEsR0FBUixRQUFRLENBQVk7UUFDbkIsV0FBTSxHQUFOLE1BQU0sQ0FBYztRQUNwQixlQUFVLEdBQVYsVUFBVSxDQUFZO0lBQzVDLENBQUM7SUExR1MsTUFBTSxDQUFDLFlBQVksQ0FBQyxRQUFpQztRQUMzRCxJQUFJLElBQUksR0FBRyxRQUEwQixDQUFDO1FBQ3RDLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ3BCLElBQUk7Z0JBQ0EsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBa0IsQ0FBQyxDQUFDO2FBQ3pDO1lBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ1IsT0FBTyxJQUFJLENBQUM7YUFDZjtTQUNKO1FBQ0QsSUFBSSxD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QUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUM3RCxDQUFDO0tBQUE7SUFFSyxhQUFhLENBQUMsTUFBMEIsRUFBRSxRQUFxQjs7WUFDakUsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQy9FLENBQUM7S0FBQTtJQUVELE1BQU07UUFDRixPQUFPO1lBQ0gsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ1gsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3ZCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztZQUM3QixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7U0FDMUIsQ0FBQztJQUNOLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBzaGFycF8sIHtSZWdpb259IGZyb20gXCJzaGFycFwiO1xyXG5pbXBvcnQge1JlYWRhYmxlfSBmcm9tIFwic3RyZWFtXCI7XHJcbmltcG9ydCB7Q29sbGVjdGlvbiwgR3JpZEZTQnVja2V0fSBmcm9tIFwibW9uZ29kYlwiO1xyXG5pbXBvcnQge09iamVjdElkfSBmcm9tIFwiYnNvblwiO1xyXG5cclxuaW1wb3J0IHtJQXNzZXQsIElBc3NldENyb3BJbmZvLCBJQXNzZXRJbWFnZVBhcmFtcywgSUFzc2V0TWV0YX0gZnJvbSBcIi4uLy4uL2NvbW1vbi10eXBlc1wiO1xyXG5pbXBvcnQge2J1ZmZlclRvU3RyZWFtLCBkZWxldGVGcm9tQnVja2V0LCBpc0Jvb2xlYW4sIGlzSW50ZXJmYWNlLCBpc1N0cmluZywgc3RyZWFtVG9CdWZmZXJ9IGZyb20gXCIuLi8uLi91dGlsc1wiO1xyXG5cclxuY29uc3Qgc2hhcnAgPSBzaGFycF87XHJcbmNvbnN0IGNyb3BJbnRlcmZhY2UgPSB7XHJcbiAgICB4OiBcIm51bWJlclwiLFxyXG4gICAgeTogXCJudW1iZXJcIixcclxuICAgIHc6IFwibnVtYmVyXCIsXHJcbiAgICBoOiBcIm51bWJlclwiXHJcbn07XHJcblxyXG5leHBvcnQgY2xhc3MgQXNzZXQgaW1wbGVtZW50cyBJQXNzZXQge1xyXG5cclxuICAgIHByb3RlY3RlZCBzdGF0aWMgdG9Dcm9wUmVnaW9uKGNyb3BJbmZvOiBzdHJpbmcgfCBJQXNzZXRDcm9wSW5mbyk6IFJlZ2lvbiB7XHJcbiAgICAgICAgbGV0IGNyb3AgPSBjcm9wSW5mbyBhcyBJQXNzZXRDcm9wSW5mbztcclxuICAgICAgICBpZiAoaXNTdHJpbmcoY3JvcEluZm8pKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjcm9wID0gSlNPTi5wYXJzZShjcm9wSW5mbyBhcyBzdHJpbmcpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWlzSW50ZXJmYWNlKGNyb3AsIGNyb3BJbnRlcmZhY2UpKSByZXR1cm4gbnVsbDtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB3aWR0aDogTWF0aC5yb3VuZChjcm9wLncpLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IE1hdGgucm91bmQoY3JvcC5oKSxcclxuICAgICAgICAgICAgdG9wOiBNYXRoLnJvdW5kKGNyb3AueSksXHJcbiAgICAgICAgICAgIGxlZnQ6IE1hdGgucm91bmQoY3JvcC54KVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHN0YXRpYyBhc3luYyB0b0ltYWdlKHN0cmVhbTogUmVhZGFibGUsIG1ldGE/OiBJQXNzZXRNZXRhLCBwYXJhbXM/OiBJQXNzZXRJbWFnZVBhcmFtcyk6IFByb21pc2U8UmVhZGFibGU+IHtcclxuICAgICAgICBwYXJhbXMgPSBwYXJhbXMgfHwge307XHJcblxyXG4gICAgICAgIC8vIEdldCBkZWZhdWx0IGNyb3AgaW5mb1xyXG4gICAgICAgIGNvbnN0IGNyb3AgPSBBc3NldC50b0Nyb3BSZWdpb24obWV0YS5jcm9wKTtcclxuXHJcbiAgICAgICAgLy8gUmV0dXJuIGJhY2sgdGhlIHN0cmVhbSBpZiB0aGVyZSBpcyBubyBwYXJhbXMgYW5kIG5vIGRlZmF1bHQgY3JvcCBleGlzdHNcclxuICAgICAgICBpZiAoT2JqZWN0LmtleXMocGFyYW1zKS5sZW5ndGggPT0gMCAmJiAhY3JvcCkgcmV0dXJuIHN0cmVhbTtcclxuXHJcbiAgICAgICAgLy8gUGFyc2UgcGFyYW1zXHJcbiAgICAgICAgcGFyYW1zLnJvdGF0aW9uID0gaXNOYU4ocGFyYW1zLnJvdGF0aW9uKSA/IDAgOiBNYXRoLnJvdW5kKHBhcmFtcy5yb3RhdGlvbiAvIDkwKSAqIDkwO1xyXG4gICAgICAgIHBhcmFtcy5jYW52YXNTY2FsZVggPSBpc05hTihwYXJhbXMuY2FudmFzU2NhbGVYKSA/IDEgOiBOdW1iZXIocGFyYW1zLmNhbnZhc1NjYWxlWCk7XHJcbiAgICAgICAgcGFyYW1zLmNhbnZhc1NjYWxlWSA9IGlzTmFOKHBhcmFtcy5jYW52YXNTY2FsZVkpID8gMSA6IE51bWJlcihwYXJhbXMuY2FudmFzU2NhbGVZKTtcclxuICAgICAgICBwYXJhbXMuc2NhbGVYID0gaXNOYU4ocGFyYW1zLnNjYWxlWCkgPyAxIDogTnVtYmVyKHBhcmFtcy5zY2FsZVgpO1xyXG4gICAgICAgIHBhcmFtcy5zY2FsZVkgPSBpc05hTihwYXJhbXMuc2NhbGVZKSA/IDEgOiBOdW1iZXIocGFyYW1zLnNjYWxlWSk7XHJcbiAgICAgICAgcGFyYW1zLmNyb3AgPSBpc0Jvb2xlYW4ocGFyYW1zLmNyb3ApID8gcGFyYW1zLmNyb3AgOiBwYXJhbXMuY3JvcCA9PSBcInRydWVcIjtcclxuXHJcbiAgICAgICAgLy8gVHJ5IHRvIG1vZGlmeSBpbWFnZVxyXG4gICAgICAgIGxldCBidWZmZXIgPSBhd2FpdCBzdHJlYW1Ub0J1ZmZlcihzdHJlYW0pO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIC8vIEdldCBjcm9wIGluZm9cclxuICAgICAgICAgICAgY29uc3QgY3JvcEJlZm9yZSA9IEFzc2V0LnRvQ3JvcFJlZ2lvbihwYXJhbXMuY3JvcEJlZm9yZSB8fCAocGFyYW1zLmNyb3AgPyBtZXRhLmNyb3BCZWZvcmUgOiBudWxsKSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNyb3BBZnRlciA9IEFzc2V0LnRvQ3JvcFJlZ2lvbihwYXJhbXMuY3JvcEFmdGVyIHx8IChwYXJhbXMuY3JvcCA/IG1ldGEuY3JvcEFmdGVyIDogbnVsbCkpO1xyXG4gICAgICAgICAgICAvLyBHZXQgbWV0YWRhdGFcclxuICAgICAgICAgICAgY29uc3QgaW1nTWV0YSA9IGF3YWl0IHNoYXJwKGJ1ZmZlcikubWV0YWRhdGEoKTtcclxuICAgICAgICAgICAgbGV0IHdpZHRoID0gaW1nTWV0YS53aWR0aDtcclxuICAgICAgICAgICAgbGV0IGhlaWdodCA9IGltZ01ldGEuaGVpZ2h0O1xyXG4gICAgICAgICAgICAvLyBDcm9wIGJlZm9yZSByZXNpemVcclxuICAgICAgICAgICAgaWYgKGNyb3BCZWZvcmUpIHtcclxuICAgICAgICAgICAgICAgIGJ1ZmZlciA9IGF3YWl0IHNoYXJwKGJ1ZmZlcilcclxuICAgICAgICAgICAgICAgICAgICAuZXh0cmFjdChjcm9wQmVmb3JlKVxyXG4gICAgICAgICAgICAgICAgICAgIC50b0J1ZmZlcigpO1xyXG4gICAgICAgICAgICAgICAgd2lkdGggPSBjcm9wQmVmb3JlLndpZHRoO1xyXG4gICAgICAgICAgICAgICAgaGVpZ2h0ID0gY3JvcEJlZm9yZS5oZWlnaHQ7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY3JvcCkge1xyXG4gICAgICAgICAgICAgICAgYnVmZmVyID0gYXdhaXQgc2hhcnAoYnVmZmVyKVxyXG4gICAgICAgICAgICAgICAgICAgIC5leHRyYWN0KGNyb3ApXHJcbiAgICAgICAgICAgICAgICAgICAgLnRvQnVmZmVyKCk7XHJcbiAgICAgICAgICAgICAgICB3aWR0aCA9IGNyb3Aud2lkdGg7XHJcbiAgICAgICAgICAgICAgICBoZWlnaHQgPSBjcm9wLmhlaWdodDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBSZXNpemUgY2FudmFzXHJcbiAgICAgICAgICAgIGlmIChwYXJhbXMuY2FudmFzU2NhbGVYICE9PSAxIHx8IHBhcmFtcy5jYW52YXNTY2FsZVkgIT09IDEpIHtcclxuICAgICAgICAgICAgICAgIHdpZHRoID0gTWF0aC5yb3VuZCh3aWR0aCAqIHBhcmFtcy5jYW52YXNTY2FsZVgpO1xyXG4gICAgICAgICAgICAgICAgaGVpZ2h0ID0gTWF0aC5yb3VuZChoZWlnaHQgKiBwYXJhbXMuY2FudmFzU2NhbGVZKTtcclxuICAgICAgICAgICAgICAgIGJ1ZmZlciA9IGF3YWl0IHNoYXJwKGJ1ZmZlcilcclxuICAgICAgICAgICAgICAgICAgICAucmVzaXplKHt3aWR0aCwgaGVpZ2h0LCBiYWNrZ3JvdW5kOiBcIiMwMDAwMDAwMFwiLCBmaXQ6IFwiY29udGFpblwifSlcclxuICAgICAgICAgICAgICAgICAgICAudG9CdWZmZXIoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBSZXNpemUgaW1hZ2VcclxuICAgICAgICAgICAgaWYgKHBhcmFtcy5zY2FsZVggIT09IDEgfHwgcGFyYW1zLnNjYWxlWSAhPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgd2lkdGggPSBNYXRoLnJvdW5kKHdpZHRoICogcGFyYW1zLnNjYWxlWCk7XHJcbiAgICAgICAgICAgICAgICBoZWlnaHQgPSBNYXRoLnJvdW5kKGhlaWdodCAqIHBhcmFtcy5zY2FsZVkpO1xyXG4gICAgICAgICAgICAgICAgYnVmZmVyID0gYXdhaXQgc2hhcnAoYnVmZmVyKVxyXG4gICAgICAgICAgICAgICAgICAgIC5yZXNpemUoe3dpZHRoLCBoZWlnaHQsIGJhY2tncm91bmQ6IFwiIzAwMDAwMDAwXCIsIGZpdDogXCJmaWxsXCJ9KVxyXG4gICAgICAgICAgICAgICAgICAgIC50b0J1ZmZlcigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIENyb3AgYWZ0ZXIgcmVzaXplXHJcbiAgICAgICAgICAgIGlmIChjcm9wQWZ0ZXIpIHtcclxuICAgICAgICAgICAgICAgIGJ1ZmZlciA9IGF3YWl0IHNoYXJwKGJ1ZmZlcilcclxuICAgICAgICAgICAgICAgICAgICAuZXh0cmFjdChjcm9wQWZ0ZXIpXHJcbiAgICAgICAgICAgICAgICAgICAgLnRvQnVmZmVyKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gUm90YXRlXHJcbiAgICAgICAgICAgIGlmIChwYXJhbXMucm90YXRpb24gIT09IDApIHtcclxuICAgICAgICAgICAgICAgIGJ1ZmZlciA9IGF3YWl0IHNoYXJwKGJ1ZmZlcikucm90YXRlKHBhcmFtcy5yb3RhdGlvbikudG9CdWZmZXIoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gYnVmZmVyVG9TdHJlYW0oYnVmZmVyKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQXNzZXQgaW1hZ2UgY29udmVyc2lvbiBlcnJvclwiLCBlKTtcclxuICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlclRvU3RyZWFtKGJ1ZmZlcik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBpZCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZpbGVJZC50b0hleFN0cmluZygpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBzdHJlYW0oKTogUmVhZGFibGUge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJ1Y2tldC5vcGVuRG93bmxvYWRTdHJlYW0odGhpcy5maWxlSWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKHJlYWRvbmx5IGZpbGVJZDogT2JqZWN0SWQsXHJcbiAgICAgICAgICAgICAgICByZWFkb25seSBmaWxlbmFtZTogc3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgcmVhZG9ubHkgY29udGVudFR5cGU6IHN0cmluZyxcclxuICAgICAgICAgICAgICAgIHJlYWRvbmx5IG1ldGFkYXRhOiBJQXNzZXRNZXRhLFxyXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIGJ1Y2tldDogR3JpZEZTQnVja2V0LFxyXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIGNvbGxlY3Rpb246IENvbGxlY3Rpb24pIHtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyB1bmxpbmsoKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm4gZGVsZXRlRnJvbUJ1Y2tldCh0aGlzLmJ1Y2tldCwgdGhpcy5maWxlSWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEJ1ZmZlcigpOiBQcm9taXNlPEJ1ZmZlcj4ge1xyXG4gICAgICAgIHJldHVybiBzdHJlYW1Ub0J1ZmZlcih0aGlzLnN0cmVhbSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZG93bmxvYWQobWV0YWRhdGE/OiBJQXNzZXRNZXRhKTogUHJvbWlzZTxSZWFkYWJsZT4ge1xyXG4gICAgICAgIG1ldGFkYXRhID0gT2JqZWN0LmFzc2lnbih0aGlzLm1ldGFkYXRhIGFzIElBc3NldE1ldGEsIG1ldGFkYXRhIHx8IHt9KTtcclxuICAgICAgICBtZXRhZGF0YS5kb3dubG9hZENvdW50ID0gaXNOYU4obWV0YWRhdGEuZG93bmxvYWRDb3VudCkgfHwgIW1ldGFkYXRhLmZpcnN0RG93bmxvYWRcclxuICAgICAgICAgICAgPyAxXHJcbiAgICAgICAgICAgIDogbWV0YWRhdGEuZG93bmxvYWRDb3VudCArIDE7XHJcbiAgICAgICAgbWV0YWRhdGEuZmlyc3REb3dubG9hZCA9IG1ldGFkYXRhLmZpcnN0RG93bmxvYWQgfHwgbmV3IERhdGUoKTtcclxuICAgICAgICBtZXRhZGF0YS5sYXN0RG93bmxvYWQgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuY29sbGVjdGlvbi51cGRhdGVPbmUoe19pZDogdGhpcy5maWxlSWR9LCB7JHNldDoge21ldGFkYXRhfX0pO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN0cmVhbTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRJbWFnZShwYXJhbXM6IElBc3NldEltYWdlUGFyYW1zID0gbnVsbCk6IFByb21pc2U8UmVhZGFibGU+IHtcclxuICAgICAgICByZXR1cm4gQXNzZXQudG9JbWFnZSh0aGlzLnN0cmVhbSwgdGhpcy5tZXRhZGF0YSwgcGFyYW1zKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBkb3dubG9hZEltYWdlKHBhcmFtcz86IElBc3NldEltYWdlUGFyYW1zLCBtZXRhZGF0YT86IElBc3NldE1ldGEpOiBQcm9taXNlPFJlYWRhYmxlPiB7XHJcbiAgICAgICAgcmV0dXJuIEFzc2V0LnRvSW1hZ2UoYXdhaXQgdGhpcy5kb3dubG9hZChtZXRhZGF0YSksIHRoaXMubWV0YWRhdGEsIHBhcmFtcyk7XHJcbiAgICB9XHJcblxyXG4gICAgdG9KU09OKCk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgaWQ6IHRoaXMuaWQsXHJcbiAgICAgICAgICAgIGZpbGVuYW1lOiB0aGlzLmZpbGVuYW1lLFxyXG4gICAgICAgICAgICBjb250ZW50VHlwZTogdGhpcy5jb250ZW50VHlwZSxcclxuICAgICAgICAgICAgbWV0YWRhdGE6IHRoaXMubWV0YWRhdGFcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|