@stemy/backend 5.2.2 → 6.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 (139) hide show
  1. package/commands/clear-command.d.ts +6 -6
  2. package/commands/fixtures-command.d.ts +9 -9
  3. package/commands/index.d.ts +2 -2
  4. package/common-types.d.ts +325 -326
  5. package/esm2022/commands/clear-command.mjs +15 -0
  6. package/esm2022/commands/fixtures-command.mjs +26 -0
  7. package/esm2022/commands/index.mjs +7 -0
  8. package/esm2022/common-types.mjs +26 -0
  9. package/esm2022/fixtures/index.mjs +5 -0
  10. package/esm2022/fixtures/ttl.fixture.mjs +23 -0
  11. package/esm2022/public_api.mjs +378 -0
  12. package/esm2022/requests/asset-image-params.mjs +60 -0
  13. package/esm2022/rest-controllers/assets.controller.mjs +177 -0
  14. package/esm2022/rest-controllers/auth.controller.mjs +57 -0
  15. package/esm2022/rest-controllers/gallery.controller.mjs +27 -0
  16. package/esm2022/rest-controllers/progresses.controller.mjs +38 -0
  17. package/esm2022/rest-controllers/terminal-styles.mjs +67 -0
  18. package/esm2022/rest-controllers/terminal.controller.mjs +132 -0
  19. package/esm2022/rest-middlewares/container.middleware.mjs +22 -0
  20. package/esm2022/rest-middlewares/error-handler.middleware.mjs +79 -0
  21. package/esm2022/rest-middlewares/language.middleware.mjs +21 -0
  22. package/esm2022/rest-middlewares/request-ended.middleware.mjs +26 -0
  23. package/esm2022/rest-middlewares/request-started.middleware.mjs +25 -0
  24. package/esm2022/services/asset-processor.mjs +90 -0
  25. package/esm2022/services/asset-resolver.mjs +36 -0
  26. package/esm2022/services/assets.mjs +154 -0
  27. package/esm2022/services/backend-provider.mjs +83 -0
  28. package/esm2022/services/cache-processor.mjs +16 -0
  29. package/esm2022/services/cache.mjs +70 -0
  30. package/esm2022/services/configuration.mjs +68 -0
  31. package/esm2022/services/drivers/asset-grid.driver.mjs +27 -0
  32. package/esm2022/services/drivers/asset-local.driver.mjs +41 -0
  33. package/esm2022/services/endpoint-provider.mjs +13 -0
  34. package/esm2022/services/entities/asset.mjs +61 -0
  35. package/esm2022/services/entities/base-entity.mjs +32 -0
  36. package/esm2022/services/entities/lazy-asset.mjs +87 -0
  37. package/esm2022/services/entities/progress.mjs +182 -0
  38. package/esm2022/services/entities/temp-asset.mjs +53 -0
  39. package/esm2022/services/fixtures.mjs +38 -0
  40. package/esm2022/services/gallery-cache.mjs +29 -0
  41. package/esm2022/services/gallery-image.mjs +42 -0
  42. package/esm2022/services/gallery.mjs +124 -0
  43. package/esm2022/services/id-generator.mjs +49 -0
  44. package/esm2022/services/job-manager.mjs +198 -0
  45. package/esm2022/services/lazy-assets.mjs +68 -0
  46. package/esm2022/services/logger.mjs +26 -0
  47. package/esm2022/services/mail-sender.mjs +42 -0
  48. package/esm2022/services/memory-cache.mjs +61 -0
  49. package/esm2022/services/mongo-connector.mjs +36 -0
  50. package/esm2022/services/open-api.mjs +124 -0
  51. package/esm2022/services/progresses.mjs +93 -0
  52. package/esm2022/services/template-renderer.mjs +71 -0
  53. package/esm2022/services/terminal-manager.mjs +88 -0
  54. package/esm2022/services/token-generator.mjs +37 -0
  55. package/esm2022/services/translation-provider.mjs +39 -0
  56. package/esm2022/services/translator.mjs +67 -0
  57. package/esm2022/services/user-manager.mjs +27 -0
  58. package/esm2022/socket-controllers/progress.controller.mjs +63 -0
  59. package/esm2022/socket-controllers/terminal.controller.mjs +61 -0
  60. package/esm2022/socket-controllers/terminal.mjs +89 -0
  61. package/esm2022/socket-middlewares/compression.middleware.mjs +14 -0
  62. package/esm2022/static.mjs +23 -0
  63. package/esm2022/stemy-backend.mjs +5 -0
  64. package/esm2022/utilities/base-doc.mjs +33 -0
  65. package/esm2022/utilities/decorators.mjs +51 -0
  66. package/esm2022/utilities/di-container.mjs +88 -0
  67. package/esm2022/utilities/empty-job.mjs +13 -0
  68. package/esm2022/utilities/lazy-asset-generator.mjs +38 -0
  69. package/esm2022/utilities/mongoose.mjs +216 -0
  70. package/esm2022/utilities/tree.mjs +119 -0
  71. package/esm2022/utils.mjs +726 -0
  72. package/esm2022/validators.mjs +46 -0
  73. package/fesm2022/stemy-backend.mjs +4690 -0
  74. package/fesm2022/stemy-backend.mjs.map +1 -0
  75. package/fixtures/index.d.ts +2 -2
  76. package/fixtures/ttl.fixture.d.ts +7 -7
  77. package/index.d.ts +5 -5
  78. package/package.json +43 -49
  79. package/public_api.d.ts +44 -44
  80. package/requests/asset-image-params.d.ts +12 -12
  81. package/rest-controllers/assets.controller.d.ts +25 -27
  82. package/rest-controllers/auth.controller.d.ts +14 -14
  83. package/rest-controllers/gallery.controller.d.ts +6 -7
  84. package/rest-controllers/progresses.controller.d.ts +9 -9
  85. package/rest-controllers/terminal-styles.d.ts +2 -2
  86. package/rest-controllers/terminal.controller.d.ts +10 -10
  87. package/rest-middlewares/container.middleware.d.ts +8 -8
  88. package/rest-middlewares/error-handler.middleware.d.ts +13 -13
  89. package/rest-middlewares/language.middleware.d.ts +8 -8
  90. package/rest-middlewares/request-ended.middleware.d.ts +8 -8
  91. package/rest-middlewares/request-started.middleware.d.ts +8 -8
  92. package/services/asset-processor.d.ts +10 -11
  93. package/services/asset-resolver.d.ts +10 -10
  94. package/services/assets.d.ts +24 -26
  95. package/services/backend-provider.d.ts +19 -20
  96. package/services/cache-processor.d.ts +4 -4
  97. package/services/cache.d.ts +23 -23
  98. package/services/configuration.d.ts +15 -15
  99. package/services/drivers/asset-grid.driver.d.ts +11 -11
  100. package/services/drivers/asset-local.driver.d.ts +10 -11
  101. package/services/endpoint-provider.d.ts +4 -4
  102. package/services/entities/asset.d.ts +19 -21
  103. package/services/entities/base-entity.d.ts +13 -13
  104. package/services/entities/lazy-asset.d.ts +25 -25
  105. package/services/entities/progress.d.ts +49 -49
  106. package/services/entities/temp-asset.d.ts +20 -22
  107. package/services/fixtures.d.ts +8 -8
  108. package/services/gallery-cache.d.ts +8 -9
  109. package/services/gallery-image.d.ts +10 -11
  110. package/services/gallery.d.ts +13 -13
  111. package/services/id-generator.d.ts +11 -11
  112. package/services/job-manager.d.ts +35 -35
  113. package/services/lazy-assets.d.ts +22 -22
  114. package/services/logger.d.ts +8 -8
  115. package/services/mail-sender.d.ts +20 -20
  116. package/services/memory-cache.d.ts +10 -10
  117. package/services/mongo-connector.d.ts +12 -12
  118. package/services/open-api.d.ts +13 -13
  119. package/services/progresses.d.ts +20 -20
  120. package/services/template-renderer.d.ts +14 -14
  121. package/services/terminal-manager.d.ts +15 -15
  122. package/services/token-generator.d.ts +6 -6
  123. package/services/translation-provider.d.ts +9 -9
  124. package/services/translator.d.ts +15 -15
  125. package/services/user-manager.d.ts +6 -6
  126. package/socket-controllers/progress.controller.d.ts +10 -10
  127. package/socket-controllers/terminal.controller.d.ts +13 -13
  128. package/socket-controllers/terminal.d.ts +19 -20
  129. package/socket-middlewares/compression.middleware.d.ts +4 -4
  130. package/static.d.ts +2 -2
  131. package/utilities/base-doc.d.ts +40 -40
  132. package/utilities/decorators.d.ts +10 -10
  133. package/utilities/di-container.d.ts +43 -43
  134. package/utilities/empty-job.d.ts +4 -4
  135. package/utilities/lazy-asset-generator.d.ts +15 -15
  136. package/utilities/mongoose.d.ts +36 -36
  137. package/utilities/tree.d.ts +15 -15
  138. package/utils.d.ts +120 -123
  139. package/validators.d.ts +7 -7
