oak-domain 4.0.1 → 4.0.2

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 (207) 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 -25
  5. package/lib/base-app-domain/ActionAuth/Schema.d.ts +186 -186
  6. package/lib/base-app-domain/ActionAuth/Storage.js +39 -39
  7. package/lib/base-app-domain/ActionDefDict.d.ts +8 -8
  8. package/lib/base-app-domain/ActionDefDict.js +9 -9
  9. package/lib/base-app-domain/EntityDict.d.ts +28 -28
  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 -384
  19. package/lib/base-app-domain/ModiEntity/Storage.js +30 -30
  20. package/lib/base-app-domain/Oper/Schema.d.ts +153 -153
  21. package/lib/base-app-domain/Oper/Storage.js +38 -38
  22. package/lib/base-app-domain/OperEntity/Schema.d.ts +373 -373
  23. package/lib/base-app-domain/OperEntity/Storage.js +30 -30
  24. package/lib/base-app-domain/Path/Schema.d.ts +149 -149
  25. package/lib/base-app-domain/Path/Schema.js +2 -2
  26. package/lib/base-app-domain/Path/Storage.d.ts +3 -3
  27. package/lib/base-app-domain/Path/Storage.js +54 -54
  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 -2
  31. package/lib/base-app-domain/Relation.js +4 -4
  32. package/lib/base-app-domain/RelationAuth/Schema.d.ts +214 -214
  33. package/lib/base-app-domain/RelationAuth/Storage.js +44 -44
  34. package/lib/base-app-domain/Storage.js +31 -31
  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 -210
  38. package/lib/base-app-domain/User/Storage.js +33 -33
  39. package/lib/base-app-domain/UserEntityClaim/Schema.d.ts +264 -264
  40. package/lib/base-app-domain/UserEntityClaim/Schema.js +2 -2
  41. package/lib/base-app-domain/UserEntityClaim/Storage.d.ts +3 -3
  42. package/lib/base-app-domain/UserEntityClaim/Storage.js +37 -37
  43. package/lib/base-app-domain/UserEntityGrant/Schema.d.ts +131 -131
  44. package/lib/base-app-domain/UserEntityGrant/Storage.js +25 -25
  45. package/lib/base-app-domain/UserRelation/Schema.d.ts +208 -208
  46. package/lib/base-app-domain/UserRelation/Storage.js +56 -56
  47. package/lib/base-app-domain/_SubQuery.d.ts +142 -142
  48. package/lib/base-app-domain/index.d.ts +4 -4
  49. package/lib/base-app-domain/index.js +7 -7
  50. package/lib/checkers/index.d.ts +5 -5
  51. package/lib/checkers/index.js +13 -13
  52. package/lib/compiler/entities.d.ts +2 -2
  53. package/lib/compiler/entities.js +7 -7
  54. package/lib/compiler/env.d.ts +13 -13
  55. package/lib/compiler/env.js +45 -45
  56. package/lib/compiler/localeBuilder.d.ts +27 -27
  57. package/lib/compiler/localeBuilder.js +37 -8
  58. package/lib/compiler/routerBuilder.d.ts +1 -0
  59. package/lib/compiler/routerBuilder.js +257 -0
  60. package/lib/compiler/schemalBuilder.d.ts +27 -27
  61. package/lib/compiler/schemalBuilder.js +3565 -3565
  62. package/lib/entities/ActionAuth.d.ts +10 -10
  63. package/lib/entities/ActionAuth.js +31 -31
  64. package/lib/entities/I18n.d.ts +9 -9
  65. package/lib/entities/I18n.js +36 -36
  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 -8
  71. package/lib/entities/Path.js +35 -35
  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 -13
  78. package/lib/entities/UserEntityClaim.js +17 -17
  79. package/lib/entities/UserEntityGrant.d.ts +9 -9
  80. package/lib/entities/UserEntityGrant.js +15 -15
  81. package/lib/entities/UserRelation.d.ts +10 -10
  82. package/lib/entities/UserRelation.js +38 -38
  83. package/lib/index.d.ts +23 -23
  84. package/lib/index.js +37 -37
  85. package/lib/store/AsyncRowStore.d.ts +65 -65
  86. package/lib/store/AsyncRowStore.js +176 -176
  87. package/lib/store/CascadeStore.d.ts +4 -1
  88. package/lib/store/CascadeStore.js +9 -1
  89. package/lib/store/RelationAuth.d.ts +96 -96
  90. package/lib/store/RelationAuth.js +1336 -1336
  91. package/lib/store/SyncRowStore.d.ts +29 -29
  92. package/lib/store/SyncRowStore.js +50 -50
  93. package/lib/store/TriggerExecutor.d.ts +41 -41
  94. package/lib/store/TriggerExecutor.js +1 -1
  95. package/lib/store/actionAuth.d.ts +4 -4
  96. package/lib/store/actionAuth.js +25 -25
  97. package/lib/store/actionDef.d.ts +10 -10
  98. package/lib/store/actionDef.js +4 -4
  99. package/lib/store/checker.d.ts +26 -26
  100. package/lib/store/checker.js +487 -487
  101. package/lib/store/filter.d.ts +85 -85
  102. package/lib/store/filter.js +1652 -1652
  103. package/lib/store/modi.d.ts +13 -13
  104. package/lib/store/modi.js +254 -254
  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 -57
  109. package/lib/timers/vaccum.d.ts +20 -20
  110. package/lib/timers/vaccum.js +111 -111
  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 -17
  115. package/lib/types/AppLoader.js +10 -10
  116. package/lib/types/Auth.d.ts +70 -70
  117. package/lib/types/Cluster.d.ts +5 -5
  118. package/lib/types/Cluster.js +2 -2
  119. package/lib/types/Connector.d.ts +38 -38
  120. package/lib/types/Connector.js +2 -2
  121. package/lib/types/DataType.d.ts +25 -25
  122. package/lib/types/DataType.js +6 -6
  123. package/lib/types/Demand.d.ts +89 -89
  124. package/lib/types/Demand.js +10 -10
  125. package/lib/types/Endpoint.d.ts +11 -11
  126. package/lib/types/Entity.d.ts +209 -209
  127. package/lib/types/Entity.js +15 -15
  128. package/lib/types/EntityDesc.d.ts +9 -9
  129. package/lib/types/EntityDesc.js +2 -2
  130. package/lib/types/Environment.d.ts +90 -90
  131. package/lib/types/Environment.js +2 -2
  132. package/lib/types/Exception.d.ts +147 -147
  133. package/lib/types/Exception.js +406 -406
  134. package/lib/types/Expression.d.ts +163 -163
  135. package/lib/types/Expression.js +397 -397
  136. package/lib/types/Geo.d.ts +18 -18
  137. package/lib/types/Locale.d.ts +25 -25
  138. package/lib/types/Logger.d.ts +6 -6
  139. package/lib/types/Polyfill.d.ts +24 -24
  140. package/lib/types/Port.d.ts +18 -18
  141. package/lib/types/RowStore.d.ts +19 -19
  142. package/lib/types/RowStore.js +33 -33
  143. package/lib/types/Storage.d.ts +58 -58
  144. package/lib/types/Style.d.ts +11 -11
  145. package/lib/types/Timer.d.ts +20 -20
  146. package/lib/types/Trigger.d.ts +118 -118
  147. package/lib/types/Trigger.js +35 -35
  148. package/lib/types/Watcher.d.ts +19 -19
  149. package/lib/types/index.d.ts +26 -26
  150. package/lib/types/index.js +29 -29
  151. package/lib/types/schema/DataTypes.d.ts +34 -34
  152. package/lib/utils/SimpleConnector.d.ts +64 -64
  153. package/lib/utils/SimpleConnector.js +1 -1
  154. package/lib/utils/assert.d.ts +1 -0
  155. package/lib/utils/assert.js +9 -9
  156. package/lib/utils/concurrent.d.ts +15 -15
  157. package/lib/utils/concurrent.js +63 -63
  158. package/lib/utils/date.js +18 -18
  159. package/lib/utils/domain.d.ts +1 -1
  160. package/lib/utils/domain.js +11 -11
  161. package/lib/utils/geo.js +24 -24
  162. package/lib/utils/lodash.d.ts +24 -24
  163. package/lib/utils/lodash.js +46 -46
  164. package/lib/utils/mask.js +34 -34
  165. package/lib/utils/money.d.ts +6 -6
  166. package/lib/utils/money.js +51 -51
  167. package/lib/utils/projection.d.ts +4 -4
  168. package/lib/utils/projection.js +15 -15
  169. package/lib/utils/random/random.js +19 -19
  170. package/lib/utils/random/random.mp.js +14 -14
  171. package/lib/utils/random/random.native.d.ts +1 -1
  172. package/lib/utils/random/random.native.js +14 -14
  173. package/lib/utils/random/random.web.js +11 -11
  174. package/lib/utils/string.d.ts +28 -28
  175. package/lib/utils/string.js +69 -69
  176. package/lib/utils/url/index.d.ts +7 -7
  177. package/lib/utils/url/index.js +8 -8
  178. package/lib/utils/url/index.mp.d.ts +3 -3
  179. package/lib/utils/url/index.mp.js +8 -8
  180. package/lib/utils/url/index.native.d.ts +12 -12
  181. package/lib/utils/url/index.native.js +7 -7
  182. package/lib/utils/url/index.web.d.ts +12 -12
  183. package/lib/utils/url/index.web.js +7 -7
  184. package/lib/utils/url/whatwg-url/index.d.ts +3 -3
  185. package/lib/utils/url/whatwg-url/index.js +16 -16
  186. package/lib/utils/url/whatwg-url/lib/URL-impl.d.ts +20 -20
  187. package/lib/utils/url/whatwg-url/lib/URL-impl.js +175 -175
  188. package/lib/utils/url/whatwg-url/lib/URL.d.ts +1 -1
  189. package/lib/utils/url/whatwg-url/lib/URL.js +298 -298
  190. package/lib/utils/url/whatwg-url/lib/URLSearchParams-impl.d.ts +19 -19
  191. package/lib/utils/url/whatwg-url/lib/URLSearchParams-impl.js +126 -126
  192. package/lib/utils/url/whatwg-url/lib/URLSearchParams.d.ts +1 -1
  193. package/lib/utils/url/whatwg-url/lib/URLSearchParams.js +426 -426
  194. package/lib/utils/url/whatwg-url/lib/infra.d.ts +12 -12
  195. package/lib/utils/url/whatwg-url/lib/infra.js +25 -25
  196. package/lib/utils/url/whatwg-url/lib/url-state-machine.d.ts +24 -24
  197. package/lib/utils/url/whatwg-url/lib/url-state-machine.js +1238 -1238
  198. package/lib/utils/url/whatwg-url/lib/urlencoded.d.ts +15 -15
  199. package/lib/utils/url/whatwg-url/lib/urlencoded.js +162 -162
  200. package/lib/utils/url/whatwg-url/lib/utils.d.ts +37 -37
  201. package/lib/utils/url/whatwg-url/lib/utils.js +101 -101
  202. package/lib/utils/uuid.d.ts +17 -17
  203. package/lib/utils/uuid.js +218 -218
  204. package/lib/utils/validator.d.ts +26 -26
  205. package/lib/utils/validator.js +131 -131
  206. package/lib/utils/version.js +21 -21
  207. package/package.json +2 -1
@@ -1,397 +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
- 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;
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;