oak-domain 1.1.14 → 2.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.
- package/lib/base-app-domain/Modi/Schema.d.ts +22 -22
- package/lib/base-app-domain/ModiEntity/Schema.d.ts +17 -17
- package/lib/base-app-domain/Oper/Schema.d.ts +17 -17
- package/lib/base-app-domain/OperEntity/Schema.d.ts +18 -18
- package/lib/base-app-domain/User/Schema.d.ts +15 -15
- package/lib/checkers/index.d.ts +4 -2
- package/lib/compiler/schemalBuilder.js +10 -10
- package/lib/store/AsyncRowStore.d.ts +45 -0
- package/lib/store/{UniversalContext.js → AsyncRowStore.js} +39 -29
- package/lib/store/CascadeStore.d.ts +46 -20
- package/lib/store/CascadeStore.js +954 -995
- package/lib/store/SyncRowStore.d.ts +26 -0
- package/lib/store/SyncRowStore.js +45 -0
- package/lib/store/TriggerExecutor.d.ts +14 -14
- package/lib/store/TriggerExecutor.js +225 -238
- package/lib/store/actionDef.d.ts +5 -4
- package/lib/store/actionDef.js +44 -134
- package/lib/store/checker.d.ts +6 -0
- package/lib/store/checker.js +165 -0
- package/lib/store/filter.d.ts +30 -0
- package/lib/store/filter.js +571 -2
- package/lib/store/modi.d.ts +7 -6
- package/lib/store/modi.js +35 -46
- package/lib/store/relation.d.ts +1 -1
- package/lib/triggers/index.d.ts +4 -3
- package/lib/triggers/modi.d.ts +2 -2
- package/lib/triggers/modi.js +5 -5
- package/lib/types/AppLoader.d.ts +3 -3
- package/lib/types/Aspect.d.ts +3 -3
- package/lib/types/Auth.d.ts +25 -22
- package/lib/types/Connector.d.ts +7 -7
- package/lib/types/Context.d.ts +4 -14
- package/lib/types/Entity.d.ts +20 -15
- package/lib/types/Entity.js +9 -2
- package/lib/types/Exception.js +11 -11
- package/lib/types/RowStore.d.ts +2 -13
- package/lib/types/RowStore.js +1 -6
- package/lib/types/Trigger.d.ts +32 -48
- package/lib/types/Trigger.js +24 -9
- package/lib/types/Watcher.d.ts +7 -8
- package/lib/utils/SimpleConnector.d.ts +9 -8
- package/lib/utils/SimpleConnector.js +4 -5
- package/lib/utils/random/random.d.ts +1 -0
- package/lib/utils/random/random.js +24 -0
- package/lib/utils/random/random.mp.d.ts +1 -0
- package/lib/utils/random/random.mp.js +25 -0
- package/lib/utils/random/random.web.d.ts +1 -0
- package/lib/utils/random/random.web.js +17 -0
- package/lib/utils/string.d.ts +20 -0
- package/lib/utils/string.js +60 -1
- package/lib/utils/uuid.d.ts +10 -0
- package/lib/utils/uuid.js +172 -1
- package/lib/utils/validator.js +1 -1
- package/package.json +7 -4
- package/lib/OakError.d.ts +0 -7
- package/lib/OakError.js +0 -15
- package/lib/compiler/utils.d.ts +0 -2
- package/lib/compiler/utils.js +0 -11
- package/lib/entities/Action.d.ts +0 -12
- package/lib/entities/Action.js +0 -17
- package/lib/entities/Ooperation.d.ts +0 -12
- package/lib/entities/Ooperation.js +0 -17
- package/lib/entities/Update.d.ts +0 -9
- package/lib/entities/Update.js +0 -44
- package/lib/entities/Uupdate.d.ts +0 -9
- package/lib/entities/Uupdate.js +0 -44
- package/lib/store/UniversalContext.d.ts +0 -32
- package/lib/store/action.d.ts +0 -6
- package/lib/store/action.js +0 -14
- package/lib/store/projection.d.ts +0 -7
- package/lib/store/projection.js +0 -211
- package/lib/store/watchers.d.ts +0 -2
- 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
|
|
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 (
|
|
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
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
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,
|
|
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:
|
|
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 ||
|
|
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
|
-
|
|
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,
|
|
113
|
-
var
|
|
114
|
-
return tslib_1.__generator(this, function (
|
|
115
|
-
switch (
|
|
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*/,
|
|
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(
|
|
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
|
-
|
|
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
|
-
|
|
149
|
-
return [4 /*yield*/, rowStore.count(entity, {
|
|
159
|
+
return [4 /*yield*/, context.count(entity, {
|
|
150
160
|
filter: filter2
|
|
151
|
-
},
|
|
161
|
+
}, {})];
|
|
152
162
|
case 3:
|
|
153
|
-
count =
|
|
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
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
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
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
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
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
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
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
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
|
-
|
|
248
|
-
|
|
249
|
-
|
|
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,
|
|
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
|
|
257
|
+
var number, filter;
|
|
258
258
|
return tslib_1.__generator(this, function (_a) {
|
|
259
259
|
switch (_a.label) {
|
|
260
|
-
case 0: return [4 /*yield*/,
|
|
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
|
|
266
|
+
case 2:
|
|
270
267
|
number = _a.sent();
|
|
271
|
-
|
|
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*/,
|
|
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']>> */),
|
|
294
|
-
case
|
|
289
|
+
} }, filter /** as Filter<'update', DeduceFilter<ED[T]['Schema']>> */), {})];
|
|
290
|
+
case 3:
|
|
295
291
|
_a.sent();
|
|
296
|
-
_a.label =
|
|
297
|
-
case
|
|
298
|
-
case
|
|
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
|
-
|
|
308
|
-
|
|
309
|
-
|
|
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
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
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
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
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
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
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
|
-
|
|
394
|
-
|
|
395
|
-
|
|
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,
|
|
403
|
-
var
|
|
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,
|
|
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*/,
|
|
399
|
+
if (!!_b.done) return [3 /*break*/, 13];
|
|
416
400
|
entity = _b.value;
|
|
417
|
-
return [4 /*yield*/,
|
|
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
|
-
},
|
|
411
|
+
}, {
|
|
428
412
|
dontCollect: true,
|
|
429
413
|
forUpdate: true,
|
|
430
414
|
})];
|
|
431
415
|
case 3:
|
|
432
|
-
rows =
|
|
416
|
+
rows = _f.sent();
|
|
433
417
|
_f.label = 4;
|
|
434
418
|
case 4:
|
|
435
|
-
_f.trys.push([4,
|
|
436
|
-
rows_1 = (
|
|
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*/,
|
|
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.
|
|
428
|
+
return [4 /*yield*/, this.contextBuilder(cxtStr)];
|
|
445
429
|
case 6:
|
|
446
|
-
_f.sent();
|
|
447
|
-
|
|
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
|
|
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 (
|
|
447
|
+
finally { if (e_3) throw e_3.error; }
|
|
461
448
|
return [7 /*endfinally*/];
|
|
462
|
-
case
|
|
449
|
+
case 12:
|
|
463
450
|
_b = _a.next();
|
|
464
451
|
return [3 /*break*/, 2];
|
|
465
|
-
case
|
|
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 (
|
|
461
|
+
finally { if (e_4) throw e_4.error; }
|
|
475
462
|
return [7 /*endfinally*/];
|
|
476
|
-
case
|
|
463
|
+
case 16: return [2 /*return*/, result];
|
|
477
464
|
}
|
|
478
465
|
});
|
|
479
466
|
});
|
|
480
467
|
};
|
|
481
468
|
return TriggerExecutor;
|
|
482
|
-
}(
|
|
469
|
+
}());
|
|
483
470
|
exports.TriggerExecutor = TriggerExecutor;
|