@@ -0,0 +1,70 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import { singleton } from "tsyringe";
3
+ import { MongoConnector } from "./mongo-connector";
4
+ import { Configuration } from "./configuration";
5
+ import { CacheProcessor } from "./cache-processor";
6
+ let Cache = class Cache {
7
+ connector;
8
+ config;
9
+ cacheProcessor;
10
+ collection;
11
+ constructor(connector, config, cacheProcessor) {
12
+ this.connector = connector;
13
+ this.config = config;
14
+ this.cacheProcessor = cacheProcessor;
15
+ }
16
+ async prepare() {
17
+ if (this.collection)
18
+ return;
19
+ if (!this.connector.database) {
20
+ throw new Error(`You can't use cache without mongo connection!`);
21
+ }
22
+ this.collection = this.connector.database.collection(this.config.resolve("cacheCollection"));
23
+ await this.collection.createIndex({ expiresAt: 1 }, { expireAfterSeconds: 0 });
24
+ }
25
+ async set(key, value, ttl, expirationTimestamp = null, tags = {}) {
26
+ await this.prepare();
27
+ const item = {
28
+ _id: key,
29
+ data: await this.cacheProcessor.serialize(value),
30
+ tags: await this.cacheProcessor.serialize(tags),
31
+ expirationTimestamp,
32
+ };
33
+ if (ttl) {
34
+ const now = Math.round(new Date().getTime() / 1000);
35
+ item.expiresAt = now + ttl;
36
+ }
37
+ await this.collection.updateOne({ _id: key }, { $set: item }, { upsert: true });
38
+ return value;
39
+ }
40
+ async get(key) {
41
+ await this.prepare();
42
+ let item = await this.collection.findOne({ _id: key });
43
+ const now = Math.round(new Date().getTime() / 1000);
44
+ if (item && item.expiresAt && item.expiresAt < now) {
45
+ item = null;
46
+ }
47
+ if (!item) {
48
+ throw new Error(`Cache probably doesn't exists with key: ${key}`);
49
+ }
50
+ return await this.cacheProcessor.deserialize(item.data);
51
+ }
52
+ async getOrSet(key, valueCb, ttl, expirationTimestamp = null, tags = {}) {
53
+ try {
54
+ return await this.get(key);
55
+ }
56
+ catch (e) {
57
+ return await this.set(key, await valueCb(), ttl, expirationTimestamp, tags);
58
+ }
59
+ }
60
+ async delete(key) {
61
+ await this.prepare();
62
+ await this.collection.deleteOne({ _id: key });
63
+ }
64
+ };
65
+ Cache = __decorate([
66
+ singleton(),
67
+ __metadata("design:paramtypes", [MongoConnector, Configuration, CacheProcessor])
68
+ ], Cache);
69
+ export { Cache };
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvY2FjaGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFFbkMsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM5QyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFXMUMsSUFBTSxLQUFLLEdBQVgsTUFBTSxLQUFLO0lBSU87SUFBcUM7SUFBaUM7SUFGakYsVUFBVSxDQUF5QjtJQUU3QyxZQUFxQixTQUF5QixFQUFZLE1BQXFCLEVBQVksY0FBOEI7UUFBcEcsY0FBUyxHQUFULFNBQVMsQ0FBZ0I7UUFBWSxXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQVksbUJBQWMsR0FBZCxjQUFjLENBQWdCO0lBRXpILENBQUM7SUFFUyxLQUFLLENBQUMsT0FBTztRQUNuQixJQUFJLElBQUksQ0FBQyxVQUFVO1lBQUUsT0FBTztRQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUMzQixNQUFNLElBQUksS0FBSyxDQUFDLCtDQUErQyxDQUFDLENBQUM7UUFDckUsQ0FBQztRQUNELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztRQUM3RixNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUM3QixFQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUMsRUFDZCxFQUFDLGtCQUFrQixFQUFFLENBQUMsRUFBQyxDQUMxQixDQUFDO0lBQ04sQ0FBQztJQUVELEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBVyxFQUFFLEtBQVUsRUFBRSxHQUFZLEVBQUUsc0JBQThCLElBQUksRUFBRSxPQUFZLEVBQUU7UUFDL0YsTUFBTSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDckIsTUFBTSxJQUFJLEdBQWU7WUFDckIsR0FBRyxFQUFFLEdBQUc7WUFDUixJQUFJLEVBQUUsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7WUFDaEQsSUFBSSxFQUFFLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO1lBQy9DLG1CQUFtQjtTQUN0QixDQUFDO1FBQ0YsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNOLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztZQUNwRCxJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDL0IsQ0FBQztRQUNELE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBQyxHQUFHLEVBQUUsR0FBRyxFQUFDLEVBQUUsRUFBQyxJQUFJLEVBQUUsSUFBSSxFQUFDLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztRQUMxRSxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRUQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFXO1FBQ2pCLE1BQU0sSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3JCLElBQUksSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBQyxHQUFHLEVBQUUsR0FBRyxFQUFDLENBQUMsQ0FBQztRQUNyRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDcEQsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsRUFBRSxDQUFDO1lBQ2pELElBQUksR0FBRyxJQUFJLENBQUM7UUFDaEIsQ0FBQztRQUNELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNSLE1BQU0sSUFBSSxLQUFLLENBQUMsMkNBQTJDLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDdEUsQ0FBQztRQUNELE9BQU8sTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBVyxFQUFFLE9BQTJCLEVBQUUsR0FBWSxFQUFFLHNCQUE4QixJQUFJLEVBQUUsT0FBWSxFQUFFO1FBQ3JILElBQUksQ0FBQztZQUNELE9BQU8sTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1QsT0FBTyxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLE1BQU0sT0FBTyxFQUFFLEVBQUUsR0FBRyxFQUFFLG1CQUFtQixFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2hGLENBQUM7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFXO1FBQ3BCLE1BQU0sSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3JCLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBQyxHQUFHLEVBQUUsR0FBRyxFQUFDLENBQUMsQ0FBQztJQUNoRCxDQUFDO0NBQ0osQ0FBQTtBQTdEWSxLQUFLO0lBRGpCLFNBQVMsRUFBRTtxQ0FLd0IsY0FBYyxFQUFvQixhQUFhLEVBQTRCLGNBQWM7R0FKaEgsS0FBSyxDQTZEakIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3NpbmdsZXRvbn0gZnJvbSBcInRzeXJpbmdlXCI7XHJcbmltcG9ydCB7Q29sbGVjdGlvbn0gZnJvbSBcIm1vbmdvZGJcIjtcclxuaW1wb3J0IHtNb25nb0Nvbm5lY3Rvcn0gZnJvbSBcIi4vbW9uZ28tY29ubmVjdG9yXCI7XHJcbmltcG9ydCB7Q29uZmlndXJhdGlvbn0gZnJvbSBcIi4vY29uZmlndXJhdGlvblwiO1xyXG5pbXBvcnQge0NhY2hlUHJvY2Vzc29yfSBmcm9tIFwiLi9jYWNoZS1wcm9jZXNzb3JcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUNhY2hlSXRlbSB7XHJcbiAgICBfaWQ6IHN0cmluZztcclxuICAgIGRhdGE6IGFueTtcclxuICAgIHRhZ3M/OiBhbnk7XHJcbiAgICBleHBpcmF0aW9uVGltZXN0YW1wPzogbnVtYmVyO1xyXG4gICAgZXhwaXJlc0F0PzogbnVtYmVyO1xyXG59XHJcblxyXG5Ac2luZ2xldG9uKClcclxuZXhwb3J0IGNsYXNzIENhY2hlIHtcclxuXHJcbiAgICBwcm90ZWN0ZWQgY29sbGVjdGlvbjogQ29sbGVjdGlvbjxJQ2FjaGVJdGVtPjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihyZWFkb25seSBjb25uZWN0b3I6IE1vbmdvQ29ubmVjdG9yLCBwcm90ZWN0ZWQgY29uZmlnOiBDb25maWd1cmF0aW9uLCBwcm90ZWN0ZWQgY2FjaGVQcm9jZXNzb3I6IENhY2hlUHJvY2Vzc29yKSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBhc3luYyBwcmVwYXJlKCk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29sbGVjdGlvbikgcmV0dXJuO1xyXG4gICAgICAgIGlmICghdGhpcy5jb25uZWN0b3IuZGF0YWJhc2UpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBZb3UgY2FuJ3QgdXNlIGNhY2hlIHdpdGhvdXQgbW9uZ28gY29ubmVjdGlvbiFgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jb2xsZWN0aW9uID0gdGhpcy5jb25uZWN0b3IuZGF0YWJhc2UuY29sbGVjdGlvbih0aGlzLmNvbmZpZy5yZXNvbHZlKFwiY2FjaGVDb2xsZWN0aW9uXCIpKTtcclxuICAgICAgICBhd2FpdCB0aGlzLmNvbGxlY3Rpb24uY3JlYXRlSW5kZXgoXHJcbiAgICAgICAgICAgIHtleHBpcmVzQXQ6IDF9LFxyXG4gICAgICAgICAgICB7ZXhwaXJlQWZ0ZXJTZWNvbmRzOiAwfVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc2V0KGtleTogc3RyaW5nLCB2YWx1ZTogYW55LCB0dGw/OiBudW1iZXIsIGV4cGlyYXRpb25UaW1lc3RhbXA6IG51bWJlciA9IG51bGwsIHRhZ3M6IGFueSA9IHt9KTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICBhd2FpdCB0aGlzLnByZXBhcmUoKTtcclxuICAgICAgICBjb25zdCBpdGVtOiBJQ2FjaGVJdGVtID0ge1xyXG4gICAgICAgICAgICBfaWQ6IGtleSxcclxuICAgICAgICAgICAgZGF0YTogYXdhaXQgdGhpcy5jYWNoZVByb2Nlc3Nvci5zZXJpYWxpemUodmFsdWUpLFxyXG4gICAgICAgICAgICB0YWdzOiBhd2FpdCB0aGlzLmNhY2hlUHJvY2Vzc29yLnNlcmlhbGl6ZSh0YWdzKSxcclxuICAgICAgICAgICAgZXhwaXJhdGlvblRpbWVzdGFtcCxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmICh0dGwpIHtcclxuICAgICAgICAgICAgY29uc3Qgbm93ID0gTWF0aC5yb3VuZChuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDApO1xyXG4gICAgICAgICAgICBpdGVtLmV4cGlyZXNBdCA9IG5vdyArIHR0bDtcclxuICAgICAgICB9XHJcbiAgICAgICAgYXdhaXQgdGhpcy5jb2xsZWN0aW9uLnVwZGF0ZU9uZSh7X2lkOiBrZXl9LCB7JHNldDogaXRlbX0sIHt1cHNlcnQ6IHRydWV9KTtcclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0KGtleTogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICBhd2FpdCB0aGlzLnByZXBhcmUoKTtcclxuICAgICAgICBsZXQgaXRlbSA9IGF3YWl0IHRoaXMuY29sbGVjdGlvbi5maW5kT25lKHtfaWQ6IGtleX0pO1xyXG4gICAgICAgIGNvbnN0IG5vdyA9IE1hdGgucm91bmQobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwKTtcclxuICAgICAgICBpZiAoaXRlbSAmJiBpdGVtLmV4cGlyZXNBdCAmJiBpdGVtLmV4cGlyZXNBdCA8IG5vdykge1xyXG4gICAgICAgICAgICBpdGVtID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFpdGVtKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2FjaGUgcHJvYmFibHkgZG9lc24ndCBleGlzdHMgd2l0aCBrZXk6ICR7a2V5fWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5jYWNoZVByb2Nlc3Nvci5kZXNlcmlhbGl6ZShpdGVtLmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldE9yU2V0KGtleTogc3RyaW5nLCB2YWx1ZUNiOiAoKSA9PiBQcm9taXNlPGFueT4sIHR0bD86IG51bWJlciwgZXhwaXJhdGlvblRpbWVzdGFtcDogbnVtYmVyID0gbnVsbCwgdGFnczogYW55ID0ge30pOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmdldChrZXkpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuc2V0KGtleSwgYXdhaXQgdmFsdWVDYigpLCB0dGwsIGV4cGlyYXRpb25UaW1lc3RhbXAsIHRhZ3MpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBkZWxldGUoa2V5OiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIGF3YWl0IHRoaXMucHJlcGFyZSgpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuY29sbGVjdGlvbi5kZWxldGVPbmUoe19pZDoga2V5fSk7XHJcbiAgICB9XHJcbn1cclxuIl19
@@ -0,0 +1,68 @@
1
+ import { __decorate, __metadata, __param } from "tslib";
2
+ import { injectAll, singleton } from "tsyringe";
3
+ import dotenv from "dotenv";
4
+ import { PARAMETER } from "../common-types";
5
+ import { colorize, ConsoleColor, convertValue, getType, isFunction } from "../utils";
6
+ let Configuration = class Configuration {
7
+ paramMap;
8
+ paramValues;
9
+ constructor(params) {
10
+ dotenv.config();
11
+ this.paramMap = {};
12
+ this.paramValues = {};
13
+ (params || []).forEach(param => this.add(param));
14
+ }
15
+ add(param) {
16
+ const existingParam = this.paramMap[param.name] || param;
17
+ existingParam.defaultValue = param.defaultValue;
18
+ existingParam.resolver = param.resolver || existingParam.resolver;
19
+ this.paramMap[param.name] = existingParam;
20
+ }
21
+ resolveValue(param, alreadyResolved) {
22
+ const envName = param.name.replace(/\.?([A-Z|0-9]+)/g, function (x, y) {
23
+ return "_" + y.toLowerCase();
24
+ }).replace(/\./gi, "_").replace(/^_/, "").toUpperCase();
25
+ const envValue = process.env[envName];
26
+ const helper = (p) => this.resolveInternal(p, alreadyResolved);
27
+ if (typeof envValue !== "undefined") {
28
+ const value = isFunction(param.resolver)
29
+ ? param.resolver(envValue, helper)
30
+ : convertValue(envValue, getType(param.defaultValue));
31
+ console.log(colorize(`Processing param value`, ConsoleColor.FgYellow), colorize(param.name, ConsoleColor.FgGreen), colorize(envName, ConsoleColor.FgBlue), `"${envValue}"`, value);
32
+ return value;
33
+ }
34
+ else if (isFunction(param.resolver)) {
35
+ const value = param.resolver(param.defaultValue, helper);
36
+ console.log(colorize(`Processing default param value`, ConsoleColor.FgYellow), colorize(param.name, ConsoleColor.FgGreen), param.defaultValue, value);
37
+ return value;
38
+ }
39
+ console.log(colorize(`Using default param value`, ConsoleColor.FgYellow), colorize(param.name, ConsoleColor.FgGreen), param.defaultValue);
40
+ return param.defaultValue;
41
+ }
42
+ hasParam(name) {
43
+ return !!this.paramMap[name];
44
+ }
45
+ resolve(name) {
46
+ return this.resolveInternal(name, []);
47
+ }
48
+ resolveInternal(name, alreadyResolved) {
49
+ if (alreadyResolved.includes(name)) {
50
+ throw new Error(`Circular dependency detected: ${alreadyResolved.join(" -> ")} -> ${name}`);
51
+ }
52
+ alreadyResolved.push(name);
53
+ const param = this.paramMap[name];
54
+ if (!param)
55
+ throw new Error(`Parameter with name: '${name}' does not exists in configuration`);
56
+ if (!(name in this.paramValues)) {
57
+ this.paramValues[name] = this.resolveValue(param, alreadyResolved);
58
+ }
59
+ return this.paramValues[name];
60
+ }
61
+ };
62
+ Configuration = __decorate([
63
+ singleton(),
64
+ __param(0, injectAll(PARAMETER)),
65
+ __metadata("design:paramtypes", [Array])
66
+ ], Configuration);
67
+ export { Configuration };
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9jb25maWd1cmF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFNBQVMsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUM5QyxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFFNUIsT0FBTyxFQUFDLFNBQVMsRUFBWSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JELE9BQU8sRUFBQyxRQUFRLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBRzVFLElBQU0sYUFBYSxHQUFuQixNQUFNLGFBQWE7SUFFWixRQUFRLENBQThCO0lBQ3RDLFdBQVcsQ0FBd0I7SUFFN0MsWUFBa0MsTUFBbUI7UUFDakQsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2hCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRVMsR0FBRyxDQUFDLEtBQWdCO1FBQzFCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQztRQUN6RCxhQUFhLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUM7UUFDaEQsYUFBYSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxJQUFJLGFBQWEsQ0FBQyxRQUFRLENBQUM7UUFDbEUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcs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QyxJQUFJLENBQUMsQ0FBQztRQUMzQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxLQUFLO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsSUFBSSxvQ0FBb0MsQ0FBQyxDQUFDO1FBQy9GLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQ3ZFLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEMsQ0FBQztDQUNKLENBQUE7QUEzRVksYUFBYTtJQUR6QixTQUFTLEVBQUU7SUFNSyxXQUFBLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQTs7R0FMeEIsYUFBYSxDQTJFekIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2luamVjdEFsbCwgc2luZ2xldG9ufSBmcm9tIFwidHN5cmluZ2VcIjtcclxuaW1wb3J0IGRvdGVudiBmcm9tIFwiZG90ZW52XCI7XHJcblxyXG5pbXBvcnQge1BBUkFNRVRFUiwgUGFyYW1ldGVyfSBmcm9tIFwiLi4vY29tbW9uLXR5cGVzXCI7XHJcbmltcG9ydCB7Y29sb3JpemUsIENvbnNvbGVDb2xvciwgY29udmVydFZhbHVlLCBnZXRUeXBlLCBpc0Z1bmN0aW9ufSBmcm9tIFwiLi4vdXRpbHNcIjtcclxuXHJcbkBzaW5nbGV0b24oKVxyXG5leHBvcnQgY2xhc3MgQ29uZmlndXJhdGlvbiB7XHJcblxyXG4gICAgcHJvdGVjdGVkIHBhcmFtTWFwOiB7W25hbWU6IHN0cmluZ106IFBhcmFtZXRlcn07XHJcbiAgICBwcm90ZWN0ZWQgcGFyYW1WYWx1ZXM6IHtbbmFtZTogc3RyaW5nXTogYW55fTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihAaW5qZWN0QWxsKFBBUkFNRVRFUikgcGFyYW1zOiBQYXJhbWV0ZXJbXSkge1xyXG4gICAgICAgIGRvdGVudi5jb25maWcoKTtcclxuICAgICAgICB0aGlzLnBhcmFtTWFwID0ge307XHJcbiAgICAgICAgdGhpcy5wYXJhbVZhbHVlcyA9IHt9O1xyXG4gICAgICAgIChwYXJhbXMgfHwgW10pLmZvckVhY2gocGFyYW0gPT4gdGhpcy5hZGQocGFyYW0pKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgYWRkKHBhcmFtOiBQYXJhbWV0ZXIpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBleGlzdGluZ1BhcmFtID0gdGhpcy5wYXJhbU1hcFtwYXJhbS5uYW1lXSB8fCBwYXJhbTtcclxuICAgICAgICBleGlzdGluZ1BhcmFtLmRlZmF1bHRWYWx1ZSA9IHBhcmFtLmRlZmF1bHRWYWx1ZTtcclxuICAgICAgICBleGlzdGluZ1BhcmFtLnJlc29sdmVyID0gcGFyYW0ucmVzb2x2ZXIgfHwgZXhpc3RpbmdQYXJhbS5yZXNvbHZlcjtcclxuICAgICAgICB0aGlzLnBhcmFtTWFwW3BhcmFtLm5hbWVdID0gZXhpc3RpbmdQYXJhbTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgcmVzb2x2ZVZhbHVlKHBhcmFtOiBQYXJhbWV0ZXIsIGFscmVhZHlSZXNvbHZlZDogc3RyaW5nW10pOiBhbnkge1xyXG4gICAgICAgIGNvbnN0IGVudk5hbWUgPSBwYXJhbS5uYW1lLnJlcGxhY2UoL1xcLj8oW0EtWnwwLTldKykvZywgZnVuY3Rpb24gKHgsIHkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiX1wiICsgeS50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgfSkucmVwbGFjZSgvXFwuL2dpLCBcIl9cIikucmVwbGFjZSgvXl8vLCBcIlwiKS50b1VwcGVyQ2FzZSgpO1xyXG4gICAgICAgIGNvbnN0IGVudlZhbHVlID0gcHJvY2Vzcy5lbnZbZW52TmFtZV07XHJcbiAgICAgICAgY29uc3QgaGVscGVyID0gKHA6IHN0cmluZykgPT4gdGhpcy5yZXNvbHZlSW50ZXJuYWwocCwgYWxyZWFkeVJlc29sdmVkKTtcclxuICAgICAgICBpZiAodHlwZW9mIGVudlZhbHVlICE9PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gaXNGdW5jdGlvbihwYXJhbS5yZXNvbHZlcilcclxuICAgICAgICAgICAgICAgID8gcGFyYW0ucmVzb2x2ZXIoZW52VmFsdWUsIGhlbHBlcilcclxuICAgICAgICAgICAgICAgIDogY29udmVydFZhbHVlKGVudlZhbHVlLCBnZXRUeXBlKHBhcmFtLmRlZmF1bHRWYWx1ZSkpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICAgICAgICAgIGNvbG9yaXplKGBQcm9jZXNzaW5nIHBhcmFtIHZhbHVlYCwgQ29uc29sZUNvbG9yLkZnWWVsbG93KSxcclxuICAgICAgICAgICAgICAgIGNvbG9yaXplKHBhcmFtLm5hbWUsIENvbnNvbGVDb2xvci5GZ0dyZWVuKSxcclxuICAgICAgICAgICAgICAgIGNvbG9yaXplKGVudk5hbWUsIENvbnNvbGVDb2xvci5GZ0JsdWUpLFxyXG4gICAgICAgICAgICAgICAgYFwiJHtlbnZWYWx1ZX1cImAsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgICAgfSBlbHNlIGlmIChpc0Z1bmN0aW9uKHBhcmFtLnJlc29sdmVyKSkge1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHBhcmFtLnJlc29sdmVyKHBhcmFtLmRlZmF1bHRWYWx1ZSwgaGVscGVyKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgICAgICAgICBjb2xvcml6ZShgUHJvY2Vzc2luZyBkZWZhdWx0IHBhcmFtIHZhbHVlYCwgQ29uc29sZUNvbG9yLkZnWWVsbG93KSxcclxuICAgICAgICAgICAgICAgIGNvbG9yaXplKHBhcmFtLm5hbWUsIENvbnNvbGVDb2xvci5GZ0dyZWVuKSxcclxuICAgICAgICAgICAgICAgIHBhcmFtLmRlZmF1bHRWYWx1ZSxcclxuICAgICAgICAgICAgICAgIHZhbHVlXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgICAgIGNvbG9yaXplKGBVc2luZyBkZWZhdWx0IHBhcmFtIHZhbHVlYCwgQ29uc29sZUNvbG9yLkZnWWVsbG93KSxcclxuICAgICAgICAgICAgY29sb3JpemUocGFyYW0ubmFtZSwgQ29uc29sZUNvbG9yLkZnR3JlZW4pLFxyXG4gICAgICAgICAgICBwYXJhbS5kZWZhdWx0VmFsdWUsXHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gcGFyYW0uZGVmYXVsdFZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIGhhc1BhcmFtKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhIXRoaXMucGFyYW1NYXBbbmFtZV07XHJcbiAgICB9XHJcblxyXG4gICAgcmVzb2x2ZShuYW1lOiBzdHJpbmcpOiBhbnkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlc29sdmVJbnRlcm5hbChuYW1lLCBbXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHJlc29sdmVJbnRlcm5hbChuYW1lOiBzdHJpbmcsIGFscmVhZHlSZXNvbHZlZDogc3RyaW5nW10pOiBhbnkge1xyXG4gICAgICAgIGlmIChhbHJlYWR5UmVzb2x2ZWQuaW5jbHVkZXMobmFtZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDaXJjdWxhciBkZXBlbmRlbmN5IGRldGVjdGVkOiAke2FscmVhZHlSZXNvbHZlZC5qb2luKFwiIC0+IFwiKX0gLT4gJHtuYW1lfWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhbHJlYWR5UmVzb2x2ZWQucHVzaChuYW1lKTtcclxuICAgICAgICBjb25zdCBwYXJhbSA9IHRoaXMucGFyYW1NYXBbbmFtZV07XHJcbiAgICAgICAgaWYgKCFwYXJhbSkgdGhyb3cgbmV3IEVycm9yKGBQYXJhbWV0ZXIgd2l0aCBuYW1lOiAnJHtuYW1lfScgZG9lcyBub3QgZXhpc3RzIGluIGNvbmZpZ3VyYXRpb25gKTtcclxuICAgICAgICBpZiAoIShuYW1lIGluIHRoaXMucGFyYW1WYWx1ZXMpKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGFyYW1WYWx1ZXNbbmFtZV0gPSB0aGlzLnJlc29sdmVWYWx1ZShwYXJhbSwgYWxyZWFkeVJlc29sdmVkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyYW1WYWx1ZXNbbmFtZV07XHJcbiAgICB9XHJcbn1cclxuIl19
@@ -0,0 +1,27 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import { injectable } from "tsyringe";
3
+ import { GridFSBucket as BucketImpl } from 'mongodb/lib/gridfs';
4
+ import { MongoConnector } from "../mongo-connector";
5
+ let AssetGridDriver = class AssetGridDriver {
6
+ metaCollection;
7
+ bucket;
8
+ constructor(connector) {
9
+ this.bucket = new BucketImpl(connector.database, { bucketName: 'assets' });
10
+ this.metaCollection = "assets.files";
11
+ }
12
+ openUploadStream(filename, opts) {
13
+ return this.bucket.openUploadStream(filename, opts);
14
+ }
15
+ openDownloadStream(id) {
16
+ return this.bucket.openDownloadStream(id);
17
+ }
18
+ delete(id) {
19
+ return this.bucket.delete(id);
20
+ }
21
+ };
22
+ AssetGridDriver = __decorate([
23
+ injectable(),
24
+ __metadata("design:paramtypes", [MongoConnector])
25
+ ], AssetGridDriver);
26
+ export { AssetGridDriver };
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQtZ3JpZC5kcml2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc2VydmljZXMvZHJpdmVycy9hc3NldC1ncmlkLmRyaXZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUVwQyxPQUFPLEVBQUMsWUFBWSxJQUFJLFVBQVUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRzlELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUczQyxJQUFNLGVBQWUsR0FBckIsTUFBTSxlQUFlO0lBQ2YsY0FBYyxDQUFTO0lBRXRCLE1BQU0sQ0FBZTtJQUUvQixZQUFZLFNBQXlCO1FBQ2pDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxVQUFVLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxFQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUMsQ0FBQyxDQUFDO1FBQ3pFLElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxRQUFnQixFQUFFLElBQXVCO1FBQ3RELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVELGtCQUFrQixDQUFDLEVBQVk7UUFDM0IsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxNQUFNLENBQUMsRUFBWTtRQUNmLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbEMsQ0FBQztDQUNKLENBQUE7QUFyQlksZUFBZTtJQUQzQixVQUFVLEVBQUU7cUNBTWMsY0FBYztHQUw1QixlQUFlLENBcUIzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7aW5qZWN0YWJsZX0gZnJvbSBcInRzeXJpbmdlXCI7XG5pbXBvcnQge0dyaWRGU0J1Y2tldCwgT2JqZWN0SWR9IGZyb20gJ21vbmdvZGInO1xuaW1wb3J0IHtHcmlkRlNCdWNrZXQgYXMgQnVja2V0SW1wbH0gZnJvbSAnbW9uZ29kYi9saWIvZ3JpZGZzJztcblxuaW1wb3J0IHtJQXNzZXREcml2ZXIsIElBc3NldFVwbG9hZE9wdHN9IGZyb20gJy4uLy4uL2NvbW1vbi10eXBlcyc7XG5pbXBvcnQge01vbmdvQ29ubmVjdG9yfSBmcm9tIFwiLi4vbW9uZ28tY29ubmVjdG9yXCI7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBc3NldEdyaWREcml2ZXIgaW1wbGVtZW50cyBJQXNzZXREcml2ZXIge1xuICAgIHJlYWRvbmx5IG1ldGFDb2xsZWN0aW9uOiBzdHJpbmc7XG5cbiAgICBwcm90ZWN0ZWQgYnVja2V0OiBHcmlkRlNCdWNrZXQ7XG5cbiAgICBjb25zdHJ1Y3Rvcihjb25uZWN0b3I6IE1vbmdvQ29ubmVjdG9yKSB7XG4gICAgICAgIHRoaXMuYnVja2V0ID0gbmV3IEJ1Y2tldEltcGwoY29ubmVjdG9yLmRhdGFiYXNlLCB7YnVja2V0TmFtZTogJ2Fzc2V0cyd9KTtcbiAgICAgICAgdGhpcy5tZXRhQ29sbGVjdGlvbiA9IFwiYXNzZXRzLmZpbGVzXCI7XG4gICAgfVxuXG4gICAgb3BlblVwbG9hZFN0cmVhbShmaWxlbmFtZTogc3RyaW5nLCBvcHRzPzogSUFzc2V0VXBsb2FkT3B0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5idWNrZXQub3BlblVwbG9hZFN0cmVhbShmaWxlbmFtZSwgb3B0cyk7XG4gICAgfVxuXG4gICAgb3BlbkRvd25sb2FkU3RyZWFtKGlkOiBPYmplY3RJZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5idWNrZXQub3BlbkRvd25sb2FkU3RyZWFtKGlkKTtcbiAgICB9XG5cbiAgICBkZWxldGUoaWQ6IE9iamVjdElkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJ1Y2tldC5kZWxldGUoaWQpO1xuICAgIH1cbn1cbiJdfQ==
@@ -0,0 +1,41 @@
1
+ import { __decorate, __metadata, __param } from "tslib";
2
+ import { createReadStream, createWriteStream, mkdirSync } from 'fs';
3
+ import { inject, injectable } from "tsyringe";
4
+ import { rm, writeFile } from 'fs/promises';
5
+ import { Types } from 'mongoose';
6
+ import { LOCAL_DIR } from '../../common-types';
7
+ let AssetLocalDriver = class AssetLocalDriver {
8
+ dir;
9
+ metaCollection;
10
+ constructor(dir) {
11
+ this.dir = dir;
12
+ this.metaCollection = "assets.local";
13
+ }
14
+ openUploadStream(filename, opts) {
15
+ const id = new Types.ObjectId();
16
+ const dir = `${this.dir}/${id.toHexString()}`;
17
+ mkdirSync(dir, { recursive: true });
18
+ const stream = createWriteStream(`${dir}/file.bin`);
19
+ stream.id = id;
20
+ stream.done = false;
21
+ stream.on('finish', () => {
22
+ writeFile(`${dir}/filename.txt`, filename);
23
+ writeFile(`${dir}/metadata.json`, JSON.stringify(opts?.metadata || {}));
24
+ stream.done = true;
25
+ });
26
+ return stream;
27
+ }
28
+ openDownloadStream(id) {
29
+ return createReadStream(`${this.dir}/${id.toHexString()}/file.bin`, { autoClose: true, emitClose: true });
30
+ }
31
+ delete(id) {
32
+ return rm(`${this.dir}/${id.toHexString()}`, { recursive: true, force: true });
33
+ }
34
+ };
35
+ AssetLocalDriver = __decorate([
36
+ injectable(),
37
+ __param(0, inject(LOCAL_DIR)),
38
+ __metadata("design:paramtypes", [String])
39
+ ], AssetLocalDriver);
40
+ export { AssetLocalDriver };
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQtbG9jYWwuZHJpdmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3NlcnZpY2VzL2RyaXZlcnMvYXNzZXQtbG9jYWwuZHJpdmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFDLE1BQU0sSUFBSSxDQUFDO0FBQ2xFLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQzVDLE9BQU8sRUFBQyxFQUFFLEVBQUUsU0FBUyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRTFDLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFFL0IsT0FBTyxFQUFxRCxTQUFTLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUcxRixJQUFNLGdCQUFnQixHQUF0QixNQUFNLGdCQUFnQjtJQUdnQjtJQUZoQyxjQUFjLENBQVM7SUFFaEMsWUFBeUMsR0FBVztRQUFYLFFBQUcsR0FBSCxHQUFHLENBQVE7UUFDaEQsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7SUFDekMsQ0FBQztJQUVELGdCQUFnQixDQUFDLFFBQWdCLEVBQUUsSUFBdUI7UUFDdEQsTUFBTSxFQUFFLEdBQUcsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDaEMsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO1FBQzlDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNwQyxNQUFNLE1BQU0sR0FBRyxpQkFBaUIsQ0FBQyxHQUFHLEdBQUcsV0FBVyxDQUF1QixDQUFDO1FBQzFFLE1BQU0sQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ2YsTUFBTSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7UUFDcEIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFO1lBQ3JCLFNBQVMsQ0FBQyxHQUFHLEdBQUcsZUFBZSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQzNDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDeEUsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDdkIsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRUQsa0JBQWtCLENBQUMsRUFBWTtRQUMzQixPQUFPLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRSxFQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7SUFDNUcsQ0FBQztJQUVELE1BQU0sQ0FBQyxFQUFZO1FBQ2YsT0FBTyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNuRixDQUFDO0NBQ0osQ0FBQTtBQTdCWSxnQkFBZ0I7SUFENUIsVUFBVSxFQUFFO0lBSUksV0FBQSxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUE7O0dBSHJCLGdCQUFnQixDQTZCNUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2NyZWF0ZVJlYWRTdHJlYW0sIGNyZWF0ZVdyaXRlU3RyZWFtLCBta2RpclN5bmN9IGZyb20gJ2ZzJztcbmltcG9ydCB7aW5qZWN0LCBpbmplY3RhYmxlfSBmcm9tIFwidHN5cmluZ2VcIjtcbmltcG9ydCB7cm0sIHdyaXRlRmlsZX0gZnJvbSAnZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHR5cGUge09iamVjdElkfSBmcm9tICdtb25nb2RiJztcbmltcG9ydCB7VHlwZXN9IGZyb20gJ21vbmdvb3NlJztcblxuaW1wb3J0IHtJQXNzZXREcml2ZXIsIElBc3NldFVwbG9hZE9wdHMsIElBc3NldFVwbG9hZFN0cmVhbSwgTE9DQUxfRElSfSBmcm9tICcuLi8uLi9jb21tb24tdHlwZXMnO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQXNzZXRMb2NhbERyaXZlciBpbXBsZW1lbnRzIElBc3NldERyaXZlciB7XG4gICAgcmVhZG9ubHkgbWV0YUNvbGxlY3Rpb246IHN0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKEBpbmplY3QoTE9DQUxfRElSKSBwcm90ZWN0ZWQgZGlyOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5tZXRhQ29sbGVjdGlvbiA9IFwiYXNzZXRzLmxvY2FsXCI7XG4gICAgfVxuXG4gICAgb3BlblVwbG9hZFN0cmVhbShmaWxlbmFtZTogc3RyaW5nLCBvcHRzPzogSUFzc2V0VXBsb2FkT3B0cykge1xuICAgICAgICBjb25zdCBpZCA9IG5ldyBUeXBlcy5PYmplY3RJZCgpO1xuICAgICAgICBjb25zdCBkaXIgPSBgJHt0aGlzLmRpcn0vJHtpZC50b0hleFN0cmluZygpfWA7XG4gICAgICAgIG1rZGlyU3luYyhkaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICBjb25zdCBzdHJlYW0gPSBjcmVhdGVXcml0ZVN0cmVhbShgJHtkaXJ9L2ZpbGUuYmluYCkgYXMgSUFzc2V0VXBsb2FkU3RyZWFtO1xuICAgICAgICBzdHJlYW0uaWQgPSBpZDtcbiAgICAgICAgc3RyZWFtLmRvbmUgPSBmYWxzZTtcbiAgICAgICAgc3RyZWFtLm9uKCdmaW5pc2gnLCAoKSA9PiB7XG4gICAgICAgICAgICB3cml0ZUZpbGUoYCR7ZGlyfS9maWxlbmFtZS50eHRgLCBmaWxlbmFtZSk7XG4gICAgICAgICAgICB3cml0ZUZpbGUoYCR7ZGlyfS9tZXRhZGF0YS5qc29uYCwgSlNPTi5zdHJpbmdpZnkob3B0cz8ubWV0YWRhdGEgfHwge30pKTtcbiAgICAgICAgICAgIHN0cmVhbS5kb25lID0gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzdHJlYW07XG4gICAgfVxuXG4gICAgb3BlbkRvd25sb2FkU3RyZWFtKGlkOiBPYmplY3RJZCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlUmVhZFN0cmVhbShgJHt0aGlzLmRpcn0vJHtpZC50b0hleFN0cmluZygpfS9maWxlLmJpbmAsIHthdXRvQ2xvc2U6IHRydWUsIGVtaXRDbG9zZTogdHJ1ZX0pO1xuICAgIH1cblxuICAgIGRlbGV0ZShpZDogT2JqZWN0SWQpIHtcbiAgICAgICAgcmV0dXJuIHJtKGAke3RoaXMuZGlyfS8ke2lkLnRvSGV4U3RyaW5nKCl9YCwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pO1xuICAgIH1cbn1cbiJdfQ==
@@ -0,0 +1,13 @@
1
+ import { __decorate } from "tslib";
2
+ import { injectable, Lifecycle, scoped } from "tsyringe";
3
+ let EndpointProvider = class EndpointProvider {
4
+ async configure(app) {
5
+ console.log(`Express app is mounted to: ${app.mountpath}`);
6
+ }
7
+ };
8
+ EndpointProvider = __decorate([
9
+ injectable(),
10
+ scoped(Lifecycle.ContainerScoped)
11
+ ], EndpointProvider);
12
+ export { EndpointProvider };
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5kcG9pbnQtcHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvZW5kcG9pbnQtcHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUtoRCxJQUFNLGdCQUFnQixHQUF0QixNQUFNLGdCQUFnQjtJQUV6QixLQUFLLENBQUMsU0FBUyxDQUFDLEdBQVk7UUFDeEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyw4QkFBOEIsR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDL0QsQ0FBQztDQUNKLENBQUE7QUFMWSxnQkFBZ0I7SUFGNUIsVUFBVSxFQUFFO0lBQ1osTUFBTSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUM7R0FDckIsZ0JBQWdCLENBSzVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtpbmplY3RhYmxlLCBMaWZlY3ljbGUsIHNjb3BlZH0gZnJvbSBcInRzeXJpbmdlXCI7XHJcbmltcG9ydCB7RXhwcmVzc30gZnJvbSBcImV4cHJlc3NcIjtcclxuXHJcbkBpbmplY3RhYmxlKClcclxuQHNjb3BlZChMaWZlY3ljbGUuQ29udGFpbmVyU2NvcGVkKVxyXG5leHBvcnQgY2xhc3MgRW5kcG9pbnRQcm92aWRlciB7XHJcblxyXG4gICAgYXN5bmMgY29uZmlndXJlKGFwcDogRXhwcmVzcyk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coYEV4cHJlc3MgYXBwIGlzIG1vdW50ZWQgdG86ICR7YXBwLm1vdW50cGF0aH1gKTtcclxuICAgIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,61 @@
1
+ import { isString, streamToBuffer, toImage } from "../../utils";
2
+ import { BaseEntity } from "./base-entity";
3
+ export class Asset extends BaseEntity {
4
+ driver;
5
+ get filename() {
6
+ return this.data.filename;
7
+ }
8
+ get contentType() {
9
+ return this.data.contentType;
10
+ }
11
+ get metadata() {
12
+ return this.data.metadata;
13
+ }
14
+ get stream() {
15
+ return this.driver.openDownloadStream(this.oid);
16
+ }
17
+ constructor(id, data, collection, driver) {
18
+ super(id, data, collection);
19
+ this.driver = driver;
20
+ }
21
+ async unlink() {
22
+ try {
23
+ await this.driver.delete(this.oid);
24
+ await this.collection.deleteOne({ _id: this.oid });
25
+ }
26
+ catch (error) {
27
+ let err = error;
28
+ if (error) {
29
+ err = error.message || error || "";
30
+ if (!isString(err) || !err.startsWith("FileNotFound")) {
31
+ throw err;
32
+ }
33
+ }
34
+ }
35
+ return this.id;
36
+ }
37
+ async setMeta(metadata) {
38
+ metadata = Object.assign(this.metadata, metadata || {});
39
+ await this.collection.updateOne({ _id: this.oid }, { $set: { metadata } });
40
+ }
41
+ getBuffer() {
42
+ return streamToBuffer(this.stream);
43
+ }
44
+ async download(metadata) {
45
+ metadata = Object.assign(this.metadata, metadata || {});
46
+ metadata.downloadCount = isNaN(metadata.downloadCount) || !metadata.firstDownload
47
+ ? 1
48
+ : metadata.downloadCount + 1;
49
+ metadata.firstDownload = metadata.firstDownload || new Date();
50
+ metadata.lastDownload = new Date();
51
+ await this.collection.updateOne({ _id: this.oid }, { $set: { metadata } });
52
+ return this.stream;
53
+ }
54
+ async getImage(params = null) {
55
+ return toImage(this.stream, params, this.metadata);
56
+ }
57
+ async downloadImage(params, metadata) {
58
+ return toImage(await this.download(metadata), params, this.metadata);
59
+ }
60
+ }
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc2VydmljZXMvZW50aXRpZXMvYXNzZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBS0EsT0FBTyxFQUFDLFFBQVEsRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQzlELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFekMsTUFBTSxPQUFPLEtBQU0sU0FBUSxVQUFrQjtJQXFCbkI7SUFuQnRCLElBQUksUUFBUTtRQUNSLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDOUIsQ0FBQztJQUVELElBQUksV0FBVztRQUNYLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDakMsQ0FBQztJQUVELElBQUksUUFBUTtRQUNSLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDOUIsQ0FBQztJQUVELElBQUksTUFBTTtRQUNOLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELFlBQVksRUFBWSxFQUNaLElBQXFCLEVBQ3JCLFVBQXNCLEVBQ1osTUFBb0I7UUFDdEMsS0FBSyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFEVixXQUFNLEdBQU4sTUFBTSxDQUFjO0lBRTFDLENBQUM7SUFFRCxLQUFLLENBQUMsTUFBTTtRQUNSLElBQUksQ0FBQztZQUNELE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ25DLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBQyxDQUFDLENBQUM7UUFDckQsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDYixJQUFJLEdBQUcsR0FBRyxLQUFZLENBQUM7WUFDdkIsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDUixHQUFHLEdBQUcsS0FBSyxDQUFDLE9BQU8sSUFBSSxLQUFLLElBQUksRUFBRSxDQUFDO2dCQUNuQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO29CQUNwRCxNQUFNLEdBQUcsQ0FBQztnQkFDZCxDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBNkI7UUFDdkMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxRQUFRLElBQUksRUFBRSxDQUFDLENBQUM7UUFDeEQsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxJQUFJLEVBQUUsRUFBQyxRQUFRLEVBQUMsRUFBQyxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVELFNBQVM7UUFDTCxPQUFPLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBcUI7UUFDaEMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxRQUFRLElBQUksRUFBRSxDQUFDLENBQUM7UUFDeEQsUUFBUSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWE7WUFDN0UsQ0FBQyxDQUFDLENBQUM7WUFDSCxDQUFDLENBQUMsUUFBUSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUM7UUFDakMsUUFBUSxDQUFDLGFBQWEsR0FBRyxRQUFRLENBQUMsYUFBYSxJQUFJLElBQUksSUFBSSxFQUFFLENBQUM7UUFDOUQsUUFBUSxDQUFDLFlBQVksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ25DLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsSUFBSSxFQUFFLEVBQUMsUUFBUSxFQUFDLEVBQUMsQ0FBQyxDQUFDO1FBQ3JFLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRUQsS0FBSyxDQUFDLFFBQVEsQ0FBQyxTQUE0QixJQUFJO1FBQzNDLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsS0FBSyxDQUFDLGFBQWEsQ0FBQyxNQUEwQixFQUFFLFFBQXFCO1FBQ2pFLE9BQU8sT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7UmVhZGFibGV9IGZyb20gXCJzdHJlYW1cIjtcclxuaW1wb3J0IHtDb2xsZWN0aW9ufSBmcm9tIFwibW9uZ29kYlwiO1xyXG5pbXBvcnQge09iamVjdElkfSBmcm9tIFwiYnNvblwiO1xyXG5cclxuaW1wb3J0IHtJQXNzZXQsIElBc3NldERyaXZlciwgSUFzc2V0SW1hZ2VQYXJhbXMsIElBc3NldE1ldGF9IGZyb20gXCIuLi8uLi9jb21tb24tdHlwZXNcIjtcclxuaW1wb3J0IHtpc1N0cmluZywgc3RyZWFtVG9CdWZmZXIsIHRvSW1hZ2V9IGZyb20gXCIuLi8uLi91dGlsc1wiO1xyXG5pbXBvcnQge0Jhc2VFbnRpdHl9IGZyb20gXCIuL2Jhc2UtZW50aXR5XCI7XHJcblxyXG5leHBvcnQgY2xhc3MgQXNzZXQgZXh0ZW5kcyBCYXNlRW50aXR5PElBc3NldD4gaW1wbGVtZW50cyBJQXNzZXQge1xyXG5cclxuICAgIGdldCBmaWxlbmFtZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEuZmlsZW5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGNvbnRlbnRUeXBlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5jb250ZW50VHlwZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbWV0YWRhdGEoKTogSUFzc2V0TWV0YSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5tZXRhZGF0YTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc3RyZWFtKCk6IFJlYWRhYmxlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kcml2ZXIub3BlbkRvd25sb2FkU3RyZWFtKHRoaXMub2lkKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3RvcihpZDogT2JqZWN0SWQsXHJcbiAgICAgICAgICAgICAgICBkYXRhOiBQYXJ0aWFsPElBc3NldD4sXHJcbiAgICAgICAgICAgICAgICBjb2xsZWN0aW9uOiBDb2xsZWN0aW9uLFxyXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIGRyaXZlcjogSUFzc2V0RHJpdmVyKSB7XHJcbiAgICAgICAgc3VwZXIoaWQsIGRhdGEsIGNvbGxlY3Rpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHVubGluaygpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZHJpdmVyLmRlbGV0ZSh0aGlzLm9pZCk7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY29sbGVjdGlvbi5kZWxldGVPbmUoe19pZDogdGhpcy5vaWR9KTtcclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBsZXQgZXJyID0gZXJyb3IgYXMgYW55O1xyXG4gICAgICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIGVyciA9IGVycm9yLm1lc3NhZ2UgfHwgZXJyb3IgfHwgXCJcIjtcclxuICAgICAgICAgICAgICAgIGlmICghaXNTdHJpbmcoZXJyKSB8fCAhZXJyLnN0YXJ0c1dpdGgoXCJGaWxlTm90Rm91bmRcIikpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaWQ7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc2V0TWV0YShtZXRhZGF0YTogUGFydGlhbDxJQXNzZXRNZXRhPik6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgbWV0YWRhdGEgPSBPYmplY3QuYXNzaWduKHRoaXMubWV0YWRhdGEsIG1ldGFkYXRhIHx8IHt9KTtcclxuICAgICAgICBhd2FpdCB0aGlzLmNvbGxlY3Rpb24udXBkYXRlT25lKHtfaWQ6IHRoaXMub2lkfSwgeyRzZXQ6IHttZXRhZGF0YX19KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRCdWZmZXIoKTogUHJvbWlzZTxCdWZmZXI+IHtcclxuICAgICAgICByZXR1cm4gc3RyZWFtVG9CdWZmZXIodGhpcy5zdHJlYW0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGRvd25sb2FkKG1ldGFkYXRhPzogSUFzc2V0TWV0YSk6IFByb21pc2U8UmVhZGFibGU+IHtcclxuICAgICAgICBtZXRhZGF0YSA9IE9iamVjdC5hc3NpZ24odGhpcy5tZXRhZGF0YSwgbWV0YWRhdGEgfHwge30pO1xyXG4gICAgICAgIG1ldGFkYXRhLmRvd25sb2FkQ291bnQgPSBpc05hTihtZXRhZGF0YS5kb3dubG9hZENvdW50KSB8fCAhbWV0YWRhdGEuZmlyc3REb3dubG9hZFxyXG4gICAgICAgICAgICA/IDFcclxuICAgICAgICAgICAgOiBtZXRhZGF0YS5kb3dubG9hZENvdW50ICsgMTtcclxuICAgICAgICBtZXRhZGF0YS5maXJzdERvd25sb2FkID0gbWV0YWRhdGEuZmlyc3REb3dubG9hZCB8fCBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIG1ldGFkYXRhLmxhc3REb3dubG9hZCA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5jb2xsZWN0aW9uLnVwZGF0ZU9uZSh7X2lkOiB0aGlzLm9pZH0sIHskc2V0OiB7bWV0YWRhdGF9fSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RyZWFtO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldEltYWdlKHBhcmFtczogSUFzc2V0SW1hZ2VQYXJhbXMgPSBudWxsKTogUHJvbWlzZTxSZWFkYWJsZT4ge1xyXG4gICAgICAgIHJldHVybiB0b0ltYWdlKHRoaXMuc3RyZWFtLCBwYXJhbXMsIHRoaXMubWV0YWRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGRvd25sb2FkSW1hZ2UocGFyYW1zPzogSUFzc2V0SW1hZ2VQYXJhbXMsIG1ldGFkYXRhPzogSUFzc2V0TWV0YSk6IFByb21pc2U8UmVhZGFibGU+IHtcclxuICAgICAgICByZXR1cm4gdG9JbWFnZShhd2FpdCB0aGlzLmRvd25sb2FkKG1ldGFkYXRhKSwgcGFyYW1zLCB0aGlzLm1ldGFkYXRhKTtcclxuICAgIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,32 @@
1
+ export class BaseEntity {
2
+ oid;
3
+ data;
4
+ collection;
5
+ get id() {
6
+ return this.oid.toHexString();
7
+ }
8
+ deleted;
9
+ constructor(oid, data, collection) {
10
+ this.oid = oid;
11
+ this.data = data;
12
+ this.collection = collection;
13
+ }
14
+ save() {
15
+ return this.collection.updateOne({ _id: this.oid }, { $set: this.toJSON() }, { upsert: true });
16
+ }
17
+ async load() {
18
+ const res = await this.collection.findOne({ _id: this.oid });
19
+ this.deleted = !res;
20
+ this.data = res || {};
21
+ return this;
22
+ }
23
+ toJSON() {
24
+ const ret = Object.assign({}, this.data);
25
+ delete ret._id;
26
+ ret.id = this.id;
27
+ ret.updatedAt = new Date();
28
+ ret.createdAt = ret.createdAt || ret.updatedAt;
29
+ return ret;
30
+ }
31
+ }
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1lbnRpdHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc2VydmljZXMvZW50aXRpZXMvYmFzZS1lbnRpdHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsTUFBTSxPQUFPLFVBQVU7SUFRRTtJQUNDO0lBQ0E7SUFSdEIsSUFBSSxFQUFFO1FBQ0YsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFUyxPQUFPLENBQVU7SUFFM0IsWUFBcUIsR0FBYSxFQUNaLElBQWdCLEVBQ2hCLFVBQTJCO1FBRjVCLFFBQUcsR0FBSCxHQUFHLENBQVU7UUFDWixTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLGVBQVUsR0FBVixVQUFVLENBQWlCO0lBQ2pELENBQUM7SUFFRCxJQUFJO1FBQ0EsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFDLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztJQUM3RixDQUFDO0lBRUQsS0FBSyxDQUFDLElBQUk7UUFDTixNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDcEIsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLElBQUksRUFBRSxDQUFDO1FBQ3RCLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxNQUFNO1FBQ0YsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBUSxDQUFDO1FBQ2hELE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQztRQUNmLEdBQUcsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNqQixHQUFHLENBQUMsU0FBUyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDM0IsR0FBRyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUMsU0FBUyxJQUFJLEdBQUcsQ0FBQyxTQUFTLENBQUM7UUFDL0MsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbGxlY3Rpb259IGZyb20gXCJtb25nb2RiXCI7XHJcbmltcG9ydCB7T2JqZWN0SWR9IGZyb20gXCJic29uXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgQmFzZUVudGl0eTxUPiB7XHJcblxyXG4gICAgZ2V0IGlkKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMub2lkLnRvSGV4U3RyaW5nKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGRlbGV0ZWQ6IGJvb2xlYW47XHJcblxyXG4gICAgY29uc3RydWN0b3IocmVhZG9ubHkgb2lkOiBPYmplY3RJZCxcclxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCBkYXRhOiBQYXJ0aWFsPFQ+LFxyXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIGNvbGxlY3Rpb246IENvbGxlY3Rpb248YW55Pikge1xyXG4gICAgfVxyXG5cclxuICAgIHNhdmUoKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb2xsZWN0aW9uLnVwZGF0ZU9uZSh7X2lkOiB0aGlzLm9pZH0sIHskc2V0OiB0aGlzLnRvSlNPTigpfSwge3Vwc2VydDogdHJ1ZX0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGxvYWQoKTogUHJvbWlzZTx0aGlzPiB7XHJcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5jb2xsZWN0aW9uLmZpbmRPbmUoe19pZDogdGhpcy5vaWR9KTtcclxuICAgICAgICB0aGlzLmRlbGV0ZWQgPSAhcmVzO1xyXG4gICAgICAgIHRoaXMuZGF0YSA9IHJlcyB8fCB7fTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICB0b0pTT04oKTogYW55IHtcclxuICAgICAgICBjb25zdCByZXQgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmRhdGEpIGFzIGFueTtcclxuICAgICAgICBkZWxldGUgcmV0Ll9pZDtcclxuICAgICAgICByZXQuaWQgPSB0aGlzLmlkO1xyXG4gICAgICAgIHJldC51cGRhdGVkQXQgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIHJldC5jcmVhdGVkQXQgPSByZXQuY3JlYXRlZEF0IHx8IHJldC51cGRhdGVkQXQ7XHJcbiAgICAgICAgcmV0dXJuIHJldDtcclxuICAgIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,87 @@
1
+ import { gunzipPromised } from "../../utils";
2
+ import { BaseEntity } from "./base-entity";
3
+ export class LazyAsset extends BaseEntity {
4
+ logger;
5
+ assets;
6
+ progresses;
7
+ get jobName() {
8
+ return this.data.jobName;
9
+ }
10
+ get jobParams() {
11
+ return this.data.jobParams;
12
+ }
13
+ get jobQue() {
14
+ return this.data.jobQue;
15
+ }
16
+ get createdAt() {
17
+ return this.data.createdAt;
18
+ }
19
+ get updatedAt() {
20
+ return this.data.updatedAt;
21
+ }
22
+ get progressId() {
23
+ return this.data.progressId;
24
+ }
25
+ get assetId() {
26
+ return this.data.assetId;
27
+ }
28
+ constructor(id, data, collection, logger, assets, progresses) {
29
+ super(id, data, collection);
30
+ this.logger = logger;
31
+ this.assets = assets;
32
+ this.progresses = progresses;
33
+ }
34
+ async unlink() {
35
+ await this.load();
36
+ if (!this.progressId) {
37
+ await this.collection.deleteOne({ _id: this.oid });
38
+ }
39
+ return this.assets.unlink(this.assetId);
40
+ }
41
+ startWorking() {
42
+ this.load().then(() => {
43
+ if (this.deleted)
44
+ return;
45
+ this.progresses.get(this.progressId).then(p => {
46
+ p?.cancel();
47
+ });
48
+ this.startWorkingOnAsset(false).then(() => {
49
+ this.logger.log("lazy-assets", `Started working on lazy asset: ${this.id}`);
50
+ }).catch(reason => {
51
+ this.logger.log("lazy-assets", `Can't start working on lazy asset: ${this.id}\nReason: ${reason}`);
52
+ });
53
+ });
54
+ }
55
+ async loadAsset() {
56
+ await this.load();
57
+ if (this.deleted)
58
+ return null;
59
+ if (this.assetId) {
60
+ return this.assets.read(this.assetId);
61
+ }
62
+ if (this.progressId) {
63
+ await this.progresses.waitToFinish(this.progressId);
64
+ return this.loadAsset();
65
+ }
66
+ await this.startWorkingOnAsset(true);
67
+ return this.loadAsset();
68
+ }
69
+ async writeAsset(asset) {
70
+ this.data.updatedAt = new Date();
71
+ this.data.assetId = asset.id;
72
+ await asset.setMeta({ lazyId: this.id });
73
+ await this.save();
74
+ return asset;
75
+ }
76
+ async startWorkingOnAsset(fromLoad) {
77
+ const oldAsset = this.data.assetId;
78
+ this.data.updatedAt = new Date();
79
+ this.data.progressId = (await this.progresses.create()).id;
80
+ this.data.assetId = null;
81
+ await this.save();
82
+ await this.assets.unlink(oldAsset);
83
+ const jobParams = JSON.parse(await gunzipPromised(this.data.jobParams));
84
+ await this.progresses.jobMan.enqueueWithName(this.data.jobName, { ...jobParams, lazyId: this.id, fromLoad });
85
+ }
86
+ }
87
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF6eS1hc3NldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9lbnRpdGllcy9sYXp5LWFzc2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFHM0MsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUd6QyxNQUFNLE9BQU8sU0FBVSxTQUFRLFVBQXNCO0lBaUMzQjtJQUNBO0lBQ0E7SUFqQ3RCLElBQUksT0FBTztRQUNQLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQUksU0FBUztRQUNULE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQUksTUFBTTtRQUNOLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDNUIsQ0FBQztJQUVELElBQUksU0FBUztRQUNULE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQUksU0FBUztRQUNULE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQUksVUFBVTtRQUNWLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDaEMsQ0FBQztJQUVELElBQUksT0FBTztRQUNQLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDN0IsQ0FBQztJQUVELFlBQVksRUFBWSxFQUNaLElBQXlCLEVBQ3pCLFVBQXNCLEVBQ1osTUFBYyxFQUNkLE1BQWMsRUFDZCxVQUFzQjtRQUN4QyxLQUFLLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztRQUhWLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxXQUFNLEdBQU4sTUFBTSxDQUFR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TUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzNELElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUN6QixNQUFNLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNsQixNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25DLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUMsR0FBRyxTQUFTLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFDLENBQUMsQ0FBQztJQUMvRyxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbGxlY3Rpb259IGZyb20gXCJtb25nb2RiXCI7XHJcbmltcG9ydCB7T2JqZWN0SWR9IGZyb20gXCJic29uXCI7XHJcblxyXG5pbXBvcnQge0lBc3NldCwgSUxhenlBc3NldH0gZnJvbSBcIi4uLy4uL2NvbW1vbi10eXBlc1wiO1xyXG5pbXBvcnQge2d1bnppcFByb21pc2VkfSBmcm9tIFwiLi4vLi4vdXRpbHNcIjtcclxuaW1wb3J0IHtBc3NldHN9IGZyb20gXCIuLi9hc3NldHNcIjtcclxuaW1wb3J0IHtQcm9ncmVzc2VzfSBmcm9tIFwiLi4vcHJvZ3Jlc3Nlc1wiO1xyXG5pbXBvcnQge0Jhc2VFbnRpdHl9IGZyb20gXCIuL2Jhc2UtZW50aXR5XCI7XHJcbmltcG9ydCB7TG9nZ2VyfSBmcm9tIFwiLi4vbG9nZ2VyXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgTGF6eUFzc2V0IGV4dGVuZHMgQmFzZUVudGl0eTxJTGF6eUFzc2V0PiBpbXBsZW1lbnRzIElMYXp5QXNzZXQge1xyXG5cclxuICAgIGdldCBqb2JOYW1lKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5qb2JOYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBqb2JQYXJhbXMoKTogYW55IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLmpvYlBhcmFtcztcclxuICAgIH1cclxuXHJcbiAgICBnZXQgam9iUXVlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5qb2JRdWU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGNyZWF0ZWRBdCgpOiBEYXRlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLmNyZWF0ZWRBdDtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgdXBkYXRlZEF0KCk6IERhdGUge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEudXBkYXRlZEF0O1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBwcm9ncmVzc0lkKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5wcm9ncmVzc0lkO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBhc3NldElkKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5hc3NldElkO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKGlkOiBPYmplY3RJZCxcclxuICAgICAgICAgICAgICAgIGRhdGE6IFBhcnRpYWw8SUxhenlBc3NldD4sXHJcbiAgICAgICAgICAgICAgICBjb2xsZWN0aW9uOiBDb2xsZWN0aW9uLFxyXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIGxvZ2dlcjogTG9nZ2VyLFxyXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIGFzc2V0czogQXNzZXRzLFxyXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIHByb2dyZXNzZXM6IFByb2dyZXNzZXMpIHtcclxuICAgICAgICBzdXBlcihpZCwgZGF0YSwgY29sbGVjdGlvbik7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgdW5saW5rKCk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkKCk7XHJcbiAgICAgICAgaWYgKCF0aGlzLnByb2dyZXNzSWQpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5jb2xsZWN0aW9uLmRlbGV0ZU9uZSh7X2lkOiB0aGlzLm9pZH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5hc3NldHMudW5saW5rKHRoaXMuYXNzZXRJZCk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhcnRXb3JraW5nKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMubG9hZCgpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5kZWxldGVkKSByZXR1cm47XHJcbiAgICAgICAgICAgIHRoaXMucHJvZ3Jlc3Nlcy5nZXQodGhpcy5wcm9ncmVzc0lkKS50aGVuKHAgPT4ge1xyXG4gICAgICAgICAgICAgICAgcD8uY2FuY2VsKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0V29ya2luZ09uQXNzZXQoZmFsc2UpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIubG9nKFwibGF6eS1hc3NldHNcIiwgYFN0YXJ0ZWQgd29ya2luZyBvbiBsYXp5IGFzc2V0OiAke3RoaXMuaWR9YCk7XHJcbiAgICAgICAgICAgIH0pLmNhdGNoKHJlYXNvbiA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5sb2coXCJsYXp5LWFzc2V0c1wiLCBgQ2FuJ3Qgc3RhcnQgd29ya2luZyBvbiBsYXp5IGFzc2V0OiAke3RoaXMuaWR9XFxuUmVhc29uOiAke3JlYXNvbn1gKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgbG9hZEFzc2V0KCk6IFByb21pc2U8SUFzc2V0PiB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuZGVsZXRlZCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgaWYgKHRoaXMuYXNzZXRJZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hc3NldHMucmVhZCh0aGlzLmFzc2V0SWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5wcm9ncmVzc0lkKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucHJvZ3Jlc3Nlcy53YWl0VG9GaW5pc2godGhpcy5wcm9ncmVzc0lkKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9hZEFzc2V0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGF3YWl0IHRoaXMuc3RhcnRXb3JraW5nT25Bc3NldCh0cnVlKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5sb2FkQXNzZXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyB3cml0ZUFzc2V0KGFzc2V0OiBJQXNzZXQpOiBQcm9taXNlPElBc3NldD4ge1xyXG4gICAgICAgIHRoaXMuZGF0YS51cGRhdGVkQXQgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIHRoaXMuZGF0YS5hc3NldElkID0gYXNzZXQuaWQ7XHJcbiAgICAgICAgYXdhaXQgYXNzZXQuc2V0TWV0YSh7bGF6eUlkOiB0aGlzLmlkfSk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5zYXZlKCk7XHJcbiAgICAgICAgcmV0dXJuIGFzc2V0O1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBhc3luYyBzdGFydFdvcmtpbmdPbkFzc2V0KGZyb21Mb2FkOiBib29sZWFuKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICBjb25zdCBvbGRBc3NldCA9IHRoaXMuZGF0YS5hc3NldElkO1xyXG4gICAgICAgIHRoaXMuZGF0YS51cGRhdGVkQXQgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIHRoaXMuZGF0YS5wcm9ncmVzc0lkID0gKGF3YWl0IHRoaXMucHJvZ3Jlc3Nlcy5jcmVhdGUoKSkuaWQ7XHJcbiAgICAgICAgdGhpcy5kYXRhLmFzc2V0SWQgPSBudWxsO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuc2F2ZSgpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuYXNzZXRzLnVubGluayhvbGRBc3NldCk7XHJcbiAgICAgICAgY29uc3Qgam9iUGFyYW1zID0gSlNPTi5wYXJzZShhd2FpdCBndW56aXBQcm9taXNlZCh0aGlzLmRhdGEuam9iUGFyYW1zKSk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5wcm9ncmVzc2VzLmpvYk1hbi5lbnF1ZXVlV2l0aE5hbWUodGhpcy5kYXRhLmpvYk5hbWUsIHsuLi5qb2JQYXJhbXMsIGxhenlJZDogdGhpcy5pZCwgZnJvbUxvYWR9KTtcclxuICAgIH1cclxufVxyXG4iXX0=