@ibiz-template/model-helper 0.7.41-alpha.124 → 0.7.41-alpha.126

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 (43) hide show
  1. package/dist/index.esm.js +152 -13
  2. package/dist/index.system.min.js +1 -1
  3. package/out/index.d.ts +2 -1
  4. package/out/index.d.ts.map +1 -1
  5. package/out/index.js +1 -1
  6. package/out/interface/i-model-handler.d.ts +20 -0
  7. package/out/interface/i-model-handler.d.ts.map +1 -0
  8. package/out/interface/i-model-handler.js +1 -0
  9. package/out/interface/index.d.ts +2 -0
  10. package/out/interface/index.d.ts.map +1 -0
  11. package/out/interface/index.js +1 -0
  12. package/out/locale/en/index.d.ts +3 -0
  13. package/out/locale/en/index.d.ts.map +1 -1
  14. package/out/locale/en/index.js +3 -0
  15. package/out/locale/zh-CN/index.d.ts +3 -0
  16. package/out/locale/zh-CN/index.d.ts.map +1 -1
  17. package/out/locale/zh-CN/index.js +3 -0
  18. package/out/model-util.d.ts +3 -2
  19. package/out/model-util.d.ts.map +1 -1
  20. package/out/model-util.js +20 -12
  21. package/out/utils/index.d.ts +3 -0
  22. package/out/utils/index.d.ts.map +1 -1
  23. package/out/utils/index.js +3 -0
  24. package/out/utils/model-transformer/model-handler.d.ts +32 -0
  25. package/out/utils/model-transformer/model-handler.d.ts.map +1 -0
  26. package/out/utils/model-transformer/model-handler.js +24 -0
  27. package/out/utils/model-transformer/model-register.d.ts +9 -0
  28. package/out/utils/model-transformer/model-register.d.ts.map +1 -0
  29. package/out/utils/model-transformer/model-register.js +10 -0
  30. package/out/utils/model-transformer/model-transformer.d.ts +55 -0
  31. package/out/utils/model-transformer/model-transformer.d.ts.map +1 -0
  32. package/out/utils/model-transformer/model-transformer.js +102 -0
  33. package/package.json +3 -3
  34. package/src/index.ts +6 -1
  35. package/src/interface/i-model-handler.ts +19 -0
  36. package/src/interface/index.ts +1 -0
  37. package/src/locale/en/index.ts +6 -0
  38. package/src/locale/zh-CN/index.ts +4 -0
  39. package/src/model-util.ts +28 -12
  40. package/src/utils/index.ts +3 -0
  41. package/src/utils/model-transformer/model-handler.ts +36 -0
  42. package/src/utils/model-transformer/model-register.ts +15 -0
  43. package/src/utils/model-transformer/model-transformer.ts +124 -0
package/out/index.d.ts CHANGED
@@ -1,7 +1,8 @@
1
1
  import '@ibiz/model-core';
2
2
  import '@ibiz-template/runtime';
3
+ export type { IModelHandler } from './interface';
3
4
  export * from './model-helper';
4
5
  export * from './locale';
5
6
  export { ModelHelper } from './model-helper';
6
- export { MergeSubModelHelper } from './utils';
7
+ export { MergeSubModelHelper, registerModelHandler, ModelHandler, } from './utils';
7
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,wBAAwB,CAAC;AAEhC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,wBAAwB,CAAC;AAEhC,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,YAAY,GACb,MAAM,SAAS,CAAC"}
package/out/index.js CHANGED
@@ -3,4 +3,4 @@ import '@ibiz-template/runtime';
3
3
  export * from './model-helper';
4
4
  export * from './locale';
5
5
  export { ModelHelper } from './model-helper';
