oak-domain 1.1.13 → 2.0.1

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 (79) hide show
  1. package/lib/base-app-domain/Modi/Schema.d.ts +29 -32
  2. package/lib/base-app-domain/ModiEntity/Schema.d.ts +24 -27
  3. package/lib/base-app-domain/Oper/Schema.d.ts +24 -27
  4. package/lib/base-app-domain/OperEntity/Schema.d.ts +25 -28
  5. package/lib/base-app-domain/User/Schema.d.ts +22 -25
  6. package/lib/checkers/index.d.ts +4 -2
  7. package/lib/compiler/schemalBuilder.js +22 -24
  8. package/lib/store/AsyncRowStore.d.ts +45 -0
  9. package/lib/store/{UniversalContext.js → AsyncRowStore.js} +39 -29
  10. package/lib/store/CascadeStore.d.ts +46 -20
  11. package/lib/store/CascadeStore.js +960 -996
  12. package/lib/store/SyncRowStore.d.ts +26 -0
  13. package/lib/store/SyncRowStore.js +45 -0
  14. package/lib/store/TriggerExecutor.d.ts +14 -14
  15. package/lib/store/TriggerExecutor.js +225 -238
  16. package/lib/store/actionDef.d.ts +5 -4
  17. package/lib/store/actionDef.js +44 -133
  18. package/lib/store/checker.d.ts +6 -0
  19. package/lib/store/checker.js +165 -0
  20. package/lib/store/filter.d.ts +5 -0
  21. package/lib/store/filter.js +395 -3
  22. package/lib/store/modi.d.ts +7 -6
  23. package/lib/store/modi.js +35 -46
  24. package/lib/store/relation.d.ts +1 -1
  25. package/lib/store/selection.js +1 -0
  26. package/lib/triggers/index.d.ts +4 -3
  27. package/lib/triggers/modi.d.ts +2 -2
  28. package/lib/triggers/modi.js +5 -5
  29. package/lib/types/AppLoader.d.ts +3 -3
  30. package/lib/types/Aspect.d.ts +3 -3
  31. package/lib/types/Auth.d.ts +25 -22
  32. package/lib/types/Connector.d.ts +7 -7
  33. package/lib/types/Context.d.ts +4 -14
  34. package/lib/types/DataType.d.ts +1 -0
  35. package/lib/types/Entity.d.ts +26 -18
  36. package/lib/types/Entity.js +9 -2
  37. package/lib/types/Exception.d.ts +6 -1
  38. package/lib/types/Exception.js +30 -13
  39. package/lib/types/RowStore.d.ts +2 -13
  40. package/lib/types/RowStore.js +1 -6
  41. package/lib/types/Storage.d.ts +1 -0
  42. package/lib/types/Trigger.d.ts +32 -48
  43. package/lib/types/Trigger.js +24 -9
  44. package/lib/types/Watcher.d.ts +7 -8
  45. package/lib/types/schema/DataTypes.d.ts +1 -1
  46. package/lib/utils/SimpleConnector.d.ts +9 -8
  47. package/lib/utils/SimpleConnector.js +4 -5
  48. package/lib/utils/random/random.d.ts +1 -0
  49. package/lib/utils/random/random.js +24 -0
  50. package/lib/utils/random/random.mp.d.ts +1 -0
  51. package/lib/utils/random/random.mp.js +25 -0
  52. package/lib/utils/random/random.web.d.ts +1 -0
  53. package/lib/utils/random/random.web.js +17 -0
  54. package/lib/utils/string.d.ts +20 -0
  55. package/lib/utils/string.js +60 -1
  56. package/lib/utils/uuid.d.ts +10 -0
  57. package/lib/utils/uuid.js +172 -1
  58. package/lib/utils/validator.d.ts +2 -2
  59. package/lib/utils/validator.js +5 -5
  60. package/package.json +5 -3
  61. package/lib/OakError.d.ts +0 -7
  62. package/lib/OakError.js +0 -15
  63. package/lib/compiler/utils.d.ts +0 -2
  64. package/lib/compiler/utils.js +0 -11
  65. package/lib/entities/Action.d.ts +0 -12
  66. package/lib/entities/Action.js +0 -17
  67. package/lib/entities/Ooperation.d.ts +0 -12
  68. package/lib/entities/Ooperation.js +0 -17
  69. package/lib/entities/Update.d.ts +0 -9
  70. package/lib/entities/Update.js +0 -44
  71. package/lib/entities/Uupdate.d.ts +0 -9
  72. package/lib/entities/Uupdate.js +0 -44
  73. package/lib/store/UniversalContext.d.ts +0 -32
  74. package/lib/store/action.d.ts +0 -6
  75. package/lib/store/action.js +0 -14
  76. package/lib/store/projection.d.ts +0 -7
  77. package/lib/store/projection.js +0 -211
  78. package/lib/store/watchers.d.ts +0 -2
  79. package/lib/store/watchers.js +0 -32
