@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,356 @@
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 { ClassDeclaration, InterfaceDeclaration, TypeNode } from 'ts-morph';
17
+
18
+ // ============= 基础枚举类型 =============
19
+
20
+ export enum PropertyKind {
21
+ // ===== 基础类型(对应PrimitiveKind) =====
22
+ STRING = 'string', // StringSerializer.INSTANCE
23
+ NUMBER = 'number', // NumberSerializer.INSTANCE
24
+ BOOLEAN = 'boolean', // BooleanSerializer.INSTANCE
25
+ BIGINT = 'bigint', // BigintSerializer.INSTANCE
26
+
27
+ // ===== 特殊原始类型 =====
28
+ NULL = 'null', // NullSerializer.INSTANCE
29
+ UNDEFINED = 'undefined', // UndefinedSerializer.INSTANCE
30
+
31
+ // ===== 集合类型(泛型构造器) =====
32
+ ARRAY = 'array', // new ArraySerializer<T>(elementSerializer)
33
+ MAP = 'map', // new MapSerializer<K,V>(keySerializer, valueSerializer)
34
+ SET = 'set', // new SetSerializer<T>(elementSerializer)
35
+ RECORD = 'record', // new RecordSerializer<K,V>(keySerializer, valueSerializer)
36
+ COLLECTIONS_ARRAY = 'collections.Array', // new CollectionsArraySerializer<T>(elementSerializer)
37
+ COLLECTIONS_SET = 'collections.Set', // new CollectionsSetSerializer<T>(elementSerializer)
38
+ COLLECTIONS_MAP = 'collections.Map', // new CollectionsMapSerializer<K,V>(keySerializer, valueSerializer)
39
+
40
+ // ===== 复杂对象类型 =====
41
+ OBJECT = 'object', // ObjectSerializer.INSTANCE
42
+ GENERIC = 'generic', // Serializer<T>
43
+
44
+ // ===== 高级类型 =====
45
+ UNION = 'union', // new UnionTypeSerializer<string | number>([string, number])
46
+ OPTIONAL = 'optional', // new OptionalSerializer<T>(serializer) - for T | undefined
47
+ NULLABLE = 'nullable', // new NullableSerializer<T>(serializer) - for T | null
48
+ OPTIONAL_NULLABLE = 'optionalNullable', // new OptionalNullableSerializer<T>(serializer) - for T | null | undefined
49
+ ENUM = 'enum', // new EnumSerializer<number>('Habit', [['HAVE_FUN', 0], ['READING', 1], ['SPORT', 2]])
50
+ TUPLE = 'tuple', // new TupleSerializer<[string, number]>([string, number])
51
+ ARRAY_LIST = 'arrayList', // new ArrayListSerializer<T>(elementSerializer)
52
+ HASH_MAP = 'hashMap', // new HashMapSerializer<K,V>(keySerializer, valueSerializer)
53
+ HASH_SET = 'hashSet', // new HashSetSerializer<T>(elementSerializer)
54
+ LIST = 'list', // new ListSerializer<T>(elementSerializer)
55
+ Date = 'date', // new DateSerializer()
56
+ Decimal = 'decimal', // new DecimalSerializer()
57
+ INTERFACE = 'interface', // new AnySerializer<T>(interfaceDeclaration)
58
+
59
+ // ===== 未知类型(需要 @Transient) =====
60
+ UNKNOWN = 'unknown', // 暂不支持的类型(如 Date, Function, Symbol 等),必须标记 @Transient
61
+ }
62
+
63
+ export enum DeserializationMode {
64
+ PERFORMANCE = 'performance', // 性能模式
65
+ STRICT = 'strict' // 严格模式
66
+ }
67
+
68
+ // ============= 第一层:类分析结果 =============
69
+
70
+ /**
71
+ * 类分析结果(顶层入口)
72
+ * 阅读路径:ClassAnalysis → 基础信息 → 泛型 → 继承 → 装饰器 → 属性分组
73
+ */
74
+ export interface ClassAnalysis {
75
+ // 基础信息
76
+ className: string; // 类名
77
+ sourceFilePath: string; // 类在源码中的绝对路径
78
+ originalClass?: ClassDeclaration; // 原始AST引用(可选,用于高级处理和回溯)
79
+
80
+ // 核心特性
81
+ generics: GenericInfo; // 泛型信息
82
+ inheritance: InheritanceInfo; // 继承信息
83
+ decorators: ClassDecorators; // 类装饰器
84
+
85
+ // 属性分组(基于继承信息的智能分组)
86
+ ownProperties: PropertyAnalysis[]; // 当前类自己定义的属性
87
+ inheritedProperties: PropertyAnalysis[]; // 从父类继承且未重写的属性
88
+ overriddenProperties: PropertyAnalysis[]; // 重写了父类的属性
89
+ properties: PropertyAnalysis[]; // 所有属性的合并视图(重写后的属性会覆盖父类属性,只保留一个)
90
+
91
+ // 构造函数信息
92
+ constructorParams: ConstructorParam[]; // 构造函数参数
93
+
94
+ // Sendable合并性
95
+ canMerge?: boolean;
96
+ }
97
+
98
+ export interface InterfaceAnalysis {
99
+ className: string;
100
+ sourceFilePath: string;
101
+ originalInterface: InterfaceDeclaration;
102
+ generics: GenericInfo;
103
+ inheritance: InheritanceInfo;
104
+ decorators?: ClassDecorators;
105
+
106
+ ownProperties: PropertyAnalysis[]; // 当前接口自己定义的属性
107
+ inheritedProperties: PropertyAnalysis[]; // 从父类继承且未重写的属性
108
+ overriddenProperties: PropertyAnalysis[]; // 重写了父类的属性
109
+ properties: PropertyAnalysis[]; // 所有属性的合并视图(重写后的属性会覆盖父类属性,只保留一个)
110
+ }
111
+
112
+ // ============= 第二层:类的核心特性 =============
113
+
114
+ /**
115
+ * 泛型信息
116
+ * 专门处理类和方法的泛型参数、约束、变型信息
117
+ */
118
+ export interface GenericInfo {
119
+ isGeneric: boolean; // 是否为泛型类/方法
120
+ parameters: string[]; // 泛型参数名列表 ['T', 'U']
121
+ }
122
+
123
+ /**
124
+ * 继承信息(简化版,专注核心)
125
+ * 描述类的继承关系
126
+ */
127
+ export interface InheritanceInfo {
128
+ isInherited: boolean; // 是否继承其他类
129
+ baseClassAnalysis?: ClassAnalysis | InterfaceAnalysis; // 直接父类的详细信息
130
+ genericTypeArguments?: TypeNode[]; // 继承时传入的泛型参数
131
+ }
132
+
133
+ /**
134
+ * 类装饰器信息
135
+ * 类级别的装饰器配置
136
+ */
137
+ export interface ClassDecorators {
138
+ serializable?: SerializableOptions; // @Serializable 序列化配置
139
+ serialName?: string;
140
+ }
141
+
142
+ /**
143
+ * @Serializable 装饰器选项
144
+ * 配置序列化行为的选项
145
+ */
146
+ export interface SerializableOptions {
147
+ generateSendable?: boolean; // 是否生成Sendable变体类
148
+ with?: string; // 自定义序列化器工厂(完整表达式内容)
149
+ deserializationMode?: DeserializationMode; // 反序列化模式(粗糙/精确)
150
+ }
151
+
152
+ /**
153
+ * 构造函数参数信息
154
+ * 描述类构造函数的参数结构
155
+ */
156
+ export interface ConstructorParam {
157
+ name: string; // 参数名称
158
+ type: string; // 参数类型字符串
159
+ isOptional: boolean; // 是否可选
160
+ defaultValue?: string; // 默认值(可选)
161
+ }
162
+
163
+ // ============= 第三层:属性分析结果 =============
164
+
165
+ /**
166
+ * 属性分析结果(从ClassAnalysis.properties跳转到这里)
167
+ * 阅读路径:PropertyAnalysis → 基础信息 → 类型分析 → 装饰器
168
+ */
169
+ export interface PropertyAnalysis {
170
+ name: string; // 属性名称
171
+ defaultValue?: string; // 默认值表达式字符串
172
+ decorators?: PropertyDecorators; // 装饰器信息
173
+ isMust: boolean; // 精确模式下反序列化时的必要性
174
+ type: TypeStructure; // 完整的类型分析结果(详细类型信息)
175
+ }
176
+
177
+ /**
178
+ * 属性装饰器信息
179
+ * 分离装饰器解析结果,避免与分析结果混合
180
+ */
181
+ export interface PropertyDecorators {
182
+ serialName?: string; // @SerialName 自定义序列化名称
183
+ isRequired: boolean; // @Required 是否必需字段
184
+ isTransient: boolean; // @Transient 是否跳过序列化
185
+ with?: string; // @Serializable 自定义序列化器
186
+ }
187
+
188
+ // ============= 第五层:类型结构详情 =============
189
+
190
+ /**
191
+ * 类型结构(从TypeAnalysisResult.structure跳转到这里)
192
+ * 阅读路径:TypeStructure → 基础信息 → 子结构 → 特殊类型信息
193
+ */
194
+ export interface TypeStructure {
195
+ kind: PropertyKind; // 类型种类(STRING, ARRAY, MAP等)
196
+ depth: number; // 嵌套深度(用于复杂度控制)
197
+ sourceText: string; // 原始类型文本(如 "Array<Map<string, User>>")
198
+ args: TypeStructure[] // 泛型参数的类型
199
+ // 类型依赖和特殊信息
200
+ dependencies: TypeDependency[]; // 依赖信息列表(包含完整导入信息)
201
+ enumDetails?: EnumDetails; // 枚举类型详细信息(仅当kind=ENUM时)
202
+ classDetails?: ClassDetails; // 枚举类型详细信息(仅当kind=OBJECT时)
203
+ interfaceDetails?: InterfaceDetails; //(仅当kind=INTERFACE时)
204
+ unionDetails?: TypeStructure[]; // Union types 的成员类型
205
+ isOptional?: boolean; // 是否可选
206
+ }
207
+
208
+ // ============= 第六层:类型依赖信息 =============
209
+
210
+ export enum TypeKind {
211
+ CLASS = 'class',
212
+ INTERFACE = 'interface',
213
+ ENUM = 'enum',
214
+ TYPE = 'type',
215
+ }
216
+
217
+ /**
218
+ * 类型依赖信息(从TypeStructure.dependencies跳转到这里)
219
+ * 阅读路径:TypeDependency → 基础信息 → 来源信息 → 详细信息
220
+ */
221
+ export interface TypeDependency {
222
+ typeName: string; // 类型名称(如 "User")
223
+ typeKind: TypeKind; // 类型种类
224
+ importPath: string; // 导入路径(如 "sampleentry/ets/model/User")
225
+
226
+ source: DependencySource; // 统一的来源信息
227
+ details?: TypeDetails; // 扩展的类型详细信息(按需包含)
228
+ }
229
+
230
+ /**
231
+ * 依赖来源信息(从TypeDependency.source跳转到这里)
232
+ */
233
+ export interface DependencySource {
234
+ type: 'local' | 'imported' | 'builtin'; // 本地定义/外部导入/内置类型
235
+ sourceFilePath?: string; // 源文件绝对路径(仅当 type='local'|'imported' 时)
236
+ originalImport?: string; // 原始导入语句(仅当 type='imported' 时)
237
+ packageName?: string; // 包名(如果是包导入)
238
+ }
239
+
240
+ // ============= 第七层:类型详细信息 =============
241
+
242
+ /**
243
+ * 类型详细信息(从TypeDependency.details跳转到这里)
244
+ * 联合类型,按typeKind区分,统一管理所有类型的详细信息
245
+ */
246
+ export type TypeDetails =
247
+ | EnumDetails
248
+ | ClassDetails
249
+ | InterfaceDetails
250
+ | TypeAliasDetails;
251
+
252
+ /**
253
+ * 枚举详细信息
254
+ */
255
+ export interface EnumDetails {
256
+ kind: TypeKind.ENUM;
257
+ members: EnumMemberInfo[]; // 枚举成员列表
258
+ valueType: 'string' | 'number'; // 枚举值类型
259
+ }
260
+
261
+ /**
262
+ * 枚举成员信息(从EnumDetails.members跳转到这里)
263
+ */
264
+ export interface EnumMemberInfo {
265
+ name: string; // 枚举成员名称(如 'HAVE_FUN')
266
+ value: string | number; // 枚举成员值(如 0 或 'football')
267
+ literalValue: string; // 字面量形式(用于代码生成,如 '0' 或 "'football'")
268
+ }
269
+
270
+ /**
271
+ * 类详细信息
272
+ */
273
+ export interface ClassDetails {
274
+ kind: TypeKind.CLASS;
275
+ classDecl: ClassDeclaration;
276
+ isGeneric: boolean; // 是否为泛型类
277
+ }
278
+
279
+ /**
280
+ * 接口详细信息
281
+ */
282
+ export interface InterfaceDetails {
283
+ kind: TypeKind.INTERFACE;
284
+ interfaceDecl: InterfaceDeclaration;
285
+ isGeneric: boolean; // 是否为泛型接口
286
+ }
287
+
288
+ /**
289
+ * 类型别名详细信息
290
+ */
291
+ export interface TypeAliasDetails {
292
+ kind: TypeKind.TYPE;
293
+ aliasedType: string; // 别名指向的类型字符串(如 "User | Admin")
294
+ resolvedType: TypeStructure; // 解析后的实际类型(递归分析结果)
295
+ }
296
+
297
+ // ============= 代码生成阶段 =============
298
+
299
+ /**
300
+ * 生成上下文(代码生成的顶层入口)
301
+ * 阅读路径:GenerationContext → 类分析 → 属性生成信息 → 模板和配置
302
+ */
303
+ export interface GenerationContext {
304
+ class: ClassAnalysis | InterfaceAnalysis; // 类分析结果
305
+ properties: PropertyGenerationInfo[]; // 属性生成信息列表
306
+ serialNameConstant: string;
307
+ }
308
+
309
+ /**
310
+ * 属性生成信息(从GenerationContext.properties跳转到这里)
311
+ * 阅读路径:PropertyGenerationInfo → 分析结果 → 序列化器元数据 → 模板数据
312
+ */
313
+ export interface PropertyGenerationInfo {
314
+ analysis: PropertyAnalysis; // 引用分析结果(不重复存储)
315
+ serializer: SerializerMetadata; // 序列化器生成元数据
316
+ }
317
+
318
+ /**
319
+ * 序列化器元数据(从PropertyGenerationInfo.serializer跳转到这里)
320
+ */
321
+ export interface SerializerMetadata {
322
+ name: string; // 序列化器名称(如 "ArraySerializer")
323
+ typeDeclaration: string; // 类型声明(如 "ArraySerializer<User>")
324
+ instantiationTemplate: string; // 实例化模板(如 "new ArraySerializer<User>(UserSerializer.INSTANCE)")
325
+ encodeMethod: string; // 编码方法名(如 "encodeSerializableElement")
326
+ decodeMethod: string; // 解码方法名(如 "decodeSerializableElement")
327
+ decoderType: string; // 解码器类型(如 "string | undefined")
328
+ needsTypeAssertion?: boolean; // 是否需要类型断言(字符串枚举等情况)
329
+ }
330
+
331
+ // ============= 配置和选项 =============
332
+ export interface ImportRewriteOptions {
333
+ scanPaths: string[]; // 导入重写扫描路径列表
334
+ preserveOriginalImports?: boolean; // 是否保留原始导入,默认值为false
335
+ }
336
+
337
+ export interface TurboTransJsonPluginOptions {
338
+ ignoreModuleNames: string[];
339
+ scanDir: string[];
340
+ deserializationMode: DeserializationMode;
341
+ importRewrite?: ImportRewriteOptions;
342
+ }
343
+
344
+ export interface IGenerationResult {
345
+ generatedFiles: IGeneratedFile[];
346
+ skippedFiles: string[];
347
+ }
348
+
349
+ export interface IGeneratedFile {
350
+ sourcePath: string;
351
+ outputPath: string;
352
+ contentLength: number;
353
+ serializerCount: number;
354
+ generatedAt: number;
355
+ contentHash?: string;
356
+ }