@lenne.tech/nest-server 8.0.1 → 8.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.
Files changed (164) hide show
  1. package/dist/config.env.js +3 -2
  2. package/dist/config.env.js.map +1 -1
  3. package/dist/core/common/args/pagination.args.js +1 -1
  4. package/dist/core/common/args/pagination.args.js.map +1 -1
  5. package/dist/core/common/decorators/restricted.decorator.d.ts +2 -0
  6. package/dist/core/common/decorators/restricted.decorator.js +10 -7
  7. package/dist/core/common/decorators/restricted.decorator.js.map +1 -1
  8. package/dist/core/common/helpers/config.helper.d.ts +2 -1
  9. package/dist/core/common/helpers/config.helper.js +11 -7
  10. package/dist/core/common/helpers/config.helper.js.map +1 -1
  11. package/dist/core/common/helpers/context.helper.d.ts +7 -1
  12. package/dist/core/common/helpers/context.helper.js +33 -29
  13. package/dist/core/common/helpers/context.helper.js.map +1 -1
  14. package/dist/core/common/helpers/db.helper.d.ts +35 -0
  15. package/dist/core/common/helpers/db.helper.js +345 -0
  16. package/dist/core/common/helpers/db.helper.js.map +1 -0
  17. package/dist/core/common/helpers/file.helper.d.ts +8 -1
  18. package/dist/core/common/helpers/file.helper.js +43 -31
  19. package/dist/core/common/helpers/file.helper.js.map +1 -1
  20. package/dist/core/common/helpers/filter.helper.d.ts +3 -0
  21. package/dist/core/common/helpers/filter.helper.js +93 -81
  22. package/dist/core/common/helpers/filter.helper.js.map +1 -1
  23. package/dist/core/common/helpers/graphql.helper.d.ts +24 -1
  24. package/dist/core/common/helpers/graphql.helper.js +144 -96
  25. package/dist/core/common/helpers/graphql.helper.js.map +1 -1
  26. package/dist/core/common/helpers/input.helper.d.ts +40 -4
  27. package/dist/core/common/helpers/input.helper.js +253 -97
  28. package/dist/core/common/helpers/input.helper.js.map +1 -1
  29. package/dist/core/common/helpers/model.helper.d.ts +11 -0
  30. package/dist/core/common/helpers/model.helper.js +41 -29
  31. package/dist/core/common/helpers/model.helper.js.map +1 -1
  32. package/dist/core/common/helpers/service.helper.d.ts +21 -1
  33. package/dist/core/common/helpers/service.helper.js +80 -72
  34. package/dist/core/common/helpers/service.helper.js.map +1 -1
  35. package/dist/core/common/inputs/combined-filter.input.js +1 -1
  36. package/dist/core/common/inputs/combined-filter.input.js.map +1 -1
  37. package/dist/core/common/inputs/core-input.input.js +1 -1
  38. package/dist/core/common/inputs/core-input.input.js.map +1 -1
  39. package/dist/core/common/interceptors/check-response.interceptor.js +1 -1
  40. package/dist/core/common/interceptors/check-response.interceptor.js.map +1 -1
  41. package/dist/core/common/interfaces/resolve-selector.interface.d.ts +5 -0
  42. package/dist/core/common/interfaces/resolve-selector.interface.js +3 -0
  43. package/dist/core/common/interfaces/resolve-selector.interface.js.map +1 -0
  44. package/dist/core/common/interfaces/service-options.interface.d.ts +36 -0
  45. package/dist/core/common/interfaces/service-options.interface.js +3 -0
  46. package/dist/core/common/interfaces/service-options.interface.js.map +1 -0
  47. package/dist/core/common/models/core-model.model.d.ts +5 -1
  48. package/dist/core/common/models/core-model.model.js +1 -1
  49. package/dist/core/common/models/core-model.model.js.map +1 -1
  50. package/dist/core/common/pipes/check-input.pipe.js +2 -2
  51. package/dist/core/common/pipes/check-input.pipe.js.map +1 -1
  52. package/dist/core/common/pipes/map-and-validate.pipe.js +1 -1
  53. package/dist/core/common/pipes/map-and-validate.pipe.js.map +1 -1
  54. package/dist/core/common/plugins/mongoose-id.plugin.js +1 -1
  55. package/dist/core/common/plugins/mongoose-id.plugin.js.map +1 -1
  56. package/dist/core/common/services/crud.service.d.ts +13 -0
  57. package/dist/core/common/services/crud.service.js +57 -0
  58. package/dist/core/common/services/crud.service.js.map +1 -0
  59. package/dist/core/common/services/email.service.js +8 -8
  60. package/dist/core/common/services/email.service.js.map +1 -1
  61. package/dist/core/common/services/module.service.d.ts +39 -0
  62. package/dist/core/common/services/module.service.js +76 -0
  63. package/dist/core/common/services/module.service.js.map +1 -0
  64. package/dist/core/common/types/core-model-constructor.type.d.ts +21 -0
  65. package/dist/core/common/types/core-model-constructor.type.js +3 -0
  66. package/dist/core/common/types/core-model-constructor.type.js.map +1 -0
  67. package/dist/core/common/types/field-selection.type.d.ts +4 -0
  68. package/dist/core/common/types/field-selection.type.js +3 -0
  69. package/dist/core/common/types/field-selection.type.js.map +1 -0
  70. package/dist/core/common/types/ids.type.d.ts +8 -0
  71. package/dist/core/common/types/ids.type.js +3 -0
  72. package/dist/core/common/types/ids.type.js.map +1 -0
  73. package/dist/core/common/types/string-or-object-id.type.d.ts +2 -0
  74. package/dist/core/common/types/string-or-object-id.type.js +3 -0
  75. package/dist/core/common/types/string-or-object-id.type.js.map +1 -0
  76. package/dist/core/modules/auth/core-auth.resolver.d.ts +2 -1
  77. package/dist/core/modules/auth/core-auth.resolver.js +4 -3
  78. package/dist/core/modules/auth/core-auth.resolver.js.map +1 -1
  79. package/dist/core/modules/auth/guards/roles.guard.js.map +1 -1
  80. package/dist/core/modules/auth/services/core-auth-user.service.d.ts +3 -1
  81. package/dist/core/modules/auth/services/core-auth-user.service.js.map +1 -1
  82. package/dist/core/modules/auth/services/core-auth.service.d.ts +2 -1
  83. package/dist/core/modules/auth/services/core-auth.service.js +6 -4
  84. package/dist/core/modules/auth/services/core-auth.service.js.map +1 -1
  85. package/dist/core/modules/user/core-user.model.js +1 -1
  86. package/dist/core/modules/user/core-user.model.js.map +1 -1
  87. package/dist/core/modules/user/core-user.service.d.ts +16 -25
  88. package/dist/core/modules/user/core-user.service.js +74 -90
  89. package/dist/core/modules/user/core-user.service.js.map +1 -1
  90. package/dist/core.module.js +1 -1
  91. package/dist/core.module.js.map +1 -1
  92. package/dist/index.d.ts +9 -1
  93. package/dist/index.js +9 -1
  94. package/dist/index.js.map +1 -1
  95. package/dist/server/modules/auth/auth.resolver.d.ts +2 -1
  96. package/dist/server/modules/auth/auth.resolver.js +4 -3
  97. package/dist/server/modules/auth/auth.resolver.js.map +1 -1
  98. package/dist/server/modules/file/file.controller.js +1 -1
  99. package/dist/server/modules/file/file.controller.js.map +1 -1
  100. package/dist/server/modules/user/avatar.controller.js +1 -1
  101. package/dist/server/modules/user/avatar.controller.js.map +1 -1
  102. package/dist/server/modules/user/user.model.d.ts +4 -2
  103. package/dist/server/modules/user/user.module.js +7 -3
  104. package/dist/server/modules/user/user.module.js.map +1 -1
  105. package/dist/server/modules/user/user.resolver.d.ts +8 -7
  106. package/dist/server/modules/user/user.resolver.js +85 -49
  107. package/dist/server/modules/user/user.resolver.js.map +1 -1
  108. package/dist/server/modules/user/user.service.d.ts +9 -18
  109. package/dist/server/modules/user/user.service.js +19 -30
  110. package/dist/server/modules/user/user.service.js.map +1 -1
  111. package/dist/test/test.helper.d.ts +1 -2
  112. package/dist/test/test.helper.js +1 -16
  113. package/dist/test/test.helper.js.map +1 -1
  114. package/dist/tsconfig.build.tsbuildinfo +1 -1
  115. package/package.json +58 -60
  116. package/src/config.env.ts +3 -2
  117. package/src/core/common/args/pagination.args.ts +2 -2
  118. package/src/core/common/decorators/restricted.decorator.ts +16 -10
  119. package/src/core/common/helpers/config.helper.ts +26 -6
  120. package/src/core/common/helpers/context.helper.ts +42 -33
  121. package/src/core/common/helpers/db.helper.ts +580 -0
  122. package/src/core/common/helpers/file.helper.ts +76 -49
  123. package/src/core/common/helpers/filter.helper.ts +119 -96
  124. package/src/core/common/helpers/graphql.helper.ts +219 -117
  125. package/src/core/common/helpers/input.helper.ts +347 -108
  126. package/src/core/common/helpers/model.helper.ts +102 -57
  127. package/src/core/common/helpers/service.helper.ts +149 -117
  128. package/src/core/common/inputs/combined-filter.input.ts +2 -2
  129. package/src/core/common/inputs/core-input.input.ts +2 -2
  130. package/src/core/common/interceptors/check-response.interceptor.ts +2 -2
  131. package/src/core/common/interfaces/resolve-selector.interface.ts +9 -0
  132. package/src/core/common/interfaces/service-options.interface.ts +71 -0
  133. package/src/core/common/models/core-model.model.ts +7 -3
  134. package/src/core/common/pipes/check-input.pipe.ts +4 -4
  135. package/src/core/common/pipes/map-and-validate.pipe.ts +2 -2
  136. package/src/core/common/plugins/mongoose-id.plugin.js +1 -1
  137. package/src/core/common/services/crud.service.ts +100 -0
  138. package/src/core/common/services/email.service.ts +9 -9
  139. package/src/core/common/services/module.service.ts +180 -0
  140. package/src/core/common/types/core-model-constructor.type.ts +30 -0
  141. package/src/core/common/types/field-selection.type.ts +8 -0
  142. package/src/core/common/types/ids.type.ts +7 -0
  143. package/src/core/common/types/string-or-object-id.type.ts +3 -0
  144. package/src/core/modules/auth/core-auth.module.ts +1 -1
  145. package/src/core/modules/auth/core-auth.resolver.ts +8 -3
  146. package/src/core/modules/auth/guards/roles.guard.ts +1 -1
  147. package/src/core/modules/auth/services/core-auth-user.service.ts +7 -1
  148. package/src/core/modules/auth/services/core-auth.service.ts +14 -4
  149. package/src/core/modules/user/core-user.model.ts +2 -1
  150. package/src/core/modules/user/core-user.service.ts +120 -185
  151. package/src/core.module.ts +2 -2
  152. package/src/index.ts +9 -1
  153. package/src/main.ts +1 -1
  154. package/src/server/modules/auth/auth.resolver.ts +8 -3
  155. package/src/server/modules/file/file.controller.ts +2 -2
  156. package/src/server/modules/user/avatar.controller.ts +2 -2
  157. package/src/server/modules/user/user.module.ts +7 -3
  158. package/src/server/modules/user/user.resolver.ts +74 -43
  159. package/src/server/modules/user/user.service.ts +23 -53
  160. package/src/test/test.helper.ts +31 -30
  161. package/dist/core/modules/user/core-basic-user.service.d.ts +0 -17
  162. package/dist/core/modules/user/core-basic-user.service.js +0 -73
  163. package/dist/core/modules/user/core-basic-user.service.js.map +0 -1
  164. package/src/core/modules/user/core-basic-user.service.ts +0 -138
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lenne.tech/nest-server",
3
- "version": "8.0.1",
3
+ "version": "8.2.0",
4
4
  "description": "Modern, fast, powerful Node.js web framework in TypeScript based on Nest with a GraphQL API and a connection to MongoDB (or other databases).",
