oak-domain 3.0.3 → 4.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 (203) hide show
  1. package/lib/actions/action.d.ts +16 -16
  2. package/lib/actions/action.js +17 -17
  3. package/lib/actions/relation.d.ts +5 -5
  4. package/lib/actions/relation.js +25 -38
  5. package/lib/base-app-domain/ActionAuth/Schema.d.ts +186 -160
  6. package/lib/base-app-domain/ActionAuth/Storage.js +39 -42
  7. package/lib/base-app-domain/ActionDefDict.d.ts +8 -9
  8. package/lib/base-app-domain/ActionDefDict.js +9 -11
  9. package/lib/base-app-domain/EntityDict.d.ts +28 -24
  10. package/lib/base-app-domain/I18n/Schema.d.ts +129 -129
  11. package/lib/base-app-domain/I18n/Schema.js +2 -2
  12. package/lib/base-app-domain/I18n/Storage.d.ts +3 -3
  13. package/lib/base-app-domain/I18n/Storage.js +59 -59
  14. package/lib/base-app-domain/Modi/Action.d.ts +10 -10
  15. package/lib/base-app-domain/Modi/Action.js +14 -14
  16. package/lib/base-app-domain/Modi/Schema.d.ts +136 -136
  17. package/lib/base-app-domain/Modi/Storage.js +63 -63
  18. package/lib/base-app-domain/ModiEntity/Schema.d.ts +384 -311
  19. package/lib/base-app-domain/ModiEntity/Storage.js +30 -30
  20. package/lib/base-app-domain/Oper/Schema.d.ts +153 -152
  21. package/lib/base-app-domain/Oper/Storage.js +38 -38
  22. package/lib/base-app-domain/OperEntity/Schema.d.ts +373 -300
  23. package/lib/base-app-domain/OperEntity/Storage.js +30 -30
  24. package/lib/base-app-domain/Path/Schema.d.ts +149 -0
  25. package/lib/base-app-domain/Path/Schema.js +2 -0
  26. package/lib/base-app-domain/Path/Storage.d.ts +3 -0
  27. package/lib/base-app-domain/Path/Storage.js +54 -0
  28. package/lib/base-app-domain/Relation/Schema.d.ts +188 -188
  29. package/lib/base-app-domain/Relation/Storage.js +54 -54
  30. package/lib/base-app-domain/Relation.d.ts +2 -10
  31. package/lib/base-app-domain/Relation.js +4 -10
  32. package/lib/base-app-domain/RelationAuth/Schema.d.ts +214 -180
  33. package/lib/base-app-domain/RelationAuth/Storage.js +44 -46
  34. package/lib/base-app-domain/Storage.js +31 -27
  35. package/lib/base-app-domain/User/Action.d.ts +10 -10
  36. package/lib/base-app-domain/User/Action.js +12 -12
  37. package/lib/base-app-domain/User/Schema.d.ts +210 -197
  38. package/lib/base-app-domain/User/Storage.js +33 -33
  39. package/lib/base-app-domain/UserEntityClaim/Schema.d.ts +264 -0
  40. package/lib/base-app-domain/UserEntityClaim/Schema.js +2 -0
  41. package/lib/base-app-domain/UserEntityClaim/Storage.d.ts +3 -0
  42. package/lib/base-app-domain/UserEntityClaim/Storage.js +37 -0
  43. package/lib/base-app-domain/UserEntityGrant/Action.d.ts +5 -5
  44. package/lib/base-app-domain/UserEntityGrant/Action.js +5 -5
  45. package/lib/base-app-domain/UserEntityGrant/Schema.d.ts +131 -157
  46. package/lib/base-app-domain/UserEntityGrant/Storage.js +25 -29
  47. package/lib/base-app-domain/UserRelation/Schema.d.ts +208 -194
  48. package/lib/base-app-domain/UserRelation/Storage.js +56 -56
  49. package/lib/base-app-domain/_SubQuery.d.ts +142 -112
  50. package/lib/base-app-domain/index.d.ts +4 -4
  51. package/lib/base-app-domain/index.js +7 -7
  52. package/lib/checkers/index.d.ts +5 -5
  53. package/lib/checkers/index.js +13 -14
  54. package/lib/compiler/entities.d.ts +2 -0
  55. package/lib/compiler/entities.js +7 -0
  56. package/lib/compiler/env.d.ts +13 -14
  57. package/lib/compiler/env.js +45 -50
  58. package/lib/compiler/localeBuilder.d.ts +27 -22
  59. package/lib/compiler/localeBuilder.js +184 -169
  60. package/lib/compiler/schemalBuilder.d.ts +27 -11
  61. package/lib/compiler/schemalBuilder.js +3569 -3787
  62. package/lib/entities/ActionAuth.d.ts +10 -12
  63. package/lib/entities/ActionAuth.js +31 -29
  64. package/lib/entities/I18n.d.ts +9 -9
  65. package/lib/entities/I18n.js +36 -37
  66. package/lib/entities/Modi.js +49 -49
  67. package/lib/entities/ModiEntity.js +18 -18
  68. package/lib/entities/Oper.js +21 -21
  69. package/lib/entities/OperEntity.js +18 -18
  70. package/lib/entities/Path.d.ts +8 -0
  71. package/lib/entities/Path.js +35 -0
  72. package/lib/entities/Relation.d.ts +8 -8
  73. package/lib/entities/Relation.js +35 -35
  74. package/lib/entities/RelationAuth.d.ts +8 -8
  75. package/lib/entities/RelationAuth.js +34 -34
  76. package/lib/entities/User.js +31 -31
  77. package/lib/entities/UserEntityClaim.d.ts +13 -0
  78. package/lib/entities/UserEntityClaim.js +17 -0
  79. package/lib/entities/UserEntityGrant.d.ts +9 -8
  80. package/lib/entities/UserEntityGrant.js +15 -18
  81. package/lib/entities/UserRelation.d.ts +10 -10
  82. package/lib/entities/UserRelation.js +38 -38
  83. package/lib/index.d.ts +23 -0
  84. package/lib/index.js +37 -0
  85. package/lib/store/AsyncRowStore.d.ts +60 -58
  86. package/lib/store/AsyncRowStore.js +118 -190
  87. package/lib/store/CascadeStore.d.ts +104 -103
  88. package/lib/store/CascadeStore.js +1688 -2036
  89. package/lib/store/RelationAuth.d.ts +96 -103
  90. package/lib/store/RelationAuth.js +1336 -1492
  91. package/lib/store/SyncRowStore.d.ts +29 -29
  92. package/lib/store/SyncRowStore.js +50 -49
  93. package/lib/store/TriggerExecutor.d.ts +38 -31
  94. package/lib/store/TriggerExecutor.js +459 -532
  95. package/lib/store/actionAuth.d.ts +4 -4
  96. package/lib/store/actionAuth.js +25 -40
  97. package/lib/store/actionDef.d.ts +10 -10
  98. package/lib/store/actionDef.js +278 -353
  99. package/lib/store/checker.d.ts +26 -26
  100. package/lib/store/checker.js +487 -623
  101. package/lib/store/filter.d.ts +85 -123
  102. package/lib/store/filter.js +1651 -1761
  103. package/lib/store/modi.d.ts +13 -13
  104. package/lib/store/modi.js +254 -315
  105. package/lib/store/relation.d.ts +12 -12
  106. package/lib/store/relation.js +67 -67
  107. package/lib/timers/oper.d.ts +18 -18
  108. package/lib/timers/oper.js +57 -60
  109. package/lib/timers/vaccum.d.ts +20 -20
  110. package/lib/timers/vaccum.js +111 -176
  111. package/lib/triggers/index.d.ts +5 -5
  112. package/lib/triggers/index.js +8 -8
  113. package/lib/types/Action.d.ts +20 -20
  114. package/lib/types/AppLoader.d.ts +17 -11
  115. package/lib/types/AppLoader.js +10 -10
  116. package/lib/types/Aspect.d.ts +1 -3
  117. package/lib/types/Auth.d.ts +70 -74
  118. package/lib/types/Cluster.d.ts +5 -0
  119. package/lib/types/Cluster.js +2 -0
  120. package/lib/types/Connector.d.ts +38 -34
  121. package/lib/types/Connector.js +2 -9
  122. package/lib/types/DataType.d.ts +25 -24
  123. package/lib/types/DataType.js +6 -6
  124. package/lib/types/Demand.d.ts +88 -88
  125. package/lib/types/Demand.js +10 -10
  126. package/lib/types/Endpoint.d.ts +11 -11
  127. package/lib/types/Entity.d.ts +203 -198
  128. package/lib/types/Entity.js +15 -15
  129. package/lib/types/EntityDesc.d.ts +9 -8
  130. package/lib/types/EntityDesc.js +2 -2
  131. package/lib/types/Environment.d.ts +88 -57
  132. package/lib/types/Environment.js +2 -2
  133. package/lib/types/Exception.d.ts +147 -120
  134. package/lib/types/Exception.js +406 -406
  135. package/lib/types/Expression.d.ts +163 -163
  136. package/lib/types/Expression.js +397 -427
  137. package/lib/types/Geo.d.ts +18 -18
  138. package/lib/types/Locale.d.ts +25 -25
  139. package/lib/types/Logger.d.ts +6 -6
  140. package/lib/types/Polyfill.d.ts +24 -24
  141. package/lib/types/Port.d.ts +18 -18
  142. package/lib/types/RowStore.d.ts +18 -18
  143. package/lib/types/RowStore.js +33 -34
  144. package/lib/types/Storage.d.ts +58 -57
  145. package/lib/types/Style.d.ts +11 -11
  146. package/lib/types/Timer.d.ts +14 -14
  147. package/lib/types/Trigger.d.ts +124 -108
  148. package/lib/types/Trigger.js +58 -54
  149. package/lib/types/Watcher.d.ts +19 -19
  150. package/lib/types/index.d.ts +26 -24
  151. package/lib/types/index.js +29 -27
  152. package/lib/types/schema/DataTypes.d.ts +34 -34
  153. package/lib/utils/SimpleConnector.d.ts +64 -50
  154. package/lib/utils/SimpleConnector.js +206 -184
  155. package/lib/utils/assert.d.ts +5 -5
  156. package/lib/utils/assert.js +9 -9
  157. package/lib/utils/concurrent.d.ts +15 -15
  158. package/lib/utils/concurrent.js +63 -89
  159. package/lib/utils/date.js +18 -18
  160. package/lib/utils/{url.d.ts → domain.d.ts} +1 -1
  161. package/lib/utils/{url.js → domain.js} +11 -12
  162. package/lib/utils/geo.js +24 -24
  163. package/lib/utils/lodash.d.ts +24 -20
  164. package/lib/utils/lodash.js +46 -55
  165. package/lib/utils/mask.js +34 -35
  166. package/lib/utils/money.d.ts +6 -6
  167. package/lib/utils/money.js +51 -40
  168. package/lib/utils/projection.d.ts +4 -0
  169. package/lib/utils/projection.js +15 -0
  170. package/lib/utils/random/random.js +19 -24
  171. package/lib/utils/random/random.mp.js +14 -25
  172. package/lib/utils/random/random.native.d.ts +1 -0
  173. package/lib/utils/random/random.native.js +14 -0
  174. package/lib/utils/random/random.web.js +11 -17
  175. package/lib/utils/string.d.ts +28 -28
  176. package/lib/utils/string.js +69 -82
  177. package/lib/utils/url/index.d.ts +7 -0
  178. package/lib/utils/url/index.js +8 -0
  179. package/lib/utils/url/index.mp.d.ts +4 -0
  180. package/lib/utils/url/index.mp.js +8 -0
  181. package/lib/utils/url/index.native.d.ts +12 -0
  182. package/lib/utils/url/index.native.js +7 -0
  183. package/lib/utils/url/index.web.d.ts +12 -0
  184. package/lib/utils/url/index.web.js +7 -0
  185. package/lib/utils/uuid.d.ts +17 -17
  186. package/lib/utils/uuid.js +218 -257
  187. package/lib/utils/validator.d.ts +26 -25
  188. package/lib/utils/validator.js +131 -128
  189. package/lib/utils/version.js +21 -21
  190. package/package.json +51 -49
  191. package/src/entities/ActionAuth.ts +41 -41
  192. package/src/entities/I18n.ts +45 -46
  193. package/src/entities/Modi.ts +69 -69
  194. package/src/entities/ModiEntity.ts +26 -26
  195. package/src/entities/Oper.ts +32 -32
  196. package/src/entities/OperEntity.ts +27 -27
  197. package/src/entities/Path.ts +43 -0
  198. package/src/entities/Relation.ts +43 -43
  199. package/src/entities/RelationAuth.ts +44 -43
  200. package/src/entities/User.ts +48 -48
  201. package/src/entities/UserEntityClaim.ts +30 -0
  202. package/src/entities/UserEntityGrant.ts +24 -27
  203. package/src/entities/UserRelation.ts +50 -50
