@lenne.tech/nest-server 10.0.2 → 10.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (219) hide show
  1. package/README.md +9 -0
  2. package/dist/config.env.js +47 -17
  3. package/dist/config.env.js.map +1 -1
  4. package/dist/core/common/args/filter.args.js +3 -3
  5. package/dist/core/common/args/filter.args.js.map +1 -1
  6. package/dist/core/common/args/pagination.args.js +6 -6
  7. package/dist/core/common/args/pagination.args.js.map +1 -1
  8. package/dist/core/common/decorators/restricted.decorator.js +15 -17
  9. package/dist/core/common/decorators/restricted.decorator.js.map +1 -1
  10. package/dist/core/common/filters/http-exception-log.filter.js +1 -3
  11. package/dist/core/common/filters/http-exception-log.filter.js.map +1 -1
  12. package/dist/core/common/helpers/db.helper.js +14 -14
  13. package/dist/core/common/helpers/db.helper.js.map +1 -1
  14. package/dist/core/common/helpers/file.helper.js +2 -2
  15. package/dist/core/common/helpers/file.helper.js.map +1 -1
  16. package/dist/core/common/helpers/filter.helper.d.ts +2 -2
  17. package/dist/core/common/helpers/filter.helper.js +1 -1
  18. package/dist/core/common/helpers/filter.helper.js.map +1 -1
  19. package/dist/core/common/helpers/graphql.helper.js +1 -1
  20. package/dist/core/common/helpers/graphql.helper.js.map +1 -1
  21. package/dist/core/common/helpers/input.helper.js +31 -38
  22. package/dist/core/common/helpers/input.helper.js.map +1 -1
  23. package/dist/core/common/helpers/model.helper.js +7 -7
  24. package/dist/core/common/helpers/model.helper.js.map +1 -1
  25. package/dist/core/common/helpers/service.helper.js +2 -2
  26. package/dist/core/common/helpers/service.helper.js.map +1 -1
  27. package/dist/core/common/inputs/combined-filter.input.js +3 -3
  28. package/dist/core/common/inputs/combined-filter.input.js.map +1 -1
  29. package/dist/core/common/inputs/core-input.input.js +1 -1
  30. package/dist/core/common/inputs/core-input.input.js.map +1 -1
  31. package/dist/core/common/inputs/filter.input.js +3 -3
  32. package/dist/core/common/inputs/filter.input.js.map +1 -1
  33. package/dist/core/common/inputs/single-filter.input.js +4 -4
  34. package/dist/core/common/inputs/single-filter.input.js.map +1 -1
  35. package/dist/core/common/inputs/sort.input.js +1 -1
  36. package/dist/core/common/inputs/sort.input.js.map +1 -1
  37. package/dist/core/common/interceptors/check-security.interceptor.d.ts +1 -1
  38. package/dist/core/common/interceptors/check-security.interceptor.js +2 -2
  39. package/dist/core/common/interceptors/check-security.interceptor.js.map +1 -1
  40. package/dist/core/common/interfaces/server-options.interface.d.ts +28 -0
  41. package/dist/core/common/models/core-model.model.js.map +1 -1
  42. package/dist/core/common/models/core-persistence.model.js +3 -3
  43. package/dist/core/common/models/core-persistence.model.js.map +1 -1
  44. package/dist/core/common/pipes/map-and-validate.pipe.d.ts +1 -1
  45. package/dist/core/common/pipes/map-and-validate.pipe.js +1 -1
  46. package/dist/core/common/pipes/map-and-validate.pipe.js.map +1 -1
  47. package/dist/core/common/scalars/any.scalar.js +2 -2
  48. package/dist/core/common/scalars/any.scalar.js.map +1 -1
  49. package/dist/core/common/scalars/date-timestamp.scalar.js +1 -1
  50. package/dist/core/common/scalars/date-timestamp.scalar.js.map +1 -1
  51. package/dist/core/common/scalars/date.scalar.js +1 -1
  52. package/dist/core/common/scalars/date.scalar.js.map +1 -1
  53. package/dist/core/common/scalars/json.scalar.js +2 -2
  54. package/dist/core/common/scalars/json.scalar.js.map +1 -1
  55. package/dist/core/common/services/config.service.js +7 -7
  56. package/dist/core/common/services/config.service.js.map +1 -1
  57. package/dist/core/common/services/core-cron-jobs.service.js +5 -5
  58. package/dist/core/common/services/core-cron-jobs.service.js.map +1 -1
  59. package/dist/core/common/services/crud.service.js +1 -1
  60. package/dist/core/common/services/crud.service.js.map +1 -1
  61. package/dist/core/common/services/mailjet.service.js +5 -5
  62. package/dist/core/common/services/mailjet.service.js.map +1 -1
  63. package/dist/core/common/services/model-doc.service.d.ts +16 -0
  64. package/dist/core/common/services/model-doc.service.js +107 -0
  65. package/dist/core/common/services/model-doc.service.js.map +1 -0
  66. package/dist/core/common/services/module.service.js.map +1 -1
  67. package/dist/core/common/services/template.service.js +3 -3
  68. package/dist/core/common/services/template.service.js.map +1 -1
  69. package/dist/core/common/types/core-model-constructor.type.d.ts +2 -2
  70. package/dist/core/modules/auth/core-auth.module.js +3 -3
  71. package/dist/core/modules/auth/core-auth.module.js.map +1 -1
  72. package/dist/core/modules/auth/core-auth.resolver.js +5 -5
  73. package/dist/core/modules/auth/core-auth.resolver.js.map +1 -1
  74. package/dist/core/modules/auth/guards/auth.guard.js +4 -4
  75. package/dist/core/modules/auth/guards/auth.guard.js.map +1 -1
  76. package/dist/core/modules/auth/guards/roles.guard.js +1 -1
  77. package/dist/core/modules/auth/guards/roles.guard.js.map +1 -1
  78. package/dist/core/modules/auth/services/core-auth.service.js +5 -5
  79. package/dist/core/modules/auth/services/core-auth.service.js.map +1 -1
  80. package/dist/core/modules/auth/strategies/jwt.strategy.js.map +1 -1
  81. package/dist/core/modules/auth/tokens.decorator.js +2 -2
  82. package/dist/core/modules/auth/tokens.decorator.js.map +1 -1
  83. package/dist/core/modules/file/core-file-info.model.js +2 -2
  84. package/dist/core/modules/file/core-file-info.model.js.map +1 -1
  85. package/dist/core/modules/file/core-file.controller.d.ts +1 -2
  86. package/dist/core/modules/file/core-file.controller.js +3 -6
  87. package/dist/core/modules/file/core-file.controller.js.map +1 -1
  88. package/dist/core/modules/file/core-file.service.js +1 -1
  89. package/dist/core/modules/file/core-file.service.js.map +1 -1
  90. package/dist/core/modules/file/interfaces/file-upload.interface.d.ts +1 -1
  91. package/dist/core/modules/health-check/core-health-check-result.model.d.ts +8 -0
  92. package/dist/core/modules/health-check/core-health-check-result.model.js +53 -0
  93. package/dist/core/modules/health-check/core-health-check-result.model.js.map +1 -0
  94. package/dist/core/modules/health-check/core-health-check.controller.d.ts +6 -0
  95. package/dist/core/modules/health-check/core-health-check.controller.js +33 -0
  96. package/dist/core/modules/health-check/core-health-check.controller.js.map +1 -0
  97. package/dist/core/modules/health-check/core-health-check.module.d.ts +2 -0
  98. package/dist/core/modules/health-check/core-health-check.module.js +24 -0
  99. package/dist/core/modules/health-check/core-health-check.module.js.map +1 -0
  100. package/dist/core/modules/health-check/core-health-check.resolver.d.ts +6 -0
  101. package/dist/core/modules/health-check/core-health-check.resolver.js +38 -0
  102. package/dist/core/modules/health-check/core-health-check.resolver.js.map +1 -0
  103. package/dist/core/modules/health-check/core-health-check.service.d.ts +11 -0
  104. package/dist/core/modules/health-check/core-health-check.service.js +52 -0
  105. package/dist/core/modules/health-check/core-health-check.service.js.map +1 -0
  106. package/dist/core/modules/user/core-user.model.js +5 -5
  107. package/dist/core/modules/user/core-user.model.js.map +1 -1
  108. package/dist/core/modules/user/core-user.service.js +2 -2
  109. package/dist/core/modules/user/core-user.service.js.map +1 -1
  110. package/dist/core/modules/user/inputs/core-user.input.js +1 -1
  111. package/dist/core/modules/user/inputs/core-user.input.js.map +1 -1
  112. package/dist/core.module.js +14 -5
  113. package/dist/core.module.js.map +1 -1
  114. package/dist/index.d.ts +6 -0
  115. package/dist/index.js +6 -0
  116. package/dist/index.js.map +1 -1
  117. package/dist/main.js +1 -1
  118. package/dist/main.js.map +1 -1
  119. package/dist/server/modules/auth/auth.service.js +1 -1
  120. package/dist/server/modules/auth/auth.service.js.map +1 -1
  121. package/dist/server/modules/file/file.controller.js +1 -1
  122. package/dist/server/modules/file/file.controller.js.map +1 -1
  123. package/dist/server/modules/file/file.resolver.js +2 -2
  124. package/dist/server/modules/file/file.resolver.js.map +1 -1
  125. package/dist/server/modules/file/file.service.js +1 -1
  126. package/dist/server/modules/file/file.service.js.map +1 -1
  127. package/dist/server/modules/file/multer-config.service.js +1 -1
  128. package/dist/server/modules/file/multer-config.service.js.map +1 -1
  129. package/dist/server/modules/user/avatar.controller.js +1 -1
  130. package/dist/server/modules/user/avatar.controller.js.map +1 -1
  131. package/dist/server/modules/user/user.resolver.js +1 -1
  132. package/dist/server/modules/user/user.resolver.js.map +1 -1
  133. package/dist/server/modules/user/user.service.js +3 -3
  134. package/dist/server/modules/user/user.service.js.map +1 -1
  135. package/dist/templates/index.ejs +2 -0
  136. package/dist/templates/password-reset.ejs +3 -0
  137. package/dist/templates/welcome.ejs +3 -0
  138. package/dist/test/test.helper.d.ts +1 -1
  139. package/dist/test/test.helper.js +7 -7
  140. package/dist/test/test.helper.js.map +1 -1
  141. package/dist/tsconfig.build.tsbuildinfo +1 -1
  142. package/package.json +32 -26
  143. package/src/config.env.ts +50 -20
  144. package/src/core/common/args/filter.args.ts +4 -4
  145. package/src/core/common/args/pagination.args.ts +7 -7
  146. package/src/core/common/decorators/graphql-service-options.decorator.ts +2 -2
  147. package/src/core/common/decorators/graphql-user.decorator.ts +1 -1
  148. package/src/core/common/decorators/rest-user.decorator.ts +1 -1
  149. package/src/core/common/decorators/restricted.decorator.ts +18 -18
  150. package/src/core/common/filters/http-exception-log.filter.ts +4 -4
  151. package/src/core/common/helpers/db.helper.ts +35 -40
  152. package/src/core/common/helpers/decorator.helper.ts +1 -1
  153. package/src/core/common/helpers/file.helper.ts +2 -2
  154. package/src/core/common/helpers/filter.helper.ts +7 -8
  155. package/src/core/common/helpers/graphql.helper.ts +6 -6
  156. package/src/core/common/helpers/input.helper.ts +54 -61
  157. package/src/core/common/helpers/model.helper.ts +33 -41
  158. package/src/core/common/helpers/service.helper.ts +8 -8
  159. package/src/core/common/inputs/combined-filter.input.ts +4 -4
  160. package/src/core/common/inputs/core-input.input.ts +2 -2
  161. package/src/core/common/inputs/filter.input.ts +4 -4
  162. package/src/core/common/inputs/single-filter.input.ts +4 -4
  163. package/src/core/common/inputs/sort.input.ts +1 -1
  164. package/src/core/common/interceptors/check-response.interceptor.ts +1 -1
  165. package/src/core/common/interceptors/check-security.interceptor.ts +5 -5
  166. package/src/core/common/interfaces/server-options.interface.ts +109 -0
  167. package/src/core/common/models/core-model.model.ts +6 -4
  168. package/src/core/common/models/core-persistence.model.ts +3 -3
  169. package/src/core/common/pipes/map-and-validate.pipe.ts +2 -2
  170. package/src/core/common/scalars/any.scalar.ts +2 -2
  171. package/src/core/common/scalars/date-timestamp.scalar.ts +1 -2
  172. package/src/core/common/scalars/date.scalar.ts +1 -2
  173. package/src/core/common/scalars/json.scalar.ts +4 -4
  174. package/src/core/common/services/config.service.ts +16 -16
  175. package/src/core/common/services/core-cron-jobs.service.ts +7 -7
  176. package/src/core/common/services/crud.service.ts +22 -22
  177. package/src/core/common/services/email.service.ts +1 -1
  178. package/src/core/common/services/mailjet.service.ts +8 -8
  179. package/src/core/common/services/model-doc.service.ts +140 -0
  180. package/src/core/common/services/module.service.ts +5 -6
  181. package/src/core/common/services/template.service.ts +4 -4
  182. package/src/core/common/types/core-model-constructor.type.ts +2 -2
  183. package/src/core/modules/auth/core-auth.controller.ts +2 -2
  184. package/src/core/modules/auth/core-auth.module.ts +4 -4
  185. package/src/core/modules/auth/core-auth.resolver.ts +9 -9
  186. package/src/core/modules/auth/guards/auth.guard.ts +8 -7
  187. package/src/core/modules/auth/guards/roles.guard.ts +1 -1
  188. package/src/core/modules/auth/services/core-auth.service.ts +9 -9
  189. package/src/core/modules/auth/strategies/jwt-refresh.strategy.ts +1 -1
  190. package/src/core/modules/auth/strategies/jwt.strategy.ts +1 -1
  191. package/src/core/modules/auth/tokens.decorator.ts +6 -7
  192. package/src/core/modules/file/core-file-info.model.ts +2 -2
  193. package/src/core/modules/file/core-file.controller.ts +2 -4
  194. package/src/core/modules/file/core-file.service.ts +6 -5
  195. package/src/core/modules/file/interfaces/file-upload.interface.ts +1 -1
  196. package/src/core/modules/health-check/core-health-check-result.model.ts +46 -0
  197. package/src/core/modules/health-check/core-health-check.controller.ts +24 -0
  198. package/src/core/modules/health-check/core-health-check.module.ts +17 -0
  199. package/src/core/modules/health-check/core-health-check.resolver.ts +32 -0
  200. package/src/core/modules/health-check/core-health-check.service.ts +62 -0
  201. package/src/core/modules/user/core-user.model.ts +6 -6
  202. package/src/core/modules/user/core-user.service.ts +10 -9
  203. package/src/core/modules/user/inputs/core-user.input.ts +1 -2
  204. package/src/core.module.ts +23 -12
  205. package/src/index.ts +11 -0
  206. package/src/main.ts +2 -2
  207. package/src/server/modules/auth/auth.controller.ts +1 -1
  208. package/src/server/modules/auth/auth.resolver.ts +3 -3
  209. package/src/server/modules/auth/auth.service.ts +2 -2
  210. package/src/server/modules/file/file.controller.ts +1 -2
  211. package/src/server/modules/file/file.module.ts +1 -1
  212. package/src/server/modules/file/file.resolver.ts +4 -3
  213. package/src/server/modules/file/file.service.ts +1 -1
  214. package/src/server/modules/file/multer-config.service.ts +1 -1
  215. package/src/server/modules/user/avatar.controller.ts +3 -3
  216. package/src/server/modules/user/user.model.ts +1 -1
  217. package/src/server/modules/user/user.resolver.ts +4 -4
  218. package/src/server/modules/user/user.service.ts +4 -4
  219. package/src/test/test.helper.ts +11 -11
