@stemy/backend 5.1.1 → 5.2.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/common-types.d.ts +21 -1
- package/esm2020/common-types.mjs +3 -1
- package/esm2020/public_api.mjs +10 -3
- package/esm2020/services/assets.mjs +19 -12
- package/esm2020/services/drivers/asset-grid.driver.mjs +25 -0
- package/esm2020/services/entities/asset.mjs +21 -8
- package/esm2020/services/entities/base-entity.mjs +6 -6
- package/esm2020/services/entities/lazy-asset.mjs +5 -6
- package/esm2020/services/mongo-connector.mjs +1 -7
- package/fesm2015/stemy-backend.mjs +71 -28
- package/fesm2015/stemy-backend.mjs.map +1 -1
- package/fesm2020/stemy-backend.mjs +71 -28
- package/fesm2020/stemy-backend.mjs.map +1 -1
- package/package.json +1 -1
- package/public_api.d.ts +1 -1
- package/services/assets.d.ts +4 -4
- package/services/drivers/asset-grid.driver.d.ts +11 -0
- package/services/entities/asset.d.ts +4 -4
- package/services/entities/base-entity.d.ts +2 -2
- package/services/mongo-connector.d.ts +1 -3
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { isString, streamToBuffer, toImage } from "../../utils";
|
|
2
2
|
import { BaseEntity } from "./base-entity";
|
|
3
3
|
export class Asset extends BaseEntity {
|
|
4
4
|
get filename() {
|
|
@@ -11,18 +11,31 @@ export class Asset extends BaseEntity {
|
|
|
11
11
|
return this.data.metadata;
|
|
12
12
|
}
|
|
13
13
|
get stream() {
|
|
14
|
-
return this.
|
|
14
|
+
return this.driver.openDownloadStream(this.oid);
|
|
15
15
|
}
|
|
16
|
-
constructor(id, data, collection,
|
|
16
|
+
constructor(id, data, collection, driver) {
|
|
17
17
|
super(id, data, collection);
|
|
18
|
-
this.
|
|
18
|
+
this.driver = driver;
|
|
19
19
|
}
|
|
20
20
|
async unlink() {
|
|
21
|
-
|
|
21
|
+
try {
|
|
22
|
+
await this.driver.delete(this.oid);
|
|
23
|
+
await this.collection.deleteOne({ _id: this.oid });
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
let err = error;
|
|
27
|
+
if (error) {
|
|
28
|
+
err = error.message || error || "";
|
|
29
|
+
if (!isString(err) || !err.startsWith("FileNotFound")) {
|
|
30
|
+
throw err;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return this.id;
|
|
22
35
|
}
|
|
23
36
|
async setMeta(metadata) {
|
|
24
37
|
metadata = Object.assign(this.metadata, metadata || {});
|
|
25
|
-
await this.collection.updateOne({ _id: this.
|
|
38
|
+
await this.collection.updateOne({ _id: this.oid }, { $set: { metadata } });
|
|
26
39
|
}
|
|
27
40
|
getBuffer() {
|
|
28
41
|
return streamToBuffer(this.stream);
|
|
@@ -34,7 +47,7 @@ export class Asset extends BaseEntity {
|
|
|
34
47
|
: metadata.downloadCount + 1;
|
|
35
48
|
metadata.firstDownload = metadata.firstDownload || new Date();
|
|
36
49
|
metadata.lastDownload = new Date();
|
|
37
|
-
await this.collection.updateOne({ _id: this.
|
|
50
|
+
await this.collection.updateOne({ _id: this.oid }, { $set: { metadata } });
|
|
38
51
|
return this.stream;
|
|
39
52
|
}
|
|
40
53
|
async getImage(params = null) {
|
|
@@ -44,4 +57,4 @@ export class Asset extends BaseEntity {
|
|
|
44
57
|
return toImage(await this.download(metadata), params, this.metadata);
|
|
45
58
|
}
|
|
46
59
|
}
|
|
47
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc2VydmljZXMvZW50aXRpZXMvYXNzZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBS0EsT0FBTyxFQUFDLFFBQVEsRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQzlELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFekMsTUFBTSxPQUFPLEtBQU0sU0FBUSxVQUFrQjtJQUV6QyxJQUFJLFFBQVE7UUFDUixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQzlCLENBQUM7SUFFRCxJQUFJLFdBQVc7UUFDWCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDUixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQzlCLENBQUM7SUFFRCxJQUFJLE1BQU07UUFDTixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCxZQUFZLEVBQVksRUFDWixJQUFxQixFQUNyQixVQUFzQixFQUNaLE1BQW9CO1FBQ3RDLEtBQUssQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBRFYsV0FBTSxHQUFOLE1BQU0sQ0FBYztJQUUxQyxDQUFDO0lBRUQsS0FBSyxDQUFDLE1BQU07UUFDUixJQUFJO1lBQ0EsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbkMsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQztTQUNwRDtRQUFDLE9BQU8sS0FBSyxFQUFFO1lBQ1osSUFBSSxHQUFHLEdBQUcsS0FBWSxDQUFDO1lBQ3ZCLElBQUksS0FBSyxFQUFFO2dCQUNQLEdBQUcsR0FBRyxLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxFQUFFO29CQUNuRCxNQUFNLEdBQUcsQ0FBQztpQkFDYjthQUNKO1NBQ0o7UUFDRCxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBNkI7UUFDdkMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxRQUFRLElBQUksRUFBRSxDQUFDLENBQUM7UUFDeEQsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxJQUFJLEVBQUUsRUFBQyxRQUFRLEVBQUMsRUFBQyxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVELFNBQVM7UUFDTCxPQUFPLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBcUI7UUFDaEMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxRQUFRLElBQUksRUFBRSxDQUFDLENBQUM7UUFDeEQsUUFBUSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWE7WUFDN0UsQ0FBQyxDQUFDLENBQUM7WUFDSCxDQUFDLENBQUMsUUFBUSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUM7UUFDakMsUUFBUSxDQUFDLGFBQWEsR0FBRyxRQUFRLENBQUMsYUFBYSxJQUFJLElBQUksSUFBSSxFQUFFLENBQUM7UUFDOUQsUUFBUSxDQUFDLFlBQVksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ25DLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsSUFBSSxFQUFFLEVBQUMsUUFBUSxFQUFDLEVBQUMsQ0FBQyxDQUFDO1FBQ3JFLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRUQsS0FBSyxDQUFDLFFBQVEsQ0FBQyxTQUE0QixJQUFJO1FBQzNDLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsS0FBSyxDQUFDLGFBQWEsQ0FBQyxNQUEwQixFQUFFLFFBQXFCO1FBQ2pFLE9BQU8sT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7UmVhZGFibGV9IGZyb20gXCJzdHJlYW1cIjtcclxuaW1wb3J0IHtDb2xsZWN0aW9ufSBmcm9tIFwibW9uZ29kYlwiO1xyXG5pbXBvcnQge09iamVjdElkfSBmcm9tIFwiYnNvblwiO1xyXG5cclxuaW1wb3J0IHtJQXNzZXQsIElBc3NldERyaXZlciwgSUFzc2V0SW1hZ2VQYXJhbXMsIElBc3NldE1ldGF9IGZyb20gXCIuLi8uLi9jb21tb24tdHlwZXNcIjtcclxuaW1wb3J0IHtpc1N0cmluZywgc3RyZWFtVG9CdWZmZXIsIHRvSW1hZ2V9IGZyb20gXCIuLi8uLi91dGlsc1wiO1xyXG5pbXBvcnQge0Jhc2VFbnRpdHl9IGZyb20gXCIuL2Jhc2UtZW50aXR5XCI7XHJcblxyXG5leHBvcnQgY2xhc3MgQXNzZXQgZXh0ZW5kcyBCYXNlRW50aXR5PElBc3NldD4gaW1wbGVtZW50cyBJQXNzZXQge1xyXG5cclxuICAgIGdldCBmaWxlbmFtZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEuZmlsZW5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGNvbnRlbnRUeXBlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5jb250ZW50VHlwZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbWV0YWRhdGEoKTogSUFzc2V0TWV0YSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5tZXRhZGF0YTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc3RyZWFtKCk6IFJlYWRhYmxlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kcml2ZXIub3BlbkRvd25sb2FkU3RyZWFtKHRoaXMub2lkKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3RvcihpZDogT2JqZWN0SWQsXHJcbiAgICAgICAgICAgICAgICBkYXRhOiBQYXJ0aWFsPElBc3NldD4sXHJcbiAgICAgICAgICAgICAgICBjb2xsZWN0aW9uOiBDb2xsZWN0aW9uLFxyXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIGRyaXZlcjogSUFzc2V0RHJpdmVyKSB7XHJcbiAgICAgICAgc3VwZXIoaWQsIGRhdGEsIGNvbGxlY3Rpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHVubGluaygpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZHJpdmVyLmRlbGV0ZSh0aGlzLm9pZCk7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY29sbGVjdGlvbi5kZWxldGVPbmUoe19pZDogdGhpcy5vaWR9KTtcclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBsZXQgZXJyID0gZXJyb3IgYXMgYW55O1xyXG4gICAgICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIGVyciA9IGVycm9yLm1lc3NhZ2UgfHwgZXJyb3IgfHwgXCJcIjtcclxuICAgICAgICAgICAgICAgIGlmICghaXNTdHJpbmcoZXJyKSB8fCAhZXJyLnN0YXJ0c1dpdGgoXCJGaWxlTm90Rm91bmRcIikpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaWQ7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc2V0TWV0YShtZXRhZGF0YTogUGFydGlhbDxJQXNzZXRNZXRhPik6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgbWV0YWRhdGEgPSBPYmplY3QuYXNzaWduKHRoaXMubWV0YWRhdGEsIG1ldGFkYXRhIHx8IHt9KTtcclxuICAgICAgICBhd2FpdCB0aGlzLmNvbGxlY3Rpb24udXBkYXRlT25lKHtfaWQ6IHRoaXMub2lkfSwgeyRzZXQ6IHttZXRhZGF0YX19KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRCdWZmZXIoKTogUHJvbWlzZTxCdWZmZXI+IHtcclxuICAgICAgICByZXR1cm4gc3RyZWFtVG9CdWZmZXIodGhpcy5zdHJlYW0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGRvd25sb2FkKG1ldGFkYXRhPzogSUFzc2V0TWV0YSk6IFByb21pc2U8UmVhZGFibGU+IHtcclxuICAgICAgICBtZXRhZGF0YSA9IE9iamVjdC5hc3NpZ24odGhpcy5tZXRhZGF0YSwgbWV0YWRhdGEgfHwge30pO1xyXG4gICAgICAgIG1ldGFkYXRhLmRvd25sb2FkQ291bnQgPSBpc05hTihtZXRhZGF0YS5kb3dubG9hZENvdW50KSB8fCAhbWV0YWRhdGEuZmlyc3REb3dubG9hZFxyXG4gICAgICAgICAgICA/IDFcclxuICAgICAgICAgICAgOiBtZXRhZGF0YS5kb3dubG9hZENvdW50ICsgMTtcclxuICAgICAgICBtZXRhZGF0YS5maXJzdERvd25sb2FkID0gbWV0YWRhdGEuZmlyc3REb3dubG9hZCB8fCBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIG1ldGFkYXRhLmxhc3REb3dubG9hZCA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5jb2xsZWN0aW9uLnVwZGF0ZU9uZSh7X2lkOiB0aGlzLm9pZH0sIHskc2V0OiB7bWV0YWRhdGF9fSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RyZWFtO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldEltYWdlKHBhcmFtczogSUFzc2V0SW1hZ2VQYXJhbXMgPSBudWxsKTogUHJvbWlzZTxSZWFkYWJsZT4ge1xyXG4gICAgICAgIHJldHVybiB0b0ltYWdlKHRoaXMuc3RyZWFtLCBwYXJhbXMsIHRoaXMubWV0YWRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGRvd25sb2FkSW1hZ2UocGFyYW1zPzogSUFzc2V0SW1hZ2VQYXJhbXMsIG1ldGFkYXRhPzogSUFzc2V0TWV0YSk6IFByb21pc2U8UmVhZGFibGU+IHtcclxuICAgICAgICByZXR1cm4gdG9JbWFnZShhd2FpdCB0aGlzLmRvd25sb2FkKG1ldGFkYXRhKSwgcGFyYW1zLCB0aGlzLm1ldGFkYXRhKTtcclxuICAgIH1cclxufVxyXG4iXX0=
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
export class BaseEntity {
|
|
2
2
|
get id() {
|
|
3
|
-
return this.
|
|
3
|
+
return this.oid.toHexString();
|
|
4
4
|
}
|
|
5
|
-
constructor(
|
|
6
|
-
this.
|
|
5
|
+
constructor(oid, data, collection) {
|
|
6
|
+
this.oid = oid;
|
|
7
7
|
this.data = data;
|
|
8
8
|
this.collection = collection;
|
|
9
9
|
}
|
|
10
10
|
save() {
|
|
11
|
-
return this.collection.updateOne({ _id: this.
|
|
11
|
+
return this.collection.updateOne({ _id: this.oid }, { $set: this.toJSON() }, { upsert: true });
|
|
12
12
|
}
|
|
13
13
|
async load() {
|
|
14
|
-
const res = await this.collection.findOne({ _id: this.
|
|
14
|
+
const res = await this.collection.findOne({ _id: this.oid });
|
|
15
15
|
this.deleted = !res;
|
|
16
16
|
this.data = res || {};
|
|
17
17
|
return this;
|
|
@@ -25,4 +25,4 @@ export class BaseEntity {
|
|
|
25
25
|
return ret;
|
|
26
26
|
}
|
|
27
27
|
}
|
|
28
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1lbnRpdHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc2VydmljZXMvZW50aXRpZXMvYmFzZS1lbnRpdHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsTUFBTSxPQUFPLFVBQVU7SUFFbkIsSUFBSSxFQUFFO1FBQ0YsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFJRCxZQUFxQixHQUFhLEVBQ1osSUFBZ0IsRUFDaEIsVUFBMkI7UUFGNUIsUUFBRyxHQUFILEdBQUcsQ0FBVTtRQUNaLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsZUFBVSxHQUFWLFVBQVUsQ0FBaUI7SUFDakQsQ0FBQztJQUVELElBQUk7UUFDQSxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEVBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUMsRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO0lBQzdGLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBSTtRQUNOLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBQyxDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQztRQUNwQixJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsSUFBSSxFQUFFLENBQUM7UUFDdEIsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVELE1BQU07UUFDRixNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFRLENBQUM7UUFDaEQsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDO1FBQ2YsR0FBRyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ2pCLEdBQUcsQ0FBQyxTQUFTLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUMzQixHQUFHLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQyxTQUFTLElBQUksR0FBRyxDQUFDLFNBQVMsQ0FBQztRQUMvQyxPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29sbGVjdGlvbn0gZnJvbSBcIm1vbmdvZGJcIjtcclxuaW1wb3J0IHtPYmplY3RJZH0gZnJvbSBcImJzb25cIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBCYXNlRW50aXR5PFQ+IHtcclxuXHJcbiAgICBnZXQgaWQoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5vaWQudG9IZXhTdHJpbmcoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZGVsZXRlZDogYm9vbGVhbjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihyZWFkb25seSBvaWQ6IE9iamVjdElkLFxyXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIGRhdGE6IFBhcnRpYWw8VD4sXHJcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgY29sbGVjdGlvbjogQ29sbGVjdGlvbjxhbnk+KSB7XHJcbiAgICB9XHJcblxyXG4gICAgc2F2ZSgpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbGxlY3Rpb24udXBkYXRlT25lKHtfaWQ6IHRoaXMub2lkfSwgeyRzZXQ6IHRoaXMudG9KU09OKCl9LCB7dXBzZXJ0OiB0cnVlfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgbG9hZCgpOiBQcm9taXNlPHRoaXM+IHtcclxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmNvbGxlY3Rpb24uZmluZE9uZSh7X2lkOiB0aGlzLm9pZH0pO1xyXG4gICAgICAgIHRoaXMuZGVsZXRlZCA9ICFyZXM7XHJcbiAgICAgICAgdGhpcy5kYXRhID0gcmVzIHx8IHt9O1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHRvSlNPTigpOiBhbnkge1xyXG4gICAgICAgIGNvbnN0IHJldCA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuZGF0YSkgYXMgYW55O1xyXG4gICAgICAgIGRlbGV0ZSByZXQuX2lkO1xyXG4gICAgICAgIHJldC5pZCA9IHRoaXMuaWQ7XHJcbiAgICAgICAgcmV0LnVwZGF0ZWRBdCA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgcmV0LmNyZWF0ZWRBdCA9IHJldC5jcmVhdGVkQXQgfHwgcmV0LnVwZGF0ZWRBdDtcclxuICAgICAgICByZXR1cm4gcmV0O1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { deleteFromBucket, gunzipPromised } from "../../utils";
|
|
1
|
+
import { gunzipPromised } from "../../utils";
|
|
3
2
|
import { BaseEntity } from "./base-entity";
|
|
4
3
|
export class LazyAsset extends BaseEntity {
|
|
5
4
|
get jobName() {
|
|
@@ -32,9 +31,9 @@ export class LazyAsset extends BaseEntity {
|
|
|
32
31
|
async unlink() {
|
|
33
32
|
await this.load();
|
|
34
33
|
if (!this.progressId) {
|
|
35
|
-
await this.collection.deleteOne({ _id: this.
|
|
34
|
+
await this.collection.deleteOne({ _id: this.oid });
|
|
36
35
|
}
|
|
37
|
-
return
|
|
36
|
+
return this.assets.unlink(this.assetId);
|
|
38
37
|
}
|
|
39
38
|
startWorking() {
|
|
40
39
|
this.load().then(() => {
|
|
@@ -77,9 +76,9 @@ export class LazyAsset extends BaseEntity {
|
|
|
77
76
|
this.data.progressId = (await this.progresses.create()).id;
|
|
78
77
|
this.data.assetId = null;
|
|
79
78
|
await this.save();
|
|
80
|
-
await
|
|
79
|
+
await this.assets.unlink(oldAsset);
|
|
81
80
|
const jobParams = JSON.parse(await gunzipPromised(this.data.jobParams));
|
|
82
81
|
await this.progresses.jobMan.enqueueWithName(this.data.jobName, { ...jobParams, lazyId: this.id, fromLoad });
|
|
83
82
|
}
|
|
84
83
|
}
|
|
85
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
84
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF6eS1hc3NldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9lbnRpdGllcy9sYXp5LWFzc2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFHM0MsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUd6QyxNQUFNLE9BQU8sU0FBVSxTQUFRLFVBQXNCO0lBRWpELElBQUksT0FBTztRQUNQLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQUksU0FBUztRQUNULE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQUksTUFBTTtRQUNOLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDNUIsQ0FBQztJQUVELElBQUksU0FBUztRQUNULE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQUksU0FBUztRQUNULE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQUksVUFBVTtRQUNWLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDaEMsQ0FBQztJQUVELElBQUksT0FBTztRQUNQLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDN0IsQ0FBQztJQUVELFlBQVksRUFBWSxFQUNaLElBQXlCLEVBQ3pCLFVBQXNCLEVBQ1osTUFBYyxFQUNkLE1BQWMsRUFDZCxVQUFzQjtRQUN4QyxLQUFLLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztRQUhWLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsZUFBVSxHQUFWLFVB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RSxDQUFDO1FBQzNELElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUN6QixNQUFNLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNsQixNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25DLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUMsR0FBRyxTQUFTLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFDLENBQUMsQ0FBQztJQUMvRyxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbGxlY3Rpb259IGZyb20gXCJtb25nb2RiXCI7XHJcbmltcG9ydCB7T2JqZWN0SWR9IGZyb20gXCJic29uXCI7XHJcblxyXG5pbXBvcnQge0lBc3NldCwgSUxhenlBc3NldH0gZnJvbSBcIi4uLy4uL2NvbW1vbi10eXBlc1wiO1xyXG5pbXBvcnQge2d1bnppcFByb21pc2VkfSBmcm9tIFwiLi4vLi4vdXRpbHNcIjtcclxuaW1wb3J0IHtBc3NldHN9IGZyb20gXCIuLi9hc3NldHNcIjtcclxuaW1wb3J0IHtQcm9ncmVzc2VzfSBmcm9tIFwiLi4vcHJvZ3Jlc3Nlc1wiO1xyXG5pbXBvcnQge0Jhc2VFbnRpdHl9IGZyb20gXCIuL2Jhc2UtZW50aXR5XCI7XHJcbmltcG9ydCB7TG9nZ2VyfSBmcm9tIFwiLi4vbG9nZ2VyXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgTGF6eUFzc2V0IGV4dGVuZHMgQmFzZUVudGl0eTxJTGF6eUFzc2V0PiBpbXBsZW1lbnRzIElMYXp5QXNzZXQge1xyXG5cclxuICAgIGdldCBqb2JOYW1lKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5qb2JOYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBqb2JQYXJhbXMoKTogYW55IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLmpvYlBhcmFtcztcclxuICAgIH1cclxuXHJcbiAgICBnZXQgam9iUXVlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5qb2JRdWU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGNyZWF0ZWRBdCgpOiBEYXRlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLmNyZWF0ZWRBdDtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgdXBkYXRlZEF0KCk6IERhdGUge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEudXBkYXRlZEF0O1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBwcm9ncmVzc0lkKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5wcm9ncmVzc0lkO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBhc3NldElkKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5hc3NldElkO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKGlkOiBPYmplY3RJZCxcclxuICAgICAgICAgICAgICAgIGRhdGE6IFBhcnRpYWw8SUxhenlBc3NldD4sXHJcbiAgICAgICAgICAgICAgICBjb2xsZWN0aW9uOiBDb2xsZWN0aW9uLFxyXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIGxvZ2dlcjogTG9nZ2VyLFxyXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIGFzc2V0czogQXNzZXRzLFxyXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIHByb2dyZXNzZXM6IFByb2dyZXNzZXMpIHtcclxuICAgICAgICBzdXBlcihpZCwgZGF0YSwgY29sbGVjdGlvbik7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgdW5saW5rKCk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkKCk7XHJcbiAgICAgICAgaWYgKCF0aGlzLnByb2dyZXNzSWQpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5jb2xsZWN0aW9uLmRlbGV0ZU9uZSh7X2lkOiB0aGlzLm9pZH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5hc3NldHMudW5saW5rKHRoaXMuYXNzZXRJZCk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhcnRXb3JraW5nKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMubG9hZCgpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5kZWxldGVkKSByZXR1cm47XHJcbiAgICAgICAgICAgIHRoaXMucHJvZ3Jlc3Nlcy5nZXQodGhpcy5wcm9ncmVzc0lkKS50aGVuKHAgPT4ge1xyXG4gICAgICAgICAgICAgICAgcD8uY2FuY2VsKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0V29ya2luZ09uQXNzZXQoZmFsc2UpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIubG9nKFwibGF6eS1hc3NldHNcIiwgYFN0YXJ0ZWQgd29ya2luZyBvbiBsYXp5IGFzc2V0OiAke3RoaXMuaWR9YCk7XHJcbiAgICAgICAgICAgIH0pLmNhdGNoKHJlYXNvbiA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5sb2coXCJsYXp5LWFzc2V0c1wiLCBgQ2FuJ3Qgc3RhcnQgd29ya2luZyBvbiBsYXp5IGFzc2V0OiAke3RoaXMuaWR9XFxuUmVhc29uOiAke3JlYXNvbn1gKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgbG9hZEFzc2V0KCk6IFByb21pc2U8SUFzc2V0PiB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuZGVsZXRlZCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgaWYgKHRoaXMuYXNzZXRJZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hc3NldHMucmVhZCh0aGlzLmFzc2V0SWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5wcm9ncmVzc0lkKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucHJvZ3Jlc3Nlcy53YWl0VG9GaW5pc2godGhpcy5wcm9ncmVzc0lkKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9hZEFzc2V0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGF3YWl0IHRoaXMuc3RhcnRXb3JraW5nT25Bc3NldCh0cnVlKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5sb2FkQXNzZXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyB3cml0ZUFzc2V0KGFzc2V0OiBJQXNzZXQpOiBQcm9taXNlPElBc3NldD4ge1xyXG4gICAgICAgIHRoaXMuZGF0YS51cGRhdGVkQXQgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIHRoaXMuZGF0YS5hc3NldElkID0gYXNzZXQuaWQ7XHJcbiAgICAgICAgYXdhaXQgYXNzZXQuc2V0TWV0YSh7bGF6eUlkOiB0aGlzLmlkfSk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5zYXZlKCk7XHJcbiAgICAgICAgcmV0dXJuIGFzc2V0O1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBhc3luYyBzdGFydFdvcmtpbmdPbkFzc2V0KGZyb21Mb2FkOiBib29sZWFuKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICBjb25zdCBvbGRBc3NldCA9IHRoaXMuZGF0YS5hc3NldElkO1xyXG4gICAgICAgIHRoaXMuZGF0YS51cGRhdGVkQXQgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIHRoaXMuZGF0YS5wcm9ncmVzc0lkID0gKGF3YWl0IHRoaXMucHJvZ3Jlc3Nlcy5jcmVhdGUoKSkuaWQ7XHJcbiAgICAgICAgdGhpcy5kYXRhLmFzc2V0SWQgPSBudWxsO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuc2F2ZSgpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuYXNzZXRzLnVubGluayhvbGRBc3NldCk7XHJcbiAgICAgICAgY29uc3Qgam9iUGFyYW1zID0gSlNPTi5wYXJzZShhd2FpdCBndW56aXBQcm9taXNlZCh0aGlzLmRhdGEuam9iUGFyYW1zKSk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5wcm9ncmVzc2VzLmpvYk1hbi5lbnF1ZXVlV2l0aE5hbWUodGhpcy5kYXRhLmpvYk5hbWUsIHsuLi5qb2JQYXJhbXMsIGxhenlJZDogdGhpcy5pZCwgZnJvbUxvYWR9KTtcclxuICAgIH1cclxufVxyXG4iXX0=
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { __decorate, __metadata } from "tslib";
|
|
2
2
|
import { singleton } from "tsyringe";
|
|
3
|
-
import { GridFSBucket } from "mongodb";
|
|
4
3
|
import mongoose from "mongoose";
|
|
5
4
|
import { Configuration } from "./configuration";
|
|
6
5
|
let MongoConnector = class MongoConnector {
|
|
@@ -10,14 +9,10 @@ let MongoConnector = class MongoConnector {
|
|
|
10
9
|
get database() {
|
|
11
10
|
return this.db;
|
|
12
11
|
}
|
|
13
|
-
get bucket() {
|
|
14
|
-
return this.fsBucket;
|
|
15
|
-
}
|
|
16
12
|
constructor(configuration) {
|
|
17
13
|
this.configuration = configuration;
|
|
18
14
|
this.conn = null;
|
|
19
15
|
this.db = null;
|
|
20
|
-
this.fsBucket = null;
|
|
21
16
|
}
|
|
22
17
|
async connect() {
|
|
23
18
|
if (this.db)
|
|
@@ -28,7 +23,6 @@ let MongoConnector = class MongoConnector {
|
|
|
28
23
|
pass: this.configuration.resolve("mongoPassword")
|
|
29
24
|
})).connection;
|
|
30
25
|
this.db = this.conn.db;
|
|
31
|
-
this.fsBucket = new GridFSBucket(this.db, { bucketName: "assets" });
|
|
32
26
|
}
|
|
33
27
|
};
|
|
34
28
|
MongoConnector = __decorate([
|
|
@@ -36,4 +30,4 @@ MongoConnector = __decorate([
|
|
|
36
30
|
__metadata("design:paramtypes", [Configuration])
|
|
37
31
|
], MongoConnector);
|
|
38
32
|
export { MongoConnector };
|
|
39
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9uZ28tY29ubmVjdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL21vbmdvLWNvbm5lY3Rvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUVuQyxPQUFPLFFBQVEsTUFBTSxVQUFVLENBQUM7QUFDaEMsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBR3ZDLElBQU0sY0FBYyxHQUFwQixNQUFNLGNBQWM7SUFFdkIsSUFBSSxVQUFVO1FBQ1YsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDUixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUtELFlBQXFCLGFBQTRCO1FBQTVCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzdDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0lBQ25CLENBQUM7SUFFRCxLQUFLLENBQUMsT0FBTztRQUNULElBQUksSUFBSSxDQUFDLEVBQUU7WUFBRSxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLE1BQU0sUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQVcsRUFBRTtZQUNsRixNQUFNLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO1lBQzdDLElBQUksRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7WUFDN0MsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQztTQUNwRCxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7UUFDZixJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBUyxDQUFDO0lBQ2xDLENBQUM7Q0FDSixDQUFBO0FBM0JZLGNBQWM7SUFEMUIsU0FBUyxFQUFFO3FDQWM0QixhQUFhO0dBYnhDLGNBQWMsQ0EyQjFCO1NBM0JZLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3NpbmdsZXRvbn0gZnJvbSBcInRzeXJpbmdlXCI7XHJcbmltcG9ydCB7RGJ9IGZyb20gXCJtb25nb2RiXCI7XHJcbmltcG9ydCBtb25nb29zZSBmcm9tIFwibW9uZ29vc2VcIjtcclxuaW1wb3J0IHtDb25maWd1cmF0aW9ufSBmcm9tIFwiLi9jb25maWd1cmF0aW9uXCI7XHJcblxyXG5Ac2luZ2xldG9uKClcclxuZXhwb3J0IGNsYXNzIE1vbmdvQ29ubmVjdG9yIHtcclxuXHJcbiAgICBnZXQgY29ubmVjdGlvbigpOiBtb25nb29zZS5Db25uZWN0aW9uIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb25uO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBkYXRhYmFzZSgpOiBEYiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGI7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGNvbm46IG1vbmdvb3NlLkNvbm5lY3Rpb247XHJcbiAgICBwcm90ZWN0ZWQgZGI6IERiO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHJlYWRvbmx5IGNvbmZpZ3VyYXRpb246IENvbmZpZ3VyYXRpb24pIHtcclxuICAgICAgICB0aGlzLmNvbm4gPSBudWxsO1xyXG4gICAgICAgIHRoaXMuZGIgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGNvbm5lY3QoKTogUHJvbWlzZTxEYj4ge1xyXG4gICAgICAgIGlmICh0aGlzLmRiKSByZXR1cm4gdGhpcy5kYjtcclxuICAgICAgICB0aGlzLmNvbm4gPSAoYXdhaXQgbW9uZ29vc2UuY29ubmVjdCh0aGlzLmNvbmZpZ3VyYXRpb24ucmVzb2x2ZShcIm1vbmdvVXJpXCIpIGFzIHN0cmluZywge1xyXG4gICAgICAgICAgICBkYk5hbWU6IHRoaXMuY29uZmlndXJhdGlvbi5yZXNvbHZlKFwibW9uZ29EYlwiKSxcclxuICAgICAgICAgICAgdXNlcjogdGhpcy5jb25maWd1cmF0aW9uLnJlc29sdmUoXCJtb25nb1VzZXJcIiksXHJcbiAgICAgICAgICAgIHBhc3M6IHRoaXMuY29uZmlndXJhdGlvbi5yZXNvbHZlKFwibW9uZ29QYXNzd29yZFwiKVxyXG4gICAgICAgIH0pKS5jb25uZWN0aW9uO1xyXG4gICAgICAgIHRoaXMuZGIgPSB0aGlzLmNvbm4uZGIgYXMgYW55O1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -15,7 +15,7 @@ import { exec } from 'child_process';
|
|
|
15
15
|
import { createHash } from 'crypto';
|
|
16
16
|
import { Subscription, Observable, Subject, from, BehaviorSubject } from 'rxjs';
|
|
17
17
|
import { canReportError } from 'rxjs/internal/util/canReportError';
|
|
18
|
-
import { ObjectId
|
|
18
|
+
import { ObjectId } from 'mongodb';
|
|
19
19
|
import mongoose from 'mongoose';
|
|
20
20
|
import { Readable, PassThrough } from 'stream';
|
|
21
21
|
import fileType from 'file-type/core';
|
|
@@ -37,6 +37,7 @@ import * as Handlebars from 'handlebars';
|
|
|
37
37
|
import { CommandsAddon, AnsiCodes } from '@stemy/terminal-commands-addon';
|
|
38
38
|
import { compare } from 'bcrypt';
|
|
39
39
|
import moment from 'moment';
|
|
40
|
+
import { GridFSBucket } from 'mongodb/lib/gridfs';
|
|
40
41
|
import { getModelForClass } from '@typegoose/typegoose';
|
|
41
42
|
import { getValue as getValue$1, setValue } from 'mongoose/lib/utils';
|
|
42
43
|
|
|
@@ -53,6 +54,8 @@ const SOCKET_CONTROLLERS = Symbol.for("socket-controllers-token");
|
|
|
53
54
|
const PARAMETER = Symbol.for("parameter-token");
|
|
54
55
|
const DI_CONTAINER = Symbol.for("di-container-token");
|
|
55
56
|
const OPENAPI_VALIDATION = Symbol.for("openapi-validation-token");
|
|
57
|
+
const LOCAL_DIR = Symbol.for('asset-local-dir');
|
|
58
|
+
const ASSET_DRIVER = Symbol.for('assets-driver');
|
|
56
59
|
class Parameter {
|
|
57
60
|
constructor(name, defaultValue, resolver = null) {
|
|
58
61
|
this.name = name;
|
|
@@ -947,14 +950,10 @@ let MongoConnector = class MongoConnector {
|
|
|
947
950
|
get database() {
|
|
948
951
|
return this.db;
|
|
949
952
|
}
|
|
950
|
-
get bucket() {
|
|
951
|
-
return this.fsBucket;
|
|
952
|
-
}
|
|
953
953
|
constructor(configuration) {
|
|
954
954
|
this.configuration = configuration;
|
|
955
955
|
this.conn = null;
|
|
956
956
|
this.db = null;
|
|
957
|
-
this.fsBucket = null;
|
|
958
957
|
}
|
|
959
958
|
connect() {
|
|
960
959
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -966,7 +965,6 @@ let MongoConnector = class MongoConnector {
|
|
|
966
965
|
pass: this.configuration.resolve("mongoPassword")
|
|
967
966
|
})).connection;
|
|
968
967
|
this.db = this.conn.db;
|
|
969
|
-
this.fsBucket = new GridFSBucket(this.db, { bucketName: "assets" });
|
|
970
968
|
});
|
|
971
969
|
}
|
|
972
970
|
};
|
|
@@ -977,19 +975,19 @@ MongoConnector = __decorate([
|
|
|
977
975
|
|
|
978
976
|
class BaseEntity {
|
|
979
977
|
get id() {
|
|
980
|
-
return this.
|
|
978
|
+
return this.oid.toHexString();
|
|
981
979
|
}
|
|
982
|
-
constructor(
|
|
983
|
-
this.
|
|
980
|
+
constructor(oid, data, collection) {
|
|
981
|
+
this.oid = oid;
|
|
984
982
|
this.data = data;
|
|
985
983
|
this.collection = collection;
|
|
986
984
|
}
|
|
987
985
|
save() {
|
|
988
|
-
return this.collection.updateOne({ _id: this.
|
|
986
|
+
return this.collection.updateOne({ _id: this.oid }, { $set: this.toJSON() }, { upsert: true });
|
|
989
987
|
}
|
|
990
988
|
load() {
|
|
991
989
|
return __awaiter(this, void 0, void 0, function* () {
|
|
992
|
-
const res = yield this.collection.findOne({ _id: this.
|
|
990
|
+
const res = yield this.collection.findOne({ _id: this.oid });
|
|
993
991
|
this.deleted = !res;
|
|
994
992
|
this.data = res || {};
|
|
995
993
|
return this;
|
|
@@ -1016,21 +1014,34 @@ class Asset extends BaseEntity {
|
|
|
1016
1014
|
return this.data.metadata;
|
|
1017
1015
|
}
|
|
1018
1016
|
get stream() {
|
|
1019
|
-
return this.
|
|
1017
|
+
return this.driver.openDownloadStream(this.oid);
|
|
1020
1018
|
}
|
|
1021
|
-
constructor(id, data, collection,
|
|
1019
|
+
constructor(id, data, collection, driver) {
|
|
1022
1020
|
super(id, data, collection);
|
|
1023
|
-
this.
|
|
1021
|
+
this.driver = driver;
|
|
1024
1022
|
}
|
|
1025
1023
|
unlink() {
|
|
1026
1024
|
return __awaiter(this, void 0, void 0, function* () {
|
|
1027
|
-
|
|
1025
|
+
try {
|
|
1026
|
+
yield this.driver.delete(this.oid);
|
|
1027
|
+
yield this.collection.deleteOne({ _id: this.oid });
|
|
1028
|
+
}
|
|
1029
|
+
catch (error) {
|
|
1030
|
+
let err = error;
|
|
1031
|
+
if (error) {
|
|
1032
|
+
err = error.message || error || "";
|
|
1033
|
+
if (!isString(err) || !err.startsWith("FileNotFound")) {
|
|
1034
|
+
throw err;
|
|
1035
|
+
}
|
|
1036
|
+
}
|
|
1037
|
+
}
|
|
1038
|
+
return this.id;
|
|
1028
1039
|
});
|
|
1029
1040
|
}
|
|
1030
1041
|
setMeta(metadata) {
|
|
1031
1042
|
return __awaiter(this, void 0, void 0, function* () {
|
|
1032
1043
|
metadata = Object.assign(this.metadata, metadata || {});
|
|
1033
|
-
yield this.collection.updateOne({ _id: this.
|
|
1044
|
+
yield this.collection.updateOne({ _id: this.oid }, { $set: { metadata } });
|
|
1034
1045
|
});
|
|
1035
1046
|
}
|
|
1036
1047
|
getBuffer() {
|
|
@@ -1044,7 +1055,7 @@ class Asset extends BaseEntity {
|
|
|
1044
1055
|
: metadata.downloadCount + 1;
|
|
1045
1056
|
metadata.firstDownload = metadata.firstDownload || new Date();
|
|
1046
1057
|
metadata.lastDownload = new Date();
|
|
1047
|
-
yield this.collection.updateOne({ _id: this.
|
|
1058
|
+
yield this.collection.updateOne({ _id: this.oid }, { $set: { metadata } });
|
|
1048
1059
|
return this.stream;
|
|
1049
1060
|
});
|
|
1050
1061
|
}
|
|
@@ -1119,12 +1130,12 @@ class TempAsset {
|
|
|
1119
1130
|
}
|
|
1120
1131
|
|
|
1121
1132
|
let Assets = class Assets {
|
|
1122
|
-
constructor(connector, assetProcessor) {
|
|
1133
|
+
constructor(connector, assetProcessor, driver) {
|
|
1123
1134
|
var _a;
|
|
1124
1135
|
this.connector = connector;
|
|
1125
1136
|
this.assetProcessor = assetProcessor;
|
|
1126
|
-
this.
|
|
1127
|
-
this.collection = (_a = connector.database) === null || _a === void 0 ? void 0 : _a.collection(
|
|
1137
|
+
this.driver = driver;
|
|
1138
|
+
this.collection = (_a = connector.database) === null || _a === void 0 ? void 0 : _a.collection(driver.metaCollection);
|
|
1128
1139
|
}
|
|
1129
1140
|
write(stream, contentType = null, metadata = null) {
|
|
1130
1141
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -1204,7 +1215,7 @@ let Assets = class Assets {
|
|
|
1204
1215
|
find(where) {
|
|
1205
1216
|
return __awaiter(this, void 0, void 0, function* () {
|
|
1206
1217
|
const data = yield this.collection.findOne(where);
|
|
1207
|
-
return !data ? null : new Asset(data._id, data, this.collection, this.
|
|
1218
|
+
return !data ? null : new Asset(data._id, data, this.collection, this.driver);
|
|
1208
1219
|
});
|
|
1209
1220
|
}
|
|
1210
1221
|
findMany(where) {
|
|
@@ -1215,7 +1226,7 @@ let Assets = class Assets {
|
|
|
1215
1226
|
for (let item of items) {
|
|
1216
1227
|
if (!item)
|
|
1217
1228
|
continue;
|
|
1218
|
-
result.push(new Asset(item._id, item, this.collection, this.
|
|
1229
|
+
result.push(new Asset(item._id, item, this.collection, this.driver));
|
|
1219
1230
|
}
|
|
1220
1231
|
return result;
|
|
1221
1232
|
});
|
|
@@ -1245,7 +1256,11 @@ let Assets = class Assets {
|
|
|
1245
1256
|
metadata.filename = metadata.filename || new ObjectId$1().toHexString();
|
|
1246
1257
|
metadata.extension = (fileType.ext || "").trim();
|
|
1247
1258
|
return new Promise(((resolve, reject) => {
|
|
1248
|
-
const uploaderStream = this.
|
|
1259
|
+
const uploaderStream = this.driver.openUploadStream(metadata.filename, {
|
|
1260
|
+
chunkSizeBytes: 1048576,
|
|
1261
|
+
metadata,
|
|
1262
|
+
contentType: fileType.mime
|
|
1263
|
+
});
|
|
1249
1264
|
stream.pipe(uploaderStream)
|
|
1250
1265
|
.on("error", error => {
|
|
1251
1266
|
reject(error.message || error);
|
|
@@ -1255,7 +1270,7 @@ let Assets = class Assets {
|
|
|
1255
1270
|
filename: metadata.filename,
|
|
1256
1271
|
contentType,
|
|
1257
1272
|
metadata
|
|
1258
|
-
}, this.collection, this.
|
|
1273
|
+
}, this.collection, this.driver);
|
|
1259
1274
|
asset.save().then(() => {
|
|
1260
1275
|
resolve(asset);
|
|
1261
1276
|
}, error => {
|
|
@@ -1269,7 +1284,9 @@ let Assets = class Assets {
|
|
|
1269
1284
|
Assets = __decorate([
|
|
1270
1285
|
injectable(),
|
|
1271
1286
|
scoped(Lifecycle.ContainerScoped),
|
|
1272
|
-
|
|
1287
|
+
__param(2, inject(ASSET_DRIVER)),
|
|
1288
|
+
__metadata("design:paramtypes", [MongoConnector,
|
|
1289
|
+
AssetProcessor, Object])
|
|
1273
1290
|
], Assets);
|
|
1274
1291
|
|
|
1275
1292
|
class LazyAsset extends BaseEntity {
|
|
@@ -1304,9 +1321,9 @@ class LazyAsset extends BaseEntity {
|
|
|
1304
1321
|
return __awaiter(this, void 0, void 0, function* () {
|
|
1305
1322
|
yield this.load();
|
|
1306
1323
|
if (!this.progressId) {
|
|
1307
|
-
yield this.collection.deleteOne({ _id: this.
|
|
1324
|
+
yield this.collection.deleteOne({ _id: this.oid });
|
|
1308
1325
|
}
|
|
1309
|
-
return
|
|
1326
|
+
return this.assets.unlink(this.assetId);
|
|
1310
1327
|
});
|
|
1311
1328
|
}
|
|
1312
1329
|
startWorking() {
|
|
@@ -1355,7 +1372,7 @@ class LazyAsset extends BaseEntity {
|
|
|
1355
1372
|
this.data.progressId = (yield this.progresses.create()).id;
|
|
1356
1373
|
this.data.assetId = null;
|
|
1357
1374
|
yield this.save();
|
|
1358
|
-
yield
|
|
1375
|
+
yield this.assets.unlink(oldAsset);
|
|
1359
1376
|
const jobParams = JSON.parse(yield gunzipPromised(this.data.jobParams));
|
|
1360
1377
|
yield this.progresses.jobMan.enqueueWithName(this.data.jobName, Object.assign(Object.assign({}, jobParams), { lazyId: this.id, fromLoad }));
|
|
1361
1378
|
});
|
|
@@ -4075,6 +4092,26 @@ const fixtures = [
|
|
|
4075
4092
|
TtlFixture,
|
|
4076
4093
|
];
|
|
4077
4094
|
|
|
4095
|
+
let AssetGridDriver = class AssetGridDriver {
|
|
4096
|
+
constructor(connector) {
|
|
4097
|
+
this.bucket = new GridFSBucket(connector.database, { bucketName: 'assets' });
|
|
4098
|
+
this.metaCollection = "assets.files";
|
|
4099
|
+
}
|
|
4100
|
+
openUploadStream(filename, opts) {
|
|
4101
|
+
return this.bucket.openUploadStream(filename, opts);
|
|
4102
|
+
}
|
|
4103
|
+
openDownloadStream(id) {
|
|
4104
|
+
return this.bucket.openDownloadStream(id);
|
|
4105
|
+
}
|
|
4106
|
+
delete(id) {
|
|
4107
|
+
return this.bucket.delete(id);
|
|
4108
|
+
}
|
|
4109
|
+
};
|
|
4110
|
+
AssetGridDriver = __decorate([
|
|
4111
|
+
injectable(),
|
|
4112
|
+
__metadata("design:paramtypes", [MongoConnector])
|
|
4113
|
+
], AssetGridDriver);
|
|
4114
|
+
|
|
4078
4115
|
class BaseDoc {
|
|
4079
4116
|
/**
|
|
4080
4117
|
* Casts this to DocumentType<this> to allow using document methods in get/set-s
|
|
@@ -4605,6 +4642,12 @@ function setupBackend(config, providers, parent) {
|
|
|
4605
4642
|
diContainer.register(OPENAPI_VALIDATION, {
|
|
4606
4643
|
useValue: config.customValidation || (() => null)
|
|
4607
4644
|
});
|
|
4645
|
+
diContainer.register(LOCAL_DIR, {
|
|
4646
|
+
useValue: config.assetLocalDir || "assets_files"
|
|
4647
|
+
});
|
|
4648
|
+
diContainer.register(ASSET_DRIVER, {
|
|
4649
|
+
useClass: config.assetDriver || AssetGridDriver
|
|
4650
|
+
});
|
|
4608
4651
|
diContainers.appContainer = diContainers.appContainer || diContainer;
|
|
4609
4652
|
// Authentication
|
|
4610
4653
|
restOptions.authorizationChecker = (action, roles) => __awaiter(this, void 0, void 0, function* () {
|