@hadss/turbo-trans-json-plugin 1.0.0-rc.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 (195) hide show
  1. package/LICENSE +177 -0
  2. package/README.md +253 -0
  3. package/dist/core/Types.d.ts +196 -0
  4. package/dist/core/Types.js +47 -0
  5. package/dist/core/analyzers/ClassAnalyzer.d.ts +23 -0
  6. package/dist/core/analyzers/ClassAnalyzer.js +480 -0
  7. package/dist/core/analyzers/CustomTypeAnalyzer.d.ts +21 -0
  8. package/dist/core/analyzers/CustomTypeAnalyzer.js +243 -0
  9. package/dist/core/analyzers/SendableMergeChecker.d.ts +9 -0
  10. package/dist/core/analyzers/SendableMergeChecker.js +100 -0
  11. package/dist/core/analyzers/SendableMergeabilityRegistry.d.ts +7 -0
  12. package/dist/core/analyzers/SendableMergeabilityRegistry.js +23 -0
  13. package/dist/core/constants/DecoratorConstants.d.ts +7 -0
  14. package/dist/core/constants/DecoratorConstants.js +13 -0
  15. package/dist/core/constants/PathConstants.d.ts +6 -0
  16. package/dist/core/constants/PathConstants.js +10 -0
  17. package/dist/core/constants/StringConstants.d.ts +83 -0
  18. package/dist/core/constants/StringConstants.js +87 -0
  19. package/dist/core/constants/index.d.ts +3 -0
  20. package/dist/core/constants/index.js +19 -0
  21. package/dist/core/handlers/BaseTypeHandler.d.ts +23 -0
  22. package/dist/core/handlers/BaseTypeHandler.js +57 -0
  23. package/dist/core/handlers/CustomClassHandler.d.ts +21 -0
  24. package/dist/core/handlers/CustomClassHandler.js +191 -0
  25. package/dist/core/handlers/DateHandler.d.ts +2 -0
  26. package/dist/core/handlers/DateHandler.js +60 -0
  27. package/dist/core/handlers/DecimalHandler.d.ts +2 -0
  28. package/dist/core/handlers/DecimalHandler.js +60 -0
  29. package/dist/core/handlers/EnumHandler.d.ts +2 -0
  30. package/dist/core/handlers/EnumHandler.js +89 -0
  31. package/dist/core/handlers/GenericContainerHandler.d.ts +2 -0
  32. package/dist/core/handlers/GenericContainerHandler.js +440 -0
  33. package/dist/core/handlers/GenericHandler.d.ts +18 -0
  34. package/dist/core/handlers/GenericHandler.js +92 -0
  35. package/dist/core/handlers/HandlerBootstrap.d.ts +2 -0
  36. package/dist/core/handlers/HandlerBootstrap.js +28 -0
  37. package/dist/core/handlers/ITypeHandler.d.ts +23 -0
  38. package/dist/core/handlers/ITypeHandler.js +8 -0
  39. package/dist/core/handlers/PrimitiveHandler.d.ts +2 -0
  40. package/dist/core/handlers/PrimitiveHandler.js +127 -0
  41. package/dist/core/handlers/TupleHandler.d.ts +2 -0
  42. package/dist/core/handlers/TupleHandler.js +98 -0
  43. package/dist/core/handlers/TypeHandlerRegistry.d.ts +20 -0
  44. package/dist/core/handlers/TypeHandlerRegistry.js +113 -0
  45. package/dist/core/handlers/UnionTypeHandler.d.ts +2 -0
  46. package/dist/core/handlers/UnionTypeHandler.js +263 -0
  47. package/dist/core/handlers/index.d.ts +2 -0
  48. package/dist/core/handlers/index.js +5 -0
  49. package/dist/core/import-rewrite/services/BuildProfileUpdater.d.ts +8 -0
  50. package/dist/core/import-rewrite/services/BuildProfileUpdater.js +92 -0
  51. package/dist/core/import-rewrite/services/ImportRewriteService.d.ts +9 -0
  52. package/dist/core/import-rewrite/services/ImportRewriteService.js +61 -0
  53. package/dist/core/import-rewrite/services/ImportTransformService.d.ts +15 -0
  54. package/dist/core/import-rewrite/services/ImportTransformService.js +109 -0
  55. package/dist/core/import-rewrite/strategies/ImportScanStrategy.d.ts +17 -0
  56. package/dist/core/import-rewrite/strategies/ImportScanStrategy.js +137 -0
  57. package/dist/core/import-rewrite/types/ImportRewriteTypes.d.ts +17 -0
  58. package/dist/core/import-rewrite/types/ImportRewriteTypes.js +2 -0
  59. package/dist/core/index.d.ts +9 -0
  60. package/dist/core/index.js +27 -0
  61. package/dist/core/interfaces/ITask.d.ts +7 -0
  62. package/dist/core/interfaces/ITask.js +2 -0
  63. package/dist/core/interfaces/ITaskContext.d.ts +11 -0
  64. package/dist/core/interfaces/ITaskContext.js +2 -0
  65. package/dist/core/interfaces/index.d.ts +2 -0
  66. package/dist/core/interfaces/index.js +2 -0
  67. package/dist/core/logger/Logger.d.ts +13 -0
  68. package/dist/core/logger/Logger.js +78 -0
  69. package/dist/core/services/CodeAnalysisService.d.ts +7 -0
  70. package/dist/core/services/CodeAnalysisService.js +43 -0
  71. package/dist/core/services/CodeGenerationEngine.d.ts +12 -0
  72. package/dist/core/services/CodeGenerationEngine.js +102 -0
  73. package/dist/core/services/CodeGenerationService/CodeGenerationService.d.ts +13 -0
  74. package/dist/core/services/CodeGenerationService/CodeGenerationService.js +110 -0
  75. package/dist/core/services/CodeGenerationService/generators/MergedSendableClassGenerator.d.ts +13 -0
  76. package/dist/core/services/CodeGenerationService/generators/MergedSendableClassGenerator.js +119 -0
  77. package/dist/core/services/CodeGenerationService/generators/OriginalClassGenerator.d.ts +21 -0
  78. package/dist/core/services/CodeGenerationService/generators/OriginalClassGenerator.js +224 -0
  79. package/dist/core/services/CodeGenerationService/generators/SendableClassGenerator.d.ts +24 -0
  80. package/dist/core/services/CodeGenerationService/generators/SendableClassGenerator.js +307 -0
  81. package/dist/core/services/CodeGenerationService/generators/SerializerGenerator.d.ts +28 -0
  82. package/dist/core/services/CodeGenerationService/generators/SerializerGenerator.js +259 -0
  83. package/dist/core/services/CodeGenerationService/generators/TempSerializerGenerator.d.ts +19 -0
  84. package/dist/core/services/CodeGenerationService/generators/TempSerializerGenerator.js +178 -0
  85. package/dist/core/services/CodeGenerationService/index.d.ts +1 -0
  86. package/dist/core/services/CodeGenerationService/index.js +5 -0
  87. package/dist/core/services/CodeGenerationService/shared/ImportManager.d.ts +27 -0
  88. package/dist/core/services/CodeGenerationService/shared/ImportManager.js +127 -0
  89. package/dist/core/template/HandlebarsTemplateEngine.d.ts +26 -0
  90. package/dist/core/template/HandlebarsTemplateEngine.js +226 -0
  91. package/dist/core/utils/ConfigManager.d.ts +10 -0
  92. package/dist/core/utils/ConfigManager.js +32 -0
  93. package/dist/core/utils/CustomError.d.ts +30 -0
  94. package/dist/core/utils/CustomError.js +37 -0
  95. package/dist/core/utils/DeepCopyUtil.d.ts +15 -0
  96. package/dist/core/utils/DeepCopyUtil.js +138 -0
  97. package/dist/core/utils/GenericTypeSubstitutionUtil.d.ts +9 -0
  98. package/dist/core/utils/GenericTypeSubstitutionUtil.js +68 -0
  99. package/dist/core/utils/SerializationPathUtil.d.ts +18 -0
  100. package/dist/core/utils/SerializationPathUtil.js +107 -0
  101. package/dist/core/utils/TsMorphUtil.d.ts +8 -0
  102. package/dist/core/utils/TsMorphUtil.js +34 -0
  103. package/dist/index.d.ts +4 -0
  104. package/dist/index.js +57 -0
  105. package/dist/json-plugin/JSONExecuteController.d.ts +13 -0
  106. package/dist/json-plugin/JSONExecuteController.js +103 -0
  107. package/dist/json-plugin/constants/TaskConstants.d.ts +7 -0
  108. package/dist/json-plugin/constants/TaskConstants.js +11 -0
  109. package/dist/json-plugin/interfaces/IModuleContext.d.ts +10 -0
  110. package/dist/json-plugin/interfaces/IModuleContext.js +2 -0
  111. package/dist/json-plugin/interfaces/ITargetContext.d.ts +8 -0
  112. package/dist/json-plugin/interfaces/ITargetContext.js +2 -0
  113. package/dist/json-plugin/interfaces/impl/ModuleContext.d.ts +12 -0
  114. package/dist/json-plugin/interfaces/impl/ModuleContext.js +24 -0
  115. package/dist/json-plugin/interfaces/impl/TargetContext.d.ts +23 -0
  116. package/dist/json-plugin/interfaces/impl/TargetContext.js +113 -0
  117. package/dist/json-plugin/tasks/BaseTask.d.ts +14 -0
  118. package/dist/json-plugin/tasks/BaseTask.js +53 -0
  119. package/dist/json-plugin/tasks/CleanTask.d.ts +8 -0
  120. package/dist/json-plugin/tasks/CleanTask.js +25 -0
  121. package/dist/json-plugin/tasks/CodeProcessingTask.d.ts +8 -0
  122. package/dist/json-plugin/tasks/CodeProcessingTask.js +26 -0
  123. package/dist/json-plugin/tasks/SyncTask.d.ts +8 -0
  124. package/dist/json-plugin/tasks/SyncTask.js +21 -0
  125. package/dist/json-plugin/tasks/WatchTask.d.ts +11 -0
  126. package/dist/json-plugin/tasks/WatchTask.js +102 -0
  127. package/package.json +46 -0
  128. package/src/core/Types.ts +356 -0
  129. package/src/core/analyzers/ClassAnalyzer.ts +824 -0
  130. package/src/core/analyzers/CustomTypeAnalyzer.ts +337 -0
  131. package/src/core/analyzers/SendableMergeChecker.ts +195 -0
  132. package/src/core/analyzers/SendableMergeabilityRegistry.ts +72 -0
  133. package/src/core/constants/DecoratorConstants.ts +27 -0
  134. package/src/core/constants/PathConstants.ts +31 -0
  135. package/src/core/constants/StringConstants.ts +152 -0
  136. package/src/core/constants/index.ts +21 -0
  137. package/src/core/handlers/BaseTypeHandler.ts +121 -0
  138. package/src/core/handlers/CustomClassHandler.ts +278 -0
  139. package/src/core/handlers/DateHandler.ts +75 -0
  140. package/src/core/handlers/DecimalHandler.ts +75 -0
  141. package/src/core/handlers/EnumHandler.ts +142 -0
  142. package/src/core/handlers/GenericContainerHandler.ts +621 -0
  143. package/src/core/handlers/GenericHandler.ts +130 -0
  144. package/src/core/handlers/HandlerBootstrap.ts +64 -0
  145. package/src/core/handlers/ITypeHandler.ts +133 -0
  146. package/src/core/handlers/PrimitiveHandler.ts +159 -0
  147. package/src/core/handlers/TupleHandler.ts +145 -0
  148. package/src/core/handlers/TypeHandlerRegistry.ts +236 -0
  149. package/src/core/handlers/UnionTypeHandler.ts +400 -0
  150. package/src/core/handlers/index.ts +18 -0
  151. package/src/core/import-rewrite/services/BuildProfileUpdater.ts +145 -0
  152. package/src/core/import-rewrite/services/ImportRewriteService.ts +129 -0
  153. package/src/core/import-rewrite/services/ImportTransformService.ts +200 -0
  154. package/src/core/import-rewrite/strategies/ImportScanStrategy.ts +303 -0
  155. package/src/core/import-rewrite/types/ImportRewriteTypes.ts +100 -0
  156. package/src/core/index.ts +31 -0
  157. package/src/core/interfaces/ITask.ts +23 -0
  158. package/src/core/interfaces/ITaskContext.ts +94 -0
  159. package/src/core/interfaces/index.ts +17 -0
  160. package/src/core/logger/Logger.ts +149 -0
  161. package/src/core/services/CodeAnalysisService.ts +67 -0
  162. package/src/core/services/CodeGenerationEngine.ts +181 -0
  163. package/src/core/services/CodeGenerationService/CodeGenerationService.ts +159 -0
  164. package/src/core/services/CodeGenerationService/generators/MergedSendableClassGenerator.ts +189 -0
  165. package/src/core/services/CodeGenerationService/generators/OriginalClassGenerator.ts +314 -0
  166. package/src/core/services/CodeGenerationService/generators/SendableClassGenerator.ts +421 -0
  167. package/src/core/services/CodeGenerationService/generators/SerializerGenerator.ts +392 -0
  168. package/src/core/services/CodeGenerationService/generators/TempSerializerGenerator.ts +277 -0
  169. package/src/core/services/CodeGenerationService/index.ts +16 -0
  170. package/src/core/services/CodeGenerationService/shared/ImportManager.ts +191 -0
  171. package/src/core/template/HandlebarsTemplateEngine.ts +282 -0
  172. package/src/core/utils/ConfigManager.ts +49 -0
  173. package/src/core/utils/CustomError.ts +51 -0
  174. package/src/core/utils/DeepCopyUtil.ts +185 -0
  175. package/src/core/utils/GenericTypeSubstitutionUtil.ts +136 -0
  176. package/src/core/utils/SerializationPathUtil.ts +142 -0
  177. package/src/core/utils/TsMorphUtil.ts +50 -0
  178. package/src/index.ts +81 -0
  179. package/src/json-plugin/JSONExecuteController.ts +134 -0
  180. package/src/json-plugin/constants/TaskConstants.ts +22 -0
  181. package/src/json-plugin/interfaces/IModuleContext.ts +27 -0
  182. package/src/json-plugin/interfaces/ITargetContext.ts +25 -0
  183. package/src/json-plugin/interfaces/impl/ModuleContext.ts +45 -0
  184. package/src/json-plugin/interfaces/impl/TargetContext.ts +196 -0
  185. package/src/json-plugin/tasks/BaseTask.ts +94 -0
  186. package/src/json-plugin/tasks/CleanTask.ts +36 -0
  187. package/src/json-plugin/tasks/CodeProcessingTask.ts +41 -0
  188. package/src/json-plugin/tasks/SyncTask.ts +33 -0
  189. package/src/json-plugin/tasks/WatchTask.ts +99 -0
  190. package/template/SerializerPerformanceTemplate.hbs +35 -0
  191. package/template/SerializerRegisterTemplate.hbs +10 -0
  192. package/template/SerializerStrictTemplate.hbs +89 -0
  193. package/template/SerializerTemplate.hbs +176 -0
  194. package/tsconfig.json +17 -0
  195. package/tslint.json +3 -0
