oak-domain 5.1.29 → 5.1.31

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 (63) hide show
  1. package/lib/compiler/dependencyBuilder.js +2 -3
  2. package/lib/compiler/localeBuilder.d.ts +0 -1
  3. package/lib/compiler/routerBuilder.js +1 -2
  4. package/lib/compiler/schemalBuilder.d.ts +1 -1
  5. package/lib/compiler/schemalBuilder.js +83 -20
  6. package/lib/store/AsyncRowStore.d.ts +0 -1
  7. package/lib/store/CascadeStore.d.ts +1 -1
  8. package/lib/store/CascadeStore.js +2 -2
  9. package/lib/store/IntrinsicCheckers.js +1 -2
  10. package/lib/store/IntrinsicLogics.js +1 -2
  11. package/lib/store/RelationAuth.js +6 -6
  12. package/lib/store/checker.js +4 -5
  13. package/lib/store/filter.js +12 -13
  14. package/lib/store/modi.js +5 -6
  15. package/lib/store/relation.js +1 -2
  16. package/lib/timers/oper.js +1 -2
  17. package/lib/timers/vaccum.js +1 -2
  18. package/lib/types/AppLoader.d.ts +0 -1
  19. package/lib/types/Configuration.d.ts +1 -0
  20. package/lib/types/Connector.d.ts +0 -1
  21. package/lib/types/Demand.js +2 -2
  22. package/lib/types/Endpoint.d.ts +0 -1
  23. package/lib/types/Exception.d.ts +4 -2
  24. package/lib/types/Exception.js +13 -6
  25. package/lib/types/Expression.js +12 -13
  26. package/lib/types/Timer.d.ts +1 -0
  27. package/lib/utils/SimpleConnector.d.ts +2 -3
  28. package/lib/utils/assert.d.ts +0 -1
  29. package/lib/utils/date.js +1 -2
  30. package/lib/utils/domain.js +1 -2
  31. package/lib/utils/executor.js +1 -2
  32. package/lib/utils/geo.d.ts +1 -1
  33. package/lib/utils/geo.js +6 -7
  34. package/lib/utils/lodash.js +3 -3
  35. package/lib/utils/module/combine.common.js +1 -1
  36. package/lib/utils/module/combine.dev.d.ts +1 -1
  37. package/lib/utils/module/combine.dev.js +1 -1
  38. package/lib/utils/module/combine.prod.js +1 -1
  39. package/lib/utils/module/combine.server.d.ts +1 -1
  40. package/lib/utils/module/combine.server.js +1 -1
  41. package/lib/utils/operationResult.js +1 -2
  42. package/lib/utils/projection.js +2 -3
  43. package/lib/utils/random/random.js +1 -2
  44. package/lib/utils/random/random.mp.d.ts +1 -1
  45. package/lib/utils/random/random.mp.js +1 -2
  46. package/lib/utils/random/random.native.d.ts +1 -1
  47. package/lib/utils/random/random.native.js +1 -2
  48. package/lib/utils/random/random.web.d.ts +1 -1
  49. package/lib/utils/random/random.web.js +1 -2
  50. package/lib/utils/relationPath.js +3 -4
  51. package/lib/utils/row.js +2 -3
  52. package/lib/utils/string.js +4 -4
  53. package/lib/utils/url/index.d.ts +0 -1
  54. package/lib/utils/url/index.native.d.ts +4 -3
  55. package/lib/utils/url/index.web.d.ts +4 -3
  56. package/lib/utils/url/whatwg-url/lib/URL-impl.d.ts +15 -8
  57. package/lib/utils/url/whatwg-url/lib/infra.js +4 -5
  58. package/lib/utils/url/whatwg-url/lib/urlencoded.d.ts +1 -2
  59. package/lib/utils/url/whatwg-url/lib/utils.d.ts +1 -1
  60. package/lib/utils/uuid.js +10 -11
  61. package/lib/utils/validator.js +3 -3
  62. package/lib/utils/version.js +2 -3
  63. package/package.json +1 -1
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.analyzeDepedency = void 0;
3
+ exports.analyzeDepedency = analyzeDepedency;
4
+ exports.default = buildDependency;
4
5
  const tslib_1 = require("tslib");
5
6
  const assert_1 = tslib_1.__importDefault(require("assert"));
6
7
  const path_1 = require("path");
@@ -87,7 +88,6 @@ function analyzeDepedency(cwd) {
87
88
  } while (true);
88
89
  return depGraph;
89
90
  }
90
- exports.analyzeDepedency = analyzeDepedency;
91
91
  function join(...paths) {
92
92
  const path = (0, path_1.join)(...paths);
93
93
  return path.replaceAll('\\', '/');
@@ -1030,4 +1030,3 @@ function buildDependency(rebuild) {
1030
1030
  tryCopyModuleTemplateFiles(cwd, dependencies, briefNames, printer, rebuild);
1031
1031
  }
1032
1032
  }