5
5
  "keywords": [
6
6
  "node",
@@ -20,7 +20,7 @@
20
20
  "format:staged": "pretty-quick --staged",
21
21
  "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix",
22
22
  "prestart:prod": "npm run build",
23
- "reinit": "rimraf package-lock.json && rimraf node_modules && npm cache clean --force && npm i && npm run test:e2e",
23
+ "reinit": "rimraf package-lock.json && rimraf node_modules && npm cache clean --force && npm i && npm run test:e2e && npm run build",
24
24
  "reinit:force": "rimraf package-lock.json && rimraf node_modules && npm cache clean --force && npm i --force && npm run test:e2e",
25
25
  "reinit:legacy": "rimraf package-lock.json && rimraf node_modules && npm cache clean --force && npm i --legacy-peer-deps && npm run test:e2e",
26
26
  "start": "./node_modules/.bin/grunt",
@@ -29,13 +29,13 @@
29
29
  "start:nodemon": "ts-node -r tsconfig-paths/register src/main.ts",
30
30
  "start:debug": "nodemon --config nodemon-debug.json",
31
31
  "start:dev": "nodemon",
32
- "test": "jest",
33
- "test:cov": "jest --coverage",
34
- "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
35
- "test:e2e": "jest --detectOpenHandles --config jest-e2e.json",
36
- "test:e2e-cov": "jest --detectOpenHandles --config jest-e2e.json --coverage",
37
- "test:ci": "jest --detectOpenHandles --config jest-e2e.json --ci",
38
- "test:watch": "jest --watch",
32
+ "test": "NODE_ENV=local jest",
33
+ "test:cov": "NODE_ENV=local jest --coverage",
34
+ "test:debug": "NODE_ENV=local node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
35
+ "test:e2e": "NODE_ENV=local jest --config jest-e2e.json",
36
+ "test:e2e-cov": "NODE_ENV=local jest --config jest-e2e.json --coverage",
37
+ "test:ci": "NODE_ENV=local jest --config jest-e2e.json --ci",
38
+ "test:watch": "NODE_ENV=local jest --watch",
39
39
  "prepack": "npm run prestart:prod",
40
40
  "prepare": "husky install",
41
41
  "prepublishOnly": "npm run format && npm run lint && npm run test:ci",
@@ -52,73 +52,71 @@
52
52
  "node": ">= 16.13.0"
53
53
  },
