evaengine 1.0.14 → 2.0.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 (199) hide show
  1. package/README.md +15 -1
  2. package/bin/engine +2 -31
  3. package/dist/bin.d.ts +1 -0
  4. package/dist/bin.js +40 -0
  5. package/dist/bin.js.map +1 -0
  6. package/{src/commands/index.js → dist/commands/index.d.ts} +1 -8
  7. package/dist/commands/index.js +6 -0
  8. package/dist/commands/index.js.map +1 -0
  9. package/dist/commands/interface.d.ts +18 -0
  10. package/dist/commands/interface.js +40 -0
  11. package/dist/commands/interface.js.map +1 -0
  12. package/dist/commands/make_entity.d.ts +47 -0
  13. package/dist/commands/make_entity.js +410 -0
  14. package/dist/commands/make_entity.js.map +1 -0
  15. package/dist/commands/tramp.d.ts +7 -0
  16. package/dist/commands/tramp.js +29 -0
  17. package/dist/commands/tramp.js.map +1 -0
  18. package/dist/config/index.d.ts +92 -0
  19. package/dist/config/index.js +96 -0
  20. package/dist/config/index.js.map +1 -0
  21. package/dist/di.d.ts +73 -0
  22. package/dist/di.js +76 -0
  23. package/dist/di.js.map +1 -0
  24. package/dist/engine.d.ts +85 -0
  25. package/dist/engine.js +404 -0
  26. package/dist/engine.js.map +1 -0
  27. package/dist/entities/index.d.ts +54 -0
  28. package/dist/entities/index.js +228 -0
  29. package/dist/entities/index.js.map +1 -0
  30. package/dist/exceptions/index.d.ts +153 -0
  31. package/dist/exceptions/index.js +439 -0
  32. package/dist/exceptions/index.js.map +1 -0
  33. package/dist/index.d.ts +45 -0
  34. package/dist/index.js +45 -0
  35. package/dist/index.js.map +1 -0
  36. package/dist/middlewares/auth.d.ts +5 -0
  37. package/dist/middlewares/auth.js +63 -0
  38. package/dist/middlewares/auth.js.map +1 -0
  39. package/dist/middlewares/auth_kong.d.ts +2 -0
  40. package/dist/middlewares/auth_kong.js +24 -0
  41. package/dist/middlewares/auth_kong.js.map +1 -0
  42. package/dist/middlewares/debug.d.ts +3 -0
  43. package/dist/middlewares/debug.js +50 -0
  44. package/dist/middlewares/debug.js.map +1 -0
  45. package/{src/middlewares/index.js → dist/middlewares/index.d.ts} +1 -11
  46. package/dist/middlewares/index.js +9 -0
  47. package/dist/middlewares/index.js.map +1 -0
  48. package/dist/middlewares/providers.d.ts +25 -0
  49. package/dist/middlewares/providers.js +63 -0
  50. package/dist/middlewares/providers.js.map +1 -0
  51. package/dist/middlewares/session.d.ts +6 -0
  52. package/dist/middlewares/session.js +51 -0
  53. package/dist/middlewares/session.js.map +1 -0
  54. package/dist/middlewares/trace.d.ts +52 -0
  55. package/dist/middlewares/trace.js +225 -0
  56. package/dist/middlewares/trace.js.map +1 -0
  57. package/dist/middlewares/validator.d.ts +10 -0
  58. package/dist/middlewares/validator.js +43 -0
  59. package/dist/middlewares/validator.js.map +1 -0
  60. package/dist/middlewares/view_cache.d.ts +14 -0
  61. package/dist/middlewares/view_cache.js +102 -0
  62. package/dist/middlewares/view_cache.js.map +1 -0
  63. package/dist/services/cache.d.ts +66 -0
  64. package/dist/services/cache.js +207 -0
  65. package/dist/services/cache.js.map +1 -0
  66. package/dist/services/config.d.ts +25 -0
  67. package/dist/services/config.js +88 -0
  68. package/dist/services/config.js.map +1 -0
  69. package/dist/services/env.d.ts +12 -0
  70. package/dist/services/env.js +24 -0
  71. package/dist/services/env.js.map +1 -0
  72. package/dist/services/event_manager.d.ts +29 -0
  73. package/dist/services/event_manager.js +75 -0
  74. package/dist/services/event_manager.js.map +1 -0
  75. package/dist/services/http_client.d.ts +66 -0
  76. package/dist/services/http_client.js +62 -0
  77. package/dist/services/http_client.js.map +1 -0
  78. package/{src/services/index.js → dist/services/index.d.ts} +1 -15
  79. package/dist/services/index.js +14 -0
  80. package/dist/services/index.js.map +1 -0
  81. package/{src/services/interface.js → dist/services/interface.d.ts} +1 -3
  82. package/dist/services/interface.js +6 -0
  83. package/dist/services/interface.js.map +1 -0
  84. package/{src/services/joi.js → dist/services/joi.d.ts} +2 -9
  85. package/dist/services/joi.js +11 -0
  86. package/dist/services/joi.js.map +1 -0
  87. package/dist/services/jwt_token.d.ts +24 -0
  88. package/dist/services/jwt_token.js +77 -0
  89. package/dist/services/jwt_token.js.map +1 -0
  90. package/dist/services/jwt_token_kong.d.ts +25 -0
  91. package/dist/services/jwt_token_kong.js +65 -0
  92. package/dist/services/jwt_token_kong.js.map +1 -0
  93. package/dist/services/logger.d.ts +30 -0
  94. package/dist/services/logger.js +126 -0
  95. package/dist/services/logger.js.map +1 -0
  96. package/dist/services/namespace.d.ts +55 -0
  97. package/dist/services/namespace.js +157 -0
  98. package/dist/services/namespace.js.map +1 -0
  99. package/dist/services/now.d.ts +14 -0
  100. package/dist/services/now.js +43 -0
  101. package/dist/services/now.js.map +1 -0
  102. package/dist/services/providers.d.ts +55 -0
  103. package/dist/services/providers.js +134 -0
  104. package/dist/services/providers.js.map +1 -0
  105. package/dist/services/redis.d.ts +18 -0
  106. package/dist/services/redis.js +53 -0
  107. package/dist/services/redis.js.map +1 -0
  108. package/dist/services/rest_client.d.ts +48 -0
  109. package/dist/services/rest_client.js +96 -0
  110. package/dist/services/rest_client.js.map +1 -0
  111. package/dist/swagger/index.d.ts +223 -0
  112. package/dist/swagger/index.js +564 -0
  113. package/dist/swagger/index.js.map +1 -0
  114. package/dist/types/express.d.ts +14 -0
  115. package/dist/types/vendor.d.ts +102 -0
  116. package/dist/utils/api_scaffold.d.ts +74 -0
  117. package/dist/utils/api_scaffold.js +220 -0
  118. package/dist/utils/api_scaffold.js.map +1 -0
  119. package/dist/utils/case_converter.d.ts +7 -0
  120. package/dist/utils/case_converter.js +29 -0
  121. package/dist/utils/case_converter.js.map +1 -0
  122. package/dist/utils/crc32.d.ts +2 -0
  123. package/dist/utils/crc32.js +43 -0
  124. package/dist/utils/crc32.js.map +1 -0
  125. package/dist/utils/cron.d.ts +27 -0
  126. package/dist/utils/cron.js +186 -0
  127. package/dist/utils/cron.js.map +1 -0
  128. package/dist/utils/datetime.d.ts +4 -0
  129. package/dist/utils/datetime.js +6 -0
  130. package/dist/utils/datetime.js.map +1 -0
  131. package/dist/utils/host.d.ts +18 -0
  132. package/dist/utils/host.js +33 -0
  133. package/dist/utils/host.js.map +1 -0
  134. package/{src/utils/index.js → dist/utils/index.d.ts} +2 -26
  135. package/dist/utils/index.js +12 -0
  136. package/dist/utils/index.js.map +1 -0
  137. package/dist/utils/pagination.d.ts +150 -0
  138. package/dist/utils/pagination.js +242 -0
  139. package/dist/utils/pagination.js.map +1 -0
  140. package/dist/utils/random.d.ts +3 -0
  141. package/dist/utils/random.js +18 -0
  142. package/dist/utils/random.js.map +1 -0
  143. package/dist/utils/request_client.d.ts +33 -0
  144. package/dist/utils/request_client.js +153 -0
  145. package/dist/utils/request_client.js.map +1 -0
  146. package/dist/utils/smart_query.d.ts +144 -0
  147. package/dist/utils/smart_query.js +310 -0
  148. package/dist/utils/smart_query.js.map +1 -0
  149. package/dist/utils/test.d.ts +14 -0
  150. package/dist/utils/test.js +37 -0
  151. package/dist/utils/test.js.map +1 -0
  152. package/dist/utils/wrapper.d.ts +3 -0
  153. package/dist/utils/wrapper.js +5 -0
  154. package/dist/utils/wrapper.js.map +1 -0
  155. package/package.json +24 -10
  156. package/index.js +0 -2
  157. package/src/commands/interface.js +0 -45
  158. package/src/commands/make_entity.js +0 -490
  159. package/src/commands/tramp.js +0 -34
  160. package/src/config/index.js +0 -95
  161. package/src/di.js +0 -96
  162. package/src/engine.js +0 -556
  163. package/src/entities/index.js +0 -272
  164. package/src/exceptions/index.js +0 -501
  165. package/src/index.js +0 -55
  166. package/src/middlewares/auth.js +0 -67
  167. package/src/middlewares/auth_kong.js +0 -28
  168. package/src/middlewares/debug.js +0 -88
  169. package/src/middlewares/providers.js +0 -73
  170. package/src/middlewares/session.js +0 -63
  171. package/src/middlewares/trace.js +0 -254
  172. package/src/middlewares/validator.js +0 -50
  173. package/src/middlewares/view_cache.js +0 -127
  174. package/src/services/cache.js +0 -223
  175. package/src/services/config.js +0 -115
  176. package/src/services/env.js +0 -28
  177. package/src/services/event_manager.js +0 -84
  178. package/src/services/http_client.js +0 -69
  179. package/src/services/jwt_token.js +0 -89
  180. package/src/services/jwt_token_kong.js +0 -75
  181. package/src/services/logger.js +0 -150
  182. package/src/services/namespace.js +0 -176
  183. package/src/services/now.js +0 -49
  184. package/src/services/providers.js +0 -158
  185. package/src/services/redis.js +0 -63
  186. package/src/services/rest_client.js +0 -112
  187. package/src/swagger/index.js +0 -665
  188. package/src/utils/api_scaffold.js +0 -240
  189. package/src/utils/case_converter.js +0 -33
  190. package/src/utils/crc32.js +0 -44
  191. package/src/utils/cron.js +0 -208
  192. package/src/utils/datetime.js +0 -13
  193. package/src/utils/host.js +0 -39
  194. package/src/utils/pagination.js +0 -260
  195. package/src/utils/random.js +0 -23
  196. package/src/utils/request_client.js +0 -179
  197. package/src/utils/smart_query.js +0 -352
  198. package/src/utils/test.js +0 -48
  199. package/src/utils/wrapper.js +0 -8
