oak-domain 2.6.9 → 3.0.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 (124) hide show
  1. package/lib/actions/action.d.ts +1 -1
  2. package/lib/actions/action.js +2 -2
  3. package/lib/base-app-domain/ActionAuth/Schema.d.ts +25 -21
  4. package/lib/base-app-domain/ActionAuth/Storage.js +6 -13
  5. package/lib/base-app-domain/ActionDefDict.d.ts +1 -0
  6. package/lib/base-app-domain/ActionDefDict.js +3 -1
  7. package/lib/base-app-domain/EntityDict.d.ts +2 -0
  8. package/lib/base-app-domain/I18n/Schema.d.ts +129 -0
  9. package/lib/base-app-domain/I18n/Schema.js +2 -0
  10. package/lib/base-app-domain/I18n/Storage.d.ts +3 -0
  11. package/lib/base-app-domain/I18n/Storage.js +59 -0
  12. package/lib/base-app-domain/Modi/Action.d.ts +1 -1
  13. package/lib/base-app-domain/Modi/Schema.d.ts +10 -9
  14. package/lib/base-app-domain/ModiEntity/Schema.d.ts +42 -28
  15. package/lib/base-app-domain/ModiEntity/Storage.js +1 -1
  16. package/lib/base-app-domain/Oper/Schema.d.ts +15 -13
  17. package/lib/base-app-domain/OperEntity/Schema.d.ts +41 -27
  18. package/lib/base-app-domain/OperEntity/Storage.js +1 -1
  19. package/lib/base-app-domain/Relation/Schema.d.ts +50 -22
  20. package/lib/base-app-domain/Relation/Storage.js +1 -4
  21. package/lib/base-app-domain/Relation.d.ts +10 -0
  22. package/lib/base-app-domain/Relation.js +10 -0
  23. package/lib/base-app-domain/RelationAuth/Schema.d.ts +67 -43
  24. package/lib/base-app-domain/RelationAuth/Storage.js +9 -12
  25. package/lib/base-app-domain/Storage.js +20 -18
  26. package/lib/base-app-domain/User/Action.d.ts +1 -1
  27. package/lib/base-app-domain/User/Schema.d.ts +20 -14
  28. package/lib/base-app-domain/User/Storage.js +1 -2
  29. package/lib/base-app-domain/UserEntityGrant/Action.d.ts +5 -0
  30. package/lib/base-app-domain/UserEntityGrant/Action.js +5 -0
  31. package/lib/base-app-domain/UserEntityGrant/Schema.d.ts +53 -17
  32. package/lib/base-app-domain/UserEntityGrant/Storage.js +5 -7
  33. package/lib/base-app-domain/UserRelation/Schema.d.ts +35 -16
  34. package/lib/base-app-domain/UserRelation/Storage.js +21 -1
  35. package/lib/base-app-domain/_SubQuery.d.ts +40 -4
  36. package/lib/base-app-domain/index.d.ts +1 -0
  37. package/lib/base-app-domain/index.js +1 -0
  38. package/lib/checkers/index.d.ts +2 -2
  39. package/lib/checkers/index.js +2 -5
  40. package/lib/compiler/env.d.ts +3 -1
  41. package/lib/compiler/env.js +12 -2
  42. package/lib/compiler/localeBuilder.d.ts +22 -0
  43. package/lib/compiler/localeBuilder.js +169 -0
  44. package/lib/compiler/schemalBuilder.d.ts +9 -0
  45. package/lib/compiler/schemalBuilder.js +774 -362
  46. package/lib/entities/ActionAuth.d.ts +3 -2
  47. package/lib/entities/ActionAuth.js +21 -22
  48. package/lib/entities/I18n.d.ts +9 -0
  49. package/lib/entities/I18n.js +37 -0
  50. package/lib/entities/Modi.js +35 -33
  51. package/lib/entities/ModiEntity.js +12 -10
  52. package/lib/entities/Oper.js +15 -13
  53. package/lib/entities/OperEntity.js +12 -10
  54. package/lib/entities/Relation.d.ts +3 -3
  55. package/lib/entities/Relation.js +27 -25
  56. package/lib/entities/RelationAuth.d.ts +2 -5
  57. package/lib/entities/RelationAuth.js +27 -23
  58. package/lib/entities/User.js +20 -18
  59. package/lib/entities/UserEntityGrant.d.ts +2 -1
  60. package/lib/entities/UserEntityGrant.js +12 -7
  61. package/lib/entities/UserRelation.d.ts +3 -0
  62. package/lib/entities/UserRelation.js +30 -20
  63. package/lib/store/AsyncRowStore.d.ts +3 -0
  64. package/lib/store/AsyncRowStore.js +3 -0
  65. package/lib/store/CascadeStore.d.ts +9 -3
  66. package/lib/store/CascadeStore.js +247 -113
  67. package/lib/store/RelationAuth.d.ts +96 -0
  68. package/lib/store/RelationAuth.js +1307 -0
  69. package/lib/store/TriggerExecutor.d.ts +1 -2
  70. package/lib/store/TriggerExecutor.js +22 -22
  71. package/lib/store/actionAuth.d.ts +4 -0
  72. package/lib/store/actionAuth.js +40 -0
  73. package/lib/store/actionDef.d.ts +4 -3
  74. package/lib/store/actionDef.js +63 -45
  75. package/lib/store/checker.d.ts +2 -9
  76. package/lib/store/checker.js +39 -815
  77. package/lib/store/filter.d.ts +31 -18
  78. package/lib/store/filter.js +1256 -422
  79. package/lib/store/modi.d.ts +1 -1
  80. package/lib/store/modi.js +108 -9
  81. package/lib/store/relation.d.ts +3 -4
  82. package/lib/timers/oper.js +1 -1
  83. package/lib/timers/vaccum.js +2 -2
  84. package/lib/triggers/index.d.ts +2 -3
  85. package/lib/triggers/index.js +2 -5
  86. package/lib/types/Auth.d.ts +5 -0
  87. package/lib/types/DataType.d.ts +3 -0
  88. package/lib/types/Demand.d.ts +11 -0
  89. package/lib/types/Demand.js +2 -1
  90. package/lib/types/Entity.d.ts +10 -3
  91. package/lib/types/EntityDesc.d.ts +8 -0
  92. package/lib/types/EntityDesc.js +2 -0
  93. package/lib/types/Environment.d.ts +57 -0
  94. package/lib/types/Environment.js +2 -0
  95. package/lib/types/Exception.d.ts +6 -0
  96. package/lib/types/Exception.js +25 -1
  97. package/lib/types/Logger.d.ts +1 -0
  98. package/lib/types/Port.d.ts +3 -2
  99. package/lib/types/RowStore.d.ts +6 -4
  100. package/lib/types/Style.d.ts +1 -1
  101. package/lib/types/Trigger.d.ts +4 -5
  102. package/lib/types/Trigger.js +11 -6
  103. package/lib/types/index.d.ts +2 -0
  104. package/lib/types/index.js +2 -0
  105. package/lib/utils/SimpleConnector.js +1 -1
  106. package/lib/utils/money.js +1 -1
  107. package/lib/utils/string.d.ts +6 -0
  108. package/lib/utils/string.js +13 -1
  109. package/lib/utils/uuid.d.ts +5 -0
  110. package/lib/utils/uuid.js +64 -1
  111. package/package.json +3 -3
  112. package/src/entities/ActionAuth.ts +25 -33
  113. package/src/entities/I18n.ts +46 -0
  114. package/src/entities/Modi.ts +36 -36
  115. package/src/entities/ModiEntity.ts +14 -13
  116. package/src/entities/Oper.ts +17 -16
  117. package/src/entities/OperEntity.ts +13 -11
  118. package/src/entities/Relation.ts +31 -37
  119. package/src/entities/RelationAuth.ts +31 -37
  120. package/src/entities/User.ts +24 -21
  121. package/src/entities/UserEntityGrant.ts +16 -14
  122. package/src/entities/UserRelation.ts +33 -27
  123. package/lib/triggers/modi.d.ts +0 -5
  124. package/lib/triggers/modi.js +0 -72