6
- export { MergeSubModelHelper } from './utils';
6
+ export { MergeSubModelHelper, registerModelHandler, ModelHandler, } from './utils';
@@ -0,0 +1,20 @@
1
+ /**
2
+ * @description 模型处理器
3
+ * @export
4
+ * @interface IModelHandler
5
+ */
6
+ export interface IModelHandler {
7
+ /**
8
+ * @description 执行模型处理
9
+ *
10
+ * 调用约定:
11
+ * - 入参 `model` 为当前已处理的模型对象,处理器可就地修改该对象,也可返回一个新的模型对象。
12
+ * - 返回值将作为下一个处理器的入参,并最终作为该路径模型的最终结果被缓存。
13
+ * - 若返回 `null`、`undefined` 等假值,将中断当前路径后续处理器的执行,并回退到原始模型。
14
+ * - 处理器抛出异常时同样会中断后续执行,并回退到原始模型。
15
+ * @param {IModel} model 当前待处理的模型对象
16
+ * @returns {IModel} 处理后的模型对象
17
+ */
18
+ execute(model: IModel): IModel;
19
+ }
20
+ //# sourceMappingURL=i-model-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i-model-handler.d.ts","sourceRoot":"","sources":["../../src/interface/i-model-handler.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B;;;;;;;;;;OAUG;IACH,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;CAChC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,2 @@
1
+ export type { IModelHandler } from './i-model-handler';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/interface/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -5,6 +5,9 @@ export declare const en: {
5
5
  maximumTier: string;
6
6
  circularRecursive: string;
7
7
  calculatedEntities: string;
8
+ transformNoModelData: string;
9
+ transformException: string;
10
+ tryGetModel: string;
8
11
  };
9
12
  noInitialized: string;
10
13
  noFoundEntity: string;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/locale/en/index.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,EAAE;;;;;;;;;;;;;CAed,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/locale/en/index.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,EAAE;;;;;;;;;;;;;;;;CAqBd,CAAC"}
@@ -5,6 +5,9 @@ export const en = {
5
5
  maximumTier: 'Service path calculation exceeds maximum tier 10',
6
6
  circularRecursive: 'A circular recursive reference appears in the computational resource relationship path, triggering the entity:',
7
7
  calculatedEntities: 'Current list of calculated entities. ',
8
+ transformNoModelData: '[{dynaModelFilePath}] model transformation exception, no model data returned',
9
+ transformException: '[{dynaModelFilePath}] model transformation exception',
10
+ tryGetModel: '[Custom extension model data] Try to get the extension model of path [{dynaModelFilePath}]',
8
11
  },
9
12
  noInitialized: '[{appId}] is not initialized, please call initModelUtil method to initialize it first',
10
13
  noFoundEntity: 'Application [{appId}] data entity not found [{tag}]',
@@ -5,6 +5,9 @@ export declare const zhCn: {
5
5
  maximumTier: string;
6
6
  circularRecursive: string;
7
7
  calculatedEntities: string;
8
+ transformNoModelData: string;
9
+ transformException: string;
10
+ tryGetModel: string;
8
11
  };
9
12
  noInitialized: string;
10
13
  noFoundEntity: string;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/locale/zh-CN/index.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,IAAI;;;;;;;;;;;;;CAahB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/locale/zh-CN/index.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;CAiBhB,CAAC"}
@@ -5,6 +5,9 @@ export const zhCn = {
5
5
  maximumTier: '服务路径计算超过最大层级 10',
6
6
  circularRecursive: '计算资源关系路径出现循环递归引用,触发实体:',
7
7
  calculatedEntities: '当前已计算过实体清单: ',
8
+ transformNoModelData: '[{dynaModelFilePath}]模型转化异常,未返回模型数据',
9
+ transformException: '[{dynaModelFilePath}]模型转化异常',
10
+ tryGetModel: '[自定义扩展模型数据] 尝试获取路径[{dynaModelFilePath}]的扩展模型',
8
11
  },
9
12
  noInitialized: '[{appId}]未初始化,请先调用 initModelUtil 方法初始化',
10
13
  noFoundEntity: '应用[{appId}]未找到数据实体[{tag}]',