@@ -1,352 +0,0 @@
1
- import moment from 'moment-timezone';
2
- import { Op } from 'sequelize';
3
- import { InvalidArgumentException } from '../exceptions/index.js';
4
-
5
- const OPERATORS = {
6
- $eq: Op.eq,
7
- $like: Op.like,
8
- $in: Op.in,
9
- $notIn: Op.notIn,
10
- $gte: Op.gte,
11
- $lte: Op.lte
12
- };
13
-
14
- /**
15
- * 自动根据 req.query 生成 sequelize 查询条件, 自动判断参数清单中是否有值
16
- */
17
- export default class SmartQuery {
18
- constructor(query) {
19
- this.query = query;
20
- /**
21
- * WHERE 查询条件
22
- * @type {{}}
23
- */
24
- this.where = {};
25
- /**'
26
- * 排序列表
27
- * @type {Array}
28
- */
29
- this.order = [];
30
- }
31
-
32
- /**
33
- * 当 query 中包含名为 paramName 的属性时,为 fieldName 添加全等查询条件
34
- * @param {String} paramName query 中的参数名称
35
- * @param {String} fieldName 对应的数据库字段名称,默认与 paramName 一致
36
- * @param {String} defaultValue 当 query 中不包含 paramName 或为空时,使用该值
37
- */
38
- equal(paramName, fieldName = paramName, defaultValue = null) {
39
- const value = this.determineParam(paramName) ? this.query[paramName] : defaultValue;
40
- if (value != null) {
41
- this.applyWhere(fieldName, '$eq', value);
42
- }
43
-
44
- return this;
45
- }
46
-
47
- /**
48
- * 当 query 中包含名为 paramName 的属性时,为 fieldName 添加 in 查询条件, 值可以为 `delimiter` 分割的字符串或者数组
49
- * @param {String} paramName query 中的参数名称
50
- * @param {String} [fieldName=paramName] 对应的数据库字段名称,默认与 paramName 一致
51
- * @param {String|Array} [defaultValue=null] 当 query 中不包含 paramName 或为空时,使用该值
52
- * @param {String} [delimiter=,] 当值为字符串时的分隔符,默认为 ,
53
- */
54
- in(paramName, fieldName = paramName, defaultValue = null, delimiter = ',') {
55
- return this.applyIn(paramName, fieldName, defaultValue, delimiter, false);
56
- }
57
-
58
- /**
59
- * 当 query 中包含名为 paramName 的属性时,为 fieldName 添加 not in 查询条件, 值可以为 `delimiter` 分割的字符串或者数组
60
- * @param {String} paramName query 中的参数名称
61
- * @param {String} [fieldName=paramName] 对应的数据库字段名称,默认与 paramName 一致
62
- * @param {String|Array} [defaultValue=null] 当 query 中不包含 paramName 或为空时,使用该值
63
- * @param {String} [delimiter=,] 当值为字符串时的分隔符,默认为 ,
64
- */
65
- notIn(paramName, fieldName = paramName, defaultValue = null, delimiter = ',') {
66
- return this.applyIn(paramName, fieldName, defaultValue, delimiter, true);
67
- }
68
-
69
- /**
70
- * 当 query 中包含名为 paramName 的属性时,为 fieldName 添加 LIKE 查询条件,并自动在值的头尾添加 %
71
- * @param {String} paramName query 中的参数名称
72
- * @param {String} fieldName 对应的数据库字段名称,默认与 paramName 一致
73
- * @param {String} defaultValue 当 query 中不包含 paramName 或为空时,使用该值
74
- */
75
- like(paramName, fieldName = paramName, defaultValue = null) {
76
- const value = this.determineParam(paramName) ? this.query[paramName] : defaultValue;
77
- if (value != null) {
78
- this.applyWhere(fieldName, '$like', `%${value}%`);
79
- }
80
-
81
- return this;
82
- }
83
-
84
- /**
85
- * 当 query 中包含名为 paramName 的属性时,为 fieldName 添加 LIKE 查询条件,并自动在值的尾部添加 %
86
- * @param {String} paramName query 中的参数名称
87
- * @param {String} fieldName 对应的数据库字段名称,默认与 paramName 一致
88
- * @param {String} defaultValue 当 query 中不包含 paramName 或为空时,使用该值
89
- */
90
- startsWith(paramName, fieldName = paramName, defaultValue = null) {
91
- const value = this.determineParam(paramName) ? this.query[paramName] : defaultValue;
92
- if (value != null) {
93
- this.applyWhere(fieldName, '$like', `${value}%`);
94
- }
95
-
96
- return this;
97
- }
98
-
99
- /**
100
- * 当 query 中包含名为 paramName 的属性时,为 fieldName 添加 LIKE 查询条件,并自动在值的头部添加 %
101
- * @param {String} paramName query 中的参数名称
102
- * @param {String} fieldName 对应的数据库字段名称,默认与 paramName 一致
103
- * @param {String} defaultValue 当 query 中不包含 paramName 或为空时,使用该值
104
- */
105
- endsWith(paramName, fieldName = paramName, defaultValue = null) {
106
- const value = this.determineParam(paramName) ? this.query[paramName] : defaultValue;
107
- if (value != null) {
108
- this.applyWhere(fieldName, '$like', `%${value}`);
109
- }
110
-
111
- return this;
112
- }
113
-
114
- /**
115
- * 当 query 中包含名为 paramName 的属性时,为 fieldName 添加 >= 查询条件
116
- * @param {String} paramName query 中的参数名称
117
- * @param {String} fieldName 对应的数据库字段名称,默认与 paramName 一致
118
- * @param {String} defaultValue 当 query 中不包含 paramName 或为空时,使用该值
119
- */
120
- gte(paramName, fieldName = paramName, defaultValue = null) {
121
- const value = this.determineParam(paramName) ? this.query[paramName] : defaultValue;
122
- if (value != null) {
123
- this.applyWhere(fieldName, '$gte', value);
124
- }
125
-
126
- return this;
127
- }
128
-
129
- /**
130
- * 当 query 中包含名为 paramName 的属性时,为 fieldName 添加 <= 查询条件
131
- * @param {String} paramName query 中的参数名称
132
- * @param {String} fieldName 对应的数据库字段名称,默认与 paramName 一致
133
- * @param {String} defaultValue 当 query 中不包含 paramName 或为空时,使用该值
134
- */
135
- lte(paramName, fieldName = paramName, defaultValue = null) {
136
- const value = this.determineParam(paramName) ? this.query[paramName] : defaultValue;
137
- if (value != null) {
138
- this.applyWhere(fieldName, '$lte', value);
139
- }
140
-
141
- return this;
142
- }
143
-
144
- /**
145
- * 当 query 中包含名为 minParamName 的属性时,为 fieldName 添加 >= 查询条件,
146
- * 当 query 中包含名为 maxParamName 的属性时,为 fieldName 添加 <= 查询条件
147
- * @param {String} minParamName query 中的最小值参数名称
148
- * @param {String} maxParamName query 中的最大值参数名称
149
- * @param {String} fieldName 对应的数据库字段名称
150
- * @param {String} minDefault 当 query 中不包含 minParamName 或为空时,使用该值作为默认值
151
- * @param {String} maxDefault 当 query 中不包含 maxParamName 或为空时,使用该值作为默认值
152
- */
153
- range(minParamName, maxParamName, fieldName, minDefault = null, maxDefault = null) {
154
- const min = this.determineParam(minParamName) ? this.query[minParamName] : minDefault;
155
- const max = this.determineParam(maxParamName) ? this.query[maxParamName] : maxDefault;
156
- if (min != null) {
157
- this.applyWhere(fieldName, '$gte', min);
158
- }
159
- if (max != null) {
160
- this.applyWhere(fieldName, '$lte', max);
161
- }
162
- return this;
163
- }
164
-
165
- /**
166
- * 当 query 中包含名为 minParamName 的属性时,为 fieldName 添加 >= 查询条件并将时分秒设为0格式化到 targetFormat ,
167
- * 当 query 中包含名为 maxParamName 的属性时,为 fieldName 添加 <= 查询条件并将时分秒分别设为 23:59:59 后格式化到 targetFormat
168
- * @param {String} minParamName query 中的最小值参数名称
169
- * @param {String} maxParamName query 中的最大值参数名称
170
- * @param {String} fieldName 对应的数据库字段名称
171
- * @param {String} [minDefault=null] 当 query 中不包含 minParamName 或为空时,使用该值作为默认值
172
- * @param {String} [maxDefault=null] 当 query 中不包含 maxParamName 或为空时,使用该值作为默认值
173
- * @param {String} [sourceFormat='YYYY-MM-DD'] 原值时间格式
174
- * @param {String } [targetFormat='X'] 数据库时间格式
175
- */
176
- dateRange(minParamName, maxParamName, fieldName, minDefault = null, maxDefault = null, sourceFormat = 'YYYY-MM-DD', targetFormat = 'X') {
177
- let min = this.determineParam(minParamName)
178
- ? this.query[minParamName]
179
- : null;
180
- min = min != null && moment(min, sourceFormat).isValid()
181
- ? moment(min, sourceFormat)
182
- : moment(minDefault, sourceFormat);
183
- let max = this.determineParam(maxParamName) ? this.query[maxParamName] : null;
184
- max = max != null && moment(max, sourceFormat).isValid()
185
- ? moment(max, sourceFormat)
186
- : moment(maxDefault, sourceFormat);
187
-
188
- if (min.isValid()) {
189
- min = min.hours(0).minutes(0).seconds(0).format(targetFormat);
190
- this.applyWhere(fieldName, '$gte', min);
191
- }
192
- if (max.isValid()) {
193
- max = max.hours(23).minutes(59).seconds(59).format(targetFormat);
194
- this.applyWhere(fieldName, '$lte', max);
195
- }
196
-
197
- return this;
198
- }
199
-
200
- /**
201
- * 当 query 中包含名为 minParamName 的属性时,为 fieldName 添加 >= 查询条件并格式化到 targetFormat ,
202
- * 当 query 中包含名为 maxParamName 的属性时,为 fieldName 添加 <= 查询条件并并格式化到 targetFormat
203
- * @param {String} minParamName query 中的最小值参数名称
204
- * @param {String} maxParamName query 中的最大值参数名称
205
- * @param {String} fieldName 对应的数据库字段名称
206
- * @param {String} [minDefault=null] 当 query 中不包含 minParamName 或为空时,使用该值作为默认值
207
- * @param {String} [maxDefault=null] 当 query 中不包含 maxParamName 或为空时,使用该值作为默认值
208
- * @param {String} [sourceFormat='YYYY-MM-DD'] 原值时间格式
209
- * @param {String } [targetFormat='X'] 数据库时间格式
210
- */
211
- dateTimeRange(minParamName, maxParamName, fieldName, minDefault = null, maxDefault = null, sourceFormat = 'YYYY-MM-DD HH:mm:ss', targetFormat = 'X') {
212
- let min = this.determineParam(minParamName)
213
- ? this.query[minParamName]
214
- : null;
215
- min = min != null && moment(min, sourceFormat).isValid()
216
- ? moment(min, sourceFormat)
217
- : moment(minDefault, sourceFormat);
218
- let max = this.determineParam(maxParamName) ? this.query[maxParamName] : null;
219
- max = max != null && moment(max, sourceFormat).isValid()
220
- ? moment(max, sourceFormat)
221
- : moment(maxDefault, sourceFormat);
222
-
223
- if (min.isValid()) {
224
- min = min.format(targetFormat);
225
- this.applyWhere(fieldName, '$gte', min);
226
- }
227
- if (max.isValid()) {
228
- max = max.format(targetFormat);
229
- this.applyWhere(fieldName, '$lte', max);
230
- }
231
-
232
- return this;
233
- }
234
-
235
- /**
236
- * 处理用户的排序请求
237
- * @param {Array} [autoMapping=[]] 根据字段名自动排序,数组成员为字段名,每个字段名自动生成正反序,
238
- * 如 `created_at` 生成 `created_at` 正序和 `-created_at` 倒序
239
- * @param {Object} [manualMapping={}]
240
- * @param [defaultOrder=null] 默认排序,当 query 中不包含 `paramName` 属性时使用。如不设置则为 `autoMapping` 的第一个字段的倒序
241
- * @param {String} [paramName='sort'] 参数名称
242
- */
243
- orderable(autoMapping = [], manualMapping = {}, defaultOrder = null, paramName = 'order') {
244
- const ordersMapping = {};
245
- let conventionOrder = defaultOrder;
246
- if (autoMapping instanceof Array) {
247
- autoMapping.forEach((field) => {
248
- ordersMapping[`-${field}`] = [field, 'DESC'];
249
- ordersMapping[field] = [field, 'ASC'];
250
- });
251
- if (conventionOrder === null) {
252
- conventionOrder = [autoMapping[0], 'DESC'];
253
- }
254
- }
255
-
256
- Object.assign(ordersMapping, manualMapping);
257
-
258
- const order =
259
- this.determineParam(paramName) && Object.keys(ordersMapping).includes(this.query[paramName])
260
- ? ordersMapping[this.query[paramName]] : conventionOrder;
261
- if (order != null) {
262
- this.order = [order];
263
- }
264
-
265
- return this;
266
- }
267
-
268
- /**
269
- * 获取完整的有效查询参数
270
- * @returns {{}}
271
- */
272
- getCriteria() {
273
- const criteria = {};
274
- if (this.order instanceof Array && this.order.length > 0) {
275
- criteria.order = this.order;
276
- }
277
-
278
- if (Object.keys(this.where).length > 0) {
279
- criteria.where = this.where;
280
- }
281
-
282
- return criteria;
283
- }
284
-
285
- /**
286
- * 当 query 中包含名为 paramName 的属性时,为 fieldName 添加 in 或 not in 查询条件, 值可以为 `delimiter` 分割的字符串或者数组
287
- * @protected
288
- * @param {String} paramName query 中的参数名称
289
- * @param {String} fieldName 对应的数据库字段名称
290
- * @param {String|Array} [defaultValue=null] 当 query 中不包含 paramName 或为空时,使用该值
291
- * @param {String} [delimiter=,] 当值为字符串时的分隔符,默认为 ,
292
- * @param {Boolean} [negation=false] 是否取反,为 true 时使用 $notIn
293
- */
294
- applyIn(paramName, fieldName, defaultValue = null, delimiter = ',', negation = false) {
295
- let value = this.determineParam(paramName) ? this.query[paramName] : defaultValue;
296
- if (value === null) {
297
- return this;
298
- }
299
- if (typeof value === 'number') {
300
- value = String(value);
301
- }
302
- if (typeof value === 'string') {
303
- value = value.split(delimiter);
304
- } else if (value instanceof Array === false) {
305
- throw new InvalidArgumentException(`Value for contains must be typeof string or array, but \`${typeof value}\` given`);
306
- }
307
-
308
- this.applyWhere(fieldName, negation ? '$notIn' : '$in', value);
309
- return this;
310
- }
311
-
312
- /**
313
- * 添加 where
314
- *
315
- * @protected
316
- * @param filedName
317
- * @param predicate
318
- * @param value
319
- */
320
- applyWhere(filedName, predicate, value) {
321
- if (!Object.keys(this.where).includes(filedName)) {
322
- this.where[filedName] = {};
323
- }
324
- this.where[filedName][OPERATORS[predicate] || predicate] = value;
325
- }
326
-
327
- /**
328
- * 判定指定名称的参数是否有效
329
- *
330
- * @param paramName
331
- * @returns {boolean}
332
- */
333
- determineParam(paramName) {
334
- if (!Object.keys(this.query).includes(paramName)) {
335
- return false;
336
- }
337
- const value = this.query[paramName];
338
- if (value === null) {
339
- return false;
340
- }
341
- if (typeof value === 'string') {
342
- return value.trim() !== '';
343
- }
344
- if (value instanceof Array) {
345
- return value.length > 0;
346
- }
347
- if (value instanceof Object) {
348
- return Object.keys(value).length > 0;
349
- }
350
- return true;
351
- }
352
- }
package/src/utils/test.js DELETED
@@ -1,48 +0,0 @@
1
- import httpMocker from 'node-mocks-http';
2
- import EventEmitter from 'events';
3
- import DI from '../di.js';
4
-
5
- export const truncateAll = async (entities) => {
6
- const names = [];
7
- const allEntities = entities.getAll();
8
- Object.values(allEntities).forEach((entity) => {
9
- if (typeof entity.truncate === 'function' && entity.tableName) {
10
- names.push(`TRUNCATE \`${entity.tableName}\`;\n`);
11
- }
12
- });
13
- await entities.getInstance().query(names.join(''));
14
- };
15
-
16
- const mockResponse = () => httpMocker.createResponse({ eventEmitter: EventEmitter });
17
- export { mockResponse };
18
-
19
- export const mockRequest = (...args) => httpMocker.createRequest(...args);
20
-
21
- export const mockInstance = () =>
22
- new Proxy({}, {
23
- get: () =>
24
- () => {
25
- }
26
- });
27
-
28
- export const mockAuthRequest = (...args) => {
29
- const uid = DI.get('config').get('token.faker.uid');
30
- Object.assign(args[0], {
31
- auth: {
32
- uid
33
- }
34
- });
35
- return httpMocker.createRequest(...args);
36
- };
37
-
38
- export { httpMocker };
39
-
40
- export const runController =
41
- (controller, request, response = mockResponse()) =>
42
- new Promise((resolve, reject) => {
43
- response.on(
44
- 'end',
45
- () => resolve(JSON.parse(response._getData()))
46
- );
47
- controller.handle(request, response, err => reject(err));
48
- });
@@ -1,8 +0,0 @@
1
- const wrapper = fn =>
2
- (req, res, next) =>
3
- Promise
4
- .resolve(fn(req, res, next))
5
- .catch(next);
6
-
7
-
8
- export default wrapper;