@@ -28,7 +28,7 @@ export function addIds(
28
28
  target: any,
29
29
  ids: StringOrObjectId | StringOrObjectId[],
30
30
  convert: 'string' | 'object' | 'auto' | false = 'auto',
31
- options?: { unique?: boolean }
31
+ options?: { unique?: boolean },
32
32
  ): any[] {
33
33
  // Set config
34
34
  const config = {
@@ -54,17 +54,14 @@ export function addIds(
54
54
  if (ids.length) {
55
55
  // Add autoconverted ID
56
56
  if (
57
- result.length &&
58
- convert === 'auto' &&
59
- ((result[0] instanceof Types.ObjectId && !(ids instanceof Types.ObjectId)) ||
60
- (typeof result[0] === 'string' && typeof ids !== 'string'))
57
+ result.length
58
+ && convert === 'auto'
59
+ && ((result[0] instanceof Types.ObjectId && !(ids instanceof Types.ObjectId))
60
+ || (typeof result[0] === 'string' && typeof ids !== 'string'))
61
61
  ) {
62
62
  const converted = result[0] instanceof Types.ObjectId ? getObjectIds(ids) : getStringIds(ids);
63
63
  result.push(...(converted as any));
64
- }
65
-
66
- // Add ID
67
- else {
64
+ } else { // Add ID
68
65
  result.push(...ids);
69
66
  }
70
67
  }
@@ -109,7 +106,7 @@ export function equalIds(...ids: IdsType[]): boolean {
109
106
  if (!compare) {
110
107
  return false;
111
108
  }
112
- return ids.every((id) => getStringIds(id) === compare);
109
+ return ids.every(id => getStringIds(id) === compare);
113
110
  }
114
111
 
115
112
  /**
@@ -124,7 +121,7 @@ export function getIncludedIds(includes: IdsType, ids: IdsType, convert?: 'objec
124
121
  export function getIncludedIds<T = IdsType>(
125
122
  includes: IdsType,
126
123
  ids: T | IdsType,
127
- convert?: 'string' | 'object'
124
+ convert?: 'string' | 'object',
128
125
  ): T[] | null | undefined {
129
126
  if (!includes || !ids) {
130
127
  return undefined;
@@ -189,7 +186,7 @@ export function getStringIds(elements: any[], options?: { deep?: boolean; unique
189
186
  export function getStringIds(elements: any, options?: { deep?: boolean; unique?: boolean }): string;
190
187
  export function getStringIds<T extends any | any[]>(
191
188
  elements: T,
192
- options?: { deep?: boolean; unique?: boolean }
189
+ options?: { deep?: boolean; unique?: boolean },
193
190
  ): string | string[] {
194
191
  // Process options
195
192
  const { deep, unique } = {
@@ -236,7 +233,7 @@ export function getObjectIds(ids: any[]): Types.ObjectId[];
236
233
  export function getObjectIds(ids: any): Types.ObjectId;
237
234
  export function getObjectIds<T extends any | any[]>(ids: T): Types.ObjectId | Types.ObjectId[] {
238
235
  if (Array.isArray(ids)) {
239
- return ids.map((id) => new Types.ObjectId(getStringId(id)));
236
+ return ids.map(id => new Types.ObjectId(getStringId(id)));
240
237
  }
241
238
  return new Types.ObjectId(getStringId(ids));
242
239
  }
@@ -250,7 +247,7 @@ export function getElementsViaIds<T = any>(
250
247
  options: {
251
248
  splice?: boolean;
252
249
  unique?: boolean;
253
- } = {}
250
+ } = {},
254
251
  ): T[] {
255
252
  // Config
256
253
  const config = {
@@ -283,7 +280,7 @@ export function getElementsViaIds<T = any>(
283
280
  // Unique elements
284
281
  if (config.unique) {
285
282
  return elements.filter((value, index, self) => {
286
- return self.findIndex((e) => getStringIds(e)) === index;
283
+ return self.findIndex(e => getStringIds(e)) === index;
287
284
  });
288
285
  }
289
286
 
@@ -354,10 +351,9 @@ export function getPopulatOptionsFromSelections(selectionNodes: readonly Selecti
354
351
  // Subfield is a primitive
355
352
  if (!innerNode.selectionSet?.selections?.length) {
356
353
  option.select ? option.select.push(innerNode.name.value) : (option.select = [innerNode.name.value]);
357
- }
358
354
 
359
- // Subfield ist an object
360
- else {
355
+ // Subfield ist an object
356
+ } else {
361
357
  const innerPopulate = getPopulatOptionsFromSelections([innerNode]);
362
358
  option.populate = option.populate
363
359
  ? (option.populate as PopulateOptions[]).concat(innerPopulate)
@@ -399,7 +395,7 @@ export function objectIdsToStrings(element: any, prepared: WeakMap<any, any> = n
399
395
 
400
396
  // Process array
401
397
  if (Array.isArray(element)) {
402
- return element.map((e) => objectIdsToStrings(e, prepared));
398
+ return element.map(e => objectIdsToStrings(e, prepared));
403
399
  }
404
400
 
405
401
  // Process object
@@ -425,7 +421,7 @@ export function objectIdsToStrings(element: any, prepared: WeakMap<any, any> = n
425
421
  export function removeUnresolvedReferences<T = any>(
426
422
  populated: T,
427
423
  populatedOptions: string | PopulateOptions | PopulateOptions[] | (string | PopulateOptions)[],
428
- ignoreFirst = true
424
+ ignoreFirst = true,
429
425
  ): T {
430
426
  // Check parameter
431
427
  if (!populated || !populatedOptions) {
@@ -434,7 +430,7 @@ export function removeUnresolvedReferences<T = any>(
434
430
 
435
431
  // Process array
436
432
  if (Array.isArray(populated)) {
437
- populated.forEach((p) => removeUnresolvedReferences(p, populatedOptions, false));
433
+ populated.forEach(p => removeUnresolvedReferences(p, populatedOptions, false));
438
434
  return populated;
439
435
  }
440
436
 
@@ -442,8 +438,8 @@ export function removeUnresolvedReferences<T = any>(
442
438
  if (typeof populated === 'object') {
443
439
  // populatedOptions is an array
444
440
  if (Array.isArray(populatedOptions)) {
445
- populatedOptions.forEach((po) =>
446
- removeUnresolvedReferences(populated, ignoreFirst && typeof po === 'object' ? po.populate : po, false)
441
+ populatedOptions.forEach(po =>
442
+ removeUnresolvedReferences(populated, ignoreFirst && typeof po === 'object' ? po.populate : po, false),
447
443
  );
448
444
  return populated;
449
445
  }
@@ -481,15 +477,15 @@ export async function popAndMap<T extends CoreModel>(
481
477
  mongooseModel?: Model<any>,
482
478
  options?: {
483
479
  ignoreSelections?: boolean;
484
- }
480
+ },
485
481
  ): Promise<T | T[]> {
486
482
  let result;
487
483
  let populateOptions: PopulateOptions[] = [];
488
484
  const ignoreSelections = options?.ignoreSelections;
489
485
  if (populate) {
490
486
  if (
491
- Array.isArray(populate) &&
492
- (typeof (populate as string[])[0] === 'string' || typeof (populate as PopulateOptions[])[0]?.path === 'string')
487
+ Array.isArray(populate)
488
+ && (typeof (populate as string[])[0] === 'string' || typeof (populate as PopulateOptions[])[0]?.path === 'string')
493
489
  ) {
494
490
  populateOptions = populate as PopulateOptions[];
495
491
  } else if (Array.isArray(populate) && typeof (populate as SelectionNode[])[0]?.kind === 'string') {
@@ -509,19 +505,19 @@ export async function popAndMap<T extends CoreModel>(
509
505
 
510
506
  // Map result
511
507
  if (Array.isArray(result)) {
512
- result = result.map((item) => (modelClass as any).map(item));
508
+ result = result.map(item => (modelClass as any).map(item));
513
509
  } else {
514
510
  result = (modelClass as any).map(result);
515
511
  }
516
- } else {
512
+
517
513
  // Process documents
514
+ } else {
518
515
  if (Array.isArray(queryOrDocument)) {
519
516
  await setPopulates(queryOrDocument, populateOptions, mongooseModel, { ignoreSelections });
520
- result = queryOrDocument.map((item) => (modelClass as any).map(item));
521
- }
517
+ result = queryOrDocument.map(item => (modelClass as any).map(item));
522
518
 
523
- // Process document
524
- else {
519
+ // Process document
520
+ } else {
525
521
  await setPopulates(queryOrDocument, populateOptions, mongooseModel, { ignoreSelections });
526
522
  result = (modelClass as any).map(queryOrDocument);
527
523
  }
@@ -568,7 +564,7 @@ export async function setPopulates<T = Query<any, any> | Document>(
568
564
  queryOrDocument: T,
569
565
  populateOptions: string[] | PopulateOptions[] | (string | PopulateOptions)[],
570
566
  mongooseModel: Model<any>,
571
- options?: { ignoreSelections: boolean }
567
+ options?: { ignoreSelections: boolean },
572
568
  ): Promise<T> {
573
569
  // Check parameters
574
570
  if (!populateOptions?.length || !queryOrDocument) {
@@ -595,11 +591,10 @@ export async function setPopulates<T = Query<any, any> | Document>(
595
591
  for (const options of populateOptions) {
596
592
  queryOrDocument = (queryOrDocument as any).populate(options);
597
593
  }
598
- }
599
594
 
600
- // Document => Non chaining
601
- // Array with documents
602
- else if (Array.isArray(queryOrDocument)) {
595
+ // Document => Non chaining
596
+ // Array with documents
597
+ } else if (Array.isArray(queryOrDocument)) {
603
598
  const promises = [];
604
599
  queryOrDocument.forEach((item) => {
605
600
  if (item.populate) {
@@ -609,9 +604,9 @@ export async function setPopulates<T = Query<any, any> | Document>(
609
604
  }
610
605
  });
611
606
  await Promise.all(promises);
612
- }
613
- // Single document
614
- else if ((queryOrDocument as any).populate) {
607
+
608
+ // Single document
609
+ } else if ((queryOrDocument as any).populate) {
615
610
  await (queryOrDocument as any).populate(populateOptions);
616
611
  } else {
617
612
  return (await mongooseModel.populate(queryOrDocument as any, populateOptions as any)) as any;
@@ -28,7 +28,7 @@ export function currentUserDec(data, ctx: ExecutionContext) {
28
28
  */
29
29
  export function graphqlPopulateDec(
30
30
  data: { gqlPath?: string; ignoreSelections?: boolean },
31
- ctx: ExecutionContext
31
+ ctx: ExecutionContext,
32
32
  ): PopulateOptions[] {
33
33
  // Check context type
34
34
  if (ctx.getType<GqlContextType>() !== 'graphql') {
@@ -1,6 +1,6 @@
1
+ import { extname } from 'path';
1
2
  import { MulterOptions } from '@nestjs/platform-express/multer/interfaces/multer-options.interface';
2
3
  import { diskStorage } from 'multer';
3
- import { extname } from 'path';
4
4
 
5
5
  /**
6
6
  * Helper class for inputs
@@ -63,7 +63,7 @@ export function multerFileFilter(fileTypeRegex = /jpeg|jpg|png/) {
63
63
  if (mimetype && extName) {
64
64
  return cb(null, true);
65
65
  }
66
- cb('Error: File upload only supports the following filetypes - ' + fileTypeRegex);
66
+ cb(`Error: File upload only supports the following filetypes - ${fileTypeRegex}`);
67
67
  };
68
68
  }
69
69
 
@@ -32,7 +32,7 @@ export class Filter {
32
32
  /**
33
33
  * Generate find options
34
34
  */
35
- public static generateFindOptions<T = any>(filterArgs: Partial<FilterArgs>): QueryOptions {
35
+ public static generateFindOptions(filterArgs: Partial<FilterArgs>): QueryOptions {
36
36
  return generateFindOptions(filterArgs);
37
37
  }
38
38
  }
@@ -86,7 +86,7 @@ export function findFilter(options?: {
86
86
  }
87
87
 
88
88
  // Filter falsy values
89
- filterOptions[config.type] = filterOptions[config.type].filter((value) => value);
89
+ filterOptions[config.type] = filterOptions[config.type].filter(value => value);
90
90
 
91
91
  // Optimizations
92
92
  if (!filterOptions[config.type].length) {
@@ -113,7 +113,7 @@ export function convertFilterArgsToQuery<T = any>(filterArgs: Partial<FilterArgs
113
113
  */
114
114
  export function generateFilterQuery<T = any>(
115
115
  filter?: Partial<FilterInput>,
116
- options?: { automaticObjectIdFiltering?: boolean }
116
+ options?: { automaticObjectIdFiltering?: boolean },
117
117
  ): FilterQuery<T> | any {
118
118
  // Check filter
119
119
  if (!filter) {
@@ -156,10 +156,9 @@ export function generateFilterQuery<T = any>(
156
156
  // Convert value to object ID(s)
157
157
  if (convertToObjectId || isReference) {
158
158
  value = getObjectIds(value);
159
- }
160
159
 
161
- // Check if value is a string ID and automatic ObjectID filtering is activated
162
- else if (config.automaticObjectIdFiltering && checkStringIds(value)) {
160
+ // Check if value is a string ID and automatic ObjectID filtering is activated
161
+ } else if (config.automaticObjectIdFiltering && checkStringIds(value)) {
163
162
  // Set both the string filter and the ObjectID filtering in an OR construction
164
163
  const alternativeQuery = clone(filter.singleFilter, { circles: false });
165
164
  alternativeQuery.value = getObjectIds(value);
@@ -215,9 +214,9 @@ export function generateFilterQuery<T = any>(
215
214
  /**
216
215
  * Generate find options
217
216
  */
218
- export function generateFindOptions<T = any>(
217
+ export function generateFindOptions(
219
218
  filterArgs: Partial<FilterArgs>,
220
- options?: { maxLimit?: number }
219
+ options?: { maxLimit?: number },
221
220
  ): QueryOptions {
222
221
  // Check filterArgs
223
222
  if (!filterArgs) {
@@ -106,7 +106,7 @@ export default class GraphQLHelper {
106
106
  ast: FieldNode,
107
107
  info: GraphQLResolveInfo,
108
108
  obj: any = {},
109
- config: Partial<GraphQLFieldsConfig> = {}
109
+ config: Partial<GraphQLFieldsConfig> = {},
110
110
  ) {
111
111
  return flattenAST(ast, info, obj, config);
112
112
  }
@@ -117,7 +117,7 @@ export default class GraphQLHelper {
117
117
  public static getFields(
118
118
  info: GraphQLResolveInfo,
119
119
  obj: Record<string, any> = {},
120
- config: Partial<GraphQLFieldsConfig> = {}
120
+ config: Partial<GraphQLFieldsConfig> = {},
121
121
  ) {
122
122
  return getFields(info, obj, config);
123
123
  }
@@ -190,7 +190,7 @@ export function getArguments(ast: FieldNode) {
190
190
  const valueNode = argument.value;
191
191
  const argumentValue = !isListValueNode(valueNode)
192
192
  ? (valueNode as any).value
193
- : (valueNode as any).values.map((value) => value.value);
193
+ : (valueNode as any).values.map(value => value.value);
194
194
 
195
195
  return {
196
196
  [argument.name.value]: {
@@ -251,7 +251,7 @@ export function flattenAST(
251
251
  ast: FieldNode,
252
252
  info: GraphQLResolveInfo,
253
253
  obj: any = {},
254
- config: Partial<GraphQLFieldsConfig> = {}
254
+ config: Partial<GraphQLFieldsConfig> = {},
255
255
  ) {
256
256
  // Process configuration
257
257
  config = Object.assign(
@@ -259,7 +259,7 @@ export function flattenAST(
259
259
  processArguments: false,
260
260
  excludedFields: [],
261
261
  },
262
- config
262
+ config,
263
263
  );
264
264
 
265
265
  return getASTSelections(ast).reduce((flattened, a) => {
@@ -306,7 +306,7 @@ export function flattenAST(
306
306
  export function getFields(
307
307
  info: GraphQLResolveInfo,
308
308
  obj: Record<string, any> = {},
309
- config: Partial<GraphQLFieldsConfig> = {}
309
+ config: Partial<GraphQLFieldsConfig> = {},
310
310
  ) {
311
311
  // Check info
312
312
  if (!info || (!info.fieldNodes && !(info as any).fieldASTs)) {
@@ -1,4 +1,4 @@
1
- import { BadRequestException, HttpException, UnauthorizedException } from '@nestjs/common';
1
+ import { BadRequestException, UnauthorizedException } from '@nestjs/common';
2
2
  import { plainToInstance } from 'class-transformer';
3
3
  import { validate } from 'class-validator';
4
4
  import { ValidatorOptions } from 'class-validator/types/validation/ValidatorOptions';
@@ -28,7 +28,7 @@ export default class InputHelper {
28
28
  processType?: ProcessType;
29
29
  roles?: string | string[];
30
30
  throwError?: boolean;
31
- }
31
+ },
32
32
  ): Promise<any> {
33
33
  return check(value, user, options);
34
34
  }
@@ -59,7 +59,7 @@ export default class InputHelper {
59
59
  parameter: number,
60
60
  min: number,
61
61
  max: number,
62
- falseFunction: (...params) => any = errorFunction
62
+ falseFunction: (...params) => any = errorFunction,
63
63
  ): boolean {
64
64
  return isBetween(parameter, min, max, falseFunction);
65
65
  }
@@ -105,7 +105,7 @@ export default class InputHelper {
105
105
  public static isGreater(
106
106
  parameter: number,
107
107
  compare: number,
108
- falseFunction: (...params) => any = errorFunction
108
+ falseFunction: (...params) => any = errorFunction,
109
109
  ): boolean {
110
110
  return isGreater(parameter, compare, falseFunction);
111
111
  }
@@ -116,7 +116,7 @@ export default class InputHelper {
116
116
  public static isLower(
117
117
  parameter: number,
118
118
  compare: number,
119
- falseFunction: (...params) => any = errorFunction
119
+ falseFunction: (...params) => any = errorFunction,
120
120
  ): boolean {
121
121
  return isLower(parameter, compare, falseFunction);
122
122
  }
@@ -125,7 +125,7 @@ export default class InputHelper {
125
125
  * Check if parameter is a non-empty array
126
126
  */
127
127
  public static isNonEmptyArray(parameter: any, falseFunction: (...params) => any = errorFunction): boolean {
128
- return isNonEmptyString(parameter, errorFunction);
128
+ return isNonEmptyString(parameter, falseFunction);
129
129
  }
130
130
 
131
131
  /**
@@ -182,7 +182,7 @@ export default class InputHelper {
182
182
  * @deprecated use mapClass function
183
183
  */
184
184
  public static map<T>(values: Partial<T>, ctor: new () => T, cloneDeep = true): T {
185
- return mapClass(values, ctor);
185
+ return mapClass(values, ctor, { cloneDeep });
186
186
  }
187
187
  }
188
188
 
@@ -194,13 +194,10 @@ export function assignPlain(target: Record<any, any>, ...args: Record<any, any>[
194
194
  target,
195
195
  ...args.map(
196
196
  // Prepare records
197
- (item) =>
198
- !item
199
- ? // Return item if not an object
200
- item
201
- : // Return cloned record with undefined properties removed
202
- filterProperties(clone(item, { circles: false }), (prop) => prop !== undefined)
203
- )
197
+ item =>
198
+ // Return item if not an object or cloned record with undefined properties removed
199
+ !item ? item : filterProperties(clone(item, { circles: false }), prop => prop !== undefined),
200
+ ),
204
201
  );
205
202
  }
206
203
 
@@ -217,7 +214,7 @@ export async function check(
217
214
  roles?: string | string[];
218
215
  throwError?: boolean;
219
216
  validatorOptions?: ValidatorOptions;
220
- }
217
+ },
221
218
  ): Promise<any> {
222
219
  const config = {
223
220
  throwError: true,
@@ -245,15 +242,15 @@ export async function check(
245
242
  // Check access
246
243
  if (
247
244
  // check if any user, including users who are not logged in, can access
248
- roles.includes(RoleEnum.S_EVERYONE) ||
245
+ roles.includes(RoleEnum.S_EVERYONE)
249
246
  // check if user is logged in
250
- (roles.includes(RoleEnum.S_USER) && user?.id) ||
247
+ || (roles.includes(RoleEnum.S_USER) && user?.id)
251
248
  // check if the user has at least one of the required roles
252
- user?.hasRole?.(roles) ||
249
+ || user?.hasRole?.(roles)
253
250
  // check if the user is herself / himself
254
- (roles.includes(RoleEnum.S_SELF) && equalIds(config.dbObject, user)) ||
251
+ || (roles.includes(RoleEnum.S_SELF) && equalIds(config.dbObject, user))
255
252
  // check if the user is the creator
256
- (roles.includes(RoleEnum.S_CREATOR) && equalIds(config.dbObject?.createdBy, user))
253
+ || (roles.includes(RoleEnum.S_CREATOR) && equalIds(config.dbObject?.createdBy, user))
257
254
  ) {
258
255
  valid = true;
259
256
  }
@@ -394,10 +391,10 @@ export function errorFunction(caller: (...params) => any, message = 'Required pa
394
391
  */
395
392
  export function filterProperties<T = Record<string, any>>(
396
393
  obj: T,
397
- filterFunction: (value?: any, key?: string, obj?: T) => boolean
394
+ filterFunction: (value?: any, key?: string, obj?: T) => boolean,
398
395
  ): Partial<T> {
399
396
  return Object.keys(obj)
400
- .filter((key) => filterFunction(obj[key], key, obj))
397
+ .filter(key => filterFunction(obj[key], key, obj))
401
398
  .reduce((res, key) => Object.assign(res, { [key]: obj[key] }), {});
402
399
  }
403
400
 
@@ -454,7 +451,7 @@ export function isBetween(
454
451
  parameter: number,
455
452
  min: number,
456
453
  max: number,
457
- falseFunction: (...params) => any = errorFunction
454
+ falseFunction: (...params) => any = errorFunction,
458
455
  ): boolean {
459
456
  return typeof parameter === 'number' && parameter > min && parameter < max ? true : falseFunction(isBetween);
460
457
  }
@@ -485,12 +482,12 @@ export function isFalse(parameter: any, falseFunction: (...params) => any = erro
485
482
  * Check if parameter is a valid file
486
483
  */
487
484
  export function isFile(parameter: any, falseFunction: (...params) => any = errorFunction): boolean {
488
- return parameter !== null &&
489
- typeof parameter !== 'undefined' &&
490
- parameter.name &&
491
- parameter.path &&
492
- parameter.type &&
493
- parameter.size > 0
485
+ return parameter !== null
486
+ && typeof parameter !== 'undefined'
487
+ && parameter.name
488
+ && parameter.path
489
+ && parameter.type
490
+ && parameter.size > 0
494
491
  ? true
495
492
  : falseFunction(isFile);
496
493
  }
@@ -508,7 +505,7 @@ export function isFunction(parameter: (...params) => any, falseFunction: (...par
508
505
  export function isGreater(
509
506
  parameter: number,
510
507
  compare: number,
511
- falseFunction: (...params) => any = errorFunction
508
+ falseFunction: (...params) => any = errorFunction,
512
509
  ): boolean {
513
510
  return typeof parameter === 'number' && parameter > compare ? true : falseFunction(isGreater);
514
511
  }
@@ -519,7 +516,7 @@ export function isGreater(
519
516
  export function isLower(
520
517
  parameter: number,
521
518
  compare: number,
522
- falseFunction: (...params) => any = errorFunction
519
+ falseFunction: (...params) => any = errorFunction,
523
520
  ): boolean {
524
521
  return typeof parameter === 'number' && parameter < compare ? true : falseFunction(isLower);
525
522
  }
@@ -528,10 +525,10 @@ export function isLower(
528
525
  * Check if parameter is a non empty array
529
526
  */
530
527
  export function isNonEmptyArray(parameter: any, falseFunction: (...params) => any = errorFunction): boolean {
531
- return parameter !== null &&
532
- typeof parameter !== 'undefined' &&
533
- parameter.constructor === Array &&
534
- parameter.length > 0
528
+ return parameter !== null
529
+ && typeof parameter !== 'undefined'
530
+ && parameter.constructor === Array
531
+ && parameter.length > 0
535
532
  ? true
536
533
  : falseFunction(isNonEmptyArray);
537
534
  }
@@ -540,10 +537,10 @@ export function isNonEmptyArray(parameter: any, falseFunction: (...params) => an
540
537
  * Check if parameter is a non empty object
541
538
  */
542
539
  export function isNonEmptyObject(parameter: any, falseFunction: (...params) => any = errorFunction): boolean {
543
- return parameter !== null &&
544
- typeof parameter !== 'undefined' &&
545
- parameter.constructor === Object &&
546
- Object.keys(parameter).length !== 0
540
+ return parameter !== null
541
+ && typeof parameter !== 'undefined'
542
+ && parameter.constructor === Object
543
+ && Object.keys(parameter).length !== 0
547
544
  ? true
548
545
  : falseFunction(isNonEmptyObject);
549
546
  }
@@ -593,13 +590,10 @@ export function mergePlain(target: Record<any, any>, ...args: Record<any, any>[]
593
590
  target,
594
591
  ...args.map(
595
592
  // Prepare records
596
- (item) =>
597
- !item
598
- ? // Return item if not an object
599
- item
600
- : // Return cloned record with undefined properties removed
601
- filterProperties(clone(item, { circles: false }), (prop) => prop !== undefined)
602
- )
593
+ item =>
594
+ // Return item if not an object or cloned record with undefined properties removed
595
+ !item ? item : filterProperties(clone(item, { circles: false }), prop => prop !== undefined),
596
+ ),
603
597
  );
604
598
  }
605
599
 
@@ -636,12 +630,13 @@ export function mapClass<T>(
636
630
  cloneDeep?: boolean;
637
631
  circle?: boolean;
638
632
  proto?: boolean;
639
- }
633
+ },
640
634
  ): T {
641
635
  const config = {
642
636
  cloneDeep: true,
643
637
  circles: false,
644
638
  proto: false,
639
+ ...options,
645
640
  };
646
641
  const instance = new ctor();
647
642
 
@@ -708,7 +703,7 @@ export function processDeep(
708
703
  specialClasses?: ((new (args: any[]) => any) | string)[];
709
704
  specialFunctions?: string[];
710
705
  specialProperties?: string[];
711
- }
706
+ },
712
707
  ): any {
713
708
  // Set options
714
709
  const { processedObjects, specialClasses, specialFunctions, specialProperties } = {
@@ -722,10 +717,9 @@ export function processDeep(
722
717
  // Check for falsifiable values
723
718
  if (!data) {
724
719
  return func(data);
725
- }
726
720
 
727
- // Prevent circular processing
728
- else if (typeof data === 'object') {
721
+ // Prevent circular processing
722
+ } else if (typeof data === 'object') {
729
723
  if (processedObjects.get(data)) {
730
724
  return data;
731
725
  }
@@ -734,21 +728,21 @@ export function processDeep(
734
728
 
735
729
  // Process array
736
730
  if (Array.isArray(data)) {
737
- return func(data.map((item) => processDeep(item, func, { processedObjects, specialClasses })));
731
+ return func(data.map(item => processDeep(item, func, { processedObjects, specialClasses })));
738
732
  }
739
733
 
740
734
  // Process object
741
735
  if (typeof data === 'object') {
742
736
  if (
743
- specialFunctions.find((sF) => typeof data[sF] === 'function') ||
744
- specialProperties.find((sP) => Object.getOwnPropertyNames(data).includes(sP))
737
+ specialFunctions.find(sF => typeof data[sF] === 'function')
738
+ || specialProperties.find(sP => Object.getOwnPropertyNames(data).includes(sP))
745
739
  ) {
746
740
  return func(data);
747
741
  }
748
742
  for (const specialClass of specialClasses) {
749
743
  if (
750
- (typeof specialClass === 'string' && specialClass === data.constructor?.name) ||
751
- (typeof specialClass !== 'string' && data instanceof specialClass)
744
+ (typeof specialClass === 'string' && specialClass === data.constructor?.name)
745
+ || (typeof specialClass !== 'string' && data instanceof specialClass)
752
746
  ) {
753
747
  return func(data);
754
748
  }
@@ -787,7 +781,7 @@ export function removePropertiesDeep(
787
781
  properties: string[],
788
782
  options?: {
789
783
  processedObjects?: WeakMap<new () => any, boolean>;
790
- }
784
+ },
791
785
  ): any {
792
786
  // Set options
793
787
  const { processedObjects } = {
@@ -798,10 +792,9 @@ export function removePropertiesDeep(
798
792
  // Check for falsifiable values
799
793
  if (!data) {
800
794
  return data;
801
- }
802
795
 
803
- // Prevent circular processing
804
- else if (typeof data === 'object') {
796
+ // Prevent circular processing
797
+ } else if (typeof data === 'object') {
805
798
  if (processedObjects.get(data)) {
806
799
  return data;
807
800
  }
@@ -810,7 +803,7 @@ export function removePropertiesDeep(
810
803
 
811
804
  // Process array
812
805
  if (Array.isArray(data)) {
813
- return data.map((item) => removePropertiesDeep(item, properties, { processedObjects }));
806
+ return data.map(item => removePropertiesDeep(item, properties, { processedObjects }));
814
807
  }
815
808
 
816
809
  // Process object