@@ -164,14 +164,15 @@ export declare class ModelUtil {
164
164
  */
165
165
  getModel(modelPath: string, params?: IParams, isDynamic?: boolean): Promise<IModel>;
166
166
  /**
167
- * 递归填充应用标识
167
+ * 递归填充模型,包括填充模型appId、变换模型
168
168
  *
169
169
  * @author chitanda
170
170
  * @date 2023-08-21 10:08:41
171
171
  * @protected
172
172
  * @param {IModel} model
173
+ * @return {*} {IModel} 返回处理后的模型,若处理器返回新对象则替换原引用
173
174
  */
174
- protected deepFillAppId(model: IModel): void;
175
+ protected deepFillModel(model: IModel): IModel;
175
176
  /**
176
177
  * 计算应用模型请求路径
177
178
  *
@@ -1 +1 @@
1
- {"version":3,"file":"model-util.d.ts","sourceRoot":"","sources":["../src/model-util.ts"],"names":[],"mappings":"AAGA,OAAO,EAA0B,eAAe,EAAE,MAAM,SAAS,CAAC;AAGlE;;;;;;;GAOG;AACH,qBAAa,SAAS;IA0ClB,SAAS,CAAC,KAAK,EAAE,MAAM;IACvB,SAAS,CAAC,QAAQ,EAAE,MAAM;IAC1B,SAAS,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,MAAM,CAAC;IACjE,SAAS,CAAC,GAAG,EAAE,OAAO;IACtB,SAAS,CAAC,UAAU,EAAE,OAAO;IAC7B,SAAS,CAAC,UAAU,EAAE,OAAO;IA9C/B;;;;;;;OAOG;IACH,SAAS,CAAC,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAa;IAEtD;;;;;;;OAOG;IACH,SAAS,CAAC,QAAQ,EAAG,MAAM,CAAC;IAE5B;;;;;;OAMG;IACH,eAAe,EAAG,eAAe,CAAC;IAElC;;;;;;;;;;OAUG;gBAES,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,MAAM,CAAC,EACvD,GAAG,EAAE,OAAO,EACZ,UAAU,EAAE,OAAO,EACnB,UAAU,GAAE,OAAc;IAGtC;;;;;;OAMG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA6C3B;;;;;;;OAOG;cACa,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAWhD;;;;;;OAMG;IACG,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;IAepC;;;;;;OAMG;IACG,WAAW,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAqB3C;;;;;;;;;OASG;IACG,qBAAqB,CACzB,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,OAAc,EACpB,UAAU,GAAE,OAAe,GAC1B,OAAO,CAAC,MAAM,CAAC;IA8BlB;;;;;;;;;OASG;IACG,eAAe,CACnB,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,OAAO,EAChB,SAAS,CAAC,EAAE,OAAO,GAClB,OAAO,CAAC,MAAM,CAAC;IAiBlB;;;;;;;OAOG;IACG,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAqBrD;;;;;;;OAOG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAUjD;;;;;;;OAOG;IACG,mBAAmB,CAAC,KAAK,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAWlE;;;;;;;OAOG;IACG,gBAAgB,CAAC,KAAK,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAW/D;;;;;;;OAOG;IACG,eAAe,CAAC,KAAK,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAW9D;;;;;;;;;OASG;IACG,QAAQ,CACZ,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,OAAO,EAChB,SAAS,CAAC,EAAE,OAAO,GAClB,OAAO,CAAC,MAAM,CAAC;IAmBlB;;;;;;;OAOG;IACH,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAmB5C;;;;;;;;;OASG;IACH,SAAS,CAAC,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,GAAE,OAAe,GAAG,MAAM;IAW5E;;;;;;;;;OASG;IACH,SAAS,CAAC,cAAc,CACtB,SAAS,EAAE,MAAM,EACjB,SAAS,GAAE,OAAe,GACzB,MAAM;CAQV"}
1
+ {"version":3,"file":"model-util.d.ts","sourceRoot":"","sources":["../src/model-util.ts"],"names":[],"mappings":"AAGA,OAAO,EAIL,eAAe,EAChB,MAAM,SAAS,CAAC;AAGjB;;;;;;;GAOG;AACH,qBAAa,SAAS;IA0ClB,SAAS,CAAC,KAAK,EAAE,MAAM;IACvB,SAAS,CAAC,QAAQ,EAAE,MAAM;IAC1B,SAAS,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,MAAM,CAAC;IACjE,SAAS,CAAC,GAAG,EAAE,OAAO;IACtB,SAAS,CAAC,UAAU,EAAE,OAAO;IAC7B,SAAS,CAAC,UAAU,EAAE,OAAO;IA9C/B;;;;;;;OAOG;IACH,SAAS,CAAC,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAa;IAEtD;;;;;;;OAOG;IACH,SAAS,CAAC,QAAQ,EAAG,MAAM,CAAC;IAE5B;;;;;;OAMG;IACH,eAAe,EAAG,eAAe,CAAC;IAElC;;;;;;;;;;OAUG;gBAES,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,MAAM,CAAC,EACvD,GAAG,EAAE,OAAO,EACZ,UAAU,EAAE,OAAO,EACnB,UAAU,GAAE,OAAc;IAGtC;;;;;;OAMG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA6C3B;;;;;;;OAOG;cACa,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAWhD;;;;;;OAMG;IACG,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;IAepC;;;;;;OAMG;IACG,WAAW,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAqB3C;;;;;;;;;OASG;IACG,qBAAqB,CACzB,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,OAAc,EACpB,UAAU,GAAE,OAAe,GAC1B,OAAO,CAAC,MAAM,CAAC;IA8BlB;;;;;;;;;OASG;IACG,eAAe,CACnB,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,OAAO,EAChB,SAAS,CAAC,EAAE,OAAO,GAClB,OAAO,CAAC,MAAM,CAAC;IAiBlB;;;;;;;OAOG;IACG,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAqBrD;;;;;;;OAOG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAUjD;;;;;;;OAOG;IACG,mBAAmB,CAAC,KAAK,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAWlE;;;;;;;OAOG;IACG,gBAAgB,CAAC,KAAK,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAW/D;;;;;;;OAOG;IACG,eAAe,CAAC,KAAK,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAW9D;;;;;;;;;OASG;IACG,QAAQ,CACZ,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,OAAO,EAChB,SAAS,CAAC,EAAE,OAAO,GAClB,OAAO,CAAC,MAAM,CAAC;IAmBlB;;;;;;;;OAQG;IACH,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IA6B9C;;;;;;;;;OASG;IACH,SAAS,CAAC,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,GAAE,OAAe,GAAG,MAAM;IAW5E;;;;;;;;;OASG;IACH,SAAS,CAAC,cAAc,CACtB,SAAS,EAAE,MAAM,EACjB,SAAS,GAAE,OAAe,GACzB,MAAM;CAQV"}
package/out/model-util.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { calcUniqueTag } from '@ibiz/rt-model-api';
2
2
  import { isEmpty } from 'ramda';
3
- import { formatPath, mergeModel, ServicePathUtil } from './utils';
3
+ import { formatPath, mergeModel, ModelTransformer, ServicePathUtil, } from './utils';
4
4
  import { PSSysApp } from './model/PSSYSAPP';
5
5
  /**
6
6
  * 全动模型处理工具类,每个App一个实例
@@ -331,38 +331,46 @@ export class ModelUtil {
331
331
  return this.modelCache.get(url);
332
332
  }
333
333
  const model = await this.get(url, params);
334
+ const filledModel = this.deepFillModel(model);
334
335
  if (!isParams) {
335
- this.modelCache.set(url, model);
336
+ this.modelCache.set(url, filledModel);
336
337
  }
337
- this.deepFillAppId(model);
338
- return model;
338
+ return filledModel;
339
339
  }
340
340
  /**
341
- * 递归填充应用标识
341
+ * 递归填充模型,包括填充模型appId、变换模型
342
342
  *
343
343
  * @author chitanda
344
344
  * @date 2023-08-21 10:08:41
345
345
  * @protected
346
346
  * @param {IModel} model
347
+ * @return {*} {IModel} 返回处理后的模型,若处理器返回新对象则替换原引用
347
348
  */
348
- deepFillAppId(model) {
349
- model.appId = this.appId;
350
- const keys = Object.keys(model);
349
+ deepFillModel(model) {
350
+ // 变换模型
351
+ let result = model;
352
+ if (model.dynaModelFilePath) {
353
+ result = ModelTransformer.getInstance().transform(model.dynaModelFilePath, model);
354
+ }
355
+ // 填充模型appId
356
+ result.appId = this.appId;
357
+ const keys = Object.keys(result);
351
358
  keys.forEach(key => {
352
- const value = model[key];
359
+ const value = result[key];
353
360
  if (value && typeof value === 'object') {
354
361
  if (Array.isArray(value)) {
355
- value.forEach(item => {
362
+ value.forEach((item, index) => {
356
363
  if (item && typeof item === 'object') {
357
- this.deepFillAppId(item);
364
+ value[index] = this.deepFillModel(item);
358
365
  }
359
366
  });
360
367
  }
361
368
  else {
362
- this.deepFillAppId(value);
369
+ result[key] = this.deepFillModel(value);
363
370
  }
364
371
  }
365
372
  });
373
+ return result;
366
374
  }
367
375
  /**
368
376
  * 计算应用模型请求路径
@@ -3,4 +3,7 @@ export { mergeModel } from './merge-model/merge-model';
3
3
  export { plural, pluralLower } from './plural/plural';
4
4
  export { ServicePathDeep, ServicePathItem, ServicePathUtil, } from './service-path-util/service-path-util';
5
5
  export { MergeSubModelHelper } from './merge-model/merge-model-helper';
6
+ export { ModelHandler } from './model-transformer/model-handler';
7
+ export { ModelTransformer } from './model-transformer/model-transformer';
8
+ export { registerModelHandler } from './model-transformer/model-register';
6
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EACL,eAAe,EACf,eAAe,EACf,eAAe,GAChB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EACL,eAAe,EACf,eAAe,EACf,eAAe,GAChB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC"}
@@ -3,3 +3,6 @@ export { mergeModel } from './merge-model/merge-model';
3
3
  export { plural, pluralLower } from './plural/plural';
4
4
  export { ServicePathUtil, } from './service-path-util/service-path-util';
5
5
  export { MergeSubModelHelper } from './merge-model/merge-model-helper';
6
+ export { ModelHandler } from './model-transformer/model-handler';
7
+ export { ModelTransformer } from './model-transformer/model-transformer';
8
+ export { registerModelHandler } from './model-transformer/model-register';
@@ -0,0 +1,32 @@
1
+ import { IModelHandler } from '../../interface';
2
+ /**
3
+ * @description 模型变换处理器
4
+ * @export
5
+ * @abstract
6
+ * @class ModelHandler
7
+ * @implements {IModelHandler}
8
+ */
9
+ export declare abstract class ModelHandler implements IModelHandler {
10
+ /**
11
+ * @description 优先级,默认值为1
12
+ * @public
13
+ * @type {number}
14
+ * @memberof ModelHandler
15
+ */
16
+ priority: number;
17
+ /**
18
+ * Creates an instance of ModelHandler.
19
+ * @param {number} [priority=1] 优先级,数值越小越先执行
20
+ * @memberof ModelHandler
21
+ */
22
+ constructor(priority?: number);
23
+ /**
24
+ * @description 执行器
25
+ * @abstract
26
+ * @param {IModel} model
27
+ * @returns {*} {IModel}
28
+ * @memberof ModelHandler
29
+ */
30
+ abstract execute(model: IModel): IModel;
31
+ }
32
+ //# sourceMappingURL=model-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-handler.d.ts","sourceRoot":"","sources":["../../../src/utils/model-transformer/model-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD;;;;;;GAMG;AACH,8BAAsB,YAAa,YAAW,aAAa;IACzD;;;;;OAKG;IACI,QAAQ,EAAE,MAAM,CAAK;IAE5B;;;;OAIG;gBACS,QAAQ,GAAE,MAAU;IAIhC;;;;;;OAMG;IACH,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;CACxC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * @description 模型变换处理器
3
+ * @export
4
+ * @abstract
5
+ * @class ModelHandler
6
+ * @implements {IModelHandler}
7
+ */
8
+ export class ModelHandler {
9
+ /**
10
+ * Creates an instance of ModelHandler.
11
+ * @param {number} [priority=1] 优先级,数值越小越先执行
12
+ * @memberof ModelHandler
13
+ */
14
+ constructor(priority = 1) {
15
+ /**
16
+ * @description 优先级,默认值为1
17
+ * @public
18
+ * @type {number}
19
+ * @memberof ModelHandler
20
+ */
21
+ this.priority = 1;
22
+ this.priority = priority;
23
+ }
24
+ }
@@ -0,0 +1,9 @@
1
+ import { ModelHandler } from './model-handler';
2
+ /**
3
+ * @description 注册模型处理器
4
+ * @export
5
+ * @param {string} dynaModelFilePath 模型路径
6
+ * @param {ModelHandler} handler 模型处理器
7
+ */
8
+ export declare function registerModelHandler(dynaModelFilePath: string, handler: ModelHandler): void;
9
+ //# sourceMappingURL=model-register.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-register.d.ts","sourceRoot":"","sources":["../../../src/utils/model-transformer/model-register.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAG/C;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,iBAAiB,EAAE,MAAM,EACzB,OAAO,EAAE,YAAY,GACpB,IAAI,CAEN"}
@@ -0,0 +1,10 @@
1
+ import { ModelTransformer } from './model-transformer';
2
+ /**
3
+ * @description 注册模型处理器
4
+ * @export
5
+ * @param {string} dynaModelFilePath 模型路径
6
+ * @param {ModelHandler} handler 模型处理器
7
+ */
8
+ export function registerModelHandler(dynaModelFilePath, handler) {
9
+ ModelTransformer.getInstance().registerHandler(dynaModelFilePath, handler);
10
+ }
@@ -0,0 +1,55 @@
1
+ import { ModelHandler } from './model-handler';
2
+ /**
3
+ * @description 模型变换器
4
+ * @author tony001
5
+ * @date 2026-08-13 09:08:03
6
+ * @export
7
+ * @class ModelTransformer
8
+ */
9
+ export declare class ModelTransformer {
10
+ /**
11
+ * @description 单例变量声明
12
+ * @private
13
+ * @static
14
+ * @type {ModelTransformer}
15
+ * @memberof ModelTransformer
16
+ */
17
+ private static modelTransformer;
18
+ /**
19
+ * @description 获取 ModelTransformer 单例对象
20
+ * @static
21
+ * @returns {*} {ModelTransformer}
22
+ * @memberof ModelTransformer
23
+ */
24
+ static getInstance(): ModelTransformer;
25
+ /**
26
+ * @description 模型处理器Map
27
+ * @private
28
+ * @type {Map<string, ModelHandler[]>}
29
+ * @memberof ModelTransformer
30
+ */
31
+ private handlerMap;
32
+ /**
33
+ * @description 模型缓存Map
34
+ * @private
35
+ * @type {Map<string, IModel>}
36
+ * @memberof ModelTransformer
37
+ */
38
+ private modelCacheMap;
39
+ /**
40
+ * @description 注册模型处理器
41
+ * @param {string} dynaModelFilePath 模型路径
42
+ * @param {IModelHandler} handler 执行器
43
+ * @memberof ModelTransformer
44
+ */
45
+ registerHandler(dynaModelFilePath: string, handler: ModelHandler): void;
46
+ /**
47
+ * @description 变换模型
48
+ * @param {string} dynaModelFilePath 模型路径
49
+ * @param {IModel} model 原始模型
50
+ * @returns {*} {IModel}
51
+ * @memberof ModelTransformer
52
+ */
53
+ transform(dynaModelFilePath: string, model: IModel): IModel;
54
+ }
55
+ //# sourceMappingURL=model-transformer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-transformer.d.ts","sourceRoot":"","sources":["../../../src/utils/model-transformer/model-transformer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C;;;;;;GAMG;AACH,qBAAa,gBAAgB;IAC3B;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAmB;IAElD;;;;;OAKG;WACW,WAAW,IAAI,gBAAgB;IAO7C;;;;;OAKG;IACH,OAAO,CAAC,UAAU,CAA0C;IAE5D;;;;;OAKG;IACH,OAAO,CAAC,aAAa,CAAkC;IAEvD;;;;;OAKG;IACI,eAAe,CACpB,iBAAiB,EAAE,MAAM,EACzB,OAAO,EAAE,YAAY,GACpB,IAAI;IAWP;;;;;;OAMG;IACI,SAAS,CAAC,iBAAiB,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;CAgDnE"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * @description 模型变换器
3
+ * @author tony001
4
+ * @date 2026-08-13 09:08:03
5
+ * @export
6
+ * @class ModelTransformer
7
+ */
8
+ export class ModelTransformer {
9
+ constructor() {
10
+ /**
11
+ * @description 模型处理器Map
12
+ * @private
13
+ * @type {Map<string, ModelHandler[]>}
14
+ * @memberof ModelTransformer
15
+ */
16
+ this.handlerMap = new Map();
17
+ /**
18
+ * @description 模型缓存Map
19
+ * @private
20
+ * @type {Map<string, IModel>}
21
+ * @memberof ModelTransformer
22
+ */
23
+ this.modelCacheMap = new Map();
24
+ }
25
+ /**
26
+ * @description 获取 ModelTransformer 单例对象
27
+ * @static
28
+ * @returns {*} {ModelTransformer}
29
+ * @memberof ModelTransformer
30
+ */
31
+ static getInstance() {
32
+ if (!this.modelTransformer) {
33
+ this.modelTransformer = new ModelTransformer();
34
+ }
35
+ return this.modelTransformer;
36
+ }
37
+ /**
38
+ * @description 注册模型处理器
39
+ * @param {string} dynaModelFilePath 模型路径
40
+ * @param {IModelHandler} handler 执行器
41
+ * @memberof ModelTransformer
42
+ */
43
+ registerHandler(dynaModelFilePath, handler) {
44
+ const handlers = this.handlerMap.get(dynaModelFilePath);
45
+ if (handlers) {
46
+ handlers.push(handler);
47
+ }
48
+ else {
49
+ this.handlerMap.set(dynaModelFilePath, [handler]);
50
+ }
51
+ // 注册新处理器后清除该路径的模型缓存,确保新处理器能生效
52
+ this.modelCacheMap.delete(dynaModelFilePath);
53
+ }
54
+ /**
55
+ * @description 变换模型
56
+ * @param {string} dynaModelFilePath 模型路径
57
+ * @param {IModel} model 原始模型
58
+ * @returns {*} {IModel}
59
+ * @memberof ModelTransformer
60
+ */
61
+ transform(dynaModelFilePath, model) {
62
+ ibiz.log.debug(ibiz.i18n.t('modelHelper.utils.tryGetModel', {
63
+ dynaModelFilePath,
64
+ }));
65
+ if (this.modelCacheMap.has(dynaModelFilePath)) {
66
+ return this.modelCacheMap.get(dynaModelFilePath);
67
+ }
68
+ const handlers = this.handlerMap.get(dynaModelFilePath);
69
+ if (!handlers || handlers.length === 0) {
70
+ this.modelCacheMap.set(dynaModelFilePath, model);
71
+ return model;
72
+ }
73
+ // 按照优先级升序排序,优先级高的后执行
74
+ const sortedHandlers = [...handlers].sort((a, b) => a.priority - b.priority);
75
+ // 模型处理
76
+ let result = model;
77
+ for (const handler of sortedHandlers) {
78
+ try {
79
+ const next = handler.execute(result);
80
+ if (next) {
81
+ result = next;
82
+ }
83
+ else {
84
+ ibiz.log.error(ibiz.i18n.t('modelHelper.utils.transformNoModelData', {
85
+ dynaModelFilePath,
86
+ }));
87
+ // 未返回模型数据时返回传入的原始模型,防止界面异常
88
+ return model;
89
+ }
90
+ }
91
+ catch (error) {
92
+ ibiz.log.error(ibiz.i18n.t('modelHelper.utils.transformException', {
93
+ dynaModelFilePath,
94
+ }), error);
95
+ // 执行异常时返回传入的原始模型,防止界面异常
96
+ return model;
97
+ }
98
+ }
99
+ this.modelCacheMap.set(dynaModelFilePath, result);
100
+ return result;
101
+ }
102
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ibiz-template/model-helper",
3
- "version": "0.7.41-alpha.124",
3
+ "version": "0.7.41-alpha.126",
4
4
  "description": "模型辅助库",
5
5
  "main": "out/index.js",
6
6
  "types": "out/index.d.ts",
@@ -38,7 +38,7 @@
38
38
  "ramda": "^0.29.1"
39
39
  },
40
40
  "devDependencies": {
41
- "@ibiz-template/runtime": "^0.7.41-alpha.124",
41
+ "@ibiz-template/runtime": "^0.7.41-alpha.126",
42
42
  "@types/pluralize": "^0.0.33",
43
43
  "@types/ramda": "^0.29.10"
44
44
  },
@@ -46,5 +46,5 @@
46
46
  "@ibiz-template/runtime": "^0.6.0",
47
47
  "ramda": "^0.29.0"
48
48
  },
49
- "gitHead": "a0501c822177c396a8209d3cee75a9a2c494e46a"
49
+ "gitHead": "1dc811502125ae2ca520bc1ad303a1a8d5b63b66"
50
50
  }
package/src/index.ts CHANGED
@@ -1,7 +1,12 @@
1
1
  import '@ibiz/model-core';
2
2
  import '@ibiz-template/runtime';
3
3
 
4
+ export type { IModelHandler } from './interface';
4
5
  export * from './model-helper';
5
6
  export * from './locale';
6
7
  export { ModelHelper } from './model-helper';
7
- export { MergeSubModelHelper } from './utils';
8
+ export {
9
+ MergeSubModelHelper,
10
+ registerModelHandler,
11
+ ModelHandler,
12
+ } from './utils';
@@ -0,0 +1,19 @@
1
+ /**
2
+ * @description 模型处理器
3
+ * @export
4
+ * @interface IModelHandler
5
+ */
6
+ export interface IModelHandler {
7
+ /**
8
+ * @description 执行模型处理
9
+ *
10
+ * 调用约定:
11
+ * - 入参 `model` 为当前已处理的模型对象,处理器可就地修改该对象,也可返回一个新的模型对象。
12
+ * - 返回值将作为下一个处理器的入参,并最终作为该路径模型的最终结果被缓存。
13
+ * - 若返回 `null`、`undefined` 等假值,将中断当前路径后续处理器的执行,并回退到原始模型。
14
+ * - 处理器抛出异常时同样会中断后续执行,并回退到原始模型。
15
+ * @param {IModel} model 当前待处理的模型对象
16
+ * @returns {IModel} 处理后的模型对象
17
+ */
18
+ execute(model: IModel): IModel;
19
+ }
@@ -0,0 +1 @@
1
+ export type { IModelHandler } from './i-model-handler';
@@ -6,6 +6,12 @@ export const en = {
6
6
  circularRecursive:
7
7
  'A circular recursive reference appears in the computational resource relationship path, triggering the entity:',
8
8
  calculatedEntities: 'Current list of calculated entities. ',
9
+ transformNoModelData:
10
+ '[{dynaModelFilePath}] model transformation exception, no model data returned',
11
+ transformException:
12
+ '[{dynaModelFilePath}] model transformation exception',
13
+ tryGetModel:
14
+ '[Custom extension model data] Try to get the extension model of path [{dynaModelFilePath}]',
9
15
  },
10
16
  noInitialized:
11
17
  '[{appId}] is not initialized, please call initModelUtil method to initialize it first',
@@ -5,6 +5,10 @@ export const zhCn = {
5
5
  maximumTier: '服务路径计算超过最大层级 10',
6
6
  circularRecursive: '计算资源关系路径出现循环递归引用,触发实体:',
7
7
  calculatedEntities: '当前已计算过实体清单: ',
8
+ transformNoModelData: '[{dynaModelFilePath}]模型转化异常,未返回模型数据',
9
+ transformException: '[{dynaModelFilePath}]模型转化异常',
10
+ tryGetModel:
11
+ '[自定义扩展模型数据] 尝试获取路径[{dynaModelFilePath}]的扩展模型',
8
12
  },
9
13
  noInitialized: '[{appId}]未初始化,请先调用 initModelUtil 方法初始化',
10
14
  noFoundEntity: '应用[{appId}]未找到数据实体[{tag}]',