@@ -1,427 +1,397 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getAttrRefInExpression = exports.execOp = exports.opMultipleParams = exports.isExpression = exports.isAggrExpression = exports.isStringExpression = exports.isMathExpression = exports.isCompareExpression = exports.isBoolExpression = exports.isLogicExpression = exports.isDateExpression = exports.isGeoExpression = void 0;
4
- var tslib_1 = require("tslib");
5
- var assert_1 = tslib_1.__importDefault(require("assert"));
6
- var dayjs_1 = tslib_1.__importDefault(require("dayjs"));
7
- var weekOfYear_1 = tslib_1.__importDefault(require("dayjs/plugin/weekOfYear"));
8
- var dayOfYear_1 = tslib_1.__importDefault(require("dayjs/plugin/dayOfYear"));
9
- var geo_1 = require("../utils/geo");
10
- dayjs_1.default.extend(weekOfYear_1.default);
11
- dayjs_1.default.extend(dayOfYear_1.default);
12
- ;
13
- ;
14
- ;
15
- ;
16
- ;
17
- ;
18
- ;
19
- ;
20
- ;
21
- ;
22
- ;
23
- ;
24
- ;
25
- ;
26
- ;
27
- ;
28
- ;
29
- ;
30
- ;
31
- ;
32
- ;
33
- ;
34
- ;
35
- ;
36
- ;
37
- ;
38
- ;
39
- ;
40
- ;
41
- ;
42
- ;
43
- ;
44
- ;
45
- ;
46
- function isGeoExpression(expression) {
47
- if (Object.keys(expression).length == 1) {
48
- var op = Object.keys(expression)[0];
49
- if (['$contains', '$distance'].includes(op)) {
50
- return true;
51
- }
52
- }
53
- return false;
54
- }
55
- exports.isGeoExpression = isGeoExpression;
56
- function isDateExpression(expression) {
57
- if (Object.keys(expression).length == 1) {
58
- var op = Object.keys(expression)[0];
59
- if (['$year', '$month', '$weekday', '$weekOfYear', '$day', '$dayOfMonth',
60
- '$dayOfWeek', '$dayOfYear', '$dateDiff', '$dateCeil', '$dateFloor'].includes(op)) {
61
- return true;
62
- }
63
- }
64
- return false;
65
- }
66
- exports.isDateExpression = isDateExpression;
67
- function isLogicExpression(expression) {
68
- if (Object.keys(expression).length == 1) {
69
- var op = Object.keys(expression)[0];
70
- if (['$and', '$or', '$not'].includes(op)) {
71
- return true;
72
- }
73
- }
74
- return false;
75
- }
76
- exports.isLogicExpression = isLogicExpression;
77
- function isBoolExpression(expression) {
78
- if (Object.keys(expression).length == 1) {
79
- var op = Object.keys(expression)[0];
80
- if (['$true', '$false'].includes(op)) {
81
- return true;
82
- }
83
- }
84
- return false;
85
- }
86
- exports.isBoolExpression = isBoolExpression;
87
- function isCompareExpression(expression) {
88
- if (Object.keys(expression).length == 1) {
89
- var op = Object.keys(expression)[0];
90
- if (['$gt', '$lt', '$gte', '$lte', '$eq', '$ne',
91
- '$startsWith', '$endsWith', '$includes'].includes(op)) {
92
- return true;
93
- }
94
- }
95
- return false;
96
- }
97
- exports.isCompareExpression = isCompareExpression;
98
- function isMathExpression(expression) {
99
- if (Object.keys(expression).length == 1) {
100
- var op = Object.keys(expression)[0];
101
- if (['$add', '$subtract', '$multiply', '$divide', '$abs', '$pow',
102
- '$round', '$floor', '$ceil'].includes(op)) {
103
- return true;
104
- }
105
- }
106
- return false;
107
- }
108
- exports.isMathExpression = isMathExpression;
109
- function isStringExpression(expression) {
110
- if (Object.keys(expression).length == 1) {
111
- var op = Object.keys(expression)[0];
112
- if (['$concat'].includes(op)) {
113
- return true;
114
- }
115
- }
116
- return false;
117
- }
118
- exports.isStringExpression = isStringExpression;
119
- function isAggrExpression(expression) {
120
- if (Object.keys(expression).length == 1) {
121
- var op = Object.keys(expression)[0];
122
- if (['$$max', '$$min', '$$sum', '$$avg', '$$count'].includes(op)) {
123
- return true;
124
- }
125
- }
126
- return false;
127
- }
128
- exports.isAggrExpression = isAggrExpression;
129
- function isExpression(expression) {
130
- return typeof expression === 'object' && Object.keys(expression).length === 1 && Object.keys(expression)[0].startsWith('$');
131
- }
132
- exports.isExpression = isExpression;
133
- function opMultipleParams(op) {
134
- return !['$year', '$month', '$weekday', '$weekOfYear', '$day', '$dayOfMonth',
135
- '$dayOfWeek', '$dayOfYear', '$not', '$true', '$false', '$abs',
136
- '$round', '$floor', '$ceil', '$$max', '$$min', '$$sum', '$$avg', '$$count'].includes(op);
137
- }
138
- exports.opMultipleParams = opMultipleParams;
139
- function execOp(op, params, obscure) {
140
- var e_1, _a, e_2, _b;
141
- if (obscure && (params === undefined || params.includes(undefined))) {
142
- return true;
143
- }
144
- switch (op) {
145
- case '$gt': {
146
- return params[0] > params[1];
147
- }
148
- case '$lt': {
149
- return params[0] < params[1];
150
- }
151
- case '$gte': {
152
- return params[0] >= params[1];
153
- }
154
- case '$lte': {
155
- return params[0] <= params[1];
156
- }
157
- case '$eq': {
158
- return params[0] === params[1];
159
- }
160
- case '$ne': {
161
- return params[0] !== params[1];
162
- }
163
- case '$startsWith': {
164
- return params[0].startsWith(params[1]);
165
- }
166
- case '$endsWith': {
167
- return params[0].endsWith(params[1]);
168
- }
169
- case '$includes': {
170
- return params[0].includes(params[1]);
171
- }
172
- case '$add': {
173
- if (typeof params[0] === 'number') {
174
- var result_1 = 0;
175
- params.forEach(function (ele) { return result_1 += ele; });
176
- return result_1;
177
- }
178
- else {
179
- var result_2 = '';
180
- params.forEach(function (ele) { return result_2 += ele; });
181
- return result_2;
182
- }
183
- }
184
- case '$subtract': {
185
- return params[0] - params[1];
186
- }
187
- case '$multiply': {
188
- var result_3 = 1;
189
- params.forEach(function (ele) { return result_3 = result_3 * ele; });
190
- return result_3;
191
- }
192
- case '$divide': {
193
- return params[0] / params[1];
194
- }
195
- case '$abs': {
196
- return Math.abs(params);
197
- }
198
- case '$round': {
199
- return Math.round(params);
200
- }
201
- case '$ceil': {
202
- return Math.ceil(params);
203
- }
204
- case '$floor': {
205
- return Math.floor(params);
206
- }
207
- case '$round': {
208
- return Math.round(params);
209
- }
210
- case '$pow': {
211
- return Math.pow(params[0], params[1]);
212
- }
213
- case '$true': {
214
- return !!params;
215
- }
216
- case '$false':
217
- case '$not': {
218
- return !params;
219
- }
220
- case '$and': {
221
- try {
222
- for (var params_1 = tslib_1.__values(params), params_1_1 = params_1.next(); !params_1_1.done; params_1_1 = params_1.next()) {
223
- var p = params_1_1.value;
224
- if (!p) {
225
- return false;
226
- }
227
- }
228
- }
229
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
230
- finally {
231
- try {
232
- if (params_1_1 && !params_1_1.done && (_a = params_1.return)) _a.call(params_1);
233
- }
234
- finally { if (e_1) throw e_1.error; }
235
- }
236
- return true;
237
- }
238
- case '$or': {
239
- try {
240
- for (var params_2 = tslib_1.__values(params), params_2_1 = params_2.next(); !params_2_1.done; params_2_1 = params_2.next()) {
241
- var p = params_2_1.value;
242
- if (!!p) {
243
- return true;
244
- }
245
- }
246
- }
247
- catch (e_2_1) { e_2 = { error: e_2_1 }; }
248
- finally {
249
- try {
250
- if (params_2_1 && !params_2_1.done && (_b = params_2.return)) _b.call(params_2);
251
- }
252
- finally { if (e_2) throw e_2.error; }
253
- }
254
- return false;
255
- }
256
- case '$year': {
257
- var value = (0, dayjs_1.default)(params);
258
- return value.year();
259
- }
260
- case '$month': {
261
- var value = (0, dayjs_1.default)(params);
262
- return value.month();
263
- }
264
- case '$weekday': {
265
- var value = (0, dayjs_1.default)(params);
266
- return value.day(); // 0~6
267
- }
268
- case '$weekOfYear': {
269
- var value = (0, dayjs_1.default)(params);
270
- return value.week();
271
- }
272
- case '$day':
273
- case '$dayOfMonth': {
274
- var value = (0, dayjs_1.default)(params);
275
- return value.date();
276
- }
277
- case '$dayOfWeek': {
278
- var value = (0, dayjs_1.default)(params);
279
- return value.day(); // 0~6
280
- }
281
- case '$dayOfYear': {
282
- var value = (0, dayjs_1.default)(params);
283
- return value.dayOfYear(); // 0~6
284
- }
285
- case '$dateDiff': {
286
- var value1 = (0, dayjs_1.default)(params[0]);
287
- var value2 = (0, dayjs_1.default)(params[1]);
288
- switch (params[2]) {
289
- case 'y':
290
- case 'M':
291
- case 'd':
292
- case 'h':
293
- case 'm':
294
- case 's': {
295
- return value1.diff(value2, params[2]);
296
- }
297
- default: {
298
- (0, assert_1.default)(false);
299
- }
300
- }
301
- }
302
- case '$dateCeil': {
303
- var value = (0, dayjs_1.default)(params[0]);
304
- switch (params[1]) {
305
- case 'y': {
306
- return value.startOf('year').millisecond();
307
- }
308
- case 'M': {
309
- return value.startOf('month').millisecond();
310
- }
311
- case 'd': {
312
- return value.startOf('day').millisecond();
313
- }
314
- case 'h': {
315
- return value.startOf('hour').millisecond();
316
- }
317
- case 'm': {
318
- return value.startOf('minute').millisecond();
319
- }
320
- case 's': {
321
- return value.startOf('second').millisecond();
322
- }
323
- default: {
324
- (0, assert_1.default)(false);
325
- }
326
- }
327
- }
328
- case '$dateFloor': {
329
- var value = (0, dayjs_1.default)(params[0]);
330
- switch (params[1]) {
331
- case 'y': {
332
- return value.endOf('year').millisecond();
333
- }
334
- case 'M': {
335
- return value.endOf('month').millisecond();
336
- }
337
- case 'd': {
338
- return value.endOf('day').millisecond();
339
- }
340
- case 'h': {
341
- return value.endOf('hour').millisecond();
342
- }
343
- case 'm': {
344
- return value.endOf('minute').millisecond();
345
- }
346
- case 's': {
347
- return value.endOf('second').millisecond();
348
- }
349
- default: {
350
- (0, assert_1.default)(false);
351
- }
352
- }
353
- }
354
- case '$distance': {
355
- var _c = tslib_1.__read(params, 2), geo1 = _c[0], geo2 = _c[1];
356
- var type1 = geo1.type, coordinate1 = geo1.coordinate;
357
- var type2 = geo2.type, coordinate2 = geo2.coordinate;
358
- if (type1 !== 'point' || type2 !== 'point') {
359
- throw new Error('目前只支持point类型的距离运算');
360
- }
361
- return (0, geo_1.getDistanceBetweenPoints)(coordinate1[1], coordinate1[0], coordinate2[1], coordinate2[0]);
362
- }
363
- case '$contains': {
364
- throw new Error('$contains类型未实现');
365
- }
366
- case '$concat': {
367
- return params.join('');
368
- }
369
- default: {
370
- (0, assert_1.default)(false, "\u4E0D\u80FD\u8BC6\u522B\u7684expression\u8FD0\u7B97\u7B26\uFF1A".concat(op));
371
- }
372
- }
373
- }
374
- exports.execOp = execOp;
375
- /**
376
- * 检查一个表达式,并分析其涉及到的属性
377
- * @param expression
378
- * @returns {
379
- * '#current': [当前结点涉及的属性]
380
- * 'node-1': [node-1结点上涉及的属性]
381
- * }
382
- */
383
- function getAttrRefInExpression(expression) {
384
- var _a;
385
- var result = (_a = {},
386
- _a['#current'] = [],
387
- _a);
388
- var check = function (node) {
389
- var _a, e_3, _b;
390
- if (node['#attr']) {
391
- result['#current'].push(node['#attr']);
392
- }
393
- else if (node['#refAttr']) {
394
- if (result[node['#refId']]) {
395
- result[node['#refId']].push(node['#refAttr']);
396
- }
397
- else {
398
- Object.assign(result, (_a = {},
399
- _a[node['#refId']] = [node['#refAttr']],
400
- _a));
401
- }
402
- }
403
- else if (node instanceof Array) {
404
- try {
405
- for (var node_1 = tslib_1.__values(node), node_1_1 = node_1.next(); !node_1_1.done; node_1_1 = node_1.next()) {
406
- var subNode = node_1_1.value;
407
- check(subNode);
408
- }
409
- }
410
- catch (e_3_1) { e_3 = { error: e_3_1 }; }
411
- finally {
412
- try {
413
- if (node_1_1 && !node_1_1.done && (_b = node_1.return)) _b.call(node_1);
414
- }
415
- finally { if (e_3) throw e_3.error; }
416
- }
417
- }
418
- else if (typeof node === 'object') {
419
- for (var attr in node) {
420
- check(node[attr]);
421
- }
422
- }
423
- };
424
- check(expression);
425
- return result;
426
- }
427
- exports.getAttrRefInExpression = getAttrRefInExpression;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getAttrRefInExpression = exports.execOp = exports.opMultipleParams = exports.isExpression = exports.isAggrExpression = exports.isStringExpression = exports.isMathExpression = exports.isCompareExpression = exports.isBoolExpression = exports.isLogicExpression = exports.isDateExpression = exports.isGeoExpression = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const assert_1 = tslib_1.__importDefault(require("assert"));
6
+ const dayjs_1 = tslib_1.__importDefault(require("dayjs"));
7
+ const weekOfYear_1 = tslib_1.__importDefault(require("dayjs/plugin/weekOfYear"));
8
+ const dayOfYear_1 = tslib_1.__importDefault(require("dayjs/plugin/dayOfYear"));
9
+ const geo_1 = require("../utils/geo");
10
+ dayjs_1.default.extend(weekOfYear_1.default);
11
+ dayjs_1.default.extend(dayOfYear_1.default);
12
+ ;
13
+ ;
14
+ ;
15
+ ;
16
+ ;
17
+ ;
18
+ ;
19
+ ;
20
+ ;
21
+ ;
22
+ ;
23
+ ;
24
+ ;
25
+ ;
26
+ ;
27
+ ;
28
+ ;
29
+ ;
30
+ ;
31
+ ;
32
+ ;
33
+ ;
34
+ ;
35
+ ;
36
+ ;
37
+ ;
38
+ ;
39
+ ;
40
+ ;
41
+ ;
42
+ ;
43
+ ;
44
+ ;
45
+ ;
46
+ function isGeoExpression(expression) {
47
+ if (Object.keys(expression).length == 1) {
48
+ const op = Object.keys(expression)[0];
49
+ if (['$contains', '$distance'].includes(op)) {
50
+ return true;
51
+ }
52
+ }
53
+ return false;
54
+ }
55
+ exports.isGeoExpression = isGeoExpression;
56
+ function isDateExpression(expression) {
57
+ if (Object.keys(expression).length == 1) {
58
+ const op = Object.keys(expression)[0];
59
+ if (['$year', '$month', '$weekday', '$weekOfYear', '$day', '$dayOfMonth',
60
+ '$dayOfWeek', '$dayOfYear', '$dateDiff', '$dateCeil', '$dateFloor'].includes(op)) {
61
+ return true;
62
+ }
63
+ }
64
+ return false;
65
+ }
66
+ exports.isDateExpression = isDateExpression;
67
+ function isLogicExpression(expression) {
68
+ if (Object.keys(expression).length == 1) {
69
+ const op = Object.keys(expression)[0];
70
+ if (['$and', '$or', '$not'].includes(op)) {
71
+ return true;
72
+ }
73
+ }
74
+ return false;
75
+ }
76
+ exports.isLogicExpression = isLogicExpression;
77
+ function isBoolExpression(expression) {
78
+ if (Object.keys(expression).length == 1) {
79
+ const op = Object.keys(expression)[0];
80
+ if (['$true', '$false'].includes(op)) {
81
+ return true;
82
+ }
83
+ }
84
+ return false;
85
+ }
86
+ exports.isBoolExpression = isBoolExpression;
87
+ function isCompareExpression(expression) {
88
+ if (Object.keys(expression).length == 1) {
89
+ const op = Object.keys(expression)[0];
90
+ if (['$gt', '$lt', '$gte', '$lte', '$eq', '$ne',
91
+ '$startsWith', '$endsWith', '$includes'].includes(op)) {
92
+ return true;
93
+ }
94
+ }
95
+ return false;
96
+ }
97
+ exports.isCompareExpression = isCompareExpression;
98
+ function isMathExpression(expression) {
99
+ if (Object.keys(expression).length == 1) {
100
+ const op = Object.keys(expression)[0];
101
+ if (['$add', '$subtract', '$multiply', '$divide', '$abs', '$pow',
102
+ '$round', '$floor', '$ceil', '$mod'].includes(op)) {
103
+ return true;
104
+ }
105
+ }
106
+ return false;
107
+ }
108
+ exports.isMathExpression = isMathExpression;
109
+ function isStringExpression(expression) {
110
+ if (Object.keys(expression).length == 1) {
111
+ const op = Object.keys(expression)[0];
112
+ if (['$concat'].includes(op)) {
113
+ return true;
114
+ }
115
+ }
116
+ return false;
117
+ }
118
+ exports.isStringExpression = isStringExpression;
119
+ function isAggrExpression(expression) {
120
+ if (Object.keys(expression).length == 1) {
121
+ const op = Object.keys(expression)[0];
122
+ if (['$$max', '$$min', '$$sum', '$$avg', '$$count'].includes(op)) {
123
+ return true;
124
+ }
125
+ }
126
+ return false;
127
+ }
128
+ exports.isAggrExpression = isAggrExpression;
129
+ function isExpression(expression) {
130
+ return typeof expression === 'object' && Object.keys(expression).length === 1 && Object.keys(expression)[0].startsWith('$');
131
+ }
132
+ exports.isExpression = isExpression;
133
+ function opMultipleParams(op) {
134
+ return !['$year', '$month', '$weekday', '$weekOfYear', '$day', '$dayOfMonth',
135
+ '$dayOfWeek', '$dayOfYear', '$not', '$true', '$false', '$abs',
136
+ '$round', '$floor', '$ceil', '$$max', '$$min', '$$sum', '$$avg', '$$count'].includes(op);
137
+ }
138
+ exports.opMultipleParams = opMultipleParams;
139
+ function execOp(op, params, obscure) {
140
+ if (obscure && (params === undefined || params.includes(undefined))) {
141
+ return true;
142
+ }
143
+ switch (op) {
144
+ case '$gt': {
145
+ return params[0] > params[1];
146
+ }
147
+ case '$lt': {
148
+ return params[0] < params[1];
149
+ }
150
+ case '$gte': {
151
+ return params[0] >= params[1];
152
+ }
153
+ case '$lte': {
154
+ return params[0] <= params[1];
155
+ }
156
+ case '$eq': {
157
+ return params[0] === params[1];
158
+ }
159
+ case '$ne': {
160
+ return params[0] !== params[1];
161
+ }
162
+ case '$startsWith': {
163
+ return params[0].startsWith(params[1]);
164
+ }
165
+ case '$endsWith': {
166
+ return params[0].endsWith(params[1]);
167
+ }
168
+ case '$includes': {
169
+ return params[0].includes(params[1]);
170
+ }
171
+ case '$add': {
172
+ if (typeof params[0] === 'number') {
173
+ let result = 0;
174
+ params.forEach((ele) => result += ele);
175
+ return result;
176
+ }
177
+ else {
178
+ let result = '';
179
+ params.forEach((ele) => result += ele);
180
+ return result;
181
+ }
182
+ }
183
+ case '$subtract': {
184
+ return params[0] - params[1];
185
+ }
186
+ case '$multiply': {
187
+ let result = 1;
188
+ params.forEach((ele) => result = result * ele);
189
+ return result;
190
+ }
191
+ case '$divide': {
192
+ return params[0] / params[1];
193
+ }
194
+ case '$abs': {
195
+ return Math.abs(params);
196
+ }
197
+ case '$round': {
198
+ return Math.round(params);
199
+ }
200
+ case '$ceil': {
201
+ return Math.ceil(params);
202
+ }
203
+ case '$mod': {
204
+ return params[0] % params[1];
205
+ }
206
+ case '$floor': {
207
+ return Math.floor(params);
208
+ }
209
+ case '$round': {
210
+ return Math.round(params);
211
+ }
212
+ case '$pow': {
213
+ return Math.pow(params[0], params[1]);
214
+ }
215
+ case '$true': {
216
+ return !!params;
217
+ }
218
+ case '$false':
219
+ case '$not': {
220
+ return !params;
221
+ }
222
+ case '$and': {
223
+ for (const p of params) {
224
+ if (!p) {
225
+ return false;
226
+ }
227
+ }
228
+ return true;
229
+ }
230
+ case '$or': {
231
+ for (const p of params) {
232
+ if (!!p) {
233
+ return true;
234
+ }
235
+ }
236
+ return false;
237
+ }
238
+ case '$year': {
239
+ const value = (0, dayjs_1.default)(params);
240
+ return value.year();
241
+ }
242
+ case '$month': {
243
+ const value = (0, dayjs_1.default)(params);
244
+ return value.month();
245
+ }
246
+ case '$weekday': {
247
+ const value = (0, dayjs_1.default)(params);
248
+ return value.day(); // 0~6
249
+ }
250
+ case '$weekOfYear': {
251
+ const value = (0, dayjs_1.default)(params);
252
+ return value.week();
253
+ }
254
+ case '$day':
255
+ case '$dayOfMonth': {
256
+ const value = (0, dayjs_1.default)(params);
257
+ return value.date();
258
+ }
259
+ case '$dayOfWeek': {
260
+ const value = (0, dayjs_1.default)(params);
261
+ return value.day(); // 0~6
262
+ }
263
+ case '$dayOfYear': {
264
+ const value = (0, dayjs_1.default)(params);
265
+ return value.dayOfYear(); // 0~6
266
+ }
267
+ case '$dateDiff': {
268
+ const value1 = (0, dayjs_1.default)(params[0]);
269
+ const value2 = (0, dayjs_1.default)(params[1]);
270
+ switch (params[2]) {
271
+ case 'y':
272
+ case 'M':
273
+ case 'd':
274
+ case 'h':
275
+ case 'm':
276
+ case 's': {
277
+ return value1.diff(value2, params[2]);
278
+ }
279
+ default: {
280
+ (0, assert_1.default)(false);
281
+ }
282
+ }
283
+ }
284
+ case '$dateCeil': {
285
+ const value = (0, dayjs_1.default)(params[0]);
286
+ switch (params[1]) {
287
+ case 'y': {
288
+ return value.startOf('year').millisecond();
289
+ }
290
+ case 'M': {
291
+ return value.startOf('month').millisecond();
292
+ }
293
+ case 'd': {
294
+ return value.startOf('day').millisecond();
295
+ }
296
+ case 'h': {
297
+ return value.startOf('hour').millisecond();
298
+ }
299
+ case 'm': {
300
+ return value.startOf('minute').millisecond();
301
+ }
302
+ case 's': {
303
+ return value.startOf('second').millisecond();
304
+ }
305
+ default: {
306
+ (0, assert_1.default)(false);
307
+ }
308
+ }
309
+ }
310
+ case '$dateFloor': {
311
+ const value = (0, dayjs_1.default)(params[0]);
312
+ switch (params[1]) {
313
+ case 'y': {
314
+ return value.endOf('year').millisecond();
315
+ }
316
+ case 'M': {
317
+ return value.endOf('month').millisecond();
318
+ }
319
+ case 'd': {
320
+ return value.endOf('day').millisecond();
321
+ }
322
+ case 'h': {
323
+ return value.endOf('hour').millisecond();
324
+ }
325
+ case 'm': {
326
+ return value.endOf('minute').millisecond();
327
+ }
328
+ case 's': {
329
+ return value.endOf('second').millisecond();
330
+ }
331
+ default: {
332
+ (0, assert_1.default)(false);
333
+ }
334
+ }
335
+ }
336
+ case '$distance': {
337
+ const [geo1, geo2] = params;
338
+ const { type: type1, coordinate: coordinate1 } = geo1;
339
+ const { type: type2, coordinate: coordinate2 } = geo2;
340
+ if (type1 !== 'point' || type2 !== 'point') {
341
+ throw new Error('目前只支持point类型的距离运算');
342
+ }
343
+ return (0, geo_1.getDistanceBetweenPoints)(coordinate1[1], coordinate1[0], coordinate2[1], coordinate2[0]);
344
+ }
345
+ case '$contains': {
346
+ throw new Error('$contains类型未实现');
347
+ }
348
+ case '$concat': {
349
+ return params.join('');
350
+ }
351
+ default: {
352
+ (0, assert_1.default)(false, `不能识别的expression运算符:${op}`);
353
+ }
354
+ }
355
+ }
356
+ exports.execOp = execOp;
357
+ /**
358
+ * 检查一个表达式,并分析其涉及到的属性
359
+ * @param expression
360
+ * @returns {
361
+ * '#current': [当前结点涉及的属性]
362
+ * 'node-1': [node-1结点上涉及的属性]
363
+ * }
364
+ */
365
+ function getAttrRefInExpression(expression) {
366
+ const result = {
367
+ ['#current']: [],
368
+ };
369
+ const check = (node) => {
370
+ if (node['#attr']) {
371
+ result['#current'].push(node['#attr']);
372
+ }
373
+ else if (node['#refAttr']) {
374
+ if (result[node['#refId']]) {
375
+ result[node['#refId']].push(node['#refAttr']);
376
+ }
377
+ else {
378
+ Object.assign(result, {
379
+ [node['#refId']]: [node['#refAttr']],
380
+ });
381
+ }
382
+ }
383
+ else if (node instanceof Array) {
384
+ for (const subNode of node) {
385
+ check(subNode);
386
+ }
387
+ }
388
+ else if (typeof node === 'object') {
389
+ for (const attr in node) {
390
+ check(node[attr]);
391
+ }
392
+ }
393
+ };
394
+ check(expression);
395
+ return result;
396
+ }
397
+ exports.getAttrRefInExpression = getAttrRefInExpression;