oak-domain 2.0.2 → 2.1.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 (150) 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 +1 -1
  4. package/lib/actions/relation.js +2 -2
  5. package/lib/base-app-domain/ActionDefDict.d.ts +5 -5
  6. package/lib/base-app-domain/ActionDefDict.js +7 -7
  7. package/lib/base-app-domain/EntityDict.d.ts +12 -12
  8. package/lib/base-app-domain/EntityDict.js +2 -2
  9. package/lib/base-app-domain/Modi/Action.d.ts +10 -10
  10. package/lib/base-app-domain/Modi/Action.js +14 -14
  11. package/lib/base-app-domain/Modi/Schema.d.ts +161 -161
  12. package/lib/base-app-domain/Modi/Schema.js +2 -2
  13. package/lib/base-app-domain/Modi/Storage.d.ts +3 -3
  14. package/lib/base-app-domain/Modi/Storage.js +60 -60
  15. package/lib/base-app-domain/ModiEntity/Schema.d.ts +176 -176
  16. package/lib/base-app-domain/ModiEntity/Schema.js +2 -2
  17. package/lib/base-app-domain/ModiEntity/Storage.d.ts +3 -3
  18. package/lib/base-app-domain/ModiEntity/Storage.js +26 -26
  19. package/lib/base-app-domain/Oper/Schema.d.ts +158 -158
  20. package/lib/base-app-domain/Oper/Schema.js +2 -2
  21. package/lib/base-app-domain/Oper/Storage.d.ts +3 -3
  22. package/lib/base-app-domain/Oper/Storage.js +29 -29
  23. package/lib/base-app-domain/OperEntity/Schema.d.ts +193 -193
  24. package/lib/base-app-domain/OperEntity/Schema.js +2 -2
  25. package/lib/base-app-domain/OperEntity/Storage.d.ts +3 -3
  26. package/lib/base-app-domain/OperEntity/Storage.js +26 -26
  27. package/lib/base-app-domain/Storage.d.ts +3 -3
  28. package/lib/base-app-domain/Storage.js +15 -15
  29. package/lib/base-app-domain/User/Schema.d.ts +137 -137
  30. package/lib/base-app-domain/User/Schema.js +2 -2
  31. package/lib/base-app-domain/User/Storage.d.ts +3 -3
  32. package/lib/base-app-domain/User/Storage.js +25 -25
  33. package/lib/base-app-domain/_SubQuery.d.ts +36 -36
  34. package/lib/base-app-domain/_SubQuery.js +2 -2
  35. package/lib/base-app-domain/index.d.ts +3 -3
  36. package/lib/base-app-domain/index.js +6 -6
  37. package/lib/checkers/index.d.ts +5 -5
  38. package/lib/checkers/index.js +8 -8
  39. package/lib/compiler/env.d.ts +11 -11
  40. package/lib/compiler/env.js +39 -39
  41. package/lib/compiler/schemalBuilder.d.ts +2 -2
  42. package/lib/compiler/schemalBuilder.js +3137 -3137
  43. package/lib/compiler/uiBuilder.d.ts +1 -1
  44. package/lib/compiler/uiBuilder.js +3 -3
  45. package/lib/entities/Modi.d.ts +11 -11
  46. package/lib/entities/Modi.js +46 -46
  47. package/lib/entities/ModiEntity.d.ts +8 -8
  48. package/lib/entities/ModiEntity.js +15 -15
  49. package/lib/entities/Oper.d.ts +10 -10
  50. package/lib/entities/Oper.js +17 -17
  51. package/lib/entities/OperEntity.d.ts +8 -8
  52. package/lib/entities/OperEntity.js +15 -15
  53. package/lib/entities/User.d.ts +7 -7
  54. package/lib/entities/User.js +12 -12
  55. package/lib/store/AsyncRowStore.d.ts +45 -45
  56. package/lib/store/AsyncRowStore.js +180 -180
  57. package/lib/store/CascadeStore.d.ts +89 -89
  58. package/lib/store/CascadeStore.js +1515 -1511
  59. package/lib/store/SyncRowStore.d.ts +26 -26
  60. package/lib/store/SyncRowStore.js +45 -45
  61. package/lib/store/TriggerExecutor.d.ts +32 -32
  62. package/lib/store/TriggerExecutor.js +470 -470
  63. package/lib/store/actionDef.d.ts +9 -9
  64. package/lib/store/actionDef.js +135 -135
  65. package/lib/store/checker.d.ts +6 -6
  66. package/lib/store/checker.js +218 -165
  67. package/lib/store/filter.d.ts +99 -99
  68. package/lib/store/filter.js +855 -855
  69. package/lib/store/modi.d.ts +13 -13
  70. package/lib/store/modi.js +172 -172
  71. package/lib/store/relation.d.ts +13 -13
  72. package/lib/store/relation.js +64 -64
  73. package/lib/store/selection.d.ts +7 -7
  74. package/lib/store/selection.js +228 -228
  75. package/lib/triggers/index.d.ts +6 -6
  76. package/lib/triggers/index.js +11 -11
  77. package/lib/triggers/modi.d.ts +5 -5
  78. package/lib/triggers/modi.js +72 -72
  79. package/lib/types/Action.d.ts +14 -14
  80. package/lib/types/Action.js +2 -2
  81. package/lib/types/AppLoader.d.ts +11 -11
  82. package/lib/types/AppLoader.js +10 -10
  83. package/lib/types/Aspect.d.ts +12 -12
  84. package/lib/types/Aspect.js +4 -4
  85. package/lib/types/Auth.d.ts +57 -31
  86. package/lib/types/Auth.js +2 -2
  87. package/lib/types/Connector.d.ts +26 -26
  88. package/lib/types/Connector.js +9 -9
  89. package/lib/types/Context.d.ts +6 -6
  90. package/lib/types/Context.js +3 -3
  91. package/lib/types/DataType.d.ts +18 -18
  92. package/lib/types/DataType.js +5 -5
  93. package/lib/types/Demand.d.ts +77 -77
  94. package/lib/types/Demand.js +9 -9
  95. package/lib/types/Entity.d.ts +159 -159
  96. package/lib/types/Entity.js +15 -15
  97. package/lib/types/Exception.d.ts +83 -83
  98. package/lib/types/Exception.js +252 -252
  99. package/lib/types/Expression.d.ts +141 -141
  100. package/lib/types/Expression.js +387 -387
  101. package/lib/types/Geo.d.ts +18 -18
  102. package/lib/types/Geo.js +2 -2
  103. package/lib/types/Locale.d.ts +24 -24
  104. package/lib/types/Locale.js +2 -2
  105. package/lib/types/Logger.d.ts +5 -5
  106. package/lib/types/Logger.js +3 -3
  107. package/lib/types/Polyfill.d.ts +23 -23
  108. package/lib/types/Polyfill.js +2 -2
  109. package/lib/types/RowStore.d.ts +12 -12
  110. package/lib/types/RowStore.js +34 -34
  111. package/lib/types/Storage.d.ts +55 -55
  112. package/lib/types/Storage.js +2 -2
  113. package/lib/types/Trigger.d.ts +88 -89
  114. package/lib/types/Trigger.js +39 -39
  115. package/lib/types/Txn.d.ts +2 -2
  116. package/lib/types/Txn.js +3 -3
  117. package/lib/types/Watcher.d.ts +19 -19
  118. package/lib/types/Watcher.js +4 -4
  119. package/lib/types/index.d.ts +18 -18
  120. package/lib/types/index.js +21 -21
  121. package/lib/types/schema/DataTypes.d.ts +32 -32
  122. package/lib/types/schema/DataTypes.js +3 -3
  123. package/lib/utils/SimpleConnector.d.ts +30 -30
  124. package/lib/utils/SimpleConnector.js +102 -102
  125. package/lib/utils/assert.d.ts +5 -5
  126. package/lib/utils/assert.js +9 -9
  127. package/lib/utils/concurrent.d.ts +15 -15
  128. package/lib/utils/concurrent.js +89 -89
  129. package/lib/utils/geo.d.ts +4 -4
  130. package/lib/utils/geo.js +24 -24
  131. package/lib/utils/lodash.d.ts +5 -5
  132. package/lib/utils/lodash.js +38 -38
  133. package/lib/utils/random/random.d.ts +1 -1
  134. package/lib/utils/random/random.js +24 -24
  135. package/lib/utils/random/random.mp.d.ts +1 -1
  136. package/lib/utils/random/random.mp.js +25 -25
  137. package/lib/utils/random/random.web.d.ts +1 -1
  138. package/lib/utils/random/random.web.js +17 -17
  139. package/lib/utils/string.d.ts +22 -22
  140. package/lib/utils/string.js +70 -70
  141. package/lib/utils/uuid.d.ts +12 -12
  142. package/lib/utils/uuid.js +182 -182
  143. package/lib/utils/validator.d.ts +23 -23
  144. package/lib/utils/validator.js +123 -123
  145. package/package.json +47 -47
  146. package/src/entities/Modi.ts +68 -68
  147. package/src/entities/ModiEntity.ts +24 -24
  148. package/src/entities/Oper.ts +28 -28
  149. package/src/entities/OperEntity.ts +24 -24
  150. package/src/entities/User.ts +19 -19