1033
- exports.default = buildDependency;
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  import { Hash } from 'crypto';
3
2
  /**
4
3
  * 这个类的作用是把项目和所有相关的模块下的locales编译成为src/data/i18n中的数据
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.buildRouter = void 0;
3
+ exports.buildRouter = buildRouter;
4
4
  const tslib_1 = require("tslib");
5
5
  const path_1 = require("path");
6
6
  const fs_extra_1 = require("fs-extra");
@@ -254,4 +254,3 @@ function buildRouter(projectDir, startupDir, watch) {
254
254
  watchDir(projectDir, startupDir, type);
255
255
  }
256
256
  }
257
- exports.buildRouter = buildRouter;
@@ -13,7 +13,7 @@ declare const Schema: Record<string, {
13
13
  inModi: boolean;
14
14
  relations: false | string[];
15
15
  extendsFrom: string[];
16
- importAttrFrom: Record<string, [string, string | undefined]>;
16
+ importAttrFrom: Record<string, [string, string | undefined, string, string]>;
17
17
  }>;
18
18
  export declare function constructAttributes(entity: string): ts.PropertyAssignment[];
19
19
  export declare function translateLocaleObject(locale: ts.ObjectLiteralExpression): Record<string, any>;
@@ -1,6 +1,17 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.buildSchema = exports.getProjectionKeys = exports.buildSchemaBackup = exports.analyzeEntities = exports.getAnalizedSchema = exports.registerDeducedRelationMap = exports.registerFixedDestinationPathMap = exports.registerIgnoredRelationPathMap = exports.registerFreeEntities = exports.registerIgnoredForeignKeyMap = exports.translateLocaleObject = exports.constructAttributes = void 0;
3
+ exports.getAnalizedSchema = void 0;
4
+ exports.constructAttributes = constructAttributes;
5
+ exports.translateLocaleObject = translateLocaleObject;
6
+ exports.registerIgnoredForeignKeyMap = registerIgnoredForeignKeyMap;
7
+ exports.registerFreeEntities = registerFreeEntities;
8
+ exports.registerIgnoredRelationPathMap = registerIgnoredRelationPathMap;
9
+ exports.registerFixedDestinationPathMap = registerFixedDestinationPathMap;
10
+ exports.registerDeducedRelationMap = registerDeducedRelationMap;
11
+ exports.analyzeEntities = analyzeEntities;
12
+ exports.buildSchemaBackup = buildSchemaBackup;
13
+ exports.getProjectionKeys = getProjectionKeys;
14
+ exports.buildSchema = buildSchema;
4
15
  const tslib_1 = require("tslib");
5
16
  const path_1 = tslib_1.__importDefault(require("path"));
6
17
  const assert_1 = tslib_1.__importDefault(require("assert"));
@@ -219,6 +230,43 @@ function addImportedFrom(moduleName, name, node) {
219
230
  });
220
231
  }
221
232
  }
233
+ /**
234
+ * 计算编译后文件的正确导入路径
235
+ * @param sourceFilePath 源文件路径(相对于项目根目录),例如: 'src/entities/User.ts'
236
+ * @param outputFilePath 输出文件路径(相对于项目根目录),例如: 'src/oak-app-domain/User/_baseschema.ts'
237
+ * @param importPath 原始导入路径,例如: '../types/Config' 或 '@/utils/helper'
238
+ * @param projectRoot 项目根目录,默认为当前目录
239
+ * @returns 新的相对导入路径
240
+ */
241
+ function resolveCompiledImportPath(sourceFilePath, outputFilePath, importPath, projectRoot = '.', relative) {
242
+ // 如果不是相对路径(例如 node_modules 的包或别名路径),直接返回
243
+ if (!importPath.startsWith('.')) {
244
+ return importPath;
245
+ }
246
+ if (sourceFilePath.startsWith("node_modules")) {
247
+ // 如果是node_modules下的文件,保持原有的处理逻辑
248
+ return importPath.startsWith('.') ? (relative
249
+ ? path_1.default.join(relative, importPath).replace(/\\/g, '/')
250
+ : path_1.default.join('..', importPath).replace(/\\/g, '/')) : importPath;
251
+ }
252
+ // 1. 获取源文件所在目录
253
+ const sourceDir = path_1.default.dirname(sourceFilePath);
254
+ // 2. 解析原始导入路径,得到目标文件的绝对路径(相对于项目根目录)
255
+ const targetAbsolutePath = path_1.default.join(projectRoot, sourceDir, importPath);
256
+ const normalizedTargetPath = path_1.default.normalize(targetAbsolutePath);
257
+ // 3. 获取输出文件所在目录
258
+ const outputDir = path_1.default.dirname(outputFilePath);
259
+ const normalizedOutputDir = path_1.default.normalize(path_1.default.join(projectRoot, outputDir));
260
+ // 4. 计算从输出目录到目标文件的相对路径
261
+ let relativePath = path_1.default.relative(normalizedOutputDir, normalizedTargetPath);
262
+ // 5. 标准化路径分隔符为 '/'
263
+ relativePath = relativePath.replace(/\\/g, '/');
264
+ // 6. 确保相对路径以 './' 或 '../' 开头
265
+ if (!relativePath.startsWith('.')) {
266
+ relativePath = './' + relativePath;
267
+ }
268
+ return relativePath;
269
+ }
222
270
  function analyzeExternalAttrImport(node, program, importAttrFrom, relativePath) {
223
271
  const checker = program.getTypeChecker();
224
272
  const symbol = checker.getSymbolAtLocation(node.typeName);
@@ -240,11 +288,19 @@ function analyzeExternalAttrImport(node, program, importAttrFrom, relativePath)
240
288
  (0, assert_1.default)(importSpecifier, `未找到${name}的importSpecifier`);
241
289
  const propertyName = importSpecifier.propertyName && importSpecifier.propertyName.text;
242
290
  const importFrom = moduleSpecifier.text;
243
- const importFromRelatively = importFrom.startsWith('.') ? (relativePath
244
- ? path_1.default.join(relativePath, importFrom).replace(/\\/g, '/')
245
- : path_1.default.join('..', importFrom).replace(/\\/g, '/')) : importFrom;
291
+ // const importFromRelatively = importFrom.startsWith('.') ? (relativePath
292
+ // ? PathLib.join(
293
+ // relativePath,
294
+ // importFrom
295
+ // ).replace(/\\/g, '/')
296
+ // : PathLib.join(
297
+ // '..',
298
+ // importFrom
299
+ // ).replace(/\\/g, '/')) : importFrom;
300
+ const sourceFilePath = declaration.getSourceFile().fileName;
246
301
  (0, lodash_1.assign)(importAttrFrom, {
247
- [name]: [importFromRelatively, propertyName],
302
+ // [name]: [importFromRelatively, propertyName],
303
+ [name]: [importFrom, propertyName, sourceFilePath, relativePath],
248
304
  });
249
305
  }
