oak-domain 2.4.1 → 2.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/lib/actions/action.d.ts +8 -8
  2. package/lib/actions/action.js +1 -1
  3. package/lib/actions/relation.d.ts +1 -1
  4. package/lib/base-app-domain/EntityDict.d.ts +1 -1
  5. package/lib/base-app-domain/Modi/Action.d.ts +4 -4
  6. package/lib/base-app-domain/Modi/Action.js +1 -1
  7. package/lib/base-app-domain/Modi/Schema.d.ts +27 -27
  8. package/lib/base-app-domain/ModiEntity/Schema.d.ts +29 -29
  9. package/lib/base-app-domain/Oper/Schema.d.ts +28 -28
  10. package/lib/base-app-domain/OperEntity/Schema.d.ts +31 -31
  11. package/lib/base-app-domain/User/Schema.d.ts +28 -28
  12. package/lib/base-app-domain/_SubQuery.d.ts +5 -5
  13. package/lib/compiler/schemalBuilder.js +29 -27
  14. package/lib/store/CascadeStore.js +20 -24
  15. package/lib/store/TriggerExecutor.d.ts +1 -1
  16. package/lib/store/actionDef.js +223 -25
  17. package/lib/types/Action.d.ts +5 -5
  18. package/lib/types/Auth.d.ts +9 -9
  19. package/lib/types/DataType.d.ts +14 -14
  20. package/lib/types/Demand.d.ts +23 -23
  21. package/lib/types/Endpoint.d.ts +1 -1
  22. package/lib/types/Entity.d.ts +54 -47
  23. package/lib/types/Exception.d.ts +10 -0
  24. package/lib/types/Exception.js +17 -1
  25. package/lib/types/Expression.d.ts +14 -14
  26. package/lib/types/Geo.d.ts +6 -6
  27. package/lib/types/Locale.d.ts +5 -5
  28. package/lib/types/Polyfill.d.ts +8 -8
  29. package/lib/types/Port.d.ts +2 -2
  30. package/lib/types/RowStore.d.ts +1 -1
  31. package/lib/types/Storage.d.ts +4 -4
  32. package/lib/types/Timer.d.ts +3 -3
  33. package/lib/types/Trigger.d.ts +5 -5
  34. package/lib/types/Watcher.d.ts +2 -2
  35. package/lib/types/schema/DataTypes.d.ts +7 -7
  36. package/lib/utils/concurrent.d.ts +1 -1
  37. package/lib/utils/uuid.d.ts +1 -1
  38. package/lib/utils/uuid.js +1 -1
  39. package/lib/utils/validator.d.ts +2 -2
  40. package/package.json +1 -1
@@ -2,6 +2,9 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.analyzeActionDefDict = exports.getFullProjection = void 0;
4
4
  var tslib_1 = require("tslib");
5
+ var types_1 = require("../types");
6
+ var lodash_1 = require("../utils/lodash");
7
+ var filter_1 = require("./filter");
5
8
  function getFullProjection(entity, schema) {
6
9
  var attributes = schema[entity].attributes;
7
10
  var projection = {
@@ -20,56 +23,116 @@ function getFullProjection(entity, schema) {
20
23
  }
21
24
  exports.getFullProjection = getFullProjection;
22
25
  function makeIntrinsicWatchers(schema) {
23
- var _this = this;
24
26
  var watchers = [];
25
- var _loop_1 = function (entity) {
27
+ for (var entity in schema) {
26
28
  var attributes = schema[entity].attributes;
27
- var now = Date.now();
28
29
  var expiresAt = attributes.expiresAt, expired = attributes.expired;
29
30
  if (expiresAt && expiresAt.type === 'datetime' && expired && expired.type === 'boolean') {
30
31
  // 如果有定义expiresAt和expired,则自动生成一个检查的watcher
31
32
  watchers.push({
32
33
  entity: entity,
33
34
  name: "\u5BF9\u8C61".concat(entity, "\u4E0A\u7684\u8FC7\u671F\u81EA\u52A8watcher"),
34
- filter: function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
35
- return tslib_1.__generator(this, function (_a) {
36
- return [2 /*return*/, {
37
- expired: false,
38
- expiresAt: {
39
- $lte: now,
40
- },
41
- }];
42
- });
43
- }); },
35
+ filter: function () {
36
+ return {
37
+ expired: false,
38
+ expiresAt: {
39
+ $lte: Date.now(),
40
+ },
41
+ };
42
+ },
44
43
  action: 'update',
45
44
  actionData: {
46
45
  expired: true,
47
46
  },
48
47
  });
49
48
  }
50
- };
51
- for (var entity in schema) {
52
- _loop_1(entity);
53
49
  }
54
50
  return watchers;
55
51
  }
