@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.
- package/commands/clear-command.d.ts +6 -6
- package/commands/fixtures-command.d.ts +9 -9
- package/commands/index.d.ts +2 -2
- package/common-types.d.ts +325 -326
- package/esm2022/commands/clear-command.mjs +15 -0
- package/esm2022/commands/fixtures-command.mjs +26 -0
- package/esm2022/commands/index.mjs +7 -0
- package/esm2022/common-types.mjs +26 -0
- package/esm2022/fixtures/index.mjs +5 -0
- package/esm2022/fixtures/ttl.fixture.mjs +23 -0
- package/esm2022/public_api.mjs +378 -0
- package/esm2022/requests/asset-image-params.mjs +60 -0
- package/esm2022/rest-controllers/assets.controller.mjs +177 -0
- package/esm2022/rest-controllers/auth.controller.mjs +57 -0
- package/esm2022/rest-controllers/gallery.controller.mjs +27 -0
- package/esm2022/rest-controllers/progresses.controller.mjs +38 -0
- package/esm2022/rest-controllers/terminal-styles.mjs +67 -0
- package/esm2022/rest-controllers/terminal.controller.mjs +132 -0
- package/esm2022/rest-middlewares/container.middleware.mjs +22 -0
- package/esm2022/rest-middlewares/error-handler.middleware.mjs +79 -0
- package/esm2022/rest-middlewares/language.middleware.mjs +21 -0
- package/esm2022/rest-middlewares/request-ended.middleware.mjs +26 -0
- package/esm2022/rest-middlewares/request-started.middleware.mjs +25 -0
- package/esm2022/services/asset-processor.mjs +90 -0
- package/esm2022/services/asset-resolver.mjs +36 -0
- package/esm2022/services/assets.mjs +154 -0
- package/esm2022/services/backend-provider.mjs +83 -0
- package/esm2022/services/cache-processor.mjs +16 -0
- package/esm2022/services/cache.mjs +70 -0
- package/esm2022/services/configuration.mjs +68 -0
- package/esm2022/services/drivers/asset-grid.driver.mjs +27 -0
- package/esm2022/services/drivers/asset-local.driver.mjs +41 -0
- package/esm2022/services/endpoint-provider.mjs +13 -0
- package/esm2022/services/entities/asset.mjs +61 -0
- package/esm2022/services/entities/base-entity.mjs +32 -0
- package/esm2022/services/entities/lazy-asset.mjs +87 -0
- package/esm2022/services/entities/progress.mjs +182 -0
- package/esm2022/services/entities/temp-asset.mjs +53 -0
- package/esm2022/services/fixtures.mjs +38 -0
- package/esm2022/services/gallery-cache.mjs +29 -0
- package/esm2022/services/gallery-image.mjs +42 -0
- package/esm2022/services/gallery.mjs +124 -0
- package/esm2022/services/id-generator.mjs +49 -0
- package/esm2022/services/job-manager.mjs +198 -0
- package/esm2022/services/lazy-assets.mjs +68 -0
- package/esm2022/services/logger.mjs +26 -0
- package/esm2022/services/mail-sender.mjs +42 -0
- package/esm2022/services/memory-cache.mjs +61 -0
- package/esm2022/services/mongo-connector.mjs +36 -0
- package/esm2022/services/open-api.mjs +124 -0
- package/esm2022/services/progresses.mjs +93 -0
- package/esm2022/services/template-renderer.mjs +71 -0
- package/esm2022/services/terminal-manager.mjs +88 -0
- package/esm2022/services/token-generator.mjs +37 -0
- package/esm2022/services/translation-provider.mjs +39 -0
- package/esm2022/services/translator.mjs +67 -0
- package/esm2022/services/user-manager.mjs +27 -0
- package/esm2022/socket-controllers/progress.controller.mjs +63 -0
- package/esm2022/socket-controllers/terminal.controller.mjs +61 -0
- package/esm2022/socket-controllers/terminal.mjs +89 -0
- package/esm2022/socket-middlewares/compression.middleware.mjs +14 -0
- package/esm2022/static.mjs +23 -0
- package/esm2022/stemy-backend.mjs +5 -0
- package/esm2022/utilities/base-doc.mjs +33 -0
- package/esm2022/utilities/decorators.mjs +51 -0
- package/esm2022/utilities/di-container.mjs +88 -0
- package/esm2022/utilities/empty-job.mjs +13 -0
- package/esm2022/utilities/lazy-asset-generator.mjs +38 -0
- package/esm2022/utilities/mongoose.mjs +216 -0
- package/esm2022/utilities/tree.mjs +119 -0
- package/esm2022/utils.mjs +726 -0
- package/esm2022/validators.mjs +46 -0
- package/fesm2022/stemy-backend.mjs +4690 -0
- package/fesm2022/stemy-backend.mjs.map +1 -0
- package/fixtures/index.d.ts +2 -2
- package/fixtures/ttl.fixture.d.ts +7 -7
- package/index.d.ts +5 -5
- package/package.json +43 -49
- package/public_api.d.ts +44 -44
- package/requests/asset-image-params.d.ts +12 -12
- package/rest-controllers/assets.controller.d.ts +25 -27
- package/rest-controllers/auth.controller.d.ts +14 -14
- package/rest-controllers/gallery.controller.d.ts +6 -7
- package/rest-controllers/progresses.controller.d.ts +9 -9
- package/rest-controllers/terminal-styles.d.ts +2 -2
- package/rest-controllers/terminal.controller.d.ts +10 -10
- package/rest-middlewares/container.middleware.d.ts +8 -8
- package/rest-middlewares/error-handler.middleware.d.ts +13 -13
- package/rest-middlewares/language.middleware.d.ts +8 -8
- package/rest-middlewares/request-ended.middleware.d.ts +8 -8
- package/rest-middlewares/request-started.middleware.d.ts +8 -8
- package/services/asset-processor.d.ts +10 -11
- package/services/asset-resolver.d.ts +10 -10
- package/services/assets.d.ts +24 -26
- package/services/backend-provider.d.ts +19 -20
- package/services/cache-processor.d.ts +4 -4
- package/services/cache.d.ts +23 -23
- package/services/configuration.d.ts +15 -15
- package/services/drivers/asset-grid.driver.d.ts +11 -11
- package/services/drivers/asset-local.driver.d.ts +10 -11
- package/services/endpoint-provider.d.ts +4 -4
- package/services/entities/asset.d.ts +19 -21
- package/services/entities/base-entity.d.ts +13 -13
- package/services/entities/lazy-asset.d.ts +25 -25
- package/services/entities/progress.d.ts +49 -49
- package/services/entities/temp-asset.d.ts +20 -22
- package/services/fixtures.d.ts +8 -8
- package/services/gallery-cache.d.ts +8 -9
- package/services/gallery-image.d.ts +10 -11
- package/services/gallery.d.ts +13 -13
- package/services/id-generator.d.ts +11 -11
- package/services/job-manager.d.ts +35 -35
- package/services/lazy-assets.d.ts +22 -22
- package/services/logger.d.ts +8 -8
- package/services/mail-sender.d.ts +20 -20
- package/services/memory-cache.d.ts +10 -10
- package/services/mongo-connector.d.ts +12 -12
- package/services/open-api.d.ts +13 -13
- package/services/progresses.d.ts +20 -20
- package/services/template-renderer.d.ts +14 -14
- package/services/terminal-manager.d.ts +15 -15
- package/services/token-generator.d.ts +6 -6
- package/services/translation-provider.d.ts +9 -9
- package/services/translator.d.ts +15 -15
- package/services/user-manager.d.ts +6 -6
- package/socket-controllers/progress.controller.d.ts +10 -10
- package/socket-controllers/terminal.controller.d.ts +13 -13
- package/socket-controllers/terminal.d.ts +19 -20
- package/socket-middlewares/compression.middleware.d.ts +4 -4
- package/static.d.ts +2 -2
- package/utilities/base-doc.d.ts +40 -40
- package/utilities/decorators.d.ts +10 -10
- package/utilities/di-container.d.ts +43 -43
- package/utilities/empty-job.d.ts +4 -4
- package/utilities/lazy-asset-generator.d.ts +15 -15
- package/utilities/mongoose.d.ts +36 -36
- package/utilities/tree.d.ts +15 -15
- package/utils.d.ts +120 -123
- 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=
|