@@ -5,7 +5,9 @@ var tslib_1 = require("tslib");
5
5
  var assert_1 = tslib_1.__importDefault(require("assert"));
6
6
  var lodash_1 = require("../utils/lodash");
7
7
  var filter_1 = require("../store/filter");
8
- var Trigger_1 = require("../types/Trigger");
8
+ var Entity_1 = require("../types/Entity");
9
+ var SyncRowStore_1 = require("./SyncRowStore");
10
+ var checker_1 = require("./checker");
9
11
  /**
10
12
  * update可能会传入多种不同的action,此时都需要检查update trigger
11
13
  */
@@ -17,36 +19,35 @@ var Trigger_1 = require("../types/Trigger");
17
19
  'count': 'select',
18
20
  'stat': 'select',
19
21
  }; */
20
- var TriggerExecutor = /** @class */ (function (_super) {
21
- tslib_1.__extends(TriggerExecutor, _super);
22
+ var TriggerExecutor = /** @class */ (function () {
22
23
  function TriggerExecutor(contextBuilder, logger) {
23
24
  if (logger === void 0) { logger = console; }
24
- var _this = _super.call(this) || this;
25
- _this.contextBuilder = contextBuilder;
26
- _this.logger = logger;
27
- _this.triggerMap = {};
28
- _this.triggerNameMap = {};
29
- _this.volatileEntities = [];
30
- _this.counter = 0;
31
- return _this;
25
+ this.contextBuilder = contextBuilder;
26
+ this.logger = logger;
27
+ this.triggerMap = {};
28
+ this.triggerNameMap = {};
29
+ this.volatileEntities = [];
30
+ this.counter = 0;
32
31
  }
33
32
  TriggerExecutor.prototype.registerChecker = function (checker) {
34
- var entity = checker.entity, action = checker.action, checkFn = checker.checker, type = checker.type;
33
+ var entity = checker.entity, action = checker.action, type = checker.type;
35
34
  var triggerName = "".concat(String(entity)).concat(action, "\u6743\u9650\u68C0\u67E5-").concat(this.counter++);
35
+ var fn = (0, checker_1.translateCheckerInAsyncContext)(checker);
36
36
  var trigger = {
37
37
  checkerType: type,
38
38
  name: triggerName,
39
+ priority: checker.priority || 2,
39
40
  entity: entity,
40
41
  action: action,
41
- fn: checkFn,
42
+ fn: fn,
42
43
  when: 'before',
43
44
  };
44
45
  this.registerTrigger(trigger);
45
46
  };
46
47
  TriggerExecutor.prototype.getCheckers = function (entity, action, checkerTypes) {
47
48
  var _a;
48
- 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).includes(action))
49
- && (!checkerTypes || trigger.checkerType && checkerTypes.includes(trigger.checkerType)); }));
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))); }));
50
51
  return triggers;
51
52
  };
