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,13 +1,13 @@
1
- import { EntityDict as BaseEntityDict } from '../base-app-domain';
2
- import { OpSchema as Modi } from '../base-app-domain/Modi/Schema';
3
- import { Operation, StorageSchema, RowChecker, EntityDict, OperateOption, Trigger } from '../types';
4
- import { AsyncContext } from './AsyncRowStore';
5
- import { SyncContext } from './SyncRowStore';
6
- export declare function createOperationsFromModies(modies: Modi[]): Array<{
7
- operation: Operation<string, Object, Object>;
8
- entity: string;
9
- }>;
10
- export declare function applyModis<ED extends EntityDict & BaseEntityDict, Cxt extends AsyncContext<ED>, Op extends OperateOption>(filter: ED['modi']['Selection']['filter'], context: Cxt, option: Op): Promise<import("../types").OperationResult<ED>>;
11
- export declare function abandonModis<ED extends EntityDict & BaseEntityDict, Cxt extends AsyncContext<ED>, Op extends OperateOption>(filter: ED['modi']['Selection']['filter'], context: Cxt, option: Op): Promise<import("../types").OperationResult<ED>>;
12
- export declare function createModiRelatedCheckers<ED extends EntityDict & BaseEntityDict, Cxt extends AsyncContext<ED> | SyncContext<ED>>(schema: StorageSchema<ED>): RowChecker<ED, keyof ED, Cxt>[];
13
- export declare function createModiRelatedTriggers<ED extends EntityDict & BaseEntityDict, Cxt extends AsyncContext<ED> | SyncContext<ED>>(schema: StorageSchema<ED>): Trigger<ED, keyof ED, Cxt>[];
1
+ import { EntityDict as BaseEntityDict } from '../base-app-domain';
2
+ import { OpSchema as Modi } from '../base-app-domain/Modi/Schema';
3
+ import { Operation, StorageSchema, RowChecker, EntityDict, OperateOption, Trigger } from '../types';
4
+ import { AsyncContext } from './AsyncRowStore';
5
+ import { SyncContext } from './SyncRowStore';
6
+ export declare function createOperationsFromModies(modies: Modi[]): Array<{
7
+ operation: Operation<string, Object, Object>;
8
+ entity: string;
9
+ }>;
10
+ export declare function applyModis<ED extends EntityDict & BaseEntityDict, Cxt extends AsyncContext<ED>, Op extends OperateOption>(filter: ED['modi']['Selection']['filter'], context: Cxt, option: Op): Promise<import("../types").OperationResult<ED>>;
11
+ export declare function abandonModis<ED extends EntityDict & BaseEntityDict, Cxt extends AsyncContext<ED>, Op extends OperateOption>(filter: ED['modi']['Selection']['filter'], context: Cxt, option: Op): Promise<import("../types").OperationResult<ED>>;
12
+ export declare function createModiRelatedCheckers<ED extends EntityDict & BaseEntityDict, Cxt extends AsyncContext<ED> | SyncContext<ED>>(schema: StorageSchema<ED>): RowChecker<ED, keyof ED, Cxt>[];
13
+ export declare function createModiRelatedTriggers<ED extends EntityDict & BaseEntityDict, Cxt extends AsyncContext<ED> | SyncContext<ED>>(schema: StorageSchema<ED>): Trigger<ED, keyof ED, Cxt>[];
package/lib/store/modi.js CHANGED
@@ -1,254 +1,254 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createModiRelatedTriggers = exports.createModiRelatedCheckers = exports.abandonModis = exports.applyModis = exports.createOperationsFromModies = void 0;
4
- const tslib_1 = require("tslib");
5
- const types_1 = require("../types");
6
- const action_1 = require("../actions/action");
7
- const lodash_1 = require("../utils/lodash");
8
- const uuid_1 = require("../utils/uuid");
9
- const assert_1 = tslib_1.__importDefault(require("assert"));
10
- function createOperationsFromModies(modies) {
11
- return modies.map((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
- async function applyModis(filter, context, option) {
25
- const closeMode = context.openRootMode();
26
- const result = await context.operate('modi', {
27
- id: await (0, uuid_1.generateNewIdAsync)(),
28
- action: 'apply',
29
- data: {},
30
- filter,
31
- /* sorter: [
32
- {
33
- $attr: {
34
- $$createAt$$: 1,
35
- },
36
- $direction: 'asc',
37
- }
38
- ] */
39
- }, Object.assign({}, option, {
40
- blockTrigger: false,
41
- }));
42
- closeMode();
43
- return result;
44
- }
45
- exports.applyModis = applyModis;
46
- async function abandonModis(filter, context, option) {
47
- const closeMode = context.openRootMode();
48
- const result = context.operate('modi', {
49
- id: await (0, uuid_1.generateNewIdAsync)(),
50
- action: 'abandon',
51
- data: {},
52
- filter,
53
- /* sorter: [
54
- {
55
- $attr: {
56
- $$createAt$$: 1,
57
- },
58
- $direction: 'asc',
59
- }
60
- ] */
61
- }, Object.assign({}, option, {
62
- blockTrigger: false,
63
- }));
64
- closeMode();
65
- return result;
66
- }
67
- exports.abandonModis = abandonModis;
68
- function createModiRelatedCheckers(schema) {
69
- const checkers = [];
70
- for (const entity in schema) {
71
- const { actionType, actions, inModi } = schema[entity];
72
- if (!inModi || ['readOnly', 'appendOnly'].includes(actionType)) {
73
- continue;
74
- }
75
- const restActions = (0, lodash_1.difference)(actions, action_1.appendOnlyActions);
76
- checkers.push({
77
- entity,
78
- action: restActions,
79
- type: 'row',
80
- filter: (operation, context, option) => {
81
- /**
82
- * 只有一种情况可以通过,即当前是在更新和active的modi所指向同一个父更新对象。
83
- * 比如:先申请了一个公司(company),再申请修改公司(companyApplyment),这时所有的active modi都指向此条companyApplyment
84
- * 这时:
85
- * 1)再申请一条新的修改公司(create companyApplyment),应被拒绝
86
- * 2)申请修改原来的companyApplyment(update companyApplyment),可以通过
87
- * 3)在其它路径上对此company对象进行直接的更新,应被拒绝
88
- */
89
- if (option.modiParentEntity) {
90
- const { modiParentEntity, modiParentId } = option;
91
- (0, assert_1.default)(modiParentEntity);
92
- (0, assert_1.default)(modiParentId);
93
- return {
94
- modiEntity$entity: {
95
- '#sqp': 'not in',
96
- entity,
97
- modi: {
98
- iState: 'active',
99
- $or: [
100
- {
101
- entity: {
102
- $ne: modiParentEntity,
103
- },
104
- },
105
- {
106
- entityId: {
107
- $ne: modiParentId,
108
- },
109
- }
110
- ],
111
- },
112
- },
113
- /* id: {
114
- $nin: {
115
- entity: 'modiEntity',
116
- data: {
117
- entityId: 1,
118
- },
119
- filter: {
120
- entity,
121
- modi: {
122
- iState: 'active',
123
- $or: [
124
- {
125
- entity: {
126
- $ne: modiParentEntity,
127
- },
128
- },
129
- {
130
- entityId: {
131
- $ne: modiParentId,
132
- },
133
- }
134
- ],
135
- },
136
- },
137
- },
138
- } */
139
- };
140
- }
141
- return {
142
- modiEntity$entity: {
143
- '#sqp': 'not in',
144
- entity,
145
- modi: {
146
- iState: 'active',
147
- }
148
- },
149
- /* id: {
150
- $nin: {
151
- entity: 'modiEntity',
152
- data: {
153
- entityId: 1,
154
- },
155
- filter: {
156
- entity,
157
- modi: {
158
- iState: 'active',
159
- }
160
- },
161
- },
162
- } */
163
- };
164
- },
165
- errMsg: '您请求的更新对象上还有正在申请的更新,请等该更新结束后再试',
166
- });
167
- }
168
- return checkers;
169
- }
170
- exports.createModiRelatedCheckers = createModiRelatedCheckers;
171
- function createModiRelatedTriggers(schema) {
172
- const triggers = [];
173
- for (const entity in schema) {
174
- const { toModi } = schema[entity];
175
- if (toModi) {
176
- // 当关联modi的对象被删除时,对应的modi也删除。这里似乎只需要删除掉活跃对象?因为oper不能删除,所以oper和modi是必须要支持对deleted对象的容错?
177
- // 这里没有想清楚,by Xc 20230209
178
- triggers.push({
179
- name: `当删除${entity}对象时,删除相关联的modi的modiEntity`,
180
- action: 'remove',
181
- entity,
182
- when: 'before',
183
- priority: types_1.TRIGGER_DEFAULT_PRIORITY,
184
- fn: async ({ operation }, context, option) => {
185
- const { filter } = operation;
186
- await context.operate('modiEntity', {
187
- id: await (0, uuid_1.generateNewIdAsync)(),
188
- action: 'remove',
189
- data: {},
190
- filter: {
191
- modi: {
192
- [entity]: filter,
193
- iState: 'active',
194
- },
195
- }
196
- }, { dontCollect: true });
197
- await context.operate('modi', {
198
- id: await (0, uuid_1.generateNewIdAsync)(),
199
- action: 'remove',
200
- data: {},
201
- filter: {
202
- [entity]: filter,
203
- iState: 'active',
204
- }
205
- }, { dontCollect: true });
206
- return 0;
207
- },
208
- });
209
- }
210
- }
211
- // modi被应用时的效用,搬到这里了
212
- const applyTrigger = {
213
- name: '当modi被应用时,将相应的operate完成',
214
- entity: 'modi',
215
- action: 'apply',
216
- when: 'after',
217
- fn: async ({ operation }, context, option) => {
218
- const { filter } = operation;
219
- const modies = await context.select('modi', {
220
- data: {
221
- id: 1,
222
- action: 1,
223
- data: 1,
224
- filter: 1,
225
- targetEntity: 1,
226
- },
227
- filter,
228
- sorter: [
229
- {
230
- $attr: {
231
- $$createAt$$: 1,
232
- },
233
- $direction: 'asc',
234
- },
235
- ],
236
- }, option);
237
- for (const modi of modies) {
238
- const { targetEntity, id, action, data, filter } = modi;
239
- await context.operate(targetEntity, {
240
- id: id,
241
- action: action,
242
- data: data,
243
- filter: filter,
244
- }, {
245
- ...option,
246
- applyingModi: true,
247
- });
248
- }
249
- return modies.length;
250
- }
251
- };
252
- return triggers.concat([applyTrigger]);
253
- }
254
- 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
+ const tslib_1 = require("tslib");
5
+ const types_1 = require("../types");
6
+ const action_1 = require("../actions/action");
7
+ const lodash_1 = require("../utils/lodash");
8
+ const uuid_1 = require("../utils/uuid");
9
+ const assert_1 = tslib_1.__importDefault(require("assert"));
10
+ function createOperationsFromModies(modies) {
11
+ return modies.map((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
+ async function applyModis(filter, context, option) {
25
+ const closeMode = context.openRootMode();
26
+ const result = await context.operate('modi', {
27
+ id: await (0, uuid_1.generateNewIdAsync)(),
28
+ action: 'apply',
29
+ data: {},
30
+ filter,
31
+ /* sorter: [
32
+ {
33
+ $attr: {
34
+ $$createAt$$: 1,
35
+ },
36
+ $direction: 'asc',
37
+ }
38
+ ] */
39
+ }, Object.assign({}, option, {
40
+ blockTrigger: false,
41
+ }));
42
+ closeMode();
43
+ return result;
44
+ }
45
+ exports.applyModis = applyModis;
46
+ async function abandonModis(filter, context, option) {
47
+ const closeMode = context.openRootMode();
48
+ const result = context.operate('modi', {
49
+ id: await (0, uuid_1.generateNewIdAsync)(),
50
+ action: 'abandon',
51
+ data: {},
52
+ filter,
53
+ /* sorter: [
54
+ {
55
+ $attr: {
56
+ $$createAt$$: 1,
57
+ },
58
+ $direction: 'asc',
59
+ }
60
+ ] */
61
+ }, Object.assign({}, option, {
62
+ blockTrigger: false,
63
+ }));
64
+ closeMode();
65
+ return result;
66
+ }
67
+ exports.abandonModis = abandonModis;
68
+ function createModiRelatedCheckers(schema) {
69
+ const checkers = [];
70
+ for (const entity in schema) {
71
+ const { actionType, actions, inModi } = schema[entity];
72
+ if (!inModi || ['readOnly', 'appendOnly'].includes(actionType)) {
73
+ continue;
74
+ }
75
+ const restActions = (0, lodash_1.difference)(actions, action_1.appendOnlyActions);
76
+ checkers.push({
77
+ entity,
78
+ action: restActions,
79
+ type: 'row',
80
+ filter: (operation, context, option) => {
81
+ /**
82
+ * 只有一种情况可以通过,即当前是在更新和active的modi所指向同一个父更新对象。
83
+ * 比如:先申请了一个公司(company),再申请修改公司(companyApplyment),这时所有的active modi都指向此条companyApplyment
84
+ * 这时:
85
+ * 1)再申请一条新的修改公司(create companyApplyment),应被拒绝
86
+ * 2)申请修改原来的companyApplyment(update companyApplyment),可以通过
87
+ * 3)在其它路径上对此company对象进行直接的更新,应被拒绝
88
+ */
89
+ if (option.modiParentEntity) {
90
+ const { modiParentEntity, modiParentId } = option;
91
+ (0, assert_1.default)(modiParentEntity);
92
+ (0, assert_1.default)(modiParentId);
93
+ return {
94
+ modiEntity$entity: {
95
+ '#sqp': 'not in',
96
+ entity,
97
+ modi: {
98
+ iState: 'active',
99
+ $or: [
100
+ {
101
+ entity: {
102
+ $ne: modiParentEntity,
103
+ },
104
+ },
105
+ {
106
+ entityId: {
107
+ $ne: modiParentId,
108
+ },
109
+ }
110
+ ],
111
+ },
112
+ },
113
+ /* id: {
114
+ $nin: {
115
+ entity: 'modiEntity',
116
+ data: {
117
+ entityId: 1,
118
+ },
119
+ filter: {
120
+ entity,
121
+ modi: {
122
+ iState: 'active',
123
+ $or: [
124
+ {
125
+ entity: {
126
+ $ne: modiParentEntity,
127
+ },
128
+ },
129
+ {
130
+ entityId: {
131
+ $ne: modiParentId,
132
+ },
133
+ }
134
+ ],
135
+ },
136
+ },
137
+ },
138
+ } */
139
+ };
140
+ }
141
+ return {
142
+ modiEntity$entity: {
143
+ '#sqp': 'not in',
144
+ entity,
145
+ modi: {
146
+ iState: 'active',
147
+ }
148
+ },
149
+ /* id: {
150
+ $nin: {
151
+ entity: 'modiEntity',
152
+ data: {
153
+ entityId: 1,
154
+ },
155
+ filter: {
156
+ entity,
157
+ modi: {
158
+ iState: 'active',
159
+ }
160
+ },
161
+ },
162
+ } */
163
+ };
164
+ },
165
+ errMsg: '您请求的更新对象上还有正在申请的更新,请等该更新结束后再试',
166
+ });
167
+ }
168
+ return checkers;
169
+ }
170
+ exports.createModiRelatedCheckers = createModiRelatedCheckers;
171
+ function createModiRelatedTriggers(schema) {
172
+ const triggers = [];
173
+ for (const entity in schema) {
174
+ const { toModi } = schema[entity];
175
+ if (toModi) {
176
+ // 当关联modi的对象被删除时,对应的modi也删除。这里似乎只需要删除掉活跃对象?因为oper不能删除,所以oper和modi是必须要支持对deleted对象的容错?
177
+ // 这里没有想清楚,by Xc 20230209
178
+ triggers.push({
179
+ name: `当删除${entity}对象时,删除相关联的modi的modiEntity`,
180
+ action: 'remove',
181
+ entity,
182
+ when: 'before',
183
+ priority: types_1.TRIGGER_DEFAULT_PRIORITY,
184
+ fn: async ({ operation }, context, option) => {
185
+ const { filter } = operation;
186
+ await context.operate('modiEntity', {
187
+ id: await (0, uuid_1.generateNewIdAsync)(),
188
+ action: 'remove',
189
+ data: {},
190
+ filter: {
191
+ modi: {
192
+ [entity]: filter,
193
+ iState: 'active',
194
+ },
195
+ }
196
+ }, { dontCollect: true });
197
+ await context.operate('modi', {
198
+ id: await (0, uuid_1.generateNewIdAsync)(),
199
+ action: 'remove',
200
+ data: {},
201
+ filter: {
202
+ [entity]: filter,
203
+ iState: 'active',
204
+ }
205
+ }, { dontCollect: true });
206
+ return 0;
207
+ },
208
+ });
209
+ }
210
+ }
211
+ // modi被应用时的效用,搬到这里了
212
+ const applyTrigger = {
213
+ name: '当modi被应用时,将相应的operate完成',
214
+ entity: 'modi',
215
+ action: 'apply',
216
+ when: 'after',
217
+ fn: async ({ operation }, context, option) => {
218
+ const { filter } = operation;
219
+ const modies = await context.select('modi', {
220
+ data: {
221
+ id: 1,
222
+ action: 1,
223
+ data: 1,
224
+ filter: 1,
225
+ targetEntity: 1,
226
+ },
227
+ filter,
228
+ sorter: [
229
+ {
230
+ $attr: {
231
+ $$createAt$$: 1,
232
+ },
233
+ $direction: 'asc',
234
+ },
235
+ ],
236
+ }, option);
237
+ for (const modi of modies) {
238
+ const { targetEntity, id, action, data, filter } = modi;
239
+ await context.operate(targetEntity, {
240
+ id: id,
241
+ action: action,
242
+ data: data,
243
+ filter: filter,
244
+ }, {
245
+ ...option,
246
+ applyingModi: true,
247
+ });
248
+ }
249
+ return modies.length;
250
+ }
251
+ };
252
+ return triggers.concat([applyTrigger]);
253
+ }
254
+ 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;