54
54
  "dependencies": {
55
- "@apollo/gateway": "0.48.3",
56
- "@nestjs/apollo": "10.0.7",
57
- "@nestjs/common": "8.4.1",
58
- "@nestjs/core": "8.4.1",
59
- "@nestjs/graphql": "10.0.7",
55
+ "@apollo/gateway": "0.50.2",
56
+ "@nestjs/apollo": "10.0.11",
57
+ "@nestjs/common": "8.4.4",
58
+ "@nestjs/core": "8.4.4",
59
+ "@nestjs/graphql": "10.0.11",
60
60
  "@nestjs/jwt": "8.0.0",
61
61
  "@nestjs/mongoose": "9.0.3",
62
62
  "@nestjs/passport": "8.2.1",
63
- "@nestjs/platform-express": "8.4.1",
64
- "@nestjs/testing": "8.4.1",
65
- "@shelf/jest-mongodb": "2.2.1",
66
- "@types/ejs": "3.1.0",
67
- "@types/jest": "27.4.1",
68
- "@types/lodash": "4.14.180",
69
- "@types/multer": "1.4.7",
70
- "@types/node": "17.0.21",
71
- "@types/node-mailjet": "3.3.8",
72
- "@types/nodemailer": "6.4.4",
73
- "@types/passport": "1.0.7",
74
- "@types/supertest": "2.0.11",
75
- "@typescript-eslint/eslint-plugin": "5.15.0",
76
- "@typescript-eslint/parser": "5.15.0",
77
- "apollo-server-core": "3.6.4",
78
- "apollo-server-express": "3.6.4",
63
+ "@nestjs/platform-express": "8.4.4",
64
+ "apollo-server-core": "3.6.7",
65
+ "apollo-server-express": "3.6.7",
79
66
  "bcrypt": "5.0.1",
80
67
  "class-transformer": "0.5.1",
81
68
  "class-validator": "0.13.2",
82
- "coffeescript": "2.6.1",
83
- "ejs": "3.1.6",
84
- "eslint": "8.11.0",
85
- "eslint-config-prettier": "8.5.0",
86
- "fastify": "3.27.4",
87
- "graphql": "16.3.0",
69
+ "ejs": "3.1.7",
70
+ "graphql": "16.4.0",
88
71
  "graphql-subscriptions": "2.0.0",
89
- "grunt": "1.4.1",
90
- "grunt-bg-shell": "2.3.3",
91
- "grunt-contrib-clean": "2.0.0",
92
- "grunt-contrib-watch": "1.1.0",
93
- "grunt-sync": "0.8.2",
94
- "husky": "7.0.4",
95
- "jest": "27.5.1",
96
- "json-to-graphql-query": "2.2.3",
97
- "light-my-request": "4.8.0",
72
+ "json-to-graphql-query": "2.2.4",
73
+ "light-my-request": "4.10.1",
98
74
  "lodash": "4.17.21",
99
- "mongodb": "4.4.1",
100
- "mongoose": "6.2.6",
75
+ "mongodb": "4.5.0",
76
+ "mongoose": "6.3.2",
101
77
  "multer": "1.4.4",
102
- "node-mailjet": "3.3.7",
103
- "nodemailer": "6.7.2",
104
- "nodemon": "2.0.15",
78
+ "node-mailjet": "3.3.13",
79
+ "nodemailer": "6.7.5",
80
+ "nodemon": "2.0.16",
105
81
  "passport": "0.5.2",
106
82
  "passport-jwt": "4.0.0",
107
- "prettier": "2.5.1",
108
- "pretty-quick": "3.1.3",
109
83
  "reflect-metadata": "0.1.13",
110
84
  "rimraf": "3.0.2",
111
- "rxjs": "7.5.5",
112
- "supertest": "6.2.2",
113
- "ts-jest": "27.1.3",
114
- "ts-morph": "13.0.3",
115
- "ts-node": "10.7.0",
116
- "tsconfig-paths": "3.14.0",
117
- "typescript": "4.6.2"
85
+ "rxjs": "7.5.5"
118
86
  },