@@ -1,470 +1,470 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TriggerExecutor = void 0;
4
- var tslib_1 = require("tslib");
5
- var assert_1 = tslib_1.__importDefault(require("assert"));
6
- var lodash_1 = require("../utils/lodash");
7
- var filter_1 = require("../store/filter");
8
- var Entity_1 = require("../types/Entity");
9
- var SyncRowStore_1 = require("./SyncRowStore");
10
- var checker_1 = require("./checker");
11
- /**
12
- * update可能会传入多种不同的action,此时都需要检查update trigger
13
- */
14
- /* const UnifiedActionMatrix: Record<string, string> = {
15
- 'create': 'create',
16
- 'remove': 'remove',
17
- 'select': 'select',
18
- 'download': 'select',
19
- 'count': 'select',
20
- 'stat': 'select',
21
- }; */
22
- var TriggerExecutor = /** @class */ (function () {
23
- function TriggerExecutor(contextBuilder, logger) {
24
- if (logger === void 0) { logger = console; }
25
- this.contextBuilder = contextBuilder;
26
- this.logger = logger;
27
- this.triggerMap = {};
28
- this.triggerNameMap = {};
29
- this.volatileEntities = [];
30
- this.counter = 0;
31
- }
32
- TriggerExecutor.prototype.registerChecker = function (checker) {
33
- var entity = checker.entity, action = checker.action, type = checker.type;
34
- var triggerName = "".concat(String(entity)).concat(action, "\u6743\u9650\u68C0\u67E5-").concat(this.counter++);
35
- var fn = (0, checker_1.translateCheckerInAsyncContext)(checker);
36
- var trigger = {
37
- checkerType: type,
38
- name: triggerName,
39
- priority: checker.priority || 2,
40
- entity: entity,
41
- action: action,
42
- fn: fn,
43
- when: 'before',
44
- };
45
- this.registerTrigger(trigger);
46
- };
47
- TriggerExecutor.prototype.getCheckers = function (entity, action, checkerTypes) {
48
- var _a;
49
- var triggers = this.triggerMap[entity] && ((_a = this.triggerMap[entity][action]) === null || _a === void 0 ? void 0 : _a.filter(function (trigger) { return (typeof trigger.action === 'string' && trigger.action === action || trigger.action instanceof Array && trigger.action.includes(action)
50
- && (!checkerTypes || trigger.checkerType && checkerTypes.includes(trigger.checkerType))); }));
51
- return triggers;
52
- };
53
- TriggerExecutor.prototype.registerTrigger = function (trigger) {
54
- var _a;
55
- var _this = this;
56
- // trigger的两种访问方式: by name, by entity/action
57
- if (this.triggerNameMap.hasOwnProperty(trigger.name)) {
58
- throw new Error("\u4E0D\u53EF\u6709\u540C\u540D\u7684\u89E6\u53D1\u5668\u300C".concat(trigger.name, "\u300D"));
59
- }
60
- if (typeof trigger.priority !== 'number') {
61
- trigger.priority = 1; // 默认最低
62
- }
63
- Object.assign(this.triggerNameMap, (_a = {},
64
- _a[trigger.name] = trigger,
65
- _a));
66
- var addTrigger = function (action) {
67
- var _a, _b, _c;
68
- var triggers = _this.triggerMap[trigger.entity] && _this.triggerMap[trigger.entity][action];
69
- if (triggers) {
70
- var idx = void 0;
71
- // 这里可以保持有序插入,后面取trigger的时候就不用排序了
72
- for (idx = 0; idx < triggers.length; idx++) {
73
- if (triggers[idx].priority > trigger.priority) {
74
- break;
75
- }
76
- }
77
- triggers.splice(idx, 0, trigger);
78
- }
79
- else if (_this.triggerMap[trigger.entity]) {
80
- Object.assign(_this.triggerMap[trigger.entity], (_a = {},
81
- _a[action] = [trigger],
82
- _a));
83
- }
84
- else {
85
- Object.assign(_this.triggerMap, (_b = {},
86
- _b[trigger.entity] = (_c = {},
87
- _c[action] = [trigger],
88
- _c),
89
- _b));
90
- }
91
- };
92
- if (typeof trigger.action === 'string') {
93
- addTrigger(trigger.action);
94
- }
95
- else {
96
- trigger.action.forEach(function (ele) { return addTrigger(ele); });
97
- }
98
- if (trigger.when === 'commit' && trigger.strict === 'makeSure') {
99
- if (this.volatileEntities.indexOf(trigger.entity) === -1) {
100
- this.volatileEntities.push(trigger.entity);
101
- }
102
- }
103
- };
104
- TriggerExecutor.prototype.unregisterTrigger = function (trigger) {
105
- var _this = this;
106
- (0, assert_1.default)(trigger.when !== 'commit' || trigger.strict !== 'makeSure', 'could not remove strict volatile triggers');
107
- var removeTrigger = function (action) {
108
- var triggers = _this.triggerMap[trigger.entity] && _this.triggerMap[trigger.entity][action];
109
- if (triggers) {
110
- (0, lodash_1.pull)(triggers, trigger);
111
- (0, lodash_1.unset)(_this.triggerNameMap, trigger.name);
112
- }
113
- };
114
- if (typeof trigger.action === 'string') {
115
- removeTrigger(trigger.action);
116
- }
117
- else {
118
- trigger.action.forEach(function (ele) { return removeTrigger(ele); });
119
- }
120
- };
121
- TriggerExecutor.prototype.preCommitTrigger = function (entity, operation, trigger, context, option) {
122
- return tslib_1.__awaiter(this, void 0, void 0, function () {
123
- var _a, filter, filter2, count;
124
- var _b;
125
- return tslib_1.__generator(this, function (_c) {
126
- switch (_c.label) {
127
- case 0:
128
- (0, assert_1.default)(trigger.action !== 'select');
129
- if (!(trigger.strict === 'makeSure')) return [3 /*break*/, 5];
130
- _a = operation.action;
131
- switch (_a) {
132
- case 'create': return [3 /*break*/, 1];
133
- }
134
- return [3 /*break*/, 2];
135
- case 1:
136
- {
137
- if (operation.data.hasOwnProperty(Entity_1.TriggerDataAttribute) || operation.data.hasOwnProperty(Entity_1.TriggerTimestampAttribute)) {
138
- throw new Error('同一行数据上不能存在两个跨事务约束');
139
- }
140
- return [3 /*break*/, 4];
141
- }
142
- _c.label = 2;
143
- case 2:
144
- filter = operation.filter;
145
- filter2 = (0, filter_1.addFilterSegment)({
146
- $or: [
147
- {
148
- $$triggerData$$: {
149
- $exists: true,
150
- },
151
- },
152
- {
153
- $$triggerTimestamp$$: {
154
- $exists: true,
155
- },
156
- }
157
- ],
158
- }, filter);
159
- return [4 /*yield*/, context.count(entity, {
160
- filter: filter2
161
- }, {})];
162
- case 3:
163
- count = _c.sent();
164
- if (count > 0) {
165
- throw new Error("\u5BF9\u8C61".concat(String(entity), "\u7684\u884C\u300C").concat(JSON.stringify(operation), "\u300D\u4E0A\u5DF2\u7ECF\u5B58\u5728\u672A\u5B8C\u6210\u7684\u8DE8\u4E8B\u52A1\u7EA6\u675F"));
166
- }
167
- return [3 /*break*/, 4];
168
- case 4:
169
- Object.assign(operation.data, (_b = {},
170
- _b[Entity_1.TriggerDataAttribute] = {
171
- name: trigger.name,
172
- operation: operation,
173
- cxtStr: context.toString(),
174
- params: option,
175
- },
176
- _b[Entity_1.TriggerTimestampAttribute] = Date.now(),
177
- _b));
178
- _c.label = 5;
179
- case 5: return [2 /*return*/];
180
- }
181
- });
182
- });
183
- };
184
- TriggerExecutor.prototype.preOperation = function (entity, operation, context, option) {
185
- var e_1, _a;
186
- var _this = this;
187
- var _b;
188
- var action = operation.action;
189
- var triggers = this.triggerMap[entity] && ((_b = this.triggerMap[entity][action]) === null || _b === void 0 ? void 0 : _b.filter(function (trigger) { return typeof trigger.action === 'string' && trigger.action === operation.action || (trigger.action).includes(operation.action); }));
190
- if (triggers) {
191
- var preTriggers_2 = triggers.filter(function (ele) { return ele.when === 'before' && (!ele.check || ele.check(operation)); });
192
- var commitTriggers_1 = triggers.filter(function (ele) { return ele.when === 'commit' && (!ele.check || ele.check(operation)); });
193
- if (context instanceof SyncRowStore_1.SyncContext) {
194
- try {
195
- for (var preTriggers_1 = tslib_1.__values(preTriggers_2), preTriggers_1_1 = preTriggers_1.next(); !preTriggers_1_1.done; preTriggers_1_1 = preTriggers_1.next()) {
196
- var trigger = preTriggers_1_1.value;
197
- var number = trigger.fn({ operation: operation }, context, option);
198
- if (number > 0) {
199
- this.logger.info("\u89E6\u53D1\u5668\u300C".concat(trigger.name, "\u300D\u6210\u529F\u89E6\u53D1\u4E86\u300C").concat(number, "\u300D\u884C\u6570\u636E\u66F4\u6539"));
200
- }
201
- }
202
- }
203
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
204
- finally {
205
- try {
206
- if (preTriggers_1_1 && !preTriggers_1_1.done && (_a = preTriggers_1.return)) _a.call(preTriggers_1);
207
- }
208
- finally { if (e_1) throw e_1.error; }
209
- }
210
- (0, assert_1.default)(commitTriggers_1.length === 0, "\u524D\u53F0\u4E0D\u5E94\u6709commitTrigger");
211
- }
212
- else {
213
- // 异步context
214
- var execPreTrigger_1 = function (idx) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
215
- var trigger, number;
216
- return tslib_1.__generator(this, function (_a) {
217
- switch (_a.label) {
218
- case 0:
219
- if (idx >= preTriggers_2.length) {
220
- return [2 /*return*/];
221
- }
222
- trigger = preTriggers_2[idx];
223
- return [4 /*yield*/, trigger.fn({ operation: operation }, context, option)];
224
- case 1:
225
- number = _a.sent();
226
- if (number > 0) {
227
- this.logger.info("\u89E6\u53D1\u5668\u300C".concat(trigger.name, "\u300D\u6210\u529F\u89E6\u53D1\u4E86\u300C").concat(number, "\u300D\u884C\u6570\u636E\u66F4\u6539"));
228
- }
229
- return [2 /*return*/, execPreTrigger_1(idx + 1)];
230
- }
231
- });
232
- }); };
233
- var execCommitTrigger_1 = function (idx) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
234
- var trigger;
235
- return tslib_1.__generator(this, function (_a) {
236
- switch (_a.label) {
237
- case 0:
238
- if (idx >= commitTriggers_1.length) {
239
- return [2 /*return*/];
240
- }
241
- trigger = commitTriggers_1[idx];
242
- return [4 /*yield*/, this.preCommitTrigger(entity, operation, trigger, context, option)];
243
- case 1:
244
- _a.sent();
245
- return [2 /*return*/, execCommitTrigger_1(idx + 1)];
246
- }
247
- });
248
- }); };
249
- return execPreTrigger_1(0)
250
- .then(function () { return execCommitTrigger_1(0); });
251
- }
252
- }
253
- };
254
- TriggerExecutor.prototype.onCommit = function (trigger, operation, context, option) {
255
- var _this = this;
256
- return function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
257
- var number, filter;
258
- return tslib_1.__generator(this, function (_a) {
259
- switch (_a.label) {
260
- case 0: return [4 /*yield*/, context.begin()];
261
- case 1:
262
- _a.sent();
263
- return [4 /*yield*/, trigger.fn({
264
- operation: operation,
265
- }, context, option)];
266
- case 2:
267
- number = _a.sent();
268
- if (!(trigger.strict === 'makeSure')) return [3 /*break*/, 4];
269
- filter = {};
270
- if (operation.action === 'create') {
271
- filter = operation.data instanceof Array ? {
272
- filter: {
273
- id: {
274
- $in: operation.data.map(function (ele) { return ele.id; }),
275
- },
276
- },
277
- } : {
278
- filter: {
279
- id: operation.data.id,
280
- }
281
- };
282
- }
283
- else if (operation.filter) {
284
- Object.assign(filter, { filter: operation.filter });
285
- }
286
- return [4 /*yield*/, context.operate(trigger.entity, tslib_1.__assign({ id: 'aaa', action: 'update', data: {
287
- $$triggerTimestamp$$: null,
288
- $$triggerData$$: null,
289
- } }, filter /** as Filter<'update', DeduceFilter<ED[T]['Schema']>> */), {})];
290
- case 3:
291
- _a.sent();
292
- _a.label = 4;
293
- case 4: return [4 /*yield*/, context.commit()];
294
- case 5:
295
- _a.sent();
296
- return [2 /*return*/];
297
- }
298
- });
299
- }); };
300
- };
301
- TriggerExecutor.prototype.postCommitTrigger = function (operation, trigger, context, option) {
302
- return tslib_1.__awaiter(this, void 0, void 0, function () {
303
- return tslib_1.__generator(this, function (_a) {
304
- context.on('commit', this.onCommit(trigger, operation, context, option));
305
- return [2 /*return*/];
306
- });
307
- });
308
- };
309
- TriggerExecutor.prototype.postOperation = function (entity, operation, context, option, result) {
310
- var e_2, _a;
311
- var _this = this;
312
- var _b;
313
- var action = operation.action;
314
- var triggers = this.triggerMap[entity] && ((_b = this.triggerMap[entity][action]) === null || _b === void 0 ? void 0 : _b.filter(function (trigger) { return typeof trigger.action === 'string' && trigger.action === operation.action || (trigger.action).includes(operation.action); }));
315
- if (triggers) {
316
- var postTriggers_2 = triggers.filter(function (ele) { return ele.when === 'after' && (!ele.check || ele.check(operation)); });
317
- var commitTriggers_2 = triggers.filter(function (ele) { return ele.when === 'commit' && (!ele.check || ele.check(operation)); });
318
- if (context instanceof SyncRowStore_1.SyncContext) {
319
- try {
320
- for (var postTriggers_1 = tslib_1.__values(postTriggers_2), postTriggers_1_1 = postTriggers_1.next(); !postTriggers_1_1.done; postTriggers_1_1 = postTriggers_1.next()) {
321
- var trigger = postTriggers_1_1.value;
322
- var number = trigger.fn({
323
- operation: operation,
324
- result: result,
325
- }, context, option);
326
- if (number > 0) {
327
- this.logger.info("\u89E6\u53D1\u5668\u300C".concat(trigger.name, "\u300D\u6210\u529F\u89E6\u53D1\u4E86\u300C").concat(number, "\u300D\u884C\u6570\u636E\u66F4\u6539"));
328
- }
329
- }
330
- }
331
- catch (e_2_1) { e_2 = { error: e_2_1 }; }
332
- finally {
333
- try {
334
- if (postTriggers_1_1 && !postTriggers_1_1.done && (_a = postTriggers_1.return)) _a.call(postTriggers_1);
335
- }
336
- finally { if (e_2) throw e_2.error; }
337
- }
338
- (0, assert_1.default)(commitTriggers_2.length === 0, '前台目前应当没有commitTrigger');
339
- }
340
- else {
341
- // 异步context
342
- var execPostTrigger_1 = function (idx) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
343
- var trigger, number;
344
- return tslib_1.__generator(this, function (_a) {
345
- switch (_a.label) {
346
- case 0:
347
- if (idx >= postTriggers_2.length) {
348
- return [2 /*return*/];
349
- }
350
- trigger = postTriggers_2[idx];
351
- return [4 /*yield*/, trigger.fn({
352
- operation: operation,
353
- result: result,
354
- }, context, option)];
355
- case 1:
356
- number = _a.sent();
357
- if (number > 0) {
358
- this.logger.info("\u89E6\u53D1\u5668\u300C".concat(trigger.name, "\u300D\u6210\u529F\u89E6\u53D1\u4E86\u300C").concat(number, "\u300D\u884C\u6570\u636E\u66F4\u6539"));
359
- }
360
- return [2 /*return*/, execPostTrigger_1(idx + 1)];
361
- }
362
- });
363
- }); };
364
- var execCommitTrigger_2 = function (idx) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
365
- var trigger;
366
- return tslib_1.__generator(this, function (_a) {
367
- switch (_a.label) {
368
- case 0:
369
- if (idx >= commitTriggers_2.length) {
370
- return [2 /*return*/];
371
- }
372
- trigger = commitTriggers_2[idx];
373
- return [4 /*yield*/, this.postCommitTrigger(operation, trigger, context, option)];
374
- case 1:
375
- _a.sent();
376
- return [2 /*return*/, execCommitTrigger_2(idx + 1)];
377
- }
378
- });
379
- }); };
380
- return execPostTrigger_1(0)
381
- .then(function () { return execCommitTrigger_2(0); });
382
- }
383
- }
384
- };
385
- TriggerExecutor.prototype.checkpoint = function (context, timestamp) {
386
- return tslib_1.__awaiter(this, void 0, void 0, function () {
387
- var result, _a, _b, entity, rows, rows_1, rows_1_1, row, $$triggerData$$, _c, name_1, operation, cxtStr, params, trigger, context_1, e_3_1, e_4_1;
388
- var e_4, _d, e_3, _e;
389
- return tslib_1.__generator(this, function (_f) {
390
- switch (_f.label) {
391
- case 0:
392
- result = 0;
393
- _f.label = 1;
394
- case 1:
395
- _f.trys.push([1, 14, 15, 16]);
396
- _a = tslib_1.__values(this.volatileEntities), _b = _a.next();
397
- _f.label = 2;
398
- case 2:
399
- if (!!_b.done) return [3 /*break*/, 13];
400
- entity = _b.value;
401
- return [4 /*yield*/, context.select(entity, {
402
- data: {
403
- id: 1,
404
- $$triggerData$$: 1,
405
- },
406
- filter: {
407
- $$triggerTimestamp$$: {
408
- $gt: timestamp,
409
- }
410
- },
411
- }, {
412
- dontCollect: true,
413
- forUpdate: true,
414
- })];
415
- case 3:
416
- rows = _f.sent();
417
- _f.label = 4;
418
- case 4:
419
- _f.trys.push([4, 10, 11, 12]);
420
- rows_1 = (e_3 = void 0, tslib_1.__values(rows)), rows_1_1 = rows_1.next();
421
- _f.label = 5;
422
- case 5:
423
- if (!!rows_1_1.done) return [3 /*break*/, 9];
424
- row = rows_1_1.value;
425
- $$triggerData$$ = row.$$triggerData$$;
426
- _c = $$triggerData$$, name_1 = _c.name, operation = _c.operation, cxtStr = _c.cxtStr, params = _c.params;
427
- trigger = this.triggerNameMap[name_1];
428
- return [4 /*yield*/, this.contextBuilder(cxtStr)];
429
- case 6:
430
- context_1 = _f.sent();
431
- return [4 /*yield*/, this.onCommit(trigger, operation, context_1, params)()];
432
- case 7:
433
- _f.sent();
434
- _f.label = 8;
435
- case 8:
436
- rows_1_1 = rows_1.next();
437
- return [3 /*break*/, 5];
438
- case 9: return [3 /*break*/, 12];
439
- case 10:
440
- e_3_1 = _f.sent();
441
- e_3 = { error: e_3_1 };
442
- return [3 /*break*/, 12];
443
- case 11:
444
- try {
445
- if (rows_1_1 && !rows_1_1.done && (_e = rows_1.return)) _e.call(rows_1);
446
- }
447
- finally { if (e_3) throw e_3.error; }
448
- return [7 /*endfinally*/];
449
- case 12:
450
- _b = _a.next();
451
- return [3 /*break*/, 2];
452
- case 13: return [3 /*break*/, 16];
453
- case 14:
454
- e_4_1 = _f.sent();
455
- e_4 = { error: e_4_1 };
456
- return [3 /*break*/, 16];
457
- case 15:
458
- try {
459
- if (_b && !_b.done && (_d = _a.return)) _d.call(_a);
460
- }
461
- finally { if (e_4) throw e_4.error; }
462
- return [7 /*endfinally*/];
463
- case 16: return [2 /*return*/, result];
464
- }
465
- });
466
- });
467
- };
468
- return TriggerExecutor;
469
- }());
470
- exports.TriggerExecutor = TriggerExecutor;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TriggerExecutor = void 0;
4
+ var tslib_1 = require("tslib");
5
+ var assert_1 = tslib_1.__importDefault(require("assert"));
6
+ var lodash_1 = require("../utils/lodash");
7
+ var filter_1 = require("../store/filter");
8
+ var Entity_1 = require("../types/Entity");
9
+ var SyncRowStore_1 = require("./SyncRowStore");
10
+ var checker_1 = require("./checker");
11
+ /**
12
+ * update可能会传入多种不同的action,此时都需要检查update trigger
13
+ */
14
+ /* const UnifiedActionMatrix: Record<string, string> = {
15
+ 'create': 'create',
16
+ 'remove': 'remove',
17
+ 'select': 'select',
18
+ 'download': 'select',
19
+ 'count': 'select',
20
+ 'stat': 'select',
21
+ }; */
22
+ var TriggerExecutor = /** @class */ (function () {
23
+ function TriggerExecutor(contextBuilder, logger) {
24
+ if (logger === void 0) { logger = console; }
25
+ this.contextBuilder = contextBuilder;
26
+ this.logger = logger;
27
+ this.triggerMap = {};
28
+ this.triggerNameMap = {};
29
+ this.volatileEntities = [];
30
+ this.counter = 0;
31
+ }
32
+ TriggerExecutor.prototype.registerChecker = function (checker) {
33
+ var entity = checker.entity, action = checker.action, type = checker.type;
34
+ var triggerName = "".concat(String(entity)).concat(action, "\u6743\u9650\u68C0\u67E5-").concat(this.counter++);
35
+ var fn = (0, checker_1.translateCheckerInAsyncContext)(checker);
36
+ var trigger = {
37
+ checkerType: type,
38
+ name: triggerName,
39
+ priority: checker.priority || 2,
40
+ entity: entity,
41
+ action: action,
42
+ fn: fn,
43
+ when: 'before',
44
+ };
45
+ this.registerTrigger(trigger);
46
+ };
47
+ TriggerExecutor.prototype.getCheckers = function (entity, action, checkerTypes) {
48
+ var _a;
49
+ var triggers = this.triggerMap[entity] && ((_a = this.triggerMap[entity][action]) === null || _a === void 0 ? void 0 : _a.filter(function (trigger) { return (typeof trigger.action === 'string' && trigger.action === action || trigger.action instanceof Array && trigger.action.includes(action)
50
+ && (!checkerTypes || trigger.checkerType && checkerTypes.includes(trigger.checkerType))); }));
51
+ return triggers;
52
+ };
53
+ TriggerExecutor.prototype.registerTrigger = function (trigger) {
54
+ var _a;
55
+ var _this = this;
56
+ // trigger的两种访问方式: by name, by entity/action
57
+ if (this.triggerNameMap.hasOwnProperty(trigger.name)) {
58
+ throw new Error("\u4E0D\u53EF\u6709\u540C\u540D\u7684\u89E6\u53D1\u5668\u300C".concat(trigger.name, "\u300D"));
59
+ }
60
+ if (typeof trigger.priority !== 'number') {
61
+ trigger.priority = 1; // 默认最低
62
+ }
63
+ Object.assign(this.triggerNameMap, (_a = {},
64
+ _a[trigger.name] = trigger,
65
+ _a));
66
+ var addTrigger = function (action) {
67
+ var _a, _b, _c;
68
+ var triggers = _this.triggerMap[trigger.entity] && _this.triggerMap[trigger.entity][action];
69
+ if (triggers) {
70
+ var idx = void 0;
71
+ // 这里可以保持有序插入,后面取trigger的时候就不用排序了
72
+ for (idx = 0; idx < triggers.length; idx++) {
73
+ if (triggers[idx].priority > trigger.priority) {
74
+ break;
75
+ }
76
+ }
77
+ triggers.splice(idx, 0, trigger);
78
+ }
79
+ else if (_this.triggerMap[trigger.entity]) {
80
+ Object.assign(_this.triggerMap[trigger.entity], (_a = {},
81
+ _a[action] = [trigger],
82
+ _a));
83
+ }
84
+ else {
85
+ Object.assign(_this.triggerMap, (_b = {},
86
+ _b[trigger.entity] = (_c = {},
87
+ _c[action] = [trigger],
88
+ _c),
89
+ _b));
90
+ }
91
+ };
92
+ if (typeof trigger.action === 'string') {
93
+ addTrigger(trigger.action);
94
+ }
95
+ else {
96
+ trigger.action.forEach(function (ele) { return addTrigger(ele); });
97
+ }
98
+ if (trigger.when === 'commit' && trigger.strict === 'makeSure') {
99
+ if (this.volatileEntities.indexOf(trigger.entity) === -1) {
100
+ this.volatileEntities.push(trigger.entity);
101
+ }
102
+ }
103
+ };
104
+ TriggerExecutor.prototype.unregisterTrigger = function (trigger) {
105
+ var _this = this;
106
+ (0, assert_1.default)(trigger.when !== 'commit' || trigger.strict !== 'makeSure', 'could not remove strict volatile triggers');
107
+ var removeTrigger = function (action) {
108
+ var triggers = _this.triggerMap[trigger.entity] && _this.triggerMap[trigger.entity][action];
109
+ if (triggers) {
110
+ (0, lodash_1.pull)(triggers, trigger);
111
+ (0, lodash_1.unset)(_this.triggerNameMap, trigger.name);
112
+ }
113
+ };
114
+ if (typeof trigger.action === 'string') {
115
+ removeTrigger(trigger.action);
116
+ }
117
+ else {
118
+ trigger.action.forEach(function (ele) { return removeTrigger(ele); });
119
+ }
120
+ };
121
+ TriggerExecutor.prototype.preCommitTrigger = function (entity, operation, trigger, context, option) {
122
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
123
+ var _a, filter, filter2, count;
124
+ var _b;
125
+ return tslib_1.__generator(this, function (_c) {
126
+ switch (_c.label) {
127
+ case 0:
128
+ (0, assert_1.default)(trigger.action !== 'select');
129
+ if (!(trigger.strict === 'makeSure')) return [3 /*break*/, 5];
130
+ _a = operation.action;
131
+ switch (_a) {
132
+ case 'create': return [3 /*break*/, 1];
133
+ }
134
+ return [3 /*break*/, 2];
135
+ case 1:
136
+ {
137
+ if (operation.data.hasOwnProperty(Entity_1.TriggerDataAttribute) || operation.data.hasOwnProperty(Entity_1.TriggerTimestampAttribute)) {
138
+ throw new Error('同一行数据上不能存在两个跨事务约束');
139
+ }
140
+ return [3 /*break*/, 4];
141
+ }
142
+ _c.label = 2;
143
+ case 2:
144
+ filter = operation.filter;
145
+ filter2 = (0, filter_1.addFilterSegment)({
146
+ $or: [
147
+ {
148
+ $$triggerData$$: {
149
+ $exists: true,
150
+ },
151
+ },
152
+ {
153
+ $$triggerTimestamp$$: {
154
+ $exists: true,
155
+ },
156
+ }
157
+ ],
158
+ }, filter);
159
+ return [4 /*yield*/, context.count(entity, {
160
+ filter: filter2
161
+ }, {})];
162
+ case 3:
163
+ count = _c.sent();
164
+ if (count > 0) {
165
+ throw new Error("\u5BF9\u8C61".concat(String(entity), "\u7684\u884C\u300C").concat(JSON.stringify(operation), "\u300D\u4E0A\u5DF2\u7ECF\u5B58\u5728\u672A\u5B8C\u6210\u7684\u8DE8\u4E8B\u52A1\u7EA6\u675F"));
166
+ }
167
+ return [3 /*break*/, 4];
168
+ case 4:
169
+ Object.assign(operation.data, (_b = {},
170
+ _b[Entity_1.TriggerDataAttribute] = {
171
+ name: trigger.name,
172
+ operation: operation,
173
+ cxtStr: context.toString(),
174
+ params: option,
175
+ },
176
+ _b[Entity_1.TriggerTimestampAttribute] = Date.now(),
177
+ _b));
178
+ _c.label = 5;
179
+ case 5: return [2 /*return*/];
180
+ }
181
+ });
182
+ });
183
+ };
184
+ TriggerExecutor.prototype.preOperation = function (entity, operation, context, option) {
185
+ var e_1, _a;
186
+ var _this = this;
187
+ var _b;
188
+ var action = operation.action;
189
+ var triggers = this.triggerMap[entity] && ((_b = this.triggerMap[entity][action]) === null || _b === void 0 ? void 0 : _b.filter(function (trigger) { return typeof trigger.action === 'string' && trigger.action === operation.action || (trigger.action).includes(operation.action); }));
190
+ if (triggers) {
191
+ var preTriggers_2 = triggers.filter(function (ele) { return ele.when === 'before' && (!ele.check || ele.check(operation)); });
192
+ var commitTriggers_1 = triggers.filter(function (ele) { return ele.when === 'commit' && (!ele.check || ele.check(operation)); });
193
+ if (context instanceof SyncRowStore_1.SyncContext) {
194
+ try {
195
+ for (var preTriggers_1 = tslib_1.__values(preTriggers_2), preTriggers_1_1 = preTriggers_1.next(); !preTriggers_1_1.done; preTriggers_1_1 = preTriggers_1.next()) {
196
+ var trigger = preTriggers_1_1.value;
197
+ var number = trigger.fn({ operation: operation }, context, option);
198
+ if (number > 0) {
199
+ this.logger.info("\u89E6\u53D1\u5668\u300C".concat(trigger.name, "\u300D\u6210\u529F\u89E6\u53D1\u4E86\u300C").concat(number, "\u300D\u884C\u6570\u636E\u66F4\u6539"));
200
+ }
201
+ }
202
+ }
203
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
204
+ finally {
205
+ try {
206
+ if (preTriggers_1_1 && !preTriggers_1_1.done && (_a = preTriggers_1.return)) _a.call(preTriggers_1);
207
+ }
208
+ finally { if (e_1) throw e_1.error; }
209
+ }
210
+ (0, assert_1.default)(commitTriggers_1.length === 0, "\u524D\u53F0\u4E0D\u5E94\u6709commitTrigger");
211
+ }
212
+ else {
213
+ // 异步context
214
+ var execPreTrigger_1 = function (idx) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
215
+ var trigger, number;
216
+ return tslib_1.__generator(this, function (_a) {
217
+ switch (_a.label) {
218
+ case 0:
219
+ if (idx >= preTriggers_2.length) {
220
+ return [2 /*return*/];
221
+ }
222
+ trigger = preTriggers_2[idx];
223
+ return [4 /*yield*/, trigger.fn({ operation: operation }, context, option)];
224
+ case 1:
225
+ number = _a.sent();
226
+ if (number > 0) {
227
+ this.logger.info("\u89E6\u53D1\u5668\u300C".concat(trigger.name, "\u300D\u6210\u529F\u89E6\u53D1\u4E86\u300C").concat(number, "\u300D\u884C\u6570\u636E\u66F4\u6539"));
228
+ }
229
+ return [2 /*return*/, execPreTrigger_1(idx + 1)];
230
+ }
231
+ });
232
+ }); };
233
+ var execCommitTrigger_1 = function (idx) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
234
+ var trigger;
235
+ return tslib_1.__generator(this, function (_a) {
236
+ switch (_a.label) {
237
+ case 0:
238
+ if (idx >= commitTriggers_1.length) {
239
+ return [2 /*return*/];
240
+ }
241
+ trigger = commitTriggers_1[idx];
242
+ return [4 /*yield*/, this.preCommitTrigger(entity, operation, trigger, context, option)];
243
+ case 1:
244
+ _a.sent();
245
+ return [2 /*return*/, execCommitTrigger_1(idx + 1)];
246
+ }
247
+ });
248
+ }); };
249
+ return execPreTrigger_1(0)
250
+ .then(function () { return execCommitTrigger_1(0); });
251
+ }
252
+ }
253
+ };
254
+ TriggerExecutor.prototype.onCommit = function (trigger, operation, context, option) {
255
+ var _this = this;
256
+ return function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
257
+ var number, filter;
258
+ return tslib_1.__generator(this, function (_a) {
259
+ switch (_a.label) {
260
+ case 0: return [4 /*yield*/, context.begin()];
261
+ case 1:
262
+ _a.sent();
263
+ return [4 /*yield*/, trigger.fn({
264
+ operation: operation,
265
+ }, context, option)];
266
+ case 2:
267
+ number = _a.sent();
268
+ if (!(trigger.strict === 'makeSure')) return [3 /*break*/, 4];
269
+ filter = {};
270
+ if (operation.action === 'create') {
271
+ filter = operation.data instanceof Array ? {
272
+ filter: {
273
+ id: {
274
+ $in: operation.data.map(function (ele) { return ele.id; }),
275
+ },
276
+ },
277
+ } : {
278
+ filter: {
279
+ id: operation.data.id,
280
+ }
281
+ };
282
+ }
283
+ else if (operation.filter) {
284
+ Object.assign(filter, { filter: operation.filter });
285
+ }
286
+ return [4 /*yield*/, context.operate(trigger.entity, tslib_1.__assign({ id: 'aaa', action: 'update', data: {
287
+ $$triggerTimestamp$$: null,
288
+ $$triggerData$$: null,
289
+ } }, filter /** as Filter<'update', DeduceFilter<ED[T]['Schema']>> */), {})];
290
+ case 3:
291
+ _a.sent();
292
+ _a.label = 4;
293
+ case 4: return [4 /*yield*/, context.commit()];
294
+ case 5:
295
+ _a.sent();
296
+ return [2 /*return*/];
297
+ }
298
+ });
299
+ }); };
300
+ };
301
+ TriggerExecutor.prototype.postCommitTrigger = function (operation, trigger, context, option) {
302
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
303
+ return tslib_1.__generator(this, function (_a) {
304
+ context.on('commit', this.onCommit(trigger, operation, context, option));
305
+ return [2 /*return*/];
306
+ });
307
+ });
308
+ };
309
+ TriggerExecutor.prototype.postOperation = function (entity, operation, context, option, result) {
310
+ var e_2, _a;
311
+ var _this = this;
312
+ var _b;
313
+ var action = operation.action;
314
+ var triggers = this.triggerMap[entity] && ((_b = this.triggerMap[entity][action]) === null || _b === void 0 ? void 0 : _b.filter(function (trigger) { return typeof trigger.action === 'string' && trigger.action === operation.action || (trigger.action).includes(operation.action); }));
315
+ if (triggers) {
316
+ var postTriggers_2 = triggers.filter(function (ele) { return ele.when === 'after' && (!ele.check || ele.check(operation)); });
317
+ var commitTriggers_2 = triggers.filter(function (ele) { return ele.when === 'commit' && (!ele.check || ele.check(operation)); });
318
+ if (context instanceof SyncRowStore_1.SyncContext) {
319
+ try {
320
+ for (var postTriggers_1 = tslib_1.__values(postTriggers_2), postTriggers_1_1 = postTriggers_1.next(); !postTriggers_1_1.done; postTriggers_1_1 = postTriggers_1.next()) {
321
+ var trigger = postTriggers_1_1.value;
322
+ var number = trigger.fn({
323
+ operation: operation,
324
+ result: result,
325
+ }, context, option);
326
+ if (number > 0) {
327
+ this.logger.info("\u89E6\u53D1\u5668\u300C".concat(trigger.name, "\u300D\u6210\u529F\u89E6\u53D1\u4E86\u300C").concat(number, "\u300D\u884C\u6570\u636E\u66F4\u6539"));
328
+ }
329
+ }
330
+ }
331
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
332
+ finally {
333
+ try {
334
+ if (postTriggers_1_1 && !postTriggers_1_1.done && (_a = postTriggers_1.return)) _a.call(postTriggers_1);
335
+ }
336
+ finally { if (e_2) throw e_2.error; }
337
+ }
338
+ (0, assert_1.default)(commitTriggers_2.length === 0, '前台目前应当没有commitTrigger');
339
+ }
340
+ else {
341
+ // 异步context
342
+ var execPostTrigger_1 = function (idx) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
343
+ var trigger, number;
344
+ return tslib_1.__generator(this, function (_a) {
345
+ switch (_a.label) {
346
+ case 0:
347
+ if (idx >= postTriggers_2.length) {
348
+ return [2 /*return*/];
349
+ }
350
+ trigger = postTriggers_2[idx];
351
+ return [4 /*yield*/, trigger.fn({
352
+ operation: operation,
353
+ result: result,
354
+ }, context, option)];
355
+ case 1:
356
+ number = _a.sent();
357
+ if (number > 0) {
358
+ this.logger.info("\u89E6\u53D1\u5668\u300C".concat(trigger.name, "\u300D\u6210\u529F\u89E6\u53D1\u4E86\u300C").concat(number, "\u300D\u884C\u6570\u636E\u66F4\u6539"));
359
+ }
360
+ return [2 /*return*/, execPostTrigger_1(idx + 1)];
361
+ }
362
+ });
363
+ }); };
364
+ var execCommitTrigger_2 = function (idx) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
365
+ var trigger;
366
+ return tslib_1.__generator(this, function (_a) {
367
+ switch (_a.label) {
368
+ case 0:
369
+ if (idx >= commitTriggers_2.length) {
370
+ return [2 /*return*/];
371
+ }
372
+ trigger = commitTriggers_2[idx];
373
+ return [4 /*yield*/, this.postCommitTrigger(operation, trigger, context, option)];
374
+ case 1:
375
+ _a.sent();
376
+ return [2 /*return*/, execCommitTrigger_2(idx + 1)];
377
+ }
378
+ });
379
+ }); };
380
+ return execPostTrigger_1(0)
381
+ .then(function () { return execCommitTrigger_2(0); });
382
+ }
383
+ }
384
+ };
385
+ TriggerExecutor.prototype.checkpoint = function (context, timestamp) {
386
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
387
+ var result, _a, _b, entity, rows, rows_1, rows_1_1, row, $$triggerData$$, _c, name_1, operation, cxtStr, params, trigger, context_1, e_3_1, e_4_1;
388
+ var e_4, _d, e_3, _e;
389
+ return tslib_1.__generator(this, function (_f) {
390
+ switch (_f.label) {
391
+ case 0:
392
+ result = 0;
393
+ _f.label = 1;
394
+ case 1:
395
+ _f.trys.push([1, 14, 15, 16]);
396
+ _a = tslib_1.__values(this.volatileEntities), _b = _a.next();
397
+ _f.label = 2;
398
+ case 2:
399
+ if (!!_b.done) return [3 /*break*/, 13];
400
+ entity = _b.value;
401
+ return [4 /*yield*/, context.select(entity, {
402
+ data: {
403
+ id: 1,
404
+ $$triggerData$$: 1,
405
+ },
406
+ filter: {
407
+ $$triggerTimestamp$$: {
408
+ $gt: timestamp,
409
+ }
410
+ },
411
+ }, {
412
+ dontCollect: true,
413
+ forUpdate: true,
414
+ })];
415
+ case 3:
416
+ rows = _f.sent();
417
+ _f.label = 4;
418
+ case 4:
419
+ _f.trys.push([4, 10, 11, 12]);
420
+ rows_1 = (e_3 = void 0, tslib_1.__values(rows)), rows_1_1 = rows_1.next();
421
+ _f.label = 5;
422
+ case 5:
423
+ if (!!rows_1_1.done) return [3 /*break*/, 9];
424
+ row = rows_1_1.value;
425
+ $$triggerData$$ = row.$$triggerData$$;
426
+ _c = $$triggerData$$, name_1 = _c.name, operation = _c.operation, cxtStr = _c.cxtStr, params = _c.params;
427
+ trigger = this.triggerNameMap[name_1];
428
+ return [4 /*yield*/, this.contextBuilder(cxtStr)];
429
+ case 6:
430
+ context_1 = _f.sent();
431
+ return [4 /*yield*/, this.onCommit(trigger, operation, context_1, params)()];
432
+ case 7:
433
+ _f.sent();
434
+ _f.label = 8;
435
+ case 8:
436
+ rows_1_1 = rows_1.next();
437
+ return [3 /*break*/, 5];
438
+ case 9: return [3 /*break*/, 12];
439
+ case 10:
440
+ e_3_1 = _f.sent();
441
+ e_3 = { error: e_3_1 };
442
+ return [3 /*break*/, 12];
443
+ case 11:
444
+ try {
445
+ if (rows_1_1 && !rows_1_1.done && (_e = rows_1.return)) _e.call(rows_1);
446
+ }
447
+ finally { if (e_3) throw e_3.error; }
448
+ return [7 /*endfinally*/];
449
+ case 12:
450
+ _b = _a.next();
451
+ return [3 /*break*/, 2];
452
+ case 13: return [3 /*break*/, 16];
453
+ case 14:
454
+ e_4_1 = _f.sent();
455
+ e_4 = { error: e_4_1 };
456
+ return [3 /*break*/, 16];
457
+ case 15:
458
+ try {
459
+ if (_b && !_b.done && (_d = _a.return)) _d.call(_a);
460
+ }
461
+ finally { if (e_4) throw e_4.error; }
462
+ return [7 /*endfinally*/];
463
+ case 16: return [2 /*return*/, result];
464
+ }
465
+ });
466
+ });
467
+ };
468
+ return TriggerExecutor;
469
+ }());
470
+ exports.TriggerExecutor = TriggerExecutor;