@@ -1,7 +1,7 @@
1
1
  import { EntityDict, OperateOption, SelectOption } from "../types/Entity";
2
2
  import { EntityDict as BaseEntityDict } from '../base-app-domain';
3
3
  import { Logger } from "../types/Logger";
4
- import { Checker, CheckerType } from '../types/Auth';
4
+ import { Checker } from '../types/Auth';
5
5
  import { Trigger } from "../types/Trigger";
6
6
  import { AsyncContext } from './AsyncRowStore';
7
7
  /**
@@ -16,7 +16,6 @@ export declare class TriggerExecutor<ED extends EntityDict & BaseEntityDict> {
16
16
  private contextBuilder;
17
17
  constructor(contextBuilder: (cxtString: string) => Promise<AsyncContext<ED>>, logger?: Logger);
18
18
  registerChecker<T extends keyof ED, Cxt extends AsyncContext<ED>>(checker: Checker<ED, T, Cxt>): void;
19
- getCheckers<T extends keyof ED>(entity: T, action: ED[T]['Action'], checkerTypes?: CheckerType[]): Trigger<ED, T, AsyncContext<ED>>[] | undefined;
20
19
  registerTrigger<T extends keyof ED, Cxt extends AsyncContext<ED>>(trigger: Trigger<ED, T, Cxt>): void;
21
20
  unregisterTrigger<T extends keyof ED, Cxt extends AsyncContext<ED>>(trigger: Trigger<ED, T, Cxt>): void;
22
21
  private preCommitTrigger;
@@ -34,11 +34,10 @@ var TriggerExecutor = /** @class */ (function () {
34
34
  var entity = checker.entity, action = checker.action, type = checker.type, conditionalFilter = checker.conditionalFilter;
35
35
  var triggerName = "".concat(String(entity)).concat(action, "\u6743\u9650\u68C0\u67E5-").concat(this.counter++);
36
36
  var _a = (0, checker_1.translateCheckerInAsyncContext)(checker), fn = _a.fn, when = _a.when;
37
- var priority = type === 'data' ? Trigger_1.DATA_CHECKER_DEFAULT_PRIORITY : Trigger_1.CHECKER_DEFAULT_PRIORITY; // checker的默认优先级最低(前面的trigger可能会赋上一些相应的值)
38
37
  var trigger = {
39
38
  checkerType: type,
40
39
  name: triggerName,
41
- priority: checker.priority || priority,
40
+ priority: checker.priority || Trigger_1.CHECKER_PRIORITY_MAP[type],
42
41
  entity: entity,
43
42
  action: action,
44
43
  fn: fn,
@@ -47,12 +46,13 @@ var TriggerExecutor = /** @class */ (function () {
47
46
  };
48
47
  this.registerTrigger(trigger);
49
48
  };
50
- TriggerExecutor.prototype.getCheckers = function (entity, action, checkerTypes) {
51
- var _a;
52
- 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)
53
- && (!checkerTypes || trigger.checkerType && checkerTypes.includes(trigger.checkerType))); }));
54
- return triggers;
55
- };
49
+ /* getCheckers<T extends keyof ED>(entity: T, action: ED[T]['Action'], checkerTypes?: CheckerType[]) {
50
+ const triggers = this.triggerMap[entity] && this.triggerMap[entity]![action]?.filter(
51
+ trigger => (typeof trigger.action === 'string' && trigger.action === action || trigger.action instanceof Array && trigger.action.includes(action as any)
52
+ && (!checkerTypes || trigger.checkerType && checkerTypes.includes(trigger.checkerType)))
53
+ );
54
+ return triggers;
55
+ } */
56
56
  TriggerExecutor.prototype.registerTrigger = function (trigger) {
57
57
  var _a;
58
58
  var _this = this;
@@ -64,7 +64,7 @@ var TriggerExecutor = /** @class */ (function () {
64
64
  trigger.priority = Trigger_1.TRIGGER_DEFAULT_PRIORITY; // 默认值
65
65
  }
66
66
  else {
67
- (0, assert_1.default)(trigger.priority <= Trigger_1.TRIGGER_MAX_PRIORITY && trigger.priority >= Trigger_1.TRIGGER_MIN_PRIORITY, "trigger\u300C".concat(trigger.name, "\u300D\u7684\u4F18\u5148\u7EA7\u5B9A\u4E49\u8D8A\u754C\uFF0C\u5E94\u8BE5\u5728").concat(Trigger_1.TRIGGER_MIN_PRIORITY, "\u5230").concat(Trigger_1.TRIGGER_MAX_PRIORITY, "\u4E4B\u95F4"));
67
+ (0, assert_1.default)(trigger.priority <= Trigger_1.CHECKER_MAX_PRIORITY && trigger.priority >= Trigger_1.TRIGGER_MIN_PRIORITY, "trigger\u300C".concat(trigger.name, "\u300D\u7684\u4F18\u5148\u7EA7\u5B9A\u4E49\u8D8A\u754C\uFF0C\u5E94\u8BE5\u5728").concat(Trigger_1.TRIGGER_MIN_PRIORITY, "\u5230").concat(Trigger_1.CHECKER_MAX_PRIORITY, "\u4E4B\u95F4"));
68
68
  }
69
69
  if (trigger.filter) {
70
70
  (0, assert_1.default)(typeof trigger.action === 'string' && trigger.action !== 'create'
@@ -153,20 +153,20 @@ var TriggerExecutor = /** @class */ (function () {
153
153
  _c.label = 2;
154
154
  case 2:
155
155
  filter = operation.filter;
156
- filter2 = (0, filter_1.addFilterSegment)({
157
- $or: [
158
- {
159
- $$triggerData$$: {
160
- $exists: true,
156
+ filter2 = (0, filter_1.combineFilters)(entity, context.getSchema(), [{
157
+ $or: [
158
+ {
159
+ $$triggerData$$: {
160
+ $exists: true,
161
+ },
161
162
  },
162
- },
163
- {
164
- $$triggerTimestamp$$: {
165
- $exists: true,
166
- },
167
- }
168
- ],
169
- }, filter);
163
+ {
164
+ $$triggerTimestamp$$: {
165
+ $exists: true,
166
+ },
167
+ }
168
+ ],
169
+ }, filter]);
170
170
  return [4 /*yield*/, context.count(entity, {
171
171
  filter: filter2
172
172
  }, {})];
@@ -0,0 +1,4 @@
1
+ import { EntityDict } from '../types/Entity';
2
+ import { Trigger } from '../types';
3
+ import { AsyncContext } from './AsyncRowStore';
4
+ export declare const triggers: Trigger<EntityDict, 'actionAuth', AsyncContext<EntityDict>>[];
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.triggers = void 0;
4
+ var tslib_1 = require("tslib");
5
+ var uuid_1 = require("../utils/uuid");
6
+ exports.triggers = [
7
+ {
8
+ name: '当actionAuth的deActions被置空后,删除此条数据',
9
+ entity: 'actionAuth',
10
+ action: 'update',
11
+ fn: function (_a, context, option) {
12
+ var operation = _a.operation;
13
+ return tslib_1.__awaiter(void 0, void 0, void 0, function () {
14
+ var data, filter, _b, _c, _d;
15
+ var _e;
16
+ return tslib_1.__generator(this, function (_f) {
17
+ switch (_f.label) {
18
+ case 0:
19
+ data = operation.data, filter = operation.filter;
20
+ if (!(data.deActions && data.deActions.length === 0)) return [3 /*break*/, 3];
21
+ _c = (_b = context).operate;
22
+ _d = ['actionAuth'];
23
+ _e = {};
24
+ return [4 /*yield*/, (0, uuid_1.generateNewIdAsync)()];
25
+ case 1: return [4 /*yield*/, _c.apply(_b, _d.concat([(_e.id = _f.sent(),
26
+ _e.action = 'remove',
27
+ _e.data = {},
28
+ _e.filter = filter,
29
+ _e), option]))];
30
+ case 2:
31
+ _f.sent();
32
+ return [2 /*return*/, 1];
33
+ case 3: return [2 /*return*/, 0];
34
+ }
35
+ });
36
+ });
37
+ },
38
+ when: 'after',
39
+ }
40
+ ];
@@ -1,9 +1,10 @@
1
1
  import { ActionDictOfEntityDict, BBWatcher, Checker, EntityDict, StorageSchema, Trigger } from "../types";
2
2
  import { SyncContext } from "./SyncRowStore";
3
3
  import { AsyncContext } from "./AsyncRowStore";
4
- export declare function getFullProjection<ED extends EntityDict, T extends keyof ED>(entity: T, schema: StorageSchema<ED>): ED[T]["Selection"]["data"];
5
- export declare function analyzeActionDefDict<ED extends EntityDict, Cxt extends SyncContext<ED> | AsyncContext<ED>>(schema: StorageSchema<ED>, actionDefDict: ActionDictOfEntityDict<ED>): {
4
+ import { EntityDict as BaseEntityDict } from '../base-app-domain/EntityDict';
5
+ export declare function getFullProjection<ED extends EntityDict & BaseEntityDict, T extends keyof ED>(entity: T, schema: StorageSchema<ED>): ED[T]["Selection"]["data"];
6
+ export declare function makeIntrinsicCTWs<ED extends EntityDict & BaseEntityDict, Cxt extends AsyncContext<ED>, FrontCxt extends SyncContext<ED>>(schema: StorageSchema<ED>, actionDefDict: ActionDictOfEntityDict<ED>): {
6
7
  triggers: Trigger<ED, keyof ED, Cxt>[];
7
- checkers: Checker<ED, keyof ED, Cxt>[];
8
+ checkers: Checker<ED, keyof ED, Cxt | FrontCxt>[];
8
9
  watchers: BBWatcher<ED, keyof ED>[];
9
10
  };
@@ -1,10 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.analyzeActionDefDict = exports.getFullProjection = void 0;
3
+ exports.makeIntrinsicCTWs = exports.getFullProjection = void 0;
4
4
  var tslib_1 = require("tslib");
5
5
  var types_1 = require("../types");
6
6
  var lodash_1 = require("../utils/lodash");
7
7
  var filter_1 = require("./filter");
8
+ var checkers_1 = require("../checkers");
9
+ var triggers_1 = require("../triggers");
10
+ var actionAuth_1 = require("./actionAuth");
8
11
  function getFullProjection(entity, schema) {
9
12
  var attributes = schema[entity].attributes;
10
13
  var projection = {
@@ -50,34 +53,48 @@ function makeIntrinsicWatchers(schema) {
50
53
  return watchers;
51
54
  }
52
55
  function checkUniqueBetweenRows(rows, uniqAttrs) {
56
+ var e_1, _a, e_2, _b;
53
57
  // 先检查这些行本身之间有无unique冲突
54
- var uniqRows = (0, lodash_1.uniqBy)(rows, function (d) {
55
- var e_1, _a;
56
- var s = '';
57
- try {
58
- for (var uniqAttrs_1 = tslib_1.__values(uniqAttrs), uniqAttrs_1_1 = uniqAttrs_1.next(); !uniqAttrs_1_1.done; uniqAttrs_1_1 = uniqAttrs_1.next()) {
59
- var a = uniqAttrs_1_1.value;
60
- if (d[a] === null || d[a] === undefined) {
61
- s + d.id;
58
+ var dict = {};
59
+ try {
60
+ for (var rows_1 = tslib_1.__values(rows), rows_1_1 = rows_1.next(); !rows_1_1.done; rows_1_1 = rows_1.next()) {
61
+ var row = rows_1_1.value;
62
+ var s = '';
63
+ try {
64
+ for (var uniqAttrs_1 = (e_2 = void 0, tslib_1.__values(uniqAttrs)), uniqAttrs_1_1 = uniqAttrs_1.next(); !uniqAttrs_1_1.done; uniqAttrs_1_1 = uniqAttrs_1.next()) {
65
+ var a = uniqAttrs_1_1.value;
66
+ if (row[a] === null || row[a] === undefined) {
67
+ s + row.id;
68
+ }
69
+ else {
70
+ s + "-".concat(row[a]);
71
+ }
62
72
  }
63
- else {
64
- s + "-".concat(d[a]);
73
+ }
74
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
75
+ finally {
76
+ try {
77
+ if (uniqAttrs_1_1 && !uniqAttrs_1_1.done && (_b = uniqAttrs_1.return)) _b.call(uniqAttrs_1);
65
78
  }
79
+ finally { if (e_2) throw e_2.error; }
66
80
  }
67
- }
68
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
69
- finally {
70
- try {
71
- if (uniqAttrs_1_1 && !uniqAttrs_1_1.done && (_a = uniqAttrs_1.return)) _a.call(uniqAttrs_1);
81
+ if (dict[s]) {
82
+ throw new types_1.OakUniqueViolationException([{
83
+ id: row.id,
84
+ attrs: uniqAttrs,
85
+ }]);
86
+ }
87
+ else {
88
+ dict[s] = 1;
72
89
  }
73
- finally { if (e_1) throw e_1.error; }
74
90
  }
75
- return s;
76
- });
77
- if (uniqRows.length < rows.length) {
78
- throw new types_1.OakUniqueViolationException([{
79
- attrs: uniqAttrs,
80
- }]);
91
+ }
92
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
93
+ finally {
94
+ try {
95
+ if (rows_1_1 && !rows_1_1.done && (_a = rows_1.return)) _a.call(rows_1);
96
+ }
97
+ finally { if (e_1) throw e_1.error; }
81
98
  }
82
99
  }
83
100
  function checkCountLessThan(count, uniqAttrs, than, id) {
@@ -110,14 +127,14 @@ function checkUnique(entity, row, context, uniqAttrs, extraFilter) {
110
127
  // 说明有null值,不需要检查约束
111
128
  return;
112
129
  }
113
- var filter2 = extraFilter ? (0, filter_1.addFilterSegment)([filter, extraFilter]) : filter;
130
+ var filter2 = extraFilter ? (0, filter_1.combineFilters)(entity, context.getSchema(), [filter, extraFilter]) : filter;
114
131
  var count = context.count(entity, { filter: filter2 }, { dontCollect: true });
115
132
  return checkCountLessThan(count, uniqAttrs, 0, row.id);
116
133
  }
117
- function analyzeActionDefDict(schema, actionDefDict) {
134
+ function makeIntrinsicCTWs(schema, actionDefDict) {
118
135
  var _a;
119
- var checkers = [];
120
- var triggers = [];
136
+ var checkers = (0, checkers_1.createDynamicCheckers)(schema);
137
+ var triggers = (0, triggers_1.createDynamicTriggers)(schema);
121
138
  // action状态转换矩阵相应的checker
122
139
  for (var entity in actionDefDict) {
123
140
  var _loop_1 = function (attr) {
@@ -140,11 +157,11 @@ function analyzeActionDefDict(schema, actionDefDict) {
140
157
  filter: conditionalFilter,
141
158
  errMsg: '',
142
159
  });
160
+ // 这里用data类型的checker改数据了不太好,先这样
143
161
  checkers.push({
144
162
  action: action,
145
163
  type: 'data',
146
164
  entity: entity,
147
- priority: 10,
148
165
  checker: function (data) {
149
166
  var _a;
150
167
  Object.assign(data, (_a = {},
@@ -190,7 +207,7 @@ function analyzeActionDefDict(schema, actionDefDict) {
190
207
  }
191
208
  }
192
209
  var _loop_2 = function (entity) {
193
- var e_2, _e;
210
+ var e_3, _e;
194
211
  var indexes = schema[entity].indexes;
195
212
  if (indexes) {
196
213
  var _loop_4 = function (index) {
@@ -201,7 +218,7 @@ function analyzeActionDefDict(schema, actionDefDict) {
201
218
  entity: entity,
202
219
  action: 'create',
203
220
  type: 'logical',
204
- priority: 20,
221
+ priority: types_1.CHECKER_MAX_PRIORITY,
205
222
  checker: function (operation, context) {
206
223
  var data = operation.data;
207
224
  if (data instanceof Array) {
@@ -219,9 +236,9 @@ function analyzeActionDefDict(schema, actionDefDict) {
219
236
  entity: entity,
220
237
  action: 'update',
221
238
  type: 'logical',
222
- priority: 20,
239
+ priority: types_1.CHECKER_MAX_PRIORITY,
223
240
  checker: function (operation, context) {
224
- var e_3, _a, e_4, _b, _c;
241
+ var e_4, _a, e_5, _b, _c;
225
242
  var _d = operation, data = _d.data, operationFilter = _d.filter;
226
243
  var attrs = Object.keys(data);
227
244
  var refAttrs = (0, lodash_1.intersection)(attrs, uniqAttrs_2);
@@ -230,7 +247,7 @@ function analyzeActionDefDict(schema, actionDefDict) {
230
247
  return;
231
248
  }
232
249
  try {
233
- for (var refAttrs_1 = (e_3 = void 0, tslib_1.__values(refAttrs)), refAttrs_1_1 = refAttrs_1.next(); !refAttrs_1_1.done; refAttrs_1_1 = refAttrs_1.next()) {
250
+ for (var refAttrs_1 = (e_4 = void 0, tslib_1.__values(refAttrs)), refAttrs_1_1 = refAttrs_1.next(); !refAttrs_1_1.done; refAttrs_1_1 = refAttrs_1.next()) {
234
251
  var attr = refAttrs_1_1.value;
235
252
  // 如果有更新为null值,不用再检查约束
236
253
  if (data[attr] === null || data[attr] === undefined) {
@@ -238,28 +255,28 @@ function analyzeActionDefDict(schema, actionDefDict) {
238
255
  }
239
256
  }
240
257
  }
241
- catch (e_3_1) { e_3 = { error: e_3_1 }; }
258
+ catch (e_4_1) { e_4 = { error: e_4_1 }; }
242
259
  finally {
243
260
  try {
244
261
  if (refAttrs_1_1 && !refAttrs_1_1.done && (_a = refAttrs_1.return)) _a.call(refAttrs_1);
245
262
  }
246
- finally { if (e_3) throw e_3.error; }
263
+ finally { if (e_4) throw e_4.error; }
247
264
  }
248
265
  if (refAttrs.length === uniqAttrs_2.length) {
249
266
  // 如果更新了全部属性,直接检查
250
267
  var filter = (0, lodash_1.pick)(data, refAttrs);
251
268
  // 在这些行以外的行不和更新后的键值冲突
252
269
  var count = context.count(entity, {
253
- filter: (0, filter_1.addFilterSegment)([filter, {
270
+ filter: (0, filter_1.combineFilters)(entity, context.getSchema(), [filter, {
254
271
  $not: operationFilter,
255
272
  }]),
256
273
  }, { dontCollect: true });
257
- var checkCount = checkCountLessThan(count, uniqAttrs_2);
274
+ var checkCount = checkCountLessThan(count, uniqAttrs_2, 0, operationFilter === null || operationFilter === void 0 ? void 0 : operationFilter.id);
258
275
  // 更新的行只能有一行
259
276
  var rowCount = context.count(entity, {
260
277
  filter: operationFilter,
261
278
  }, { dontCollect: true });
262
- var checkRowCount = checkCountLessThan(rowCount, uniqAttrs_2, 1);
279
+ var checkRowCount = checkCountLessThan(rowCount, uniqAttrs_2, 1, operationFilter === null || operationFilter === void 0 ? void 0 : operationFilter.id);
263
280
  // 如果更新的行数为零似乎也可以,但这应该不可能出现吧,by Xc 20230131
264
281
  if (checkRowCount instanceof Promise) {
265
282
  return Promise.all([checkCount, checkRowCount]).then(function () { return undefined; });
@@ -268,19 +285,19 @@ function analyzeActionDefDict(schema, actionDefDict) {
268
285
  // 否则需要结合本行现有的属性来进行检查
269
286
  var projection = { id: 1 };
270
287
  try {
271
- for (var uniqAttrs_3 = (e_4 = void 0, tslib_1.__values(uniqAttrs_2)), uniqAttrs_3_1 = uniqAttrs_3.next(); !uniqAttrs_3_1.done; uniqAttrs_3_1 = uniqAttrs_3.next()) {
288
+ for (var uniqAttrs_3 = (e_5 = void 0, tslib_1.__values(uniqAttrs_2)), uniqAttrs_3_1 = uniqAttrs_3.next(); !uniqAttrs_3_1.done; uniqAttrs_3_1 = uniqAttrs_3.next()) {
272
289
  var attr = uniqAttrs_3_1.value;
273
290
  Object.assign(projection, (_c = {},
274
291
  _c[attr] = 1,
275
292
  _c));
276
293
  }
277
294
  }
278
- catch (e_4_1) { e_4 = { error: e_4_1 }; }
295
+ catch (e_5_1) { e_5 = { error: e_5_1 }; }
279
296
  finally {
280
297
  try {
281
298
  if (uniqAttrs_3_1 && !uniqAttrs_3_1.done && (_b = uniqAttrs_3.return)) _b.call(uniqAttrs_3);
282
299
  }
283
- finally { if (e_4) throw e_4.error; }
300
+ finally { if (e_5) throw e_5.error; }
284
301
  }
285
302
  var checkWithRows = function (rows2) {
286
303
  var rows22 = rows2.map(function (ele) { return Object.assign(ele, data); });
@@ -306,17 +323,17 @@ function analyzeActionDefDict(schema, actionDefDict) {
306
323
  }
307
324
  };
308
325
  try {
309
- for (var indexes_1 = (e_2 = void 0, tslib_1.__values(indexes)), indexes_1_1 = indexes_1.next(); !indexes_1_1.done; indexes_1_1 = indexes_1.next()) {
326
+ for (var indexes_1 = (e_3 = void 0, tslib_1.__values(indexes)), indexes_1_1 = indexes_1.next(); !indexes_1_1.done; indexes_1_1 = indexes_1.next()) {
310
327
  var index = indexes_1_1.value;
311
328
  _loop_4(index);
312
329
  }
313
330
  }
314
- catch (e_2_1) { e_2 = { error: e_2_1 }; }
331
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
315
332
  finally {
316
333
  try {
317
334
  if (indexes_1_1 && !indexes_1_1.done && (_e = indexes_1.return)) _e.call(indexes_1);
318
335
  }
319
- finally { if (e_2) throw e_2.error; }
336
+ finally { if (e_3) throw e_3.error; }
320
337
  }
321
338
  }
322
339
  };
@@ -324,10 +341,11 @@ function analyzeActionDefDict(schema, actionDefDict) {
324
341
  for (var entity in schema) {
325
342
  _loop_2(entity);
326
343
  }
344
+ triggers.push.apply(triggers, tslib_1.__spreadArray([], tslib_1.__read(actionAuth_1.triggers), false));
327
345
  return {
328
346
  triggers: triggers,
329
347
  checkers: checkers,
330
348
  watchers: makeIntrinsicWatchers(schema),
331
349
  };
332
350
  }
333
- exports.analyzeActionDefDict = analyzeActionDefDict;
351
+ exports.makeIntrinsicCTWs = makeIntrinsicCTWs;
@@ -1,4 +1,4 @@
1
- import { AuthDefDict, Checker, EntityDict, OperateOption, SelectOption, StorageSchema, Trigger } from "../types";
1
+ import { Checker, EntityDict, OperateOption, SelectOption, StorageSchema, Trigger } from "../types";
2
2
  import { EntityDict as BaseEntityDict } from '../base-app-domain';
3
3
  import { AsyncContext } from "./AsyncRowStore";
4
4
  import { SyncContext } from './SyncRowStore';
@@ -16,18 +16,11 @@ export declare function translateCheckerInSyncContext<ED extends EntityDict & Ba
16
16
  fn: (operation: ED[T]['Operation'], context: Cxt, option: OperateOption | SelectOption) => void;
17
17
  when: 'before' | 'after';
18
18
  };
19
- /**
20
- * 根据权限定义,创建出相应的checker
21
- * @param schema
22
- * @param authDict
23
- * @returns
24
- */
25
- export declare function createAuthCheckers<ED extends EntityDict & BaseEntityDict, Cxt extends AsyncContext<ED> | SyncContext<ED>>(schema: StorageSchema<ED>, authDict: AuthDefDict<ED>): Checker<ED, keyof ED, Cxt>[];
26
19
  /**
27
20
  * 对对象的删除,检查其是否会产生其他行上的空指针,不允许这种情况的出现
28
21
  * @param schema
29
22
  * @returns
30
23
  * 如果有的对象允许删除,需要使用trigger来处理其相关联的外键对象,这些trigger写作before,则会在checker之前执行,仍然可以删除成功
31
24
  */
32
- export declare function createRemoveCheckers<ED extends EntityDict & BaseEntityDict, Cxt extends AsyncContext<ED> | SyncContext<ED>>(schema: StorageSchema<ED>, authDict?: AuthDefDict<ED>): Checker<ED, keyof ED, Cxt>[];
25
+ export declare function createRemoveCheckers<ED extends EntityDict & BaseEntityDict, Cxt extends AsyncContext<ED> | SyncContext<ED>>(schema: StorageSchema<ED>): Checker<ED, keyof ED, Cxt>[];
33
26
  export declare function createCreateCheckers<ED extends EntityDict & BaseEntityDict, Cxt extends AsyncContext<ED> | SyncContext<ED>>(schema: StorageSchema<ED>): Checker<ED, keyof ED, Cxt>[];