119
87
  "devDependencies": {
88
+ "@nestjs/testing": "8.4.4",
89
+ "@types/ejs": "3.1.0",
90
+ "@types/jest": "27.5.0",
91
+ "@types/lodash": "4.14.182",
92
+ "@types/multer": "1.4.7",
93
+ "@types/node": "16.11.33",
94
+ "@types/node-mailjet": "3.3.8",
95
+ "@types/nodemailer": "6.4.4",
96
+ "@types/passport": "1.0.7",
97
+ "@types/supertest": "2.0.12",
98
+ "@typescript-eslint/eslint-plugin": "5.22.0",
99
+ "@typescript-eslint/parser": "5.22.0",
100
+ "coffeescript": "2.7.0",
101
+ "eslint": "8.14.0",
102
+ "eslint-config-prettier": "8.5.0",
120
103
  "find-file-up": "2.0.1",
121
- "pm2": "5.2.0"
104
+ "grunt": "1.5.2",
105
+ "grunt-bg-shell": "2.3.3",
106
+ "grunt-contrib-clean": "2.0.1",
107
+ "grunt-contrib-watch": "1.1.0",
108
+ "grunt-sync": "0.8.2",
109
+ "husky": "7.0.4",
110
+ "jest": "28.0.3",
111
+ "pm2": "5.2.0",
112
+ "prettier": "2.6.2",
113
+ "pretty-quick": "3.1.3",
114
+ "supertest": "6.2.3",
115
+ "ts-jest": "28.0.1",
116
+ "ts-morph": "14.0.0",
117
+ "ts-node": "10.7.0",
118
+ "tsconfig-paths": "4.0.0",
119
+ "typescript": "4.6.4"
122
120
  },
