oak-domain 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/lib/OakError.js +2 -16
  2. package/lib/actions/action.d.ts +9 -1
  3. package/lib/actions/action.js +6 -2
  4. package/lib/base-app-domain/ActionDefDict.d.ts +5 -0
  5. package/lib/base-app-domain/ActionDefDict.js +7 -0
  6. package/lib/base-app-domain/EntityDict.d.ts +12 -0
  7. package/lib/base-app-domain/EntityDict.js +2 -0
  8. package/lib/base-app-domain/Modi/Action.d.ts +10 -0
  9. package/lib/base-app-domain/Modi/Action.js +14 -0
  10. package/lib/base-app-domain/Modi/Schema.d.ts +161 -0
  11. package/lib/base-app-domain/Modi/Schema.js +2 -0
  12. package/lib/base-app-domain/Modi/Storage.d.ts +3 -0
  13. package/lib/base-app-domain/Modi/Storage.js +60 -0
  14. package/lib/base-app-domain/ModiEntity/Schema.d.ts +179 -0
  15. package/lib/base-app-domain/ModiEntity/Schema.js +2 -0
  16. package/lib/base-app-domain/ModiEntity/Storage.d.ts +3 -0
  17. package/lib/base-app-domain/ModiEntity/Storage.js +26 -0
  18. package/lib/base-app-domain/Oper/Schema.d.ts +158 -0
  19. package/lib/base-app-domain/Oper/Schema.js +2 -0
  20. package/lib/base-app-domain/Oper/Storage.d.ts +3 -0
  21. package/lib/base-app-domain/Oper/Storage.js +29 -0
  22. package/lib/base-app-domain/OperEntity/Schema.d.ts +196 -0
  23. package/lib/base-app-domain/OperEntity/Schema.js +2 -0
  24. package/lib/base-app-domain/OperEntity/Storage.d.ts +3 -0
  25. package/lib/base-app-domain/OperEntity/Storage.js +26 -0
  26. package/lib/base-app-domain/Storage.d.ts +3 -0
  27. package/lib/base-app-domain/Storage.js +15 -0
  28. package/lib/base-app-domain/User/Schema.d.ts +140 -0
  29. package/lib/base-app-domain/User/Schema.js +2 -0
  30. package/lib/base-app-domain/User/Storage.d.ts +3 -0
  31. package/lib/base-app-domain/User/Storage.js +25 -0
  32. package/lib/base-app-domain/_SubQuery.d.ts +36 -0
  33. package/lib/base-app-domain/_SubQuery.js +2 -0
  34. package/lib/base-app-domain/index.d.ts +3 -0
  35. package/lib/base-app-domain/index.js +6 -0
  36. package/lib/checkers/index.d.ts +3 -0
  37. package/lib/checkers/index.js +8 -0
  38. package/lib/compiler/env.d.ts +4 -3
  39. package/lib/compiler/env.js +22 -9
  40. package/lib/compiler/schemalBuilder.js +689 -355
  41. package/lib/entities/Action.d.ts +12 -0
  42. package/lib/entities/Action.js +17 -0
  43. package/lib/entities/Modi.d.ts +11 -0
  44. package/lib/entities/Modi.js +46 -0
  45. package/lib/entities/ModiEntity.d.ts +8 -0
  46. package/lib/entities/ModiEntity.js +15 -0
  47. package/lib/entities/Ooperation.d.ts +12 -0
  48. package/lib/entities/Ooperation.js +17 -0
  49. package/lib/entities/Oper.d.ts +10 -0
  50. package/lib/entities/Oper.js +17 -0
  51. package/lib/entities/OperEntity.d.ts +8 -0
  52. package/lib/entities/OperEntity.js +15 -0
  53. package/lib/entities/Update.d.ts +9 -0
  54. package/lib/entities/Update.js +44 -0
  55. package/lib/entities/User.d.ts +7 -0
  56. package/lib/entities/User.js +12 -0
  57. package/lib/entities/Uupdate.d.ts +9 -0
  58. package/lib/entities/Uupdate.js +44 -0
  59. package/lib/store/CascadeStore.d.ts +31 -6
  60. package/lib/store/CascadeStore.js +957 -230
  61. package/lib/store/TriggerExecutor.d.ts +4 -3
  62. package/lib/store/TriggerExecutor.js +30 -102
  63. package/lib/store/UniversalContext.d.ts +1 -0
  64. package/lib/store/UniversalContext.js +10 -59
  65. package/lib/store/action.d.ts +6 -0
  66. package/lib/store/action.js +14 -0
  67. package/lib/store/actionDef.js +14 -47
  68. package/lib/store/filter.d.ts +6 -0
  69. package/lib/store/filter.js +60 -29
  70. package/lib/store/modi.d.ts +11 -0
  71. package/lib/store/modi.js +143 -0
  72. package/lib/store/projection.d.ts +7 -0
  73. package/lib/store/projection.js +211 -0
  74. package/lib/store/relation.js +6 -6
  75. package/lib/store/selection.d.ts +7 -0
  76. package/lib/store/selection.js +227 -0
  77. package/lib/triggers/index.d.ts +2 -0
  78. package/lib/triggers/index.js +5 -0
  79. package/lib/triggers/modi.d.ts +5 -0
  80. package/lib/triggers/modi.js +72 -0
  81. package/lib/types/Context.d.ts +1 -0
  82. package/lib/types/DataType.d.ts +1 -1
  83. package/lib/types/Entity.d.ts +29 -16
  84. package/lib/types/Exception.d.ts +28 -0
  85. package/lib/types/Exception.js +75 -23
  86. package/lib/types/Expression.d.ts +9 -0
  87. package/lib/types/Expression.js +47 -38
  88. package/lib/types/RowStore.d.ts +3 -3
  89. package/lib/types/Storage.d.ts +6 -0
  90. package/lib/types/Trigger.d.ts +5 -5
  91. package/lib/types/index.js +19 -28
  92. package/lib/utils/SimpleConnector.js +5 -58
  93. package/lib/utils/assert.js +2 -4
  94. package/lib/utils/concurrent.js +5 -54
  95. package/lib/utils/lodash.d.ts +4 -1
  96. package/lib/utils/lodash.js +19 -15
  97. package/package.json +10 -5
  98. package/src/entities/Modi.ts +68 -0
  99. package/src/entities/ModiEntity.ts +24 -0
  100. package/src/entities/Oper.ts +28 -0
  101. package/src/entities/OperEntity.ts +24 -0
  102. package/src/entities/User.ts +20 -0
@@ -1,70 +1,13 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
- }) : (function(o, m, k, k2) {
6
- if (k2 === undefined) k2 = k;
7
- o[k2] = m[k];
8
- }));
9
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
- Object.defineProperty(o, "default", { enumerable: true, value: v });
11
- }) : function(o, v) {
12
- o["default"] = v;
13
- });
14
- var __importStar = (this && this.__importStar) || function (mod) {
15
- if (mod && mod.__esModule) return mod;
16
- var result = {};
17
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
- __setModuleDefault(result, mod);
19
- return result;
20
- };
21
- var __read = (this && this.__read) || function (o, n) {
22
- var m = typeof Symbol === "function" && o[Symbol.iterator];
23
- if (!m) return o;
24
- var i = m.call(o), r, ar = [], e;
25
- try {
26
- while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
27
- }
28
- catch (error) { e = { error: error }; }
29
- finally {
30
- try {
31
- if (r && !r.done && (m = i["return"])) m.call(i);
32
- }
33
- finally { if (e) throw e.error; }
34
- }
35
- return ar;
36
- };
37
- var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
38
- if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
39
- if (ar || !(i in from)) {
40
- if (!ar) ar = Array.prototype.slice.call(from, 0, i);
41
- ar[i] = from[i];
42
- }
43
- }
44
- return to.concat(ar || Array.prototype.slice.call(from));
45
- };
46
- var __values = (this && this.__values) || function(o) {
47
- var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
48
- if (m) return m.call(o);
49
- if (o && typeof o.length === "number") return {
50
- next: function () {
51
- if (o && i >= o.length) o = void 0;
52
- return { value: o && o[i++], done: !o };
53
- }
54
- };
55
- throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
56
- };
57
- var __importDefault = (this && this.__importDefault) || function (mod) {
58
- return (mod && mod.__esModule) ? mod : { "default": mod };
59
- };
60
2
  Object.defineProperty(exports, "__esModule", { value: true });
61
3
  exports.buildSchema = exports.analyzeEntities = void 0;
62
- var path_1 = __importDefault(require("path"));
63
- var assert_1 = __importDefault(require("assert"));
4
+ var tslib_1 = require("tslib");
5
+ var path_1 = tslib_1.__importDefault(require("path"));
6
+ var assert_1 = tslib_1.__importDefault(require("assert"));
64
7
  var fs_1 = require("fs");
65
8
  var fs_extra_1 = require("fs-extra");
66
9
  var lodash_1 = require("lodash");
67
- var ts = __importStar(require("typescript"));
10
+ var ts = tslib_1.__importStar(require("typescript"));
68
11
  var factory = ts.factory;
69
12
  var env_1 = require("./env");
70
13
  var string_1 = require("../utils/string");
@@ -75,7 +18,13 @@ var ReversePointerEntities = {};
75
18
  var ReversePointerRelations = {};
76
19
  var ActionImportStatements = function () { return [
77
20
  factory.createImportDeclaration(undefined, undefined, factory.createImportClause(false, undefined, factory.createNamedImports([factory.createImportSpecifier(false, undefined, factory.createIdentifier("ActionDef"))])), factory.createStringLiteral("".concat((0, env_1.TYPE_PATH_IN_OAK_DOMAIN)(), "Action")), undefined),
78
- factory.createImportDeclaration(undefined, undefined, factory.createImportClause(false, undefined, factory.createNamedImports([factory.createImportSpecifier(false, undefined, factory.createIdentifier("GenericAction"))])), factory.createStringLiteral((0, env_1.ACTION_CONSTANT_IN_OAK_DOMAIN)()), undefined)
21
+ factory.createImportDeclaration(undefined, undefined, factory.createImportClause(false, undefined, factory.createNamedImports([
22
+ factory.createImportSpecifier(false, undefined, factory.createIdentifier("GenericAction")),
23
+ factory.createImportSpecifier(false, undefined, factory.createIdentifier("AppendOnlyAction")),
24
+ factory.createImportSpecifier(false, undefined, factory.createIdentifier("ReadOnlyAction")),
25
+ factory.createImportSpecifier(false, undefined, factory.createIdentifier("ExcludeUpdateAction")),
26
+ factory.createImportSpecifier(false, undefined, factory.createIdentifier("ExcludeRemoveAction")),
27
+ ])), factory.createStringLiteral((0, env_1.ACTION_CONSTANT_IN_OAK_DOMAIN)()), undefined)
79
28
  ]; };
80
29
  var ActionAsts = {};
81
30
  var SchemaAsts = {};