250
306
  else if (ts.isTypeAliasDeclaration(declaration)) {
@@ -3759,12 +3815,30 @@ function _outputBaseSchema(outputDir, printer) {
3759
3815
  // 从外部引入的属性
3760
3816
  const fromExternalImportAttrs = {};
3761
3817
  for (const attr in importAttrFrom) {
3762
- const [from, propertyName] = importAttrFrom[attr];
3763
- if (fromExternalImportAttrs[from]) {
3764
- fromExternalImportAttrs[from].push([attr, propertyName]);
3818
+ // const [from, propertyName] = importAttrFrom[attr];
3819
+ // if (fromExternalImportAttrs[from]) {
3820
+ // fromExternalImportAttrs[from].push([attr, propertyName]);
3821
+ // }
3822
+ // else {
3823
+ // fromExternalImportAttrs[from] = [[attr, propertyName]];
3824
+ // }
3825
+ const [from, propertyName, sourceFilePath, relative] = importAttrFrom[attr];
3826
+ // ===== 在这里进行路径转换 =====
3827
+ const outputFilePath = path_1.default.join(outputDir, entity, '_baseSchema.ts'); // 输出文件路径
3828
+ // 使用路径解析算法计算新的导入路径
3829
+ const newImportPath = resolveCompiledImportPath(path_1.default.relative(process.cwd(), sourceFilePath), path_1.default.relative(process.cwd(), outputFilePath), from, // 原始导入路径
3830
+ ".", relative);
3831
+ // console.log('resolve import path:', {
3832
+ // sourceFilePath: PathLib.relative(process.cwd(), sourceFilePath),
3833
+ // outputFilePath: PathLib.relative(process.cwd(), outputFilePath),
3834
+ // from,
3835
+ // newImportPath,
3836
+ // });
3837
+ if (fromExternalImportAttrs[newImportPath]) {
3838
+ fromExternalImportAttrs[newImportPath].push([attr, propertyName]);
3765
3839
  }
3766
3840
  else {
3767
- fromExternalImportAttrs[from] = [[attr, propertyName]];
3841
+ fromExternalImportAttrs[newImportPath] = [[attr, propertyName]];
3768
3842
  }
3769
3843
  }
3770
3844
  for (const external in fromExternalImportAttrs) {
@@ -4009,7 +4083,6 @@ function constructAttributes(entity) {
4009
4083
  });
4010
4084
  return result;
4011
4085
  }
4012
- exports.constructAttributes = constructAttributes;
4013
4086
  function translateLocaleObject(locale) {
4014
4087
  const result = {};
4015
4088
  locale.properties.forEach((ele) => {
@@ -4028,7 +4101,6 @@ function translateLocaleObject(locale) {
4028
4101
  });
4029
4102
  return result;
4030
4103
  }
4031
- exports.translateLocaleObject = translateLocaleObject;
4032
4104
  function outputLocale(outputDir, printer) {
4033
4105
  const locales = {};
4034
4106
  const entities = [];
@@ -4303,7 +4375,6 @@ let FIXED_FOR_ALL_DESTINATION_PATH_ENTITIES = [];
4303
4375
  function registerIgnoredForeignKeyMap(map) {
4304
4376
  IGNORED_FOREIGN_KEY_MAP = map;
4305
4377
  }
4306
- exports.registerIgnoredForeignKeyMap = registerIgnoredForeignKeyMap;
4307
4378
  /**
4308
4379
  * 此函数不再使用
4309
4380
  * @param map
@@ -4313,7 +4384,6 @@ function registerFreeEntities(selectFreeEntities = [], createFreeEntities = [],
4313
4384
  CREATE_FREE_ENTITIES = createFreeEntities;
4314
4385
  UPDATE_FREE_ENTITIES = updateFreeEntities;
4315
4386
  }
4316
- exports.registerFreeEntities = registerFreeEntities;
4317
4387
  /**
4318
4388
  * 此函数不再使用
4319
4389
  * @param map
@@ -4323,7 +4393,6 @@ function registerIgnoredRelationPathMap(map) {
4323
4393
  IGNORED_RELATION_PATH_MAP[(0, string_1.firstLetterUpperCase)(k)] = map[k];
4324
4394
  }
4325
4395
  }
4326
- exports.registerIgnoredRelationPathMap = registerIgnoredRelationPathMap;
4327
4396
  /**
4328
4397
  * 很多路径虽然最后指向同一对象,但不能封掉,封了会导致查询的时候找不到对应的路径path
4329
4398
  * @param map
@@ -4341,7 +4410,6 @@ function registerFixedDestinationPathMap(map) {
4341
4410
  }
4342
4411
  }
4343
4412
  }
4344
- exports.registerFixedDestinationPathMap = registerFixedDestinationPathMap;
4345
4413
  /**
4346
4414
  * 此函数不再使用
4347
4415
  * @param map
@@ -4360,7 +4428,6 @@ function registerDeducedRelationMap(map) {
4360
4428
  DEDUCED_RELATION_MAP[entity] = map[k];
4361
4429
  }
4362
4430
  }
4363
- exports.registerDeducedRelationMap = registerDeducedRelationMap;
4364
4431
  /**
4365
4432
  * 输出所有和User相关的对象的后继
4366
4433
  * 此函数不再使用
@@ -4866,7 +4933,6 @@ function analyzeEntities(inputDir, relativePath) {
4866
4933
  analyzeInModi();
4867
4934
  uniqRelationships();
4868
4935
  }
4869
- exports.analyzeEntities = analyzeEntities;
4870
4936
  function buildSchemaBackup(outputDir) {
4871
4937
  addReverseRelationship();
4872
4938
  // setRelationEntities();
@@ -4885,7 +4951,6 @@ function buildSchemaBackup(outputDir) {
4885
4951
  outputPackageJson(outputDir);
4886
4952
  }
4887
4953
  }
4888
- exports.buildSchemaBackup = buildSchemaBackup;
4889
4954
  function _getAggrKey(entity, foreignKey) {
4890
4955
  const aggrKey = `${entity}$${foreignKey}`;
4891
4956
  if (process.env.COMPLING_AS_LIB) {
@@ -5625,7 +5690,6 @@ function getProjectionKeys(entity) {
5625
5690
  }
5626
5691
  return [...new Set([...keys, ...getOpProjectionKeys(entity)])];
5627
5692
  }
5628
- exports.getProjectionKeys = getProjectionKeys;
5629
5693
  function _outputSchema(outputDir, printer) {
5630
5694
  for (const entity in Schema) {
5631
5695
  const statements = [
@@ -5660,4 +5724,3 @@ function buildSchema(outputDir) {
5660
5724
  outputStyleDict(outputDir, printer);
5661
5725
  outputIndexTs(outputDir);
5662
5726
  }
5663
- exports.buildSchema = buildSchema;
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  import { EntityDict, RowStore, OperateOption, OperationResult, SelectOption, Context, TxnOption, OpRecord, AggregationResult, ClusterInfo, OakException } from "../types";
3
2
  import { EntityDict as BaseEntityDict } from '../base-app-domain';
4
3
  import { IncomingHttpHeaders } from "http";
@@ -35,7 +35,7 @@ export declare abstract class CascadeStore<ED extends EntityDict & BaseEntityDic
35
35
  protected abstract aggregateAbjointRowAsync<T extends keyof ED, OP extends SelectOption, Cxt extends AsyncContext<ED>>(entity: T, aggregation: ED[T]['Aggregation'], context: Cxt, option: OP): Promise<AggregationResult<ED[T]['Schema']>>;
36
36
  protected destructCascadeSelect<T extends keyof ED, OP extends SelectOption, Cxt extends SyncContext<ED> | AsyncContext<ED>>(entity: T, projection2: ED[T]['Projection'], context: Cxt, cascadeSelectFn: <T2 extends keyof ED>(entity2: T2, selection: ED[T2]['Selection'], context: Cxt, op: OP) => Partial<ED[T2]['Schema']>[] | Promise<Partial<ED[T2]['Schema']>[]>, aggregateFn: <T2 extends keyof ED>(entity2: T2, aggregation: ED[T2]['Aggregation'], context: Cxt, op: OP) => AggregationResult<ED[T2]['Schema']> | Promise<AggregationResult<ED[T2]['Schema']>>, option: OP, selectionId?: string): {
37
37
  projection: ED[T]["Projection"];
38
- cascadeSelectionFns: ((result: Partial<ED[T]['Schema']>[]) => Promise<void> | void)[];
38
+ cascadeSelectionFns: ((result: Partial<ED[T]["Schema"]>[]) => Promise<void> | void)[];
39
39
  };
40
40
  /**
41
41
  * 级联更新
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CascadeStore = exports.polishSelection = void 0;
3
+ exports.CascadeStore = void 0;
4
+ exports.polishSelection = polishSelection;
4
5
  const tslib_1 = require("tslib");
5
6
  const assert_1 = tslib_1.__importDefault(require("assert"));
6
7
  const Entity_1 = require("../types/Entity");
@@ -285,7 +286,6 @@ function polishSelection(schema, entity, selection, context, option) {
285
286
  });
286
287
  }
287
288
  }
288
- exports.polishSelection = polishSelection;
289
289
  /**这个用来处理级联的select和update,对不同能力的 */
290
290
  class CascadeStore extends RowStore_1.RowStore {
291
291
  constructor(storageSchema) {
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.makeIntrinsicCheckers = void 0;
3
+ exports.makeIntrinsicCheckers = makeIntrinsicCheckers;
4
4
  const tslib_1 = require("tslib");
5
5
  const types_1 = require("../types");
6
6
  const lodash_1 = require("../utils/lodash");
@@ -398,4 +398,3 @@ function makeIntrinsicCheckers(schema, actionDefDict, attrUpdateMatrix) {
398
398
  }
399
399
  return checkers;
400
400
  }
401
- exports.makeIntrinsicCheckers = makeIntrinsicCheckers;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.makeIntrinsicLogics = void 0;
3
+ exports.makeIntrinsicLogics = makeIntrinsicLogics;
4
4
  const triggers_1 = require("./triggers");
5
5
  const modi_1 = require("./modi");
6
6
  const IntrinsicCheckers_1 = require("./IntrinsicCheckers");
@@ -42,4 +42,3 @@ function makeIntrinsicLogics(schema, actionDefDict, attrUpdateMatrix) {
42
42
  watchers,
43
43
  };
44
44
  }
45
- exports.makeIntrinsicLogics = makeIntrinsicLogics;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getUserRelationsByActions = exports.RelationAuth = void 0;
3
+ exports.RelationAuth = void 0;
4
+ exports.getUserRelationsByActions = getUserRelationsByActions;
4
5
  const tslib_1 = require("tslib");
5
6
  const assert_1 = tslib_1.__importDefault(require("assert"));
6
7
  const types_1 = require("../types");
@@ -1120,12 +1121,12 @@ class RelationAuth {
1120
1121
  if (result instanceof Promise) {
1121
1122
  return result.then((r) => {
1122
1123
  if (!r) {
1123
- throw new types_1.OakDataInvisibleException(entity, operation);
1124
+ throw new types_1.OakDataInvisibleException(entity, operation, context.getCurrentUserId());
1124
1125
  }
1125
1126
  });
1126
1127
  }
1127
1128
  if (!result) {
1128
- throw new types_1.OakDataInvisibleException(entity, operation);
1129
+ throw new types_1.OakDataInvisibleException(entity, operation, context.getCurrentUserId());
1129
1130
  }
1130
1131
  }
1131
1132
  else {
@@ -1133,12 +1134,12 @@ class RelationAuth {
1133
1134
  if (result instanceof Promise) {
1134
1135
  return result.then((r) => {
1135
1136
  if (!r) {
1136
- throw new types_1.OakOperationUnpermittedException(entity, operation);
1137
+ throw new types_1.OakOperationUnpermittedException(entity, operation, context.getCurrentUserId());
1137
1138
  }
1138
1139
  });
1139
1140
  }
1140
1141
  if (!result) {
1141
- throw new types_1.OakOperationUnpermittedException(entity, operation);
1142
+ throw new types_1.OakOperationUnpermittedException(entity, operation, context.getCurrentUserId());
1142
1143
  }
1143
1144
  }
1144
1145
  }
@@ -1243,4 +1244,3 @@ async function getUserRelationsByActions(params, context) {
1243
1244
  userEntities,
1244
1245
  };
1245
1246
  }
1246
- exports.getUserRelationsByActions = getUserRelationsByActions;
@@ -1,6 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createCreateCheckers = exports.createRemoveCheckers = exports.translateCheckerInSyncContext = exports.translateCheckerInAsyncContext = void 0;
3
+ exports.translateCheckerInAsyncContext = translateCheckerInAsyncContext;
4
+ exports.translateCheckerInSyncContext = translateCheckerInSyncContext;
5
+ exports.createRemoveCheckers = createRemoveCheckers;
6
+ exports.createCreateCheckers = createCreateCheckers;
4
7
  const tslib_1 = require("tslib");
5
8
  const assert_1 = tslib_1.__importDefault(require("assert"));
6
9
  const filter_1 = require("../store/filter");
@@ -127,7 +130,6 @@ function translateCheckerInAsyncContext(checker, schema) {
127
130
  }
128
131
  }
129
132
  }
130
- exports.translateCheckerInAsyncContext = translateCheckerInAsyncContext;
131
133
  function translateCheckerInSyncContext(checker, schema) {
132
134
  const { entity, type } = checker;
133
135
  const when = 'before'; // 现在create的relation改成提前的expression检查了,原先是先插入再后检查,性能不行,而且select也需要实现前检查
@@ -186,7 +188,6 @@ function translateCheckerInSyncContext(checker, schema) {
186
188
  }
187
189
  }
188
190
  }
