@stemy/backend 5.1.0 → 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 +37 -17
- package/esm2020/common-types.mjs +3 -1
- package/esm2020/public_api.mjs +10 -3
- package/esm2020/rest-middlewares/error-handler.middleware.mjs +4 -4
- package/esm2020/services/assets.mjs +19 -12
- package/esm2020/services/backend-provider.mjs +5 -5
- package/esm2020/services/drivers/asset-grid.driver.mjs +25 -0
- package/esm2020/services/entities/asset.mjs +23 -10
- package/esm2020/services/entities/base-entity.mjs +8 -8
- package/esm2020/services/entities/lazy-asset.mjs +11 -12
- package/esm2020/services/entities/progress.mjs +17 -17
- package/esm2020/services/entities/temp-asset.mjs +4 -4
- package/esm2020/services/mail-sender.mjs +4 -4
- package/esm2020/services/mongo-connector.mjs +5 -11
- package/esm2020/services/open-api.mjs +6 -6
- package/esm2020/utilities/base-doc.mjs +1 -1
- package/esm2020/utilities/di-container.mjs +7 -7
- package/esm2020/utilities/lazy-asset-generator.mjs +6 -6
- package/esm2020/utilities/tree.mjs +4 -4
- package/fesm2015/stemy-backend.mjs +134 -91
- package/fesm2015/stemy-backend.mjs.map +1 -1
- package/fesm2020/stemy-backend.mjs +133 -90
- 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
- package/utilities/base-doc.d.ts +3 -3
- package/utils.d.ts +1 -1
|
@@ -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;
|
|
@@ -941,20 +944,16 @@ Configuration = __decorate([
|
|
|
941
944
|
], Configuration);
|
|
942
945
|
|
|
943
946
|
let MongoConnector = class MongoConnector {
|
|
944
|
-
constructor(configuration) {
|
|
945
|
-
this.configuration = configuration;
|
|
946
|
-
this.conn = null;
|
|
947
|
-
this.db = null;
|
|
948
|
-
this.fsBucket = null;
|
|
949
|
-
}
|
|
950
947
|
get connection() {
|
|
951
948
|
return this.conn;
|
|
952
949
|
}
|
|
953
950
|
get database() {
|
|
954
951
|
return this.db;
|
|
955
952
|
}
|
|
956
|
-
|
|
957
|
-
|
|
953
|
+
constructor(configuration) {
|
|
954
|
+
this.configuration = configuration;
|
|
955
|
+
this.conn = null;
|
|
956
|
+
this.db = 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
|
};
|
|
@@ -976,20 +974,20 @@ MongoConnector = __decorate([
|
|
|
976
974
|
], MongoConnector);
|
|
977
975
|
|
|
978
976
|
class BaseEntity {
|
|
979
|
-
|
|
980
|
-
this.
|
|
977
|
+
get id() {
|
|
978
|
+
return this.oid.toHexString();
|
|
979
|
+
}
|
|
980
|
+
constructor(oid, data, collection) {
|
|
981
|
+
this.oid = oid;
|
|
981
982
|
this.data = data;
|
|
982
983
|
this.collection = collection;
|
|
983
984
|
}
|
|
984
|
-
get id() {
|
|
985
|
-
return this.mId.toHexString();
|
|
986
|
-
}
|
|
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;
|
|
@@ -1006,10 +1004,6 @@ class BaseEntity {
|
|
|
1006
1004
|
}
|
|
1007
1005
|
|
|
1008
1006
|
class Asset extends BaseEntity {
|
|
1009
|
-
constructor(id, data, collection, bucket) {
|
|
1010
|
-
super(id, data, collection);
|
|
1011
|
-
this.bucket = bucket;
|
|
1012
|
-
}
|
|
1013
1007
|
get filename() {
|
|
1014
1008
|
return this.data.filename;
|
|
1015
1009
|
}
|
|
@@ -1020,17 +1014,34 @@ class Asset extends BaseEntity {
|
|
|
1020
1014
|
return this.data.metadata;
|
|
1021
1015
|
}
|
|
1022
1016
|
get stream() {
|
|
1023
|
-
return this.
|
|
1017
|
+
return this.driver.openDownloadStream(this.oid);
|
|
1018
|
+
}
|
|
1019
|
+
constructor(id, data, collection, driver) {
|
|
1020
|
+
super(id, data, collection);
|
|
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
|
}
|
|
@@ -1061,6 +1072,9 @@ class Asset extends BaseEntity {
|
|
|
1061
1072
|
}
|
|
1062
1073
|
|
|
1063
1074
|
class TempAsset {
|
|
1075
|
+
get stream() {
|
|
1076
|
+
return bufferToStream(this.buffer);
|
|
1077
|
+
}
|
|
1064
1078
|
constructor(buffer, filename, contentType, metadata) {
|
|
1065
1079
|
this.buffer = buffer;
|
|
1066
1080
|
this.filename = filename;
|
|
@@ -1068,9 +1082,6 @@ class TempAsset {
|
|
|
1068
1082
|
this.metadata = metadata;
|
|
1069
1083
|
this.id = new ObjectId$1().toHexString();
|
|
1070
1084
|
}
|
|
1071
|
-
get stream() {
|
|
1072
|
-
return bufferToStream(this.buffer);
|
|
1073
|
-
}
|
|
1074
1085
|
unlink() {
|
|
1075
1086
|
return __awaiter(this, void 0, void 0, function* () {
|
|
1076
1087
|
throw new Error(`Temp asset '${this.id}' can not be removed!`);
|
|
@@ -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,16 +1284,12 @@ 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 {
|
|
1276
|
-
constructor(id, data, collection, logger, assets, progresses) {
|
|
1277
|
-
super(id, data, collection);
|
|
1278
|
-
this.logger = logger;
|
|
1279
|
-
this.assets = assets;
|
|
1280
|
-
this.progresses = progresses;
|
|
1281
|
-
}
|
|
1282
1293
|
get jobName() {
|
|
1283
1294
|
return this.data.jobName;
|
|
1284
1295
|
}
|
|
@@ -1300,13 +1311,19 @@ class LazyAsset extends BaseEntity {
|
|
|
1300
1311
|
get assetId() {
|
|
1301
1312
|
return this.data.assetId;
|
|
1302
1313
|
}
|
|
1314
|
+
constructor(id, data, collection, logger, assets, progresses) {
|
|
1315
|
+
super(id, data, collection);
|
|
1316
|
+
this.logger = logger;
|
|
1317
|
+
this.assets = assets;
|
|
1318
|
+
this.progresses = progresses;
|
|
1319
|
+
}
|
|
1303
1320
|
unlink() {
|
|
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
|
});
|
|
@@ -1566,9 +1583,6 @@ JobManager = __decorate([
|
|
|
1566
1583
|
], JobManager);
|
|
1567
1584
|
|
|
1568
1585
|
class Progress extends BaseEntity {
|
|
1569
|
-
constructor(id, data, collection) {
|
|
1570
|
-
super(id, data, collection);
|
|
1571
|
-
}
|
|
1572
1586
|
get current() {
|
|
1573
1587
|
return this.data.current;
|
|
1574
1588
|
}
|
|
@@ -1590,6 +1604,9 @@ class Progress extends BaseEntity {
|
|
|
1590
1604
|
get remaining() {
|
|
1591
1605
|
return this.max > 0 ? this.max - this.current : 0;
|
|
1592
1606
|
}
|
|
1607
|
+
constructor(id, data, collection) {
|
|
1608
|
+
super(id, data, collection);
|
|
1609
|
+
}
|
|
1593
1610
|
setMessageBridge(messageBridge) {
|
|
1594
1611
|
this.messageBridge = messageBridge || this.messageBridge;
|
|
1595
1612
|
return this;
|
|
@@ -1655,19 +1672,6 @@ class Progress extends BaseEntity {
|
|
|
1655
1672
|
}
|
|
1656
1673
|
}
|
|
1657
1674
|
class SubProgress {
|
|
1658
|
-
constructor(parent, progressFrom, progressValue, mMax = 100) {
|
|
1659
|
-
this.parent = parent;
|
|
1660
|
-
this.progressFrom = progressFrom;
|
|
1661
|
-
this.progressValue = progressValue;
|
|
1662
|
-
this.mMax = mMax;
|
|
1663
|
-
if (progressFrom < 0) {
|
|
1664
|
-
throw "Progress from must be bigger than or zero";
|
|
1665
|
-
}
|
|
1666
|
-
if (progressValue <= 0) {
|
|
1667
|
-
throw "Progress value must be bigger than zero";
|
|
1668
|
-
}
|
|
1669
|
-
this.mCurrent = 0;
|
|
1670
|
-
}
|
|
1671
1675
|
get id() {
|
|
1672
1676
|
return this.parent.id;
|
|
1673
1677
|
}
|
|
@@ -1692,6 +1696,19 @@ class SubProgress {
|
|
|
1692
1696
|
get canceled() {
|
|
1693
1697
|
return !this.parent || this.parent.canceled;
|
|
1694
1698
|
}
|
|
1699
|
+
constructor(parent, progressFrom, progressValue, mMax = 100) {
|
|
1700
|
+
this.parent = parent;
|
|
1701
|
+
this.progressFrom = progressFrom;
|
|
1702
|
+
this.progressValue = progressValue;
|
|
1703
|
+
this.mMax = mMax;
|
|
1704
|
+
if (progressFrom < 0) {
|
|
1705
|
+
throw "Progress from must be bigger than or zero";
|
|
1706
|
+
}
|
|
1707
|
+
if (progressValue <= 0) {
|
|
1708
|
+
throw "Progress value must be bigger than zero";
|
|
1709
|
+
}
|
|
1710
|
+
this.mCurrent = 0;
|
|
1711
|
+
}
|
|
1695
1712
|
setMessageBridge(messageBridge) {
|
|
1696
1713
|
if (!this.parent)
|
|
1697
1714
|
return this;
|
|
@@ -1993,11 +2010,6 @@ IsObjectId = __decorate([
|
|
|
1993
2010
|
], IsObjectId);
|
|
1994
2011
|
|
|
1995
2012
|
let OpenApi = class OpenApi {
|
|
1996
|
-
constructor(container, customValidation) {
|
|
1997
|
-
this.container = container;
|
|
1998
|
-
this.customValidation = customValidation;
|
|
1999
|
-
this.docs = null;
|
|
2000
|
-
}
|
|
2001
2013
|
get apiDocs() {
|
|
2002
2014
|
if (!this.docs)
|
|
2003
2015
|
this.docs = this.createApiDocs();
|
|
@@ -2008,6 +2020,11 @@ let OpenApi = class OpenApi {
|
|
|
2008
2020
|
this.docsStr = JSON.stringify(this.apiDocs);
|
|
2009
2021
|
return this.docsStr;
|
|
2010
2022
|
}
|
|
2023
|
+
constructor(container, customValidation) {
|
|
2024
|
+
this.container = container;
|
|
2025
|
+
this.customValidation = customValidation;
|
|
2026
|
+
this.docs = null;
|
|
2027
|
+
}
|
|
2011
2028
|
schemaToExample(src, req) {
|
|
2012
2029
|
var _a, _b, _c;
|
|
2013
2030
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -2138,10 +2155,6 @@ Fixtures = __decorate([
|
|
|
2138
2155
|
|
|
2139
2156
|
const express = express_;
|
|
2140
2157
|
let BackendProvider = class BackendProvider {
|
|
2141
|
-
constructor(config, container) {
|
|
2142
|
-
this.config = config;
|
|
2143
|
-
this.container = container;
|
|
2144
|
-
}
|
|
2145
2158
|
get io() {
|
|
2146
2159
|
this.ioServer = this.ioServer || new Server(this.server, {
|
|
2147
2160
|
path: "/socket",
|
|
@@ -2175,6 +2188,10 @@ let BackendProvider = class BackendProvider {
|
|
|
2175
2188
|
this.httpServer = this.httpServer || createServer(this.express);
|
|
2176
2189
|
return this.httpServer;
|
|
2177
2190
|
}
|
|
2191
|
+
constructor(config, container) {
|
|
2192
|
+
this.config = config;
|
|
2193
|
+
this.container = container;
|
|
2194
|
+
}
|
|
2178
2195
|
quickStart() {
|
|
2179
2196
|
return __awaiter(this, void 0, void 0, function* () {
|
|
2180
2197
|
const port = this.config.resolve("appPort");
|
|
@@ -2670,6 +2687,9 @@ TemplateRenderer = __decorate([
|
|
|
2670
2687
|
], TemplateRenderer);
|
|
2671
2688
|
|
|
2672
2689
|
let MailSender = class MailSender {
|
|
2690
|
+
get translator() {
|
|
2691
|
+
return this.renderer.translator;
|
|
2692
|
+
}
|
|
2673
2693
|
constructor(config, renderer) {
|
|
2674
2694
|
this.config = config;
|
|
2675
2695
|
this.renderer = renderer;
|
|
@@ -2682,9 +2702,6 @@ let MailSender = class MailSender {
|
|
|
2682
2702
|
}
|
|
2683
2703
|
});
|
|
2684
2704
|
}
|
|
2685
|
-
get translator() {
|
|
2686
|
-
return this.renderer.translator;
|
|
2687
|
-
}
|
|
2688
2705
|
sendMail(language, options) {
|
|
2689
2706
|
return __awaiter(this, void 0, void 0, function* () {
|
|
2690
2707
|
const subject = yield this.translator.getTranslation(language, options.subject || "-");
|
|
@@ -3430,13 +3447,13 @@ TerminalController$1 = __decorate([
|
|
|
3430
3447
|
], TerminalController$1);
|
|
3431
3448
|
|
|
3432
3449
|
let ErrorHandlerMiddleware = class ErrorHandlerMiddleware {
|
|
3450
|
+
get isDev() {
|
|
3451
|
+
return this.configuration.resolve("nodeEnv") === "development";
|
|
3452
|
+
}
|
|
3433
3453
|
constructor(configuration, translator) {
|
|
3434
3454
|
this.configuration = configuration;
|
|
3435
3455
|
this.translator = translator;
|
|
3436
3456
|
}
|
|
3437
|
-
get isDev() {
|
|
3438
|
-
return this.configuration.resolve("nodeEnv") === "development";
|
|
3439
|
-
}
|
|
3440
3457
|
error(error, req, res, next) {
|
|
3441
3458
|
var _a;
|
|
3442
3459
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -3784,15 +3801,15 @@ CompressionMiddleware = __decorate([
|
|
|
3784
3801
|
], CompressionMiddleware);
|
|
3785
3802
|
|
|
3786
3803
|
class Tree {
|
|
3804
|
+
get parentTree() {
|
|
3805
|
+
return this.container.parent.tree;
|
|
3806
|
+
}
|
|
3787
3807
|
constructor(container, exists, path) {
|
|
3788
3808
|
this.container = container;
|
|
3789
3809
|
this.exists = exists;
|
|
3790
3810
|
this.path = path;
|
|
3791
3811
|
this.map = new Map();
|
|
3792
3812
|
}
|
|
3793
|
-
get parentTree() {
|
|
3794
|
-
return this.container.parent.tree;
|
|
3795
|
-
}
|
|
3796
3813
|
resolveService() {
|
|
3797
3814
|
return !this.exists ? null : this.container.resolve(this.path);
|
|
3798
3815
|
}
|
|
@@ -3898,6 +3915,13 @@ class Tree {
|
|
|
3898
3915
|
}
|
|
3899
3916
|
|
|
3900
3917
|
class DiContainer {
|
|
3918
|
+
get registeredTokens() {
|
|
3919
|
+
var _a;
|
|
3920
|
+
return (((_a = this.parent) === null || _a === void 0 ? void 0 : _a.registeredTokens) || []).concat(this.tokens);
|
|
3921
|
+
}
|
|
3922
|
+
get tree() {
|
|
3923
|
+
return this.root;
|
|
3924
|
+
}
|
|
3901
3925
|
constructor(container, parent = null) {
|
|
3902
3926
|
this.container = container;
|
|
3903
3927
|
this.parent = parent;
|
|
@@ -3906,13 +3930,6 @@ class DiContainer {
|
|
|
3906
3930
|
this.tokenSet = new Set();
|
|
3907
3931
|
this.root = new Tree(this, false, "");
|
|
3908
3932
|
}
|
|
3909
|
-
get registeredTokens() {
|
|
3910
|
-
var _a;
|
|
3911
|
-
return (((_a = this.parent) === null || _a === void 0 ? void 0 : _a.registeredTokens) || []).concat(this.tokens);
|
|
3912
|
-
}
|
|
3913
|
-
get tree() {
|
|
3914
|
-
return this.root;
|
|
3915
|
-
}
|
|
3916
3933
|
beforeResolution(token, callback, options) {
|
|
3917
3934
|
this.container.beforeResolution(token, callback, options);
|
|
3918
3935
|
}
|
|
@@ -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
|
|
@@ -4146,17 +4183,17 @@ function ResponseType(type, options = {}) {
|
|
|
4146
4183
|
}
|
|
4147
4184
|
|
|
4148
4185
|
class LazyAssetGenerator {
|
|
4149
|
-
constructor(assetResolver, progresses, lazyId) {
|
|
4150
|
-
this.assetResolver = assetResolver;
|
|
4151
|
-
this.progresses = progresses;
|
|
4152
|
-
this.lazyId = lazyId;
|
|
4153
|
-
}
|
|
4154
4186
|
get assets() {
|
|
4155
4187
|
return this.assetResolver.assets;
|
|
4156
4188
|
}
|
|
4157
4189
|
get lazyAssets() {
|
|
4158
4190
|
return this.assetResolver.lazyAssets;
|
|
4159
4191
|
}
|
|
4192
|
+
constructor(assetResolver, progresses, lazyId) {
|
|
4193
|
+
this.assetResolver = assetResolver;
|
|
4194
|
+
this.progresses = progresses;
|
|
4195
|
+
this.lazyId = lazyId;
|
|
4196
|
+
}
|
|
4160
4197
|
process(messaging) {
|
|
4161
4198
|
return __awaiter(this, void 0, void 0, function* () {
|
|
4162
4199
|
const lazyAsset = yield this.lazyAssets.read(this.lazyId);
|
|
@@ -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* () {
|