oak-domain 3.0.1 → 3.0.3

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 (226) 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 +38 -38
  5. package/lib/base-app-domain/ActionAuth/Schema.d.ts +160 -160
  6. package/lib/base-app-domain/ActionAuth/Schema.js +2 -2
  7. package/lib/base-app-domain/ActionAuth/Storage.d.ts +3 -3
  8. package/lib/base-app-domain/ActionAuth/Storage.js +42 -42
  9. package/lib/base-app-domain/ActionDefDict.d.ts +9 -9
  10. package/lib/base-app-domain/ActionDefDict.js +11 -11
  11. package/lib/base-app-domain/EntityDict.d.ts +24 -24
  12. package/lib/base-app-domain/EntityDict.js +2 -2
  13. package/lib/base-app-domain/I18n/Schema.d.ts +129 -129
  14. package/lib/base-app-domain/I18n/Schema.js +2 -2
  15. package/lib/base-app-domain/I18n/Storage.d.ts +3 -3
  16. package/lib/base-app-domain/I18n/Storage.js +59 -59
  17. package/lib/base-app-domain/Modi/Action.d.ts +10 -10
  18. package/lib/base-app-domain/Modi/Action.js +14 -14
  19. package/lib/base-app-domain/Modi/Schema.d.ts +136 -136
  20. package/lib/base-app-domain/Modi/Schema.js +2 -2
  21. package/lib/base-app-domain/Modi/Storage.d.ts +3 -3
  22. package/lib/base-app-domain/Modi/Storage.js +63 -63
  23. package/lib/base-app-domain/ModiEntity/Schema.d.ts +311 -311
  24. package/lib/base-app-domain/ModiEntity/Schema.js +2 -2
  25. package/lib/base-app-domain/ModiEntity/Storage.d.ts +3 -3
  26. package/lib/base-app-domain/ModiEntity/Storage.js +30 -30
  27. package/lib/base-app-domain/Oper/Schema.d.ts +152 -152
  28. package/lib/base-app-domain/Oper/Schema.js +2 -2
  29. package/lib/base-app-domain/Oper/Storage.d.ts +3 -3
  30. package/lib/base-app-domain/Oper/Storage.js +38 -38
  31. package/lib/base-app-domain/OperEntity/Schema.d.ts +300 -300
  32. package/lib/base-app-domain/OperEntity/Schema.js +2 -2
  33. package/lib/base-app-domain/OperEntity/Storage.d.ts +3 -3
  34. package/lib/base-app-domain/OperEntity/Storage.js +30 -30
  35. package/lib/base-app-domain/Relation/Schema.d.ts +188 -188
  36. package/lib/base-app-domain/Relation/Schema.js +2 -2
  37. package/lib/base-app-domain/Relation/Storage.d.ts +3 -3
  38. package/lib/base-app-domain/Relation/Storage.js +54 -54
  39. package/lib/base-app-domain/Relation.d.ts +10 -10
  40. package/lib/base-app-domain/Relation.js +10 -10
  41. package/lib/base-app-domain/RelationAuth/Schema.d.ts +180 -180
  42. package/lib/base-app-domain/RelationAuth/Schema.js +2 -2
  43. package/lib/base-app-domain/RelationAuth/Storage.d.ts +3 -3
  44. package/lib/base-app-domain/RelationAuth/Storage.js +46 -46
  45. package/lib/base-app-domain/Storage.d.ts +3 -3
  46. package/lib/base-app-domain/Storage.js +27 -27
  47. package/lib/base-app-domain/User/Action.d.ts +10 -10
  48. package/lib/base-app-domain/User/Action.js +12 -12
  49. package/lib/base-app-domain/User/Schema.d.ts +197 -197
  50. package/lib/base-app-domain/User/Schema.js +2 -2
  51. package/lib/base-app-domain/User/Storage.d.ts +3 -3
  52. package/lib/base-app-domain/User/Storage.js +33 -33
  53. package/lib/base-app-domain/UserEntityGrant/Action.d.ts +5 -5
  54. package/lib/base-app-domain/UserEntityGrant/Action.js +5 -5
  55. package/lib/base-app-domain/UserEntityGrant/Schema.d.ts +157 -157
  56. package/lib/base-app-domain/UserEntityGrant/Schema.js +2 -2
  57. package/lib/base-app-domain/UserEntityGrant/Storage.d.ts +3 -3
  58. package/lib/base-app-domain/UserEntityGrant/Storage.js +29 -29
  59. package/lib/base-app-domain/UserRelation/Schema.d.ts +194 -194
  60. package/lib/base-app-domain/UserRelation/Schema.js +2 -2
  61. package/lib/base-app-domain/UserRelation/Storage.d.ts +3 -3
  62. package/lib/base-app-domain/UserRelation/Storage.js +56 -56
  63. package/lib/base-app-domain/_SubQuery.d.ts +112 -112
  64. package/lib/base-app-domain/_SubQuery.js +2 -2
  65. package/lib/base-app-domain/index.d.ts +4 -4
  66. package/lib/base-app-domain/index.js +7 -7
  67. package/lib/checkers/index.d.ts +5 -5
  68. package/lib/checkers/index.js +14 -14
  69. package/lib/compiler/env.d.ts +14 -14
  70. package/lib/compiler/env.js +50 -50
  71. package/lib/compiler/localeBuilder.d.ts +22 -22
  72. package/lib/compiler/localeBuilder.js +169 -169
  73. package/lib/compiler/schemalBuilder.d.ts +11 -11
  74. package/lib/compiler/schemalBuilder.js +3787 -3787
  75. package/lib/compiler/uiBuilder.d.ts +1 -1
  76. package/lib/compiler/uiBuilder.js +3 -3
  77. package/lib/entities/ActionAuth.d.ts +12 -12
  78. package/lib/entities/ActionAuth.js +29 -29
  79. package/lib/entities/I18n.d.ts +9 -9
  80. package/lib/entities/I18n.js +37 -37
  81. package/lib/entities/Modi.d.ts +11 -11
  82. package/lib/entities/Modi.js +49 -49
  83. package/lib/entities/ModiEntity.d.ts +8 -8
  84. package/lib/entities/ModiEntity.js +18 -18
  85. package/lib/entities/Oper.d.ts +11 -11
  86. package/lib/entities/Oper.js +21 -21
  87. package/lib/entities/OperEntity.d.ts +8 -8
  88. package/lib/entities/OperEntity.js +18 -18
  89. package/lib/entities/Relation.d.ts +8 -8
  90. package/lib/entities/Relation.js +35 -35
  91. package/lib/entities/RelationAuth.d.ts +8 -8
  92. package/lib/entities/RelationAuth.js +34 -34
  93. package/lib/entities/User.d.ts +8 -8
  94. package/lib/entities/User.js +31 -31
  95. package/lib/entities/UserEntityGrant.d.ts +8 -8
  96. package/lib/entities/UserEntityGrant.js +18 -18
  97. package/lib/entities/UserRelation.d.ts +10 -10
  98. package/lib/entities/UserRelation.js +38 -38
  99. package/lib/store/AsyncRowStore.d.ts +58 -58
  100. package/lib/store/AsyncRowStore.js +190 -190
  101. package/lib/store/CascadeStore.d.ts +103 -103
  102. package/lib/store/CascadeStore.js +2036 -2035
  103. package/lib/store/RelationAuth.d.ts +103 -103
  104. package/lib/store/RelationAuth.js +1492 -1492
  105. package/lib/store/SyncRowStore.d.ts +29 -29
  106. package/lib/store/SyncRowStore.js +49 -48
  107. package/lib/store/TriggerExecutor.d.ts +31 -31
  108. package/lib/store/TriggerExecutor.js +532 -532
  109. package/lib/store/actionAuth.d.ts +4 -4
  110. package/lib/store/actionAuth.js +40 -40
  111. package/lib/store/actionDef.d.ts +10 -10
  112. package/lib/store/actionDef.js +353 -351
  113. package/lib/store/checker.d.ts +26 -26
  114. package/lib/store/checker.js +623 -623
  115. package/lib/store/filter.d.ts +123 -123
  116. package/lib/store/filter.js +1761 -1761
  117. package/lib/store/modi.d.ts +13 -13
  118. package/lib/store/modi.js +315 -315
  119. package/lib/store/relation.d.ts +12 -12
  120. package/lib/store/relation.js +67 -67
  121. package/lib/timers/oper.d.ts +18 -18
  122. package/lib/timers/oper.js +60 -60
  123. package/lib/timers/vaccum.d.ts +20 -20
  124. package/lib/timers/vaccum.js +176 -176
  125. package/lib/triggers/index.d.ts +5 -5
  126. package/lib/triggers/index.js +8 -8
  127. package/lib/types/Action.d.ts +20 -20
  128. package/lib/types/Action.js +2 -2
  129. package/lib/types/AppLoader.d.ts +11 -11
  130. package/lib/types/AppLoader.js +10 -10
  131. package/lib/types/Aspect.d.ts +15 -13
  132. package/lib/types/Aspect.js +4 -4
  133. package/lib/types/Auth.d.ts +74 -74
  134. package/lib/types/Auth.js +2 -2
  135. package/lib/types/Connector.d.ts +34 -33
  136. package/lib/types/Connector.js +9 -9
  137. package/lib/types/Context.d.ts +7 -7
  138. package/lib/types/Context.js +3 -3
  139. package/lib/types/DataType.d.ts +24 -24
  140. package/lib/types/DataType.js +6 -6
  141. package/lib/types/Demand.d.ts +88 -88
  142. package/lib/types/Demand.js +10 -10
  143. package/lib/types/Endpoint.d.ts +11 -11
  144. package/lib/types/Endpoint.js +3 -3
  145. package/lib/types/Entity.d.ts +198 -193
  146. package/lib/types/Entity.js +15 -14
  147. package/lib/types/EntityDesc.d.ts +8 -8
  148. package/lib/types/EntityDesc.js +2 -2
  149. package/lib/types/Environment.d.ts +57 -57
  150. package/lib/types/Environment.js +2 -2
  151. package/lib/types/Exception.d.ts +120 -115
  152. package/lib/types/Exception.js +406 -389
  153. package/lib/types/Expression.d.ts +163 -163
  154. package/lib/types/Expression.js +427 -427
  155. package/lib/types/Geo.d.ts +18 -18
  156. package/lib/types/Geo.js +2 -2
  157. package/lib/types/Locale.d.ts +25 -25
  158. package/lib/types/Locale.js +2 -2
  159. package/lib/types/Logger.d.ts +6 -6
  160. package/lib/types/Logger.js +3 -3
  161. package/lib/types/Polyfill.d.ts +24 -24
  162. package/lib/types/Polyfill.js +2 -2
  163. package/lib/types/Port.d.ts +18 -18
  164. package/lib/types/Port.js +2 -2
  165. package/lib/types/RowStore.d.ts +18 -18
  166. package/lib/types/RowStore.js +34 -34
  167. package/lib/types/Storage.d.ts +57 -57
  168. package/lib/types/Storage.js +2 -2
  169. package/lib/types/Style.d.ts +11 -11
  170. package/lib/types/Style.js +2 -2
  171. package/lib/types/Timer.d.ts +14 -14
  172. package/lib/types/Timer.js +2 -2
  173. package/lib/types/Trigger.d.ts +108 -108
  174. package/lib/types/Trigger.js +54 -54
  175. package/lib/types/Txn.d.ts +2 -2
  176. package/lib/types/Txn.js +3 -3
  177. package/lib/types/Watcher.d.ts +19 -19
  178. package/lib/types/Watcher.js +4 -4
  179. package/lib/types/index.d.ts +24 -24
  180. package/lib/types/index.js +27 -27
  181. package/lib/types/schema/DataTypes.d.ts +34 -34
  182. package/lib/types/schema/DataTypes.js +3 -3
  183. package/lib/utils/SimpleConnector.d.ts +50 -48
  184. package/lib/utils/SimpleConnector.js +184 -180
  185. package/lib/utils/assert.d.ts +5 -5
  186. package/lib/utils/assert.js +9 -9
  187. package/lib/utils/concurrent.d.ts +15 -15
  188. package/lib/utils/concurrent.js +89 -89
  189. package/lib/utils/date.d.ts +1 -1
  190. package/lib/utils/date.js +18 -18
  191. package/lib/utils/geo.d.ts +4 -4
  192. package/lib/utils/geo.js +24 -24
  193. package/lib/utils/lodash.d.ts +20 -20
  194. package/lib/utils/lodash.js +55 -55
  195. package/lib/utils/mask.d.ts +5 -5
  196. package/lib/utils/mask.js +35 -35
  197. package/lib/utils/money.d.ts +6 -6
  198. package/lib/utils/money.js +40 -40
  199. package/lib/utils/random/random.d.ts +1 -1
  200. package/lib/utils/random/random.js +24 -24
  201. package/lib/utils/random/random.mp.d.ts +1 -1
  202. package/lib/utils/random/random.mp.js +25 -25
  203. package/lib/utils/random/random.web.d.ts +1 -1
  204. package/lib/utils/random/random.web.js +17 -17
  205. package/lib/utils/string.d.ts +28 -28
  206. package/lib/utils/string.js +82 -82
  207. package/lib/utils/url.d.ts +1 -1
  208. package/lib/utils/url.js +12 -12
  209. package/lib/utils/uuid.d.ts +17 -17
  210. package/lib/utils/uuid.js +257 -257
  211. package/lib/utils/validator.d.ts +25 -25
  212. package/lib/utils/validator.js +128 -128
  213. package/lib/utils/version.d.ts +7 -7
  214. package/lib/utils/version.js +21 -21
  215. package/package.json +49 -49
  216. package/src/entities/ActionAuth.ts +41 -41
  217. package/src/entities/I18n.ts +46 -46
  218. package/src/entities/Modi.ts +69 -69
  219. package/src/entities/ModiEntity.ts +26 -26
  220. package/src/entities/Oper.ts +32 -32
  221. package/src/entities/OperEntity.ts +27 -27
  222. package/src/entities/Relation.ts +43 -43
  223. package/src/entities/RelationAuth.ts +43 -43
  224. package/src/entities/User.ts +48 -48
  225. package/src/entities/UserEntityGrant.ts +27 -27
  226. package/src/entities/UserRelation.ts +50 -50