52
+ function checkUniqueBetweenRows(rows, uniqAttrs) {
53
+ // 先检查这些行本身之间有无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;
62
+ }
63
+ else {
64
+ s + "-".concat(d[a]);
65
+ }
66
+ }
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);
72
+ }
73
+ finally { if (e_1) throw e_1.error; }
74
+ }
75
+ return s;
76
+ });
77
+ if (uniqRows.length < rows.length) {
78
+ throw new types_1.OakUniqueViolationException([{
79
+ attrs: uniqAttrs,
80
+ }]);
81
+ }
82
+ }
83
+ function checkCountLessThan(count, uniqAttrs, than, id) {
84
+ if (than === void 0) { than = 0; }
85
+ if (count instanceof Promise) {
86
+ return count.then(function (count2) {
87
+ if (count2 > than) {
88
+ throw new types_1.OakUniqueViolationException([{
89
+ id: id,
90
+ attrs: uniqAttrs,
91
+ }]);
92
+ }
93
+ });
94
+ }
95
+ if (count > than) {
96
+ throw new types_1.OakUniqueViolationException([{
97
+ id: id,
98
+ attrs: uniqAttrs,
99
+ }]);
100
+ }
101
+ }
102
+ function checkUnique(entity, row, context, uniqAttrs, extraFilter) {
103
+ var filter = (0, lodash_1.pick)(row, uniqAttrs);
104
+ for (var a in filter) {
105
+ if (filter[a] === null || filter[a] === undefined) {
106
+ delete filter[a];
107
+ }
108
+ }
109
+ if (Object.keys(filter).length < uniqAttrs.length) {
110
+ // 说明有null值,不需要检查约束
111
+ return;
112
+ }
113
+ var filter2 = extraFilter ? (0, filter_1.addFilterSegment)([filter, extraFilter]) : filter;
114
+ var count = context.count(entity, { filter: filter2 }, { dontCollect: true });
115
+ return checkCountLessThan(count, uniqAttrs, 0, row.id);
116
+ }
56
117
  function analyzeActionDefDict(schema, actionDefDict) {
118
+ var _a;
57
119
  var checkers = [];
58
120
  var triggers = [];
121
+ // action状态转换矩阵相应的checker
59
122
  for (var entity in actionDefDict) {
60
- var _loop_2 = function (attr) {
123
+ var _loop_1 = function (attr) {
61
124
  var def = actionDefDict[entity][attr];
62
- var _a = def, stm = _a.stm, is = _a.is;
125
+ var _b = def, stm = _b.stm, is = _b.is;
63
126
  var _loop_3 = function (action) {
64
- var _b, _c;
127
+ var _c, _d;
65
128
  var actionStm = stm[action];
66
- var conditionalFilter = typeof actionStm[0] === 'string' ? (_b = {},
67
- _b[attr] = actionStm[0],
68
- _b) : (_c = {},
69
- _c[attr] = {
129
+ var conditionalFilter = typeof actionStm[0] === 'string' ? (_c = {},
130
+ _c[attr] = actionStm[0],
131
+ _c) : (_d = {},
132
+ _d[attr] = {
70
133
  $in: actionStm[0],
71
134
  },
72
- _c);
135
+ _d);
73
136
  checkers.push({
74
137
  action: action,
75
138
  type: 'row',
@@ -123,8 +186,143 @@ function analyzeActionDefDict(schema, actionDefDict) {
123
186
  }
124
187
  };
125
188
  for (var attr in actionDefDict[entity]) {
126
- _loop_2(attr);
189
+ _loop_1(attr);
190
+ }
191
+ }
192
+ var _loop_2 = function (entity) {
193
+ var e_2, _e;
194
+ var indexes = schema[entity].indexes;
195
+ if (indexes) {
196
+ var _loop_4 = function (index) {
197
+ if ((_a = index.config) === null || _a === void 0 ? void 0 : _a.unique) {
198
+ var attributes = index.attributes;
199
+ var uniqAttrs_2 = attributes.map(function (ele) { return ele.name; });
200
+ checkers.push({
201
+ entity: entity,
202
+ action: 'create',
203
+ type: 'logical',
204
+ priority: 20,
205
+ checker: function (operation, context) {
206
+ var data = operation.data;
207
+ if (data instanceof Array) {
208
+ checkUniqueBetweenRows(data, uniqAttrs_2);
209
+ var checkResult = data.map(function (ele) { return checkUnique(entity, ele, context, uniqAttrs_2); });
210
+ if (checkResult[0] instanceof Promise) {
211
+ return Promise.all(checkResult).then(function () { return undefined; });
212
+ }
213
+ }
214
+ else {
215
+ return checkUnique(entity, data, context, uniqAttrs_2);
216
+ }
217
+ }
218
+ }, {
219
+ entity: entity,
220
+ action: 'update',
221
+ type: 'logical',
222
+ priority: 20,
223
+ checker: function (operation, context) {
224
+ var e_3, _a, e_4, _b, _c;
225
+ var _d = operation, data = _d.data, operationFilter = _d.filter;
226
+ var attrs = Object.keys(data);
227
+ var refAttrs = (0, lodash_1.intersection)(attrs, uniqAttrs_2);
228
+ if (refAttrs.length === 0) {
229
+ // 如果本次更新和unique约束的属性之间没有交集则直接返回
230
+ return;
231
+ }
232
+ 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()) {
234
+ var attr = refAttrs_1_1.value;
235
+ // 如果有更新为null值,不用再检查约束
236
+ if (data[attr] === null || data[attr] === undefined) {
237
+ return;
238
+ }
239
+ }
240
+ }
241
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
242
+ finally {
243
+ try {
244
+ if (refAttrs_1_1 && !refAttrs_1_1.done && (_a = refAttrs_1.return)) _a.call(refAttrs_1);
245
+ }
246
+ finally { if (e_3) throw e_3.error; }
247
+ }
248
+ if (refAttrs.length === uniqAttrs_2.length) {
249
+ // 如果更新了全部属性,直接检查
250
+ var filter = (0, lodash_1.pick)(data, refAttrs);
251
+ // 在这些行以外的行不和更新后的键值冲突
252
+ var count = context.count(entity, {
253
+ filter: (0, filter_1.addFilterSegment)([filter, {
254
+ $not: operationFilter,
255
+ }]),
256
+ }, { dontCollect: true });
257
+ var checkCount = checkCountLessThan(count, uniqAttrs_2);
258
+ // 更新的行只能有一行
259
+ var rowCount = context.count(entity, {
260
+ filter: operationFilter,
261
+ }, { dontCollect: true });
262
+ var checkRowCount = checkCountLessThan(rowCount, uniqAttrs_2, 1);
263
+ // 如果更新的行数为零似乎也可以,但这应该不可能出现吧,by Xc 20230131
264
+ if (checkRowCount instanceof Promise) {
265
+ return Promise.all([checkCount, checkRowCount]).then(function () { return undefined; });
266
+ }
267
+ }
268
+ // 否则需要结合本行现有的属性来进行检查
269
+ var projection = { id: 1 };
270
+ 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()) {
272
+ var attr = uniqAttrs_3_1.value;
273
+ Object.assign(projection, (_c = {},
274
+ _c[attr] = 1,
275
+ _c));
276
+ }
277
+ }
278
+ catch (e_4_1) { e_4 = { error: e_4_1 }; }
279
+ finally {
280
+ try {
281
+ if (uniqAttrs_3_1 && !uniqAttrs_3_1.done && (_b = uniqAttrs_3.return)) _b.call(uniqAttrs_3);
282
+ }
283
+ finally { if (e_4) throw e_4.error; }
284
+ }
285
+ var checkWithRows = function (rows2) {
286
+ var rows22 = rows2.map(function (ele) { return Object.assign(ele, data); });
287
+ // 先检查这些行本身之间是否冲突
288
+ checkUniqueBetweenRows(rows22, uniqAttrs_2);
289
+ var checkResults = rows22.map(function (row) { return checkUnique(entity, row, context, uniqAttrs_2, {
290
+ $not: operationFilter
291
+ }); });
292
+ if (checkResults[0] instanceof Promise) {
293
+ return Promise.all(checkResults).then(function () { return undefined; });
294
+ }
295
+ };
296
+ var currentRows = context.select(entity, {
297
+ data: projection,
298
+ filter: operationFilter,
299
+ }, { dontCollect: true });
300
+ if (currentRows instanceof Promise) {
301
+ return currentRows.then(function (row2) { return checkWithRows(row2); });
302
+ }
303
+ return checkWithRows(currentRows);
304
+ }
305
+ });
306
+ }
307
+ };
308
+ 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()) {
310
+ var index = indexes_1_1.value;
311
+ _loop_4(index);
312
+ }
313
+ }
314
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
315
+ finally {
316
+ try {
317
+ if (indexes_1_1 && !indexes_1_1.done && (_e = indexes_1.return)) _e.call(indexes_1);
318
+ }
319
+ finally { if (e_2) throw e_2.error; }
320
+ }
127
321
  }
322
+ };
323
+ // unique索引相应的checker
324
+ for (var entity in schema) {
325
+ _loop_2(entity);
128
326
  }