@@ -151,7 +100,7 @@ function pushStatementIntoActionAst(moduleName, node, sourceFile) {
151
100
  else {
152
101
  (0, lodash_1.assign)(ActionAsts, (_a = {},
153
102
  _a[moduleName] = {
154
- statements: __spreadArray(__spreadArray([], __read(ActionImportStatements()), false), [node], false),
103
+ statements: tslib_1.__spreadArray(tslib_1.__spreadArray([], tslib_1.__read(ActionImportStatements()), false), [node], false),
155
104
  sourceFile: sourceFile,
156
105
  importedFrom: {},
157
106
  // actionNames,
@@ -184,7 +133,7 @@ function checkActionDefNameConsistent(filename, actionDefNode) {
184
133
  (0, assert_1.default)(ts.isTypeReferenceNode(type));
185
134
  var typeArguments = type.typeArguments;
186
135
  (0, assert_1.default)(typeArguments.length === 2);
187
- var _a = __read(typeArguments, 2), actionNode = _a[0], stateNode = _a[1];
136
+ var _a = tslib_1.__read(typeArguments, 2), actionNode = _a[0], stateNode = _a[1];
188
137
  (0, assert_1.default)(ts.isIdentifier(name), "\u6587\u4EF6".concat(filename, "\u4E2D\u7684ActionDef").concat(name.text, "\u4E0D\u662F\u4E00\u4E2A\u6709\u6548\u7684\u53D8\u91CF"));
189
138
  (0, assert_1.default)(name.text.endsWith('ActionDef'), "\u6587\u4EF6".concat(filename, "\u4E2D\u7684ActionDef").concat(name.text, "\u672A\u4EE5ActionDef\u7ED3\u5C3E"));
190
139
  (0, assert_1.default)(ts.isTypeReferenceNode(actionNode) && ts.isTypeReferenceNode(stateNode), "\u6587\u4EF6".concat(filename, "\u4E2D\u7684ActionDef").concat(name.text, "\u7C7B\u578B\u58F0\u660E\u4E2D\u7684action\u548Cstate\u975E\u6CD5"));
@@ -252,11 +201,18 @@ function getStringTextFromUnionStringLiterals(moduleName, filename, node, progra
252
201
  return [action];
253
202
  }
254
203
  }
255
- var RESERVED_ACTION_NAMES = ['GenericAction', 'ParticularAction'];
204
+ var RESERVED_ACTION_NAMES = ['GenericAction', 'ParticularAction', 'ExcludeRemoveAction', 'ExcludeUpdateAction', 'ReadOnlyAction', 'AppendOnlyAction'];
256
205
  var action_1 = require("../actions/action");
257
206
  var DataType_1 = require("../types/DataType");
258
207
  var Entity_1 = require("../types/Entity");
259
- function dealWithActions(moduleName, filename, node, program) {
208
+ var OriginActionDict = {
209
+ 'crud': 'GenericAction',
210
+ 'excludeUpdate': 'ExcludeUpdateAction',
211
+ 'excludeRemove': 'ExcludeRemoveAction',
212
+ 'appendOnly': 'AppendOnlyAction',
213
+ 'readOnly': 'ReadOnlyAction',
214
+ };
215
+ function dealWithActions(moduleName, filename, node, program, sourceFile) {
260
216
  var actionTexts = action_1.genericActions.map(function (ele) { return ele; });
261
217
  if (ts.isUnionTypeNode(node)) {
262
218
  var actionNames = node.types.map(function (ele) {
@@ -267,7 +223,7 @@ function dealWithActions(moduleName, filename, node, program) {
267
223
  (0, assert_1.default)((0, lodash_1.intersection)(actionNames, env_1.RESERVED_ENTITIES).length === 0, "".concat(filename, "\u4E2D\u7684Action\u547D\u540D\u4E0D\u80FD\u662F\u300C").concat(RESERVED_ACTION_NAMES.join(','), "\u300D\u4E4B\u4E00"));
268
224
  node.types.forEach(function (ele) {
269
225
  if (ts.isTypeReferenceNode(ele)) {
270
- actionTexts.push.apply(actionTexts, __spreadArray([], __read(getStringTextFromUnionStringLiterals(moduleName, filename, ele, program)), false));
226
+ actionTexts.push.apply(actionTexts, tslib_1.__spreadArray([], tslib_1.__read(getStringTextFromUnionStringLiterals(moduleName, filename, ele, program)), false));
271
227
  }
272
228
  else {
273
229
  (0, assert_1.default)(ts.isLiteralTypeNode(ele) && ts.isStringLiteral(ele.literal), "\u3010".concat(moduleName, "\u3011action\u7684\u5B9A\u4E49\u65E2\u975EType\u4E5F\u4E0D\u662Fstring"));
@@ -279,7 +235,7 @@ function dealWithActions(moduleName, filename, node, program) {
279
235
  if (ts.isIdentifier(node.typeName)) {
280
236
  (0, assert_1.default)(!RESERVED_ACTION_NAMES.includes(node.typeName.text), "".concat(filename, "\u4E2D\u7684Action\u547D\u540D\u4E0D\u80FD\u662F\u300C").concat(RESERVED_ACTION_NAMES.join(','), "\u300D\u4E4B\u4E00"));
281
237
  }
282
- actionTexts.push.apply(actionTexts, __spreadArray([], __read(getStringTextFromUnionStringLiterals(moduleName, filename, node, program)), false));
238
+ actionTexts.push.apply(actionTexts, tslib_1.__spreadArray([], tslib_1.__read(getStringTextFromUnionStringLiterals(moduleName, filename, node, program)), false));
283
239
  }
284
240
  else {
285
241
  (0, assert_1.default)(ts.isLiteralTypeNode(node) && ts.isStringLiteral(node.literal), "\u3010".concat(moduleName, "\u3011action\u7684\u5B9A\u4E49\u65E2\u975EType\u4E5F\u4E0D\u662Fstring"));
@@ -290,6 +246,7 @@ function dealWithActions(moduleName, filename, node, program) {
290
246
  actionTexts.forEach(function (action) {
291
247
  var _a;
292
248
  (0, assert_1.default)(action.length <= env_1.STRING_LITERAL_MAX_LENGTH, "".concat(filename, "\u4E2D\u7684Action\u300C").concat(action, "\u300D\u547D\u540D\u957F\u5EA6\u5927\u4E8E").concat(env_1.STRING_LITERAL_MAX_LENGTH));
249
+ (0, assert_1.default)(/^[a-z][a-z|A-Z]+$/.test(action), "".concat(filename, "\u4E2D\u7684Action\u300C").concat(action, "\u300D\u547D\u540D\u4E0D\u5408\u6CD5\uFF0C\u5FC5\u987B\u4EE5\u5C0F\u5B57\u5B57\u6BCD\u5F00\u5934\u4E14\u53EA\u80FD\u5305\u542B\u5B57\u6BCD"));
293
250
  if (ActionDict.hasOwnProperty(action)) {
294
251
  throw new Error("\u6587\u4EF6".concat(filename, "\u4E2D\uFF0CAction\u5B9A\u4E49\u4E0A\u7684\u3010").concat(action, "\u3011\u52A8\u4F5C\u5B58\u5728\u540C\u540D"));
295
252
  }
@@ -299,8 +256,7 @@ function dealWithActions(moduleName, filename, node, program) {
299
256
  _a));
300
257
  }
301
258
  });
302
- // 为每个action在schema中建立相应的state域(除了genericState)
303
- // 放到actionDef的定义处去做。by Xc
259
+ pushStatementIntoActionAst(moduleName, factory.createVariableStatement([factory.createModifier(ts.SyntaxKind.ExportKeyword)], factory.createVariableDeclarationList([factory.createVariableDeclaration(factory.createIdentifier("actions"), undefined, undefined, factory.createArrayLiteralExpression(actionTexts.map(function (ele) { return factory.createStringLiteral(ele); }), false))], ts.NodeFlags.Const)), sourceFile);
304
260
  }
305
261
  function getEntityImported(declaration, filename) {
306
262
  var moduleSpecifier = declaration.moduleSpecifier, importClause = declaration.importClause;
@@ -312,6 +268,9 @@ function getEntityImported(declaration, filename) {
312
268
  else if (moduleSpecifier.text.startsWith((0, env_1.ENTITY_PATH_IN_OAK_GENERAL_BUSINESS)())) {
313
269
  entityImported = moduleSpecifier.text.slice((0, env_1.ENTITY_PATH_IN_OAK_GENERAL_BUSINESS)().length);
314
270
  }
271
+ else if (moduleSpecifier.text.startsWith((0, env_1.ENTITY_PATH_IN_OAK_DOMAIN)())) {
272
+ entityImported = moduleSpecifier.text.slice((0, env_1.ENTITY_PATH_IN_OAK_DOMAIN)().length);
273
+ }
315
274
  }
316
275
  if (entityImported) {
317
276
  var namedBindings = importClause.namedBindings;
@@ -354,6 +313,11 @@ function analyzeEntity(filename, path, program) {
354
313
  var fullPath = "".concat(path, "/").concat(filename);
355
314
  var sourceFile = program.getSourceFile(fullPath);
356
315
  var moduleName = filename.split('.')[0];
316
+ if (Schema.hasOwnProperty(moduleName)) {
317
+ if (!path.includes('oak-general-business')) {
318
+ console.log("\u51FA\u73B0\u4E86\u540C\u540D\u7684Entity\u5B9A\u4E49\u300C".concat(moduleName, "\u300D\uFF0C\u5C06\u4F7F\u7528\u60A8\u6240\u5B9A\u4E49\u7684\u5BF9\u8C61\u7ED3\u6784\u53D6\u4EE3\u6389\u9ED8\u8BA4\u5BF9\u8C61\uFF0C\u8BF7\u786E\u8BA4"));
319
+ }
320
+ }
357
321
  var referencedSchemas = [];
358
322
  var schemaAttrs = [];
359
323
  var hasFulltextIndex = false;
@@ -361,13 +325,16 @@ function analyzeEntity(filename, path, program) {
361
325
  var beforeSchema = true;
362
326
  var hasActionDef = false;
363
327
  var hasRelationDef = false;
364
- var hasActionTypeAliasDeclaration = false;
328
+ var hasActionOrStateDef = false;
329
+ var toModi = false;
330
+ var actionType = 'crud';
331
+ var _static = false;
365
332
  var enumStringAttrs = [];
366
333
  var states = [];
367
334
  var localEnumStringTypes = [];
368
335
  var localeDef = undefined;
369
336
  ts.forEachChild(sourceFile, function (node) {
370
- var _a, _b;
337
+ var _a, _b, _c, _d;
371
338
  if (ts.isImportDeclaration(node)) {
372
339
  var entityImported = getEntityImported(node, filename);
373
340
  if (entityImported) {
@@ -383,8 +350,8 @@ function analyzeEntity(filename, path, program) {
383
350
  var members = node.members, heritageClauses = node.heritageClauses;
384
351
  (0, assert_1.default)(['EntityShape', 'FileCarrierEntityShape'].includes(heritageClauses[0].types[0].expression.text));
385
352
  members.forEach(function (attrNode) {
386
- var _a;
387
- var _b = attrNode, type = _b.type, name = _b.name, questionToken = _b.questionToken;
353
+ var _a, _b;
354
+ var _c = attrNode, type = _c.type, name = _c.name, questionToken = _c.questionToken;
388
355
  var attrName = name.text;
389
356
  if (ts.isTypeReferenceNode(type)
390
357
  && ts.isIdentifier(type.typeName)) {
@@ -408,6 +375,9 @@ function analyzeEntity(filename, path, program) {
408
375
  _a[reverseEntity] = [moduleName],
409
376
  _a));
410
377
  }
378
+ if (reverseEntity === 'Modi') {
379
+ toModi = true;
380
+ }
411
381
  }
412
382
  else {
413
383
  schemaAttrs.push(attrNode);
@@ -416,6 +386,27 @@ function analyzeEntity(filename, path, program) {
416
386
  }
417
387
  }
418
388
  }
389
+ else if (ts.isArrayTypeNode(type) && ts.isTypeReferenceNode(type.elementType) && ts.isIdentifier(type.elementType.typeName)) {
390
+ var typeName = type.elementType.typeName;
391
+ if (referencedSchemas.includes(typeName.text)) {
392
+ // 这也是一对多的反指定义
393
+ var reverseEntity = typeName.text;
394
+ if (ReversePointerRelations[reverseEntity]) {
395
+ ReversePointerRelations[reverseEntity].push(moduleName);
396
+ }
397
+ else {
398
+ (0, lodash_1.assign)(ReversePointerRelations, (_b = {},
399
+ _b[reverseEntity] = [moduleName],
400
+ _b));
401
+ }
402
+ if (reverseEntity === 'Modi') {
403
+ toModi = true;
404
+ }
405
+ }
406
+ else {
407
+ throw new Error("\u5BF9\u8C61".concat(moduleName, "\u4E2D\u5B9A\u4E49\u7684\u5C5E\u6027").concat(attrName, "\u662F\u4E0D\u53EF\u8BC6\u522B\u7684\u6570\u7EC4\u7C7B\u522B"));
408
+ }
409
+ }
419
410
  else {
420
411
  schemaAttrs.push(attrNode);
421
412
  if (ts.isUnionTypeNode(type)) {
@@ -432,7 +423,7 @@ function analyzeEntity(filename, path, program) {
432
423
  if (type.typeName.text === 'String'
433
424
  && typeArguments
434
425
  && typeArguments.length === 1) {
435
- var _c = __read(typeArguments, 1), node_1 = _c[0];
426
+ var _d = tslib_1.__read(typeArguments, 1), node_1 = _d[0];
436
427
  if (ts.isLiteralTypeNode(node_1) && ts.isNumericLiteral(node_1.literal)) {
437
428
  if (parseInt(node_1.literal.text) > 32) {
438
429
  console.warn("\u300C\u300D\u4E2Dentity\u5C5E\u6027\u5B9A\u4E49\u7684\u957F\u5EA6\u5927\u4E8E32\uFF0C\u8BF7\u786E\u8BA4\u5B83\u4E0D\u662F\u4E00\u4E2A\u53CD\u6307\u5BF9\u8C61");
@@ -450,7 +441,7 @@ function analyzeEntity(filename, path, program) {
450
441
  if (type.typeName.text === 'String'
451
442
  && typeArguments
452
443
  && typeArguments.length === 1) {
453
- var _d = __read(typeArguments, 1), node_2 = _d[0];
444
+ var _e = tslib_1.__read(typeArguments, 1), node_2 = _e[0];
454
445
  if (ts.isLiteralTypeNode(node_2) && ts.isNumericLiteral(node_2.literal)) {
455
446
  if (parseInt(node_2.literal.text) !== 64) {
456
447
  console.warn("\u300C".concat(filename, "\u300D\u4E2DentityId\u5C5E\u6027\u5B9A\u4E49\u7684\u957F\u5EA6\u4E0D\u7B49\u4E8E64\uFF0C\u8BF7\u786E\u8BA4\u5B83\u4E0D\u662F\u4E00\u4E2A\u53CD\u6307\u5BF9\u8C61"));
@@ -468,6 +459,28 @@ function analyzeEntity(filename, path, program) {
468
459
  _a));
469
460
  }
470
461
  beforeSchema = false;
462
+ // 对于不是Oper的对象,全部建立和OperEntity的反指关系
463
+ if (!['Oper', 'OperEntity', 'ModiEntity'].includes(moduleName)) {
464
+ if (ReversePointerRelations['OperEntity'] && !ReversePointerRelations['OperEntity'].includes(moduleName)) {
465
+ ReversePointerRelations['OperEntity'].push(moduleName);
466
+ }
467
+ else {
468
+ (0, lodash_1.assign)(ReversePointerRelations, (_b = {},
469
+ _b['OperEntity'] = [moduleName],
470
+ _b));
471
+ }
472
+ // 对于不是Modi的对象,全部建立和ModiEntity的反指关系
473
+ if (!['Modi'].includes(moduleName) && !toModi) {
474
+ if (ReversePointerRelations['ModiEntity'] && !ReversePointerRelations['ModiEntity'].includes(moduleName)) {
475
+ ReversePointerRelations['ModiEntity'].push(moduleName);
476
+ }
477
+ else {
478
+ (0, lodash_1.assign)(ReversePointerRelations, (_c = {},
479
+ _c['ModiEntity'] = [moduleName],
480
+ _c));
481
+ }
482
+ }
483
+ }
471
484
  }
472
485
  else if (beforeSchema) {
473
486
  // 本地规定的一些形状定义,直接使用
@@ -479,17 +492,16 @@ function analyzeEntity(filename, path, program) {
479
492
  if (node.name.text === 'Action') {
480
493
  (0, assert_1.default)(!localeDef, "\u3010".concat(filename, "\u3011locale\u5B9A\u4E49\u987B\u5728Action\u4E4B\u540E"));
481
494
  hasActionDef = true;
482
- hasActionTypeAliasDeclaration = true;
483
495
  var modifiers = [factory.createModifier(ts.SyntaxKind.ExportKeyword)];
484
496
  pushStatementIntoActionAst(moduleName, factory.updateTypeAliasDeclaration(node, node.decorators, modifiers, factory.createIdentifier('ParticularAction'), node.typeParameters, node.type), sourceFile);
485
497
  pushStatementIntoActionAst(moduleName, factory.createTypeAliasDeclaration(undefined, [factory.createModifier(ts.SyntaxKind.ExportKeyword)], factory.createIdentifier("Action"), undefined, factory.createUnionTypeNode([
486
- factory.createTypeReferenceNode(factory.createIdentifier("GenericAction"), undefined),
487
- factory.createTypeReferenceNode(factory.createIdentifier("ParticularAction"), undefined)
498
+ factory.createTypeReferenceNode(OriginActionDict[actionType], undefined),
499
+ factory.createTypeReferenceNode('ParticularAction', undefined)
488
500
  ])), sourceFile);
489
- dealWithActions(moduleName, filename, node.type, program);
501
+ dealWithActions(moduleName, filename, node.type, program, sourceFile);
490
502
  }
491
503
  else if (node.name.text === 'Relation') {
492
- (0, assert_1.default)(!localeDef, "\u3010".concat(filename, "\u3011locale\u5B9A\u4E49\u987B\u5728Action\u4E4B\u540E"));
504
+ (0, assert_1.default)(!localeDef, "\u3010".concat(filename, "\u3011locale\u5B9A\u4E49\u987B\u5728Relation\u4E4B\u540E"));
493
505
  // 增加userXXX对象的描述
494
506
  if (ts.isLiteralTypeNode(node.type)) {
495
507
  (0, assert_1.default)(ts.isStringLiteral(node.type.literal));
@@ -509,18 +521,20 @@ function analyzeEntity(filename, path, program) {
509
521
  factory.createPropertySignature(undefined, factory.createIdentifier(entityLc), undefined, factory.createTypeReferenceNode(factory.createIdentifier(moduleName), undefined)),
510
522
  factory.createPropertySignature(undefined, factory.createIdentifier('relation'), undefined, node.type),
511
523
  ];
512
- (0, lodash_1.assign)(Schema, (_b = {},
513
- _b[relationEntityName] = {
524
+ (0, lodash_1.assign)(Schema, (_d = {},
525
+ _d[relationEntityName] = {
514
526
  schemaAttrs: relationSchemaAttrs,
515
527
  sourceFile: sourceFile,
528
+ actionType: 'excludeUpdate',
516
529
  },
517
- _b));
530
+ _d));
518
531
  addRelationship(relationEntityName, 'User', 'user', true);
519
532
  addRelationship(relationEntityName, moduleName, entityLc, true);
520
533
  hasRelationDef = true;
521
534
  }
522
535
  else if (node.name.text.endsWith('Action') || node.name.text.endsWith('State')) {
523
536
  (0, assert_1.default)(!localeDef, "\u3010".concat(filename, "\u3011locale\u5B9A\u4E49\u987B\u5728Action/State\u4E4B\u540E"));
537
+ hasActionOrStateDef = true;
524
538
  pushStatementIntoActionAst(moduleName, factory.updateTypeAliasDeclaration(node, node.decorators, [factory.createModifier(ts.SyntaxKind.ExportKeyword)], node.name, node.typeParameters, node.type), sourceFile);
525
539
  }
526
540
  else if (beforeSchema) {
@@ -541,7 +555,7 @@ function analyzeEntity(filename, path, program) {
541
555
  checkActionDefNameConsistent(filename, declaration);
542
556
  var typeArguments = declaration.type.typeArguments;
543
557
  (0, assert_1.default)(typeArguments.length === 2);
544
- var _a = __read(typeArguments, 2), actionNode = _a[0], stateNode = _a[1];
558
+ var _a = tslib_1.__read(typeArguments, 2), actionNode = _a[0], stateNode = _a[1];
545
559
  var checker = program.getTypeChecker();
546
560
  var symbol = checker.getSymbolAtLocation(actionNode.typeName);
547
561
  var declaration2_1 = symbol.getDeclarations()[0];
@@ -660,7 +674,7 @@ function analyzeEntity(filename, path, program) {
660
674
  var text = typeName.text;
661
675
  var text2_1 = text === 'Schema' ? entity : text;
662
676
  var manyToOneItem = manyToOneSet && manyToOneSet.find(function (_a) {
663
- var _b = __read(_a, 2), refEntity = _b[0], attrName = _b[1];
677
+ var _b = tslib_1.__read(_a, 2), refEntity = _b[0], attrName = _b[1];
664
678
  return refEntity === text2_1 && attrName === name_1.text;
665
679
  });
666
680
  if (!manyToOneItem) {
@@ -689,11 +703,10 @@ function analyzeEntity(filename, path, program) {
689
703
  });
690
704
  indexes = declaration.initializer;
691
705
  }
692
- else if (ts.isIdentifier(declaration.name) && declaration.name.text === 'locale') {
706
+ else if (ts.isTypeReferenceNode(declaration.type) && ts.isIdentifier(declaration.type.typeName) && declaration.type.typeName.text === 'LocaleDef') {
693
707
  // locale定义
694
708
  var type = declaration.type, initializer = declaration.initializer;
695
709
  (0, assert_1.default)(ts.isObjectLiteralExpression(initializer));
696
- (0, assert_1.default)(ts.isTypeReferenceNode(type) && ts.isIdentifier(type.typeName) && type.typeName.text === 'LocaleDef', 'locale定义的类型必须是LocaleDef');
697
710
  var properties = initializer.properties;
698
711
  (0, assert_1.default)(properties.length > 0, "".concat(filename, "\u81F3\u5C11\u9700\u8981\u6709\u4E00\u79CDlocale\u5B9A\u4E49"));
699
712
  var allEnumStringAttrs = enumStringAttrs.concat(states);
@@ -738,19 +751,38 @@ function analyzeEntity(filename, path, program) {
738
751
  }
739
752
  localeDef = initializer;
740
753
  }
754
+ else if (ts.isTypeReferenceNode(declaration.type) && ts.isIdentifier(declaration.type.typeName) && declaration.type.typeName.text === 'Configuration') {
755
+ (0, assert_1.default)(!hasActionDef, "".concat(moduleName, "\u4E2D\u7684Configuration\u5B9A\u4E49\u5728Action\u4E4B\u540E"));
756
+ (0, assert_1.default)(ts.isObjectLiteralExpression(declaration.initializer));
757
+ var properties = declaration.initializer.properties;
758
+ var atProperty = properties.find(function (ele) { return ts.isPropertyAssignment(ele) && ts.isIdentifier(ele.name) && ele.name.text === 'actionType'; });
759
+ var staticProperty = properties.find(function (ele) { return ts.isPropertyAssignment(ele) && ts.isIdentifier(ele.name) && ele.name.text === 'static'; });
760
+ if (atProperty) {
761
+ actionType = atProperty.initializer.text;
762
+ }
763
+ if (staticProperty) {
764
+ _static = true; // static如果有值只能为true
765
+ }
766
+ }
741
767
  else {
742
- throw new Error("\u4E0D\u80FD\u7406\u89E3\u7684\u5B9A\u4E49\u5185\u5BB9".concat(declaration.name.getText()));
768
+ throw new Error("".concat(moduleName, "\uFF1A\u4E0D\u80FD\u7406\u89E3\u7684\u5B9A\u4E49\u5185\u5BB9").concat(declaration.name.getText()));
743
769
  }
744
770
  });
745
771
  }
746
772
  });
747
- if (hasActionDef && !hasActionTypeAliasDeclaration) {
748
- throw new Error("".concat(filename, "\u4E2D\u6709Action\u5B9A\u4E49\uFF0C\u4F46\u6CA1\u6709\u5B9A\u4E49\u540D\u4E3AAction\u7684\u7C7B\u578B"));
773
+ if (!hasActionDef && hasActionOrStateDef) {
774
+ throw new Error("".concat(filename, "\u4E2D\u6709Action\u6216State\u5B9A\u4E49\uFF0C\u4F46\u6CA1\u6709\u5B9A\u4E49\u5B8C\u6574\u7684Action\u7C7B\u578B"));
775
+ }
776
+ if (hasActionDef && actionType !== 'crud') {
777
+ throw new Error("".concat(filename, "\u4E2D\u6709Action\u5B9A\u4E49\uFF0C\u4F46\u5374\u5B9A\u4E49\u4E86actionType\u4E0D\u662Fcrud"));
749
778
  }
750
- (0, assert_1.default)(schemaAttrs.length > 0);
779
+ (0, assert_1.default)(schemaAttrs.length > 0, "\u5BF9\u8C61".concat(moduleName, "\u6CA1\u6709\u4EFB\u4F55\u5C5E\u6027\u5B9A\u4E49"));
751
780
  var schema = {
752
781
  schemaAttrs: schemaAttrs,
753
782
  sourceFile: sourceFile,
783
+ toModi: toModi,
784
+ actionType: actionType,
785
+ static: _static,
754
786
  };
755
787
  if (hasFulltextIndex) {
756
788
  (0, lodash_1.assign)(schema, {
@@ -809,7 +841,7 @@ function constructSchema(statements, entity) {
809
841
  var text = typeName.text;
810
842
  var text2_2 = text === 'Schema' ? entity : text;
811
843
  var manyToOneItem = manyToOneSet && manyToOneSet.find(function (_a) {
812
- var _b = __read(_a, 2), refEntity = _b[0], attrName = _b[1];
844
+ var _b = tslib_1.__read(_a, 2), refEntity = _b[0], attrName = _b[1];
813
845
  return refEntity === text2_2 && attrName === attrName;
814
846
  });
815
847
  if (manyToOneItem) {
@@ -864,7 +896,7 @@ function constructSchema(statements, entity) {
864
896
  }
865
897
  };
866
898
  try {
867
- for (var schemaAttrs_1 = __values(schemaAttrs), schemaAttrs_1_1 = schemaAttrs_1.next(); !schemaAttrs_1_1.done; schemaAttrs_1_1 = schemaAttrs_1.next()) {
899
+ for (var schemaAttrs_1 = tslib_1.__values(schemaAttrs), schemaAttrs_1_1 = schemaAttrs_1.next(); !schemaAttrs_1_1.done; schemaAttrs_1_1 = schemaAttrs_1.next()) {
868
900
  var attr = schemaAttrs_1_1.value;
869
901
  _loop_1(attr);
870
902
  }
@@ -887,9 +919,9 @@ function constructSchema(statements, entity) {
887
919
  var foreignKeySet = {};
888
920
  if (oneToManySet) {
889
921
  try {
890
- for (var oneToManySet_1 = __values(oneToManySet), oneToManySet_1_1 = oneToManySet_1.next(); !oneToManySet_1_1.done; oneToManySet_1_1 = oneToManySet_1.next()) {
922
+ for (var oneToManySet_1 = tslib_1.__values(oneToManySet), oneToManySet_1_1 = oneToManySet_1.next(); !oneToManySet_1_1.done; oneToManySet_1_1 = oneToManySet_1.next()) {
891
923
  var oneToManyItem = oneToManySet_1_1.value;
892
- var _g = __read(oneToManyItem, 2), entityName = _g[0], foreignKey = _g[1];
924
+ var _g = tslib_1.__read(oneToManyItem, 2), entityName = _g[0], foreignKey = _g[1];
893
925
  if (referenceEntities.indexOf(entityName) === -1) {
894
926
  referenceEntities.push(entityName);
895
927
  }
@@ -926,51 +958,8 @@ function constructSchema(statements, entity) {
926
958
  });
927
959
  // 在这里把需要直接拷贝过来的语句写入
928
960
  if (SchemaAsts[entity]) {
929
- statements.push.apply(statements, __spreadArray([], __read(SchemaAsts[entity].statements), false));
930
- }
931
- // if (keys(foreignKeySet).length > 0) {
932
- // for (const fkItem in foreignKeySet) {
933
- // const entityLc = fkItem.slice(0, 1).toLowerCase().concat(fkItem.slice(1));
934
- // const foreignKeys = [];
935
- // /* statements.push(
936
- // factory.createTypeAliasDeclaration(
937
- // undefined,
938
- // undefined,
939
- // factory.createIdentifier(`${fkItem}s`),
940
- // undefined,
941
- // factory.createTemplateLiteralType(
942
- // factory.createTemplateHead(
943
- // `${entityLc}s$`,
944
- // `${entityLc}s$`
945
- // ),
946
- // [factory.createTemplateLiteralTypeSpan(
947
- // factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword),
948
- // factory.createTemplateTail(
949
- // "",
950
- // ""
951
- // )
952
- // )]
953
- // )
954
- // )
955
- // ); */
956
- // for (let iter = 1; iter < 11; iter++) {
957
- // foreignKeys.push(`${entityLc}s$${iter}`);
958
- // }
959
- // statements.push(
960
- // factory.createTypeAliasDeclaration(
961
- // undefined,
962
- // undefined,
963
- // factory.createIdentifier(`${fkItem}s`),
964
- // undefined,
965
- // factory.createUnionTypeNode(
966
- // foreignKeys.map(
967
- // ele => factory.createLiteralTypeNode(factory.createStringLiteral(ele))
968
- // )
969
- // )
970
- // )
971
- // );
972
- // }
973
- // }
961
+ statements.push.apply(statements, tslib_1.__spreadArray([], tslib_1.__read(SchemaAsts[entity].statements), false));
962
+ }
974
963
  statements.push(factory.createTypeAliasDeclaration(undefined, [
975
964
  factory.createModifier(ts.SyntaxKind.ExportKeyword)
976
965
  ], factory.createIdentifier('OpSchema'), undefined, factory.createTypeLiteralNode(members)), factory.createTypeAliasDeclaration(undefined, [factory.createModifier(ts.SyntaxKind.ExportKeyword)], factory.createIdentifier("OpAttr"), undefined, factory.createTypeOperatorNode(ts.SyntaxKind.KeyOfKeyword, factory.createTypeReferenceNode(factory.createIdentifier("OpSchema"), undefined))));
@@ -978,7 +967,7 @@ function constructSchema(statements, entity) {
978
967
  factory.createModifier(ts.SyntaxKind.ExportKeyword)
979
968
  ], factory.createIdentifier('Schema'), undefined, factory.createIntersectionTypeNode([
980
969
  factory.createTypeLiteralNode(members.concat(members2)),
981
- factory.createMappedTypeNode(undefined, factory.createTypeParameterDeclaration(factory.createIdentifier("A"), factory.createTypeReferenceNode(factory.createIdentifier("ExpressionKey"), undefined), undefined), undefined, factory.createToken(ts.SyntaxKind.QuestionToken), factory.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword), undefined)
970
+ factory.createMappedTypeNode(undefined, factory.createTypeParameterDeclaration(undefined, factory.createIdentifier("A"), factory.createTypeReferenceNode(factory.createIdentifier("ExpressionKey"), undefined), undefined), undefined, factory.createToken(ts.SyntaxKind.QuestionToken), factory.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword), undefined)
982
971
  ])));
983
972
  }
984
973
  /**
@@ -1046,7 +1035,7 @@ function constructFilter(statements, entity) {
1046
1035
  default: {
1047
1036
  var text2_3 = text === 'Schema' ? entity : text;
1048
1037
  var manyToOneItem = manyToOneSet && manyToOneSet.find(function (_a) {
1049
- var _b = __read(_a, 1), refEntity = _b[0];
1038
+ var _b = tslib_1.__read(_a, 1), refEntity = _b[0];
1050
1039
  return refEntity === text2_3;
1051
1040
  });
1052
1041
  if (manyToOneItem) {
@@ -1081,7 +1070,7 @@ function constructFilter(statements, entity) {
1081
1070
  }
1082
1071
  };
1083
1072
  try {
1084
- for (var schemaAttrs_2 = __values(schemaAttrs), schemaAttrs_2_1 = schemaAttrs_2.next(); !schemaAttrs_2_1.done; schemaAttrs_2_1 = schemaAttrs_2.next()) {
1073
+ for (var schemaAttrs_2 = tslib_1.__values(schemaAttrs), schemaAttrs_2_1 = schemaAttrs_2.next(); !schemaAttrs_2_1.done; schemaAttrs_2_1 = schemaAttrs_2.next()) {
1085
1074
  var attr = schemaAttrs_2_1.value;
1086
1075
  _loop_3(attr);
1087
1076
  }
@@ -1094,12 +1083,18 @@ function constructFilter(statements, entity) {
1094
1083
  finally { if (e_3) throw e_3.error; }
1095
1084
  }
1096
1085
  // type AttrFilter = {};
1086
+ if (ReversePointerRelations[entity]) {
1087
+ // 有反向指针,将反向指针关联的对象的Filter也注入
1088
+ ReversePointerRelations[entity].forEach(function (ele) {
1089
+ return members.push(factory.createPropertySignature(undefined, (0, string_1.firstLetterLowerCase)(ele), undefined, factory.createTypeReferenceNode(createForeignRef(entity, ele, 'Filter'))));
1090
+ });
1091
+ }
1097
1092
  var eumUnionTypeNode = ReversePointerRelations[entity] && ReversePointerRelations[entity].map(function (ele) { return factory.createLiteralTypeNode(factory.createStringLiteral((0, string_1.firstLetterLowerCase)(ele))); });
1098
1093
  if (process.env.COMPLING_AS_LIB) {
1099
1094
  eumUnionTypeNode && eumUnionTypeNode.push(factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword));
1100
1095
  }
1101
1096
  statements.push(factory.createTypeAliasDeclaration(undefined, undefined, factory.createIdentifier('AttrFilter'), ReversePointerRelations[entity] ? [
1102
- factory.createTypeParameterDeclaration(factory.createIdentifier("E"), undefined)
1097
+ factory.createTypeParameterDeclaration(undefined, factory.createIdentifier("E"), undefined)
1103
1098
  ] : undefined, factory.createTypeLiteralNode(members)));
1104
1099
  /**
1105
1100
  *
@@ -1113,7 +1108,12 @@ function constructFilter(statements, entity) {
1113
1108
  var types = [
1114
1109
  factory.createTypeReferenceNode(factory.createIdentifier("AttrFilter"), ReversePointerRelations[entity] ? [factory.createTypeReferenceNode('E')] : undefined),
1115
1110
  factory.createTypeReferenceNode(factory.createIdentifier("ExprOp"), [
1116
- factory.createTypeReferenceNode(factory.createIdentifier('OpAttr'))
1111
+ process.env.COMPLING_AS_LIB ?
1112
+ factory.createUnionTypeNode([
1113
+ factory.createTypeReferenceNode(factory.createIdentifier('OpAttr')),
1114
+ factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword)
1115
+ ]) :
1116
+ factory.createTypeReferenceNode(factory.createIdentifier('OpAttr'))
1117
1117
  ]),
1118
1118
  ];
1119
1119
  // 如果还有其它类型的查询如全文,则加在types数组中
@@ -1121,7 +1121,7 @@ function constructFilter(statements, entity) {
1121
1121
  types.push(factory.createTypeReferenceNode('FulltextFilter'));
1122
1122
  }
1123
1123
  statements.push(factory.createTypeAliasDeclaration(undefined, [factory.createModifier(ts.SyntaxKind.ExportKeyword)], factory.createIdentifier("Filter"), ReversePointerRelations[entity] ? [
1124
- factory.createTypeParameterDeclaration(factory.createIdentifier("E"), undefined, factory.createTypeReferenceNode(factory.createIdentifier("Q_EnumValue"), [
1124
+ factory.createTypeParameterDeclaration(undefined, factory.createIdentifier("E"), undefined, factory.createTypeReferenceNode(factory.createIdentifier("Q_EnumValue"), [
1125
1125
  factory.createUnionTypeNode(eumUnionTypeNode)
1126
1126
  ]))
1127
1127
  ] : undefined, factory.createTypeReferenceNode(factory.createIdentifier("MakeFilter"), [factory.createIntersectionTypeNode(types)])));
@@ -1170,7 +1170,7 @@ function constructProjection(statements, entity) {
1170
1170
  default: {
1171
1171
  var text2_4 = text === 'Schema' ? entity : text;
1172
1172
  var manyToOneItem = manyToOneSet && manyToOneSet.find(function (_a) {
1173
- var _b = __read(_a, 1), refEntity = _b[0];
1173
+ var _b = tslib_1.__read(_a, 1), refEntity = _b[0];
1174
1174
  return refEntity === text2_4;
1175
1175
  });
1176
1176
  if (manyToOneItem) {
@@ -1209,7 +1209,7 @@ function constructProjection(statements, entity) {
1209
1209
  }
1210
1210
  };
1211
1211
  try {
1212
- for (var schemaAttrs_3 = __values(schemaAttrs), schemaAttrs_3_1 = schemaAttrs_3.next(); !schemaAttrs_3_1.done; schemaAttrs_3_1 = schemaAttrs_3.next()) {
1212
+ for (var schemaAttrs_3 = tslib_1.__values(schemaAttrs), schemaAttrs_3_1 = schemaAttrs_3.next(); !schemaAttrs_3_1.done; schemaAttrs_3_1 = schemaAttrs_3.next()) {
1213
1213
  var attr = schemaAttrs_3_1.value;
1214
1214
  _loop_4(attr);
1215
1215
  }
@@ -1241,9 +1241,9 @@ function constructProjection(statements, entity) {
1241
1241
  if (oneToManySet) {
1242
1242
  var foreignKeySet = {};
1243
1243
  try {
1244
- for (var oneToManySet_2 = __values(oneToManySet), oneToManySet_2_1 = oneToManySet_2.next(); !oneToManySet_2_1.done; oneToManySet_2_1 = oneToManySet_2.next()) {
1244
+ for (var oneToManySet_2 = tslib_1.__values(oneToManySet), oneToManySet_2_1 = oneToManySet_2.next(); !oneToManySet_2_1.done; oneToManySet_2_1 = oneToManySet_2.next()) {
1245
1245
  var oneToManyItem = oneToManySet_2_1.value;
1246
- var _h = __read(oneToManyItem, 2), entityName = _h[0], foreignKey = _h[1];
1246
+ var _h = tslib_1.__read(oneToManyItem, 2), entityName = _h[0], foreignKey = _h[1];
1247
1247
  if (foreignKeySet.hasOwnProperty(entityName)) {
1248
1248
  foreignKeySet[entityName].push(foreignKey);
1249
1249
  }
@@ -1285,7 +1285,12 @@ function constructProjection(statements, entity) {
1285
1285
  }
1286
1286
  var exprNode = factory.createTypeReferenceNode(factory.createIdentifier("Partial"), [
1287
1287
  factory.createTypeReferenceNode(factory.createIdentifier("ExprOp"), [
1288
- factory.createTypeReferenceNode(factory.createIdentifier("OpAttr"), undefined)
1288
+ process.env.COMPLING_AS_LIB ?
1289
+ factory.createUnionTypeNode([
1290
+ factory.createTypeReferenceNode(factory.createIdentifier('OpAttr')),
1291
+ factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword)
1292
+ ]) :
1293
+ factory.createTypeReferenceNode(factory.createIdentifier('OpAttr'))
1289
1294
  ])
1290
1295
  ]);
1291
1296
  var MetaPropertySignaturs = [
@@ -1297,7 +1302,7 @@ function constructProjection(statements, entity) {
1297
1302
  // Projection,正常查询的投影
1298
1303
  statements.push(factory.createTypeAliasDeclaration(undefined, [factory.createModifier(ts.SyntaxKind.ExportKeyword)], factory.createIdentifier("Projection"), undefined, factory.createIntersectionTypeNode([
1299
1304
  factory.createTypeLiteralNode(MetaPropertySignaturs.concat(properties.map(function (_a) {
1300
- var _b = __read(_a, 3), n = _b[0], q = _b[1], v = _b[2];
1305
+ var _b = tslib_1.__read(_a, 3), n = _b[0], q = _b[1], v = _b[2];
1301
1306
  return factory.createPropertySignature(undefined, n, q ? undefined : factory.createToken(ts.SyntaxKind.QuestionToken), v || factory.createLiteralTypeNode(factory.createNumericLiteral("1")));
1302
1307
  }))),
1303
1308
  exprNode,
@@ -1305,7 +1310,7 @@ function constructProjection(statements, entity) {
1305
1310
  // ExportProjection,下载查询的投影
1306
1311
  statements.push(factory.createTypeAliasDeclaration(undefined, [factory.createModifier(ts.SyntaxKind.ExportKeyword)], factory.createIdentifier("ExportProjection"), undefined, factory.createIntersectionTypeNode([
1307
1312
  factory.createTypeLiteralNode(MetaPropertySignaturs.concat(properties.map(function (_a) {
1308
- var _b = __read(_a, 4), n = _b[0], q = _b[1], v = _b[2], v2 = _b[3];
1313
+ var _b = tslib_1.__read(_a, 4), n = _b[0], q = _b[1], v = _b[2], v2 = _b[3];
1309
1314
  return factory.createPropertySignature(undefined, n, factory.createToken(ts.SyntaxKind.QuestionToken), v2 || factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword));
1310
1315
  }))),
1311
1316
  exprNode,
@@ -1430,10 +1435,10 @@ function constructQuery(statements, entity) {
1430
1435
  var manyToSelf = false;
1431
1436
  if (manyToOneSet) {
1432
1437
  (0, lodash_1.uniqBy)(manyToOneSet, function (_a) {
1433
- var _b = __read(_a, 1), a = _b[0];
1438
+ var _b = tslib_1.__read(_a, 1), a = _b[0];
1434
1439
  return a;
1435
1440
  }).forEach(function (_a) {
1436
- var _b = __read(_a, 2), oneEntity = _b[0], foreignKey = _b[1];
1441
+ var _b = tslib_1.__read(_a, 2), oneEntity = _b[0], foreignKey = _b[1];
1437
1442
  statements.push(factory.createTypeAliasDeclaration(undefined, [factory.createModifier(ts.SyntaxKind.ExportKeyword)], factory.createIdentifier("".concat(oneEntity, "IdSubQuery")), undefined, factory.createTypeReferenceNode(factory.createIdentifier("Selection"), [factory.createTypeReferenceNode(factory.createIdentifier("".concat(oneEntity, "IdProjection")), undefined)])));
1438
1443
  if (oneEntity === entity) {
1439
1444
  manyToSelf = true;
@@ -1455,11 +1460,11 @@ function constructSorter(statements, entity) {
1455
1460
  var schemaAttrs = Schema[entity].schemaAttrs;
1456
1461
  var members = [
1457
1462
  // id: 1
1458
- factory.createPropertySignature(undefined, factory.createIdentifier("id"), undefined, factory.createLiteralTypeNode(factory.createNumericLiteral("1"))),
1463
+ factory.createTypeLiteralNode([factory.createPropertySignature(undefined, factory.createIdentifier("id"), undefined, factory.createLiteralTypeNode(factory.createNumericLiteral("1")))]),
1459
1464
  // $$createAt$$: 1
1460
- factory.createPropertySignature(undefined, factory.createIdentifier('$$createAt$$'), undefined, factory.createLiteralTypeNode(factory.createNumericLiteral("1"))),
1465
+ factory.createTypeLiteralNode([factory.createPropertySignature(undefined, factory.createIdentifier("$$createAt$$"), undefined, factory.createLiteralTypeNode(factory.createNumericLiteral("1")))]),
1461
1466
  // $$updateAt$$: 1
1462
- factory.createPropertySignature(undefined, factory.createIdentifier('$$updateAt$$'), undefined, factory.createLiteralTypeNode(factory.createNumericLiteral("1")))
1467
+ factory.createTypeLiteralNode([factory.createPropertySignature(undefined, factory.createIdentifier("$$updateAt$$"), undefined, factory.createLiteralTypeNode(factory.createNumericLiteral("1")))]),
1463
1468
  ];
1464
1469
  var _b = ManyToOne, _c = entity, manyToOneSet = _b[_c];
1465
1470
  var _loop_6 = function (attr) {
@@ -1485,12 +1490,12 @@ function constructSorter(statements, entity) {
1485
1490
  default: {
1486
1491
  var text2_5 = text === 'Schema' ? entity : text;
1487
1492
  var manyToOneItem = manyToOneSet && manyToOneSet.find(function (_a) {
1488
- var _b = __read(_a, 1), refEntity = _b[0];
1493
+ var _b = tslib_1.__read(_a, 1), refEntity = _b[0];
1489
1494
  return refEntity === text2_5;
1490
1495
  });
1491
1496
  if (manyToOneItem) {
1492
1497
  type2 = factory.createTypeReferenceNode(createForeignRef(entity, text2_5, 'SortAttr'));
1493
- members.push(factory.createPropertySignature(undefined, "".concat(name_5.text, "Id"), undefined, factory.createLiteralTypeNode(factory.createNumericLiteral("1"))));
1498
+ members.push(factory.createTypeLiteralNode([factory.createPropertySignature(undefined, factory.createIdentifier("".concat(name_5.text, "Id")), undefined, factory.createLiteralTypeNode(factory.createNumericLiteral("1")))]));
1494
1499
  }
1495
1500
  else if (!['Object'].includes(text)) {
1496
1501
  // todo 对State的专门处理
@@ -1499,19 +1504,19 @@ function constructSorter(statements, entity) {
1499
1504
  }
1500
1505
  }
1501
1506
  if (type2) {
1502
- members.push(factory.createPropertySignature(undefined, name_5, undefined, type2));
1507
+ members.push(factory.createTypeLiteralNode([factory.createPropertySignature(undefined, name_5, undefined, type2)]));
1503
1508
  }
1504
1509
  }
1505
1510
  }
1506
1511
  else if (ts.isUnionTypeNode(type) && ts.isLiteralTypeNode(type.types[0]) || ts.isLiteralTypeNode(type)) {
1507
- members.push(factory.createPropertySignature(undefined, name_5, undefined, factory.createLiteralTypeNode(factory.createNumericLiteral("1"))));
1512
+ members.push(factory.createTypeLiteralNode([factory.createPropertySignature(undefined, name_5, undefined, factory.createLiteralTypeNode(factory.createNumericLiteral("1")))]));
1508
1513
  }
1509
1514
  else {
1510
1515
  // 本地规定的shape,非结构化属性不参与排序
1511
1516
  }
1512
1517
  };
1513
1518
  try {
1514
- for (var schemaAttrs_4 = __values(schemaAttrs), schemaAttrs_4_1 = schemaAttrs_4.next(); !schemaAttrs_4_1.done; schemaAttrs_4_1 = schemaAttrs_4.next()) {
1519
+ for (var schemaAttrs_4 = tslib_1.__values(schemaAttrs), schemaAttrs_4_1 = schemaAttrs_4.next(); !schemaAttrs_4_1.done; schemaAttrs_4_1 = schemaAttrs_4.next()) {
1515
1520
  var attr = schemaAttrs_4_1.value;
1516
1521
  _loop_6(attr);
1517
1522
  }
@@ -1525,30 +1530,37 @@ function constructSorter(statements, entity) {
1525
1530
  }
1526
1531
  if (ReversePointerRelations[entity]) {
1527
1532
  ReversePointerRelations[entity].forEach(function (one) {
1528
- members.push(factory.createPropertySignature(undefined, (0, string_1.firstLetterLowerCase)(one), undefined, factory.createTypeReferenceNode(createForeignRef(entity, one, 'SortAttr'))));
1533
+ members.push(factory.createTypeLiteralNode([factory.createPropertySignature(undefined, (0, string_1.firstLetterLowerCase)(one), undefined, factory.createTypeReferenceNode(createForeignRef(entity, one, 'SortAttr')))]));
1529
1534
  });
1530
- if (process.env.COMPLING_AS_LIB) {
1531
- members.push(factory.createIndexSignature(undefined, undefined, [factory.createParameterDeclaration(undefined, undefined, undefined, factory.createIdentifier("k"), undefined, factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword), undefined)], factory.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword)));
1532
- }
1533
1535
  }
1536
+ if (process.env.COMPLING_AS_LIB) {
1537
+ members.push(factory.createTypeLiteralNode([factory.createIndexSignature(undefined, undefined, [factory.createParameterDeclaration(undefined, undefined, undefined, factory.createIdentifier("k"), undefined, factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword), undefined)], factory.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword))]));
1538
+ }
1539
+ members.push(factory.createTypeReferenceNode(factory.createIdentifier("OneOf"), [factory.createTypeReferenceNode(factory.createIdentifier("ExprOp"), [
1540
+ process.env.COMPLING_AS_LIB ?
1541
+ factory.createUnionTypeNode([
1542
+ factory.createTypeReferenceNode(factory.createIdentifier('OpAttr')),
1543
+ factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword)
1544
+ ]) :
1545
+ factory.createTypeReferenceNode(factory.createIdentifier('OpAttr'))
1546
+ ])]));
1534
1547
  /**
1535
1548
  *
1536
- export type SortAttr = OneOf<{
1549
+ export type SortAttr = {
1537
1550
  id: 1;
1538
- name: 1;
1539
- nickname: 1;
1540
- age: 1;
1541
- gender: 1;
1551
+ } | {
1542
1552
  $$createAt$$: 1;
1553
+ } | {
1543
1554
  $$updateAt$$: 1;
1544
- } & Record<FnCallKey, 1 | FnCallValue<AttrFilter>>>;
1555
+ } | {
1556
+ modiId: 1;
1557
+ } | {
1558
+ modi: Modi.SortAttr;
1559
+ } | {
1560
+ [k: string]: any;
1561
+ } | OneOf<ExprOp<OpAttr>>
1545
1562
  */
1546
- statements.push(factory.createTypeAliasDeclaration(undefined, [factory.createModifier(ts.SyntaxKind.ExportKeyword)], factory.createIdentifier("SortAttr"), undefined, factory.createTypeReferenceNode(factory.createIdentifier("OneOf"), [factory.createIntersectionTypeNode([
1547
- factory.createTypeLiteralNode(members),
1548
- factory.createTypeReferenceNode(factory.createIdentifier("ExprOp"), [
1549
- factory.createTypeReferenceNode(factory.createIdentifier('OpAttr'))
1550
- ])
1551
- ])])));
1563
+ statements.push(factory.createTypeAliasDeclaration(undefined, [factory.createModifier(ts.SyntaxKind.ExportKeyword)], factory.createIdentifier("SortAttr"), undefined, factory.createUnionTypeNode(members)));
1552
1564
  /**
1553
1565
  * export type SortNode = {
1554
1566
  $attr: SortAttr;
@@ -1574,9 +1586,9 @@ function constructFullAttrs(statements, entity) {
1574
1586
  if (manyToOneSet && manyToOneSet.length) {
1575
1587
  var mtoAttrs = [];
1576
1588
  try {
1577
- for (var manyToOneSet_1 = __values(manyToOneSet), manyToOneSet_1_1 = manyToOneSet_1.next(); !manyToOneSet_1_1.done; manyToOneSet_1_1 = manyToOneSet_1.next()) {
1589
+ for (var manyToOneSet_1 = tslib_1.__values(manyToOneSet), manyToOneSet_1_1 = manyToOneSet_1.next(); !manyToOneSet_1_1.done; manyToOneSet_1_1 = manyToOneSet_1.next()) {
1578
1590
  var item = manyToOneSet_1_1.value;
1579
- var _g = __read(item, 2), one = _g[0], key = _g[1];
1591
+ var _g = tslib_1.__read(item, 2), one = _g[0], key = _g[1];
1580
1592
  if (one === entity) {
1581
1593
  // 递归引用自身,因为typescript本身不支持递归,因此这里做一个显式的三层递归应该够用了
1582
1594
  mtoAttrs.push(factory.createTemplateLiteralType(factory.createTemplateHead("".concat(key, "."), "".concat(key, ".")), [factory.createTemplateLiteralTypeSpan(factory.createTypeReferenceNode(factory.createIdentifier("OpAttr"), undefined), factory.createTemplateTail("", ""))]), factory.createTemplateLiteralType(factory.createTemplateHead("".concat(key, ".").concat(key, "."), "".concat(key, ".").concat(key, ".")), [factory.createTemplateLiteralTypeSpan(factory.createTypeReferenceNode(factory.createIdentifier("OpAttr"), undefined), factory.createTemplateTail("", ""))]), factory.createTemplateLiteralType(factory.createTemplateHead("".concat(key, ".").concat(key, ".").concat(key, "."), "".concat(key, ".").concat(key, ".").concat(key, ".")), [factory.createTemplateLiteralTypeSpan(factory.createTypeReferenceNode(factory.createIdentifier("OpAttr"), undefined), factory.createTemplateTail("", ""))]));
@@ -1594,9 +1606,9 @@ function constructFullAttrs(statements, entity) {
1594
1606
  }
1595
1607
  finally { if (e_7) throw e_7.error; }
1596
1608
  }
1597
- statements.push(factory.createTypeAliasDeclaration(undefined, [factory.createModifier(ts.SyntaxKind.ExportKeyword)], factory.createIdentifier("NativeAttr"), undefined, factory.createUnionTypeNode(__spreadArray([
1609
+ statements.push(factory.createTypeAliasDeclaration(undefined, [factory.createModifier(ts.SyntaxKind.ExportKeyword)], factory.createIdentifier("NativeAttr"), undefined, factory.createUnionTypeNode(tslib_1.__spreadArray([
1598
1610
  factory.createTypeReferenceNode(factory.createIdentifier("OpAttr"), undefined)
1599
- ], __read(mtoAttrs), false))));
1611
+ ], tslib_1.__read(mtoAttrs), false))));
1600
1612
  }
1601
1613
  else {
1602
1614
  statements.push(factory.createTypeAliasDeclaration(undefined, [factory.createModifier(ts.SyntaxKind.ExportKeyword)], factory.createIdentifier("NativeAttr"), undefined, factory.createTypeReferenceNode(factory.createIdentifier("OpAttr"), undefined)));
@@ -1604,9 +1616,9 @@ function constructFullAttrs(statements, entity) {
1604
1616
  var foreignKeySet = {};
1605
1617
  if (oneToManySet && oneToManySet.length > 0) {
1606
1618
  try {
1607
- for (var oneToManySet_3 = __values(oneToManySet), oneToManySet_3_1 = oneToManySet_3.next(); !oneToManySet_3_1.done; oneToManySet_3_1 = oneToManySet_3.next()) {
1619
+ for (var oneToManySet_3 = tslib_1.__values(oneToManySet), oneToManySet_3_1 = oneToManySet_3.next(); !oneToManySet_3_1.done; oneToManySet_3_1 = oneToManySet_3.next()) {
1608
1620
  var oneToManyItem = oneToManySet_3_1.value;
1609
- var _h = __read(oneToManyItem, 2), entityName = _h[0], foreignKey = _h[1];
1621
+ var _h = tslib_1.__read(oneToManyItem, 2), entityName = _h[0], foreignKey = _h[1];
1610
1622
  if (foreignKeySet.hasOwnProperty(entityName)) {
1611
1623
  foreignKeySet[entityName].push(foreignKey);
1612
1624
  }
@@ -1648,9 +1660,9 @@ function constructFullAttrs(statements, entity) {
1648
1660
  for (var entityName in foreignKeySet) {
1649
1661
  _loop_7(entityName);
1650
1662
  }
1651
- statements.push(factory.createTypeAliasDeclaration(undefined, [factory.createModifier(ts.SyntaxKind.ExportKeyword)], factory.createIdentifier("FullAttr"), undefined, factory.createUnionTypeNode(__spreadArray([
1663
+ statements.push(factory.createTypeAliasDeclaration(undefined, [factory.createModifier(ts.SyntaxKind.ExportKeyword)], factory.createIdentifier("FullAttr"), undefined, factory.createUnionTypeNode(tslib_1.__spreadArray([
1652
1664
  factory.createTypeReferenceNode(factory.createIdentifier("NativeAttr"), undefined)
1653
- ], __read(otmAttrs_1), false))));
1665
+ ], tslib_1.__read(otmAttrs_1), false))));
1654
1666
  }
1655
1667
  else {
1656
1668
  statements.push(factory.createTypeAliasDeclaration(undefined, [factory.createModifier(ts.SyntaxKind.ExportKeyword)], factory.createIdentifier("FullAttr"), undefined, factory.createTypeReferenceNode(factory.createIdentifier("NativeAttr"), undefined)));
@@ -1660,14 +1672,17 @@ function constructActions(statements, entity) {
1660
1672
  var e_9, _a, e_10, _b, e_11, _c, e_12, _d, e_13, _e, e_14, _f, e_15, _g, e_16, _h, e_17, _j;
1661
1673
  // Selection
1662
1674
  statements.push(factory.createTypeAliasDeclaration(undefined, [factory.createModifier(ts.SyntaxKind.ExportKeyword)], factory.createIdentifier("SelectOperation"), [
1663
- factory.createTypeParameterDeclaration(factory.createIdentifier("P"), undefined, factory.createTypeReferenceNode(factory.createIdentifier("Projection"), undefined))
1664
- ], factory.createTypeReferenceNode(factory.createIdentifier("OakOperation"), [
1665
- factory.createLiteralTypeNode(factory.createStringLiteral("select")),
1666
- factory.createTypeReferenceNode(factory.createIdentifier("P"), undefined),
1667
- factory.createTypeReferenceNode(factory.createIdentifier("Filter"), undefined),
1668
- factory.createTypeReferenceNode(factory.createIdentifier("Sorter"), undefined)
1675
+ factory.createTypeParameterDeclaration(undefined, factory.createIdentifier("P"), undefined, factory.createTypeReferenceNode(factory.createIdentifier("Projection"), undefined))
1676
+ ], factory.createTypeReferenceNode(factory.createIdentifier("Omit"), [
1677
+ factory.createTypeReferenceNode(factory.createIdentifier("OakOperation"), [
1678
+ factory.createLiteralTypeNode(factory.createStringLiteral("select")),
1679
+ factory.createTypeReferenceNode(factory.createIdentifier("P"), undefined),
1680
+ factory.createTypeReferenceNode(factory.createIdentifier("Filter"), undefined),
1681
+ factory.createTypeReferenceNode(factory.createIdentifier("Sorter"), undefined)
1682
+ ]),
1683
+ factory.createLiteralTypeNode(factory.createStringLiteral("id"))
1669
1684
  ])), factory.createTypeAliasDeclaration(undefined, [factory.createModifier(ts.SyntaxKind.ExportKeyword)], factory.createIdentifier("Selection"), [
1670
- factory.createTypeParameterDeclaration(factory.createIdentifier("P"), undefined, factory.createTypeReferenceNode(factory.createIdentifier("Projection"), undefined))
1685
+ factory.createTypeParameterDeclaration(undefined, factory.createIdentifier("P"), undefined, factory.createTypeReferenceNode(factory.createIdentifier("Projection"), undefined))
1671
1686
  ], factory.createTypeReferenceNode(factory.createIdentifier("Omit"), [
1672
1687
  factory.createTypeReferenceNode(factory.createIdentifier("SelectOperation"), [
1673
1688
  factory.createTypeReferenceNode(factory.createIdentifier("P"), undefined)
@@ -1686,9 +1701,9 @@ function constructActions(statements, entity) {
1686
1701
  var foreignKeySet = {};
1687
1702
  if (oneToManySet) {
1688
1703
  try {
1689
- for (var oneToManySet_4 = __values(oneToManySet), oneToManySet_4_1 = oneToManySet_4.next(); !oneToManySet_4_1.done; oneToManySet_4_1 = oneToManySet_4.next()) {
1704
+ for (var oneToManySet_4 = tslib_1.__values(oneToManySet), oneToManySet_4_1 = oneToManySet_4.next(); !oneToManySet_4_1.done; oneToManySet_4_1 = oneToManySet_4.next()) {
1690
1705
  var oneToManyItem = oneToManySet_4_1.value;
1691
- var _p = __read(oneToManyItem, 2), entityName = _p[0], foreignKey = _p[1];
1706
+ var _p = tslib_1.__read(oneToManyItem, 2), entityName = _p[0], foreignKey = _p[1];
1692
1707
  if (foreignKeySet.hasOwnProperty(entityName)) {
1693
1708
  foreignKeySet[entityName].push(foreignKey);
1694
1709
  }
@@ -1706,13 +1721,16 @@ function constructActions(statements, entity) {
1706
1721
  }
1707
1722
  }
1708
1723
  // CreateOperationData
1709
- var foreignKeyAttrNode = [];
1724
+ var foreignKeyAttr = [];
1725
+ if (ReversePointerEntities[entity]) {
1726
+ foreignKeyAttr.push('entity', 'entityId');
1727
+ }
1710
1728
  if (manyToOneSet) {
1711
1729
  try {
1712
- for (var manyToOneSet_2 = __values(manyToOneSet), manyToOneSet_2_1 = manyToOneSet_2.next(); !manyToOneSet_2_1.done; manyToOneSet_2_1 = manyToOneSet_2.next()) {
1730
+ for (var manyToOneSet_2 = tslib_1.__values(manyToOneSet), manyToOneSet_2_1 = manyToOneSet_2.next(); !manyToOneSet_2_1.done; manyToOneSet_2_1 = manyToOneSet_2.next()) {
1713
1731
  var one = manyToOneSet_2_1.value;
1714
1732
  if (!ReversePointerRelations[entity] || !ReversePointerRelations[entity].includes(one[1])) {
1715
- foreignKeyAttrNode.push(factory.createLiteralTypeNode(factory.createStringLiteral("".concat(one[1], "Id"))));
1733
+ foreignKeyAttr.push("".concat(one[1], "Id"));
1716
1734
  }
1717
1735
  }
1718
1736
  }
@@ -1723,16 +1741,13 @@ function constructActions(statements, entity) {
1723
1741
  }
1724
1742
  finally { if (e_10) throw e_10.error; }
1725
1743
  }
1726
- if (ReversePointerRelations[entity]) {
1727
- foreignKeyAttrNode.push(factory.createLiteralTypeNode(factory.createStringLiteral('entity')), factory.createLiteralTypeNode(factory.createStringLiteral('entityId')));
1728
- }
1729
1744
  }
1730
1745
  var adNodes = [
1731
1746
  factory.createTypeReferenceNode(factory.createIdentifier("FormCreateData"), [
1732
- foreignKeyAttrNode.length > 0
1747
+ foreignKeyAttr.length > 0
1733
1748
  ? factory.createTypeReferenceNode(factory.createIdentifier("Omit"), [
1734
1749
  factory.createTypeReferenceNode(factory.createIdentifier("OpSchema"), undefined),
1735
- factory.createUnionTypeNode(foreignKeyAttrNode)
1750
+ factory.createUnionTypeNode((0, lodash_1.uniq)(foreignKeyAttr).map(function (ele) { return factory.createLiteralTypeNode(factory.createStringLiteral(ele)); }))
1736
1751
  ])
1737
1752
  : factory.createTypeReferenceNode(factory.createIdentifier("OpSchema"), undefined)
1738
1753
  ])
@@ -1746,22 +1761,45 @@ function constructActions(statements, entity) {
1746
1761
  */
1747
1762
  var upsertOneNodes = [];
1748
1763
  try {
1749
- for (var manyToOneSet_3 = __values(manyToOneSet), manyToOneSet_3_1 = manyToOneSet_3.next(); !manyToOneSet_3_1.done; manyToOneSet_3_1 = manyToOneSet_3.next()) {
1764
+ for (var manyToOneSet_3 = tslib_1.__values(manyToOneSet), manyToOneSet_3_1 = manyToOneSet_3.next(); !manyToOneSet_3_1.done; manyToOneSet_3_1 = manyToOneSet_3.next()) {
1750
1765
  var one = manyToOneSet_3_1.value;
1751
1766
  if (!ReversePointerRelations[entity] || !ReversePointerRelations[entity].includes(one[0])) {
1752
- upsertOneNodes.push(factory.createUnionTypeNode([
1753
- factory.createTypeLiteralNode([
1754
- factory.createPropertySignature(undefined, factory.createIdentifier("".concat(one[1], "Id")), factory.createToken(ts.SyntaxKind.QuestionToken), factory.createUnionTypeNode([
1755
- factory.createKeywordTypeNode(ts.SyntaxKind.NeverKeyword),
1756
- factory.createLiteralTypeNode(factory.createNull())
1757
- ])),
1758
- factory.createPropertySignature(undefined, factory.createIdentifier(one[1]), one[2] ? factory.createToken(ts.SyntaxKind.QuestionToken) : undefined, factory.createTypeReferenceNode(createForeignRef(entity, one[0], 'CreateSingleOperation')))
1759
- ]),
1760
- factory.createTypeLiteralNode([
1761
- factory.createPropertySignature(undefined, factory.createIdentifier("".concat(one[1], "Id")), one[2] ? factory.createToken(ts.SyntaxKind.QuestionToken) : undefined, factory.createTypeReferenceNode(factory.createIdentifier("String"), [factory.createLiteralTypeNode(factory.createNumericLiteral("64"))])),
1762
- factory.createPropertySignature(undefined, factory.createIdentifier(one[1]), factory.createToken(ts.SyntaxKind.QuestionToken), factory.createTypeReferenceNode(createForeignRef(entity, one[0], 'UpdateOperation')))
1763
- ])
1764
- ]));
1767
+ var oneEntity = one[0];
1768
+ var cascadeCreateNode = factory.createTypeLiteralNode([
1769
+ factory.createPropertySignature(undefined, factory.createIdentifier("".concat(one[1], "Id")), factory.createToken(ts.SyntaxKind.QuestionToken), factory.createKeywordTypeNode(ts.SyntaxKind.NeverKeyword)),
1770
+ factory.createPropertySignature(undefined, factory.createIdentifier(one[1]), one[2] ? factory.createToken(ts.SyntaxKind.QuestionToken) : undefined, factory.createTypeReferenceNode(createForeignRef(entity, one[0], 'CreateSingleOperation')))
1771
+ ]);
1772
+ var cascadeUpdateNode = factory.createTypeLiteralNode([
1773
+ factory.createPropertySignature(undefined, factory.createIdentifier("".concat(one[1], "Id")), undefined, factory.createTypeReferenceNode(factory.createIdentifier("String"), [factory.createLiteralTypeNode(factory.createNumericLiteral("64"))])),
1774
+ factory.createPropertySignature(undefined, factory.createIdentifier(one[1]), factory.createToken(ts.SyntaxKind.QuestionToken), factory.createTypeReferenceNode(createForeignRef(entity, one[0], 'UpdateOperation')))
1775
+ ]);
1776
+ var noCascadeNode = factory.createTypeLiteralNode([
1777
+ factory.createPropertySignature(undefined, factory.createIdentifier("".concat(one[1], "Id")), one[2] ? factory.createToken(ts.SyntaxKind.QuestionToken) : undefined, factory.createTypeReferenceNode(factory.createIdentifier("String"), [factory.createLiteralTypeNode(factory.createNumericLiteral("64"))]))
1778
+ ]);
1779
+ if (Schema[oneEntity].static) {
1780
+ upsertOneNodes.push(noCascadeNode);
1781
+ }
1782
+ else {
1783
+ switch (Schema[oneEntity].actionType) {
1784
+ case 'crud':
1785
+ case 'excludeRemove': {
1786
+ upsertOneNodes.push(factory.createUnionTypeNode([cascadeCreateNode, cascadeUpdateNode, noCascadeNode]));
1787
+ break;
1788
+ }
1789
+ case 'excludeUpdate':
1790
+ case 'appendOnly': {
1791
+ upsertOneNodes.push(factory.createUnionTypeNode([cascadeCreateNode, noCascadeNode]));
1792
+ break;
1793
+ }
1794
+ case 'readOnly': {
1795
+ upsertOneNodes.push(noCascadeNode);
1796
+ break;
1797
+ }
1798
+ default: {
1799
+ (0, assert_1.default)(false);
1800
+ }
1801
+ }
1802
+ }
1765
1803
  }
1766
1804
  }
1767
1805
  }
@@ -1772,23 +1810,59 @@ function constructActions(statements, entity) {
1772
1810
  }
1773
1811
  finally { if (e_11) throw e_11.error; }
1774
1812
  }
1775
- var reverseOneNodes = [];
1813
+ if (upsertOneNodes.length > 0) {
1814
+ adNodes.push(factory.createIntersectionTypeNode(upsertOneNodes));
1815
+ }
1816
+ }
1817
+ var reverseOneNodes = [];
1818
+ if (ReversePointerEntities[entity]) {
1776
1819
  if (ReversePointerRelations[entity]) {
1777
1820
  try {
1778
- for (var _q = __values(ReversePointerRelations[entity]), _r = _q.next(); !_r.done; _r = _q.next()) {
1821
+ for (var _q = tslib_1.__values(ReversePointerRelations[entity]), _r = _q.next(); !_r.done; _r = _q.next()) {
1779
1822
  var one = _r.value;
1780
- reverseOneNodes.push(factory.createTypeLiteralNode([
1823
+ var cascadeCreateNode = factory.createTypeLiteralNode([
1781
1824
  factory.createPropertySignature(undefined, factory.createIdentifier('entity'), factory.createToken(ts.SyntaxKind.QuestionToken), factory.createKeywordTypeNode(ts.SyntaxKind.NeverKeyword)),
1782
1825
  factory.createPropertySignature(undefined, factory.createIdentifier('entityId'), factory.createToken(ts.SyntaxKind.QuestionToken), factory.createKeywordTypeNode(ts.SyntaxKind.NeverKeyword)),
1783
1826
  factory.createPropertySignature(undefined, factory.createIdentifier((0, string_1.firstLetterLowerCase)(one)), undefined, // 反向指针好像不能为空,以后或许会有特例 by Xc
1784
1827
  factory.createTypeReferenceNode(createForeignRef(entity, one, 'CreateSingleOperation')))
1785
- ]), factory.createTypeLiteralNode([
1828
+ ]);
1829
+ var cascadeUpdateNode = factory.createTypeLiteralNode([
1786
1830
  factory.createPropertySignature(undefined, factory.createIdentifier('entity'), undefined, // 反向指针好像不能为空,以后或许会有特例 by Xc
1787
1831
  factory.createLiteralTypeNode(factory.createStringLiteral("".concat((0, string_1.firstLetterLowerCase)(one))))),
1788
1832
  factory.createPropertySignature(undefined, factory.createIdentifier('entityId'), undefined, // 反向指针好像不能为空,以后或许会有特例 by Xc
1789
1833
  factory.createTypeReferenceNode(factory.createIdentifier("String"), [factory.createLiteralTypeNode(factory.createNumericLiteral("64"))])),
1790
- factory.createPropertySignature(undefined, factory.createIdentifier((0, string_1.firstLetterLowerCase)(one)), factory.createToken(ts.SyntaxKind.QuestionToken), factory.createTypeReferenceNode(createForeignRef(entity, one, 'UpdateOperation')))
1791
- ]));
1834
+ factory.createPropertySignature(undefined, factory.createIdentifier((0, string_1.firstLetterLowerCase)(one)), undefined, factory.createTypeReferenceNode(createForeignRef(entity, one, 'UpdateOperation')))
1835
+ ]);
1836
+ var noCascadeNode = factory.createTypeLiteralNode([
1837
+ factory.createPropertySignature(undefined, factory.createIdentifier('entity'), undefined, // 反向指针好像不能为空,以后或许会有特例 by Xc
1838
+ factory.createLiteralTypeNode(factory.createStringLiteral("".concat((0, string_1.firstLetterLowerCase)(one))))),
1839
+ factory.createPropertySignature(undefined, factory.createIdentifier('entityId'), undefined, // 反向指针好像不能为空,以后或许会有特例 by Xc
1840
+ factory.createTypeReferenceNode(factory.createIdentifier("String"), [factory.createLiteralTypeNode(factory.createNumericLiteral("64"))]))
1841
+ ]);
1842
+ if (Schema[one].static) {
1843
+ reverseOneNodes.push(noCascadeNode);
1844
+ }
1845
+ else {
1846
+ switch (Schema[one].actionType) {
1847
+ case 'crud':
1848
+ case 'excludeRemove': {
1849
+ reverseOneNodes.push(cascadeCreateNode, cascadeUpdateNode, noCascadeNode);
1850
+ break;
1851
+ }
1852
+ case 'appendOnly':
1853
+ case 'excludeUpdate': {
1854
+ reverseOneNodes.push(cascadeCreateNode, noCascadeNode);
1855
+ break;
1856
+ }
1857
+ case 'readOnly': {
1858
+ reverseOneNodes.push(noCascadeNode);
1859
+ break;
1860
+ }
1861
+ default: {
1862
+ (0, assert_1.default)(false);
1863
+ }
1864
+ }
1865
+ }
1792
1866
  }
1793
1867
  }
1794
1868
  catch (e_12_1) { e_12 = { error: e_12_1 }; }
@@ -1798,15 +1872,14 @@ function constructActions(statements, entity) {
1798
1872
  }
1799
1873
  finally { if (e_12) throw e_12.error; }
1800
1874
  }
1801
- if (process.env.COMPLING_AS_LIB) {
1802
- // 如果是base,要包容更多可能的反指
1803
- reverseOneNodes.push(factory.createTypeLiteralNode([
1804
- factory.createIndexSignature(undefined, undefined, [factory.createParameterDeclaration(undefined, undefined, undefined, factory.createIdentifier("K"), undefined, factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword), undefined)], factory.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword))
1805
- ]));
1806
- }
1807
1875
  }
1808
- if (upsertOneNodes.length > 0) {
1809
- adNodes.push(factory.createIntersectionTypeNode(upsertOneNodes));
1876
+ if (process.env.COMPLING_AS_LIB) {
1877
+ // 如果是base,要包容更多可能的反指
1878
+ reverseOneNodes.push(factory.createTypeLiteralNode([
1879
+ factory.createPropertySignature(undefined, factory.createIdentifier('entity'), factory.createToken(ts.SyntaxKind.QuestionToken), factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword)),
1880
+ factory.createPropertySignature(undefined, factory.createIdentifier('entityId'), factory.createToken(ts.SyntaxKind.QuestionToken), factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword)),
1881
+ factory.createIndexSignature(undefined, undefined, [factory.createParameterDeclaration(undefined, undefined, undefined, factory.createIdentifier("K"), undefined, factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword), undefined)], factory.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword))
1882
+ ]));
1810
1883
  }
1811
1884
  if (reverseOneNodes.length > 0) {
1812
1885
  adNodes.push(factory.createUnionTypeNode(reverseOneNodes));
@@ -1814,9 +1887,6 @@ function constructActions(statements, entity) {
1814
1887
  }
1815
1888
  // 一对多
1816
1889
  var propertySignatures = [];
1817
- if (process.env.COMPLING_AS_LIB) {
1818
- propertySignatures.push(factory.createIndexSignature(undefined, undefined, [factory.createParameterDeclaration(undefined, undefined, undefined, factory.createIdentifier("k"), undefined, factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword), undefined)], factory.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword)));
1819
- }
1820
1890
  if (oneToManySet) {
1821
1891
  var _loop_8 = function (entityName) {
1822
1892
  var entityNameLc = (0, string_1.firstLetterLowerCase)(entityName);
@@ -1832,15 +1902,16 @@ function constructActions(statements, entity) {
1832
1902
  factory.createLiteralTypeNode(factory.createStringLiteral("".concat(foreignKey, "Id")))
1833
1903
  ])
1834
1904
  ]);
1835
- var otmCreateOperationNode = factory.createTypeReferenceNode(factory.createIdentifier("OakOperation"), [
1905
+ var otmCreateSingleOperationNode = factory.createTypeReferenceNode(factory.createIdentifier("OakOperation"), [
1836
1906
  factory.createLiteralTypeNode(factory.createStringLiteral("create")),
1837
- factory.createUnionTypeNode([
1838
- otmCreateOperationDataNode,
1839
- factory.createArrayTypeNode(otmCreateOperationDataNode)
1840
- ])
1907
+ otmCreateOperationDataNode
1908
+ ]);
1909
+ var otmCreateMultipleOperationNode = factory.createTypeReferenceNode(factory.createIdentifier("OakOperation"), [
1910
+ factory.createLiteralTypeNode(factory.createStringLiteral("create")),
1911
+ factory.createArrayTypeNode(otmCreateOperationDataNode)
1841
1912
  ]);
1842
1913
  var otmUpdateOperationNode = factory.createTypeReferenceNode(factory.createIdentifier("OakOperation"), [
1843
- factory.createLiteralTypeNode(factory.createStringLiteral("update")),
1914
+ factory.createIndexedAccessTypeNode(factory.createTypeReferenceNode(createForeignRef(entity, entityName, 'UpdateOperation'), undefined), factory.createLiteralTypeNode(factory.createStringLiteral("action"))),
1844
1915
  factory.createTypeReferenceNode(factory.createIdentifier("Omit"), [
1845
1916
  factory.createTypeReferenceNode(createForeignRef(entity, entityName, 'UpdateOperationData'), undefined),
1846
1917
  factory.createUnionTypeNode(foreignKey === 'entity' ? [
@@ -1853,13 +1924,35 @@ function constructActions(statements, entity) {
1853
1924
  ]),
1854
1925
  factory.createTypeReferenceNode(createForeignRef(entity, entityName, 'Filter'), undefined)
1855
1926
  ]);
1856
- propertySignatures.push(factory.createPropertySignature(undefined, factory.createIdentifier(identifier), factory.createToken(ts.SyntaxKind.QuestionToken), factory.createUnionTypeNode([
1857
- otmUpdateOperationNode,
1858
- factory.createTypeReferenceNode(factory.createIdentifier("Array"), [factory.createUnionTypeNode([
1859
- otmCreateOperationNode,
1860
- otmUpdateOperationNode
1861
- ])])
1862
- ])));
1927
+ if (!Schema[entityName].static) {
1928
+ switch (Schema[entityName].actionType) {
1929
+ case 'crud': {
1930
+ propertySignatures.push(factory.createPropertySignature(undefined, factory.createIdentifier(identifier), factory.createToken(ts.SyntaxKind.QuestionToken), factory.createUnionTypeNode([
1931
+ otmUpdateOperationNode,
1932
+ otmCreateMultipleOperationNode,
1933
+ factory.createTypeReferenceNode(factory.createIdentifier("Array"), [factory.createUnionTypeNode([
1934
+ otmCreateSingleOperationNode,
1935
+ otmUpdateOperationNode
1936
+ ])])
1937
+ ])));
1938
+ break;
1939
+ }
1940
+ case 'appendOnly':
1941
+ case 'excludeUpdate': {
1942
+ propertySignatures.push(factory.createPropertySignature(undefined, factory.createIdentifier(identifier), factory.createToken(ts.SyntaxKind.QuestionToken), factory.createUnionTypeNode([
1943
+ otmCreateMultipleOperationNode,
1944
+ factory.createTypeReferenceNode(factory.createIdentifier("Array"), [otmCreateSingleOperationNode])
1945
+ ])));
1946
+ break;
1947
+ }
1948
+ case 'readOnly': {
1949
+ break;
1950
+ }
1951
+ default: {
1952
+ (0, assert_1.default)(false);
1953
+ }
1954
+ }
1955
+ }
1863
1956
  });
1864
1957
  };
1865
1958
  for (var entityName in foreignKeySet) {
@@ -1882,13 +1975,16 @@ function constructActions(statements, entity) {
1882
1975
  factory.createTypeReferenceNode(factory.createIdentifier("CreateMultipleOperation"))
1883
1976
  ])));
1884
1977
  // UpdateOperationData
1885
- foreignKeyAttrNode = [];
1978
+ foreignKeyAttr = [];
1979
+ if (ReversePointerRelations[entity]) {
1980
+ foreignKeyAttr.push('entity', 'entityId');
1981
+ }
1886
1982
  if (manyToOneSet) {
1887
1983
  try {
1888
- for (var manyToOneSet_4 = __values(manyToOneSet), manyToOneSet_4_1 = manyToOneSet_4.next(); !manyToOneSet_4_1.done; manyToOneSet_4_1 = manyToOneSet_4.next()) {
1984
+ for (var manyToOneSet_4 = tslib_1.__values(manyToOneSet), manyToOneSet_4_1 = manyToOneSet_4.next(); !manyToOneSet_4_1.done; manyToOneSet_4_1 = manyToOneSet_4.next()) {
1889
1985
  var one = manyToOneSet_4_1.value;
1890
1986
  if (!ReversePointerRelations[entity] || !ReversePointerRelations[entity].includes(one[1])) {
1891
- foreignKeyAttrNode.push(factory.createLiteralTypeNode(factory.createStringLiteral("".concat(one[1], "Id"))));
1987
+ foreignKeyAttr.push("".concat(one[1], "Id"));
1892
1988
  }
1893
1989
  }
1894
1990
  }
@@ -1899,15 +1995,12 @@ function constructActions(statements, entity) {
1899
1995
  }
1900
1996
  finally { if (e_13) throw e_13.error; }
1901
1997
  }
1902
- if (ReversePointerRelations[entity]) {
1903
- foreignKeyAttrNode.push(factory.createLiteralTypeNode(factory.createStringLiteral('entity')), factory.createLiteralTypeNode(factory.createStringLiteral('entityId')));
1904
- }
1905
1998
  }
1906
1999
  adNodes = [
1907
2000
  factory.createTypeReferenceNode(factory.createIdentifier("FormUpdateData"), [
1908
- foreignKeyAttrNode.length > 0 ? factory.createTypeReferenceNode(factory.createIdentifier("Omit"), [
2001
+ foreignKeyAttr.length > 0 ? factory.createTypeReferenceNode(factory.createIdentifier("Omit"), [
1909
2002
  factory.createTypeReferenceNode(factory.createIdentifier("OpSchema"), undefined),
1910
- factory.createUnionTypeNode(foreignKeyAttrNode)
2003
+ factory.createUnionTypeNode((0, lodash_1.uniq)(foreignKeyAttr).map(function (ele) { return factory.createLiteralTypeNode(factory.createStringLiteral(ele)); }))
1911
2004
  ]) : factory.createTypeReferenceNode(factory.createIdentifier("OpSchema"), undefined)
1912
2005
  ])
1913
2006
  ];
@@ -1920,26 +2013,58 @@ function constructActions(statements, entity) {
1920
2013
  */
1921
2014
  var upsertOneNodes = [];
1922
2015
  try {
1923
- for (var manyToOneSet_5 = __values(manyToOneSet), manyToOneSet_5_1 = manyToOneSet_5.next(); !manyToOneSet_5_1.done; manyToOneSet_5_1 = manyToOneSet_5.next()) {
2016
+ for (var manyToOneSet_5 = tslib_1.__values(manyToOneSet), manyToOneSet_5_1 = manyToOneSet_5.next(); !manyToOneSet_5_1.done; manyToOneSet_5_1 = manyToOneSet_5.next()) {
1924
2017
  var one = manyToOneSet_5_1.value;
1925
2018
  if (!ReversePointerRelations[entity] || !ReversePointerRelations[entity].includes(one[0])) {
1926
- upsertOneNodes.push(factory.createUnionTypeNode([
1927
- factory.createTypeLiteralNode([
1928
- factory.createPropertySignature(undefined, factory.createIdentifier(one[1]), factory.createToken(ts.SyntaxKind.QuestionToken), factory.createUnionTypeNode([
1929
- factory.createTypeReferenceNode(createForeignRef(entity, one[0], 'CreateSingleOperation')),
1930
- factory.createTypeReferenceNode(createForeignRef(entity, one[0], 'UpdateOperation')),
1931
- factory.createTypeReferenceNode(createForeignRef(entity, one[0], 'RemoveOperation'))
1932
- ])),
1933
- factory.createPropertySignature(undefined, factory.createIdentifier("".concat(one[1], "Id")), factory.createToken(ts.SyntaxKind.QuestionToken), factory.createKeywordTypeNode(ts.SyntaxKind.UndefinedKeyword)),
1934
- ]),
1935
- factory.createTypeLiteralNode([
1936
- factory.createPropertySignature(undefined, factory.createIdentifier(one[1]), factory.createToken(ts.SyntaxKind.QuestionToken), factory.createKeywordTypeNode(ts.SyntaxKind.UndefinedKeyword)),
1937
- factory.createPropertySignature(undefined, factory.createIdentifier("".concat(one[1], "Id")), factory.createToken(ts.SyntaxKind.QuestionToken), factory.createUnionTypeNode([
1938
- factory.createTypeReferenceNode(factory.createIdentifier("String"), [factory.createLiteralTypeNode(factory.createNumericLiteral("64"))]),
1939
- factory.createLiteralTypeNode(factory.createNull())
1940
- ])),
1941
- ])
1942
- ]));
2019
+ var cascadeCreateNode = factory.createTypeLiteralNode([
2020
+ factory.createPropertySignature(undefined, factory.createIdentifier(one[1]), undefined, factory.createTypeReferenceNode(createForeignRef(entity, one[0], 'CreateSingleOperation'))),
2021
+ factory.createPropertySignature(undefined, factory.createIdentifier("".concat(one[1], "Id")), factory.createToken(ts.SyntaxKind.QuestionToken), factory.createKeywordTypeNode(ts.SyntaxKind.NeverKeyword)),
2022
+ ]);
2023
+ var cascadeUpdateNode = factory.createTypeLiteralNode([
2024
+ factory.createPropertySignature(undefined, factory.createIdentifier(one[1]), undefined, factory.createTypeReferenceNode(createForeignRef(entity, one[0], 'UpdateOperation'))),
2025
+ factory.createPropertySignature(undefined, factory.createIdentifier("".concat(one[1], "Id")), factory.createToken(ts.SyntaxKind.QuestionToken), factory.createKeywordTypeNode(ts.SyntaxKind.NeverKeyword)),
2026
+ ]);
2027
+ var cascadeRemoveNode = factory.createTypeLiteralNode([
2028
+ factory.createPropertySignature(undefined, factory.createIdentifier(one[1]), undefined, factory.createTypeReferenceNode(createForeignRef(entity, one[0], 'RemoveOperation'))),
2029
+ factory.createPropertySignature(undefined, factory.createIdentifier("".concat(one[1], "Id")), factory.createToken(ts.SyntaxKind.QuestionToken), factory.createKeywordTypeNode(ts.SyntaxKind.NeverKeyword)),
2030
+ ]);
2031
+ var noCascadeNode = factory.createTypeLiteralNode([
2032
+ factory.createPropertySignature(undefined, factory.createIdentifier(one[1]), factory.createToken(ts.SyntaxKind.QuestionToken), factory.createKeywordTypeNode(ts.SyntaxKind.NeverKeyword)),
2033
+ factory.createPropertySignature(undefined, factory.createIdentifier("".concat(one[1], "Id")), factory.createToken(ts.SyntaxKind.QuestionToken), factory.createUnionTypeNode([
2034
+ factory.createTypeReferenceNode(factory.createIdentifier("String"), [factory.createLiteralTypeNode(factory.createNumericLiteral("64"))]),
2035
+ factory.createLiteralTypeNode(factory.createNull())
2036
+ ])),
2037
+ ]);
2038
+ if (Schema[one[0]].static) {
2039
+ upsertOneNodes.push(noCascadeNode);
2040
+ }
2041
+ else {
2042
+ switch (Schema[one[0]].actionType) {
2043
+ case 'crud': {
2044
+ upsertOneNodes.push(factory.createUnionTypeNode([cascadeCreateNode, cascadeUpdateNode, cascadeRemoveNode, noCascadeNode]));
2045
+ break;
2046
+ }
2047
+ case 'excludeUpdate': {
2048
+ upsertOneNodes.push(factory.createUnionTypeNode([cascadeCreateNode, cascadeRemoveNode, noCascadeNode]));
2049
+ break;
2050
+ }
2051
+ case 'appendOnly': {
2052
+ upsertOneNodes.push(factory.createUnionTypeNode([cascadeCreateNode, noCascadeNode]));
2053
+ break;
2054
+ }
2055
+ case 'readOnly': {
2056
+ upsertOneNodes.push(noCascadeNode);
2057
+ break;
2058
+ }
2059
+ case 'excludeRemove': {
2060
+ upsertOneNodes.push(factory.createUnionTypeNode([cascadeCreateNode, cascadeUpdateNode, noCascadeNode]));
2061
+ break;
2062
+ }
2063
+ default: {
2064
+ (0, assert_1.default)(false);
2065
+ }
2066
+ }
2067
+ }
1943
2068
  }
1944
2069
  }
1945
2070
  }
@@ -1953,22 +2078,47 @@ function constructActions(statements, entity) {
1953
2078
  if (upsertOneNodes.length > 0) {
1954
2079
  adNodes.push(factory.createIntersectionTypeNode(upsertOneNodes));
1955
2080
  }
1956
- var reverseOneNodes = [];
2081
+ var reverseOneNodes_1 = [];
1957
2082
  if (ReversePointerRelations[entity]) {
1958
2083
  var refEntityLitrals = [];
1959
2084
  try {
1960
- for (var _s = __values(ReversePointerRelations[entity]), _t = _s.next(); !_t.done; _t = _s.next()) {
2085
+ for (var _s = tslib_1.__values(ReversePointerRelations[entity]), _t = _s.next(); !_t.done; _t = _s.next()) {
1961
2086
  var one = _t.value;
1962
2087
  refEntityLitrals.push(factory.createLiteralTypeNode(factory.createStringLiteral("".concat((0, string_1.firstLetterLowerCase)(one)))));
1963
- reverseOneNodes.push(factory.createTypeLiteralNode([
1964
- factory.createPropertySignature(undefined, factory.createIdentifier((0, string_1.firstLetterLowerCase)(one)), factory.createToken(ts.SyntaxKind.QuestionToken), factory.createUnionTypeNode([
1965
- factory.createTypeReferenceNode(createForeignRef(entity, one, 'CreateSingleOperation')),
1966
- factory.createTypeReferenceNode(createForeignRef(entity, one, 'UpdateOperation')),
1967
- factory.createTypeReferenceNode(createForeignRef(entity, one, 'RemoveOperation'))
1968
- ])),
1969
- factory.createPropertySignature(undefined, factory.createIdentifier('entityId'), factory.createToken(ts.SyntaxKind.QuestionToken), factory.createKeywordTypeNode(ts.SyntaxKind.UndefinedKeyword)),
1970
- factory.createPropertySignature(undefined, factory.createIdentifier('entity'), factory.createToken(ts.SyntaxKind.QuestionToken), factory.createKeywordTypeNode(ts.SyntaxKind.UndefinedKeyword))
1971
- ]));
2088
+ var actionNodes = [];
2089
+ if (!Schema[one].static) {
2090
+ switch (Schema[one].actionType) {
2091
+ case 'crud': {
2092
+ actionNodes.push(factory.createTypeReferenceNode(createForeignRef(entity, one, 'CreateSingleOperation')), factory.createTypeReferenceNode(createForeignRef(entity, one, 'UpdateOperation')), factory.createTypeReferenceNode(createForeignRef(entity, one, 'RemoveOperation')));
2093
+ break;
2094
+ }
2095
+ case 'excludeUpdate': {
2096
+ actionNodes.push(factory.createTypeReferenceNode(createForeignRef(entity, one, 'CreateSingleOperation')), factory.createTypeReferenceNode(createForeignRef(entity, one, 'RemoveOperation')));
2097
+ break;
2098
+ }
2099
+ case 'excludeRemove': {
2100
+ actionNodes.push(factory.createTypeReferenceNode(createForeignRef(entity, one, 'CreateSingleOperation')), factory.createTypeReferenceNode(createForeignRef(entity, one, 'UpdateOperation')));
2101
+ break;
2102
+ }
2103
+ case 'appendOnly': {
2104
+ actionNodes.push(factory.createTypeReferenceNode(createForeignRef(entity, one, 'CreateSingleOperation')));
2105
+ break;
2106
+ }
2107
+ case 'readOnly': {
2108
+ break;
2109
+ }
2110
+ default: {
2111
+ (0, assert_1.default)(false);
2112
+ }
2113
+ }
2114
+ }
2115
+ if (actionNodes.length > 0) {
2116
+ reverseOneNodes_1.push(factory.createTypeLiteralNode([
2117
+ factory.createPropertySignature(undefined, factory.createIdentifier((0, string_1.firstLetterLowerCase)(one)), factory.createToken(ts.SyntaxKind.QuestionToken), factory.createUnionTypeNode(actionNodes)),
2118
+ factory.createPropertySignature(undefined, factory.createIdentifier('entityId'), factory.createToken(ts.SyntaxKind.QuestionToken), factory.createKeywordTypeNode(ts.SyntaxKind.NeverKeyword)),
2119
+ factory.createPropertySignature(undefined, factory.createIdentifier('entity'), factory.createToken(ts.SyntaxKind.QuestionToken), factory.createKeywordTypeNode(ts.SyntaxKind.NeverKeyword))
2120
+ ]));
2121
+ }
1972
2122
  }
1973
2123
  }
1974
2124
  catch (e_15_1) { e_15 = { error: e_15_1 }; }
@@ -1982,7 +2132,7 @@ function constructActions(statements, entity) {
1982
2132
  // 如果是base,要包容更多可能的反指
1983
2133
  refEntityLitrals.push(factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword));
1984
2134
  }
1985
- reverseOneNodes.push(factory.createTypeLiteralNode([
2135
+ reverseOneNodes_1.push(factory.createTypeLiteralNode([
1986
2136
  factory.createPropertySignature(undefined, factory.createIdentifier('entity'), factory.createToken(ts.SyntaxKind.QuestionToken), factory.createUnionTypeNode([
1987
2137
  factory.createUnionTypeNode(refEntityLitrals),
1988
2138
  factory.createLiteralTypeNode(factory.createNull())
@@ -1993,8 +2143,8 @@ function constructActions(statements, entity) {
1993
2143
  ]))
1994
2144
  ]));
1995
2145
  }
1996
- if (reverseOneNodes.length > 0) {
1997
- adNodes.push(factory.createUnionTypeNode(reverseOneNodes));
2146
+ if (reverseOneNodes_1.length > 0) {
2147
+ adNodes.push(factory.createUnionTypeNode(reverseOneNodes_1));
1998
2148
  }
1999
2149
  }
2000
2150
  var propertySignatures2 = [];
@@ -2016,22 +2166,70 @@ function constructActions(statements, entity) {
2016
2166
  factory.createLiteralTypeNode(factory.createStringLiteral("".concat(foreignKey, "Id")))
2017
2167
  ])
2018
2168
  ]);
2019
- var otmCreateOperationNode = factory.createTypeReferenceNode(factory.createIdentifier("OakOperation"), [
2169
+ var otmCreateSingleOperationNode = factory.createTypeReferenceNode(factory.createIdentifier("OakOperation"), [
2020
2170
  factory.createLiteralTypeNode(factory.createStringLiteral("create")),
2021
- factory.createUnionTypeNode([
2022
- otmCreateOperationDataNode,
2023
- factory.createArrayTypeNode(otmCreateOperationDataNode)
2024
- ])
2171
+ otmCreateOperationDataNode
2025
2172
  ]);
2026
- propertySignatures2.push(factory.createPropertySignature(undefined, factory.createIdentifier(identifier), factory.createToken(ts.SyntaxKind.QuestionToken), factory.createUnionTypeNode([
2027
- factory.createTypeReferenceNode(createForeignRef(entity, entityName, 'UpdateOperation'), undefined),
2028
- factory.createTypeReferenceNode(createForeignRef(entity, entityName, 'RemoveOperation'), undefined),
2029
- factory.createTypeReferenceNode(factory.createIdentifier("Array"), [factory.createUnionTypeNode([
2030
- otmCreateOperationNode,
2031
- factory.createTypeReferenceNode(createForeignRef(entity, entityName, 'UpdateOperation'), undefined),
2032
- factory.createTypeReferenceNode(createForeignRef(entity, entityName, 'RemoveOperation'), undefined)
2033
- ])])
2034
- ])));
2173
+ var otmCreateMultipleOperationNode = factory.createTypeReferenceNode(factory.createIdentifier("OakOperation"), [
2174
+ factory.createLiteralTypeNode(factory.createStringLiteral("create")),
2175
+ factory.createArrayTypeNode(otmCreateOperationDataNode)
2176
+ ]);
2177
+ var otmUpdateOperationNode = factory.createTypeReferenceNode(createForeignRef(entity, entityName, 'UpdateOperation'), undefined);
2178
+ var otmRemoveOperationNode = factory.createTypeReferenceNode(createForeignRef(entity, entityName, 'RemoveOperation'), undefined);
2179
+ if (!Schema[entityName].static) {
2180
+ switch (Schema[entityName].actionType) {
2181
+ case 'crud': {
2182
+ propertySignatures2.push(factory.createPropertySignature(undefined, factory.createIdentifier(identifier), factory.createToken(ts.SyntaxKind.QuestionToken), factory.createUnionTypeNode([
2183
+ otmUpdateOperationNode,
2184
+ otmRemoveOperationNode,
2185
+ otmCreateMultipleOperationNode,
2186
+ factory.createTypeReferenceNode(factory.createIdentifier("Array"), [factory.createUnionTypeNode([
2187
+ otmCreateSingleOperationNode,
2188
+ otmUpdateOperationNode,
2189
+ otmRemoveOperationNode
2190
+ ])])
2191
+ ])));
2192
+ break;
2193
+ }
2194
+ case 'excludeUpdate': {
2195
+ propertySignatures2.push(factory.createPropertySignature(undefined, factory.createIdentifier(identifier), factory.createToken(ts.SyntaxKind.QuestionToken), factory.createUnionTypeNode([
2196
+ otmRemoveOperationNode,
2197
+ otmCreateMultipleOperationNode,
2198
+ factory.createTypeReferenceNode(factory.createIdentifier("Array"), [factory.createUnionTypeNode([
2199
+ otmCreateSingleOperationNode,
2200
+ otmRemoveOperationNode
2201
+ ])])
2202
+ ])));
2203
+ break;
2204
+ }
2205
+ case 'excludeRemove': {
2206
+ propertySignatures2.push(factory.createPropertySignature(undefined, factory.createIdentifier(identifier), factory.createToken(ts.SyntaxKind.QuestionToken), factory.createUnionTypeNode([
2207
+ otmUpdateOperationNode,
2208
+ otmCreateMultipleOperationNode,
2209
+ factory.createTypeReferenceNode(factory.createIdentifier("Array"), [factory.createUnionTypeNode([
2210
+ otmCreateSingleOperationNode,
2211
+ otmUpdateOperationNode
2212
+ ])])
2213
+ ])));
2214
+ break;
2215
+ }
2216
+ case 'appendOnly': {
2217
+ propertySignatures2.push(factory.createPropertySignature(undefined, factory.createIdentifier(identifier), factory.createToken(ts.SyntaxKind.QuestionToken), factory.createUnionTypeNode([
2218
+ otmCreateMultipleOperationNode,
2219
+ factory.createTypeReferenceNode(factory.createIdentifier("Array"), [factory.createUnionTypeNode([
2220
+ otmCreateSingleOperationNode
2221
+ ])])
2222
+ ])));
2223
+ break;
2224
+ }
2225
+ case 'readOnly': {
2226
+ break;
2227
+ }
2228
+ default: {
2229
+ (0, assert_1.default)(false);
2230
+ }
2231
+ }
2232
+ }
2035
2233
  });
2036
2234
  };
2037
2235
  for (var entityName in foreignKeySet) {
@@ -2043,13 +2241,17 @@ function constructActions(statements, entity) {
2043
2241
  }
2044
2242
  statements.push(factory.createTypeAliasDeclaration(undefined, [factory.createModifier(ts.SyntaxKind.ExportKeyword)], factory.createIdentifier("UpdateOperationData"), undefined, factory.createIntersectionTypeNode(adNodes)));
2045
2243
  // UpdateOperation
2244
+ var actionTypeNodes = ActionAsts[entity] ? [
2245
+ factory.createTypeReferenceNode('ParticularAction'),
2246
+ factory.createLiteralTypeNode(factory.createStringLiteral("update"))
2247
+ ] : [
2248
+ factory.createLiteralTypeNode(factory.createStringLiteral("update"))
2249
+ ];
2250
+ if (process.env.COMPLING_AS_LIB) {
2251
+ actionTypeNodes.push(factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword));
2252
+ }
2046
2253
  statements.push(factory.createTypeAliasDeclaration(undefined, [factory.createModifier(ts.SyntaxKind.ExportKeyword)], factory.createIdentifier("UpdateOperation"), undefined, factory.createTypeReferenceNode(factory.createIdentifier("OakOperation"), [
2047
- ActionAsts[entity] ?
2048
- factory.createUnionTypeNode([
2049
- factory.createTypeReferenceNode('ParticularAction'),
2050
- factory.createLiteralTypeNode(factory.createStringLiteral("update"))
2051
- ]) :
2052
- factory.createLiteralTypeNode(factory.createStringLiteral("update")),
2254
+ factory.createUnionTypeNode(actionTypeNodes),
2053
2255
  factory.createTypeReferenceNode(factory.createIdentifier("UpdateOperationData")),
2054
2256
  factory.createTypeReferenceNode(factory.createIdentifier("Filter"), undefined),
2055
2257
  factory.createTypeReferenceNode(factory.createIdentifier("Sorter"), undefined)
@@ -2066,17 +2268,47 @@ function constructActions(statements, entity) {
2066
2268
  */
2067
2269
  var upsertOneNodes = [];
2068
2270
  try {
2069
- for (var manyToOneSet_6 = __values(manyToOneSet), manyToOneSet_6_1 = manyToOneSet_6.next(); !manyToOneSet_6_1.done; manyToOneSet_6_1 = manyToOneSet_6.next()) {
2271
+ for (var manyToOneSet_6 = tslib_1.__values(manyToOneSet), manyToOneSet_6_1 = manyToOneSet_6.next(); !manyToOneSet_6_1.done; manyToOneSet_6_1 = manyToOneSet_6.next()) {
2070
2272
  var one = manyToOneSet_6_1.value;
2071
2273
  if (!ReversePointerRelations[entity] || !ReversePointerRelations[entity].includes(one[0])) {
2072
- upsertOneNodes.push(factory.createUnionTypeNode([
2073
- factory.createTypeLiteralNode([
2074
- factory.createPropertySignature(undefined, factory.createIdentifier(one[1]), factory.createToken(ts.SyntaxKind.QuestionToken), factory.createTypeReferenceNode(createForeignRef(entity, one[0], 'UpdateOperation')))
2075
- ]),
2076
- factory.createTypeLiteralNode([
2077
- factory.createPropertySignature(undefined, factory.createIdentifier(one[1]), factory.createToken(ts.SyntaxKind.QuestionToken), factory.createTypeReferenceNode(createForeignRef(entity, one[0], 'RemoveOperation')))
2078
- ])
2079
- ]));
2274
+ if (!Schema[one[0]].static) {
2275
+ switch (Schema[one[0]].actionType) {
2276
+ case 'crud': {
2277
+ upsertOneNodes.push(factory.createUnionTypeNode([
2278
+ factory.createTypeLiteralNode([
2279
+ factory.createPropertySignature(undefined, factory.createIdentifier(one[1]), factory.createToken(ts.SyntaxKind.QuestionToken), factory.createUnionTypeNode([
2280
+ factory.createTypeReferenceNode(createForeignRef(entity, one[0], 'UpdateOperation')),
2281
+ factory.createTypeReferenceNode(createForeignRef(entity, one[0], 'RemoveOperation'))
2282
+ ]))
2283
+ ])
2284
+ ]));
2285
+ break;
2286
+ }
2287
+ case 'excludeUpdate': {
2288
+ upsertOneNodes.push(factory.createUnionTypeNode([
2289
+ factory.createTypeLiteralNode([
2290
+ factory.createPropertySignature(undefined, factory.createIdentifier(one[1]), factory.createToken(ts.SyntaxKind.QuestionToken), factory.createTypeReferenceNode(createForeignRef(entity, one[0], 'RemoveOperation')))
2291
+ ])
2292
+ ]));
2293
+ break;
2294
+ }
2295
+ case 'excludeRemove': {
2296
+ upsertOneNodes.push(factory.createUnionTypeNode([
2297
+ factory.createTypeLiteralNode([
2298
+ factory.createPropertySignature(undefined, factory.createIdentifier(one[1]), factory.createToken(ts.SyntaxKind.QuestionToken), factory.createTypeReferenceNode(createForeignRef(entity, one[0], 'UpdateOperation')))
2299
+ ])
2300
+ ]));
2301
+ break;
2302
+ }
2303
+ case 'appendOnly':
2304
+ case 'readOnly': {
2305
+ break;
2306
+ }
2307
+ default: {
2308
+ (0, assert_1.default)(false);
2309
+ }
2310
+ }
2311
+ }
2080
2312
  }
2081
2313
  }
2082
2314
  }
@@ -2087,18 +2319,45 @@ function constructActions(statements, entity) {
2087
2319
  }
2088
2320
  finally { if (e_16) throw e_16.error; }
2089
2321
  }
2090
- var reverseOneNodes = [];
2322
+ var reverseOneNodes_2 = [];
2091
2323
  if (ReversePointerRelations[entity]) {
2092
2324
  var refEntityLitrals = [];
2093
2325
  try {
2094
- for (var _u = __values(ReversePointerRelations[entity]), _v = _u.next(); !_v.done; _v = _u.next()) {
2326
+ for (var _u = tslib_1.__values(ReversePointerRelations[entity]), _v = _u.next(); !_v.done; _v = _u.next()) {
2095
2327
  var one = _v.value;
2096
2328
  refEntityLitrals.push(factory.createLiteralTypeNode(factory.createStringLiteral("".concat((0, string_1.firstLetterLowerCase)(one)))));
2097
- reverseOneNodes.push(factory.createTypeLiteralNode([
2098
- factory.createPropertySignature(undefined, factory.createIdentifier((0, string_1.firstLetterLowerCase)(one)), factory.createToken(ts.SyntaxKind.QuestionToken), factory.createTypeReferenceNode(createForeignRef(entity, one, 'UpdateOperation')))
2099
- ]), factory.createTypeLiteralNode([
2100
- factory.createPropertySignature(undefined, factory.createIdentifier((0, string_1.firstLetterLowerCase)(one)), factory.createToken(ts.SyntaxKind.QuestionToken), factory.createTypeReferenceNode(createForeignRef(entity, one, 'RemoveOperation')))
2101
- ]));
2329
+ if (!Schema[one].static) {
2330
+ switch (Schema[one].actionType) {
2331
+ case 'crud': {
2332
+ reverseOneNodes_2.push(factory.createTypeLiteralNode([
2333
+ factory.createPropertySignature(undefined, factory.createIdentifier((0, string_1.firstLetterLowerCase)(one)), factory.createToken(ts.SyntaxKind.QuestionToken), factory.createUnionTypeNode([
2334
+ factory.createTypeReferenceNode(createForeignRef(entity, one, 'UpdateOperation')),
2335
+ factory.createTypeReferenceNode(createForeignRef(entity, one, 'RemoveOperation'))
2336
+ ]))
2337
+ ]));
2338
+ break;
2339
+ }
2340
+ case 'excludeUpdate': {
2341
+ reverseOneNodes_2.push(factory.createTypeLiteralNode([
2342
+ factory.createPropertySignature(undefined, factory.createIdentifier((0, string_1.firstLetterLowerCase)(one)), factory.createToken(ts.SyntaxKind.QuestionToken), factory.createTypeReferenceNode(createForeignRef(entity, one, 'RemoveOperation')))
2343
+ ]));
2344
+ break;
2345
+ }
2346
+ case 'excludeRemove': {
2347
+ reverseOneNodes_2.push(factory.createTypeLiteralNode([
2348
+ factory.createPropertySignature(undefined, factory.createIdentifier((0, string_1.firstLetterLowerCase)(one)), factory.createToken(ts.SyntaxKind.QuestionToken), factory.createTypeReferenceNode(createForeignRef(entity, one, 'UpdateOperation')))
2349
+ ]));
2350
+ break;
2351
+ }
2352
+ case 'appendOnly':
2353
+ case 'readOnly': {
2354
+ break;
2355
+ }
2356
+ default: {
2357
+ (0, assert_1.default)(false);
2358
+ }
2359
+ }
2360
+ }
2102
2361
  }
2103
2362
  }
2104
2363
  catch (e_17_1) { e_17 = { error: e_17_1 }; }
@@ -2109,7 +2368,7 @@ function constructActions(statements, entity) {
2109
2368
  finally { if (e_17) throw e_17.error; }
2110
2369
  }
2111
2370
  if (process.env.COMPLING_AS_LIB) {
2112
- reverseOneNodes.push(factory.createTypeLiteralNode([
2371
+ reverseOneNodes_2.push(factory.createTypeLiteralNode([
2113
2372
  factory.createIndexSignature(undefined, undefined, [factory.createParameterDeclaration(undefined, undefined, undefined, factory.createIdentifier("k"), undefined, factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword), undefined)], factory.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword))
2114
2373
  ]));
2115
2374
  }
@@ -2117,8 +2376,8 @@ function constructActions(statements, entity) {
2117
2376
  if (upsertOneNodes.length > 0) {
2118
2377
  adNodes.push(factory.createIntersectionTypeNode(upsertOneNodes));
2119
2378
  }
2120
- if (reverseOneNodes.length > 0) {
2121
- adNodes.push(factory.createUnionTypeNode(reverseOneNodes));
2379
+ if (reverseOneNodes_2.length > 0) {
2380
+ adNodes.push(factory.createUnionTypeNode(reverseOneNodes_2));
2122
2381
  }
2123
2382
  }
2124
2383
  /**
@@ -2250,13 +2509,14 @@ var initialStatements = function () { return [
2250
2509
  factory.createImportDeclaration(undefined, undefined, factory.createImportClause(false, undefined, factory.createNamedImports([
2251
2510
  factory.createImportSpecifier(false, undefined, factory.createIdentifier("FormCreateData")),
2252
2511
  factory.createImportSpecifier(false, undefined, factory.createIdentifier("FormUpdateData")),
2253
- factory.createImportSpecifier(false, factory.createIdentifier("Operation"), factory.createIdentifier("OakOperation"))
2512
+ factory.createImportSpecifier(false, factory.createIdentifier("Operation"), factory.createIdentifier("OakOperation")),
2513
+ factory.createImportSpecifier(false, factory.createIdentifier("MakeAction"), factory.createIdentifier("OakMakeAction"))
2254
2514
  ])), factory.createStringLiteral("".concat((0, env_1.TYPE_PATH_IN_OAK_DOMAIN)(), "Entity")), undefined)
2255
2515
  ]; };
2256
2516
  function outputSubQuery(outputDir, printer) {
2257
2517
  var statements = [];
2258
2518
  if (process.env.COMPLING_AS_LIB) {
2259
- statements.push(factory.createImportDeclaration(undefined, undefined, factory.createImportClause(false, undefined, factory.createNamedImports([factory.createImportSpecifier(false, undefined, factory.createIdentifier("Selection"))])), factory.createStringLiteral("oak-domain/lib/types/Entity"), undefined));
2519
+ statements.push(factory.createImportDeclaration(undefined, undefined, factory.createImportClause(false, undefined, factory.createNamedImports([factory.createImportSpecifier(false, undefined, factory.createIdentifier("Selection"))])), factory.createStringLiteral((0, env_1.TYPE_PATH_IN_OAK_DOMAIN)(1)), undefined));
2260
2520
  }
2261
2521
  for (var entity in Schema) {
2262
2522
  // import * as User from '../User/Schema';
@@ -2267,10 +2527,10 @@ function outputSubQuery(outputDir, printer) {
2267
2527
  var identifier = "".concat(one, "IdSubQuery");
2268
2528
  var fromEntites = OneToMany[one] ? (0, lodash_1.uniq)(OneToMany[one]
2269
2529
  .filter(function (_a) {
2270
- var _b = __read(_a, 2), e = _b[0], f = _b[1];
2530
+ var _b = tslib_1.__read(_a, 2), e = _b[0], f = _b[1];
2271
2531
  return f !== 'entity';
2272
2532
  }).map(function (_a) {
2273
- var _b = __read(_a, 1), e = _b[0];
2533
+ var _b = tslib_1.__read(_a, 1), e = _b[0];
2274
2534
  return e;
2275
2535
  })) : [];
2276
2536
  fromEntites.push(one);
@@ -2282,7 +2542,7 @@ function outputSubQuery(outputDir, printer) {
2282
2542
  // 如果是建立 base,这里要加上额外可能的对象信息
2283
2543
  inUnionTypeNode.push(factory.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword));
2284
2544
  }
2285
- statements.push(factory.createTypeAliasDeclaration(undefined, [factory.createModifier(ts.SyntaxKind.ExportKeyword)], factory.createIdentifier(identifier), undefined, factory.createMappedTypeNode(undefined, factory.createTypeParameterDeclaration(factory.createIdentifier("K"), factory.createUnionTypeNode([
2545
+ statements.push(factory.createTypeAliasDeclaration(undefined, [factory.createModifier(ts.SyntaxKind.ExportKeyword)], factory.createIdentifier(identifier), undefined, factory.createMappedTypeNode(undefined, factory.createTypeParameterDeclaration(undefined, factory.createIdentifier("K"), factory.createUnionTypeNode([
2286
2546
  factory.createLiteralTypeNode(factory.createStringLiteral("$in")),
2287
2547
  factory.createLiteralTypeNode(factory.createStringLiteral("$nin"))
2288
2548
  ]), undefined), undefined, factory.createToken(ts.SyntaxKind.QuestionToken), factory.createUnionTypeNode(inUnionTypeNode), undefined)));
@@ -2343,7 +2603,13 @@ function outputSchema(outputDir, printer) {
2343
2603
  statements.push(factory.createImportDeclaration(undefined, undefined, factory.createImportClause(false, undefined, factory.createNamedImports(localActions.map(function (ele) { return factory.createImportSpecifier(false, undefined, factory.createIdentifier(ele)); }))), factory.createStringLiteral('./Action'), undefined));
2344
2604
  }
2345
2605
  else {
2346
- statements.push(factory.createImportDeclaration(undefined, undefined, factory.createImportClause(false, undefined, factory.createNamedImports([factory.createImportSpecifier(false, undefined, factory.createIdentifier("GenericAction"))])), factory.createStringLiteral((0, env_1.ACTION_CONSTANT_IN_OAK_DOMAIN)()), undefined));
2606
+ statements.push(factory.createImportDeclaration(undefined, undefined, factory.createImportClause(false, undefined, factory.createNamedImports([
2607
+ factory.createImportSpecifier(false, undefined, factory.createIdentifier("GenericAction")),
2608
+ factory.createImportSpecifier(false, undefined, factory.createIdentifier("AppendOnlyAction")),
2609
+ factory.createImportSpecifier(false, undefined, factory.createIdentifier("ReadOnlyAction")),
2610
+ factory.createImportSpecifier(false, undefined, factory.createIdentifier("ExcludeUpdateAction")),
2611
+ factory.createImportSpecifier(false, undefined, factory.createIdentifier("ExcludeRemoveAction")),
2612
+ ])), factory.createStringLiteral((0, env_1.ACTION_CONSTANT_IN_OAK_DOMAIN)()), undefined));
2347
2613
  }
2348
2614
  constructSchema(statements, entity);
2349
2615
  constructFilter(statements, entity);
@@ -2352,10 +2618,17 @@ function outputSchema(outputDir, printer) {
2352
2618
  constructActions(statements, entity);
2353
2619
  constructQuery(statements, entity);
2354
2620
  constructFullAttrs(statements, entity);
2621
+ var actionTypeNode = factory.createTypeReferenceNode(factory.createIdentifier('OakMakeAction'), [
2622
+ ActionAsts[entity] ? factory.createTypeReferenceNode('Action') : factory.createTypeReferenceNode(OriginActionDict[Schema[entity].actionType])
2623
+ ]);
2355
2624
  var EntityDefAttrs = [
2356
2625
  factory.createPropertySignature(undefined, factory.createIdentifier("Schema"), undefined, factory.createTypeReferenceNode(factory.createIdentifier("Schema"), undefined)),
2357
2626
  factory.createPropertySignature(undefined, factory.createIdentifier("OpSchema"), undefined, factory.createTypeReferenceNode(factory.createIdentifier("OpSchema"), undefined)),
2358
- factory.createPropertySignature(undefined, factory.createIdentifier("Action"), undefined, factory.createTypeReferenceNode(factory.createIdentifier(ActionAsts[entity] ? 'Action' : 'GenericAction'), undefined)),
2627
+ factory.createPropertySignature(undefined, factory.createIdentifier("Action"), undefined, process.env.COMPLING_AS_LIB ?
2628
+ factory.createUnionTypeNode([
2629
+ actionTypeNode,
2630
+ factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword)
2631
+ ]) : actionTypeNode),
2359
2632
  factory.createPropertySignature(undefined, factory.createIdentifier("Selection"), undefined, factory.createTypeReferenceNode(factory.createIdentifier("Selection"), undefined)),
2360
2633
  factory.createPropertySignature(undefined, factory.createIdentifier("Operation"), undefined, factory.createTypeReferenceNode(factory.createIdentifier("Operation"), undefined)),
2361
2634
  factory.createPropertySignature(undefined, factory.createIdentifier("Create"), undefined, factory.createTypeReferenceNode(factory.createIdentifier("CreateOperation"), undefined)),
@@ -2479,7 +2752,7 @@ function constructAttributes(entity) {
2479
2752
  default: {
2480
2753
  var text2_6 = text === 'Schema' ? entity : text;
2481
2754
  var manyToOneItem = manyToOneSet && manyToOneSet.find(function (_a) {
2482
- var _b = __read(_a, 2), refEntity = _b[0], attrName = _b[1];
2755
+ var _b = tslib_1.__read(_a, 2), refEntity = _b[0], attrName = _b[1];
2483
2756
  return refEntity === text2_6 && attrName === attrName;
2484
2757
  });
2485
2758
  if (manyToOneItem) {
@@ -2619,23 +2892,55 @@ function outputLocale(outputDir, printer) {
2619
2892
  }
2620
2893
  function outputStorage(outputDir, printer) {
2621
2894
  var importStatements = [
2622
- factory.createImportDeclaration(undefined, undefined, factory.createImportClause(false, undefined, factory.createNamedImports([factory.createImportSpecifier(false, undefined, factory.createIdentifier("StorageSchema"))])), factory.createStringLiteral("".concat((0, env_1.TYPE_PATH_IN_OAK_DOMAIN)(), "Storage")), undefined),
2895
+ factory.createImportDeclaration(undefined, undefined, factory.createImportClause(false, undefined, factory.createNamedImports([factory.createImportSpecifier(false, undefined, factory.createIdentifier("StorageSchema"))])), factory.createStringLiteral("".concat((0, env_1.TYPE_PATH_IN_OAK_DOMAIN)(1), "Storage")), undefined),
2623
2896
  factory.createImportDeclaration(undefined, undefined, factory.createImportClause(false, undefined, factory.createNamedImports([factory.createImportSpecifier(false, undefined, factory.createIdentifier("EntityDict"))])), factory.createStringLiteral("./EntityDict"), undefined)
2624
2897
  ];
2625
2898
  var entityAssignments = [];
2626
2899
  for (var entity in Schema) {
2627
2900
  var indexExpressions = [];
2628
- var _a = Schema[entity], sourceFile = _a.sourceFile, fulltextIndex = _a.fulltextIndex, indexes = _a.indexes;
2901
+ var _a = Schema[entity], sourceFile = _a.sourceFile, inModi = _a.inModi, indexes = _a.indexes, toModi = _a.toModi, actionType = _a.actionType, _static = _a.static;
2629
2902
  var statements = [
2630
2903
  factory.createImportDeclaration(undefined, undefined, factory.createImportClause(false, undefined, factory.createNamedImports([factory.createImportSpecifier(false, undefined, factory.createIdentifier("StorageDesc"))])), factory.createStringLiteral("".concat((0, env_1.TYPE_PATH_IN_OAK_DOMAIN)(), "Storage")), undefined),
2631
2904
  factory.createImportDeclaration(undefined, undefined, factory.createImportClause(false, undefined, factory.createNamedImports([factory.createImportSpecifier(false, undefined, factory.createIdentifier("OpSchema"))])), factory.createStringLiteral("./Schema"), undefined)
2632
2905
  ];
2906
+ switch (actionType) {
2907
+ case 'readOnly': {
2908
+ statements.push(factory.createImportDeclaration(undefined, undefined, factory.createImportClause(false, undefined, factory.createNamedImports([factory.createImportSpecifier(false, factory.createIdentifier("readOnlyActions"), factory.createIdentifier("actions"))])), factory.createStringLiteral((0, env_1.ACTION_CONSTANT_IN_OAK_DOMAIN)()), undefined));
2909
+ break;
2910
+ }
2911
+ case 'appendOnly': {
2912
+ statements.push(factory.createImportDeclaration(undefined, undefined, factory.createImportClause(false, undefined, factory.createNamedImports([factory.createImportSpecifier(false, factory.createIdentifier("appendOnlyActions"), factory.createIdentifier("actions"))])), factory.createStringLiteral((0, env_1.ACTION_CONSTANT_IN_OAK_DOMAIN)()), undefined));
2913
+ break;
2914
+ }
2915
+ case 'excludeUpdate': {
2916
+ statements.push(factory.createImportDeclaration(undefined, undefined, factory.createImportClause(false, undefined, factory.createNamedImports([factory.createImportSpecifier(false, factory.createIdentifier("excludeUpdateActions"), factory.createIdentifier("actions"))])), factory.createStringLiteral((0, env_1.ACTION_CONSTANT_IN_OAK_DOMAIN)()), undefined));
2917
+ break;
2918
+ }
2919
+ default: {
2920
+ if (ActionAsts[entity]) {
2921
+ statements.push(factory.createImportDeclaration(undefined, undefined, factory.createImportClause(false, undefined, factory.createNamedImports([factory.createImportSpecifier(false, undefined, factory.createIdentifier("actions"))])), factory.createStringLiteral("./Action"), undefined));
2922
+ }
2923
+ else {
2924
+ statements.push(factory.createImportDeclaration(undefined, undefined, factory.createImportClause(false, undefined, factory.createNamedImports([factory.createImportSpecifier(false, factory.createIdentifier("genericActions"), factory.createIdentifier("actions"))])), factory.createStringLiteral((0, env_1.ACTION_CONSTANT_IN_OAK_DOMAIN)()), undefined));
2925
+ }
2926
+ }
2927
+ }
2633
2928
  var propertyAssignments = [];
2634
2929
  var attributes = constructAttributes(entity);
2635
2930
  propertyAssignments.push(factory.createPropertyAssignment(factory.createIdentifier("attributes"), factory.createObjectLiteralExpression(attributes, true)));
2636
2931
  if (indexes) {
2637
- indexExpressions.push.apply(indexExpressions, __spreadArray([], __read(indexes.elements), false));
2932
+ indexExpressions.push.apply(indexExpressions, tslib_1.__spreadArray([], tslib_1.__read(indexes.elements), false));
2933
+ }
2934
+ if (toModi) {
2935
+ propertyAssignments.push(factory.createPropertyAssignment(factory.createIdentifier("toModi"), factory.createTrue()));
2936
+ }
2937
+ if (inModi) {
2938
+ propertyAssignments.push(factory.createPropertyAssignment(factory.createIdentifier("inModi"), factory.createTrue()));
2939
+ }
2940
+ if (_static || actionType === 'readOnly') {
2941
+ propertyAssignments.push(factory.createPropertyAssignment(factory.createIdentifier("static"), factory.createTrue()));
2638
2942
  }
2943
+ propertyAssignments.push(factory.createPropertyAssignment(factory.createIdentifier("actionType"), factory.createStringLiteral(actionType)), factory.createShorthandPropertyAssignment(factory.createIdentifier("actions"), undefined));
2639
2944
  if (indexExpressions.length > 0) {
2640
2945
  propertyAssignments.push(factory.createPropertyAssignment(factory.createIdentifier("indexes"), factory.createArrayLiteralExpression(indexExpressions, true)));
2641
2946
  }
@@ -2672,7 +2977,7 @@ function addReverseRelationship() {
2672
2977
  throw new Error("\u300C".concat(reverseEntity, "\u300D\u88AB\u5F15\u7528\u4E3A\u4E00\u4E2A\u53CD\u6307\u5BF9\u8C61\uFF0C\u4F46\u5176\u5B9A\u4E49\u4E2D\u7684entity\u548CentityId\u4E0D\u7B26\u5408\u8981\u6C42"));
2673
2978
  }
2674
2979
  try {
2675
- for (var _b = (e_18 = void 0, __values(ReversePointerRelations[reverseEntity])), _c = _b.next(); !_c.done; _c = _b.next()) {
2980
+ for (var _b = (e_18 = void 0, tslib_1.__values(ReversePointerRelations[reverseEntity])), _c = _b.next(); !_c.done; _c = _b.next()) {
2676
2981
  var one = _c.value;
2677
2982
  addRelationship(reverseEntity, one, 'entity', false);
2678
2983
  }
@@ -2686,25 +2991,52 @@ function addReverseRelationship() {
2686
2991
  }
2687
2992
  }
2688
2993
  }
2994
+ function outputIndexTs(outputDir) {
2995
+ var indexTs = "export * from './EntityDict';\n export * from './Storage';\n export * from './ActionDefDict';\n ";
2996
+ var filename = path_1.default.join(outputDir, 'index.ts');
2997
+ (0, fs_1.writeFileSync)(filename, indexTs, { flag: 'w' });
2998
+ }
2689
2999
  function outputPackageJson(outputDir) {
2690
3000
  var pj = {
2691
3001
  "name": process.env.COMPLING_AS_LIB ? "general-app-domain" : "oak-app-domain",
2692
3002
  "main": "index.ts"
2693
3003
  };
2694
- var indexTs = "export * from './EntityDict';\n export * from './Storage';\n export * from './ActionDefDict';\n ";
2695
- var filename = path_1.default.join(outputDir, 'index.ts');
2696
- (0, fs_1.writeFileSync)(filename, indexTs, { flag: 'w' });
2697
- filename = path_1.default.join(outputDir, 'package.json');
3004
+ var filename = path_1.default.join(outputDir, 'package.json');
2698
3005
  (0, fs_1.writeFileSync)(filename, JSON.stringify(pj), { flag: 'w' });
2699
- // 执行npm link
2700
- /* try {
2701
- execSync('npm link', {
2702
- cwd: outputDir,
2703
- });
3006
+ }
3007
+ /**
3008
+ * (从toModi的对象开始)分析可能被modi指向的对象
3009
+ */
3010
+ function analyzeInModi() {
3011
+ var getRelateEntities = function (entity) {
3012
+ var result = [];
3013
+ if (ManyToOne[entity]) {
3014
+ // 用反指指针指向的对象可以忽略,因为前端不可能设计出这样的更新页面
3015
+ result = ManyToOne[entity].filter(function (ele) { return ele[1] !== 'entity'; }).map(function (ele) { return ele[0]; });
3016
+ }
3017
+ if (OneToMany[entity]) {
3018
+ result.push.apply(result, tslib_1.__spreadArray([], tslib_1.__read(OneToMany[entity].map(function (ele) { return ele[0]; })), false));
3019
+ }
3020
+ return (0, lodash_1.uniq)(result);
3021
+ };
3022
+ var setInModi = function (entity) {
3023
+ if (['Modi', 'ModiEntity', 'Oper', 'OperEntity', 'User'].includes(entity)) {
3024
+ return;
3025
+ }
3026
+ var schema = Schema[entity];
3027
+ if (schema.toModi || schema.inModi || schema.actionType === 'readOnly' || schema.static) {
3028
+ return;
3029
+ }
3030
+ schema.inModi = true;
3031
+ var related = getRelateEntities(entity);
3032
+ related.forEach(function (ele) { return setInModi(ele); });
3033
+ };
3034
+ for (var entity in Schema) {
3035
+ if (Schema[entity].toModi) {
3036
+ var related = getRelateEntities(entity);
3037
+ related.forEach(function (ele) { return setInModi(ele); });
3038
+ }
2704
3039
  }
2705
- catch (err) {
2706
- console.error(err);
2707
- } */
2708
3040
  }
2709
3041
  function analyzeEntities(inputDir) {
2710
3042
  var files = (0, fs_1.readdirSync)(inputDir);
@@ -2719,6 +3051,7 @@ function analyzeEntities(inputDir) {
2719
3051
  files.forEach(function (filename) {
2720
3052
  analyzeEntity(filename, inputDir, program);
2721
3053
  });
3054
+ analyzeInModi();
2722
3055
  }
2723
3056
  exports.analyzeEntities = analyzeEntities;
2724
3057
  function buildSchema(outputDir) {
@@ -2731,8 +3064,9 @@ function buildSchema(outputDir) {
2731
3064
  outputAction(outputDir, printer);
2732
3065
  outputEntityDict(outputDir, printer);
2733
3066
  outputStorage(outputDir, printer);
2734
- //if (!process.env.COMPLING_AS_LIB) {
2735
- outputPackageJson(outputDir);
2736
- //}
3067
+ outputIndexTs(outputDir);
3068
+ if (!process.env.COMPLING_AS_LIB) {
3069
+ outputPackageJson(outputDir);
3070
+ }
2737
3071
  }
2738
3072
  exports.buildSchema = buildSchema;