189
- exports.translateCheckerInSyncContext = translateCheckerInSyncContext;
190
191
  /**
191
192
  * 对对象的删除,检查其是否会产生其他行上的空指针,不允许这种情况的出现
192
193
  * @param schema
@@ -331,7 +332,6 @@ function createRemoveCheckers(schema) {
331
332
  }
332
333
  return checkers;
333
334
  }
334
- exports.createRemoveCheckers = createRemoveCheckers;
335
335
  function checkAttributeLegal(schema, entity, data) {
336
336
  const { attributes } = schema[entity];
337
337
  for (const attr in data) {
@@ -478,4 +478,3 @@ function createCreateCheckers(schema) {
478
478
  }
479
479
  return checkers;
480
480
  }
481
- exports.createCreateCheckers = createCreateCheckers;
@@ -1,6 +1,17 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.translateFilterToObjectPredicate = exports.checkFilterRepel = exports.checkFilterContains = exports.makeTreeDescendantFilter = exports.makeTreeAncestorFilter = exports.same = exports.getRelevantIds = exports.contains = exports.analyzeFilterRelation = exports.judgeValueRelation = exports.combineFilters = exports.translateCreateDataToFilter = void 0;
3
+ exports.translateCreateDataToFilter = translateCreateDataToFilter;
4
+ exports.combineFilters = combineFilters;
5
+ exports.judgeValueRelation = judgeValueRelation;
6
+ exports.analyzeFilterRelation = analyzeFilterRelation;
7
+ exports.contains = contains;
8
+ exports.getRelevantIds = getRelevantIds;
9
+ exports.same = same;
10
+ exports.makeTreeAncestorFilter = makeTreeAncestorFilter;
11
+ exports.makeTreeDescendantFilter = makeTreeDescendantFilter;
12
+ exports.checkFilterContains = checkFilterContains;
13
+ exports.checkFilterRepel = checkFilterRepel;
14
+ exports.translateFilterToObjectPredicate = translateFilterToObjectPredicate;
4
15
  const tslib_1 = require("tslib");
5
16
  const assert_1 = tslib_1.__importDefault(require("assert"));
6
17
  const types_1 = require("../types");
@@ -36,7 +47,6 @@ function translateCreateDataToFilter(schema, entity, data, allowUnrecoganized) {
36
47
  }
37
48
  return data2;
38
49
  }
39
- exports.translateCreateDataToFilter = translateCreateDataToFilter;
40
50
  /**
41
51
  * 尽量合并外键的连接,防止在数据库中join的对象过多
42
52
  * @param entity
@@ -484,7 +494,6 @@ function combineFilters(entity, schema, filters, union) {
484
494
  }
485
495
  return addFilterSegment(entity, schema, ...filters);
486
496
  }
487
- exports.combineFilters = combineFilters;
488
497
  /**
489
498
  * 在以下判断相容或相斥的过程中,相容/相斥的事实标准是:满足两个条件的查询集合是否被包容/互斥,但如果两个filter在逻辑上相容或者相斥,在事实上不一定相容或者相斥
490
499
  * 例如:{ a: 1 } 和 { a: { $ne: 1 } } 是明显不相容的查询,但如果数据为空集,则这两个查询并不能否定其相容
@@ -903,7 +912,6 @@ function judgeValueRelation(value1, value2, contained) {
903
912
  return false;
904
913
  }
905
914
  }
906
- exports.judgeValueRelation = judgeValueRelation;
907
915
  /**
908
916
  * 判断filter条件对compared条件上的attr键值的条件是否相容或相斥
909
917
  * @param entity
@@ -1292,7 +1300,6 @@ function analyzeFilterRelation(entity, schema, filter, compared, contained) {
1292
1300
  sureAttributes,
1293
1301
  };
1294
1302
  }
1295
- exports.analyzeFilterRelation = analyzeFilterRelation;
1296
1303
  /** 判断filter条件对compared条件是否相容或相斥
1297
1304
  * @param entity
1298
1305
  * @param schema
@@ -1364,7 +1371,6 @@ function contains(entity, schema, filter, contained) {
1364
1371
  return judgeFilterRelation(entity, schema, filter, contained, true);
1365
1372
  // return false;
1366
1373
  }
1367
- exports.contains = contains;
1368
1374
  /**
1369
1375
  * 判断filter1和filter2是否相斥,即filter1和filter2查询的结果一定没有交集
1370
1376
  * filter1 = {
@@ -1465,7 +1471,6 @@ function getRelevantIds(filter) {
1465
1471
  }
1466
1472
  return result;
1467
1473
  }
1468
- exports.getRelevantIds = getRelevantIds;
1469
1474
  /**
1470
1475
  * 判断两个过滤条件是否完全一致
1471
1476
  * @param entity
@@ -1480,7 +1485,6 @@ function same(entity, schema, filter1, filter2) {
1480
1485
  }
1481
1486
  return filter1.id === filter2.id;
1482
1487
  }
1483
- exports.same = same;
1484
1488
  /**
1485
1489
  * 寻找在树形结构中满足条件的数据行的上层数据
1486
1490
  * 例如在area表中,如果“杭州市”满足这一条件,则希望查到更高层的“浙江省”和“中国”,即可构造出满足条件的filter
@@ -1521,7 +1525,6 @@ function makeTreeAncestorFilter(entity, parentKey, filter, level = 1, includeAll
1521
1525
  }
1522
1526
  return currentLevelInFilter;
1523
1527
  }
1524
- exports.makeTreeAncestorFilter = makeTreeAncestorFilter;
1525
1528
  /**
1526
1529
  * 寻找在树形结构中满足条件的数据行的下层数据
1527
1530
  * 例如在area表中,如果“杭州市”满足这一条件,则希望查到更低层的“西湖区”,即可构造出满足条件的filter
@@ -1556,7 +1559,6 @@ function makeTreeDescendantFilter(entity, parentKey, filter, level = 1, includeA
1556
1559
  }
1557
1560
  return currentLevelInFilter;
1558
1561
  }
1559
- exports.makeTreeDescendantFilter = makeTreeDescendantFilter;
1560
1562
  function checkDeduceFilters(dfc, context) {
1561
1563
  const { $and, $or } = dfc;
1562
1564
  if ($and) {
@@ -1642,7 +1644,6 @@ function checkFilterContains(entity, context, contained, filter, dataCompare, wa
1642
1644
  }
1643
1645
  return false;
1644
1646
  }
1645
- exports.checkFilterContains = checkFilterContains;
1646
1647
  function checkFilterRepel(entity, context, filter1, filter2, dataCompare, warningOnDataCompare) {
1647
1648
  (0, assert_1.default)(filter2);
1648
1649
  const schema = context.getSchema();
@@ -1658,7 +1659,6 @@ function checkFilterRepel(entity, context, filter1, filter2, dataCompare, warnin
1658
1659
  }
1659
1660
  return false;
1660
1661
  }
1661
- exports.checkFilterRepel = checkFilterRepel;
1662
1662
  /**
1663
1663
  * 有的场景下将filter当成非结构化属性存储,又想支持对其查询,此时必须将查询的filter进行转换,处理其中$开头的escape
1664
1664
  * 只要filter是查询数据的标准子集,查询应当能返回true
@@ -1682,7 +1682,6 @@ function translateFilterToObjectPredicate(filter) {
1682
1682
  copyInner(filter, translated);
1683
1683
  return translated;
1684
1684
  }
1685
- exports.translateFilterToObjectPredicate = translateFilterToObjectPredicate;
1686
1685
  /* export function getCascadeEntityFilter<ED extends EntityDict & BaseEntityDict, T extends keyof ED>(
1687
1686
  filter: NonNullable<ED[T]['Filter']>,
1688
1687
  attr: keyof NonNullable<ED[T]['Filter']>
package/lib/store/modi.js CHANGED
@@ -1,6 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createModiRelatedTriggers = exports.createModiRelatedCheckers = exports.abandonModis = exports.applyModis = exports.createOperationsFromModies = void 0;
3
+ exports.createOperationsFromModies = createOperationsFromModies;
4
+ exports.applyModis = applyModis;
5
+ exports.abandonModis = abandonModis;
6
+ exports.createModiRelatedCheckers = createModiRelatedCheckers;
7
+ exports.createModiRelatedTriggers = createModiRelatedTriggers;
4
8
  const tslib_1 = require("tslib");
5
9
  const types_1 = require("../types");
6
10
  const action_1 = require("../actions/action");
@@ -20,7 +24,6 @@ function createOperationsFromModies(modies) {
20
24
  };
21
25
  });
22
26
  }
23
- exports.createOperationsFromModies = createOperationsFromModies;
24
27
  async function applyModis(filter, context, option) {
25
28
  const closeMode = context.openRootMode();
26
29
  const result = await context.operate('modi', {
@@ -42,7 +45,6 @@ async function applyModis(filter, context, option) {
42
45
  closeMode();
43
46
  return result;
44
47
  }
45
- exports.applyModis = applyModis;
46
48
  async function abandonModis(filter, context, option) {
47
49
  const closeMode = context.openRootMode();
48
50
  const result = context.operate('modi', {
@@ -64,7 +66,6 @@ async function abandonModis(filter, context, option) {
64
66
  closeMode();
65
67
  return result;
66
68
  }
67
- exports.abandonModis = abandonModis;
68
69
  function createModiRelatedCheckers(schema) {
69
70
  const checkers = [];
70
71
  for (const entity in schema) {
@@ -169,7 +170,6 @@ function createModiRelatedCheckers(schema) {
169
170
  }
170
171
  return checkers;
171
172
  }
172
- exports.createModiRelatedCheckers = createModiRelatedCheckers;
173
173
  function createModiRelatedTriggers(schema) {
174
174
  const triggers = [];
175
175
  for (const entity in schema) {
@@ -253,4 +253,3 @@ function createModiRelatedTriggers(schema) {
253
253
  };
254
254
  return triggers.concat([applyTrigger]);
255
255
  }
256
- exports.createModiRelatedTriggers = createModiRelatedTriggers;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.judgeRelation = void 0;
3
+ exports.judgeRelation = judgeRelation;
4
4
  const tslib_1 = require("tslib");
5
5
  const assert_1 = tslib_1.__importDefault(require("assert"));
6
6
  const Demand_1 = require("../types/Demand");
@@ -71,4 +71,3 @@ function judgeRelation(schema, entity, attr, allowUnrecognized) {
71
71
  }
72
72
  }
73
73
  }
74
- exports.judgeRelation = judgeRelation;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.vaccumOper = void 0;
3
+ exports.vaccumOper = vaccumOper;
4
4
  const Entity_1 = require("../types/Entity");
5
5
  const vaccum_1 = require("./vaccum");
6
6
  const filter_1 = require("../store/filter");
@@ -61,4 +61,3 @@ async function vaccumOper(option, context) {
61
61
  ...rest,
62
62
  }, context);
63
63
  }
64
- exports.vaccumOper = vaccumOper;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.vaccumEntities = void 0;
3
+ exports.vaccumEntities = vaccumEntities;
4
4
  const tslib_1 = require("tslib");
5
5
  const dayjs_1 = tslib_1.__importDefault(require("dayjs"));
6
6
  const fs_1 = require("fs");
@@ -108,4 +108,3 @@ async function vaccumEntities(option, context) {
108
108
  }, { deletePhysically: true });
109
109
  }
110
110
  }
111
- exports.vaccumEntities = vaccumEntities;
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  import { IncomingHttpHeaders } from "http";
3
2
  import { AsyncContext, AsyncRowStore } from "../store/AsyncRowStore";
4
3
  import { EntityDict, OpRecord } from "./Entity";
@@ -56,6 +56,7 @@ export type ServerConfiguration = {
56
56
  socket?: (ctx: Koa.ParameterizedContext<any, KoaRouter.IRouterParamContext<any, {}>, any>) => {
57
57
  url: string;
58
58
  } | undefined;
59
+ middleware?: Koa.Middleware[] | ((app: Koa<Koa.DefaultState, Koa.DefaultContext>) => Koa.Middleware[]);
59
60
  };
60
61
  /**
61
62
  * 前后台访问配置
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  import { IncomingHttpHeaders } from "http";
3
2
  import { SyncContext } from "../store/SyncRowStore";
4
3
  import { EntityDict, OpRecord } from "./Entity";
@@ -1,10 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SUB_QUERY_PREDICATE_KEYWORD = exports.isRefAttrNode = exports.EXPRESSION_PREFIX = void 0;
3
+ exports.SUB_QUERY_PREDICATE_KEYWORD = exports.EXPRESSION_PREFIX = void 0;
4
+ exports.isRefAttrNode = isRefAttrNode;
4
5
  exports.EXPRESSION_PREFIX = '$expr';
5
6
  function isRefAttrNode(node) {
6
7
  return node.hasOwnProperty('#attr') || (node.hasOwnProperty('#refId') && node.hasOwnProperty('#refAttr'));
7
8
  }
8
- exports.isRefAttrNode = isRefAttrNode;
9
9
  ;
10
10
  exports.SUB_QUERY_PREDICATE_KEYWORD = '#sqp';
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  import { IncomingHttpHeaders, IncomingMessage } from "http";
3
2
  import { AsyncContext } from "../store/AsyncRowStore";
4
3
  import { EntityDict } from "./Entity";