@@ -0,0 +1,75 @@
1
+ /*
2
+ * Copyright (c) 2025 Huawei Device Co., Ltd.
3
+ * Licensed under the Apache License, Version 2.0 (the "License");
4
+ * you may not use this file except in compliance with the License.
5
+ * You may obtain a copy of the License at
6
+ *
7
+ * http://www.apache.org/licenses/LICENSE-2.0
8
+ *
9
+ * Unless required by applicable law or agreed to in writing, software
10
+ * distributed under the License is distributed on an "AS IS" BASIS,
11
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ * See the License for the specific language governing permissions and
13
+ * limitations under the License.
14
+ */
15
+
16
+ import { SyntaxKind, TypeNode, TypeReferenceNode } from 'ts-morph';
17
+ import { PropertyKind, TypeStructure, SerializerMetadata } from '../Types';
18
+ import { BaseTypeHandler } from './BaseTypeHandler';
19
+ import { TypeContext, ConversionDirection, ITypeHandler } from './ITypeHandler';
20
+
21
+ class DecimalHandler extends BaseTypeHandler implements ITypeHandler {
22
+ readonly name: string = 'DecimalHandler';
23
+ kind: PropertyKind = PropertyKind.Decimal;
24
+ priority: number = 95;
25
+ matches(typeNode: TypeNode, context: TypeContext): boolean {
26
+ if (typeNode.getKind() === SyntaxKind.TypeReference) {
27
+ const typeRef = typeNode as TypeReferenceNode;
28
+ const refName = typeRef.getTypeName().getText();
29
+ return refName === 'Decimal';
30
+ }
31
+ return false;
32
+ }
33
+ parse(typeNode: TypeNode, context: TypeContext): TypeStructure {
34
+ return {
35
+ kind: PropertyKind.Decimal,
36
+ depth: 0,
37
+ sourceText: typeNode.getText(),
38
+ args: [],
39
+ dependencies: []
40
+ };
41
+ }
42
+ getSerializerMetadata(structure: TypeStructure, withParam?: string): SerializerMetadata {
43
+ return {
44
+ name: 'DecimalSerializer',
45
+ typeDeclaration: 'DecimalSerializer',
46
+ instantiationTemplate: 'DecimalSerializer.INSTANCE',
47
+ encodeMethod: 'encodeSerializableElement',
48
+ decodeMethod: 'deserialize',
49
+ decoderType: 'Decimal | undefined',
50
+ needsTypeAssertion: false
51
+ };
52
+ }
53
+ generateInstantiation(structure: TypeStructure): string {
54
+ return 'DecimalSerializer.INSTANCE';
55
+ }
56
+ generateTypeDeclaration(structure: TypeStructure): string {
57
+ return 'DecimalSerializer';
58
+ }
59
+ generateTypeKey(structure: TypeStructure): string {
60
+ return structure.sourceText;
61
+ }
62
+ generateSendableTypeDeclaration(structure: TypeStructure): string {
63
+ return structure.sourceText;
64
+ }
65
+ generatePropertyConversion(structure: TypeStructure, sourceValue: string, direction: ConversionDirection): string {
66
+ return sourceValue;
67
+ }
68
+ }
69
+
70
+ /**
71
+ * 工厂函数
72
+ */
73
+ export function createDecimalHandler(): ITypeHandler {
74
+ return new DecimalHandler();
75
+ }
@@ -0,0 +1,142 @@
1
+ /*
2
+ * Copyright (c) 2025 Huawei Device Co., Ltd.
3
+ * Licensed under the Apache License, Version 2.0 (the "License");
4
+ * you may not use this file except in compliance with the License.
5
+ * You may obtain a copy of the License at
6
+ *
7
+ * http://www.apache.org/licenses/LICENSE-2.0
8
+ *
9
+ * Unless required by applicable law or agreed to in writing, software
10
+ * distributed under the License is distributed on an "AS IS" BASIS,
11
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ * See the License for the specific language governing permissions and
13
+ * limitations under the License.
14
+ */
15
+
16
+ import { TypeNode, SyntaxKind, TypeReferenceNode } from 'ts-morph';
17
+ import { PropertyKind, TypeStructure, SerializerMetadata, TypeKind, EnumDetails } from '../Types';
18
+ import { CustomTypeAnalyzer } from '../analyzers/CustomTypeAnalyzer';
19
+ import { BaseTypeHandler } from './BaseTypeHandler';
20
+ import { ITypeHandler } from './ITypeHandler';
21
+ import { CustomError, ErrorCodes } from '../utils/CustomError';
22
+
23
+ class EnumHandler extends BaseTypeHandler implements ITypeHandler {
24
+ readonly name = 'EnumHandler';
25
+ readonly kind = PropertyKind.ENUM;
26
+ readonly priority = 95; // 高优先级,优先于自定义类Handler
27
+
28
+ // ==================== 阶段1: 类型识别 ====================
29
+
30
+ matches(typeNode: TypeNode): boolean {
31
+ // 必须是TypeReference
32
+ if (typeNode.getKind() !== SyntaxKind.TypeReference) {
33
+ return false;
34
+ }
35
+
36
+ // 查找类型定义,判断是否为枚举
37
+ const typeRef = typeNode as TypeReferenceNode;
38
+ const customTypeName = typeRef.getTypeName().getText();
39
+ const typeDependency = CustomTypeAnalyzer.getInstance()
40
+ .findDefinition(customTypeName, typeRef.getSourceFile());
41
+
42
+ return typeDependency?.typeKind === TypeKind.ENUM;
43
+ }
44
+
45
+ // ==================== 阶段2: 类型解析 ====================
46
+
47
+ parse(typeNode: TypeNode): TypeStructure {
48
+ const typeRef = typeNode as TypeReferenceNode;
49
+ const enumName = typeRef.getTypeName().getText();
50
+
51
+ // 查找枚举定义
52
+ const typeDependency = CustomTypeAnalyzer.getInstance()
53
+ .findDefinition(enumName, typeRef.getSourceFile());
54
+
55
+ if (!typeDependency || typeDependency.typeKind !== TypeKind.ENUM) {
56
+ throw new CustomError(`Not an enum type: ${enumName}`, ErrorCodes.IS_NOT_ENUM);
57
+ }
58
+
59
+ const enumDetails = typeDependency.details as EnumDetails;
60
+
61
+ return {
62
+ kind: PropertyKind.ENUM,
63
+ depth: 0,
64
+ sourceText: enumName,
65
+ args: [],
66
+ enumDetails: enumDetails,
67
+ dependencies: [typeDependency]
68
+ };
69
+ }
70
+
71
+ // ==================== 阶段3: 序列化器配置 ====================
72
+
73
+ getSerializerMetadata(structure: TypeStructure, withParam?: string): SerializerMetadata {
74
+ if (!structure.enumDetails) {
75
+ throw new CustomError('EnumHandler: missing enumDetails in structure', ErrorCodes.ENUM_STRUCTURE_NOT_FOUND);
76
+ }
77
+
78
+ const enumName = structure.sourceText;
79
+ const valueType = structure.enumDetails.valueType;
80
+ const defaultInstantiation = this.generateInstantiation(structure);
81
+
82
+ return {
83
+ name: 'EnumSerializer',
84
+ typeDeclaration: this.generateTypeDeclaration(structure),
85
+ instantiationTemplate: this.applyWithParam(withParam, defaultInstantiation, structure),
86
+ encodeMethod: 'encodeSerializableElement',
87
+ decodeMethod: 'deserialize',
88
+ decoderType: `${enumName} | undefined`,
89
+ needsTypeAssertion: valueType === 'string'
90
+ };
91
+ }
92
+
93
+ // ==================== 阶段4: 代码生成 ====================
94
+
95
+ generateInstantiation(structure: TypeStructure): string {
96
+ if (!structure.enumDetails) {
97
+ throw new CustomError('EnumHandler: missing enumDetails for instantiation', ErrorCodes.ENUM_STRUCTURE_NOT_FOUND);
98
+ }
99
+
100
+ const enumType = structure.enumDetails.valueType;
101
+ const enumName = `'${structure.sourceText}'`;
102
+ const enumMembers = structure.enumDetails.members.map(member =>
103
+ `['${member.name}', ${member.literalValue}]`
104
+ ).join(', ');
105
+
106
+ return `new EnumSerializer<${enumType}>(${enumName}, [${enumMembers}])`;
107
+ }
108
+
109
+ generateTypeDeclaration(structure: TypeStructure): string {
110
+ if (!structure.enumDetails) {
111
+ throw new CustomError('EnumHandler: missing enumDetails for type declaration', ErrorCodes.ENUM_STRUCTURE_NOT_FOUND);
112
+ }
113
+
114
+ const valueType = structure.enumDetails.valueType;
115
+ return `EnumSerializer<${valueType}>`;
116
+ }
117
+
118
+ generateTypeKey(structure: TypeStructure): string {
119
+ // 枚举类型的typeKey就是枚举名称本身
120
+ return structure.sourceText;
121
+ }
122
+
123
+ // ==================== Sendable转换 ====================
124
+
125
+ generateSendableTypeDeclaration(structure: TypeStructure): string {
126
+ // 枚举类型本身就是Sendable兼容的,直接返回枚举名称
127
+ return structure.sourceText;
128
+ }
129
+
130
+ generatePropertyConversion(_structure: TypeStructure, sourceValue: string): string {
131
+ // 枚举值在两个方向都直接传递,不需要转换
132
+ return sourceValue;
133
+ }
134
+ }
135
+
136
+ /**
137
+ * 工厂函数:创建枚举Handler
138
+ * @returns EnumHandler实例
139
+ */
140
+ export function createEnumHandler(): ITypeHandler {
141
+ return new EnumHandler();
142
+ }