@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
@@ -1,213 +0,0 @@
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 { BaseEntity } from "./base-entity";
11
- export class Progress extends BaseEntity {
12
- constructor(id, data, collection) {
13
- super(id, data, collection);
14
- }
15
- get current() {
16
- return this.data.current;
17
- }
18
- get max() {
19
- return this.data.max;
20
- }
21
- get message() {
22
- return this.data.message;
23
- }
24
- get error() {
25
- return this.data.error;
26
- }
27
- get canceled() {
28
- return this.data.canceled;
29
- }
30
- get percent() {
31
- return this.max > 0 ? Math.round(this.current / this.max * 100) : 0;
32
- }
33
- get remaining() {
34
- return this.max > 0 ? this.max - this.current : 0;
35
- }
36
- setMessageBridge(messageBridge) {
37
- this.messageBridge = messageBridge || this.messageBridge;
38
- return this;
39
- }
40
- createSubProgress(progressValue, max, message) {
41
- return __awaiter(this, void 0, void 0, function* () {
42
- if (max <= 0 && progressValue > 0) {
43
- yield this.advance(progressValue);
44
- }
45
- if (message !== null) {
46
- this.data.message = message;
47
- yield this.save();
48
- }
49
- return new SubProgress(this, this.current, progressValue, Math.max(max, 1));
50
- });
51
- }
52
- setMax(max) {
53
- return __awaiter(this, void 0, void 0, function* () {
54
- if (isNaN(max) || max <= 0) {
55
- throw "Max progress value must be bigger than zero";
56
- }
57
- this.data.max = max;
58
- yield this.save();
59
- });
60
- }
61
- setMessage(message) {
62
- return __awaiter(this, void 0, void 0, function* () {
63
- this.data.message = message;
64
- yield this.save();
65
- });
66
- }
67
- setError(error) {
68
- return __awaiter(this, void 0, void 0, function* () {
69
- this.data.error = error;
70
- yield this.save();
71
- });
72
- }
73
- advance(value = 1) {
74
- return __awaiter(this, void 0, void 0, function* () {
75
- if (isNaN(value) || value <= 0) {
76
- throw new Error(`Advance value must be bigger than zero: ${this.id}`);
77
- }
78
- yield this.load();
79
- if (this.deleted || this.canceled) {
80
- const status = this.deleted ? "deleted" : "canceled";
81
- throw new Error(`Can't advance ${status} progress: ${this.id}`);
82
- }
83
- this.data.current = Math.min(this.max, this.current + value);
84
- yield this.save();
85
- });
86
- }
87
- cancel() {
88
- return __awaiter(this, void 0, void 0, function* () {
89
- this.data.canceled = true;
90
- yield this.save();
91
- });
92
- }
93
- save() {
94
- if (this.messageBridge) {
95
- this.messageBridge.sendMessage(`progress-changed`, this.toJSON());
96
- }
97
- return super.save();
98
- }
99
- }
100
- export class SubProgress {
101
- constructor(parent, progressFrom, progressValue, mMax = 100) {
102
- this.parent = parent;
103
- this.progressFrom = progressFrom;
104
- this.progressValue = progressValue;
105
- this.mMax = mMax;
106
- if (progressFrom < 0) {
107
- throw "Progress from must be bigger than or zero";
108
- }
109
- if (progressValue <= 0) {
110
- throw "Progress value must be bigger than zero";
111
- }
112
- this.mCurrent = 0;
113
- }
114
- get id() {
115
- return this.parent.id;
116
- }
117
- get current() {
118
- return this.mCurrent;
119
- }
120
- get max() {
121
- return this.mMax;
122
- }
123
- get message() {
124
- return this.parent.message;
125
- }
126
- get error() {
127
- return this.parent.error;
128
- }
129
- get percent() {
130
- return this.parent.percent;
131
- }
132
- get remaining() {
133
- return this.max - this.mCurrent;
134
- }
135
- get canceled() {
136
- return !this.parent || this.parent.canceled;
137
- }
138
- setMessageBridge(messageBridge) {
139
- if (!this.parent)
140
- return this;
141
- this.parent.setMessageBridge(messageBridge);
142
- return this;
143
- }
144
- createSubProgress(progressValue, max, message) {
145
- return __awaiter(this, void 0, void 0, function* () {
146
- if (max <= 0 && progressValue > 0) {
147
- yield this.advance(progressValue);
148
- }
149
- if (message !== null) {
150
- yield this.setMessage(message);
151
- }
152
- return new SubProgress(this, this.current, progressValue, Math.max(max, 1));
153
- });
154
- }
155
- setMax(max) {
156
- return __awaiter(this, void 0, void 0, function* () {
157
- if (isNaN(max) || max <= 0) {
158
- throw "Max progress value must be bigger than zero";
159
- }
160
- this.mMax = max;
161
- yield this.save();
162
- });
163
- }
164
- setMessage(message) {
165
- return __awaiter(this, void 0, void 0, function* () {
166
- if (!this.parent)
167
- return null;
168
- yield this.parent.setMessage(message);
169
- });
170
- }
171
- setError(error) {
172
- return __awaiter(this, void 0, void 0, function* () {
173
- if (!this.parent)
174
- return null;
175
- yield this.parent.setError(error);
176
- });
177
- }
178
- advance(value = 1) {
179
- return __awaiter(this, void 0, void 0, function* () {
180
- if (isNaN(value) || value <= 0) {
181
- throw "Advance value must be bigger than zero";
182
- }
183
- this.mCurrent = Math.min(this.max, this.mCurrent + value);
184
- yield this.save();
185
- });
186
- }
187
- cancel() {
188
- return __awaiter(this, void 0, void 0, function* () {
189
- if (!this.parent)
190
- return null;
191
- yield this.parent.cancel();
192
- });
193
- }
194
- save() {
195
- return __awaiter(this, void 0, void 0, function* () {
196
- const ratio = this.max > 0 ? this.mCurrent / this.max : 0;
197
- const newProgress = this.progressFrom + Math.round(this.progressValue * ratio);
198
- const current = this.parent.current;
199
- if (newProgress <= current)
200
- return null;
201
- yield this.parent.advance(newProgress);
202
- });
203
- }
204
- load() {
205
- return __awaiter(this, void 0, void 0, function* () {
206
- return null;
207
- });
208
- }
209
- toJSON() {
210
- return this.parent.toJSON();
211
- }
212
- }
213
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc2VydmljZXMvZW50aXRpZXMvcHJvZ3Jlc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBR0EsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUV6QyxNQUFNLE9BQU8sUUFBUyxTQUFRLFVBQXFCO0lBZ0MvQyxZQUFZLEVBQVksRUFDWixJQUF3QixFQUN4QixVQUFzQjtRQUM5QixLQUFLLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBaENELElBQUksT0FBTztRQUNQLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQUksR0FBRztRQUNILE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDekIsQ0FBQztJQUVELElBQUksT0FBTztRQUNQLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQUksS0FBSztRQUNMLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDM0IsQ0FBQztJQUVELElBQUksUUFBUTtRQUNSLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDOUIsQ0FBQztJQUVELElBQUksT0FBTztRQUNQLE9BQU8sSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVELElBQUksU0FBUztRQUNULE9BQU8sSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEdB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QyxXQUFXLENBQUMsQ0FBQTtRQUMxQyxDQUFDO0tBQUE7SUFFSyxJQUFJOztZQUNOLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7S0FBQTtJQUVELE1BQU07UUFDRixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDaEMsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtPYmplY3RJZH0gZnJvbSBcImJzb25cIjtcclxuaW1wb3J0IHtDb2xsZWN0aW9ufSBmcm9tIFwibW9uZ29kYlwiO1xyXG5pbXBvcnQge0lNZXNzYWdlQnJpZGdlLCBJUHJvZ3Jlc3N9IGZyb20gXCIuLi8uLi9jb21tb24tdHlwZXNcIjtcclxuaW1wb3J0IHtCYXNlRW50aXR5fSBmcm9tIFwiLi9iYXNlLWVudGl0eVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFByb2dyZXNzIGV4dGVuZHMgQmFzZUVudGl0eTxJUHJvZ3Jlc3M+IGltcGxlbWVudHMgSVByb2dyZXNzIHtcclxuXHJcbiAgICBwcm90ZWN0ZWQgbWVzc2FnZUJyaWRnZTogSU1lc3NhZ2VCcmlkZ2U7XHJcblxyXG4gICAgZ2V0IGN1cnJlbnQoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLmN1cnJlbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IG1heCgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEubWF4O1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBtZXNzYWdlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5tZXNzYWdlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBlcnJvcigpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEuZXJyb3I7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGNhbmNlbGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEuY2FuY2VsZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHBlcmNlbnQoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5tYXggPiAwID8gTWF0aC5yb3VuZCh0aGlzLmN1cnJlbnQgLyB0aGlzLm1heCAqIDEwMCkgOiAwO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCByZW1haW5pbmcoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5tYXggPiAwID8gdGhpcy5tYXggLSB0aGlzLmN1cnJlbnQgOiAwO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKGlkOiBPYmplY3RJZCxcclxuICAgICAgICAgICAgICAgIGRhdGE6IFBhcnRpYWw8SVByb2dyZXNzPixcclxuICAgICAgICAgICAgICAgIGNvbGxlY3Rpb246IENvbGxlY3Rpb24pIHtcclxuICAgICAgICBzdXBlcihpZCwgZGF0YSwgY29sbGVjdGlvbik7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0TWVzc2FnZUJyaWRnZShtZXNzYWdlQnJpZGdlOiBJTWVzc2FnZUJyaWRnZSk6IHRoaXMge1xyXG4gICAgICAgIHRoaXMubWVzc2FnZUJyaWRnZSA9IG1lc3NhZ2VCcmlkZ2UgfHwgdGhpcy5tZXNzYWdlQnJpZGdlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGNyZWF0ZVN1YlByb2dyZXNzKHByb2dyZXNzVmFsdWU6IG51bWJlciwgbWF4PzogbnVtYmVyLCBtZXNzYWdlPzogc3RyaW5nKTogUHJvbWlzZTxJUHJvZ3Jlc3M+IHtcclxuICAgICAgICBpZiAobWF4IDw9IDAgJiYgcHJvZ3Jlc3NWYWx1ZSA+IDApIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5hZHZhbmNlKHByb2dyZXNzVmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWVzc2FnZSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLmRhdGEubWVzc2FnZSA9IG1lc3NhZ2U7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuc2F2ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV3IFN1YlByb2dyZXNzKHRoaXMsIHRoaXMuY3VycmVudCwgcHJvZ3Jlc3NWYWx1ZSwgTWF0aC5tYXgobWF4LCAxKSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc2V0TWF4KG1heDogbnVtYmVyKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICBpZiAoaXNOYU4obWF4KSB8fCBtYXggPD0gMCkge1xyXG4gICAgICAgICAgICB0aHJvdyBcIk1heCBwcm9ncmVzcyB2YWx1ZSBtdXN0IGJlIGJpZ2dlciB0aGFuIHplcm9cIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5kYXRhLm1heCA9IG1heDtcclxuICAgICAgICBhd2FpdCB0aGlzLnNhdmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBzZXRNZXNzYWdlKG1lc3NhZ2U6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgdGhpcy5kYXRhLm1lc3NhZ2UgPSBtZXNzYWdlO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuc2F2ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHNldEVycm9yKGVycm9yOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHRoaXMuZGF0YS5lcnJvciA9IGVycm9yO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuc2F2ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGFkdmFuY2UodmFsdWU6IG51bWJlciA9IDEpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIGlmIChpc05hTih2YWx1ZSkgfHwgdmFsdWUgPD0gMCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFkdmFuY2UgdmFsdWUgbXVzdCBiZSBiaWdnZXIgdGhhbiB6ZXJvOiAke3RoaXMuaWR9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGF3YWl0IHRoaXMubG9hZCgpO1xyXG4gICAgICAgIGlmICh0aGlzLmRlbGV0ZWQgfHwgdGhpcy5jYW5jZWxlZCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGF0dXMgPSB0aGlzLmRlbGV0ZWQgPyBcImRlbGV0ZWRcIiA6IFwiY2FuY2VsZWRcIjtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW4ndCBhZHZhbmNlICR7c3RhdHVzfSBwcm9ncmVzczogJHt0aGlzLmlkfWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmRhdGEuY3VycmVudCA9IE1hdGgubWluKHRoaXMubWF4LCB0aGlzLmN1cnJlbnQgKyB2YWx1ZSk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5zYXZlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY2FuY2VsKCk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgdGhpcy5kYXRhLmNhbmNlbGVkID0gdHJ1ZTtcclxuICAgICAgICBhd2FpdCB0aGlzLnNhdmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBzYXZlKCk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgaWYgKHRoaXMubWVzc2FnZUJyaWRnZSkge1xyXG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VCcmlkZ2Uuc2VuZE1lc3NhZ2UoYHByb2dyZXNzLWNoYW5nZWRgLCB0aGlzLnRvSlNPTigpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHN1cGVyLnNhdmUoKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFN1YlByb2dyZXNzIGltcGxlbWVudHMgSVByb2dyZXNzIHtcclxuXHJcbiAgICBnZXQgaWQoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQuaWQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGN1cnJlbnQoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5tQ3VycmVudDtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbWF4KCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubU1heDtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbWVzc2FnZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudC5tZXNzYWdlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBlcnJvcigpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudC5lcnJvcjtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgcGVyY2VudCgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudC5wZXJjZW50O1xyXG4gICAgfVxyXG5cclxuICAgIGdldCByZW1haW5pbmcoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5tYXggLSB0aGlzLm1DdXJyZW50O1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBjYW5jZWxlZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gIXRoaXMucGFyZW50IHx8IHRoaXMucGFyZW50LmNhbmNlbGVkO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBtQ3VycmVudDogbnVtYmVyO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBwYXJlbnQ6IElQcm9ncmVzcywgcHJvdGVjdGVkIHByb2dyZXNzRnJvbTogbnVtYmVyLCBwcm90ZWN0ZWQgcHJvZ3Jlc3NWYWx1ZTogbnVtYmVyLCBwcm90ZWN0ZWQgbU1heDogbnVtYmVyID0gMTAwKSB7XHJcbiAgICAgICAgaWYgKHByb2dyZXNzRnJvbSA8IDApIHtcclxuICAgICAgICAgICAgdGhyb3cgXCJQcm9ncmVzcyBmcm9tIG11c3QgYmUgYmlnZ2VyIHRoYW4gb3IgemVyb1wiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocHJvZ3Jlc3NWYWx1ZSA8PSAwKSB7XHJcbiAgICAgICAgICAgIHRocm93IFwiUHJvZ3Jlc3MgdmFsdWUgbXVzdCBiZSBiaWdnZXIgdGhhbiB6ZXJvXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubUN1cnJlbnQgPSAwO1xyXG4gICAgfVxyXG5cclxuICAgIHNldE1lc3NhZ2VCcmlkZ2UobWVzc2FnZUJyaWRnZTogSU1lc3NhZ2VCcmlkZ2UpOiB0aGlzIHtcclxuICAgICAgICBpZiAoIXRoaXMucGFyZW50KSByZXR1cm4gdGhpcztcclxuICAgICAgICB0aGlzLnBhcmVudC5zZXRNZXNzYWdlQnJpZGdlKG1lc3NhZ2VCcmlkZ2UpO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGNyZWF0ZVN1YlByb2dyZXNzKHByb2dyZXNzVmFsdWU6IG51bWJlciwgbWF4PzogbnVtYmVyLCBtZXNzYWdlPzogc3RyaW5nKTogUHJvbWlzZTxJUHJvZ3Jlc3M+IHtcclxuICAgICAgICBpZiAobWF4IDw9IDAgJiYgcHJvZ3Jlc3NWYWx1ZSA+IDApIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5hZHZhbmNlKHByb2dyZXNzVmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWVzc2FnZSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnNldE1lc3NhZ2UobWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXcgU3ViUHJvZ3Jlc3ModGhpcywgdGhpcy5jdXJyZW50LCBwcm9ncmVzc1ZhbHVlLCBNYXRoLm1heChtYXgsIDEpKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBzZXRNYXgobWF4OiBudW1iZXIpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIGlmIChpc05hTihtYXgpIHx8IG1heCA8PSAwKSB7XHJcbiAgICAgICAgICAgIHRocm93IFwiTWF4IHByb2dyZXNzIHZhbHVlIG11c3QgYmUgYmlnZ2VyIHRoYW4gemVyb1wiO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm1NYXggPSBtYXg7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5zYXZlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc2V0TWVzc2FnZShtZXNzYWdlOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIGlmICghdGhpcy5wYXJlbnQpIHJldHVybiBudWxsO1xyXG4gICAgICAgIGF3YWl0IHRoaXMucGFyZW50LnNldE1lc3NhZ2UobWVzc2FnZSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc2V0RXJyb3IoZXJyb3I6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnBhcmVudCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5wYXJlbnQuc2V0RXJyb3IoZXJyb3IpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGFkdmFuY2UodmFsdWU6IG51bWJlciA9IDEpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIGlmIChpc05hTih2YWx1ZSkgfHwgdmFsdWUgPD0gMCkge1xyXG4gICAgICAgICAgICB0aHJvdyBcIkFkdmFuY2UgdmFsdWUgbXVzdCBiZSBiaWdnZXIgdGhhbiB6ZXJvXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubUN1cnJlbnQgPSBNYXRoLm1pbih0aGlzLm1heCwgdGhpcy5tQ3VycmVudCArIHZhbHVlKTtcclxuICAgICAgICBhd2FpdCB0aGlzLnNhdmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjYW5jZWwoKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICBpZiAoIXRoaXMucGFyZW50KSByZXR1cm4gbnVsbDtcclxuICAgICAgICBhd2FpdCB0aGlzLnBhcmVudC5jYW5jZWwoKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBzYXZlKCk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgY29uc3QgcmF0aW8gPSB0aGlzLm1heCA+IDAgPyB0aGlzLm1DdXJyZW50IC8gdGhpcy5tYXggOiAwO1xyXG4gICAgICAgIGNvbnN0IG5ld1Byb2dyZXNzID0gdGhpcy5wcm9ncmVzc0Zyb20gKyBNYXRoLnJvdW5kKHRoaXMucHJvZ3Jlc3NWYWx1ZSAqIHJhdGlvKTtcclxuICAgICAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5wYXJlbnQuY3VycmVudDtcclxuICAgICAgICBpZiAobmV3UHJvZ3Jlc3MgPD0gY3VycmVudCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5wYXJlbnQuYWR2YW5jZShuZXdQcm9ncmVzcylcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBsb2FkKCk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgdG9KU09OKCk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50LnRvSlNPTigpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
@@ -1,64 +0,0 @@
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 { ObjectId } from "bson";
11
- import { bufferToStream, toImage } from "../../utils";
12
- export class TempAsset {
13
- constructor(buffer, filename, contentType, metadata) {
14
- this.buffer = buffer;
15
- this.filename = filename;
16
- this.contentType = contentType;
17
- this.metadata = metadata;
18
- this.id = new ObjectId().toHexString();
19
- }
20
- get stream() {
21
- return bufferToStream(this.buffer);
22
- }
23
- unlink() {
24
- return __awaiter(this, void 0, void 0, function* () {
25
- throw new Error(`Temp asset '${this.id}' can not be removed!`);
26
- });
27
- }
28
- getBuffer() {
29
- return __awaiter(this, void 0, void 0, function* () {
30
- return this.buffer;
31
- });
32
- }
33
- download(metadata) {
34
- return __awaiter(this, void 0, void 0, function* () {
35
- return this.stream;
36
- });
37
- }
38
- downloadImage(params, metadata) {
39
- Object.assign(this.metadata, metadata || {});
40
- return toImage(this.stream, params, this.metadata);
41
- }
42
- getImage(params) {
43
- return this.downloadImage(params);
44
- }
45
- save() {
46
- return __awaiter(this, void 0, void 0, function* () {
47
- return this;
48
- });
49
- }
50
- load() {
51
- return __awaiter(this, void 0, void 0, function* () {
52
- return this;
53
- });
54
- }
55
- toJSON() {
56
- return {
57
- id: this.id,
58
- filename: this.filename,
59
- contentType: this.contentType,
60
- metadata: this.metadata
61
- };
62
- }
63
- }
64
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcC1hc3NldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9lbnRpdGllcy90ZW1wLWFzc2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUNBLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFOUIsT0FBTyxFQUFDLGNBQWMsRUFBRSxPQUFPLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFcEQsTUFBTSxPQUFPLFNBQVM7SUFRbEIsWUFBc0IsTUFBYyxFQUFXLFFBQWdCLEVBQVcsV0FBbUIsRUFBVyxRQUFvQjtRQUF0RyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQVcsYUFBUSxHQUFSLFFBQVEsQ0FBUTtRQUFXLGdCQUFXLEdBQVgsV0FBVyxDQUFRO1FBQVcsYUFBUSxHQUFSLFFBQVEsQ0FBWTtRQUN4SCxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDM0MsQ0FBQztJQU5ELElBQUksTUFBTTtRQUNOLE9BQU8sY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBTUssTUFBTTs7WUFDUixNQUFNLElBQUksS0FBSyxDQUFDLGVBQWUsSUFBSSxDQUFDLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztRQUNuRSxDQUFDO0tBQUE7SUFFSyxTQUFTOztZQUNYLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUN2QixDQUFDO0tBQUE7SUFFSyxRQUFRLENBQUMsUUFBcUI7O1lBQ2hDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUN2QixDQUFDO0tBQUE7SUFFRCxhQUFhLENBQUMsTUFBMEIsRUFBRSxRQUFxQjtRQUMzRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzdDLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsUUFBUSxDQUFDLE1BQTBCO1FBQy9CLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUssSUFBSTs7WUFDTixPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO0tBQUE7SUFFSyxJQUFJOztZQUNOLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7S0FBQTtJQUVELE1BQU07UUFDRixPQUFPO1lBQ0gsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ1gsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3ZCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztZQUM3QixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7U0FDMUIsQ0FBQztJQUNOLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7UmVhZGFibGV9IGZyb20gXCJzdHJlYW1cIjtcclxuaW1wb3J0IHtPYmplY3RJZH0gZnJvbSBcImJzb25cIjtcclxuaW1wb3J0IHtJQXNzZXQsIElBc3NldEltYWdlUGFyYW1zLCBJQXNzZXRNZXRhfSBmcm9tIFwiLi4vLi4vY29tbW9uLXR5cGVzXCI7XHJcbmltcG9ydCB7YnVmZmVyVG9TdHJlYW0sIHRvSW1hZ2V9IGZyb20gXCIuLi8uLi91dGlsc1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFRlbXBBc3NldCBpbXBsZW1lbnRzIElBc3NldCB7XHJcblxyXG4gICAgcmVhZG9ubHkgaWQ6IHN0cmluZztcclxuXHJcbiAgICBnZXQgc3RyZWFtKCk6IFJlYWRhYmxlIHtcclxuICAgICAgICByZXR1cm4gYnVmZmVyVG9TdHJlYW0odGhpcy5idWZmZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBidWZmZXI6IEJ1ZmZlciwgcmVhZG9ubHkgZmlsZW5hbWU6IHN0cmluZywgcmVhZG9ubHkgY29udGVudFR5cGU6IHN0cmluZywgcmVhZG9ubHkgbWV0YWRhdGE6IElBc3NldE1ldGEpIHtcclxuICAgICAgICB0aGlzLmlkID0gbmV3IE9iamVjdElkKCkudG9IZXhTdHJpbmcoKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyB1bmxpbmsoKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRlbXAgYXNzZXQgJyR7dGhpcy5pZH0nIGNhbiBub3QgYmUgcmVtb3ZlZCFgKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRCdWZmZXIoKTogUHJvbWlzZTxCdWZmZXI+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5idWZmZXI7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZG93bmxvYWQobWV0YWRhdGE/OiBJQXNzZXRNZXRhKTogUHJvbWlzZTxSZWFkYWJsZT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN0cmVhbTtcclxuICAgIH1cclxuXHJcbiAgICBkb3dubG9hZEltYWdlKHBhcmFtcz86IElBc3NldEltYWdlUGFyYW1zLCBtZXRhZGF0YT86IElBc3NldE1ldGEpOiBQcm9taXNlPFJlYWRhYmxlPiB7XHJcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLm1ldGFkYXRhLCBtZXRhZGF0YSB8fCB7fSk7XHJcbiAgICAgICAgcmV0dXJuIHRvSW1hZ2UodGhpcy5zdHJlYW0sIHBhcmFtcywgdGhpcy5tZXRhZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0SW1hZ2UocGFyYW1zPzogSUFzc2V0SW1hZ2VQYXJhbXMpOiBQcm9taXNlPFJlYWRhYmxlPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZG93bmxvYWRJbWFnZShwYXJhbXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHNhdmUoKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBsb2FkKCk6IFByb21pc2U8dGhpcz4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHRvSlNPTigpOiBhbnkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGlkOiB0aGlzLmlkLFxyXG4gICAgICAgICAgICBmaWxlbmFtZTogdGhpcy5maWxlbmFtZSxcclxuICAgICAgICAgICAgY29udGVudFR5cGU6IHRoaXMuY29udGVudFR5cGUsXHJcbiAgICAgICAgICAgIG1ldGFkYXRhOiB0aGlzLm1ldGFkYXRhXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG4iXX0=
@@ -1,45 +0,0 @@
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
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
14
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15
- return new (P || (P = Promise))(function (resolve, reject) {
16
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
17
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
18
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
19
- step((generator = generator.apply(thisArg, _arguments || [])).next());
20
- });
21
- };
22
- import { injectable, injectAll, Lifecycle, scoped } from "tsyringe";
23
- import { FIXTURE } from "../common-types";
24
- let Fixtures = class Fixtures {
25
- constructor(fixtures) {
26
- this.fixtures = fixtures;
27
- }
28
- load() {
29
- return __awaiter(this, void 0, void 0, function* () {
30
- if (!this.fixtures)
31
- return;
32
- for (let fixture of this.fixtures) {
33
- yield fixture.load();
34
- }
35
- });
36
- }
37
- };
38
- Fixtures = __decorate([
39
- injectable(),
40
- scoped(Lifecycle.ContainerScoped),
41
- __param(0, injectAll(FIXTURE)),
42
- __metadata("design:paramtypes", [Array])
43
- ], Fixtures);
44
- export { Fixtures };
45
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4dHVyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvZml4dHVyZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUNsRSxPQUFPLEVBQUMsT0FBTyxFQUFXLE1BQU0saUJBQWlCLENBQUM7SUFJckMsUUFBUSxTQUFSLFFBQVE7SUFFakIsWUFBMEMsUUFBb0I7UUFBcEIsYUFBUSxHQUFSLFFBQVEsQ0FBWTtJQUU5RCxDQUFDO0lBRUssSUFBSTs7WUFDTixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVE7Z0JBQUUsT0FBTztZQUUzQixLQUFLLElBQUksT0FBTyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7Z0JBQy9CLE1BQU0sT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO2FBQ3hCO1FBQ0wsQ0FBQztLQUFBO0NBQ0osQ0FBQTtBQWJZLFFBQVE7SUFGcEIsVUFBVSxFQUFFO0lBQ1osTUFBTSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUM7SUFHakIsV0FBQSxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUE7O0dBRnRCLFFBQVEsQ0FhcEI7U0FiWSxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtpbmplY3RhYmxlLCBpbmplY3RBbGwsIExpZmVjeWNsZSwgc2NvcGVkfSBmcm9tIFwidHN5cmluZ2VcIjtcclxuaW1wb3J0IHtGSVhUVVJFLCBJRml4dHVyZX0gZnJvbSBcIi4uL2NvbW1vbi10eXBlc1wiO1xyXG5cclxuQGluamVjdGFibGUoKVxyXG5Ac2NvcGVkKExpZmVjeWNsZS5Db250YWluZXJTY29wZWQpXHJcbmV4cG9ydCBjbGFzcyBGaXh0dXJlcyB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoQGluamVjdEFsbChGSVhUVVJFKSBwcm90ZWN0ZWQgZml4dHVyZXM6IElGaXh0dXJlW10pIHtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgbG9hZCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuZml4dHVyZXMpIHJldHVybjtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgZml4dHVyZSBvZiB0aGlzLmZpeHR1cmVzKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IGZpeHR1cmUubG9hZCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iXX0=
@@ -1,36 +0,0 @@
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
- import { injectable, Lifecycle, scoped } from "tsyringe";
11
- import { GalleryImage } from "./gallery-image";
12
- let GalleryCache = class GalleryCache {
13
- constructor() {
14
- this.imgCache = {};
15
- }
16
- put(img) {
17
- this.imgCache[img.thumb] = img;
18
- this.imgCache[img.big] = img;
19
- }
20
- serve(id) {
21
- const img = this.imgCache[id];
22
- return !img ? null : img.serve(id);
23
- }
24
- create(folder, targetSize, handler) {
25
- const image = new GalleryImage(folder, targetSize, handler);
26
- this.put(image);
27
- return image;
28
- }
29
- };
30
- GalleryCache = __decorate([
31
- injectable(),
32
- scoped(Lifecycle.ContainerScoped),
33
- __metadata("design:paramtypes", [])
34
- ], GalleryCache);
35
- export { GalleryCache };
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FsbGVyeS1jYWNoZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9nYWxsZXJ5LWNhY2hlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUV2RCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7SUFJaEMsWUFBWSxTQUFaLFlBQVk7SUFJckI7UUFDSSxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQsR0FBRyxDQUFDLEdBQWtCO1FBQ2xCLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUMvQixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDakMsQ0FBQztJQUVELEtBQUssQ0FBQyxFQUFVO1FBQ1osTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM5QixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELE1BQU0sQ0FBQyxNQUFjLEVBQUUsVUFBd0IsRUFBRSxPQUE2QjtRQUMxRSxNQUFNLEtBQUssR0FBRyxJQUFJLFlBQVksQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzVELElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEIsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztDQUNKLENBQUE7QUF2QlksWUFBWTtJQUZ4QixVQUFVLEVBQUU7SUFDWixNQUFNLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQzs7R0FDckIsWUFBWSxDQXVCeEI7U0F2QlksWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7aW5qZWN0YWJsZSwgTGlmZWN5Y2xlLCBzY29wZWR9IGZyb20gXCJ0c3lyaW5nZVwiO1xyXG5pbXBvcnQge0lHYWxsZXJ5SW1hZ2UsIElHYWxsZXJ5SW1hZ2VIYW5kbGVyLCBJR2FsbGVyeVNpemV9IGZyb20gXCIuLi9jb21tb24tdHlwZXNcIjtcclxuaW1wb3J0IHtHYWxsZXJ5SW1hZ2V9IGZyb20gXCIuL2dhbGxlcnktaW1hZ2VcIjtcclxuXHJcbkBpbmplY3RhYmxlKClcclxuQHNjb3BlZChMaWZlY3ljbGUuQ29udGFpbmVyU2NvcGVkKVxyXG5leHBvcnQgY2xhc3MgR2FsbGVyeUNhY2hlIHtcclxuXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGltZ0NhY2hlOiB7IFtpZDogc3RyaW5nXTogSUdhbGxlcnlJbWFnZSB9O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuaW1nQ2FjaGUgPSB7fTtcclxuICAgIH1cclxuXHJcbiAgICBwdXQoaW1nOiBJR2FsbGVyeUltYWdlKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pbWdDYWNoZVtpbWcudGh1bWJdID0gaW1nO1xyXG4gICAgICAgIHRoaXMuaW1nQ2FjaGVbaW1nLmJpZ10gPSBpbWc7XHJcbiAgICB9XHJcblxyXG4gICAgc2VydmUoaWQ6IHN0cmluZyk6IFByb21pc2U8QnVmZmVyPiB7XHJcbiAgICAgICAgY29uc3QgaW1nID0gdGhpcy5pbWdDYWNoZVtpZF07XHJcbiAgICAgICAgcmV0dXJuICFpbWcgPyBudWxsIDogaW1nLnNlcnZlKGlkKTtcclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGUoZm9sZGVyOiBzdHJpbmcsIHRhcmdldFNpemU6IElHYWxsZXJ5U2l6ZSwgaGFuZGxlcjogSUdhbGxlcnlJbWFnZUhhbmRsZXIpOiBJR2FsbGVyeUltYWdlIHtcclxuICAgICAgICBjb25zdCBpbWFnZSA9IG5ldyBHYWxsZXJ5SW1hZ2UoZm9sZGVyLCB0YXJnZXRTaXplLCBoYW5kbGVyKTtcclxuICAgICAgICB0aGlzLnB1dChpbWFnZSk7XHJcbiAgICAgICAgcmV0dXJuIGltYWdlO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
@@ -1,48 +0,0 @@
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 { v4 as uuidv4 } from "uuid";
11
- import sharp_ from "sharp";
12
- const sharp = sharp_;
13
- const bigSize = 1500;
14
- const thumbSize = 250;
15
- export class GalleryImage {
16
- constructor(folder, size, handler) {
17
- this.folder = folder;
18
- this.handler = handler;
19
- this.thumb = uuidv4();
20
- this.big = uuidv4();
21
- this.targetSize = !size ? { width: thumbSize, height: thumbSize } : size;
22
- }
23
- serve(id) {
24
- return __awaiter(this, void 0, void 0, function* () {
25
- const isThumb = id == this.thumb;
26
- if (yield this.handler.hasResult(isThumb)) {
27
- return this.handler.serveResult(isThumb);
28
- }
29
- const original = sharp(yield this.handler.getOriginal()).rotate();
30
- const meta = yield original.metadata();
31
- const ratio = meta.width / meta.height;
32
- const sizeRatio = isThumb ? this.targetSize.width / this.targetSize.height : 1;
33
- const size = isThumb ? Math.max(this.targetSize.width, this.targetSize.height) : bigSize;
34
- const targetHeight = ratio > sizeRatio ? size : Math.round(size / ratio);
35
- const targetWidth = Math.round(targetHeight * ratio);
36
- const resized = original.resize(targetWidth, targetHeight);
37
- const buffer = yield (isThumb ? resized.extract({
38
- left: Math.floor((targetWidth - this.targetSize.width) / 2),
39
- top: Math.floor((targetHeight - this.targetSize.height) / 2),
40
- width: this.targetSize.width,
41
- height: this.targetSize.height
42
- }).toBuffer() : resized.toBuffer());
43
- yield this.handler.writeResult(isThumb, buffer);
44
- return this.handler.serveResult(isThumb);
45
- });
46
- }
47
- }
48
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FsbGVyeS1pbWFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9nYWxsZXJ5LWltYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBQyxFQUFFLElBQUksTUFBTSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ2xDLE9BQU8sTUFBTSxNQUFNLE9BQU8sQ0FBQztBQUczQixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUM7QUFDckIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQ3JCLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUV0QixNQUFNLE9BQU8sWUFBWTtJQU1yQixZQUFxQixNQUFjLEVBQUUsSUFBa0IsRUFBVyxPQUE2QjtRQUExRSxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQStCLFlBQU8sR0FBUCxPQUFPLENBQXNCO1FBQzNGLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDM0UsQ0FBQztJQUVLLEtBQUssQ0FBQyxFQUFVOztZQUNsQixNQUFNLE9BQU8sR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQztZQUVqQyxJQUFJLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ3ZDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDNUM7WUFFRCxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDbEUsTUFBTSxJQUFJLEdBQUcsTUFBTSxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDdkMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQ3ZDLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMvRSxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQ3pGLE1BQU0sWUFBWSxHQUFHLEtBQUssR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUM7WUFDekUsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLENBQUM7WUFFckQsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDM0QsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztnQkFDNUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzNELEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUM1RCxLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLO2dCQUM1QixNQUFNLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNO2FBQ2pDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFFcEMsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDaEQsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM3QyxDQUFDO0tBQUE7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7djQgYXMgdXVpZHY0fSBmcm9tIFwidXVpZFwiO1xyXG5pbXBvcnQgc2hhcnBfIGZyb20gXCJzaGFycFwiO1xyXG5pbXBvcnQge0lHYWxsZXJ5SW1hZ2UsIElHYWxsZXJ5U2l6ZSwgSUdhbGxlcnlJbWFnZUhhbmRsZXJ9IGZyb20gXCIuLi9jb21tb24tdHlwZXNcIjtcclxuXHJcbmNvbnN0IHNoYXJwID0gc2hhcnBfO1xyXG5jb25zdCBiaWdTaXplID0gMTUwMDtcclxuY29uc3QgdGh1bWJTaXplID0gMjUwO1xyXG5cclxuZXhwb3J0IGNsYXNzIEdhbGxlcnlJbWFnZSBpbXBsZW1lbnRzIElHYWxsZXJ5SW1hZ2Uge1xyXG5cclxuICAgIHJlYWRvbmx5IHRodW1iOiBzdHJpbmc7XHJcbiAgICByZWFkb25seSBiaWc6IHN0cmluZztcclxuICAgIHJlYWRvbmx5IHRhcmdldFNpemU6IElHYWxsZXJ5U2l6ZTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihyZWFkb25seSBmb2xkZXI6IHN0cmluZywgc2l6ZTogSUdhbGxlcnlTaXplLCByZWFkb25seSBoYW5kbGVyOiBJR2FsbGVyeUltYWdlSGFuZGxlcikge1xyXG4gICAgICAgIHRoaXMudGh1bWIgPSB1dWlkdjQoKTtcclxuICAgICAgICB0aGlzLmJpZyA9IHV1aWR2NCgpO1xyXG4gICAgICAgIHRoaXMudGFyZ2V0U2l6ZSA9ICFzaXplID8ge3dpZHRoOiB0aHVtYlNpemUsIGhlaWdodDogdGh1bWJTaXplfSA6IHNpemU7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc2VydmUoaWQ6IHN0cmluZyk6IFByb21pc2U8QnVmZmVyPiB7XHJcbiAgICAgICAgY29uc3QgaXNUaHVtYiA9IGlkID09IHRoaXMudGh1bWI7XHJcblxyXG4gICAgICAgIGlmIChhd2FpdCB0aGlzLmhhbmRsZXIuaGFzUmVzdWx0KGlzVGh1bWIpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmhhbmRsZXIuc2VydmVSZXN1bHQoaXNUaHVtYik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBvcmlnaW5hbCA9IHNoYXJwKGF3YWl0IHRoaXMuaGFuZGxlci5nZXRPcmlnaW5hbCgpKS5yb3RhdGUoKTtcclxuICAgICAgICBjb25zdCBtZXRhID0gYXdhaXQgb3JpZ2luYWwubWV0YWRhdGEoKTtcclxuICAgICAgICBjb25zdCByYXRpbyA9IG1ldGEud2lkdGggLyBtZXRhLmhlaWdodDtcclxuICAgICAgICBjb25zdCBzaXplUmF0aW8gPSBpc1RodW1iID8gdGhpcy50YXJnZXRTaXplLndpZHRoIC8gdGhpcy50YXJnZXRTaXplLmhlaWdodCA6IDE7XHJcbiAgICAgICAgY29uc3Qgc2l6ZSA9IGlzVGh1bWIgPyBNYXRoLm1heCh0aGlzLnRhcmdldFNpemUud2lkdGgsIHRoaXMudGFyZ2V0U2l6ZS5oZWlnaHQpIDogYmlnU2l6ZTtcclxuICAgICAgICBjb25zdCB0YXJnZXRIZWlnaHQgPSByYXRpbyA+IHNpemVSYXRpbyA/IHNpemUgOiBNYXRoLnJvdW5kKHNpemUgLyByYXRpbyk7XHJcbiAgICAgICAgY29uc3QgdGFyZ2V0V2lkdGggPSBNYXRoLnJvdW5kKHRhcmdldEhlaWdodCAqIHJhdGlvKTtcclxuXHJcbiAgICAgICAgY29uc3QgcmVzaXplZCA9IG9yaWdpbmFsLnJlc2l6ZSh0YXJnZXRXaWR0aCwgdGFyZ2V0SGVpZ2h0KTtcclxuICAgICAgICBjb25zdCBidWZmZXIgPSBhd2FpdCAoaXNUaHVtYiA/IHJlc2l6ZWQuZXh0cmFjdCh7XHJcbiAgICAgICAgICAgIGxlZnQ6IE1hdGguZmxvb3IoKHRhcmdldFdpZHRoIC0gdGhpcy50YXJnZXRTaXplLndpZHRoKSAvIDIpLFxyXG4gICAgICAgICAgICB0b3A6IE1hdGguZmxvb3IoKHRhcmdldEhlaWdodCAtIHRoaXMudGFyZ2V0U2l6ZS5oZWlnaHQpIC8gMiksXHJcbiAgICAgICAgICAgIHdpZHRoOiB0aGlzLnRhcmdldFNpemUud2lkdGgsXHJcbiAgICAgICAgICAgIGhlaWdodDogdGhpcy50YXJnZXRTaXplLmhlaWdodFxyXG4gICAgICAgIH0pLnRvQnVmZmVyKCkgOiByZXNpemVkLnRvQnVmZmVyKCkpO1xyXG5cclxuICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZXIud3JpdGVSZXN1bHQoaXNUaHVtYiwgYnVmZmVyKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVyLnNlcnZlUmVzdWx0KGlzVGh1bWIpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
@@ -1,138 +0,0 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
6
- };
7
- var __metadata = (this && this.__metadata) || function (k, v) {
8
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
- };
10
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
11
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
12
- return new (P || (P = Promise))(function (resolve, reject) {
13
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
14
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
15
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
16
- step((generator = generator.apply(thisArg, _arguments || [])).next());
17
- });
18
- };
19
- import { injectable, Lifecycle, scoped } from "tsyringe";
20
- import sharp_ from "sharp";
21
- import { access, constants, lstat, readdir, readFile, writeFile } from "fs";
22
- import { join, dirname } from "path";
23
- import { Configuration } from "./configuration";
24
- import { GalleryCache } from "./gallery-cache";
25
- import { mkdirRecursive } from "../utils";
26
- const sharp = sharp_;
27
- let Gallery = class Gallery {
28
- constructor(config, galleryCache) {
29
- this.config = config;
30
- this.galleryCache = galleryCache;
31
- this.cache = {};
32
- this.dir = this.config.resolve("galleryDir");
33
- this.output = join(this.config.resolve("cacheDir"), "gallery");
34
- }
35
- getFolder(folder, size = null) {
36
- return __awaiter(this, void 0, void 0, function* () {
37
- this.cache[folder] = this.cache[folder] || new Promise(resolve => {
38
- lstat(join(this.dir, folder), (err, stats) => {
39
- if (err || !stats.isDirectory()) {
40
- resolve([]);
41
- return;
42
- }
43
- this.readRecursive(folder, "", size).then(resolve, () => resolve([]));
44
- });
45
- });
46
- return this.cache[folder];
47
- });
48
- }
49
- readRecursive(path, folder, size) {
50
- return new Promise(resolve => {
51
- readdir(join(this.dir, path), (err, files) => {
52
- if (err) {
53
- resolve([]);
54
- return;
55
- }
56
- const promises = files.map(file => {
57
- return new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {
58
- const filePath = join(path, file);
59
- const absoluteFilePath = join(this.dir, filePath);
60
- lstat(absoluteFilePath, (err, stats) => {
61
- if (err) {
62
- resolve([]);
63
- return;
64
- }
65
- if (stats.isDirectory()) {
66
- this.readRecursive(filePath, join(folder, file), size).then(resolve);
67
- return;
68
- }
69
- const sharpImg = sharp(absoluteFilePath);
70
- sharpImg.rotate().metadata().then(() => {
71
- const getResultPath = (isThumb) => {
72
- return join(this.output, filePath.replace(/.([a-z|A-Z]+)$/gi, function (ext) {
73
- const suffix = isThumb ? 'thumb' : 'big';
74
- return `-${suffix}${ext}`;
75
- }));
76
- };
77
- resolve([this.galleryCache.create(folder, size, {
78
- getOriginal: () => {
79
- return new Promise((res, rej) => {
80
- readFile(absoluteFilePath, (err, data) => {
81
- if (err) {
82
- rej(err);
83
- return;
84
- }
85
- res(data);
86
- });
87
- });
88
- },
89
- writeResult: (isThumb, buffer) => {
90
- return new Promise((res, rej) => __awaiter(this, void 0, void 0, function* () {
91
- const resultPath = getResultPath(isThumb);
92
- yield mkdirRecursive(dirname(resultPath));
93
- writeFile(resultPath, buffer, err => {
94
- if (err) {
95
- rej(err);
96
- return;
97
- }
98
- res();
99
- });
100
- }));
101
- },
102
- hasResult: (isThumb) => {
103
- return new Promise(res => {
104
- access(getResultPath(isThumb), constants.R_OK, err => {
105
- res(!err);
106
- });
107
- });
108
- },
109
- serveResult: (isThumb) => {
110
- return new Promise((res, rej) => {
111
- readFile(getResultPath(isThumb), (err, data) => {
112
- if (err) {
113
- rej(err);
114
- return;
115
- }
116
- res(data);
117
- });
118
- });
119
- }
120
- })]);
121
- }, () => resolve([]));
122
- });
123
- }));
124
- });
125
- Promise.all(promises).then(folders => {
126
- resolve([].concat.apply([], folders));
127
- });
128
- });
129
- });
130
- }
131
- };
132
- Gallery = __decorate([
133
- injectable(),
134
- scoped(Lifecycle.ContainerScoped),
135
- __metadata("design:paramtypes", [Configuration, GalleryCache])
136
- ], Gallery);
137
- export { Gallery };
138
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FsbGVyeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9nYWxsZXJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUN2RCxPQUFPLE1BQU0sTUFBTSxPQUFPLENBQUM7QUFDM0IsT0FBTyxFQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFDLE1BQU0sSUFBSSxDQUFDO0FBQzFFLE9BQU8sRUFBQyxJQUFJLEVBQUUsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRW5DLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM5QyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUV4QyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUM7SUFJUixPQUFPLFNBQVAsT0FBTztJQU1oQixZQUFxQixNQUFxQixFQUFXLFlBQTBCO1FBQTFELFdBQU0sR0FBTixNQUFNLENBQWU7UUFBVyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMzRSxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNoQixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFSyxTQUFTLENBQUMsTUFBYyxFQUFFLE9BQXFCLElBQUk7O1lBQ3JELElBQUksQ0FBQyxLQUFL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QUFXLEVBQUUsQ0FBQyxPQUFnQixFQUFFLEVBQUU7NENBQzlCLE9BQU8sSUFBSSxPQUFPLENBQVMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUU7Z0RBQ3BDLFFBQVEsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUU7b0RBQzNDLElBQUksR0FBRyxFQUFFO3dEQUNMLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQzt3REFDVCxPQUFPO3FEQUNWO29EQUNELEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztnREFDZCxDQUFDLENBQUMsQ0FBQzs0Q0FDUCxDQUFDLENBQUMsQ0FBQzt3Q0FDUCxDQUFDO3FDQUNKLENBQUMsQ0FBQyxDQUFDLENBQUM7NEJBQ1QsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO3dCQUMxQixDQUFDLENBQUMsQ0FBQztvQkFDUCxDQUFDLENBQUEsQ0FBQyxDQUFDO2dCQUNQLENBQUMsQ0FBQyxDQUFDO2dCQUNILE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO29CQUNqQyxPQUFPLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7Z0JBQzFDLENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7Q0FDSixDQUFBO0FBM0dZLE9BQU87SUFGbkIsVUFBVSxFQUFFO0lBQ1osTUFBTSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUM7cUNBT0QsYUFBYSxFQUF5QixZQUFZO0dBTnRFLE9BQU8sQ0EyR25CO1NBM0dZLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2luamVjdGFibGUsIExpZmVjeWNsZSwgc2NvcGVkfSBmcm9tIFwidHN5cmluZ2VcIjtcclxuaW1wb3J0IHNoYXJwXyBmcm9tIFwic2hhcnBcIjtcclxuaW1wb3J0IHthY2Nlc3MsIGNvbnN0YW50cywgbHN0YXQsIHJlYWRkaXIsIHJlYWRGaWxlLCB3cml0ZUZpbGV9IGZyb20gXCJmc1wiO1xyXG5pbXBvcnQge2pvaW4sIGRpcm5hbWV9IGZyb20gXCJwYXRoXCI7XHJcbmltcG9ydCB7SUdhbGxlcnlJbWFnZSwgSUdhbGxlcnlTaXplfSBmcm9tIFwiLi4vY29tbW9uLXR5cGVzXCI7XHJcbmltcG9ydCB7Q29uZmlndXJhdGlvbn0gZnJvbSBcIi4vY29uZmlndXJhdGlvblwiO1xyXG5pbXBvcnQge0dhbGxlcnlDYWNoZX0gZnJvbSBcIi4vZ2FsbGVyeS1jYWNoZVwiO1xyXG5pbXBvcnQge21rZGlyUmVjdXJzaXZlfSBmcm9tIFwiLi4vdXRpbHNcIjtcclxuXHJcbmNvbnN0IHNoYXJwID0gc2hhcnBfO1xyXG5cclxuQGluamVjdGFibGUoKVxyXG5Ac2NvcGVkKExpZmVjeWNsZS5Db250YWluZXJTY29wZWQpXHJcbmV4cG9ydCBjbGFzcyBHYWxsZXJ5IHtcclxuXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRpcjogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBvdXRwdXQ6IHN0cmluZztcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2FjaGU6IHsgW2ZvbGRlcjogc3RyaW5nXTogUHJvbWlzZTxJR2FsbGVyeUltYWdlW10+IH07XHJcblxyXG4gICAgY29uc3RydWN0b3IocmVhZG9ubHkgY29uZmlnOiBDb25maWd1cmF0aW9uLCByZWFkb25seSBnYWxsZXJ5Q2FjaGU6IEdhbGxlcnlDYWNoZSkge1xyXG4gICAgICAgIHRoaXMuY2FjaGUgPSB7fTtcclxuICAgICAgICB0aGlzLmRpciA9IHRoaXMuY29uZmlnLnJlc29sdmUoXCJnYWxsZXJ5RGlyXCIpO1xyXG4gICAgICAgIHRoaXMub3V0cHV0ID0gam9pbih0aGlzLmNvbmZpZy5yZXNvbHZlKFwiY2FjaGVEaXJcIiksIFwiZ2FsbGVyeVwiKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRGb2xkZXIoZm9sZGVyOiBzdHJpbmcsIHNpemU6IElHYWxsZXJ5U2l6ZSA9IG51bGwpOiBQcm9taXNlPElHYWxsZXJ5SW1hZ2VbXT4ge1xyXG4gICAgICAgIHRoaXMuY2FjaGVbZm9sZGVyXSA9IHRoaXMuY2FjaGVbZm9sZGVyXSB8fCBuZXcgUHJvbWlzZTxJR2FsbGVyeUltYWdlW10+KHJlc29sdmUgPT4ge1xyXG4gICAgICAgICAgICBsc3RhdChqb2luKHRoaXMuZGlyLCBmb2xkZXIpLCAoZXJyLCBzdGF0cykgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGVyciB8fCAhc3RhdHMuaXNEaXJlY3RvcnkoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoW10pO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMucmVhZFJlY3Vyc2l2ZShmb2xkZXIsIFwiXCIsIHNpemUpLnRoZW4ocmVzb2x2ZSwgKCkgPT4gcmVzb2x2ZShbXSkpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gdGhpcy5jYWNoZVtmb2xkZXJdO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCByZWFkUmVjdXJzaXZlKHBhdGg6IHN0cmluZywgZm9sZGVyOiBzdHJpbmcsIHNpemU6IElHYWxsZXJ5U2l6ZSk6IFByb21pc2U8SUdhbGxlcnlJbWFnZVtdPiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPElHYWxsZXJ5SW1hZ2VbXT4ocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgICAgIHJlYWRkaXIoam9pbih0aGlzLmRpciwgcGF0aCksIChlcnIsIGZpbGVzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShbXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBmaWxlcy5tYXAoZmlsZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPElHYWxsZXJ5SW1hZ2VbXT4oYXN5bmMgcmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVQYXRoID0gam9pbihwYXRoLCBmaWxlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYWJzb2x1dGVGaWxlUGF0aCA9IGpvaW4odGhpcy5kaXIsIGZpbGVQYXRoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbHN0YXQoYWJzb2x1dGVGaWxlUGF0aCwgKGVyciwgc3RhdHMpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKFtdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHMuaXNEaXJlY3RvcnkoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVhZFJlY3Vyc2l2ZShmaWxlUGF0aCwgam9pbihmb2xkZXIsIGZpbGUpLCBzaXplKS50aGVuKHJlc29sdmUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNoYXJwSW1nID0gc2hhcnAoYWJzb2x1dGVGaWxlUGF0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFycEltZy5yb3RhdGUoKS5tZXRhZGF0YSgpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdldFJlc3VsdFBhdGggPSAoaXNUaHVtYikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gam9pbih0aGlzLm91dHB1dCwgZmlsZVBhdGgucmVwbGFjZSgvLihbYS16fEEtWl0rKSQvZ2ksIGZ1bmN0aW9uIChleHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN1ZmZpeCA9IGlzVGh1bWIgPyAndGh1bWInIDogJ2JpZyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYC0ke3N1ZmZpeH0ke2V4dH1gO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKFt0aGlzLmdhbGxlcnlDYWNoZS5jcmVhdGUoZm9sZGVyLCBzaXplLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldE9yaWdpbmFsOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8QnVmZmVyPigocmVzLCByZWopID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkRmlsZShhYnNvbHV0ZUZpbGVQYXRoLCAoZXJyLCBkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaihlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcyhkYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZVJlc3VsdDogKGlzVGh1bWI6IGJvb2xlYW4sIGJ1ZmZlcjogQnVmZmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oYXN5bmMgKHJlcywgcmVqKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0UGF0aCA9IGdldFJlc3VsdFBhdGgoaXNUaHVtYik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgbWtkaXJSZWN1cnNpdmUoZGlybmFtZShyZXN1bHRQYXRoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKHJlc3VsdFBhdGgsIGJ1ZmZlciwgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqKGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzUmVzdWx0OiAoaXNUaHVtYjogYm9vbGVhbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPGJvb2xlYW4+KHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXNzKGdldFJlc3VsdFBhdGgoaXNUaHVtYiksIGNvbnN0YW50cy5SX09LLCBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXMoIWVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVSZXN1bHQ6IChpc1RodW1iOiBib29sZWFuKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8QnVmZmVyPigocmVzLCByZWopID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkRmlsZShnZXRSZXN1bHRQYXRoKGlzVGh1bWIpLCAoZXJyLCBkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaihlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcyhkYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSldKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sICgpID0+IHJlc29sdmUoW10pKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKGZvbGRlcnMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoW10uY29uY2F0LmFwcGx5KFtdLCBmb2xkZXJzKSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIl19