@stemy/backend 3.6.0 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (145) hide show
  1. package/commands/fixtures-command.d.ts +9 -0
  2. package/commands/index.d.ts +2 -0
  3. package/common-types.d.ts +11 -6
  4. package/esm2020/commands/clear-command.mjs +17 -0
  5. package/esm2020/commands/fixtures-command.mjs +23 -0
  6. package/esm2020/commands/index.mjs +7 -0
  7. package/esm2020/common-types.mjs +21 -0
  8. package/esm2020/public_api.mjs +379 -0
  9. package/esm2020/requests/asset-image-params.mjs +53 -0
  10. package/esm2020/rest-controllers/assets.controller.mjs +126 -0
  11. package/esm2020/rest-controllers/auth.controller.mjs +46 -0
  12. package/esm2020/rest-controllers/gallery.controller.mjs +21 -0
  13. package/esm2020/rest-controllers/progresses.controller.mjs +29 -0
  14. package/esm2020/rest-controllers/terminal-styles.mjs +67 -0
  15. package/esm2020/rest-controllers/terminal.controller.mjs +125 -0
  16. package/esm2020/rest-middlewares/container.middleware.mjs +20 -0
  17. package/esm2020/rest-middlewares/error-handler.middleware.mjs +74 -0
  18. package/esm2020/rest-middlewares/language.middleware.mjs +18 -0
  19. package/esm2020/rest-middlewares/request-ended.middleware.mjs +23 -0
  20. package/esm2020/rest-middlewares/request-started.middleware.mjs +22 -0
  21. package/esm2020/services/asset-processor.mjs +90 -0
  22. package/esm2020/services/asset-resolver.mjs +31 -0
  23. package/esm2020/services/assets.mjs +140 -0
  24. package/esm2020/services/backend-provider.mjs +22 -0
  25. package/esm2020/services/cache-processor.mjs +16 -0
  26. package/esm2020/services/cache.mjs +62 -0
  27. package/{esm2015/services/configuration.js → esm2020/services/configuration.mjs} +3 -15
  28. package/esm2020/services/endpoint-provider.mjs +13 -0
  29. package/esm2020/services/entities/asset.mjs +43 -0
  30. package/esm2020/services/entities/base-entity.mjs +26 -0
  31. package/esm2020/services/entities/lazy-asset.mjs +73 -0
  32. package/esm2020/services/entities/progress.mjs +176 -0
  33. package/esm2020/services/entities/temp-asset.mjs +45 -0
  34. package/esm2020/services/fixtures.mjs +26 -0
  35. package/esm2020/services/gallery-cache.mjs +27 -0
  36. package/esm2020/services/gallery-image.mjs +37 -0
  37. package/esm2020/services/gallery.mjs +116 -0
  38. package/esm2020/services/id-generator.mjs +42 -0
  39. package/esm2020/services/job-manager.mjs +187 -0
  40. package/esm2020/services/lazy-assets.mjs +48 -0
  41. package/esm2020/services/logger.mjs +21 -0
  42. package/esm2020/services/mail-sender.mjs +36 -0
  43. package/esm2020/services/memory-cache.mjs +57 -0
  44. package/esm2020/services/mongo-connector.mjs +37 -0
  45. package/esm2020/services/open-api.mjs +114 -0
  46. package/esm2020/services/progresses.mjs +86 -0
  47. package/esm2020/services/template-renderer.mjs +64 -0
  48. package/esm2020/services/terminal-manager.mjs +77 -0
  49. package/esm2020/services/token-generator.mjs +35 -0
  50. package/esm2020/services/translation-provider.mjs +34 -0
  51. package/esm2020/services/translator.mjs +63 -0
  52. package/esm2020/services/user-manager.mjs +27 -0
  53. package/esm2020/socket-controllers/progress.controller.mjs +52 -0
  54. package/esm2020/socket-controllers/terminal.controller.mjs +48 -0
  55. package/esm2020/socket-controllers/terminal.mjs +85 -0
  56. package/esm2020/socket-middlewares/compression.middleware.mjs +14 -0
  57. package/esm2020/static.mjs +23 -0
  58. package/esm2020/utilities/decorators.mjs +52 -0
  59. package/esm2020/utilities/di-container.mjs +83 -0
  60. package/esm2020/utilities/empty-job.mjs +13 -0
  61. package/esm2020/utilities/lazy-asset-generator.mjs +35 -0
  62. package/esm2020/utilities/mongoose.mjs +216 -0
  63. package/esm2020/utils.mjs +693 -0
  64. package/esm2020/validators.mjs +46 -0
  65. package/fesm2015/{stemy-backend.js → stemy-backend.mjs} +1638 -2403
  66. package/fesm2015/stemy-backend.mjs.map +1 -0
  67. package/fesm2020/stemy-backend.mjs +4202 -0
  68. package/fesm2020/stemy-backend.mjs.map +1 -0
  69. package/{stemy-backend.d.ts → index.d.ts} +1 -0
  70. package/package.json +35 -23
  71. package/public_api.d.ts +2 -2
  72. package/rest-controllers/terminal-styles.d.ts +2 -0
  73. package/rest-controllers/terminal.controller.d.ts +2 -0
  74. package/services/assets.d.ts +1 -0
  75. package/services/entities/asset.d.ts +1 -0
  76. package/services/entities/temp-asset.d.ts +1 -0
  77. package/services/fixtures.d.ts +2 -2
  78. package/utils.d.ts +3 -0
  79. package/bundles/stemy-backend.umd.js +0 -7553
  80. package/bundles/stemy-backend.umd.js.map +0 -1
  81. package/esm2015/common-types.js +0 -20
  82. package/esm2015/public_api.js +0 -380
  83. package/esm2015/requests/asset-image-params.js +0 -70
  84. package/esm2015/rest-controllers/assets.controller.js +0 -180
  85. package/esm2015/rest-controllers/auth.controller.js +0 -76
  86. package/esm2015/rest-controllers/gallery.controller.js +0 -37
  87. package/esm2015/rest-controllers/progresses.controller.js +0 -57
  88. package/esm2015/rest-controllers/terminal.controller.js +0 -151
  89. package/esm2015/rest-middlewares/container.middleware.js +0 -32
  90. package/esm2015/rest-middlewares/error-handler.middleware.js +0 -99
  91. package/esm2015/rest-middlewares/language.middleware.js +0 -28
  92. package/esm2015/rest-middlewares/request-ended.middleware.js +0 -33
  93. package/esm2015/rest-middlewares/request-started.middleware.js +0 -32
  94. package/esm2015/rest-openapi.js +0 -44
  95. package/esm2015/services/asset-processor.js +0 -108
  96. package/esm2015/services/asset-resolver.js +0 -53
  97. package/esm2015/services/assets.js +0 -181
  98. package/esm2015/services/backend-provider.js +0 -32
  99. package/esm2015/services/cache-processor.js +0 -34
  100. package/esm2015/services/cache.js +0 -93
  101. package/esm2015/services/endpoint-provider.js +0 -29
  102. package/esm2015/services/entities/asset.js +0 -60
  103. package/esm2015/services/entities/base-entity.js +0 -37
  104. package/esm2015/services/entities/lazy-asset.js +0 -90
  105. package/esm2015/services/entities/progress.js +0 -213
  106. package/esm2015/services/entities/temp-asset.js +0 -64
  107. package/esm2015/services/fixtures.js +0 -45
  108. package/esm2015/services/gallery-cache.js +0 -36
  109. package/esm2015/services/gallery-image.js +0 -48
  110. package/esm2015/services/gallery.js +0 -138
  111. package/esm2015/services/id-generator.js +0 -63
  112. package/esm2015/services/job-manager.js +0 -221
  113. package/esm2015/services/lazy-assets.js +0 -83
  114. package/esm2015/services/logger.js +0 -31
  115. package/esm2015/services/mail-sender.js +0 -58
  116. package/esm2015/services/memory-cache.js +0 -84
  117. package/esm2015/services/mongo-connector.js +0 -58
  118. package/esm2015/services/open-api.js +0 -140
  119. package/esm2015/services/progresses.js +0 -118
  120. package/esm2015/services/template-renderer.js +0 -88
  121. package/esm2015/services/terminal-manager.js +0 -94
  122. package/esm2015/services/token-generator.js +0 -55
  123. package/esm2015/services/translation-provider.js +0 -54
  124. package/esm2015/services/translator.js +0 -84
  125. package/esm2015/services/user-manager.js +0 -47
  126. package/esm2015/socket-controllers/progress.controller.js +0 -82
  127. package/esm2015/socket-controllers/terminal.controller.js +0 -83
  128. package/esm2015/socket-controllers/terminal.js +0 -98
  129. package/esm2015/socket-middlewares/compression.middleware.js +0 -19
  130. package/esm2015/static.js +0 -33
  131. package/esm2015/utilities/clear-command.js +0 -33
  132. package/esm2015/utilities/decorators.js +0 -54
  133. package/esm2015/utilities/di-container.js +0 -84
  134. package/esm2015/utilities/empty-job.js +0 -29
  135. package/esm2015/utilities/lazy-asset-generator.js +0 -46
  136. package/esm2015/utilities/mongoose.js +0 -225
  137. package/esm2015/utils.js +0 -699
  138. package/esm2015/validators.js +0 -51
  139. package/fesm2015/stemy-backend.js.map +0 -1
  140. package/rest-openapi.d.ts +0 -3
  141. package/stemy-backend.metadata.json +0 -1
  142. /package/{utilities → commands}/clear-command.d.ts +0 -0
  143. /package/{esm2015/stemy-backend.js → esm2020/stemy-backend.mjs} +0 -0
  144. /package/{esm2015/utilities/base-doc.js → esm2020/utilities/base-doc.mjs} +0 -0
  145. /package/{esm2015/utilities/tree.js → esm2020/utilities/tree.mjs} +0 -0
