@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.
Files changed (117) hide show
  1. package/README.md +2 -2
  2. package/bundles/stemy-backend.umd.js +5553 -5465
  3. package/bundles/stemy-backend.umd.js.map +1 -1
  4. package/bundles/stemy-backend.umd.min.js +1 -1
  5. package/bundles/stemy-backend.umd.min.js.map +1 -1
  6. package/common-types.d.ts +226 -214
  7. package/esm2015/common-types.js +18 -18
  8. package/esm2015/public_api.js +338 -338
  9. package/esm2015/rest-controllers/assets.controller.js +116 -116
  10. package/esm2015/rest-controllers/auth.controller.js +75 -75
  11. package/esm2015/rest-controllers/gallery.controller.js +37 -37
  12. package/esm2015/rest-controllers/progresses.controller.js +57 -57
  13. package/esm2015/rest-middlewares/container.middleware.js +32 -32
  14. package/esm2015/rest-middlewares/error-handler.middleware.js +83 -83
  15. package/esm2015/rest-middlewares/language.middleware.js +28 -28
  16. package/esm2015/rest-middlewares/request-ended.middleware.js +25 -25
  17. package/esm2015/rest-middlewares/request-started.middleware.js +24 -24
  18. package/esm2015/rest-openapi.js +44 -44
  19. package/esm2015/services/asset-processor.js +101 -101
  20. package/esm2015/services/asset-resolver.js +53 -53
  21. package/esm2015/services/assets.js +110 -110
  22. package/esm2015/services/backend-provider.js +32 -32
  23. package/esm2015/services/cache-processor.js +34 -34
  24. package/esm2015/services/cache.js +94 -94
  25. package/esm2015/services/configuration.js +55 -55
  26. package/esm2015/services/endpoint-provider.js +29 -29
  27. package/esm2015/services/entities/asset.js +166 -112
  28. package/esm2015/services/entities/lazy-asset.js +93 -93
  29. package/esm2015/services/entities/progress.js +181 -181
  30. package/esm2015/services/fixtures.js +45 -45
  31. package/esm2015/services/gallery-cache.js +36 -36
  32. package/esm2015/services/gallery-image.js +48 -48
  33. package/esm2015/services/gallery.js +138 -138
  34. package/esm2015/services/id-generator.js +63 -63
  35. package/esm2015/services/job-manager.js +203 -203
  36. package/esm2015/services/lazy-assets.js +74 -74
  37. package/esm2015/services/mail-sender.js +59 -59
  38. package/esm2015/services/memory-cache.js +84 -84
  39. package/esm2015/services/mongo-connector.js +61 -61
  40. package/esm2015/services/progresses.js +91 -91
  41. package/esm2015/services/template-renderer.js +89 -89
  42. package/esm2015/services/translation-provider.js +31 -31
  43. package/esm2015/services/translator.js +85 -85
  44. package/esm2015/services/user-manager.js +47 -47
  45. package/esm2015/socket-controllers/progress.controller.js +82 -82
  46. package/esm2015/socket-middlewares/compression.middleware.js +19 -19
  47. package/esm2015/static.js +33 -33
  48. package/esm2015/stemy-backend.js +4 -4
  49. package/esm2015/utilities/di-container.js +84 -84
  50. package/esm2015/utilities/lazy-asset-generator.js +40 -40
  51. package/esm2015/utilities/tree.js +111 -111
  52. package/esm2015/utils.js +618 -601
  53. package/esm2015/validators.js +51 -51
  54. package/fesm2015/stemy-backend.js +3656 -3585
  55. package/fesm2015/stemy-backend.js.map +1 -1
  56. package/package.json +1 -1
  57. package/public_api.d.ts +33 -33
  58. package/rest-controllers/assets.controller.d.ts +16 -16
  59. package/rest-controllers/auth.controller.d.ts +14 -14
  60. package/rest-controllers/gallery.controller.d.ts +7 -7
  61. package/rest-controllers/progresses.controller.d.ts +9 -9
  62. package/rest-middlewares/container.middleware.d.ts +8 -8
  63. package/rest-middlewares/error-handler.middleware.d.ts +13 -13
  64. package/rest-middlewares/language.middleware.d.ts +8 -8
  65. package/rest-middlewares/request-ended.middleware.d.ts +5 -5
  66. package/rest-middlewares/request-started.middleware.d.ts +5 -5
  67. package/rest-openapi.d.ts +3 -3
  68. package/services/asset-processor.d.ts +12 -12
  69. package/services/asset-resolver.d.ts +9 -9
  70. package/services/assets.d.ts +19 -19
  71. package/services/backend-provider.d.ts +11 -11
  72. package/services/cache-processor.d.ts +4 -4
  73. package/services/cache.d.ts +23 -23
  74. package/services/configuration.d.ts +10 -10
  75. package/services/endpoint-provider.d.ts +4 -4
  76. package/services/entities/asset.d.ts +25 -23
  77. package/services/entities/lazy-asset.d.ts +29 -29
  78. package/services/entities/progress.d.ts +49 -49
  79. package/services/fixtures.d.ts +6 -6
  80. package/services/gallery-cache.d.ts +9 -9
  81. package/services/gallery-image.d.ts +11 -11
  82. package/services/gallery.d.ts +13 -13
  83. package/services/id-generator.d.ts +11 -11
  84. package/services/job-manager.d.ts +27 -27
  85. package/services/lazy-assets.d.ts +19 -19
  86. package/services/mail-sender.d.ts +20 -20
  87. package/services/memory-cache.d.ts +10 -10
  88. package/services/mongo-connector.d.ts +14 -14
  89. package/services/progresses.d.ts +18 -18
  90. package/services/template-renderer.d.ts +14 -14
  91. package/services/translation-provider.d.ts +10 -10
  92. package/services/translator.d.ts +15 -15
  93. package/services/user-manager.d.ts +6 -6
  94. package/socket-controllers/progress.controller.d.ts +10 -10
  95. package/socket-middlewares/compression.middleware.d.ts +4 -4
  96. package/static.d.ts +2 -2
  97. package/stemy-backend.d.ts +4 -4
  98. package/stemy-backend.metadata.json +1 -1
  99. package/utilities/di-container.d.ts +43 -43
  100. package/utilities/lazy-asset-generator.d.ts +15 -15
  101. package/utilities/tree.d.ts +14 -14
  102. package/utils.d.ts +76 -73
  103. package/validators.d.ts +7 -7
  104. package/di-container.d.ts +0 -40
  105. package/esm2015/di-container.js +0 -75
  106. package/esm2015/models/lazy-asset.js +0 -12
  107. package/esm2015/models/progress.js +0 -23
  108. package/esm2015/rest-middlewares/injector.middleware.js +0 -26
  109. package/esm2015/services/lazy-asset-helper.js +0 -74
  110. package/esm2015/services/logger.js +0 -14
  111. package/esm2015/services/progress-helper.js +0 -168
  112. package/models/lazy-asset.d.ts +0 -45
  113. package/models/progress.d.ts +0 -56
  114. package/rest-middlewares/injector.middleware.d.ts +0 -8
  115. package/services/lazy-asset-helper.d.ts +0 -15
  116. package/services/logger.d.ts +0 -2
  117. 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9jb25maWd1cmF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDbEUsT0FBTyxFQUFDLFNBQVMsRUFBWSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JELE9BQU8sRUFBQyxZQUFZLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUMzRCxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7SUFJZixhQUFhLFNBQWIsYUFBYTtJQUl0QixZQUFrQyxNQUFtQjtRQUNqRCxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDaEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDbkIsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFUyxHQUFHLENBQUMsS0FBZ0I7UUFDMUIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDO1FBQ3pELGFBQWEsQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQztRQUNoRCxhQUFhLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLElBQUksYUFBYSxDQUFDLFFBQVEsQ0FBQztRQUNsRSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxhQUFhLENBQUM7SUFDOUMsQ0FBQztJQUVELFFBQVEsQ0FBQyxJQUFZO1FBQ2pCLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELE9BQU8sQ0FBQyxJQUFZO1FBQ2hCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLEtBQUs7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixJQUFJLG9DQUFvQyxDQUFDLENBQUM7UUFDL0YsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLEVBQUUsVUFBVSxDQUFDLEVBQUMsQ0FBQztZQUNoRSxPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUE7UUFDaEMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3hELE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdEMsSUFBSSxPQUFPLFFBQVEsS0FBSyxXQUFXLEVBQUU7WUFDakMsT0FBTyxVQUFVLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztnQkFDN0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO2dCQUMxQixDQUFDLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7U0FDN0Q7UUFDRCxPQUFPLEtBQUssQ0FBQyxZQUFZLENBQUM7SUFDOUIsQ0FBQztDQUNKLENBQUE7QUFuQ1ksYUFBYTtJQUZ6QixVQUFVLEVBQUU7SUFDWixNQUFNLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQztJQUtqQixXQUFBLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQTs7R0FKeEIsYUFBYSxDQW1DekI7U0FuQ1ksYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7aW5qZWN0YWJsZSwgaW5qZWN0QWxsLCBzY29wZWQsIExpZmVjeWNsZX0gZnJvbSBcInRzeXJpbmdlXCI7XG5pbXBvcnQge1BBUkFNRVRFUiwgUGFyYW1ldGVyfSBmcm9tIFwiLi4vY29tbW9uLXR5cGVzXCI7XG5pbXBvcnQge2NvbnZlcnRWYWx1ZSwgZ2V0VHlwZSwgaXNGdW5jdGlvbn0gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQgZG90ZW52IGZyb20gXCJkb3RlbnZcIjtcblxuQGluamVjdGFibGUoKVxuQHNjb3BlZChMaWZlY3ljbGUuQ29udGFpbmVyU2NvcGVkKVxuZXhwb3J0IGNsYXNzIENvbmZpZ3VyYXRpb24ge1xuXG4gICAgcHJvdGVjdGVkIHBhcmFtTWFwOiB7W25hbWU6IHN0cmluZ106IFBhcmFtZXRlcn07XG5cbiAgICBjb25zdHJ1Y3RvcihAaW5qZWN0QWxsKFBBUkFNRVRFUikgcGFyYW1zOiBQYXJhbWV0ZXJbXSkge1xuICAgICAgICBkb3RlbnYuY29uZmlnKCk7XG4gICAgICAgIHRoaXMucGFyYW1NYXAgPSB7fTtcbiAgICAgICAgKHBhcmFtcyB8fCBbXSkuZm9yRWFjaChwYXJhbSA9PiB0aGlzLmFkZChwYXJhbSkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBhZGQocGFyYW06IFBhcmFtZXRlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBleGlzdGluZ1BhcmFtID0gdGhpcy5wYXJhbU1hcFtwYXJhbS5uYW1lXSB8fCBwYXJhbTtcbiAgICAgICAgZXhpc3RpbmdQYXJhbS5kZWZhdWx0VmFsdWUgPSBwYXJhbS5kZWZhdWx0VmFsdWU7XG4gICAgICAgIGV4aXN0aW5nUGFyYW0ucmVzb2x2ZXIgPSBwYXJhbS5yZXNvbHZlciB8fCBleGlzdGluZ1BhcmFtLnJlc29sdmVyO1xuICAgICAgICB0aGlzLnBhcmFtTWFwW3BhcmFtLm5hbWVdID0gZXhpc3RpbmdQYXJhbTtcbiAgICB9XG5cbiAgICBoYXNQYXJhbShuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5wYXJhbU1hcFtuYW1lXTtcbiAgICB9XG5cbiAgICByZXNvbHZlKG5hbWU6IHN0cmluZyk6IGFueSB7XG4gICAgICAgIGNvbnN0IHBhcmFtID0gdGhpcy5wYXJhbU1hcFtuYW1lXTtcbiAgICAgICAgaWYgKCFwYXJhbSkgdGhyb3cgbmV3IEVycm9yKGBQYXJhbWV0ZXIgd2l0aCBuYW1lOiAnJHtuYW1lfScgZG9lcyBub3QgZXhpc3RzIGluIGNvbmZpZ3VyYXRpb25gKTtcbiAgICAgICAgY29uc3QgZW52TmFtZSA9IHBhcmFtLm5hbWUucmVwbGFjZSgvXFwuPyhbQS1afDAtOV0rKS9nLCBmdW5jdGlvbiAoeCx5KXtcbiAgICAgICAgICAgIHJldHVybiBcIl9cIiArIHkudG9Mb3dlckNhc2UoKVxuICAgICAgICB9KS5yZXBsYWNlKC9cXC4vZ2ksIFwiX1wiKS5yZXBsYWNlKC9eXy8sIFwiXCIpLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IGVudlZhbHVlID0gcHJvY2Vzcy5lbnZbZW52TmFtZV07XG4gICAgICAgIGlmICh0eXBlb2YgZW52VmFsdWUgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBpc0Z1bmN0aW9uKHBhcmFtLnJlc29sdmVyKVxuICAgICAgICAgICAgICAgID8gcGFyYW0ucmVzb2x2ZXIoZW52VmFsdWUpXG4gICAgICAgICAgICAgICAgOiBjb252ZXJ0VmFsdWUoZW52VmFsdWUsIGdldFR5cGUocGFyYW0uZGVmYXVsdFZhbHVlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhcmFtLmRlZmF1bHRWYWx1ZTtcbiAgICB9XG59XG4iXX0=
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5kcG9pbnQtcHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvZW5kcG9pbnQtcHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFDLE1BQU0sVUFBVSxDQUFDO0lBSzFDLGdCQUFnQixTQUFoQixnQkFBZ0I7SUFFbkIsU0FBUyxDQUFDLEdBQVk7O1lBQ3hCLE9BQU8sQ0FBQyxHQUFHLENBQUMsOEJBQThCLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQy9ELENBQUM7S0FBQTtDQUNKLENBQUE7QUFMWSxnQkFBZ0I7SUFGNUIsVUFBVSxFQUFFO0lBQ1osTUFBTSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUM7R0FDckIsZ0JBQWdCLENBSzVCO1NBTFksZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtpbmplY3RhYmxlLCBMaWZlY3ljbGUsIHNjb3BlZH0gZnJvbSBcInRzeXJpbmdlXCI7XG5pbXBvcnQge0V4cHJlc3N9IGZyb20gXCJleHByZXNzXCI7XG5cbkBpbmplY3RhYmxlKClcbkBzY29wZWQoTGlmZWN5Y2xlLkNvbnRhaW5lclNjb3BlZClcbmV4cG9ydCBjbGFzcyBFbmRwb2ludFByb3ZpZGVyIHtcblxuICAgIGFzeW5jIGNvbmZpZ3VyZShhcHA6IEV4cHJlc3MpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhgRXhwcmVzcyBhcHAgaXMgbW91bnRlZCB0bzogJHthcHAubW91bnRwYXRofWApO1xuICAgIH1cbn1cbiJdfQ==
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
- export class Asset {
14
- constructor(fileId, filename, contentType, metadata, bucket, collection) {
15
- this.fileId = fileId;
16
- this.filename = filename;
17
- this.contentType = contentType;
18
- this.metadata = metadata;
19
- this.bucket = bucket;
20
- this.collection = collection;
21
- }
22
- static toImage(stream, params) {
23
- return __awaiter(this, void 0, void 0, function* () {
24
- params = params || {};
25
- if (Object.keys(params).length == 0)
26
- return stream;
27
- let buffer = yield streamToBuffer(stream);
28
- // Parse params
29
- params.rotation = isNaN(params.rotation) ? 0 : Math.round(params.rotation / 90) * 90;
30
- params.canvasScaleX = isNaN(params.canvasScaleX) ? 1 : params.canvasScaleX;
31
- params.canvasScaleY = isNaN(params.canvasScaleY) ? 1 : params.canvasScaleY;
32
- params.scaleX = isNaN(params.scaleX) ? 1 : params.scaleX;
33
- params.scaleY = isNaN(params.scaleY) ? 1 : params.scaleY;
34
- // Try to modify image
35
- try {
36
- // Get metadata
37
- const meta = yield sharp(buffer).metadata();
38
- let width = meta.width;
39
- let height = meta.height;
40
- // Resize canvas
41
- if (params.canvasScaleX !== 1 || params.canvasScaleY !== 1) {
42
- width = Math.round(width * params.canvasScaleX);
43
- height = Math.round(height * params.canvasScaleY);
44
- buffer = yield sharp(buffer)
45
- .resize({ width, height, background: "#00000000", fit: "contain" })
46
- .toBuffer();
47
- }
48
- // Resize image
49
- if (params.scaleX !== 1 || params.scaleY !== 1) {
50
- width = Math.round(width * params.scaleX);
51
- height = Math.round(height * params.scaleY);
52
- buffer = yield sharp(buffer)
53
- .resize({ width, height, background: "#00000000", fit: "fill" })
54
- .toBuffer();
55
- }
56
- // Rotate
57
- if (params.rotation !== 0) {
58
- buffer = yield sharp(buffer).rotate(params.rotation).toBuffer();
59
- }
60
- return bufferToStream(buffer);
61
- }
62
- catch (e) {
63
- return bufferToStream(buffer);
64
- }
65
- });
66
- }
67
- get id() {
68
- return this.fileId.toHexString();
69
- }
70
- get stream() {
71
- return this.bucket.openDownloadStream(this.fileId);
72
- }
73
- unlink() {
74
- return __awaiter(this, void 0, void 0, function* () {
75
- return deleteFromBucket(this.bucket, this.fileId);
76
- });
77
- }
78
- getBuffer() {
79
- return streamToBuffer(this.stream);
80
- }
81
- download(metadata) {
82
- return __awaiter(this, void 0, void 0, function* () {
83
- metadata = Object.assign(this.metadata, metadata || {});
84
- metadata.downloadCount = isNaN(metadata.downloadCount) || !metadata.firstDownload
85
- ? 1
86
- : metadata.downloadCount + 1;
87
- metadata.firstDownload = metadata.firstDownload || new Date();
88
- metadata.lastDownload = new Date();
89
- yield this.collection.updateOne({ _id: this.fileId }, { $set: { metadata } });
90
- return this.stream;
91
- });
92
- }
93
- getImage(params = null) {
94
- return __awaiter(this, void 0, void 0, function* () {
95
- return Asset.toImage(this.stream, params);
96
- });
97
- }
98
- downloadImage(params, metadata) {
99
- return __awaiter(this, void 0, void 0, function* () {
100
- return Asset.toImage(yield this.download(metadata), params);
101
- });
102
- }
103
- toJSON() {
104
- return {
105
- id: this.id,
106
- filename: this.filename,
107
- contentType: this.contentType,
108
- metadata: this.metadata
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==