52
53
  TriggerExecutor.prototype.registerTrigger = function (trigger) {
@@ -56,6 +57,9 @@ var TriggerExecutor = /** @class */ (function (_super) {
56
57
  if (this.triggerNameMap.hasOwnProperty(trigger.name)) {
57
58
  throw new Error("\u4E0D\u53EF\u6709\u540C\u540D\u7684\u89E6\u53D1\u5668\u300C".concat(trigger.name, "\u300D"));
58
59
  }
60
+ if (typeof trigger.priority !== 'number') {
61
+ trigger.priority = 1; // 默认最低
62
+ }
59
63
  Object.assign(this.triggerNameMap, (_a = {},
60
64
  _a[trigger.name] = trigger,
61
65
  _a));
@@ -63,7 +67,14 @@ var TriggerExecutor = /** @class */ (function (_super) {
63
67
  var _a, _b, _c;
64
68
  var triggers = _this.triggerMap[trigger.entity] && _this.triggerMap[trigger.entity][action];
65
69
  if (triggers) {
66
- triggers.push(trigger);
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);
67
78
  }
68
79
  else if (_this.triggerMap[trigger.entity]) {
69
80
  Object.assign(_this.triggerMap[trigger.entity], (_a = {},
@@ -109,13 +120,13 @@ var TriggerExecutor = /** @class */ (function (_super) {
109
120
  };
110
121
  TriggerExecutor.prototype.preCommitTrigger = function (entity, operation, trigger, context, option) {
111
122
  return tslib_1.__awaiter(this, void 0, void 0, function () {
112
- var _a, filter, filter2, rowStore, count, _b, _c, _d, _e;
113
- var _f, _g;
114
- return tslib_1.__generator(this, function (_h) {
115
- switch (_h.label) {
123
+ var _a, filter, filter2, count;
124
+ var _b;
125
+ return tslib_1.__generator(this, function (_c) {
126
+ switch (_c.label) {
116
127
  case 0:
117
128
  (0, assert_1.default)(trigger.action !== 'select');
118
- if (!(trigger.strict === 'makeSure')) return [3 /*break*/, 6];
129
+ if (!(trigger.strict === 'makeSure')) return [3 /*break*/, 5];
119
130
  _a = operation.action;
120
131
  switch (_a) {
121
132
  case 'create': return [3 /*break*/, 1];
@@ -123,12 +134,12 @@ var TriggerExecutor = /** @class */ (function (_super) {
123
134
  return [3 /*break*/, 2];
124
135
  case 1:
125
136
  {
126
- if (operation.data.hasOwnProperty(Trigger_1.Executor.dataAttr) || operation.data.hasOwnProperty(Trigger_1.Executor.timestampAttr)) {
137
+ if (operation.data.hasOwnProperty(Entity_1.TriggerDataAttribute) || operation.data.hasOwnProperty(Entity_1.TriggerTimestampAttribute)) {
127
138
  throw new Error('同一行数据上不能存在两个跨事务约束');
128
139
  }
129
140
  return [3 /*break*/, 4];
130
141
  }
131
- _h.label = 2;
142
+ _c.label = 2;
132
143
  case 2:
133
144
  filter = operation.filter;
134
145
  filter2 = (0, filter_1.addFilterSegment)({
@@ -145,131 +156,116 @@ var TriggerExecutor = /** @class */ (function (_super) {
145
156
  }
146
157
  ],
147
158
  }, filter);
148
- rowStore = context.rowStore;
149
- return [4 /*yield*/, rowStore.count(entity, {
159
+ return [4 /*yield*/, context.count(entity, {
150
160
  filter: filter2
151
- }, context, {})];
161
+ }, {})];
152
162
  case 3:
153
- count = _h.sent();
163
+ count = _c.sent();
154
164
  if (count > 0) {
155
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"));
156
166
  }
157
167
  return [3 /*break*/, 4];
158
168
  case 4:
159
- _c = (_b = Object).assign;
160
- _d = [operation.data];
161
- _f = {};
162
- _e = Trigger_1.Executor.dataAttr;
163
- _g = {
164
- name: trigger.name,
165
- operation: operation
166
- };
167
- return [4 /*yield*/, context.toString()];
168
- case 5:
169
- _c.apply(_b, _d.concat([(_f[_e] = (_g.cxtStr = _h.sent(),
170
- _g.params = option,
171
- _g),
172
- _f[Trigger_1.Executor.timestampAttr] = Date.now(),
173
- _f)]));
174
- _h.label = 6;
175
- case 6: return [2 /*return*/];
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*/];
176
180
  }
177
181
  });
178
182
  });
179
183
  };
180
184
  TriggerExecutor.prototype.preOperation = function (entity, operation, context, option) {
181
- var _a;
182
- return tslib_1.__awaiter(this, void 0, void 0, function () {
183
- var action, triggers, preTriggers, preTriggers_1, preTriggers_1_1, trigger, number, e_1_1, commitTriggers, commitTriggers_1, commitTriggers_1_1, trigger, e_2_1;
184
- var e_1, _b, e_2, _c;
185
- return tslib_1.__generator(this, function (_d) {
186
- switch (_d.label) {
187
- case 0:
188
- action = operation.action;
189
- 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 === operation.action || (trigger.action).includes(operation.action); }));
190
- if (!triggers) return [3 /*break*/, 16];
191
- preTriggers = triggers.filter(function (ele) { return ele.when === 'before' && (!ele.check || ele.check(operation)); });
192
- _d.label = 1;
193
- case 1:
194
- _d.trys.push([1, 6, 7, 8]);
195
- preTriggers_1 = tslib_1.__values(preTriggers), preTriggers_1_1 = preTriggers_1.next();
196
- _d.label = 2;
197
- case 2:
198
- if (!!preTriggers_1_1.done) return [3 /*break*/, 5];
199
- trigger = preTriggers_1_1.value;
200
- return [4 /*yield*/, trigger.fn({ operation: operation }, context, option)];
201
- case 3:
202
- number = _d.sent();
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);
203
198
  if (number > 0) {
204
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"));
205
200
  }
206
- _d.label = 4;
207
- case 4:
208
- preTriggers_1_1 = preTriggers_1.next();
209
- return [3 /*break*/, 2];
210
- case 5: return [3 /*break*/, 8];
211
- case 6:
212
- e_1_1 = _d.sent();
213
- e_1 = { error: e_1_1 };
214
- return [3 /*break*/, 8];
215
- case 7:
216
- try {
217
- if (preTriggers_1_1 && !preTriggers_1_1.done && (_b = preTriggers_1.return)) _b.call(preTriggers_1);
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)];
218
230
  }
219
- finally { if (e_1) throw e_1.error; }
220
- return [7 /*endfinally*/];
221
- case 8:
222
- commitTriggers = triggers.filter(function (ele) { return ele.when === 'commit' && (!ele.check || ele.check(operation)); });
223
- _d.label = 9;
224
- case 9:
225
- _d.trys.push([9, 14, 15, 16]);
226
- commitTriggers_1 = tslib_1.__values(commitTriggers), commitTriggers_1_1 = commitTriggers_1.next();
227
- _d.label = 10;
228
- case 10:
229
- if (!!commitTriggers_1_1.done) return [3 /*break*/, 13];
230
- trigger = commitTriggers_1_1.value;
231
- return [4 /*yield*/, this.preCommitTrigger(entity, operation, trigger, context, option)];
232
- case 11:
233
- _d.sent();
234
- _d.label = 12;
235
- case 12:
236
- commitTriggers_1_1 = commitTriggers_1.next();
237
- return [3 /*break*/, 10];
238
- case 13: return [3 /*break*/, 16];
239
- case 14:
240
- e_2_1 = _d.sent();
241
- e_2 = { error: e_2_1 };
242
- return [3 /*break*/, 16];
243
- case 15:
244
- try {
245
- if (commitTriggers_1_1 && !commitTriggers_1_1.done && (_c = commitTriggers_1.return)) _c.call(commitTriggers_1);
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
246
  }
247
- finally { if (e_2) throw e_2.error; }
248
- return [7 /*endfinally*/];
249
- case 16: return [2 /*return*/];
250
- }
251
- });
252
- });
247
+ });
248
+ }); };
249
+ return execPreTrigger_1(0)
250
+ .then(function () { return execCommitTrigger_1(0); });
251
+ }
252
+ }
253
253
  };
254
- TriggerExecutor.prototype.onCommit = function (trigger, operation, cxtStr, option) {
254
+ TriggerExecutor.prototype.onCommit = function (trigger, operation, context, option) {
255
255
  var _this = this;
256
256
  return function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
257
- var context, number, rowStore, filter;
257
+ var number, filter;
258
258
  return tslib_1.__generator(this, function (_a) {
259
259
  switch (_a.label) {
260
- case 0: return [4 /*yield*/, this.contextBuilder(cxtStr)];
260
+ case 0: return [4 /*yield*/, context.begin()];
261
261
  case 1:
262
- context = _a.sent();
263
- return [4 /*yield*/, context.begin()];
264
- case 2:
265
262
  _a.sent();
266
263
  return [4 /*yield*/, trigger.fn({
267
264
  operation: operation,
268
265
  }, context, option)];
269
- case 3:
266
+ case 2:
270
267
  number = _a.sent();
271
- rowStore = context.rowStore;
272
- if (!(trigger.strict === 'makeSure')) return [3 /*break*/, 5];
268
+ if (!(trigger.strict === 'makeSure')) return [3 /*break*/, 4];
273
269
  filter = {};
274
270
  if (operation.action === 'create') {
275
271
  filter = operation.data instanceof Array ? {
@@ -287,15 +283,15 @@ var TriggerExecutor = /** @class */ (function (_super) {
287
283
  else if (operation.filter) {
288
284
  Object.assign(filter, { filter: operation.filter });
289
285
  }
290
- return [4 /*yield*/, rowStore.operate(trigger.entity, tslib_1.__assign({ id: 'aaa', action: 'update', data: {
286
+ return [4 /*yield*/, context.operate(trigger.entity, tslib_1.__assign({ id: 'aaa', action: 'update', data: {
291
287
  $$triggerTimestamp$$: null,
292
288
  $$triggerData$$: null,
293
- } }, filter /** as Filter<'update', DeduceFilter<ED[T]['Schema']>> */), context, {})];
294
- case 4:
289
+ } }, filter /** as Filter<'update', DeduceFilter<ED[T]['Schema']>> */), {})];
290
+ case 3:
295
291
  _a.sent();
296
- _a.label = 5;
297
- case 5: return [4 /*yield*/, context.commit()];
298
- case 6:
292
+ _a.label = 4;
293
+ case 4: return [4 /*yield*/, context.commit()];
294
+ case 5:
299
295
  _a.sent();
300
296
  return [2 /*return*/];
301
297
  }
@@ -304,117 +300,105 @@ var TriggerExecutor = /** @class */ (function (_super) {
304
300
  };
305
301
  TriggerExecutor.prototype.postCommitTrigger = function (operation, trigger, context, option) {
306
302
  return tslib_1.__awaiter(this, void 0, void 0, function () {
307
- var _a, _b, _c, _d, _e;
308
- return tslib_1.__generator(this, function (_f) {
309
- switch (_f.label) {
310
- case 0:
311
- _b = (_a = context).on;
312
- _c = ['commit'];
313
- _d = this.onCommit;
314
- _e = [trigger, operation];
315
- return [4 /*yield*/, context.toString()];
316
- case 1:
317
- _b.apply(_a, _c.concat([_d.apply(this, _e.concat([_f.sent(), option]))]));
318
- return [2 /*return*/];
319
- }
303
+ return tslib_1.__generator(this, function (_a) {
304
+ context.on('commit', this.onCommit(trigger, operation, context, option));
305
+ return [2 /*return*/];
320
306
  });
321
307
  });
322
308
  };
323
309
  TriggerExecutor.prototype.postOperation = function (entity, operation, context, option, result) {
324
- var _a;
325
- return tslib_1.__awaiter(this, void 0, void 0, function () {
326
- var action, triggers, postTriggers, postTriggers_1, postTriggers_1_1, trigger, number, e_3_1, commitTriggers, commitTriggers_2, commitTriggers_2_1, trigger, e_4_1;
327
- var e_3, _b, e_4, _c;
328
- return tslib_1.__generator(this, function (_d) {
329
- switch (_d.label) {
330
- case 0:
331
- action = operation.action;
332
- 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 === operation.action || (trigger.action).includes(operation.action); }));
333
- if (!triggers) return [3 /*break*/, 16];
334
- postTriggers = triggers.filter(function (ele) { return ele.when === 'after' && (!ele.check || ele.check(operation)); });
335
- _d.label = 1;
336
- case 1:
337
- _d.trys.push([1, 6, 7, 8]);
338
- postTriggers_1 = tslib_1.__values(postTriggers), postTriggers_1_1 = postTriggers_1.next();
339
- _d.label = 2;
340
- case 2:
341
- if (!!postTriggers_1_1.done) return [3 /*break*/, 5];
342
- trigger = postTriggers_1_1.value;
343
- return [4 /*yield*/, trigger.fn({
344
- operation: operation,
345
- result: result,
346
- }, context, option)];
347
- case 3:
348
- number = _d.sent();
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);
349
326
  if (number > 0) {
350
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"));
351
328
  }
352
- _d.label = 4;
353
- case 4:
354
- postTriggers_1_1 = postTriggers_1.next();
355
- return [3 /*break*/, 2];
356
- case 5: return [3 /*break*/, 8];
357
- case 6:
358
- e_3_1 = _d.sent();
359
- e_3 = { error: e_3_1 };
360
- return [3 /*break*/, 8];
361
- case 7:
362
- try {
363
- if (postTriggers_1_1 && !postTriggers_1_1.done && (_b = postTriggers_1.return)) _b.call(postTriggers_1);
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)];
364
361
  }
365
- finally { if (e_3) throw e_3.error; }
366
- return [7 /*endfinally*/];
367
- case 8:
368
- commitTriggers = triggers.filter(function (ele) { return ele.when === 'commit' && (!ele.check || ele.check(operation)); });
369
- _d.label = 9;
370
- case 9:
371
- _d.trys.push([9, 14, 15, 16]);
372
- commitTriggers_2 = tslib_1.__values(commitTriggers), commitTriggers_2_1 = commitTriggers_2.next();
373
- _d.label = 10;
374
- case 10:
375
- if (!!commitTriggers_2_1.done) return [3 /*break*/, 13];
376
- trigger = commitTriggers_2_1.value;
377
- return [4 /*yield*/, this.postCommitTrigger(operation, trigger, context, option)];
378
- case 11:
379
- _d.sent();
380
- _d.label = 12;
381
- case 12:
382
- commitTriggers_2_1 = commitTriggers_2.next();
383
- return [3 /*break*/, 10];
384
- case 13: return [3 /*break*/, 16];
385
- case 14:
386
- e_4_1 = _d.sent();
387
- e_4 = { error: e_4_1 };
388
- return [3 /*break*/, 16];
389
- case 15:
390
- try {
391
- if (commitTriggers_2_1 && !commitTriggers_2_1.done && (_c = commitTriggers_2.return)) _c.call(commitTriggers_2);
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)];
392
377
  }
393
- finally { if (e_4) throw e_4.error; }
394
- return [7 /*endfinally*/];
395
- case 16: return [2 /*return*/];
396
- }
397
- });
398
- });
378
+ });
379
+ }); };
380
+ return execPostTrigger_1(0)
381
+ .then(function () { return execCommitTrigger_2(0); });
382
+ }
383
+ }
399
384
  };