@@ -0,0 +1,73 @@
1
+ import { ObjectId } from "bson";
2
+ import { deleteFromBucket } from "../../utils";
3
+ import { BaseEntity } from "./base-entity";
4
+ export class LazyAsset extends BaseEntity {
5
+ constructor(id, data, collection, logger, assets, progresses) {
6
+ super(id, data, collection);
7
+ this.logger = logger;
8
+ this.assets = assets;
9
+ this.progresses = progresses;
10
+ }
11
+ get jobName() {
12
+ return this.data.jobName;
13
+ }
14
+ get jobParams() {
15
+ return this.data.jobParams;
16
+ }
17
+ get jobQue() {
18
+ return this.data.jobQue;
19
+ }
20
+ get progressId() {
21
+ return this.data.progressId;
22
+ }
23
+ get assetId() {
24
+ return this.data.assetId;
25
+ }
26
+ async unlink() {
27
+ await this.load();
28
+ if (!this.progressId) {
29
+ await this.collection.deleteOne({ _id: this.mId });
30
+ }
31
+ return deleteFromBucket(this.assets.bucket, new ObjectId(this.assetId));
32
+ }
33
+ startWorking() {
34
+ this.load().then(() => {
35
+ if (this.deleted)
36
+ return;
37
+ this.progresses.get(this.progressId).then(p => {
38
+ p?.cancel();
39
+ });
40
+ this.startWorkingOnAsset(false).then(() => {
41
+ this.logger.log("lazy-assets", `Started working on lazy asset: ${this.id}`);
42
+ }).catch(reason => {
43
+ this.logger.log("lazy-assets", `Can't start working on lazy asset: ${this.id}\nReason: ${reason}`);
44
+ });
45
+ });
46
+ }
47
+ async loadAsset() {
48
+ await this.load();
49
+ if (this.deleted)
50
+ return null;
51
+ if (this.assetId) {
52
+ return this.assets.read(this.assetId);
53
+ }
54
+ if (this.progressId) {
55
+ await this.progresses.waitToFinish(this.progressId);
56
+ return this.loadAsset();
57
+ }
58
+ await this.startWorkingOnAsset(true);
59
+ return this.loadAsset();
60
+ }
61
+ async writeAsset(asset) {
62
+ this.data.assetId = asset.id;
63
+ await this.save();
64
+ return asset;
65
+ }
66
+ async startWorkingOnAsset(fromLoad) {
67
+ this.data.progressId = (await this.progresses.create()).id;
68
+ this.data.assetId = null;
69
+ await this.save();
70
+ await this.progresses.jobMan.enqueueWithName(this.data.jobName, { ...this.data.jobParams, lazyId: this.id, fromLoad });
71
+ }
72
+ }
73
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF6eS1hc3NldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9lbnRpdGllcy9sYXp5LWFzc2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFHOUIsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRzdDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFHekMsTUFBTSxPQUFPLFNBQVUsU0FBUSxVQUFzQjtJQXNCakQsWUFBWSxFQUFZLEVBQ1osSUFBeUIsRUFDekIsVUFBc0IsRUFDWixNQUFjLEVBQ2QsTUFBYyxFQUNkLFVBQXNCO1FBQ3hDLEtBQUssQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBSFYsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxlQUFVLEdBQVYsVUFBVSxDQUFZO0lBRTVDLENBQUM7SUEzQkQsSUFBSSxPQUFPO1FBQ1AsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBSSxNQUFNO1FBQ04sT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1YsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1AsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUM3QixDQUFDO0lBV0QsS0FBSyxDQUFDLE1BQU07UUFDUixNQUFNLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNsQixJQUFJLENB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WyJpbXBvcnQge0NvbGxlY3Rpb259IGZyb20gXCJtb25nb2RiXCI7XHJcbmltcG9ydCB7T2JqZWN0SWR9IGZyb20gXCJic29uXCI7XHJcblxyXG5pbXBvcnQge0lBc3NldCwgSUxhenlBc3NldH0gZnJvbSBcIi4uLy4uL2NvbW1vbi10eXBlc1wiO1xyXG5pbXBvcnQge2RlbGV0ZUZyb21CdWNrZXR9IGZyb20gXCIuLi8uLi91dGlsc1wiO1xyXG5pbXBvcnQge0Fzc2V0c30gZnJvbSBcIi4uL2Fzc2V0c1wiO1xyXG5pbXBvcnQge1Byb2dyZXNzZXN9IGZyb20gXCIuLi9wcm9ncmVzc2VzXCI7XHJcbmltcG9ydCB7QmFzZUVudGl0eX0gZnJvbSBcIi4vYmFzZS1lbnRpdHlcIjtcclxuaW1wb3J0IHtMb2dnZXJ9IGZyb20gXCIuLi9sb2dnZXJcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBMYXp5QXNzZXQgZXh0ZW5kcyBCYXNlRW50aXR5PElMYXp5QXNzZXQ+IGltcGxlbWVudHMgSUxhenlBc3NldCB7XHJcblxyXG4gICAgZ2V0IGpvYk5hbWUoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLmpvYk5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGpvYlBhcmFtcygpOiBhbnkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEuam9iUGFyYW1zO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBqb2JRdWUoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLmpvYlF1ZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgcHJvZ3Jlc3NJZCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEucHJvZ3Jlc3NJZDtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgYXNzZXRJZCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEuYXNzZXRJZDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3RvcihpZDogT2JqZWN0SWQsXHJcbiAgICAgICAgICAgICAgICBkYXRhOiBQYXJ0aWFsPElMYXp5QXNzZXQ+LFxyXG4gICAgICAgICAgICAgICAgY29sbGVjdGlvbjogQ29sbGVjdGlvbixcclxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCBsb2dnZXI6IExvZ2dlcixcclxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCBhc3NldHM6IEFzc2V0cyxcclxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCBwcm9ncmVzc2VzOiBQcm9ncmVzc2VzKSB7XHJcbiAgICAgICAgc3VwZXIoaWQsIGRhdGEsIGNvbGxlY3Rpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHVubGluaygpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgICAgIGF3YWl0IHRoaXMubG9hZCgpO1xyXG4gICAgICAgIGlmICghdGhpcy5wcm9ncmVzc0lkKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY29sbGVjdGlvbi5kZWxldGVPbmUoe19pZDogdGhpcy5tSWR9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRlbGV0ZUZyb21CdWNrZXQodGhpcy5hc3NldHMuYnVja2V0LCBuZXcgT2JqZWN0SWQodGhpcy5hc3NldElkKSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhcnRXb3JraW5nKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMubG9hZCgpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5kZWxldGVkKSByZXR1cm47XHJcbiAgICAgICAgICAgIHRoaXMucHJvZ3Jlc3Nlcy5nZXQodGhpcy5wcm9ncmVzc0lkKS50aGVuKHAgPT4ge1xyXG4gICAgICAgICAgICAgICAgcD8uY2FuY2VsKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0V29ya2luZ09uQXNzZXQoZmFsc2UpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIubG9nKFwibGF6eS1hc3NldHNcIiwgYFN0YXJ0ZWQgd29ya2luZyBvbiBsYXp5IGFzc2V0OiAke3RoaXMuaWR9YCk7XHJcbiAgICAgICAgICAgIH0pLmNhdGNoKHJlYXNvbiA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5sb2coXCJsYXp5LWFzc2V0c1wiLCBgQ2FuJ3Qgc3RhcnQgd29ya2luZyBvbiBsYXp5IGFzc2V0OiAke3RoaXMuaWR9XFxuUmVhc29uOiAke3JlYXNvbn1gKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgbG9hZEFzc2V0KCk6IFByb21pc2U8SUFzc2V0PiB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuZGVsZXRlZCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgaWYgKHRoaXMuYXNzZXRJZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hc3NldHMucmVhZCh0aGlzLmFzc2V0SWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5wcm9ncmVzc0lkKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucHJvZ3Jlc3Nlcy53YWl0VG9GaW5pc2godGhpcy5wcm9ncmVzc0lkKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9hZEFzc2V0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGF3YWl0IHRoaXMuc3RhcnRXb3JraW5nT25Bc3NldCh0cnVlKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5sb2FkQXNzZXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyB3cml0ZUFzc2V0KGFzc2V0OiBJQXNzZXQpOiBQcm9taXNlPElBc3NldD4ge1xyXG4gICAgICAgIHRoaXMuZGF0YS5hc3NldElkID0gYXNzZXQuaWQ7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5zYXZlKCk7XHJcbiAgICAgICAgcmV0dXJuIGFzc2V0O1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBhc3luYyBzdGFydFdvcmtpbmdPbkFzc2V0KGZyb21Mb2FkOiBib29sZWFuKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICB0aGlzLmRhdGEucHJvZ3Jlc3NJZCA9IChhd2FpdCB0aGlzLnByb2dyZXNzZXMuY3JlYXRlKCkpLmlkO1xyXG4gICAgICAgIHRoaXMuZGF0YS5hc3NldElkID0gbnVsbDtcclxuICAgICAgICBhd2FpdCB0aGlzLnNhdmUoKTtcclxuICAgICAgICBhd2FpdCB0aGlzLnByb2dyZXNzZXMuam9iTWFuLmVucXVldWVXaXRoTmFtZSh0aGlzLmRhdGEuam9iTmFtZSwgey4uLnRoaXMuZGF0YS5qb2JQYXJhbXMsIGxhenlJZDogdGhpcy5pZCwgZnJvbUxvYWR9KTtcclxuICAgIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,176 @@
1
+ import { BaseEntity } from "./base-entity";
2
+ export class Progress extends BaseEntity {
3
+ constructor(id, data, collection) {
4
+ super(id, data, collection);
5
+ }
6
+ get current() {
7
+ return this.data.current;
8
+ }
9
+ get max() {
10
+ return this.data.max;
11
+ }
12
+ get message() {
13
+ return this.data.message;
14
+ }
15
+ get error() {
16
+ return this.data.error;
17
+ }
18
+ get canceled() {
19
+ return this.data.canceled;
20
+ }
21
+ get percent() {
22
+ return this.max > 0 ? Math.round(this.current / this.max * 100) : 0;
23
+ }
24
+ get remaining() {
25
+ return this.max > 0 ? this.max - this.current : 0;
26
+ }
27
+ setMessageBridge(messageBridge) {
28
+ this.messageBridge = messageBridge || this.messageBridge;
29
+ return this;
30
+ }
31
+ async createSubProgress(progressValue, max, message) {
32
+ if (max <= 0 && progressValue > 0) {
33
+ await this.advance(progressValue);
34
+ }
35
+ if (message !== null) {
36
+ this.data.message = message;
37
+ await this.save();
38
+ }
39
+ return new SubProgress(this, this.current, progressValue, Math.max(max, 1));
40
+ }
41
+ async setMax(max) {
42
+ if (isNaN(max) || max <= 0) {
43
+ throw "Max progress value must be bigger than zero";
44
+ }
45
+ this.data.max = max;
46
+ await this.save();
47
+ }
48
+ async setMessage(message) {
49
+ this.data.message = message;
50
+ await this.save();
51
+ }
52
+ async setError(error) {
53
+ this.data.error = error;
54
+ await this.save();
55
+ }
56
+ async advance(value = 1) {
57
+ if (isNaN(value) || value <= 0) {
58
+ throw new Error(`Advance value must be bigger than zero: ${this.id}`);
59
+ }
60
+ await this.load();
61
+ if (this.deleted || this.canceled) {
62
+ const status = this.deleted ? "deleted" : "canceled";
63
+ throw new Error(`Can't advance ${status} progress: ${this.id}`);
64
+ }
65
+ this.data.current = Math.min(this.max, this.current + value);
66
+ await this.save();
67
+ }
68
+ async cancel() {
69
+ this.data.canceled = true;
70
+ await this.save();
71
+ }
72
+ save() {
73
+ if (this.messageBridge) {
74
+ this.messageBridge.sendMessage(`progress-changed`, this.toJSON());
75
+ }
76
+ return super.save();
77
+ }
78
+ }
79
+ export class SubProgress {
80
+ constructor(parent, progressFrom, progressValue, mMax = 100) {
81
+ this.parent = parent;
82
+ this.progressFrom = progressFrom;
83
+ this.progressValue = progressValue;
84
+ this.mMax = mMax;
85
+ if (progressFrom < 0) {
86
+ throw "Progress from must be bigger than or zero";
87
+ }
88
+ if (progressValue <= 0) {
89
+ throw "Progress value must be bigger than zero";
90
+ }
91
+ this.mCurrent = 0;
92
+ }
93
+ get id() {
94
+ return this.parent.id;
95
+ }
96
+ get current() {
97
+ return this.mCurrent;
98
+ }
99
+ get max() {
100
+ return this.mMax;
101
+ }
102
+ get message() {
103
+ return this.parent.message;
104
+ }
105
+ get error() {
106
+ return this.parent.error;
107
+ }
108
+ get percent() {
109
+ return this.parent.percent;
110
+ }
111
+ get remaining() {
112
+ return this.max - this.mCurrent;
113
+ }
114
+ get canceled() {
115
+ return !this.parent || this.parent.canceled;
116
+ }
117
+ setMessageBridge(messageBridge) {
118
+ if (!this.parent)
119
+ return this;
120
+ this.parent.setMessageBridge(messageBridge);
121
+ return this;
122
+ }
123
+ async createSubProgress(progressValue, max, message) {
124
+ if (max <= 0 && progressValue > 0) {
125
+ await this.advance(progressValue);
126
+ }
127
+ if (message !== null) {
128
+ await this.setMessage(message);
129
+ }
130
+ return new SubProgress(this, this.current, progressValue, Math.max(max, 1));
131
+ }
132
+ async setMax(max) {
133
+ if (isNaN(max) || max <= 0) {
134
+ throw "Max progress value must be bigger than zero";
135
+ }
136
+ this.mMax = max;
137
+ await this.save();
138
+ }
139
+ async setMessage(message) {
140
+ if (!this.parent)
141
+ return null;
142
+ await this.parent.setMessage(message);
143
+ }
144
+ async setError(error) {
145
+ if (!this.parent)
146
+ return null;
147
+ await this.parent.setError(error);
148
+ }
149
+ async advance(value = 1) {
150
+ if (isNaN(value) || value <= 0) {
151
+ throw "Advance value must be bigger than zero";
152
+ }
153
+ this.mCurrent = Math.min(this.max, this.mCurrent + value);
154
+ await this.save();
155
+ }
156
+ async cancel() {
157
+ if (!this.parent)
158
+ return null;
159
+ await this.parent.cancel();
160
+ }
161
+ async save() {
162
+ const ratio = this.max > 0 ? this.mCurrent / this.max : 0;
163
+ const newProgress = this.progressFrom + Math.round(this.progressValue * ratio);
164
+ const current = this.parent.current;
165
+ if (newProgress <= current)
166
+ return null;
167
+ await this.parent.advance(newProgress);
168
+ }
169
+ async load() {
170
+ return null;
171
+ }
172
+ toJSON() {
173
+ return this.parent.toJSON();
174
+ }
175
+ }
176
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc2VydmljZXMvZW50aXRpZXMvcHJvZ3Jlc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUV6QyxNQUFNLE9BQU8sUUFBUyxTQUFRLFVBQXFCO0lBZ0MvQyxZQUFZLEVBQVksRUFDWixJQUF3QixFQUN4QixVQUFzQjtRQUM5QixLQUFLLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBaENELElBQUksT0FBTztRQUNQLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQUksR0FBRztRQUNILE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDekIsQ0FBQztJQUVELElBQUksT0FBTztRQUNQLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQUksS0FBSztRQUNMLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDM0IsQ0FBQztJQUVELElBQUksUUFBUTtRQUNSLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDOUIsQ0FBQztJQUVELElBQUksT0FBTztRQUNQLE9BQU8sSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVELElBQUksU0FBUztRQUNULE9BQU8sSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxD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TUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQTtJQUMxQyxDQUFDO0lBRUQsS0FBSyxDQUFDLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsTUFBTTtRQUNGLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge09iamVjdElkfSBmcm9tIFwiYnNvblwiO1xyXG5pbXBvcnQge0NvbGxlY3Rpb259IGZyb20gXCJtb25nb2RiXCI7XHJcbmltcG9ydCB7SU1lc3NhZ2VCcmlkZ2UsIElQcm9ncmVzc30gZnJvbSBcIi4uLy4uL2NvbW1vbi10eXBlc1wiO1xyXG5pbXBvcnQge0Jhc2VFbnRpdHl9IGZyb20gXCIuL2Jhc2UtZW50aXR5XCI7XHJcblxyXG5leHBvcnQgY2xhc3MgUHJvZ3Jlc3MgZXh0ZW5kcyBCYXNlRW50aXR5PElQcm9ncmVzcz4gaW1wbGVtZW50cyBJUHJvZ3Jlc3Mge1xyXG5cclxuICAgIHByb3RlY3RlZCBtZXNzYWdlQnJpZGdlOiBJTWVzc2FnZUJyaWRnZTtcclxuXHJcbiAgICBnZXQgY3VycmVudCgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEuY3VycmVudDtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbWF4KCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5tYXg7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IG1lc3NhZ2UoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLm1lc3NhZ2U7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGVycm9yKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5lcnJvcjtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY2FuY2VsZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5jYW5jZWxlZDtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgcGVyY2VudCgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1heCA+IDAgPyBNYXRoLnJvdW5kKHRoaXMuY3VycmVudCAvIHRoaXMubWF4ICogMTAwKSA6IDA7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHJlbWFpbmluZygpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1heCA+IDAgPyB0aGlzLm1heCAtIHRoaXMuY3VycmVudCA6IDA7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3RydWN0b3IoaWQ6IE9iamVjdElkLFxyXG4gICAgICAgICAgICAgICAgZGF0YTogUGFydGlhbDxJUHJvZ3Jlc3M+LFxyXG4gICAgICAgICAgICAgICAgY29sbGVjdGlvbjogQ29sbGVjdGlvbikge1xyXG4gICAgICAgIHN1cGVyKGlkLCBkYXRhLCBjb2xsZWN0aW9uKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRNZXNzYWdlQnJpZGdlKG1lc3NhZ2VCcmlkZ2U6IElNZXNzYWdlQnJpZGdlKTogdGhpcyB7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlQnJpZGdlID0gbWVzc2FnZUJyaWRnZSB8fCB0aGlzLm1lc3NhZ2VCcmlkZ2U7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY3JlYXRlU3ViUHJvZ3Jlc3MocHJvZ3Jlc3NWYWx1ZTogbnVtYmVyLCBtYXg/OiBudW1iZXIsIG1lc3NhZ2U/OiBzdHJpbmcpOiBQcm9taXNlPElQcm9ncmVzcz4ge1xyXG4gICAgICAgIGlmIChtYXggPD0gMCAmJiBwcm9ncmVzc1ZhbHVlID4gMCkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmFkdmFuY2UocHJvZ3Jlc3NWYWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtZXNzYWdlICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YS5tZXNzYWdlID0gbWVzc2FnZTtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5zYXZlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXcgU3ViUHJvZ3Jlc3ModGhpcywgdGhpcy5jdXJyZW50LCBwcm9ncmVzc1ZhbHVlLCBNYXRoLm1heChtYXgsIDEpKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBzZXRNYXgobWF4OiBudW1iZXIpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIGlmIChpc05hTihtYXgpIHx8IG1heCA8PSAwKSB7XHJcbiAgICAgICAgICAgIHRocm93IFwiTWF4IHByb2dyZXNzIHZhbHVlIG11c3QgYmUgYmlnZ2VyIHRoYW4gemVyb1wiO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmRhdGEubWF4ID0gbWF4O1xyXG4gICAgICAgIGF3YWl0IHRoaXMuc2F2ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHNldE1lc3NhZ2UobWVzc2FnZTogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICB0aGlzLmRhdGEubWVzc2FnZSA9IG1lc3NhZ2U7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5zYXZlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc2V0RXJyb3IoZXJyb3I6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgdGhpcy5kYXRhLmVycm9yID0gZXJyb3I7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5zYXZlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgYWR2YW5jZSh2YWx1ZTogbnVtYmVyID0gMSk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgaWYgKGlzTmFOKHZhbHVlKSB8fCB2YWx1ZSA8PSAwKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQWR2YW5jZSB2YWx1ZSBtdXN0IGJlIGJpZ2dlciB0aGFuIHplcm86ICR7dGhpcy5pZH1gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuZGVsZXRlZCB8fCB0aGlzLmNhbmNlbGVkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXR1cyA9IHRoaXMuZGVsZXRlZCA/IFwiZGVsZXRlZFwiIDogXCJjYW5jZWxlZFwiO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbid0IGFkdmFuY2UgJHtzdGF0dXN9IHByb2dyZXNzOiAke3RoaXMuaWR9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZGF0YS5jdXJyZW50ID0gTWF0aC5taW4odGhpcy5tYXgsIHRoaXMuY3VycmVudCArIHZhbHVlKTtcclxuICAgICAgICBhd2FpdCB0aGlzLnNhdmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjYW5jZWwoKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICB0aGlzLmRhdGEuY2FuY2VsZWQgPSB0cnVlO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuc2F2ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNhdmUoKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICBpZiAodGhpcy5tZXNzYWdlQnJpZGdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZUJyaWRnZS5zZW5kTWVzc2FnZShgcHJvZ3Jlc3MtY2hhbmdlZGAsIHRoaXMudG9KU09OKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc3VwZXIuc2F2ZSgpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU3ViUHJvZ3Jlc3MgaW1wbGVtZW50cyBJUHJvZ3Jlc3Mge1xyXG5cclxuICAgIGdldCBpZCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudC5pZDtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY3VycmVudCgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1DdXJyZW50O1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBtYXgoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5tTWF4O1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBtZXNzYWdlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50Lm1lc3NhZ2U7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGVycm9yKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50LmVycm9yO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBwZXJjZW50KCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50LnBlcmNlbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHJlbWFpbmluZygpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1heCAtIHRoaXMubUN1cnJlbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGNhbmNlbGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhdGhpcy5wYXJlbnQgfHwgdGhpcy5wYXJlbnQuY2FuY2VsZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIG1DdXJyZW50OiBudW1iZXI7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIHBhcmVudDogSVByb2dyZXNzLCBwcm90ZWN0ZWQgcHJvZ3Jlc3NGcm9tOiBudW1iZXIsIHByb3RlY3RlZCBwcm9ncmVzc1ZhbHVlOiBudW1iZXIsIHByb3RlY3RlZCBtTWF4OiBudW1iZXIgPSAxMDApIHtcclxuICAgICAgICBpZiAocHJvZ3Jlc3NGcm9tIDwgMCkge1xyXG4gICAgICAgICAgICB0aHJvdyBcIlByb2dyZXNzIGZyb20gbXVzdCBiZSBiaWdnZXIgdGhhbiBvciB6ZXJvXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwcm9ncmVzc1ZhbHVlIDw9IDApIHtcclxuICAgICAgICAgICAgdGhyb3cgXCJQcm9ncmVzcyB2YWx1ZSBtdXN0IGJlIGJpZ2dlciB0aGFuIHplcm9cIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5tQ3VycmVudCA9IDA7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0TWVzc2FnZUJyaWRnZShtZXNzYWdlQnJpZGdlOiBJTWVzc2FnZUJyaWRnZSk6IHRoaXMge1xyXG4gICAgICAgIGlmICghdGhpcy5wYXJlbnQpIHJldHVybiB0aGlzO1xyXG4gICAgICAgIHRoaXMucGFyZW50LnNldE1lc3NhZ2VCcmlkZ2UobWVzc2FnZUJyaWRnZSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY3JlYXRlU3ViUHJvZ3Jlc3MocHJvZ3Jlc3NWYWx1ZTogbnVtYmVyLCBtYXg/OiBudW1iZXIsIG1lc3NhZ2U/OiBzdHJpbmcpOiBQcm9taXNlPElQcm9ncmVzcz4ge1xyXG4gICAgICAgIGlmIChtYXggPD0gMCAmJiBwcm9ncmVzc1ZhbHVlID4gMCkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmFkdmFuY2UocHJvZ3Jlc3NWYWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtZXNzYWdlICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuc2V0TWVzc2FnZShtZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ldyBTdWJQcm9ncmVzcyh0aGlzLCB0aGlzLmN1cnJlbnQsIHByb2dyZXNzVmFsdWUsIE1hdGgubWF4KG1heCwgMSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHNldE1heChtYXg6IG51bWJlcik6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgaWYgKGlzTmFOKG1heCkgfHwgbWF4IDw9IDApIHtcclxuICAgICAgICAgICAgdGhyb3cgXCJNYXggcHJvZ3Jlc3MgdmFsdWUgbXVzdCBiZSBiaWdnZXIgdGhhbiB6ZXJvXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubU1heCA9IG1heDtcclxuICAgICAgICBhd2FpdCB0aGlzLnNhdmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBzZXRNZXNzYWdlKG1lc3NhZ2U6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnBhcmVudCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5wYXJlbnQuc2V0TWVzc2FnZShtZXNzYWdlKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBzZXRFcnJvcihlcnJvcjogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICBpZiAoIXRoaXMucGFyZW50KSByZXR1cm4gbnVsbDtcclxuICAgICAgICBhd2FpdCB0aGlzLnBhcmVudC5zZXRFcnJvcihlcnJvcik7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgYWR2YW5jZSh2YWx1ZTogbnVtYmVyID0gMSk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgaWYgKGlzTmFOKHZhbHVlKSB8fCB2YWx1ZSA8PSAwKSB7XHJcbiAgICAgICAgICAgIHRocm93IFwiQWR2YW5jZSB2YWx1ZSBtdXN0IGJlIGJpZ2dlciB0aGFuIHplcm9cIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5tQ3VycmVudCA9IE1hdGgubWluKHRoaXMubWF4LCB0aGlzLm1DdXJyZW50ICsgdmFsdWUpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuc2F2ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGNhbmNlbCgpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIGlmICghdGhpcy5wYXJlbnQpIHJldHVybiBudWxsO1xyXG4gICAgICAgIGF3YWl0IHRoaXMucGFyZW50LmNhbmNlbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHNhdmUoKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICBjb25zdCByYXRpbyA9IHRoaXMubWF4ID4gMCA/IHRoaXMubUN1cnJlbnQgLyB0aGlzLm1heCA6IDA7XHJcbiAgICAgICAgY29uc3QgbmV3UHJvZ3Jlc3MgPSB0aGlzLnByb2dyZXNzRnJvbSArIE1hdGgucm91bmQodGhpcy5wcm9ncmVzc1ZhbHVlICogcmF0aW8pO1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLnBhcmVudC5jdXJyZW50O1xyXG4gICAgICAgIGlmIChuZXdQcm9ncmVzcyA8PSBjdXJyZW50KSByZXR1cm4gbnVsbDtcclxuICAgICAgICBhd2FpdCB0aGlzLnBhcmVudC5hZHZhbmNlKG5ld1Byb2dyZXNzKVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGxvYWQoKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICB0b0pTT04oKTogYW55IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQudG9KU09OKCk7XHJcbiAgICB9XHJcbn1cclxuIl19
@@ -0,0 +1,45 @@
1
+ import { ObjectId } from "bson";
2
+ import { bufferToStream, toImage } from "../../utils";
3
+ export class TempAsset {
4
+ constructor(buffer, filename, contentType, metadata) {
5
+ this.buffer = buffer;
6
+ this.filename = filename;
7
+ this.contentType = contentType;
8
+ this.metadata = metadata;
9
+ this.id = new ObjectId().toHexString();
10
+ }
11
+ get stream() {
12
+ return bufferToStream(this.buffer);
13
+ }
14
+ async unlink() {
15
+ throw new Error(`Temp asset '${this.id}' can not be removed!`);
16
+ }
17
+ async getBuffer() {
18
+ return this.buffer;
19
+ }
20
+ async download(metadata) {
21
+ return this.stream;
22
+ }
23
+ downloadImage(params, metadata) {
24
+ Object.assign(this.metadata, metadata || {});
25
+ return toImage(this.stream, params, this.metadata);
26
+ }
27
+ getImage(params) {
28
+ return this.downloadImage(params);
29
+ }
30
+ async save() {
31
+ return this;
32
+ }
33
+ async load() {
34
+ return this;
35
+ }
36
+ toJSON() {
37
+ return {
38
+ id: this.id,
39
+ filename: this.filename,
40
+ contentType: this.contentType,
41
+ metadata: this.metadata
42
+ };
43
+ }
44
+ }
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcC1hc3NldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9lbnRpdGllcy90ZW1wLWFzc2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFOUIsT0FBTyxFQUFDLGNBQWMsRUFBRSxPQUFPLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFcEQsTUFBTSxPQUFPLFNBQVM7SUFRbEIsWUFBc0IsTUFBYyxFQUFXLFFBQWdCLEVBQVcsV0FBbUIsRUFBVyxRQUFvQjtRQUF0RyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQVcsYUFBUSxHQUFSLFFBQVEsQ0FBUTtRQUFXLGdCQUFXLEdBQVgsV0FBVyxDQUFRO1FBQVcsYUFBUSxHQUFSLFFBQVEsQ0FBWTtRQUN4SCxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDM0MsQ0FBQztJQU5ELElBQUksTUFBTTtRQUNOLE9BQU8sY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBTUQsS0FBSyxDQUFDLE1BQU07UUFDUixNQUFNLElBQUksS0FBSyxDQUFDLGVBQWUsSUFBSSxDQUFDLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQsS0FBSyxDQUFDLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQUVELEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBcUI7UUFDaEMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxhQUFhLENBQUMsTUFBMEIsRUFBRSxRQUFxQjtRQUMzRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzdDLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsUUFBUSxDQUFDLE1BQTBCO1FBQy9CLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsS0FBSyxDQUFDLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsS0FBSyxDQUFDLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsTUFBTTtRQUNGLE9BQU87WUFDSCxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7WUFDWCxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdkIsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO1lBQzdCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtTQUMxQixDQUFDO0lBQ04sQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtSZWFkYWJsZX0gZnJvbSBcInN0cmVhbVwiO1xyXG5pbXBvcnQge09iamVjdElkfSBmcm9tIFwiYnNvblwiO1xyXG5pbXBvcnQge0lBc3NldCwgSUFzc2V0SW1hZ2VQYXJhbXMsIElBc3NldE1ldGF9IGZyb20gXCIuLi8uLi9jb21tb24tdHlwZXNcIjtcclxuaW1wb3J0IHtidWZmZXJUb1N0cmVhbSwgdG9JbWFnZX0gZnJvbSBcIi4uLy4uL3V0aWxzXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgVGVtcEFzc2V0IGltcGxlbWVudHMgSUFzc2V0IHtcclxuXHJcbiAgICByZWFkb25seSBpZDogc3RyaW5nO1xyXG5cclxuICAgIGdldCBzdHJlYW0oKTogUmVhZGFibGUge1xyXG4gICAgICAgIHJldHVybiBidWZmZXJUb1N0cmVhbSh0aGlzLmJ1ZmZlcik7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIGJ1ZmZlcjogQnVmZmVyLCByZWFkb25seSBmaWxlbmFtZTogc3RyaW5nLCByZWFkb25seSBjb250ZW50VHlwZTogc3RyaW5nLCByZWFkb25seSBtZXRhZGF0YTogSUFzc2V0TWV0YSkge1xyXG4gICAgICAgIHRoaXMuaWQgPSBuZXcgT2JqZWN0SWQoKS50b0hleFN0cmluZygpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHVubGluaygpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVGVtcCBhc3NldCAnJHt0aGlzLmlkfScgY2FuIG5vdCBiZSByZW1vdmVkIWApO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldEJ1ZmZlcigpOiBQcm9taXNlPEJ1ZmZlcj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJ1ZmZlcjtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBkb3dubG9hZChtZXRhZGF0YT86IElBc3NldE1ldGEpOiBQcm9taXNlPFJlYWRhYmxlPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RyZWFtO1xyXG4gICAgfVxyXG5cclxuICAgIGRvd25sb2FkSW1hZ2UocGFyYW1zPzogSUFzc2V0SW1hZ2VQYXJhbXMsIG1ldGFkYXRhPzogSUFzc2V0TWV0YSk6IFByb21pc2U8UmVhZGFibGU+IHtcclxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMubWV0YWRhdGEsIG1ldGFkYXRhIHx8IHt9KTtcclxuICAgICAgICByZXR1cm4gdG9JbWFnZSh0aGlzLnN0cmVhbSwgcGFyYW1zLCB0aGlzLm1ldGFkYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRJbWFnZShwYXJhbXM/OiBJQXNzZXRJbWFnZVBhcmFtcyk6IFByb21pc2U8UmVhZGFibGU+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kb3dubG9hZEltYWdlKHBhcmFtcyk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc2F2ZSgpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGxvYWQoKTogUHJvbWlzZTx0aGlzPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgdG9KU09OKCk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgaWQ6IHRoaXMuaWQsXHJcbiAgICAgICAgICAgIGZpbGVuYW1lOiB0aGlzLmZpbGVuYW1lLFxyXG4gICAgICAgICAgICBjb250ZW50VHlwZTogdGhpcy5jb250ZW50VHlwZSxcclxuICAgICAgICAgICAgbWV0YWRhdGE6IHRoaXMubWV0YWRhdGFcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,26 @@
1
+ import { __decorate, __param } from "tslib";
2
+ import { injectable, injectAll, Lifecycle, scoped } from "tsyringe";
3
+ import { FIXTURE } from "../common-types";
4
+ let Fixtures = class Fixtures {
5
+ constructor(fixtures) {
6
+ this.fixtures = fixtures;
7
+ }
8
+ async load(output) {
9
+ if (!this.fixtures)
10
+ return;
11
+ output = output || {
12
+ write: console.log,
13
+ writeln: t => console.log(t + "\n")
14
+ };
15
+ for (let fixture of this.fixtures) {
16
+ await fixture.load(output);
17
+ }
18
+ }
19
+ };
20
+ Fixtures = __decorate([
21
+ injectable(),
22
+ scoped(Lifecycle.ContainerScoped),
23
+ __param(0, injectAll(FIXTURE))
24
+ ], Fixtures);
25
+ export { Fixtures };
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4dHVyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvZml4dHVyZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDbEUsT0FBTyxFQUFDLE9BQU8sRUFBMkIsTUFBTSxpQkFBaUIsQ0FBQztBQUkzRCxJQUFNLFFBQVEsR0FBZCxNQUFNLFFBQVE7SUFFakIsWUFBMEMsUUFBb0I7UUFBcEIsYUFBUSxHQUFSLFFBQVEsQ0FBWTtJQUU5RCxDQUFDO0lBRUQsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFzQjtRQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPO1FBQzNCLE1BQU0sR0FBRyxNQUFNLElBQUk7WUFDZixLQUFLLEVBQUUsT0FBTyxDQUFDLEdBQUc7WUFDbEIsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO1NBQ3RDLENBQUM7UUFDRixLQUFLLElBQUksT0FBTyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDL0IsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQzlCO0lBQ0wsQ0FBQztDQUNKLENBQUE7QUFoQlksUUFBUTtJQUZwQixVQUFVLEVBQUU7SUFDWixNQUFNLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQztJQUdqQixXQUFBLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQTtHQUZ0QixRQUFRLENBZ0JwQjtTQWhCWSxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtpbmplY3RhYmxlLCBpbmplY3RBbGwsIExpZmVjeWNsZSwgc2NvcGVkfSBmcm9tIFwidHN5cmluZ2VcIjtcclxuaW1wb3J0IHtGSVhUVVJFLCBJRml4dHVyZSwgSUZpeHR1cmVPdXRwdXR9IGZyb20gXCIuLi9jb21tb24tdHlwZXNcIjtcclxuXHJcbkBpbmplY3RhYmxlKClcclxuQHNjb3BlZChMaWZlY3ljbGUuQ29udGFpbmVyU2NvcGVkKVxyXG5leHBvcnQgY2xhc3MgRml4dHVyZXMge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKEBpbmplY3RBbGwoRklYVFVSRSkgcHJvdGVjdGVkIGZpeHR1cmVzOiBJRml4dHVyZVtdKSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGxvYWQob3V0cHV0OiBJRml4dHVyZU91dHB1dCk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmZpeHR1cmVzKSByZXR1cm47XHJcbiAgICAgICAgb3V0cHV0ID0gb3V0cHV0IHx8IHtcclxuICAgICAgICAgICAgd3JpdGU6IGNvbnNvbGUubG9nLFxyXG4gICAgICAgICAgICB3cml0ZWxuOiB0ID0+IGNvbnNvbGUubG9nKHQgKyBcIlxcblwiKVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgZm9yIChsZXQgZml4dHVyZSBvZiB0aGlzLmZpeHR1cmVzKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IGZpeHR1cmUubG9hZChvdXRwdXQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,27 @@
1
+ import { __decorate } from "tslib";
2
+ import { injectable, Lifecycle, scoped } from "tsyringe";
3
+ import { GalleryImage } from "./gallery-image";
4
+ let GalleryCache = class GalleryCache {
5
+ constructor() {
6
+ this.imgCache = {};
7
+ }
8
+ put(img) {
9
+ this.imgCache[img.thumb] = img;
10
+ this.imgCache[img.big] = img;
11
+ }
12
+ serve(id) {
13
+ const img = this.imgCache[id];
14
+ return !img ? null : img.serve(id);
15
+ }
16
+ create(folder, targetSize, handler) {
17
+ const image = new GalleryImage(folder, targetSize, handler);
18
+ this.put(image);
19
+ return image;
20
+ }
21
+ };
22
+ GalleryCache = __decorate([
23
+ injectable(),
24
+ scoped(Lifecycle.ContainerScoped)
25
+ ], GalleryCache);
26
+ export { GalleryCache };
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FsbGVyeS1jYWNoZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9nYWxsZXJ5LWNhY2hlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFFdkQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBSXRDLElBQU0sWUFBWSxHQUFsQixNQUFNLFlBQVk7SUFJckI7UUFDSSxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQsR0FBRyxDQUFDLEdBQWtCO1FBQ2xCLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUMvQixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDakMsQ0FBQztJQUVELEtBQUssQ0FBQyxFQUFVO1FBQ1osTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM5QixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELE1BQU0sQ0FBQyxNQUFjLEVBQUUsVUFBd0IsRUFBRSxPQUE2QjtRQUMxRSxNQUFNLEtBQUssR0FBRyxJQUFJLFlBQVksQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzVELElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEIsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztDQUNKLENBQUE7QUF2QlksWUFBWTtJQUZ4QixVQUFVLEVBQUU7SUFDWixNQUFNLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQztHQUNyQixZQUFZLENBdUJ4QjtTQXZCWSxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtpbmplY3RhYmxlLCBMaWZlY3ljbGUsIHNjb3BlZH0gZnJvbSBcInRzeXJpbmdlXCI7XHJcbmltcG9ydCB7SUdhbGxlcnlJbWFnZSwgSUdhbGxlcnlJbWFnZUhhbmRsZXIsIElHYWxsZXJ5U2l6ZX0gZnJvbSBcIi4uL2NvbW1vbi10eXBlc1wiO1xyXG5pbXBvcnQge0dhbGxlcnlJbWFnZX0gZnJvbSBcIi4vZ2FsbGVyeS1pbWFnZVwiO1xyXG5cclxuQGluamVjdGFibGUoKVxyXG5Ac2NvcGVkKExpZmVjeWNsZS5Db250YWluZXJTY29wZWQpXHJcbmV4cG9ydCBjbGFzcyBHYWxsZXJ5Q2FjaGUge1xyXG5cclxuICAgIHByaXZhdGUgcmVhZG9ubHkgaW1nQ2FjaGU6IHsgW2lkOiBzdHJpbmddOiBJR2FsbGVyeUltYWdlIH07XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5pbWdDYWNoZSA9IHt9O1xyXG4gICAgfVxyXG5cclxuICAgIHB1dChpbWc6IElHYWxsZXJ5SW1hZ2UpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmltZ0NhY2hlW2ltZy50aHVtYl0gPSBpbWc7XHJcbiAgICAgICAgdGhpcy5pbWdDYWNoZVtpbWcuYmlnXSA9IGltZztcclxuICAgIH1cclxuXHJcbiAgICBzZXJ2ZShpZDogc3RyaW5nKTogUHJvbWlzZTxCdWZmZXI+IHtcclxuICAgICAgICBjb25zdCBpbWcgPSB0aGlzLmltZ0NhY2hlW2lkXTtcclxuICAgICAgICByZXR1cm4gIWltZyA/IG51bGwgOiBpbWcuc2VydmUoaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGNyZWF0ZShmb2xkZXI6IHN0cmluZywgdGFyZ2V0U2l6ZTogSUdhbGxlcnlTaXplLCBoYW5kbGVyOiBJR2FsbGVyeUltYWdlSGFuZGxlcik6IElHYWxsZXJ5SW1hZ2Uge1xyXG4gICAgICAgIGNvbnN0IGltYWdlID0gbmV3IEdhbGxlcnlJbWFnZShmb2xkZXIsIHRhcmdldFNpemUsIGhhbmRsZXIpO1xyXG4gICAgICAgIHRoaXMucHV0KGltYWdlKTtcclxuICAgICAgICByZXR1cm4gaW1hZ2U7XHJcbiAgICB9XHJcbn1cclxuIl19
@@ -0,0 +1,37 @@
1
+ import { v4 as uuidv4 } from "uuid";
2
+ import sharp_ from "sharp";
3
+ const sharp = sharp_;
4
+ const bigSize = 1500;
5
+ const thumbSize = 250;
6
+ export class GalleryImage {
7
+ constructor(folder, size, handler) {
8
+ this.folder = folder;
9
+ this.handler = handler;
10
+ this.thumb = uuidv4();
11
+ this.big = uuidv4();
12
+ this.targetSize = !size ? { width: thumbSize, height: thumbSize } : size;
13
+ }
14
+ async serve(id) {
15
+ const isThumb = id == this.thumb;
16
+ if (await this.handler.hasResult(isThumb)) {
17
+ return this.handler.serveResult(isThumb);
18
+ }
19
+ const original = sharp(await this.handler.getOriginal()).rotate();
20
+ const meta = await original.metadata();
21
+ const ratio = meta.width / meta.height;
22
+ const sizeRatio = isThumb ? this.targetSize.width / this.targetSize.height : 1;
23
+ const size = isThumb ? Math.max(this.targetSize.width, this.targetSize.height) : bigSize;
24
+ const targetHeight = ratio > sizeRatio ? size : Math.round(size / ratio);
25
+ const targetWidth = Math.round(targetHeight * ratio);
26
+ const resized = original.resize(targetWidth, targetHeight);
27
+ const buffer = await (isThumb ? resized.extract({
28
+ left: Math.floor((targetWidth - this.targetSize.width) / 2),
29
+ top: Math.floor((targetHeight - this.targetSize.height) / 2),
30
+ width: this.targetSize.width,
31
+ height: this.targetSize.height
32
+ }).toBuffer() : resized.toBuffer());
33
+ await this.handler.writeResult(isThumb, buffer);
34
+ return this.handler.serveResult(isThumb);
35
+ }
36
+ }
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FsbGVyeS1pbWFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9nYWxsZXJ5LWltYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxFQUFFLElBQUksTUFBTSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ2xDLE9BQU8sTUFBTSxNQUFNLE9BQU8sQ0FBQztBQUczQixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUM7QUFDckIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQ3JCLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUV0QixNQUFNLE9BQU8sWUFBWTtJQU1yQixZQUFxQixNQUFjLEVBQUUsSUFBa0IsRUFBVyxPQUE2QjtRQUExRSxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQStCLFlBQU8sR0FBUCxPQUFPLENBQXNCO1FBQzNGLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDM0UsQ0FBQztJQUVELEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBVTtRQUNsQixNQUFNLE9BQU8sR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQztRQUVqQyxJQUFJLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDdkMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUM1QztRQUVELE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNsRSxNQUFNLElBQUksR0FBRyxNQUFNLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN2QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDdkMsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9FLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDekYsTUFBTSxZQUFZLEdBQUcsS0FBSyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQztRQUN6RSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsQ0FBQztRQUVyRCxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUMzRCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO1lBQzVDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzNELEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzVELEtBQUssRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUs7WUFDNUIsTUFBTSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTTtTQUNqQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBRXBDLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2hELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDN0MsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHt2NCBhcyB1dWlkdjR9IGZyb20gXCJ1dWlkXCI7XHJcbmltcG9ydCBzaGFycF8gZnJvbSBcInNoYXJwXCI7XHJcbmltcG9ydCB7SUdhbGxlcnlJbWFnZSwgSUdhbGxlcnlTaXplLCBJR2FsbGVyeUltYWdlSGFuZGxlcn0gZnJvbSBcIi4uL2NvbW1vbi10eXBlc1wiO1xyXG5cclxuY29uc3Qgc2hhcnAgPSBzaGFycF87XHJcbmNvbnN0IGJpZ1NpemUgPSAxNTAwO1xyXG5jb25zdCB0aHVtYlNpemUgPSAyNTA7XHJcblxyXG5leHBvcnQgY2xhc3MgR2FsbGVyeUltYWdlIGltcGxlbWVudHMgSUdhbGxlcnlJbWFnZSB7XHJcblxyXG4gICAgcmVhZG9ubHkgdGh1bWI6IHN0cmluZztcclxuICAgIHJlYWRvbmx5IGJpZzogc3RyaW5nO1xyXG4gICAgcmVhZG9ubHkgdGFyZ2V0U2l6ZTogSUdhbGxlcnlTaXplO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHJlYWRvbmx5IGZvbGRlcjogc3RyaW5nLCBzaXplOiBJR2FsbGVyeVNpemUsIHJlYWRvbmx5IGhhbmRsZXI6IElHYWxsZXJ5SW1hZ2VIYW5kbGVyKSB7XHJcbiAgICAgICAgdGhpcy50aHVtYiA9IHV1aWR2NCgpO1xyXG4gICAgICAgIHRoaXMuYmlnID0gdXVpZHY0KCk7XHJcbiAgICAgICAgdGhpcy50YXJnZXRTaXplID0gIXNpemUgPyB7d2lkdGg6IHRodW1iU2l6ZSwgaGVpZ2h0OiB0aHVtYlNpemV9IDogc2l6ZTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBzZXJ2ZShpZDogc3RyaW5nKTogUHJvbWlzZTxCdWZmZXI+IHtcclxuICAgICAgICBjb25zdCBpc1RodW1iID0gaWQgPT0gdGhpcy50aHVtYjtcclxuXHJcbiAgICAgICAgaWYgKGF3YWl0IHRoaXMuaGFuZGxlci5oYXNSZXN1bHQoaXNUaHVtYikpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlci5zZXJ2ZVJlc3VsdChpc1RodW1iKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IG9yaWdpbmFsID0gc2hhcnAoYXdhaXQgdGhpcy5oYW5kbGVyLmdldE9yaWdpbmFsKCkpLnJvdGF0ZSgpO1xyXG4gICAgICAgIGNvbnN0IG1ldGEgPSBhd2FpdCBvcmlnaW5hbC5tZXRhZGF0YSgpO1xyXG4gICAgICAgIGNvbnN0IHJhdGlvID0gbWV0YS53aWR0aCAvIG1ldGEuaGVpZ2h0O1xyXG4gICAgICAgIGNvbnN0IHNpemVSYXRpbyA9IGlzVGh1bWIgPyB0aGlzLnRhcmdldFNpemUud2lkdGggLyB0aGlzLnRhcmdldFNpemUuaGVpZ2h0IDogMTtcclxuICAgICAgICBjb25zdCBzaXplID0gaXNUaHVtYiA/IE1hdGgubWF4KHRoaXMudGFyZ2V0U2l6ZS53aWR0aCwgdGhpcy50YXJnZXRTaXplLmhlaWdodCkgOiBiaWdTaXplO1xyXG4gICAgICAgIGNvbnN0IHRhcmdldEhlaWdodCA9IHJhdGlvID4gc2l6ZVJhdGlvID8gc2l6ZSA6IE1hdGgucm91bmQoc2l6ZSAvIHJhdGlvKTtcclxuICAgICAgICBjb25zdCB0YXJnZXRXaWR0aCA9IE1hdGgucm91bmQodGFyZ2V0SGVpZ2h0ICogcmF0aW8pO1xyXG5cclxuICAgICAgICBjb25zdCByZXNpemVkID0gb3JpZ2luYWwucmVzaXplKHRhcmdldFdpZHRoLCB0YXJnZXRIZWlnaHQpO1xyXG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IGF3YWl0IChpc1RodW1iID8gcmVzaXplZC5leHRyYWN0KHtcclxuICAgICAgICAgICAgbGVmdDogTWF0aC5mbG9vcigodGFyZ2V0V2lkdGggLSB0aGlzLnRhcmdldFNpemUud2lkdGgpIC8gMiksXHJcbiAgICAgICAgICAgIHRvcDogTWF0aC5mbG9vcigodGFyZ2V0SGVpZ2h0IC0gdGhpcy50YXJnZXRTaXplLmhlaWdodCkgLyAyKSxcclxuICAgICAgICAgICAgd2lkdGg6IHRoaXMudGFyZ2V0U2l6ZS53aWR0aCxcclxuICAgICAgICAgICAgaGVpZ2h0OiB0aGlzLnRhcmdldFNpemUuaGVpZ2h0XHJcbiAgICAgICAgfSkudG9CdWZmZXIoKSA6IHJlc2l6ZWQudG9CdWZmZXIoKSk7XHJcblxyXG4gICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlci53cml0ZVJlc3VsdChpc1RodW1iLCBidWZmZXIpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmhhbmRsZXIuc2VydmVSZXN1bHQoaXNUaHVtYik7XHJcbiAgICB9XHJcbn1cclxuIl19
@@ -0,0 +1,116 @@
1
+ import { __decorate } from "tslib";
2
+ import { injectable, Lifecycle, scoped } from "tsyringe";
3
+ import sharp_ from "sharp";
4
+ import { access, constants, lstat, readdir, readFile, writeFile } from "fs";
5
+ import { join, dirname } from "path";
6
+ import { mkdirRecursive } from "../utils";
7
+ const sharp = sharp_;
8
+ let Gallery = class Gallery {
9
+ constructor(config, galleryCache) {
10
+ this.config = config;
11
+ this.galleryCache = galleryCache;
12
+ this.cache = {};
13
+ this.dir = this.config.resolve("galleryDir");
14
+ this.output = join(this.config.resolve("cacheDir"), "gallery");
15
+ }
16
+ async getFolder(folder, size = null) {
17
+ this.cache[folder] = this.cache[folder] || new Promise(resolve => {
18
+ lstat(join(this.dir, folder), (err, stats) => {
19
+ if (err || !stats.isDirectory()) {
20
+ resolve([]);
21
+ return;
22
+ }
23
+ this.readRecursive(folder, "", size).then(resolve, () => resolve([]));
24
+ });
25
+ });
26
+ return this.cache[folder];
27
+ }
28
+ readRecursive(path, folder, size) {
29
+ return new Promise(resolve => {
30
+ readdir(join(this.dir, path), (err, files) => {
31
+ if (err) {
32
+ resolve([]);
33
+ return;
34
+ }
35
+ const promises = files.map(file => {
36
+ return new Promise(async (resolve) => {
37
+ const filePath = join(path, file);
38
+ const absoluteFilePath = join(this.dir, filePath);
39
+ lstat(absoluteFilePath, (err, stats) => {
40
+ if (err) {
41
+ resolve([]);
42
+ return;
43
+ }
44
+ if (stats.isDirectory()) {
45
+ this.readRecursive(filePath, join(folder, file), size).then(resolve);
46
+ return;
47
+ }
48
+ const sharpImg = sharp(absoluteFilePath);
49
+ sharpImg.rotate().metadata().then(() => {
50
+ const getResultPath = (isThumb) => {
51
+ return join(this.output, filePath.replace(/.([a-z|A-Z]+)$/gi, function (ext) {
52
+ const suffix = isThumb ? 'thumb' : 'big';
53
+ return `-${suffix}${ext}`;
54
+ }));
55
+ };
56
+ resolve([this.galleryCache.create(folder, size, {
57
+ getOriginal: () => {
58
+ return new Promise((res, rej) => {
59
+ readFile(absoluteFilePath, (err, data) => {
60
+ if (err) {
61
+ rej(err);
62
+ return;
63
+ }
64
+ res(data);
65
+ });
66
+ });
67
+ },
68
+ writeResult: (isThumb, buffer) => {
69
+ return new Promise(async (res, rej) => {
70
+ const resultPath = getResultPath(isThumb);
71
+ await mkdirRecursive(dirname(resultPath));
72
+ writeFile(resultPath, buffer, err => {
73
+ if (err) {
74
+ rej(err);
75
+ return;
76
+ }
77
+ res();
78
+ });
79
+ });
80
+ },
81
+ hasResult: (isThumb) => {
82
+ return new Promise(res => {
83
+ access(getResultPath(isThumb), constants.R_OK, err => {
84
+ res(!err);
85
+ });
86
+ });
87
+ },
88
+ serveResult: (isThumb) => {
89
+ return new Promise((res, rej) => {
90
+ readFile(getResultPath(isThumb), (err, data) => {
91
+ if (err) {
92
+ rej(err);
93
+ return;
94
+ }
95
+ res(data);
96
+ });
97
+ });
98
+ }
99
+ })]);
100
+ }, () => resolve([]));
101
+ });
102
+ });
103
+ });
104
+ Promise.all(promises).then(folders => {
105
+ resolve([].concat.apply([], folders));
106
+ });
107
+ });
108
+ });
109
+ }
110
+ };
111
+ Gallery = __decorate([
112
+ injectable(),
113
+ scoped(Lifecycle.ContainerScoped)
114
+ ], Gallery);
115
+ export { Gallery };
116
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FsbGVyeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9nYWxsZXJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDdkQsT0FBTyxNQUFNLE1BQU0sT0FBTyxDQUFDO0FBQzNCLE9BQU8sRUFBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBQyxNQUFNLElBQUksQ0FBQztBQUMxRSxPQUFPLEVBQUMsSUFBSSxFQUFFLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUluQyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBRXhDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQztBQUlkLElBQU0sT0FBTyxHQUFiLE1BQU0sT0FBTztJQU1oQixZQUFxQixNQUFxQixFQUFXLFlBQTBCO1FBQTFELFdBQU0sR0FBTixNQUFNLENBQWU7UUFBVyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMzRSxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNoQixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRCxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQWMsRUFBRSxPQUFxQixJQUFJO1FBQ3JELElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBa0IsT0FBTyxDQUFDLEVBQUU7WUFDOUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUN6QyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsRUFBRTtvQkFDN0IsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUNaLE9BQU87aUJBQ1Y7Z0JBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDMUUsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRVMsYUFBYSxDQUFDLElBQVksRUFBRSxNQUFjLEVBQUUsSUFBa0I7UUFDcEUsT0FBTyxJQUFJLE9BQU8sQ0FBa0IsT0FBTyxDQUFDLEVBQUU7WUFDMUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUN6QyxJQUFJLEdBQUcsRUFBRTtvQkFDTCxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ1osT0FBTztpQkFDVjtnQkFDRCxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO29CQUM5QixPQUFPLElBQUksT0FBTyxDQUFrQixLQUFLLEVBQUMsT0FBTyxFQUFDLEVBQUU7d0JBQ2hELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7d0JBQ2xDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7d0JBQ2xELEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRTs0QkFDbkMsSUFBSSxHQUFHLEVBQUU7Z0NBQ0wsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dDQUNaLE9BQU87NkJBQ1Y7NEJBQ0QsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLEVBQUU7Z0NBQ3JCLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dDQUNyRSxPQUFPOzZCQUNWOzRCQUNELE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDOzRCQUN6QyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtnQ0FDbkMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxPQUFPLEVBQUUsRUFBRTtvQ0FDOUIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLGtCQUFrQixFQUFFLFVBQVUsR0FBRzt3Q0FDdkUsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQzt3Q0FDekMsT0FBTyxJQUFJLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQztvQ0FDOUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQ0FDUixDQUFDLENBQUM7Z0NBQ0YsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRTt3Q0FDNUMsV0FBVyxFQUFFLEdBQUcsRUFBRTs0Q0FDZCxPQUFPLElBQUksT0FBTyxDQUFTLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFO2dEQUNwQyxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUU7b0RBQ3JDLElBQUksR0FBRyxFQUFFO3dEQUNMLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQzt3REFDVCxPQUFPO3FEQUNWO29EQUNELEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztnREFDZCxDQUFDLENBQUMsQ0FBQzs0Q0FDUCxDQUFDLENBQUMsQ0FBQzt3Q0FDUCxDQUFDO3dDQUNELFdBQVcsRUFBRSxDQUFDLE9BQWdCLEVBQUUsTUFBYyxFQUFFLEVBQUU7NENBQzlDLE9BQU8sSUFBSSxPQUFPLENBQU8sS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRTtnREFDeEMsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dEQUMxQyxNQUFNLGNBQWMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztnREFDMUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLEVBQUU7b0RBQ2hDLElBQUksR0FBRyxFQUFFO3dEQUNMLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQzt3REFDVCxPQUFPO3FEQUNWO29EQUNELEdBQUcsRUFBRSxDQUFDO2dEQUNWLENBQUMsQ0FBQyxDQUFDOzRDQUNQLENBQUMsQ0FBQyxDQUFDO3dDQUNQLENBQUM7d0NBQ0QsU0FBUyxFQUFFLENBQUMsT0FBZ0IsRUFBRSxFQUFFOzRDQUM1QixPQUFPLElBQUksT0FBTyxDQUFVLEdBQUcsQ0FBQyxFQUFFO2dEQUM5QixNQUFNLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxFQUFFLFNBQVMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUU7b0RBQ2pELEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dEQUNkLENBQUMsQ0FBQyxDQUFDOzRDQUNQLENBQUMsQ0FBQyxDQUFDO3dDQUNQLENBQUM7d0NBQ0QsV0FBVyxFQUFFLENBQUMsT0FBZ0IsRUFBRSxFQUFFOzRDQUM5QixPQUFPLElBQUksT0FBTyxDQUFTLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFO2dEQUNwQyxRQUFRLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFO29EQUMzQyxJQUFJLEdBQUcsRUFBRTt3REFDTCxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7d0RBQ1QsT0FBTztxREFDVjtvREFDRCxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Z0RBQ2QsQ0FBQyxDQUFDLENBQUM7NENBQ1AsQ0FBQyxDQUFDLENBQUM7d0NBQ1AsQ0FBQztxQ0FDSixDQUFDLENBQUMsQ0FBQyxDQUFDOzRCQUNULENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzt3QkFDMUIsQ0FBQyxDQUFDLENBQUM7b0JBQ1AsQ0FBQyxDQUFDLENBQUM7Z0JBQ1AsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUU7b0JBQ2pDLE9BQU8sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztnQkFDMUMsQ0FBQyxDQUFDLENBQUM7WUFDUCxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztDQUNKLENBQUE7QUEzR1ksT0FBTztJQUZuQixVQUFVLEVBQUU7SUFDWixNQUFNLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQztHQUNyQixPQUFPLENBMkduQjtTQTNHWSxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtpbmplY3RhYmxlLCBMaWZlY3ljbGUsIHNjb3BlZH0gZnJvbSBcInRzeXJpbmdlXCI7XHJcbmltcG9ydCBzaGFycF8gZnJvbSBcInNoYXJwXCI7XHJcbmltcG9ydCB7YWNjZXNzLCBjb25zdGFudHMsIGxzdGF0LCByZWFkZGlyLCByZWFkRmlsZSwgd3JpdGVGaWxlfSBmcm9tIFwiZnNcIjtcclxuaW1wb3J0IHtqb2luLCBkaXJuYW1lfSBmcm9tIFwicGF0aFwiO1xyXG5pbXBvcnQge0lHYWxsZXJ5SW1hZ2UsIElHYWxsZXJ5U2l6ZX0gZnJvbSBcIi4uL2NvbW1vbi10eXBlc1wiO1xyXG5pbXBvcnQge0NvbmZpZ3VyYXRpb259IGZyb20gXCIuL2NvbmZpZ3VyYXRpb25cIjtcclxuaW1wb3J0IHtHYWxsZXJ5Q2FjaGV9IGZyb20gXCIuL2dhbGxlcnktY2FjaGVcIjtcclxuaW1wb3J0IHtta2RpclJlY3Vyc2l2ZX0gZnJvbSBcIi4uL3V0aWxzXCI7XHJcblxyXG5jb25zdCBzaGFycCA9IHNoYXJwXztcclxuXHJcbkBpbmplY3RhYmxlKClcclxuQHNjb3BlZChMaWZlY3ljbGUuQ29udGFpbmVyU2NvcGVkKVxyXG5leHBvcnQgY2xhc3MgR2FsbGVyeSB7XHJcblxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBkaXI6IHN0cmluZztcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgb3V0cHV0OiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNhY2hlOiB7IFtmb2xkZXI6IHN0cmluZ106IFByb21pc2U8SUdhbGxlcnlJbWFnZVtdPiB9O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHJlYWRvbmx5IGNvbmZpZzogQ29uZmlndXJhdGlvbiwgcmVhZG9ubHkgZ2FsbGVyeUNhY2hlOiBHYWxsZXJ5Q2FjaGUpIHtcclxuICAgICAgICB0aGlzLmNhY2hlID0ge307XHJcbiAgICAgICAgdGhpcy5kaXIgPSB0aGlzLmNvbmZpZy5yZXNvbHZlKFwiZ2FsbGVyeURpclwiKTtcclxuICAgICAgICB0aGlzLm91dHB1dCA9IGpvaW4odGhpcy5jb25maWcucmVzb2x2ZShcImNhY2hlRGlyXCIpLCBcImdhbGxlcnlcIik7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0Rm9sZGVyKGZvbGRlcjogc3RyaW5nLCBzaXplOiBJR2FsbGVyeVNpemUgPSBudWxsKTogUHJvbWlzZTxJR2FsbGVyeUltYWdlW10+IHtcclxuICAgICAgICB0aGlzLmNhY2hlW2ZvbGRlcl0gPSB0aGlzLmNhY2hlW2ZvbGRlcl0gfHwgbmV3IFByb21pc2U8SUdhbGxlcnlJbWFnZVtdPihyZXNvbHZlID0+IHtcclxuICAgICAgICAgICAgbHN0YXQoam9pbih0aGlzLmRpciwgZm9sZGVyKSwgKGVyciwgc3RhdHMpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChlcnIgfHwgIXN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKFtdKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlYWRSZWN1cnNpdmUoZm9sZGVyLCBcIlwiLCBzaXplKS50aGVuKHJlc29sdmUsICgpID0+IHJlc29sdmUoW10pKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGVbZm9sZGVyXTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgcmVhZFJlY3Vyc2l2ZShwYXRoOiBzdHJpbmcsIGZvbGRlcjogc3RyaW5nLCBzaXplOiBJR2FsbGVyeVNpemUpOiBQcm9taXNlPElHYWxsZXJ5SW1hZ2VbXT4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxJR2FsbGVyeUltYWdlW10+KHJlc29sdmUgPT4ge1xyXG4gICAgICAgICAgICByZWFkZGlyKGpvaW4odGhpcy5kaXIsIHBhdGgpLCAoZXJyLCBmaWxlcykgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoW10pO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IHByb21pc2VzID0gZmlsZXMubWFwKGZpbGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxJR2FsbGVyeUltYWdlW10+KGFzeW5jIHJlc29sdmUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWxlUGF0aCA9IGpvaW4ocGF0aCwgZmlsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFic29sdXRlRmlsZVBhdGggPSBqb2luKHRoaXMuZGlyLCBmaWxlUGF0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxzdGF0KGFic29sdXRlRmlsZVBhdGgsIChlcnIsIHN0YXRzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShbXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlYWRSZWN1cnNpdmUoZmlsZVBhdGgsIGpvaW4oZm9sZGVyLCBmaWxlKSwgc2l6ZSkudGhlbihyZXNvbHZlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaGFycEltZyA9IHNoYXJwKGFic29sdXRlRmlsZVBhdGgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcnBJbWcucm90YXRlKCkubWV0YWRhdGEoKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnZXRSZXN1bHRQYXRoID0gKGlzVGh1bWIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpvaW4odGhpcy5vdXRwdXQsIGZpbGVQYXRoLnJlcGxhY2UoLy4oW2EtenxBLVpdKykkL2dpLCBmdW5jdGlvbiAoZXh0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdWZmaXggPSBpc1RodW1iID8gJ3RodW1iJyA6ICdiaWcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAtJHtzdWZmaXh9JHtleHR9YDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShbdGhpcy5nYWxsZXJ5Q2FjaGUuY3JlYXRlKGZvbGRlciwgc2l6ZSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRPcmlnaW5hbDogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPEJ1ZmZlcj4oKHJlcywgcmVqKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZEZpbGUoYWJzb2x1dGVGaWxlUGF0aCwgKGVyciwgZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWooZXJyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXMoZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVSZXN1bHQ6IChpc1RodW1iOiBib29sZWFuLCBidWZmZXI6IEJ1ZmZlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KGFzeW5jIChyZXMsIHJlaikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdFBhdGggPSBnZXRSZXN1bHRQYXRoKGlzVGh1bWIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IG1rZGlyUmVjdXJzaXZlKGRpcm5hbWUocmVzdWx0UGF0aCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZShyZXN1bHRQYXRoLCBidWZmZXIsIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaihlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc1Jlc3VsdDogKGlzVGh1bWI6IGJvb2xlYW4pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxib29sZWFuPihyZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VzcyhnZXRSZXN1bHRQYXRoKGlzVGh1bWIpLCBjb25zdGFudHMuUl9PSywgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzKCFlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlUmVzdWx0OiAoaXNUaHVtYjogYm9vbGVhbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPEJ1ZmZlcj4oKHJlcywgcmVqKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZEZpbGUoZ2V0UmVzdWx0UGF0aChpc1RodW1iKSwgKGVyciwgZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWooZXJyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXMoZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAoKSA9PiByZXNvbHZlKFtdKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbihmb2xkZXJzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKFtdLmNvbmNhdC5hcHBseShbXSwgZm9sZGVycykpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,42 @@
1
+ import { __decorate } from "tslib";
2
+ import { injectable, Lifecycle, scoped } from "tsyringe";
3
+ import { rand } from "../utils";
4
+ let IdGenerator = class IdGenerator {
5
+ constructor(config) {
6
+ this.config = config;
7
+ this.prefix = config.resolve("idPrefix");
8
+ this.separator = config.resolve("idSeparator");
9
+ this.chars = config.resolve("idChars");
10
+ this.parts = config.resolve("idParts");
11
+ }
12
+ async generate(checkCb) {
13
+ let id = null;
14
+ let tries = 0;
15
+ let notGood = true;
16
+ while (notGood && tries < 5) {
17
+ id = this.generateId();
18
+ notGood = await checkCb(id);
19
+ tries++;
20
+ }
21
+ if (notGood) {
22
+ throw `Couldn't generate an unique id..`;
23
+ }
24
+ return id;
25
+ }
26
+ generateId() {
27
+ return this.prefix + this.parts.map(num => {
28
+ let s = "";
29
+ for (let i = 0; i < num; i++) {
30
+ const ix = rand(0, this.chars.length - 1);
31
+ s += this.chars[ix];
32
+ }
33
+ return s;
34
+ }).join(this.separator);
35
+ }
36
+ };
37
+ IdGenerator = __decorate([
38
+ injectable(),
39
+ scoped(Lifecycle.ContainerScoped)
40
+ ], IdGenerator);
41
+ export { IdGenerator };
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWQtZ2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL2lkLWdlbmVyYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBRXZELE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFJdkIsSUFBTSxXQUFXLEdBQWpCLE1BQU0sV0FBVztJQU9wQixZQUFxQixNQUFxQjtRQUFyQixXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQ3RDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUF5QztRQUNwRCxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFDZCxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDZCxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxPQUFPLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRTtZQUN6QixFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sR0FBRyxNQUFNLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM1QixLQUFLLEVBQUUsQ0FBQztTQUNYO1FBQ0QsSUFBSSxPQUFPLEVBQUU7WUFDVCxNQUFNLGtDQUFrQyxDQUFDO1NBQzVDO1FBQ0QsT0FBTyxFQUFFLENBQUM7SUFDZCxDQUFDO0lBRU8sVUFBVTtRQUNkLE9BQU8sSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUN0QyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDWCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUMxQixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUMxQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUN2QjtZQUNELE9BQU8sQ0FBQyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM1QixDQUFDO0NBQ0osQ0FBQTtBQXZDWSxXQUFXO0lBRnZCLFVBQVUsRUFBRTtJQUNaLE1BQU0sQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDO0dBQ3JCLFdBQVcsQ0F1Q3ZCO1NBdkNZLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2luamVjdGFibGUsIExpZmVjeWNsZSwgc2NvcGVkfSBmcm9tIFwidHN5cmluZ2VcIjtcclxuaW1wb3J0IHtDb25maWd1cmF0aW9ufSBmcm9tIFwiLi9jb25maWd1cmF0aW9uXCI7XHJcbmltcG9ydCB7cmFuZH0gZnJvbSBcIi4uL3V0aWxzXCI7XHJcblxyXG5AaW5qZWN0YWJsZSgpXHJcbkBzY29wZWQoTGlmZWN5Y2xlLkNvbnRhaW5lclNjb3BlZClcclxuZXhwb3J0IGNsYXNzIElkR2VuZXJhdG9yIHtcclxuXHJcbiAgICBwcm90ZWN0ZWQgcHJlZml4OiBzdHJpbmc7XHJcbiAgICBwcm90ZWN0ZWQgc2VwYXJhdG9yOiBzdHJpbmc7XHJcbiAgICBwcm90ZWN0ZWQgY2hhcnM6IHN0cmluZztcclxuICAgIHByb3RlY3RlZCBwYXJ0czogbnVtYmVyW107XHJcblxyXG4gICAgY29uc3RydWN0b3IocmVhZG9ubHkgY29uZmlnOiBDb25maWd1cmF0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5wcmVmaXggPSBjb25maWcucmVzb2x2ZShcImlkUHJlZml4XCIpO1xyXG4gICAgICAgIHRoaXMuc2VwYXJhdG9yID0gY29uZmlnLnJlc29sdmUoXCJpZFNlcGFyYXRvclwiKTtcclxuICAgICAgICB0aGlzLmNoYXJzID0gY29uZmlnLnJlc29sdmUoXCJpZENoYXJzXCIpO1xyXG4gICAgICAgIHRoaXMucGFydHMgPSBjb25maWcucmVzb2x2ZShcImlkUGFydHNcIik7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2VuZXJhdGUoY2hlY2tDYjogKGlkOiBzdHJpbmcpID0+IFByb21pc2U8Ym9vbGVhbj4pOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgICAgIGxldCBpZCA9IG51bGw7XHJcbiAgICAgICAgbGV0IHRyaWVzID0gMDtcclxuICAgICAgICBsZXQgbm90R29vZCA9IHRydWU7XHJcbiAgICAgICAgd2hpbGUgKG5vdEdvb2QgJiYgdHJpZXMgPCA1KSB7XHJcbiAgICAgICAgICAgIGlkID0gdGhpcy5nZW5lcmF0ZUlkKCk7XHJcbiAgICAgICAgICAgIG5vdEdvb2QgPSBhd2FpdCBjaGVja0NiKGlkKTtcclxuICAgICAgICAgICAgdHJpZXMrKztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5vdEdvb2QpIHtcclxuICAgICAgICAgICAgdGhyb3cgYENvdWxkbid0IGdlbmVyYXRlIGFuIHVuaXF1ZSBpZC4uYDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGlkO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2VuZXJhdGVJZCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByZWZpeCArIHRoaXMucGFydHMubWFwKG51bSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBzID0gXCJcIjtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW07IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaXggPSByYW5kKDAsIHRoaXMuY2hhcnMubGVuZ3RoIC0gMSk7XHJcbiAgICAgICAgICAgICAgICBzICs9IHRoaXMuY2hhcnNbaXhdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBzO1xyXG4gICAgICAgIH0pLmpvaW4odGhpcy5zZXBhcmF0b3IpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==