@futdevpro/nts-dynamo 1.10.9 → 1.10.11
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/build/_collections/global-settings.const.d.ts.map +1 -1
- package/build/_collections/global-settings.const.js +1 -0
- package/build/_collections/global-settings.const.js.map +1 -1
- package/build/_models/control-models/api-call-params.control-model.d.ts.map +1 -1
- package/build/_models/control-models/api-call-params.control-model.js +1 -2
- package/build/_models/control-models/api-call-params.control-model.js.map +1 -1
- package/build/_models/control-models/app-params.control-model.d.ts.map +1 -1
- package/build/_models/control-models/app-params.control-model.js +16 -0
- package/build/_models/control-models/app-params.control-model.js.map +1 -1
- package/build/_models/control-models/endpoint-params.control-model.d.ts.map +1 -1
- package/build/_models/control-models/endpoint-params.control-model.js +1 -2
- package/build/_models/control-models/endpoint-params.control-model.js.map +1 -1
- package/build/_models/interfaces/global-settings.interface.d.ts +4 -0
- package/build/_models/interfaces/global-settings.interface.d.ts.map +1 -1
- package/build/_modules/mock/data-model.mock.spec.js +2 -2
- package/build/_modules/mock/data-model.mock.spec.js.map +1 -1
- package/build/_modules/server/error/error.controller.d.ts +13 -0
- package/build/_modules/server/error/error.controller.d.ts.map +1 -0
- package/build/_modules/server/error/error.controller.js +155 -0
- package/build/_modules/server/error/error.controller.js.map +1 -0
- package/build/_modules/server/error/error.data-service.d.ts +13 -0
- package/build/_modules/server/error/error.data-service.d.ts.map +1 -0
- package/build/_modules/server/error/error.data-service.js +249 -0
- package/build/_modules/server/error/error.data-service.js.map +1 -0
- package/build/_modules/server/index.d.ts +5 -0
- package/build/_modules/server/index.d.ts.map +1 -0
- package/build/_modules/server/index.js +10 -0
- package/build/_modules/server/index.js.map +1 -0
- package/build/_modules/server/server-status/server-status.control-service.d.ts +24 -0
- package/build/_modules/server/server-status/server-status.control-service.d.ts.map +1 -0
- package/build/_modules/server/server-status/server-status.control-service.js +102 -0
- package/build/_modules/server/server-status/server-status.control-service.js.map +1 -0
- package/build/_modules/server/server-status/server-status.controller.d.ts +9 -0
- package/build/_modules/server/server-status/server-status.controller.d.ts.map +1 -0
- package/build/_modules/server/server-status/server-status.controller.js +61 -0
- package/build/_modules/server/server-status/server-status.controller.js.map +1 -0
- package/build/_modules/socket/_services/socket-server.service.d.ts.map +1 -1
- package/build/_modules/socket/_services/socket-server.service.js.map +1 -1
- package/build/_modules/socket/index.d.ts +1 -0
- package/build/_modules/socket/index.d.ts.map +1 -1
- package/build/_modules/socket/index.js +1 -0
- package/build/_modules/socket/index.js.map +1 -1
- package/build/_services/base/data.service.d.ts +18 -10
- package/build/_services/base/data.service.d.ts.map +1 -1
- package/build/_services/base/data.service.js +151 -106
- package/build/_services/base/data.service.js.map +1 -1
- package/build/_services/base/db.service.d.ts +21 -10
- package/build/_services/base/db.service.d.ts.map +1 -1
- package/build/_services/base/db.service.js +79 -47
- package/build/_services/base/db.service.js.map +1 -1
- package/build/_services/core/api.service.d.ts.map +1 -1
- package/build/_services/core/api.service.js +18 -2
- package/build/_services/core/api.service.js.map +1 -1
- package/build/_services/core/global.service.d.ts.map +1 -1
- package/build/_services/core/global.service.js +8 -2
- package/build/_services/core/global.service.js.map +1 -1
- package/build/_services/server/app.server.d.ts.map +1 -1
- package/build/_services/server/app.server.js +13 -1
- package/build/_services/server/app.server.js.map +1 -1
- package/build/index.d.ts +0 -1
- package/build/index.d.ts.map +1 -1
- package/build/index.js +0 -1
- package/build/index.js.map +1 -1
- package/nodemon.json +2 -0
- package/package.json +11 -4
- package/src/_collections/global-settings.const.ts +1 -0
- package/src/_models/control-models/api-call-params.control-model.ts +2 -3
- package/src/_models/control-models/app-params.control-model.ts +25 -0
- package/src/_models/control-models/endpoint-params.control-model.ts +3 -3
- package/src/_models/interfaces/global-settings.interface.ts +5 -0
- package/src/_modules/mock/data-model.mock.spec.ts +2 -2
- package/src/_modules/server/error/error.controller.ts +210 -0
- package/src/_modules/server/error/error.data-service.ts +337 -0
- package/src/_modules/server/index.ts +11 -0
- package/src/_modules/server/server-status/server-status.control-service.ts +217 -0
- package/src/_modules/server/server-status/server-status.controller.ts +90 -0
- package/src/_modules/socket/_services/socket-server.service.ts +0 -1
- package/src/_modules/socket/index.ts +1 -1
- package/src/_services/base/data.service.ts +233 -164
- package/src/_services/base/db.service.ts +105 -60
- package/src/_services/core/api.service.ts +23 -2
- package/src/_services/core/global.service.ts +12 -5
- package/src/_services/server/app.server.ts +17 -4
- package/src/index.ts +0 -1
- package/tsconfig.json +1 -1
- package/build/_collections/stack.util.d.ts +0 -7
- package/build/_collections/stack.util.d.ts.map +0 -1
- package/build/_collections/stack.util.js +0 -31
- package/build/_collections/stack.util.js.map +0 -1
- package/build/_collections/stack.util.test.d.ts +0 -2
- package/build/_collections/stack.util.test.d.ts.map +0 -1
- package/build/_collections/stack.util.test.js +0 -96
- package/build/_collections/stack.util.test.js.map +0 -1
- package/src/_collections/stack.util.test.ts +0 -111
- package/src/_collections/stack.util.ts +0 -33
|
@@ -25,7 +25,8 @@ export class DyNTS_DBService<T extends DyFM_Metadata> {
|
|
|
25
25
|
|
|
26
26
|
dataModel/* : mongoose.Model<T> */; // = mongoose.model(this.dataParams.dataName, this.getSchema());
|
|
27
27
|
|
|
28
|
-
private depDataName: string;
|
|
28
|
+
/* private depDataName: string; */
|
|
29
|
+
private readonly depKeys: string[] = [];
|
|
29
30
|
|
|
30
31
|
defaultErrorUserMsg =
|
|
31
32
|
`We encountered an unhandled DB Error, ` +
|
|
@@ -43,7 +44,7 @@ export class DyNTS_DBService<T extends DyFM_Metadata> {
|
|
|
43
44
|
try {
|
|
44
45
|
this.serviceName = this.constructor?.name;
|
|
45
46
|
|
|
46
|
-
if (!this.dataParams.dataName) {
|
|
47
|
+
if (!this.dataParams.dataName || typeof this.dataParams.dataName !== 'string') {
|
|
47
48
|
throw new Error(
|
|
48
49
|
`dbName not setted up for this db-service (${this.dataParams.dataName}) (NTS DB)`
|
|
49
50
|
);
|
|
@@ -204,11 +205,11 @@ export class DyNTS_DBService<T extends DyFM_Metadata> {
|
|
|
204
205
|
* get data by dependency data id,
|
|
205
206
|
* !!!: throws error if not found (errorCode on not found: NTS-DBS-GD2)
|
|
206
207
|
*
|
|
207
|
-
* @param
|
|
208
|
+
* @param dependencyIdsFilter id
|
|
208
209
|
* @returns data
|
|
209
210
|
*/
|
|
210
|
-
async getDataByDependencyId(
|
|
211
|
-
if (!this.
|
|
211
|
+
async getDataByDependencyId(dependencyIdsFilter: { [key: string]: string }): Promise<T> {
|
|
212
|
+
if (!this.depKeys.length) {
|
|
212
213
|
throw new DyFM_Error({
|
|
213
214
|
...this._getDefaultErrorSettings(
|
|
214
215
|
'getDataByDependencyId',
|
|
@@ -222,31 +223,51 @@ export class DyNTS_DBService<T extends DyFM_Metadata> {
|
|
|
222
223
|
}
|
|
223
224
|
|
|
224
225
|
const data: T = await this.dataModel
|
|
225
|
-
.findOne(
|
|
226
|
+
.findOne(dependencyIdsFilter)
|
|
226
227
|
.then((res): T => res?.toObject() as T ?? null)
|
|
227
228
|
.catch((error): void => {
|
|
228
229
|
throw new DyFM_Error({
|
|
229
230
|
...this._getDefaultErrorSettings('getDataByDependencyId', error),
|
|
230
231
|
|
|
231
232
|
errorCode: 'NTS-DBS-GD1',
|
|
232
|
-
additionalContent: {
|
|
233
|
+
additionalContent: { dependencyIdsFilter: dependencyIdsFilter },
|
|
233
234
|
message:
|
|
234
|
-
`get "${this.dataParams.dataName}" by
|
|
235
|
+
`get "${this.dataParams.dataName}" by ` +
|
|
236
|
+
`"${Object.keys(dependencyIdsFilter).join(', ')}" was unsuccessful (NTS DB)`,
|
|
235
237
|
});
|
|
236
238
|
});
|
|
237
239
|
|
|
238
240
|
return this.stringifyDataId(data, 'getDataByDependencyId');
|
|
239
241
|
}
|
|
240
242
|
|
|
243
|
+
async getDataListByIds(ids: string[]): Promise<T[]> {
|
|
244
|
+
const dataList: T[] = await this.dataModel
|
|
245
|
+
.find({ _id: { $in: ids } })
|
|
246
|
+
.then((res): T[] => res as T[] ?? [])
|
|
247
|
+
.catch((error): void => {
|
|
248
|
+
throw new DyFM_Error({
|
|
249
|
+
...this._getDefaultErrorSettings('getDataListByIds', error),
|
|
250
|
+
errorCode: 'NTS-DBS-GDL0',
|
|
251
|
+
additionalContent: { ids },
|
|
252
|
+
});
|
|
253
|
+
});
|
|
254
|
+
|
|
255
|
+
return dataList.filter(
|
|
256
|
+
(data: T): boolean => !data._deleted
|
|
257
|
+
).map(
|
|
258
|
+
(data: T): T => this.stringifyDataId(data, 'getDataListByDependencyId')
|
|
259
|
+
);
|
|
260
|
+
}
|
|
261
|
+
|
|
241
262
|
/**
|
|
242
263
|
* get data by dependency data id,
|
|
243
264
|
* !!!: throws error if not found (errorCode on not found: NTS-DBS-GLD2)
|
|
244
265
|
*
|
|
245
|
-
* @param
|
|
266
|
+
* @param dependencyIdsFilter id
|
|
246
267
|
* @returns dataList
|
|
247
268
|
*/
|
|
248
|
-
async getDataListByDependencyId(
|
|
249
|
-
if (!this.
|
|
269
|
+
async getDataListByDependencyId(dependencyIdsFilter: { [key: string]: string }): Promise<T[]> {
|
|
270
|
+
if (!this.depKeys.length) {
|
|
250
271
|
throw new DyFM_Error({
|
|
251
272
|
...this._getDefaultErrorSettings(
|
|
252
273
|
'getDataListByDependencyId',
|
|
@@ -263,17 +284,16 @@ export class DyNTS_DBService<T extends DyFM_Metadata> {
|
|
|
263
284
|
}
|
|
264
285
|
|
|
265
286
|
const dataList: T[] = await this.dataModel
|
|
266
|
-
.find(
|
|
267
|
-
[this.depDataName]: dependencyId,
|
|
268
|
-
})
|
|
287
|
+
.find(dependencyIdsFilter)
|
|
269
288
|
.then((res): T[] => res as T[] ?? [])
|
|
270
289
|
.catch((error): void => {
|
|
271
290
|
throw new DyFM_Error({
|
|
272
291
|
...this._getDefaultErrorSettings('getDataListByDependencyId', error),
|
|
273
292
|
errorCode: 'NTS-DBS-GLD1',
|
|
274
|
-
additionalContent: {
|
|
293
|
+
additionalContent: { dependencyIdsFilter: dependencyIdsFilter },
|
|
275
294
|
message:
|
|
276
|
-
`get "${this.dataParams.dataName}" by
|
|
295
|
+
`get "${this.dataParams.dataName}" by ` +
|
|
296
|
+
`"${Object.keys(dependencyIdsFilter).join(', ')}" was unsuccessful (NTS DB)`,
|
|
277
297
|
});
|
|
278
298
|
});
|
|
279
299
|
|
|
@@ -291,8 +311,8 @@ export class DyNTS_DBService<T extends DyFM_Metadata> {
|
|
|
291
311
|
* @param ids ids
|
|
292
312
|
* @returns dataList
|
|
293
313
|
*/
|
|
294
|
-
async getDataListByDependencyIds(dependencyIds: string[]): Promise<T[]> {
|
|
295
|
-
if (!this.
|
|
314
|
+
async getDataListByDependencyIds(dependencyKey: string, dependencyIds: string[]): Promise<T[]> {
|
|
315
|
+
if (!this.depKeys.length) {
|
|
296
316
|
throw new DyFM_Error({
|
|
297
317
|
...this._getDefaultErrorSettings(
|
|
298
318
|
'getDataListByDependencyIds',
|
|
@@ -305,9 +325,31 @@ export class DyNTS_DBService<T extends DyFM_Metadata> {
|
|
|
305
325
|
});
|
|
306
326
|
}
|
|
307
327
|
|
|
328
|
+
if (!dependencyIds?.length) {
|
|
329
|
+
return [];
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
if (!dependencyKey) {
|
|
333
|
+
throw new DyFM_Error({
|
|
334
|
+
...this._getDefaultErrorSettings(
|
|
335
|
+
'getDataListByDependencyIds',
|
|
336
|
+
new Error(`dependencyKey is missing! (${this.dataParams.dataName}) (NTS DB)`),
|
|
337
|
+
),
|
|
338
|
+
});
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
if (!this.depKeys.includes(dependencyKey)) {
|
|
342
|
+
throw new DyFM_Error({
|
|
343
|
+
...this._getDefaultErrorSettings(
|
|
344
|
+
'getDataListByDependencyIds',
|
|
345
|
+
new Error(`dependencyKey is not valid! (${dependencyKey}) (NTS DB)`),
|
|
346
|
+
),
|
|
347
|
+
});
|
|
348
|
+
}
|
|
349
|
+
|
|
308
350
|
const dataList: T[] = await this.dataModel
|
|
309
351
|
.find({
|
|
310
|
-
[
|
|
352
|
+
[dependencyKey]: { $in: dependencyIds },
|
|
311
353
|
})
|
|
312
354
|
.then((res): T[] => res as T[] ?? [])
|
|
313
355
|
.catch((error): void => {
|
|
@@ -316,7 +358,7 @@ export class DyNTS_DBService<T extends DyFM_Metadata> {
|
|
|
316
358
|
errorCode: 'NTS-DBS-GLDS1',
|
|
317
359
|
additionalContent: { dependencyIds },
|
|
318
360
|
message:
|
|
319
|
-
`get "${this.dataParams.dataName}" by ${
|
|
361
|
+
`get "${this.dataParams.dataName}" by "${dependencyKey}" was unsuccessful (NTS DB)`,
|
|
320
362
|
});
|
|
321
363
|
});
|
|
322
364
|
|
|
@@ -375,9 +417,9 @@ export class DyNTS_DBService<T extends DyFM_Metadata> {
|
|
|
375
417
|
);
|
|
376
418
|
}
|
|
377
419
|
|
|
378
|
-
async markDeletedByDependencyId(
|
|
420
|
+
async markDeletedByDependencyId(dependencyIdsFilter: { [key: string]: string }, issuer: string): Promise<void> {
|
|
379
421
|
await this.dataModel.updateMany(
|
|
380
|
-
|
|
422
|
+
dependencyIdsFilter,
|
|
381
423
|
{
|
|
382
424
|
_deleted: new Date(),
|
|
383
425
|
_deletedBy: issuer,
|
|
@@ -386,9 +428,10 @@ export class DyNTS_DBService<T extends DyFM_Metadata> {
|
|
|
386
428
|
throw new DyFM_Error({
|
|
387
429
|
...this._getDefaultErrorSettings('markDeletedByDependencyId', error, issuer),
|
|
388
430
|
errorCode: 'NTS-DBS-MDD0',
|
|
389
|
-
additionalContent: {
|
|
431
|
+
additionalContent: { dependencyIdsFilter: dependencyIdsFilter },
|
|
390
432
|
message:
|
|
391
|
-
`markDeleted "${this.dataParams.dataName}" by
|
|
433
|
+
`markDeleted "${this.dataParams.dataName}" by ` +
|
|
434
|
+
`"${Object.keys(dependencyIdsFilter).join(', ')}" was unsuccessful ` +
|
|
392
435
|
`(NTS DB)`,
|
|
393
436
|
issuer,
|
|
394
437
|
});
|
|
@@ -415,9 +458,12 @@ export class DyNTS_DBService<T extends DyFM_Metadata> {
|
|
|
415
458
|
});
|
|
416
459
|
}
|
|
417
460
|
|
|
418
|
-
async restoreDeletedByDependencyId(
|
|
461
|
+
async restoreDeletedByDependencyId(
|
|
462
|
+
dependencyIdsFilter: { [key: string]: string },
|
|
463
|
+
issuer: string
|
|
464
|
+
): Promise<void> {
|
|
419
465
|
await this.dataModel.updateMany(
|
|
420
|
-
|
|
466
|
+
dependencyIdsFilter,
|
|
421
467
|
{
|
|
422
468
|
_deleted: null,
|
|
423
469
|
__lastModified: new Date(),
|
|
@@ -427,9 +473,10 @@ export class DyNTS_DBService<T extends DyFM_Metadata> {
|
|
|
427
473
|
throw new DyFM_Error({
|
|
428
474
|
...this._getDefaultErrorSettings('restoreDeletedByDependencyId', error, issuer),
|
|
429
475
|
errorCode: 'NTS-DBS-RDD0',
|
|
430
|
-
additionalContent: {
|
|
476
|
+
additionalContent: { dependencyIdsFilter: dependencyIdsFilter },
|
|
431
477
|
message:
|
|
432
|
-
`restoreDeleted "${this.dataParams.dataName}" by
|
|
478
|
+
`restoreDeleted "${this.dataParams.dataName}" by ` +
|
|
479
|
+
`"${Object.keys(dependencyIdsFilter).join(', ')}" was unsuccessful ` +
|
|
433
480
|
`(NTS DB)`,
|
|
434
481
|
issuer,
|
|
435
482
|
});
|
|
@@ -474,8 +521,8 @@ export class DyNTS_DBService<T extends DyFM_Metadata> {
|
|
|
474
521
|
* deleted data by id
|
|
475
522
|
* @param dependencyId id
|
|
476
523
|
*/
|
|
477
|
-
async deleteDataByDependencyId(
|
|
478
|
-
if (!this.
|
|
524
|
+
async deleteDataByDependencyId(dependencyIdsFilter: { [key: string]: string }): Promise<void> {
|
|
525
|
+
if (!this.depKeys.length) {
|
|
479
526
|
throw new DyFM_Error({
|
|
480
527
|
...this._getDefaultErrorSettings(
|
|
481
528
|
'deleteDataByDependencyId',
|
|
@@ -489,14 +536,15 @@ export class DyNTS_DBService<T extends DyFM_Metadata> {
|
|
|
489
536
|
}
|
|
490
537
|
|
|
491
538
|
await this.dataModel
|
|
492
|
-
.deleteMany(
|
|
539
|
+
.deleteMany(dependencyIdsFilter)
|
|
493
540
|
.catch((error): void => {
|
|
494
541
|
throw new DyFM_Error({
|
|
495
542
|
...this._getDefaultErrorSettings('deleteDataByDependencyId', error),
|
|
496
543
|
errorCode: 'NTS-DBS-DDD1',
|
|
497
|
-
additionalContent: {
|
|
544
|
+
additionalContent: { dependencyIdsFilter: dependencyIdsFilter },
|
|
498
545
|
message:
|
|
499
|
-
`delete "${this.dataParams.dataName}" by
|
|
546
|
+
`delete "${this.dataParams.dataName}" by ` +
|
|
547
|
+
`"${Object.keys(dependencyIdsFilter).join(', ')}" was unsuccessful (NTS DB)`,
|
|
500
548
|
});
|
|
501
549
|
});
|
|
502
550
|
}
|
|
@@ -521,12 +569,13 @@ export class DyNTS_DBService<T extends DyFM_Metadata> {
|
|
|
521
569
|
*/
|
|
522
570
|
async searchData(
|
|
523
571
|
filterBy: DyFM_DBFilter<T>,
|
|
524
|
-
narrowByDependencyIds?: string[]
|
|
572
|
+
narrowByDependencyIds?: string[],
|
|
573
|
+
narrowByDependencyKey?: string,
|
|
525
574
|
): Promise<T[]> {
|
|
526
575
|
const filter = {};
|
|
527
576
|
|
|
528
577
|
if (0 < narrowByDependencyIds.length) {
|
|
529
|
-
if (!this.
|
|
578
|
+
if (!this.depKeys.length) {
|
|
530
579
|
throw new DyFM_Error({
|
|
531
580
|
...this._getDefaultErrorSettings(
|
|
532
581
|
'searchData',
|
|
@@ -538,8 +587,21 @@ export class DyNTS_DBService<T extends DyFM_Metadata> {
|
|
|
538
587
|
errorCode: 'NTS-DBS-SD0',
|
|
539
588
|
});
|
|
540
589
|
}
|
|
541
|
-
|
|
542
|
-
|
|
590
|
+
|
|
591
|
+
if (!narrowByDependencyKey) {
|
|
592
|
+
if (this.depKeys.length === 1) {
|
|
593
|
+
narrowByDependencyKey = this.depKeys[0];
|
|
594
|
+
} else {
|
|
595
|
+
throw new DyFM_Error({
|
|
596
|
+
...this._getDefaultErrorSettings(
|
|
597
|
+
'searchData',
|
|
598
|
+
new Error(`dependencyKey is missing! (${this.dataParams.dataName}) (NTS DB)`),
|
|
599
|
+
),
|
|
600
|
+
});
|
|
601
|
+
}
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
filter[narrowByDependencyKey] = { $in: narrowByDependencyIds };
|
|
543
605
|
}
|
|
544
606
|
|
|
545
607
|
Object.values(this.dataParams.properties).forEach(
|
|
@@ -1231,33 +1293,16 @@ export class DyNTS_DBService<T extends DyFM_Metadata> {
|
|
|
1231
1293
|
* sets depDataKey
|
|
1232
1294
|
*/
|
|
1233
1295
|
private lookForDependencyDataSettings(): void {
|
|
1234
|
-
const
|
|
1235
|
-
Object.values(this.dataParams.properties).find(
|
|
1236
|
-
(modelParams: DyFM_DataProperty_Params<any>): boolean =>
|
|
1237
|
-
Boolean(modelParams.dependencyDataName)
|
|
1238
|
-
);
|
|
1239
|
-
|
|
1240
|
-
if (
|
|
1296
|
+
const dependencyParams: DyFM_DataProperty_Params<any>[] =
|
|
1241
1297
|
Object.values(this.dataParams.properties).filter(
|
|
1242
1298
|
(modelParams: DyFM_DataProperty_Params<any>): boolean =>
|
|
1243
1299
|
Boolean(modelParams.dependencyDataName)
|
|
1244
|
-
)
|
|
1245
|
-
) {
|
|
1246
|
-
throw new DyFM_Error({
|
|
1247
|
-
...this._getDefaultErrorSettings(
|
|
1248
|
-
'lookForDependencyDataSettings',
|
|
1249
|
-
new Error(
|
|
1250
|
-
`Multiple "dependencyDataName" found for this dataModel (${this.dataParams.dataName}) ` +
|
|
1251
|
-
`(NTS DB)` +
|
|
1252
|
-
`\nSorry, but this is not supported yet! (Donate to Dynamo to get this feature!)`
|
|
1253
|
-
)
|
|
1254
|
-
),
|
|
1255
|
-
errorCode: 'NTS-DBS-LFDD0',
|
|
1256
|
-
});
|
|
1257
|
-
}
|
|
1300
|
+
);
|
|
1258
1301
|
|
|
1259
|
-
if (
|
|
1260
|
-
this.
|
|
1302
|
+
if (dependencyParams) {
|
|
1303
|
+
this.depKeys.push(...dependencyParams.map(
|
|
1304
|
+
(dependencyParam: DyFM_DataProperty_Params<any>): string => dependencyParam.key
|
|
1305
|
+
));
|
|
1261
1306
|
}
|
|
1262
1307
|
}
|
|
1263
1308
|
}
|
|
@@ -195,7 +195,11 @@ export class DyNTS_ApiService {
|
|
|
195
195
|
DyFM_Log.error(msg);
|
|
196
196
|
}
|
|
197
197
|
|
|
198
|
-
if (
|
|
198
|
+
if (
|
|
199
|
+
error &&
|
|
200
|
+
typeof error.error === 'string' &&
|
|
201
|
+
callParams?.httpOptions?.responseType === DyFM_HttpResponseType.text
|
|
202
|
+
) {
|
|
199
203
|
error.error = JSON.parse(error?.error);
|
|
200
204
|
}
|
|
201
205
|
|
|
@@ -215,6 +219,7 @@ export class DyNTS_ApiService {
|
|
|
215
219
|
additionalContent: {
|
|
216
220
|
callParams,
|
|
217
221
|
inputParams,
|
|
222
|
+
response: error.response,
|
|
218
223
|
},
|
|
219
224
|
});
|
|
220
225
|
|
|
@@ -233,6 +238,7 @@ export class DyNTS_ApiService {
|
|
|
233
238
|
additionalContent: {
|
|
234
239
|
callParams,
|
|
235
240
|
inputParams,
|
|
241
|
+
response: error.response,
|
|
236
242
|
},
|
|
237
243
|
});
|
|
238
244
|
|
|
@@ -252,22 +258,37 @@ export class DyNTS_ApiService {
|
|
|
252
258
|
callParams,
|
|
253
259
|
inputParams,
|
|
254
260
|
url,
|
|
261
|
+
response: error.response,
|
|
255
262
|
},
|
|
256
263
|
});
|
|
257
264
|
|
|
258
265
|
} else if (error.config && error.message) {
|
|
259
266
|
|
|
267
|
+
let msg: string = error.message;
|
|
268
|
+
let status: number = +error.message.substring(error.message.length - 4, 3);
|
|
269
|
+
|
|
270
|
+
if (error.message.includes('status code')) {msg += `\nendpoint: ${callParams.baseUrl}${callParams.endpoint}` +
|
|
271
|
+
`\npathParams: ${
|
|
272
|
+
inputParams.pathParams ?
|
|
273
|
+
Object.keys(inputParams.pathParams).join(', ') :
|
|
274
|
+
'-no path params-'
|
|
275
|
+
}` +
|
|
276
|
+
`\nenpointStackLocation: ${callParams.stack}`;
|
|
277
|
+
}
|
|
278
|
+
|
|
260
279
|
throw new DyFM_Error({
|
|
261
280
|
...this._getDefaultErrorSettings(
|
|
262
281
|
callParams.name + ' startApiCall',
|
|
263
282
|
error
|
|
264
283
|
),
|
|
265
284
|
|
|
266
|
-
status:
|
|
285
|
+
status: status,
|
|
286
|
+
message: msg,
|
|
267
287
|
errorCode: 'NTS-API-HE4',
|
|
268
288
|
additionalContent: {
|
|
269
289
|
callParams,
|
|
270
290
|
inputParams,
|
|
291
|
+
response: error.response,
|
|
271
292
|
},
|
|
272
293
|
});
|
|
273
294
|
} else {
|
|
@@ -235,11 +235,18 @@ export class DyNTS_GlobalService extends DyNTS_SingletonService {
|
|
|
235
235
|
);
|
|
236
236
|
}
|
|
237
237
|
} catch (error) {
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
238
|
+
if (error instanceof DyFM_Error) {
|
|
239
|
+
error.logSimple(
|
|
240
|
+
`NTS GLOBAL MULTILEVEL ERROR: ` +
|
|
241
|
+
`\nFailed to handle error on globalErrorHandler.`,
|
|
242
|
+
);
|
|
243
|
+
} else {
|
|
244
|
+
DyFM_Log.error(
|
|
245
|
+
`NTS GLOBAL MULTILEVEL ERROR: ` +
|
|
246
|
+
`\nFailed to handle error on globalErrorHandler.`,
|
|
247
|
+
(error as DyFM_Error)?.getErrorSimplified?.() ?? error
|
|
248
|
+
);
|
|
249
|
+
}
|
|
243
250
|
}
|
|
244
251
|
});
|
|
245
252
|
} catch (error) {
|
|
@@ -308,10 +308,23 @@ export abstract class DyNTS_App extends DyNTS_SingletonService {
|
|
|
308
308
|
|
|
309
309
|
this.asyncConstruct(/* extended */).catch((error: any): void => {
|
|
310
310
|
if (error instanceof DyFM_Error) {
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
311
|
+
if (error.additionalContent?.constructErrors?.length) {
|
|
312
|
+
error.additionalContent.constructErrors.forEach((errorItem: DyFM_Error): void => {
|
|
313
|
+
if (errorItem instanceof DyFM_Error) {
|
|
314
|
+
errorItem.logSimple(`(constructor asyncConstruct.catch) error:\n`);
|
|
315
|
+
} else {
|
|
316
|
+
DyFM_Log.H_warn(
|
|
317
|
+
'(constructor asyncConstruct.catch) additional error content:\n',
|
|
318
|
+
errorItem
|
|
319
|
+
);
|
|
320
|
+
}
|
|
321
|
+
});
|
|
322
|
+
} else {
|
|
323
|
+
DyFM_Log.H_warn(
|
|
324
|
+
'(constructor asyncConstruct.catch) additional error content:\n',
|
|
325
|
+
error?.additionalContent
|
|
326
|
+
);
|
|
327
|
+
}
|
|
315
328
|
}
|
|
316
329
|
|
|
317
330
|
if (
|
package/src/index.ts
CHANGED
package/tsconfig.json
CHANGED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Get the stack location of the constructor call
|
|
3
|
-
* use it in the constructor of a class to get the stack location of the constructor call
|
|
4
|
-
* @returns The stack location of the constructor call
|
|
5
|
-
*/
|
|
6
|
-
export declare function DyNTS_getStackLocation(): string;
|
|
7
|
-
//# sourceMappingURL=stack.util.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"stack.util.d.ts","sourceRoot":"","sources":["../../src/_collections/stack.util.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,CAyB/C"}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.DyNTS_getStackLocation = void 0;
|
|
4
|
-
const fsm_dynamo_1 = require("@futdevpro/fsm-dynamo");
|
|
5
|
-
/**
|
|
6
|
-
* Get the stack location of the constructor call
|
|
7
|
-
* use it in the constructor of a class to get the stack location of the constructor call
|
|
8
|
-
* @returns The stack location of the constructor call
|
|
9
|
-
*/
|
|
10
|
-
function DyNTS_getStackLocation() {
|
|
11
|
-
let stack = new Error().stack;
|
|
12
|
-
// Split the stack into lines and remove the first line (Error:)
|
|
13
|
-
const stackLines = stack?.split('\n')?.slice(1);
|
|
14
|
-
// Find the line that contains the constructor call
|
|
15
|
-
// It will be the FIRST line that doesn't contain 'getStackLocation'
|
|
16
|
-
let constructorLine = stackLines?.find(line => !line.includes('getStackLocation') &&
|
|
17
|
-
!line.includes('at new'));
|
|
18
|
-
if (!constructorLine) {
|
|
19
|
-
fsm_dynamo_1.DyFM_Log.warn('No constructor line found');
|
|
20
|
-
return '';
|
|
21
|
-
}
|
|
22
|
-
// Remove the 'constructorLine at ... (' and the ')'
|
|
23
|
-
constructorLine = constructorLine.split('(')[1]?.split(')')[0];
|
|
24
|
-
if (!constructorLine) {
|
|
25
|
-
fsm_dynamo_1.DyFM_Log.warn('No constructor line found');
|
|
26
|
-
return '';
|
|
27
|
-
}
|
|
28
|
-
return constructorLine;
|
|
29
|
-
}
|
|
30
|
-
exports.DyNTS_getStackLocation = DyNTS_getStackLocation;
|
|
31
|
-
//# sourceMappingURL=stack.util.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"stack.util.js","sourceRoot":"","sources":["../../src/_collections/stack.util.ts"],"names":[],"mappings":";;;AAAA,sDAAiD;AAEjD;;;;GAIG;AACH,SAAgB,sBAAsB;IACpC,IAAI,KAAK,GAAW,IAAI,KAAK,EAAE,CAAC,KAAK,CAAC;IAEtC,gEAAgE;IAChE,MAAM,UAAU,GAAG,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IAEhD,mDAAmD;IACnD,oEAAoE;IACpE,IAAI,eAAe,GAAG,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAC5C,CAAC,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QAClC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CACzB,CAAC;IACF,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,qBAAQ,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QAC3C,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,wDAAwD;IACxD,eAAe,GAAG,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/D,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,qBAAQ,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QAC3C,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,eAAe,CAAC;AACzB,CAAC;AAzBD,wDAyBC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"stack.util.test.d.ts","sourceRoot":"","sources":["../../src/_collections/stack.util.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const stack_util_1 = require("./stack.util");
|
|
4
|
-
describe('stack.util.ts', () => {
|
|
5
|
-
describe('DyNTS_getStackLocation', () => {
|
|
6
|
-
// Test class for basic functionality
|
|
7
|
-
class TestClass {
|
|
8
|
-
constructor() {
|
|
9
|
-
this.location = (0, stack_util_1.DyNTS_getStackLocation)();
|
|
10
|
-
}
|
|
11
|
-
location;
|
|
12
|
-
}
|
|
13
|
-
// Test class for nested instantiation
|
|
14
|
-
class NestedTestClass {
|
|
15
|
-
constructor() {
|
|
16
|
-
this.location = (0, stack_util_1.DyNTS_getStackLocation)();
|
|
17
|
-
}
|
|
18
|
-
location;
|
|
19
|
-
}
|
|
20
|
-
// Test class with parameters
|
|
21
|
-
class ParamTestClass {
|
|
22
|
-
constructor(param) {
|
|
23
|
-
this.location = (0, stack_util_1.DyNTS_getStackLocation)();
|
|
24
|
-
}
|
|
25
|
-
location;
|
|
26
|
-
}
|
|
27
|
-
// Test class for async instantiation
|
|
28
|
-
class AsyncTestClass {
|
|
29
|
-
constructor() {
|
|
30
|
-
this.location = (0, stack_util_1.DyNTS_getStackLocation)();
|
|
31
|
-
}
|
|
32
|
-
location;
|
|
33
|
-
}
|
|
34
|
-
describe('format validation', () => {
|
|
35
|
-
it('should return location in correct file:line:column format', () => {
|
|
36
|
-
const instance = new TestClass();
|
|
37
|
-
const [file, line, column] = instance.location.split(':');
|
|
38
|
-
expect(file).toBeTruthy();
|
|
39
|
-
expect(parseInt(line)).toBeGreaterThan(0);
|
|
40
|
-
expect(parseInt(column)).toBeGreaterThan(0);
|
|
41
|
-
expect(instance.location).toMatch(/^[^:]+:\d+:\d+$/);
|
|
42
|
-
});
|
|
43
|
-
it('should include the correct file path', () => {
|
|
44
|
-
const instance = new TestClass();
|
|
45
|
-
expect(instance.location).toContain('stack.util.test.ts');
|
|
46
|
-
});
|
|
47
|
-
});
|
|
48
|
-
describe('location uniqueness', () => {
|
|
49
|
-
it('should return different locations for different instantiation points', () => {
|
|
50
|
-
const instance1 = new TestClass();
|
|
51
|
-
const instance2 = new TestClass();
|
|
52
|
-
expect(instance1.location).not.toBe(instance2.location);
|
|
53
|
-
});
|
|
54
|
-
it('should return different locations for different classes', () => {
|
|
55
|
-
const instance1 = new TestClass();
|
|
56
|
-
const instance2 = new NestedTestClass();
|
|
57
|
-
expect(instance1.location).not.toBe(instance2.location);
|
|
58
|
-
});
|
|
59
|
-
});
|
|
60
|
-
describe('class instantiation variations', () => {
|
|
61
|
-
it('should work with nested class instantiation', () => {
|
|
62
|
-
const instance = new NestedTestClass();
|
|
63
|
-
expect(instance.location).toContain('NestedTestClass');
|
|
64
|
-
});
|
|
65
|
-
it('should handle class instantiation with parameters', () => {
|
|
66
|
-
const instance = new ParamTestClass('test');
|
|
67
|
-
expect(instance.location).toMatch(/^[^:]+:\d+:\d+$/);
|
|
68
|
-
});
|
|
69
|
-
it('should work with async class instantiation', async () => {
|
|
70
|
-
const instance = new AsyncTestClass();
|
|
71
|
-
expect(instance.location).toMatch(/^[^:]+:\d+:\d+$/);
|
|
72
|
-
});
|
|
73
|
-
});
|
|
74
|
-
describe('error handling', () => {
|
|
75
|
-
it('should handle invalid stack trace gracefully', () => {
|
|
76
|
-
// Mock Error.stack to be undefined
|
|
77
|
-
const originalStack = Error.prototype.stack;
|
|
78
|
-
Error.prototype.stack = undefined;
|
|
79
|
-
const instance = new TestClass();
|
|
80
|
-
expect(instance.location).toBe('');
|
|
81
|
-
// Restore original stack
|
|
82
|
-
Error.prototype.stack = originalStack;
|
|
83
|
-
});
|
|
84
|
-
it('should handle malformed stack trace gracefully', () => {
|
|
85
|
-
// Mock Error.stack to be malformed
|
|
86
|
-
const originalStack = Error.prototype.stack;
|
|
87
|
-
Error.prototype.stack = 'Invalid stack trace';
|
|
88
|
-
const instance = new TestClass();
|
|
89
|
-
expect(instance.location).toBe('');
|
|
90
|
-
// Restore original stack
|
|
91
|
-
Error.prototype.stack = originalStack;
|
|
92
|
-
});
|
|
93
|
-
});
|
|
94
|
-
});
|
|
95
|
-
});
|
|
96
|
-
//# sourceMappingURL=stack.util.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"stack.util.test.js","sourceRoot":"","sources":["../../src/_collections/stack.util.test.ts"],"names":[],"mappings":"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"}
|