123
121
  "jest": {
124
122
  "collectCoverage": true,
package/src/config.env.ts CHANGED
@@ -109,8 +109,9 @@ const config: { [env: string]: IServerOptions } = {
109
109
  *
110
110
  * default: development
111
111
  */
112
- const envConfig = config[process.env['NODE' + '_ENV'] || 'development'] || config.development;
113
- console.log('Server starts in mode: ', process.env['NODE' + '_ENV'] || 'development');
112
+ const env = process.env['NODE' + '_ENV'] || 'development';
113
+ const envConfig = config[env] || config.development;
114
+ console.log('Configured for: ' + envConfig.env + (env !== envConfig.env ? ' (requested: ' + env + ')' : ''));
114
115
 
115
116
  /**
116
117
  * Export envConfig as default
@@ -1,6 +1,6 @@
1
1
  import { IsOptional, Max } from 'class-validator';
2
2
  import { ArgsType, Field, Int } from '@nestjs/graphql';
3
- import { ModelHelper } from '../helpers/model.helper';
3
+ import { maps } from '../helpers/model.helper';
4
4
  import { CoreInput } from '../inputs/core-input.input';
5
5
  import { SortInput } from '../inputs/sort.input';
6
6
 
@@ -90,7 +90,7 @@ export class PaginationArgs extends CoreInput {
90
90
  } = {}
91
91
  ): this {
92
92
  super.map(data, options);
93
- this.sort = ModelHelper.maps(data.sort, SortInput, options.cloneDeep);
93
+ this.sort = maps(data.sort, SortInput, options.cloneDeep);
94
94
  Object.keys(this).forEach((key) => this[key] === undefined && delete this[key]);
95
95
  return this;
96
96
  }
@@ -1,6 +1,8 @@
1
1
  import 'reflect-metadata';
2
2
  import { UnauthorizedException } from '@nestjs/common';
3
3
  import { RoleEnum } from '../enums/role.enum';
4
+ import { getStringIds } from '../helpers/db.helper';
5
+ import { IdsType } from '../types/ids.type';
4
6
 
5
7
  /**
6
8
  * Restricted meta key
@@ -28,11 +30,13 @@ export const getRestricted = (object: unknown, propertyKey: string) => {
28
30
 
29
31
  /**
30
32
  * Check data for restricted properties (properties with `Restricted` decorator)
33
+ *
34
+ * If restricted roles includes RoleEnum.OWNER, ownerId(s) from current data (in DB) must be set in options.
31
35
  */
32
36
  export const checkRestricted = (
33
37
  data: any,
34
38
  user: { id: any; hasRole: (roles: string[]) => boolean },
35
- options: { ignoreUndefined?: boolean; throwError?: boolean } = {},
39
+ options: { ignoreUndefined?: boolean; ownerIds?: IdsType; throwError?: boolean } = {},
36
40
  processedObjects: any[] = []
37
41
  ) => {
38
42
  const config = {
@@ -55,7 +59,7 @@ export const checkRestricted = (
55
59
  // Array
56
60
  if (Array.isArray(data)) {
57
61
  // Check array items
58
- return data.map((item) => checkRestricted(item, user, options, processedObjects));
62
+ return data.map((item) => checkRestricted(item, user, config, processedObjects));
59
63
  }
60
64
 
61
65
  // Object
@@ -74,18 +78,20 @@ export const checkRestricted = (
74
78
  if (!user || !user.hasRole(roles)) {
75
79
  // Check special role for owner
76
80
  if (user && roles.includes(RoleEnum.OWNER)) {
77
- const userId = user.id.toString();
81
+ const userId = getStringIds(user);
82
+ const ownerIds = config.ownerIds ? getStringIds(config.ownerIds) : null;
78
83
 
79
84
  if (
80
- !data.ownerIds ||
81
- !(
82
- data.ownerIds === userId ||
83
- (Array.isArray(data.ownerIds) &&
84
- data.ownerIds.some((item) => (item.id ? item.id.toString() === userId : item.toString() === userId)))
85
- )
85
+ // No owner IDs
86
+ !ownerIds ||
87
+ // User is not the owner
88
+ !(ownerIds === userId || (Array.isArray(ownerIds) && ownerIds.includes(userId)))
86
89
  ) {
87
90
  // The user does not have the required rights and is not the owner
88
91
  if (config.throwError) {
92
+ if (!config.ownerIds) {
93
+ throw new UnauthorizedException('Lack of ownerIds to verify ownership of ' + propertyKey);
94
+ }
89
95
  throw new UnauthorizedException('Current user is not allowed to set ' + propertyKey);
90
96
  }
91
97
  continue;
@@ -101,7 +107,7 @@ export const checkRestricted = (
101
107
  }
102
108
 
103
109
  // Check property data
104
- data[propertyKey] = checkRestricted(data[propertyKey], user, options, processedObjects);
110
+ data[propertyKey] = checkRestricted(data[propertyKey], user, config, processedObjects);
105
111
  }
106
112
 
107
113
  // Return processed data
@@ -2,8 +2,9 @@ import * as _ from 'lodash';
2
2
 
3
3
  /**
4
4
  * Helper class for configurations
5
+ * @deprecated use functions directly
5
6
  */
6
- export class Config {
7
+ export default class Config {
7
8
  /**
8
9
  * Special merge function (e.g. for configurations)
9
10
  *
@@ -19,10 +20,29 @@ export class Config {
19
20
  * @returns {any}
20
21
  */
21
22
  public static merge(obj: Record<string, any>, ...sources: any[]): any {
22
- return _.mergeWith(obj, ...sources, (objValue: any, srcValue: any) => {
23
- if (Array.isArray(srcValue)) {
24
- return srcValue;
25
- }
26
- });
23
+ return merge(obj, sources);
27
24
  }
28
25
  }
26
+
27
+ /**
28
+ * Special merge function (e.g. for configurations)
29
+ *
30
+ * It acts like the merge function of lodash:
31
+ * - Source objects are merged into the destination object
32
+ * - Source objects are applied from left to right
33
+ * - Subsequent sources overwrite property assignments of previous sources
34
+ *
35
+ * except that arrays are not merged but overwrite arrays of previous sources.
36
+ *
37
+ * @param {any} obj destination object
38
+ * @param {any[]} sources source objects
39
+ * @returns {any}
40
+ */
41
+
42
+ export function merge(obj: Record<string, any>, ...sources: any[]): any {
43
+ return _.mergeWith(obj, ...sources, (objValue: any, srcValue: any) => {
44
+ if (Array.isArray(srcValue)) {
45
+ return srcValue;
46
+ }
47
+ });
48
+ }
@@ -3,48 +3,57 @@ import { GqlExecutionContext } from '@nestjs/graphql';
3
3
 
4
4
  /**
5
5
  * Helper for context processing
6
+ * @deprecated use functions directly
6
7
  */
7
- export class Context {
8
+ export default class Context {
8
9
  /**
9
10
  * Get data from Context
11
+ * @deprecated use getContextData function
10
12
  */
11
13
  public static getData(context: ExecutionContext): { currentUser: { [key: string]: any }; args: any } {
12
- // Check context
13
- if (!context) {
14
- return { currentUser: null, args: null };
15
- }
14
+ return getContextData(context);
15
+ }
16
+ }
16
17
 
17
- // Init data
18
- let user: { [key: string]: any };
19
- let ctx: any = null;
20
- try {
21
- ctx = GqlExecutionContext.create(context)?.getContext();
22
- } catch (e) {
23
- // console.log(e);
24
- }
18
+ /**
19
+ * Get data from Context
20
+ */
21
+ export function getContextData(context: ExecutionContext): { currentUser: { [key: string]: any }; args: any } {
22
+ // Check context
23
+ if (!context) {
24
+ return { currentUser: null, args: null };
25
+ }
25
26
 
26
- let args: any;
27
- try {
28
- args = GqlExecutionContext.create(context)?.getArgs();
29
- } catch (e) {
30
- // console.log(e);
31
- }
27
+ // Init data
28
+ let user: { [key: string]: any };
29
+ let ctx: any = null;
30
+ try {
31
+ ctx = GqlExecutionContext.create(context)?.getContext();
32
+ } catch (e) {
33
+ // console.log(e);
34
+ }
35
+
36
+ let args: any;
37
+ try {
38
+ args = GqlExecutionContext.create(context)?.getArgs();
39
+ } catch (e) {
40
+ // console.log(e);
41
+ }
32
42
 
33
- // Get data
34
- if (ctx) {
35
- // User from GraphQL context
36
- user = ctx?.user || ctx?.req?.user;
37
- } else {
38
- const request = context?.switchToHttp ? context.switchToHttp()?.getRequest() : null;
39
- if (request) {
40
- args = request.body;
43
+ // Get data
44
+ if (ctx) {
45
+ // User from GraphQL context
46
+ user = ctx?.user || ctx?.req?.user;
47
+ } else {
48
+ const request = context?.switchToHttp ? context.switchToHttp()?.getRequest() : null;
49
+ if (request) {
50
+ args = request.body;
41
51
 
42
- // User from REST context
43
- user = request.user;
44
- }
52
+ // User from REST context
53
+ user = request.user;
45
54
  }
46
-
47
- // Return data
48
- return { currentUser: user, args };
49
55
  }
56
+
57
+ // Return data
58
+ return { currentUser: user, args };
50
59
  }