package/lib/store/modi.js CHANGED
@@ -1,315 +1,315 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createModiRelatedTriggers = exports.createModiRelatedCheckers = exports.abandonModis = exports.applyModis = exports.createOperationsFromModies = void 0;
4
- var tslib_1 = require("tslib");
5
- var types_1 = require("../types");
6
- var action_1 = require("../actions/action");
7
- var lodash_1 = require("../utils/lodash");
8
- var uuid_1 = require("../utils/uuid");
9
- var assert_1 = tslib_1.__importDefault(require("assert"));
10
- function createOperationsFromModies(modies) {
11
- return modies.map(function (modi) {
12
- return {
13
- entity: modi.targetEntity,
14
- operation: {
15
- id: modi.id,
16
- action: modi.action,
17
- data: modi.data,
18
- filter: modi.filter,
19
- }
20
- };
21
- });
22
- }
23
- exports.createOperationsFromModies = createOperationsFromModies;
24
- function applyModis(filter, context, option) {
25
- return tslib_1.__awaiter(this, void 0, void 0, function () {
26
- var _a, _b, _c;
27
- var _d;
28
- return tslib_1.__generator(this, function (_e) {
29
- switch (_e.label) {
30
- case 0:
31
- _b = (_a = context).operate;
32
- _c = ['modi'];
33
- _d = {};
34
- return [4 /*yield*/, (0, uuid_1.generateNewIdAsync)()];
35
- case 1: return [2 /*return*/, _b.apply(_a, _c.concat([(_d.id = _e.sent(),
36
- _d.action = 'apply',
37
- _d.data = {},
38
- _d.filter = filter,
39
- _d), Object.assign({}, option, {
40
- blockTrigger: false,
41
- })]))];
42
- }
43
- });
44
- });
45
- }
46
- exports.applyModis = applyModis;
47
- function abandonModis(filter, context, option) {
48
- return tslib_1.__awaiter(this, void 0, void 0, function () {
49
- var _a, _b, _c;
50
- var _d;
51
- return tslib_1.__generator(this, function (_e) {
52
- switch (_e.label) {
53
- case 0:
54
- _b = (_a = context).operate;
55
- _c = ['modi'];
56
- _d = {};
57
- return [4 /*yield*/, (0, uuid_1.generateNewIdAsync)()];
58
- case 1: return [2 /*return*/, _b.apply(_a, _c.concat([(_d.id = _e.sent(),
59
- _d.action = 'abandon',
60
- _d.data = {},
61
- _d.filter = filter,
62
- _d), Object.assign({}, option, {
63
- blockTrigger: false,
64
- })]))];
65
- }
66
- });
67
- });
68
- }
69
- exports.abandonModis = abandonModis;
70
- function createModiRelatedCheckers(schema) {
71
- var checkers = [];
72
- var _loop_1 = function (entity) {
73
- var _a = schema[entity], actionType = _a.actionType, actions = _a.actions, inModi = _a.inModi;
74
- if (!inModi || ['readOnly', 'appendOnly'].includes(actionType)) {
75
- return "continue";
76
- }
77
- var restActions = (0, lodash_1.difference)(actions, action_1.appendOnlyActions);
78
- checkers.push({
79
- entity: entity,
80
- action: restActions,
81
- type: 'row',
82
- filter: function (operation, context, option) {
83
- /**
84
- * 只有一种情况可以通过,即当前是在更新和active的modi所指向同一个父更新对象。
85
- * 比如:先申请了一个公司(company),再申请修改公司(companyApplyment),这时所有的active modi都指向此条companyApplyment
86
- * 这时:
87
- * 1)再申请一条新的修改公司(create companyApplyment),应被拒绝
88
- * 2)申请修改原来的companyApplyment(update companyApplyment),可以通过
89
- * 3)在其它路径上对此company对象进行直接的更新,应被拒绝
90
- */
91
- if (option.modiParentEntity) {
92
- var _a = option, modiParentEntity = _a.modiParentEntity, modiParentId = _a.modiParentId;
93
- (0, assert_1.default)(modiParentEntity);
94
- (0, assert_1.default)(modiParentId);
95
- return {
96
- modiEntity$entity: {
97
- '#sqp': 'not in',
98
- entity: entity,
99
- modi: {
100
- iState: 'active',
101
- $or: [
102
- {
103
- entity: {
104
- $ne: modiParentEntity,
105
- },
106
- },
107
- {
108
- entityId: {
109
- $ne: modiParentId,
110
- },
111
- }
112
- ],
113
- },
114
- },
115
- /* id: {
116
- $nin: {
117
- entity: 'modiEntity',
118
- data: {
119
- entityId: 1,
120
- },
121
- filter: {
122
- entity,
123
- modi: {
124
- iState: 'active',
125
- $or: [
126
- {
127
- entity: {
128
- $ne: modiParentEntity,
129
- },
130
- },
131
- {
132
- entityId: {
133
- $ne: modiParentId,
134
- },
135
- }
136
- ],
137
- },
138
- },
139
- },
140
- } */
141
- };
142
- }
143
- return {
144
- modiEntity$entity: {
145
- '#sqp': 'not in',
146
- entity: entity,
147
- modi: {
148
- iState: 'active',
149
- }
150
- },
151
- /* id: {
152
- $nin: {
153
- entity: 'modiEntity',
154
- data: {
155
- entityId: 1,
156
- },
157
- filter: {
158
- entity,
159
- modi: {
160
- iState: 'active',
161
- }
162
- },
163
- },
164
- } */
165
- };
166
- },
167
- errMsg: '您请求的更新对象上还有正在申请的更新,请等该更新结束后再试',
168
- });
169
- };
170
- for (var entity in schema) {
171
- _loop_1(entity);
172
- }
173
- return checkers;
174
- }
175
- exports.createModiRelatedCheckers = createModiRelatedCheckers;
176
- function createModiRelatedTriggers(schema) {
177
- var _this = this;
178
- var triggers = [];
179
- var _loop_2 = function (entity) {
180
- var toModi = schema[entity].toModi;
181
- if (toModi) {
182
- // 当关联modi的对象被删除时,对应的modi也删除。这里似乎只需要删除掉活跃对象?因为oper不能删除,所以oper和modi是必须要支持对deleted对象的容错?
183
- // 这里没有想清楚,by Xc 20230209
184
- triggers.push({
185
- name: "\u5F53\u5220\u9664".concat(entity, "\u5BF9\u8C61\u65F6\uFF0C\u5220\u9664\u76F8\u5173\u8054\u7684modi\u7684modiEntity"),
186
- action: 'remove',
187
- entity: entity,
188
- when: 'before',
189
- priority: types_1.TRIGGER_DEFAULT_PRIORITY,
190
- fn: function (_a, context, option) {
191
- var operation = _a.operation;
192
- return tslib_1.__awaiter(_this, void 0, void 0, function () {
193
- var filter, _b, _c, _d, _e, _f, _g;
194
- var _h, _j, _k, _l;
195
- return tslib_1.__generator(this, function (_m) {
196
- switch (_m.label) {
197
- case 0:
198
- filter = operation.filter;
199
- _c = (_b = context).operate;
200
- _d = ['modiEntity'];
201
- _h = {};
202
- return [4 /*yield*/, (0, uuid_1.generateNewIdAsync)()];
203
- case 1: return [4 /*yield*/, _c.apply(_b, _d.concat([(_h.id = _m.sent(),
204
- _h.action = 'remove',
205
- _h.data = {},
206
- _h.filter = {
207
- modi: (_j = {},
208
- _j[entity] = filter,
209
- _j.iState = 'active',
210
- _j),
211
- },
212
- _h), { dontCollect: true }]))];
213
- case 2:
214
- _m.sent();
215
- _f = (_e = context).operate;
216
- _g = ['modi'];
217
- _k = {};
218
- return [4 /*yield*/, (0, uuid_1.generateNewIdAsync)()];
219
- case 3: return [4 /*yield*/, _f.apply(_e, _g.concat([(_k.id = _m.sent(),
220
- _k.action = 'remove',
221
- _k.data = {},
222
- _k.filter = (_l = {},
223
- _l[entity] = filter,
224
- _l.iState = 'active',
225
- _l),
226
- _k), { dontCollect: true }]))];
227
- case 4:
228
- _m.sent();
229
- return [2 /*return*/, 0];
230
- }
231
- });
232
- });
233
- },
234
- });
235
- }
236
- };
237
- for (var entity in schema) {
238
- _loop_2(entity);
239
- }
240
- // modi被应用时的效用,搬到这里了
241
- var applyTrigger = {
242
- name: '当modi被应用时,将相应的operate完成',
243
- entity: 'modi',
244
- action: 'apply',
245
- when: 'after',
246
- fn: function (_a, context, option) {
247
- var operation = _a.operation;
248
- return tslib_1.__awaiter(_this, void 0, void 0, function () {
249
- var filter, modies, modies_1, modies_1_1, modi, targetEntity, id, action, data, filter_1, e_1_1;
250
- var e_1, _b;
251
- return tslib_1.__generator(this, function (_c) {
252
- switch (_c.label) {
253
- case 0:
254
- filter = operation.filter;
255
- return [4 /*yield*/, context.select('modi', {
256
- data: {
257
- id: 1,
258
- action: 1,
259
- data: 1,
260
- filter: 1,
261
- targetEntity: 1,
262
- },
263
- filter: filter,
264
- sorter: [
265
- {
266
- $attr: {
267
- $$createAt$$: 1,
268
- },
269
- $direction: 'asc',
270
- },
271
- ],
272
- }, option)];
273
- case 1:
274
- modies = _c.sent();
275
- _c.label = 2;
276
- case 2:
277
- _c.trys.push([2, 7, 8, 9]);
278
- modies_1 = tslib_1.__values(modies), modies_1_1 = modies_1.next();
279
- _c.label = 3;
280
- case 3:
281
- if (!!modies_1_1.done) return [3 /*break*/, 6];
282
- modi = modies_1_1.value;
283
- targetEntity = modi.targetEntity, id = modi.id, action = modi.action, data = modi.data, filter_1 = modi.filter;
284
- return [4 /*yield*/, context.operate(targetEntity, {
285
- id: id,
286
- action: action,
287
- data: data,
288
- filter: filter_1,
289
- }, option)];
290
- case 4:
291
- _c.sent();
292
- _c.label = 5;
293
- case 5:
294
- modies_1_1 = modies_1.next();
295
- return [3 /*break*/, 3];
296
- case 6: return [3 /*break*/, 9];
297
- case 7:
298
- e_1_1 = _c.sent();
299
- e_1 = { error: e_1_1 };
300
- return [3 /*break*/, 9];
301
- case 8:
302
- try {
303
- if (modies_1_1 && !modies_1_1.done && (_b = modies_1.return)) _b.call(modies_1);
304
- }
305
- finally { if (e_1) throw e_1.error; }
306
- return [7 /*endfinally*/];
307
- case 9: return [2 /*return*/, modies.length];
308
- }
309
- });
310
- });
311
- }
312
- };
313
- return triggers.concat([applyTrigger]);
314
- }
315
- exports.createModiRelatedTriggers = createModiRelatedTriggers;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createModiRelatedTriggers = exports.createModiRelatedCheckers = exports.abandonModis = exports.applyModis = exports.createOperationsFromModies = void 0;
4
+ var tslib_1 = require("tslib");
5
+ var types_1 = require("../types");
6
+ var action_1 = require("../actions/action");
7
+ var lodash_1 = require("../utils/lodash");
8
+ var uuid_1 = require("../utils/uuid");
9
+ var assert_1 = tslib_1.__importDefault(require("assert"));
10
+ function createOperationsFromModies(modies) {
11
+ return modies.map(function (modi) {
12
+ return {
13
+ entity: modi.targetEntity,
14
+ operation: {
15
+ id: modi.id,
16
+ action: modi.action,
17
+ data: modi.data,
18
+ filter: modi.filter,
19
+ }
20
+ };
21
+ });
22
+ }
23
+ exports.createOperationsFromModies = createOperationsFromModies;
24
+ function applyModis(filter, context, option) {
25
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
26
+ var _a, _b, _c;
27
+ var _d;
28
+ return tslib_1.__generator(this, function (_e) {
29
+ switch (_e.label) {
30
+ case 0:
31
+ _b = (_a = context).operate;
32
+ _c = ['modi'];
33
+ _d = {};
34
+ return [4 /*yield*/, (0, uuid_1.generateNewIdAsync)()];
35
+ case 1: return [2 /*return*/, _b.apply(_a, _c.concat([(_d.id = _e.sent(),
36
+ _d.action = 'apply',
37
+ _d.data = {},
38
+ _d.filter = filter,
39
+ _d), Object.assign({}, option, {
40
+ blockTrigger: false,
41
+ })]))];
42
+ }
43
+ });
44
+ });
45
+ }
46
+ exports.applyModis = applyModis;
47
+ function abandonModis(filter, context, option) {
48
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
49
+ var _a, _b, _c;
50
+ var _d;
51
+ return tslib_1.__generator(this, function (_e) {
52
+ switch (_e.label) {
53
+ case 0:
54
+ _b = (_a = context).operate;
55
+ _c = ['modi'];
56
+ _d = {};
57
+ return [4 /*yield*/, (0, uuid_1.generateNewIdAsync)()];
58
+ case 1: return [2 /*return*/, _b.apply(_a, _c.concat([(_d.id = _e.sent(),
59
+ _d.action = 'abandon',
60
+ _d.data = {},
61
+ _d.filter = filter,
62
+ _d), Object.assign({}, option, {
63
+ blockTrigger: false,
64
+ })]))];
65
+ }
66
+ });
67
+ });
68
+ }
69
+ exports.abandonModis = abandonModis;
70
+ function createModiRelatedCheckers(schema) {
71
+ var checkers = [];
72
+ var _loop_1 = function (entity) {
73
+ var _a = schema[entity], actionType = _a.actionType, actions = _a.actions, inModi = _a.inModi;
74
+ if (!inModi || ['readOnly', 'appendOnly'].includes(actionType)) {
75
+ return "continue";
76
+ }
77
+ var restActions = (0, lodash_1.difference)(actions, action_1.appendOnlyActions);
78
+ checkers.push({
79
+ entity: entity,
80
+ action: restActions,
81
+ type: 'row',
82
+ filter: function (operation, context, option) {
83
+ /**
84
+ * 只有一种情况可以通过,即当前是在更新和active的modi所指向同一个父更新对象。
85
+ * 比如:先申请了一个公司(company),再申请修改公司(companyApplyment),这时所有的active modi都指向此条companyApplyment
86
+ * 这时:
87
+ * 1)再申请一条新的修改公司(create companyApplyment),应被拒绝
88
+ * 2)申请修改原来的companyApplyment(update companyApplyment),可以通过
89
+ * 3)在其它路径上对此company对象进行直接的更新,应被拒绝
90
+ */
91
+ if (option.modiParentEntity) {
92
+ var _a = option, modiParentEntity = _a.modiParentEntity, modiParentId = _a.modiParentId;
93
+ (0, assert_1.default)(modiParentEntity);
94
+ (0, assert_1.default)(modiParentId);
95
+ return {
96
+ modiEntity$entity: {
97
+ '#sqp': 'not in',
98
+ entity: entity,
99
+ modi: {
100
+ iState: 'active',
101
+ $or: [
102
+ {
103
+ entity: {
104
+ $ne: modiParentEntity,
105
+ },
106
+ },
107
+ {
108
+ entityId: {
109
+ $ne: modiParentId,
110
+ },
111
+ }
112
+ ],
113
+ },
114
+ },
115
+ /* id: {
116
+ $nin: {
117
+ entity: 'modiEntity',
118
+ data: {
119
+ entityId: 1,
120
+ },
121
+ filter: {
122
+ entity,
123
+ modi: {
124
+ iState: 'active',
125
+ $or: [
126
+ {
127
+ entity: {
128
+ $ne: modiParentEntity,
129
+ },
130
+ },
131
+ {
132
+ entityId: {
133
+ $ne: modiParentId,
134
+ },
135
+ }
136
+ ],
137
+ },
138
+ },
139
+ },
140
+ } */
141
+ };
142
+ }
143
+ return {
144
+ modiEntity$entity: {
145
+ '#sqp': 'not in',
146
+ entity: entity,
147
+ modi: {
148
+ iState: 'active',
149
+ }
150
+ },
151
+ /* id: {
152
+ $nin: {
153
+ entity: 'modiEntity',
154
+ data: {
155
+ entityId: 1,
156
+ },
157
+ filter: {
158
+ entity,
159
+ modi: {
160
+ iState: 'active',
161
+ }
162
+ },
163
+ },
164
+ } */
165
+ };
166
+ },
167
+ errMsg: '您请求的更新对象上还有正在申请的更新,请等该更新结束后再试',
168
+ });
169
+ };
170
+ for (var entity in schema) {
171
+ _loop_1(entity);
172
+ }
173
+ return checkers;
174
+ }
175
+ exports.createModiRelatedCheckers = createModiRelatedCheckers;
176
+ function createModiRelatedTriggers(schema) {
177
+ var _this = this;
178
+ var triggers = [];
179
+ var _loop_2 = function (entity) {
180
+ var toModi = schema[entity].toModi;
181
+ if (toModi) {
182
+ // 当关联modi的对象被删除时,对应的modi也删除。这里似乎只需要删除掉活跃对象?因为oper不能删除,所以oper和modi是必须要支持对deleted对象的容错?
183
+ // 这里没有想清楚,by Xc 20230209
184
+ triggers.push({
185
+ name: "\u5F53\u5220\u9664".concat(entity, "\u5BF9\u8C61\u65F6\uFF0C\u5220\u9664\u76F8\u5173\u8054\u7684modi\u7684modiEntity"),
186
+ action: 'remove',
187
+ entity: entity,
188
+ when: 'before',
189
+ priority: types_1.TRIGGER_DEFAULT_PRIORITY,
190
+ fn: function (_a, context, option) {
191
+ var operation = _a.operation;
192
+ return tslib_1.__awaiter(_this, void 0, void 0, function () {
193
+ var filter, _b, _c, _d, _e, _f, _g;
194
+ var _h, _j, _k, _l;
195
+ return tslib_1.__generator(this, function (_m) {
196
+ switch (_m.label) {
197
+ case 0:
198
+ filter = operation.filter;
199
+ _c = (_b = context).operate;
200
+ _d = ['modiEntity'];
201
+ _h = {};
202
+ return [4 /*yield*/, (0, uuid_1.generateNewIdAsync)()];
203
+ case 1: return [4 /*yield*/, _c.apply(_b, _d.concat([(_h.id = _m.sent(),
204
+ _h.action = 'remove',
205
+ _h.data = {},
206
+ _h.filter = {
207
+ modi: (_j = {},
208
+ _j[entity] = filter,
209
+ _j.iState = 'active',
210
+ _j),
211
+ },
212
+ _h), { dontCollect: true }]))];
213
+ case 2:
214
+ _m.sent();
215
+ _f = (_e = context).operate;
216
+ _g = ['modi'];
217
+ _k = {};
218
+ return [4 /*yield*/, (0, uuid_1.generateNewIdAsync)()];
219
+ case 3: return [4 /*yield*/, _f.apply(_e, _g.concat([(_k.id = _m.sent(),
220
+ _k.action = 'remove',
221
+ _k.data = {},
222
+ _k.filter = (_l = {},
223
+ _l[entity] = filter,
224
+ _l.iState = 'active',
225
+ _l),
226
+ _k), { dontCollect: true }]))];
227
+ case 4:
228
+ _m.sent();
229
+ return [2 /*return*/, 0];
230
+ }
231
+ });
232
+ });
233
+ },
234
+ });
235
+ }
236
+ };
237
+ for (var entity in schema) {
238
+ _loop_2(entity);
239
+ }
240
+ // modi被应用时的效用,搬到这里了
241
+ var applyTrigger = {
242
+ name: '当modi被应用时,将相应的operate完成',
243
+ entity: 'modi',
244
+ action: 'apply',
245
+ when: 'after',
246
+ fn: function (_a, context, option) {
247
+ var operation = _a.operation;
248
+ return tslib_1.__awaiter(_this, void 0, void 0, function () {
249
+ var filter, modies, modies_1, modies_1_1, modi, targetEntity, id, action, data, filter_1, e_1_1;
250
+ var e_1, _b;
251
+ return tslib_1.__generator(this, function (_c) {
252
+ switch (_c.label) {
253
+ case 0:
254
+ filter = operation.filter;
255
+ return [4 /*yield*/, context.select('modi', {
256
+ data: {
257
+ id: 1,
258
+ action: 1,
259
+ data: 1,
260
+ filter: 1,
261
+ targetEntity: 1,
262
+ },
263
+ filter: filter,
264
+ sorter: [
265
+ {
266
+ $attr: {
267
+ $$createAt$$: 1,
268
+ },
269
+ $direction: 'asc',
270
+ },
271
+ ],
272
+ }, option)];
273
+ case 1:
274
+ modies = _c.sent();
275
+ _c.label = 2;
276
+ case 2:
277
+ _c.trys.push([2, 7, 8, 9]);
278
+ modies_1 = tslib_1.__values(modies), modies_1_1 = modies_1.next();
279
+ _c.label = 3;
280
+ case 3:
281
+ if (!!modies_1_1.done) return [3 /*break*/, 6];
282
+ modi = modies_1_1.value;
283
+ targetEntity = modi.targetEntity, id = modi.id, action = modi.action, data = modi.data, filter_1 = modi.filter;
284
+ return [4 /*yield*/, context.operate(targetEntity, {
285
+ id: id,
286
+ action: action,
287
+ data: data,
288
+ filter: filter_1,
289
+ }, option)];
290
+ case 4:
291
+ _c.sent();
292
+ _c.label = 5;
293
+ case 5:
294
+ modies_1_1 = modies_1.next();
295
+ return [3 /*break*/, 3];
296
+ case 6: return [3 /*break*/, 9];
297
+ case 7:
298
+ e_1_1 = _c.sent();
299
+ e_1 = { error: e_1_1 };
300
+ return [3 /*break*/, 9];
301
+ case 8:
302
+ try {
303
+ if (modies_1_1 && !modies_1_1.done && (_b = modies_1.return)) _b.call(modies_1);
304
+ }
305
+ finally { if (e_1) throw e_1.error; }
306
+ return [7 /*endfinally*/];
307
+ case 9: return [2 /*return*/, modies.length];
308
+ }
309
+ });
310
+ });
311
+ }
312
+ };
313
+ return triggers.concat([applyTrigger]);
314
+ }
315
+ exports.createModiRelatedTriggers = createModiRelatedTriggers;
@@ -1,12 +1,12 @@
1
- import { EntityDict } from "../base-app-domain";
2
- import { EntityDict as BaseEntityDict } from "../types/Entity";
3
- import { StorageSchema } from "../types/Storage";
4
- /**
5
- * 判断对象和属性之间的关系
6
- * @param schema
7
- * @param entity
8
- * @param attr
9
- * @param row
10
- * @returns
11
- */
12
- export declare function judgeRelation<ED extends EntityDict & BaseEntityDict>(schema: StorageSchema<ED>, entity: keyof ED, attr: string): string | 1 | 2 | string[] | 0;
1
+ import { EntityDict } from "../base-app-domain";
2
+ import { EntityDict as BaseEntityDict } from "../types/Entity";
3
+ import { StorageSchema } from "../types/Storage";
4
+ /**
5
+ * 判断对象和属性之间的关系
6
+ * @param schema
7
+ * @param entity
8
+ * @param attr
9
+ * @param row
10
+ * @returns
11
+ */
12
+ export declare function judgeRelation<ED extends EntityDict & BaseEntityDict>(schema: StorageSchema<ED>, entity: keyof ED, attr: string): string | 1 | 2 | string[] | 0;