400
385
  TriggerExecutor.prototype.checkpoint = function (context, timestamp) {
401
386
  return tslib_1.__awaiter(this, void 0, void 0, function () {
402
- var result, rowStore, _a, _b, entity, rows, rows_1, rows_1_1, row, $$triggerData$$, _c, name_1, operation, cxtStr, params, trigger, e_5_1, e_6_1;
403
- var e_6, _d, e_5, _e;
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;
404
389
  return tslib_1.__generator(this, function (_f) {
405
390
  switch (_f.label) {
406
391
  case 0:
407
392
  result = 0;
408
- rowStore = context.rowStore;
409
393
  _f.label = 1;
410
394
  case 1:
411
- _f.trys.push([1, 13, 14, 15]);
395
+ _f.trys.push([1, 14, 15, 16]);
412
396
  _a = tslib_1.__values(this.volatileEntities), _b = _a.next();
413
397
  _f.label = 2;
414
398
  case 2:
415
- if (!!_b.done) return [3 /*break*/, 12];
399
+ if (!!_b.done) return [3 /*break*/, 13];
416
400
  entity = _b.value;
417
- return [4 /*yield*/, rowStore.select(entity, {
401
+ return [4 /*yield*/, context.select(entity, {
418
402
  data: {
419
403
  id: 1,
420
404
  $$triggerData$$: 1,
@@ -424,60 +408,63 @@ var TriggerExecutor = /** @class */ (function (_super) {
424
408
  $gt: timestamp,
425
409
  }
426
410
  },
427
- }, context, {
411
+ }, {
428
412
  dontCollect: true,
429
413
  forUpdate: true,
430
414
  })];
431
415
  case 3:
432
- rows = (_f.sent()).result;
416
+ rows = _f.sent();
433
417
  _f.label = 4;
434
418
  case 4:
435
- _f.trys.push([4, 9, 10, 11]);
436
- rows_1 = (e_5 = void 0, tslib_1.__values(rows)), rows_1_1 = rows_1.next();
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();
437
421
  _f.label = 5;
438
422
  case 5:
439
- if (!!rows_1_1.done) return [3 /*break*/, 8];
423
+ if (!!rows_1_1.done) return [3 /*break*/, 9];
440
424
  row = rows_1_1.value;
441
425
  $$triggerData$$ = row.$$triggerData$$;
442
426
  _c = $$triggerData$$, name_1 = _c.name, operation = _c.operation, cxtStr = _c.cxtStr, params = _c.params;
443
427
  trigger = this.triggerNameMap[name_1];
444
- return [4 /*yield*/, this.onCommit(trigger, operation, cxtStr, params)()];
428
+ return [4 /*yield*/, this.contextBuilder(cxtStr)];
445
429
  case 6:
446
- _f.sent();
447
- _f.label = 7;
430
+ context_1 = _f.sent();
431
+ return [4 /*yield*/, this.onCommit(trigger, operation, context_1, params)()];
448
432
  case 7:
433
+ _f.sent();
434
+ _f.label = 8;
435
+ case 8:
449
436
  rows_1_1 = rows_1.next();
450
437
  return [3 /*break*/, 5];
451
- case 8: return [3 /*break*/, 11];
452
- case 9:
453
- e_5_1 = _f.sent();
454
- e_5 = { error: e_5_1 };
455
- return [3 /*break*/, 11];
438
+ case 9: return [3 /*break*/, 12];
456
439
  case 10:
440
+ e_3_1 = _f.sent();
441
+ e_3 = { error: e_3_1 };
442
+ return [3 /*break*/, 12];
443
+ case 11:
457
444
  try {
458
445
  if (rows_1_1 && !rows_1_1.done && (_e = rows_1.return)) _e.call(rows_1);
459
446
  }
460
- finally { if (e_5) throw e_5.error; }
447
+ finally { if (e_3) throw e_3.error; }
461
448
  return [7 /*endfinally*/];
462
- case 11:
449
+ case 12:
463
450
  _b = _a.next();
464
451
  return [3 /*break*/, 2];
465
- case 12: return [3 /*break*/, 15];
466
- case 13:
467
- e_6_1 = _f.sent();
468
- e_6 = { error: e_6_1 };
469
- return [3 /*break*/, 15];
452
+ case 13: return [3 /*break*/, 16];
470
453
  case 14:
454
+ e_4_1 = _f.sent();
455
+ e_4 = { error: e_4_1 };
456
+ return [3 /*break*/, 16];
457
+ case 15:
471
458
  try {
472
459
  if (_b && !_b.done && (_d = _a.return)) _d.call(_a);
473
460
  }
474
- finally { if (e_6) throw e_6.error; }
461
+ finally { if (e_4) throw e_4.error; }
475
462
  return [7 /*endfinally*/];
476
- case 15: return [2 /*return*/, result];
463
+ case 16: return [2 /*return*/, result];
477
464
  }
478
465
  });
479
466
  });
480
467
  };
481
468
  return TriggerExecutor;
482
- }(Trigger_1.Executor));
469
+ }());
483
470
  exports.TriggerExecutor = TriggerExecutor;