129
327
  return {
130
328
  triggers: triggers,
@@ -1,18 +1,18 @@
1
1
  import { CascadeRelationItem, EntityDict } from "./Entity";
2
2
  import { GenericAction } from '../actions/action';
3
- export type Action = string;
4
- export type State = string;
5
- export type ActionDef<A extends Action, S extends State> = {
3
+ export declare type Action = string;
4
+ export declare type State = string;
5
+ export declare type ActionDef<A extends Action, S extends State> = {
6
6
  stm: {
7
7
  [a in A]: [p: S | S[], n: S];
8
8
  };
9
9
  is?: S;
10
10
  };
11
- export type ActionDictOfEntityDict<E extends EntityDict> = {
11
+ export declare type ActionDictOfEntityDict<E extends EntityDict> = {
12
12
  [T in keyof E]?: {
13
13
  [A in keyof E[T]['OpSchema']]?: ActionDef<string, string>;
14
14
  };
15
15
  };
16
- export type CascadeActionAuth<A extends Action = ''> = {
16
+ export declare type CascadeActionAuth<A extends Action = ''> = {
17
17
  [K in A | GenericAction]?: CascadeRelationItem | (CascadeRelationItem | CascadeRelationItem[])[];
18
18
  };
@@ -2,12 +2,12 @@ import { CascadeActionAuth, CascadeRelationAuth } from ".";
2
2
  import { AsyncContext } from "../store/AsyncRowStore";
3
3
  import { SyncContext } from "../store/SyncRowStore";
4
4
  import { EntityDict, OperateOption, SelectOption } from "../types/Entity";
5
- export type CheckerType = 'relation' | 'row' | 'data' | 'logical' | 'logicalRelation';
5
+ export declare type CheckerType = 'relation' | 'row' | 'data' | 'logical' | 'logicalRelation';
6
6
  /**
7
7
  * conditionalFilter是指该action发生时,operation所操作的行中有满足conditionalFilter的行
8
8
  * 被转化成trigger的filter条件,详细可看trigger中的说明
9
9
  */
10
- export type DataChecker<ED extends EntityDict, T extends keyof ED, Cxt extends AsyncContext<ED> | SyncContext<ED>> = {
10
+ export declare type DataChecker<ED extends EntityDict, T extends keyof ED, Cxt extends AsyncContext<ED> | SyncContext<ED>> = {
11
11
  priority?: number;
12
12
  type: 'data';
13
13
  entity: T;
@@ -15,7 +15,7 @@ export type DataChecker<ED extends EntityDict, T extends keyof ED, Cxt extends A
15
15
  checker: (data: ED[T]['Create']['data'] | ED[T]['Update']['data'], context: Cxt) => void | Promise<void>;
16
16
  conditionalFilter?: ED[T]['Update']['filter'] | ((operation: ED[T]['Operation'], context: Cxt, option: OperateOption) => ED[T]['Update']['filter'] | Promise<ED[T]['Selection']['filter']>);
17
17
  };
18
- export type RowChecker<ED extends EntityDict, T extends keyof ED, Cxt extends AsyncContext<ED> | SyncContext<ED>> = {
18
+ export declare type RowChecker<ED extends EntityDict, T extends keyof ED, Cxt extends AsyncContext<ED> | SyncContext<ED>> = {
19
19
  priority?: number;
20
20
  type: 'row';
21
21
  entity: T;
@@ -28,7 +28,7 @@ export type RowChecker<ED extends EntityDict, T extends keyof ED, Cxt extends As
28
28
  };
29
29
  conditionalFilter?: ED[T]['Update']['filter'] | ((operation: ED[T]['Operation'], context: Cxt, option: OperateOption) => ED[T]['Update']['filter'] | Promise<ED[T]['Update']['filter']>);
30
30
  };
31
- export type RelationChecker<ED extends EntityDict, T extends keyof ED, Cxt extends AsyncContext<ED> | SyncContext<ED>> = {
31
+ export declare type RelationChecker<ED extends EntityDict, T extends keyof ED, Cxt extends AsyncContext<ED> | SyncContext<ED>> = {
32
32
  priority?: number;
33
33
  type: 'relation';
34
34
  entity: T;
@@ -38,7 +38,7 @@ export type RelationChecker<ED extends EntityDict, T extends keyof ED, Cxt exten
38
38
  errMsg: string;
39
39
  conditionalFilter?: ED[T]['Update']['filter'] | ((operation: ED[T]['Operation'], context: Cxt, option: OperateOption) => ED[T]['Update']['filter'] | Promise<ED[T]['Selection']['filter']>);
40
40
  };
41
- export type LogicalChecker<ED extends EntityDict, T extends keyof ED, Cxt extends AsyncContext<ED> | SyncContext<ED>> = {
41
+ export declare type LogicalChecker<ED extends EntityDict, T extends keyof ED, Cxt extends AsyncContext<ED> | SyncContext<ED>> = {
42
42
  priority?: number;
43
43
  type: 'logical';
44
44
  when?: 'after';
@@ -47,7 +47,7 @@ export type LogicalChecker<ED extends EntityDict, T extends keyof ED, Cxt extend
47
47
  checker: (operation: ED[T]['Operation'] | ED[T]['Selection'], context: Cxt, option: OperateOption | SelectOption) => void | Promise<void>;
48
48
  conditionalFilter?: ED[T]['Update']['filter'] | ((operation: ED[T]['Operation'], context: Cxt, option: OperateOption) => ED[T]['Update']['filter']);
49
49
  };
50
- export type LogicalRelationChecker<ED extends EntityDict, T extends keyof ED, Cxt extends AsyncContext<ED> | SyncContext<ED>> = {
50
+ export declare type LogicalRelationChecker<ED extends EntityDict, T extends keyof ED, Cxt extends AsyncContext<ED> | SyncContext<ED>> = {
51
51
  priority?: number;
52
52
  type: 'logicalRelation';
53
53
  when?: 'after';
@@ -56,11 +56,11 @@ export type LogicalRelationChecker<ED extends EntityDict, T extends keyof ED, Cx
56
56
  checker: (operation: ED[T]['Operation'] | ED[T]['Selection'], context: Cxt, option: OperateOption | SelectOption) => void | Promise<void>;
57
57
  conditionalFilter?: ED[T]['Update']['filter'] | ((operation: ED[T]['Operation'], context: Cxt, option: OperateOption) => ED[T]['Update']['filter']);
58
58
  };
59
- export type Checker<ED extends EntityDict, T extends keyof ED, Cxt extends AsyncContext<ED> | SyncContext<ED>> = DataChecker<ED, T, Cxt> | RowChecker<ED, T, Cxt> | RelationChecker<ED, T, Cxt> | LogicalChecker<ED, T, Cxt> | LogicalRelationChecker<ED, T, Cxt>;
60
- export type AuthDef<ED extends EntityDict, T extends keyof ED> = {
59
+ export declare type Checker<ED extends EntityDict, T extends keyof ED, Cxt extends AsyncContext<ED> | SyncContext<ED>> = DataChecker<ED, T, Cxt> | RowChecker<ED, T, Cxt> | RelationChecker<ED, T, Cxt> | LogicalChecker<ED, T, Cxt> | LogicalRelationChecker<ED, T, Cxt>;
60
+ export declare type AuthDef<ED extends EntityDict, T extends keyof ED> = {
61
61
  relationAuth?: CascadeRelationAuth<NonNullable<ED[T]['Relation']>>;
62
62
  actionAuth?: CascadeActionAuth<ED[T]['Action']>;
63
63
  };
64
- export type AuthDefDict<ED extends EntityDict> = {
64
+ export declare type AuthDefDict<ED extends EntityDict> = {
65
65
  [K in keyof ED]?: AuthDef<ED, K>;
66
66
  };
@@ -1,18 +1,18 @@
1
1
  import { Geo, SingleGeo } from "./Geo";
2
- export type Int<L extends 1 | 2 | 4 | 8> = number;
3
- export type Uint<L extends 1 | 2 | 4 | 8> = number;
4
- export type Double<P extends number, S extends number> = number;
5
- export type Float<P extends number, S extends number> = number;
6
- export type String<L extends number> = string;
7
- export type Text = string;
8
- export type Image = string;
9
- export type File = string;
10
- export type Datetime = number | Date;
11
- export type Boolean = boolean;
12
- export type PrimaryKey = string;
13
- export type ForeignKey<E extends string> = string;
14
- export type Sequence = string;
2
+ export declare type Int<L extends 1 | 2 | 4 | 8> = number;
3
+ export declare type Uint<L extends 1 | 2 | 4 | 8> = number;
4
+ export declare type Double<P extends number, S extends number> = number;
5
+ export declare type Float<P extends number, S extends number> = number;
6
+ export declare type String<L extends number> = string;
7
+ export declare type Text = string;
8
+ export declare type Image = string;
9
+ export declare type File = string;
10
+ export declare type Datetime = number | Date;
11
+ export declare type Boolean = boolean;
12
+ export declare type PrimaryKey = string;
13
+ export declare type ForeignKey<E extends string> = string;
14
+ export declare type Sequence = string;
15
15
  export { Geo, SingleGeo } from './Geo';
16
- export type DataTypes = number | string | Datetime | Geo | Object | SingleGeo;
16
+ export declare type DataTypes = number | string | Datetime | Geo | Object | SingleGeo;
17
17
  export declare const types: string[];
18
18
  export declare const unIndexedTypes: string[];
@@ -1,12 +1,12 @@
1
1
  import { RefOrExpression } from "./Expression";
2
2
  import { OneOf } from "./Polyfill";
3
3
  export declare const EXPRESSION_PREFIX = "$expr";
4
- export type NodeId = `node-${number}`;
5
- export type ExpressionKey = '$expr' | '$expr1' | '$expr2' | '$expr3' | '$expr4' | '$expr5' | '$expr6' | '$expr7' | '$expr8' | '$expr9' | '$expr10' | '$expr11' | '$expr12' | '$expr13' | '$expr14' | '$expr15' | '$expr16' | '$expr17' | '$expr18' | '$expr19' | '$expr20';
6
- export type ExprOp<A> = {
4
+ export declare type NodeId = `node-${number}`;
5
+ export declare type ExpressionKey = '$expr' | '$expr1' | '$expr2' | '$expr3' | '$expr4' | '$expr5' | '$expr6' | '$expr7' | '$expr8' | '$expr9' | '$expr10' | '$expr11' | '$expr12' | '$expr13' | '$expr14' | '$expr15' | '$expr16' | '$expr17' | '$expr18' | '$expr19' | '$expr20';
6
+ export declare type ExprOp<A> = {
7
7
  [K in ExpressionKey]: RefOrExpression<A>;
8
8
  };
9
- export type Q_NumberComparisonValue = number | OneOf<{
9
+ export declare type Q_NumberComparisonValue = number | OneOf<{
10
10
  $gt: number;
11
11
  $lt: number;
12
12
  $gte: number;
@@ -17,7 +17,7 @@ export type Q_NumberComparisonValue = number | OneOf<{
17
17
  $nin: number[];
18
18
  $between: [number, number];
19
19
  }>;
20
- export type Q_StringComparisonValue = string | OneOf<{
20
+ export declare type Q_StringComparisonValue = string | OneOf<{
21
21
  $gt: string;
22
22
  $lt: string;
23
23
  $gte: string;
@@ -30,44 +30,44 @@ export type Q_StringComparisonValue = string | OneOf<{
30
30
  $in: string[];
31
31
  $nin: string[];
32
32
  }>;
33
- export type Q_BooleanComparisonValue = boolean;
34
- export type Q_DateComparisonValue = Q_NumberComparisonValue;
35
- export type Q_EnumComparisonValue<E> = E | OneOf<{
33
+ export declare type Q_BooleanComparisonValue = boolean;
34
+ export declare type Q_DateComparisonValue = Q_NumberComparisonValue;
35
+ export declare type Q_EnumComparisonValue<E> = E | OneOf<{
36
36
  $in: E[];
37
37
  $nin: E[];
38
38
  }>;
39
- export type Q_ExistsValue = {
39
+ export declare type Q_ExistsValue = {
40
40
  $exists: boolean;
41
41
  };
42
- export type Q_NumberValue = Q_NumberComparisonValue | Q_ExistsValue;
43
- export type Q_StringValue = Q_StringComparisonValue | Q_ExistsValue;
44
- export type Q_BooleanValue = Q_BooleanComparisonValue | Q_ExistsValue;
45
- export type Q_DateValue = Q_DateComparisonValue | Q_ExistsValue;
46
- export type Q_EnumValue<E> = Q_EnumComparisonValue<E> | Q_ExistsValue;
47
- export type Q_State<S> = S | {
42
+ export declare type Q_NumberValue = Q_NumberComparisonValue | Q_ExistsValue;
43
+ export declare type Q_StringValue = Q_StringComparisonValue | Q_ExistsValue;
44
+ export declare type Q_BooleanValue = Q_BooleanComparisonValue | Q_ExistsValue;
45
+ export declare type Q_DateValue = Q_DateComparisonValue | Q_ExistsValue;
46
+ export declare type Q_EnumValue<E> = Q_EnumComparisonValue<E> | Q_ExistsValue;
47
+ export declare type Q_State<S> = S | {
48
48
  $in: S[];
49
49
  } | {
50
50
  $nin: S[];
51
51
  } | Q_ExistsValue;
52
- export type Q_FullTextValue = {
52
+ export declare type Q_FullTextValue = {
53
53
  $search: string;
54
54
  $language?: 'zh_CN' | 'en_US';
55
55
  };
56
- export type Q_FullTextKey = '$text';
57
- export type FulltextFilter = {
56
+ export declare type Q_FullTextKey = '$text';
57
+ export declare type FulltextFilter = {
58
58
  [F in Q_FullTextKey]?: Q_FullTextValue;
59
59
  };
60
- type Q_LogicKey = '$and' | '$or';
61
- type Q_LinearLogicKey = '$not';
62
- export type MakeFilterWrapper<F extends Object> = {
60
+ declare type Q_LogicKey = '$and' | '$or';
61
+ declare type Q_LinearLogicKey = '$not';
62
+ export declare type MakeFilterWrapper<F extends Object> = {
63
63
  [Q in Q_LogicKey]?: Array<MakeFilterWrapper<F>>;
64
64
  } & {
65
65
  [Q in Q_LinearLogicKey]?: MakeFilterWrapper<F>;
66
66
  } & Partial<F>;
67
- export type MakeFilter<F extends Object> = {
67
+ export declare type MakeFilter<F extends Object> = {
68
68
  '#id'?: NodeId;
69
69
  } & MakeFilterWrapper<F>;
70
- export type RefAttr<A> = {
70
+ export declare type RefAttr<A> = {
71
71
  '#attr': A;
72
72
  } | {
73
73
  '#refId': NodeId;
@@ -8,4 +8,4 @@ export interface EndpointItem<ED extends EntityDict, BackCxt extends AsyncContex
8
8
  method: 'get' | 'post' | 'put' | 'delete';
9
9
  fn: (context: BackCxt, params: Record<string, string>, headers: IncomingHttpHeaders, req: IncomingMessage, body?: any) => Promise<any>;
10
10
  }
11
- export type Endpoint<ED extends EntityDict, BackCxt extends AsyncContext<ED>> = EndpointItem<ED, BackCxt> | EndpointItem<ED, BackCxt>[];
11
+ export declare type Endpoint<ED extends EntityDict, BackCxt extends AsyncContext<ED>> = EndpointItem<ED, BackCxt> | EndpointItem<ED, BackCxt>[];