@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.
- package/dist/index.esm.js +152 -13
- package/dist/index.system.min.js +1 -1
- package/out/index.d.ts +2 -1
- package/out/index.d.ts.map +1 -1
- package/out/index.js +1 -1
- package/out/interface/i-model-handler.d.ts +20 -0
- package/out/interface/i-model-handler.d.ts.map +1 -0
- package/out/interface/i-model-handler.js +1 -0
- package/out/interface/index.d.ts +2 -0
- package/out/interface/index.d.ts.map +1 -0
- package/out/interface/index.js +1 -0
- package/out/locale/en/index.d.ts +3 -0
- package/out/locale/en/index.d.ts.map +1 -1
- package/out/locale/en/index.js +3 -0
- package/out/locale/zh-CN/index.d.ts +3 -0
- package/out/locale/zh-CN/index.d.ts.map +1 -1
- package/out/locale/zh-CN/index.js +3 -0
- package/out/model-util.d.ts +3 -2
- package/out/model-util.d.ts.map +1 -1
- package/out/model-util.js +20 -12
- package/out/utils/index.d.ts +3 -0
- package/out/utils/index.d.ts.map +1 -1
- package/out/utils/index.js +3 -0
- package/out/utils/model-transformer/model-handler.d.ts +32 -0
- package/out/utils/model-transformer/model-handler.d.ts.map +1 -0
- package/out/utils/model-transformer/model-handler.js +24 -0
- package/out/utils/model-transformer/model-register.d.ts +9 -0
- package/out/utils/model-transformer/model-register.d.ts.map +1 -0
- package/out/utils/model-transformer/model-register.js +10 -0
- package/out/utils/model-transformer/model-transformer.d.ts +55 -0
- package/out/utils/model-transformer/model-transformer.d.ts.map +1 -0
- package/out/utils/model-transformer/model-transformer.js +102 -0
- package/package.json +3 -3
- package/src/index.ts +6 -1
- package/src/interface/i-model-handler.ts +19 -0
- package/src/interface/index.ts +1 -0
- package/src/locale/en/index.ts +6 -0
- package/src/locale/zh-CN/index.ts +4 -0
- package/src/model-util.ts +28 -12
- package/src/utils/index.ts +3 -0
- package/src/utils/model-transformer/model-handler.ts +36 -0
- package/src/utils/model-transformer/model-register.ts +15 -0
- package/src/utils/model-transformer/model-transformer.ts +124 -0
package/src/model-util.ts
CHANGED
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
import { calcUniqueTag } from '@ibiz/rt-model-api';
|
|
2
2
|
import { IAppDERS } from '@ibiz/model-core';
|
|
3
3
|
import { isEmpty } from 'ramda';
|
|
4
|
-
import {
|
|
4
|
+
import {
|
|
5
|
+
formatPath,
|
|
6
|
+
mergeModel,
|
|
7
|
+
ModelTransformer,
|
|
8
|
+
ServicePathUtil,
|
|
9
|
+
} from './utils';
|
|
5
10
|
import { PSSysApp } from './model/PSSYSAPP';
|
|
6
11
|
|
|
7
12
|
/**
|
|
@@ -388,38 +393,49 @@ export class ModelUtil {
|
|
|
388
393
|
return this.modelCache.get(url)!;
|
|
389
394
|
}
|
|
390
395
|
const model = await this.get(url, params);
|
|
396
|
+
const filledModel = this.deepFillModel(model);
|
|
391
397
|
if (!isParams) {
|
|
392
|
-
this.modelCache.set(url,
|
|
398
|
+
this.modelCache.set(url, filledModel);
|
|
393
399
|
}
|
|
394
|
-
|
|
395
|
-
return model;
|
|
400
|
+
return filledModel;
|
|
396
401
|
}
|
|
397
402
|
|
|
398
403
|
/**
|
|
399
|
-
*
|
|
404
|
+
* 递归填充模型,包括填充模型appId、变换模型
|
|
400
405
|
*
|
|
401
406
|
* @author chitanda
|
|
402
407
|
* @date 2023-08-21 10:08:41
|
|
403
408
|
* @protected
|
|
404
409
|
* @param {IModel} model
|
|
410
|
+
* @return {*} {IModel} 返回处理后的模型,若处理器返回新对象则替换原引用
|
|
405
411
|
*/
|
|
406
|
-
protected
|
|
407
|
-
|
|
408
|
-
|
|
412
|
+
protected deepFillModel(model: IModel): IModel {
|
|
413
|
+
// 变换模型
|
|
414
|
+
let result = model;
|
|
415
|
+
if (model.dynaModelFilePath) {
|
|
416
|
+
result = ModelTransformer.getInstance().transform(
|
|
417
|
+
model.dynaModelFilePath,
|
|
418
|
+
model,
|
|
419
|
+
);
|
|
420
|
+
}
|
|
421
|
+
// 填充模型appId
|
|
422
|
+
result.appId = this.appId;
|
|
423
|
+
const keys = Object.keys(result);
|
|
409
424
|
keys.forEach(key => {
|
|
410
|
-
const value =
|
|
425
|
+
const value = result[key];
|
|
411
426
|
if (value && typeof value === 'object') {
|
|
412
427
|
if (Array.isArray(value)) {
|
|
413
|
-
value.forEach(item => {
|
|
428
|
+
value.forEach((item, index) => {
|
|
414
429
|
if (item && typeof item === 'object') {
|
|
415
|
-
this.
|
|
430
|
+
value[index] = this.deepFillModel(item);
|
|
416
431
|
}
|
|
417
432
|
});
|
|
418
433
|
} else {
|
|
419
|
-
this.
|
|
434
|
+
result[key] = this.deepFillModel(value);
|
|
420
435
|
}
|
|
421
436
|
}
|
|
422
437
|
});
|
|
438
|
+
return result;
|
|
423
439
|
}
|
|
424
440
|
|
|
425
441
|
/**
|
package/src/utils/index.ts
CHANGED
|
@@ -7,3 +7,6 @@ export {
|
|
|
7
7
|
ServicePathUtil,
|
|
8
8
|
} from './service-path-util/service-path-util';
|
|
9
9
|
export { MergeSubModelHelper } from './merge-model/merge-model-helper';
|
|
10
|
+
export { ModelHandler } from './model-transformer/model-handler';
|
|
11
|
+
export { ModelTransformer } from './model-transformer/model-transformer';
|
|
12
|
+
export { registerModelHandler } from './model-transformer/model-register';
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { IModelHandler } from '../../interface';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @description 模型变换处理器
|
|
5
|
+
* @export
|
|
6
|
+
* @abstract
|
|
7
|
+
* @class ModelHandler
|
|
8
|
+
* @implements {IModelHandler}
|
|
9
|
+
*/
|
|
10
|
+
export abstract class ModelHandler implements IModelHandler {
|
|
11
|
+
/**
|
|
12
|
+
* @description 优先级,默认值为1
|
|
13
|
+
* @public
|
|
14
|
+
* @type {number}
|
|
15
|
+
* @memberof ModelHandler
|
|
16
|
+
*/
|
|
17
|
+
public priority: number = 1;
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Creates an instance of ModelHandler.
|
|
21
|
+
* @param {number} [priority=1] 优先级,数值越小越先执行
|
|
22
|
+
* @memberof ModelHandler
|
|
23
|
+
*/
|
|
24
|
+
constructor(priority: number = 1) {
|
|
25
|
+
this.priority = priority;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* @description 执行器
|
|
30
|
+
* @abstract
|
|
31
|
+
* @param {IModel} model
|
|
32
|
+
* @returns {*} {IModel}
|
|
33
|
+
* @memberof ModelHandler
|
|
34
|
+
*/
|
|
35
|
+
abstract execute(model: IModel): IModel;
|
|
36
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { ModelHandler } from './model-handler';
|
|
2
|
+
import { ModelTransformer } from './model-transformer';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* @description 注册模型处理器
|
|
6
|
+
* @export
|
|
7
|
+
* @param {string} dynaModelFilePath 模型路径
|
|
8
|
+
* @param {ModelHandler} handler 模型处理器
|
|
9
|
+
*/
|
|
10
|
+
export function registerModelHandler(
|
|
11
|
+
dynaModelFilePath: string,
|
|
12
|
+
handler: ModelHandler,
|
|
13
|
+
): void {
|
|
14
|
+
ModelTransformer.getInstance().registerHandler(dynaModelFilePath, handler);
|
|
15
|
+
}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { ModelHandler } from './model-handler';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @description 模型变换器
|
|
5
|
+
* @author tony001
|
|
6
|
+
* @date 2026-08-13 09:08:03
|
|
7
|
+
* @export
|
|
8
|
+
* @class ModelTransformer
|
|
9
|
+
*/
|
|
10
|
+
export class ModelTransformer {
|
|
11
|
+
/**
|
|
12
|
+
* @description 单例变量声明
|
|
13
|
+
* @private
|
|
14
|
+
* @static
|
|
15
|
+
* @type {ModelTransformer}
|
|
16
|
+
* @memberof ModelTransformer
|
|
17
|
+
*/
|
|
18
|
+
private static modelTransformer: ModelTransformer;
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* @description 获取 ModelTransformer 单例对象
|
|
22
|
+
* @static
|
|
23
|
+
* @returns {*} {ModelTransformer}
|
|
24
|
+
* @memberof ModelTransformer
|
|
25
|
+
*/
|
|
26
|
+
public static getInstance(): ModelTransformer {
|
|
27
|
+
if (!this.modelTransformer) {
|
|
28
|
+
this.modelTransformer = new ModelTransformer();
|
|
29
|
+
}
|
|
30
|
+
return this.modelTransformer;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* @description 模型处理器Map
|
|
35
|
+
* @private
|
|
36
|
+
* @type {Map<string, ModelHandler[]>}
|
|
37
|
+
* @memberof ModelTransformer
|
|
38
|
+
*/
|
|
39
|
+
private handlerMap: Map<string, ModelHandler[]> = new Map();
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* @description 模型缓存Map
|
|
43
|
+
* @private
|
|
44
|
+
* @type {Map<string, IModel>}
|
|
45
|
+
* @memberof ModelTransformer
|
|
46
|
+
*/
|
|
47
|
+
private modelCacheMap: Map<string, IModel> = new Map();
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* @description 注册模型处理器
|
|
51
|
+
* @param {string} dynaModelFilePath 模型路径
|
|
52
|
+
* @param {IModelHandler} handler 执行器
|
|
53
|
+
* @memberof ModelTransformer
|
|
54
|
+
*/
|
|
55
|
+
public registerHandler(
|
|
56
|
+
dynaModelFilePath: string,
|
|
57
|
+
handler: ModelHandler,
|
|
58
|
+
): void {
|
|
59
|
+
const handlers = this.handlerMap.get(dynaModelFilePath);
|
|
60
|
+
if (handlers) {
|
|
61
|
+
handlers.push(handler);
|
|
62
|
+
} else {
|
|
63
|
+
this.handlerMap.set(dynaModelFilePath, [handler]);
|
|
64
|
+
}
|
|
65
|
+
// 注册新处理器后清除该路径的模型缓存,确保新处理器能生效
|
|
66
|
+
this.modelCacheMap.delete(dynaModelFilePath);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* @description 变换模型
|
|
71
|
+
* @param {string} dynaModelFilePath 模型路径
|
|
72
|
+
* @param {IModel} model 原始模型
|
|
73
|
+
* @returns {*} {IModel}
|
|
74
|
+
* @memberof ModelTransformer
|
|
75
|
+
*/
|
|
76
|
+
public transform(dynaModelFilePath: string, model: IModel): IModel {
|
|
77
|
+
ibiz.log.debug(
|
|
78
|
+
ibiz.i18n.t('modelHelper.utils.tryGetModel', {
|
|
79
|
+
dynaModelFilePath,
|
|
80
|
+
}),
|
|
81
|
+
);
|
|
82
|
+
if (this.modelCacheMap.has(dynaModelFilePath)) {
|
|
83
|
+
return this.modelCacheMap.get(dynaModelFilePath)!;
|
|
84
|
+
}
|
|
85
|
+
const handlers = this.handlerMap.get(dynaModelFilePath);
|
|
86
|
+
if (!handlers || handlers.length === 0) {
|
|
87
|
+
this.modelCacheMap.set(dynaModelFilePath, model);
|
|
88
|
+
return model;
|
|
89
|
+
}
|
|
90
|
+
// 按照优先级升序排序,优先级高的后执行
|
|
91
|
+
const sortedHandlers = [...handlers].sort(
|
|
92
|
+
(a: ModelHandler, b: ModelHandler) => a.priority - b.priority,
|
|
93
|
+
);
|
|
94
|
+
// 模型处理
|
|
95
|
+
let result = model;
|
|
96
|
+
for (const handler of sortedHandlers) {
|
|
97
|
+
try {
|
|
98
|
+
const next = handler.execute(result);
|
|
99
|
+
if (next) {
|
|
100
|
+
result = next;
|
|
101
|
+
} else {
|
|
102
|
+
ibiz.log.error(
|
|
103
|
+
ibiz.i18n.t('modelHelper.utils.transformNoModelData', {
|
|
104
|
+
dynaModelFilePath,
|
|
105
|
+
}),
|
|
106
|
+
);
|
|
107
|
+
// 未返回模型数据时返回传入的原始模型,防止界面异常
|
|
108
|
+
return model;
|
|
109
|
+
}
|
|
110
|
+
} catch (error) {
|
|
111
|
+
ibiz.log.error(
|
|
112
|
+
ibiz.i18n.t('modelHelper.utils.transformException', {
|
|
113
|
+
dynaModelFilePath,
|
|
114
|
+
}),
|
|
115
|
+
error,
|
|
116
|
+
);
|
|
117
|
+
// 执行异常时返回传入的原始模型,防止界面异常
|
|
118
|
+
return model;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
this.modelCacheMap.set(dynaModelFilePath, result);
|
|
122
|
+
return result;
|
|
123
|
+
}
|
|
124
|
+
}
|