@azure-tools/typespec-ts 0.29.0 → 0.30.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 (230) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/dist/src/contextManager.d.ts +70 -0
  3. package/dist/src/contextManager.d.ts.map +1 -0
  4. package/dist/src/contextManager.js +59 -0
  5. package/dist/src/contextManager.js.map +1 -0
  6. package/dist/src/index.d.ts.map +1 -1
  7. package/dist/src/index.js +38 -28
  8. package/dist/src/index.js.map +1 -1
  9. package/dist/src/lib.d.ts +2 -1
  10. package/dist/src/lib.d.ts.map +1 -1
  11. package/dist/src/lib.js +3 -2
  12. package/dist/src/lib.js.map +1 -1
  13. package/dist/src/metaTree.d.ts +12 -0
  14. package/dist/src/metaTree.d.ts.map +1 -0
  15. package/dist/src/metaTree.js +2 -0
  16. package/dist/src/metaTree.js.map +1 -0
  17. package/dist/src/modular/buildClassicalClient.d.ts +1 -1
  18. package/dist/src/modular/buildClassicalClient.d.ts.map +1 -1
  19. package/dist/src/modular/buildClassicalClient.js +22 -16
  20. package/dist/src/modular/buildClassicalClient.js.map +1 -1
  21. package/dist/src/modular/buildClassicalOperationGroups.d.ts +3 -2
  22. package/dist/src/modular/buildClassicalOperationGroups.d.ts.map +1 -1
  23. package/dist/src/modular/buildClassicalOperationGroups.js +5 -5
  24. package/dist/src/modular/buildClassicalOperationGroups.js.map +1 -1
  25. package/dist/src/modular/buildClientContext.d.ts +1 -1
  26. package/dist/src/modular/buildClientContext.d.ts.map +1 -1
  27. package/dist/src/modular/buildClientContext.js +5 -5
  28. package/dist/src/modular/buildClientContext.js.map +1 -1
  29. package/dist/src/modular/buildCodeModel.d.ts +2 -2
  30. package/dist/src/modular/buildCodeModel.d.ts.map +1 -1
  31. package/dist/src/modular/buildCodeModel.js +69 -43
  32. package/dist/src/modular/buildCodeModel.js.map +1 -1
  33. package/dist/src/modular/buildHelperSerializers.d.ts +3 -0
  34. package/dist/src/modular/buildHelperSerializers.d.ts.map +1 -0
  35. package/dist/src/modular/buildHelperSerializers.js +60 -0
  36. package/dist/src/modular/buildHelperSerializers.js.map +1 -0
  37. package/dist/src/modular/buildLroFiles.d.ts +1 -1
  38. package/dist/src/modular/buildLroFiles.d.ts.map +1 -1
  39. package/dist/src/modular/buildLroFiles.js +25 -31
  40. package/dist/src/modular/buildLroFiles.js.map +1 -1
  41. package/dist/src/modular/buildOperations.d.ts +3 -2
  42. package/dist/src/modular/buildOperations.d.ts.map +1 -1
  43. package/dist/src/modular/buildOperations.js +23 -11
  44. package/dist/src/modular/buildOperations.js.map +1 -1
  45. package/dist/src/modular/buildPagingFiles.d.ts.map +1 -1
  46. package/dist/src/modular/buildPagingFiles.js.map +1 -1
  47. package/dist/src/modular/buildProjectFiles.d.ts.map +1 -1
  48. package/dist/src/modular/buildProjectFiles.js.map +1 -1
  49. package/dist/src/modular/buildRootIndex.d.ts.map +1 -1
  50. package/dist/src/modular/buildRootIndex.js +1 -1
  51. package/dist/src/modular/buildRootIndex.js.map +1 -1
  52. package/dist/src/modular/buildSerializeUtils.d.ts +2 -2
  53. package/dist/src/modular/buildSerializeUtils.d.ts.map +1 -1
  54. package/dist/src/modular/buildSerializeUtils.js +15 -8
  55. package/dist/src/modular/buildSerializeUtils.js.map +1 -1
  56. package/dist/src/modular/buildSubpathIndex.d.ts.map +1 -1
  57. package/dist/src/modular/buildSubpathIndex.js +6 -0
  58. package/dist/src/modular/buildSubpathIndex.js.map +1 -1
  59. package/dist/src/modular/emitModels.d.ts +5 -5
  60. package/dist/src/modular/emitModels.d.ts.map +1 -1
  61. package/dist/src/modular/emitModels.js +52 -21
  62. package/dist/src/modular/emitModels.js.map +1 -1
  63. package/dist/src/modular/helpers/classicalOperationHelpers.d.ts +3 -1
  64. package/dist/src/modular/helpers/classicalOperationHelpers.d.ts.map +1 -1
  65. package/dist/src/modular/helpers/classicalOperationHelpers.js +26 -12
  66. package/dist/src/modular/helpers/classicalOperationHelpers.js.map +1 -1
  67. package/dist/src/modular/helpers/clientHelpers.d.ts +3 -2
  68. package/dist/src/modular/helpers/clientHelpers.d.ts.map +1 -1
  69. package/dist/src/modular/helpers/clientHelpers.js +14 -5
  70. package/dist/src/modular/helpers/clientHelpers.js.map +1 -1
  71. package/dist/src/modular/helpers/namingHelpers.d.ts +5 -1
  72. package/dist/src/modular/helpers/namingHelpers.d.ts.map +1 -1
  73. package/dist/src/modular/helpers/namingHelpers.js +25 -1
  74. package/dist/src/modular/helpers/namingHelpers.js.map +1 -1
  75. package/dist/src/modular/helpers/operationHelpers.d.ts +11 -3
  76. package/dist/src/modular/helpers/operationHelpers.d.ts.map +1 -1
  77. package/dist/src/modular/helpers/operationHelpers.js +160 -66
  78. package/dist/src/modular/helpers/operationHelpers.js.map +1 -1
  79. package/dist/src/modular/helpers/typeHelpers.d.ts +3 -0
  80. package/dist/src/modular/helpers/typeHelpers.d.ts.map +1 -1
  81. package/dist/src/modular/helpers/typeHelpers.js +50 -19
  82. package/dist/src/modular/helpers/typeHelpers.js.map +1 -1
  83. package/dist/src/modular/modularCodeModel.d.ts +9 -5
  84. package/dist/src/modular/modularCodeModel.d.ts.map +1 -1
  85. package/dist/src/modular/serialization/buildSerializerFunction.d.ts +4 -0
  86. package/dist/src/modular/serialization/buildSerializerFunction.d.ts.map +1 -0
  87. package/dist/src/modular/serialization/buildSerializerFunction.js +160 -0
  88. package/dist/src/modular/serialization/buildSerializerFunction.js.map +1 -0
  89. package/dist/src/modular/serialization/collectionUtils.d.ts +3 -0
  90. package/dist/src/modular/serialization/collectionUtils.d.ts.map +1 -0
  91. package/dist/src/modular/serialization/collectionUtils.js +17 -0
  92. package/dist/src/modular/serialization/collectionUtils.js.map +1 -0
  93. package/dist/src/modular/serialization/index.d.ts +5 -0
  94. package/dist/src/modular/serialization/index.d.ts.map +1 -0
  95. package/dist/src/modular/serialization/index.js +156 -0
  96. package/dist/src/modular/serialization/index.js.map +1 -0
  97. package/dist/src/modular/serialization/operationHelpers.d.ts +37 -0
  98. package/dist/src/modular/serialization/operationHelpers.d.ts.map +1 -0
  99. package/dist/src/modular/serialization/operationHelpers.js +457 -0
  100. package/dist/src/modular/serialization/operationHelpers.js.map +1 -0
  101. package/dist/src/modular/serialization/serializeArray.d.ts +5 -0
  102. package/dist/src/modular/serialization/serializeArray.d.ts.map +1 -0
  103. package/dist/src/modular/serialization/serializeArray.js +33 -0
  104. package/dist/src/modular/serialization/serializeArray.js.map +1 -0
  105. package/dist/src/modular/serialization/serializeDateTime.d.ts +4 -0
  106. package/dist/src/modular/serialization/serializeDateTime.d.ts.map +1 -0
  107. package/dist/src/modular/serialization/serializeDateTime.js +19 -0
  108. package/dist/src/modular/serialization/serializeDateTime.js.map +1 -0
  109. package/dist/src/modular/serialization/serializeHeaders.d.ts +7 -0
  110. package/dist/src/modular/serialization/serializeHeaders.d.ts.map +1 -0
  111. package/dist/src/modular/serialization/serializeHeaders.js +44 -0
  112. package/dist/src/modular/serialization/serializeHeaders.js.map +1 -0
  113. package/dist/src/modular/serialization/serializers.d.ts +17 -0
  114. package/dist/src/modular/serialization/serializers.d.ts.map +1 -0
  115. package/dist/src/modular/serialization/serializers.js +176 -0
  116. package/dist/src/modular/serialization/serializers.js.map +1 -0
  117. package/dist/src/modular/serialization/util.d.ts +26 -0
  118. package/dist/src/modular/serialization/util.d.ts.map +1 -0
  119. package/dist/src/modular/serialization/util.js +112 -0
  120. package/dist/src/modular/serialization/util.js.map +1 -0
  121. package/dist/src/reify/index.d.ts +12 -0
  122. package/dist/src/reify/index.d.ts.map +1 -0
  123. package/dist/src/reify/index.js +22 -0
  124. package/dist/src/reify/index.js.map +1 -0
  125. package/dist/src/testing/index.d.ts +2 -0
  126. package/dist/src/testing/index.d.ts.map +1 -0
  127. package/dist/src/testing/index.js +7 -0
  128. package/dist/src/testing/index.js.map +1 -0
  129. package/dist/src/transform/transform.d.ts +1 -1
  130. package/dist/src/transform/transform.d.ts.map +1 -1
  131. package/dist/src/transform/transform.js +11 -11
  132. package/dist/src/transform/transform.js.map +1 -1
  133. package/dist/src/transform/transformApiVersionInfo.d.ts +1 -1
  134. package/dist/src/transform/transformApiVersionInfo.d.ts.map +1 -1
  135. package/dist/src/transform/transformApiVersionInfo.js +16 -6
  136. package/dist/src/transform/transformApiVersionInfo.js.map +1 -1
  137. package/dist/src/transform/transformHelperFunctionDetails.d.ts +1 -1
  138. package/dist/src/transform/transformHelperFunctionDetails.d.ts.map +1 -1
  139. package/dist/src/transform/transformHelperFunctionDetails.js +1 -1
  140. package/dist/src/transform/transformHelperFunctionDetails.js.map +1 -1
  141. package/dist/src/transform/transformParameters.d.ts +1 -1
  142. package/dist/src/transform/transformParameters.d.ts.map +1 -1
  143. package/dist/src/transform/transformParameters.js +3 -3
  144. package/dist/src/transform/transformParameters.js.map +1 -1
  145. package/dist/src/transform/transformPaths.d.ts +1 -1
  146. package/dist/src/transform/transformPaths.d.ts.map +1 -1
  147. package/dist/src/transform/transformPaths.js +3 -4
  148. package/dist/src/transform/transformPaths.js.map +1 -1
  149. package/dist/src/transform/transformResponses.d.ts +1 -1
  150. package/dist/src/transform/transformResponses.d.ts.map +1 -1
  151. package/dist/src/transform/transformResponses.js +12 -9
  152. package/dist/src/transform/transformResponses.js.map +1 -1
  153. package/dist/src/transform/transformSchemas.d.ts.map +1 -1
  154. package/dist/src/transform/transformSchemas.js +10 -4
  155. package/dist/src/transform/transformSchemas.js.map +1 -1
  156. package/dist/src/transform/transformTelemetryInfo.d.ts.map +1 -1
  157. package/dist/src/transform/transformTelemetryInfo.js +1 -1
  158. package/dist/src/transform/transformTelemetryInfo.js.map +1 -1
  159. package/dist/src/transform/transfromRLCOptions.d.ts.map +1 -1
  160. package/dist/src/transform/transfromRLCOptions.js +11 -5
  161. package/dist/src/transform/transfromRLCOptions.js.map +1 -1
  162. package/dist/src/utils/clientUtils.js.map +1 -1
  163. package/dist/src/utils/emitUtil.d.ts +1 -2
  164. package/dist/src/utils/emitUtil.d.ts.map +1 -1
  165. package/dist/src/utils/emitUtil.js.map +1 -1
  166. package/dist/src/utils/importHelper.d.ts +10 -0
  167. package/dist/src/utils/importHelper.d.ts.map +1 -0
  168. package/dist/src/utils/importHelper.js +54 -0
  169. package/dist/src/utils/importHelper.js.map +1 -0
  170. package/dist/src/utils/modelUtils.d.ts +1 -1
  171. package/dist/src/utils/modelUtils.d.ts.map +1 -1
  172. package/dist/src/utils/modelUtils.js +41 -25
  173. package/dist/src/utils/modelUtils.js.map +1 -1
  174. package/dist/src/utils/namespaceUtils.d.ts.map +1 -1
  175. package/dist/src/utils/namespaceUtils.js.map +1 -1
  176. package/dist/src/utils/operationUtil.d.ts +3 -4
  177. package/dist/src/utils/operationUtil.d.ts.map +1 -1
  178. package/dist/src/utils/operationUtil.js +4 -5
  179. package/dist/src/utils/operationUtil.js.map +1 -1
  180. package/dist/tsconfig.tsbuildinfo +1 -1
  181. package/package.json +55 -35
  182. package/src/contextManager.ts +99 -0
  183. package/src/index.ts +66 -55
  184. package/src/lib.ts +6 -4
  185. package/src/metaTree.ts +14 -0
  186. package/src/modular/buildClassicalClient.ts +36 -18
  187. package/src/modular/buildClassicalOperationGroups.ts +16 -8
  188. package/src/modular/buildClientContext.ts +11 -11
  189. package/src/modular/buildCodeModel.ts +141 -99
  190. package/src/modular/buildHelperSerializers.ts +71 -0
  191. package/src/modular/buildLroFiles.ts +29 -33
  192. package/src/modular/buildOperations.ts +68 -31
  193. package/src/modular/buildPagingFiles.ts +1 -1
  194. package/src/modular/buildProjectFiles.ts +1 -1
  195. package/src/modular/buildRootIndex.ts +1 -1
  196. package/src/modular/buildSerializeUtils.ts +33 -25
  197. package/src/modular/buildSubpathIndex.ts +10 -0
  198. package/src/modular/emitModels.ts +86 -32
  199. package/src/modular/helpers/classicalOperationHelpers.ts +41 -7
  200. package/src/modular/helpers/clientHelpers.ts +19 -6
  201. package/src/modular/helpers/namingHelpers.ts +59 -4
  202. package/src/modular/helpers/operationHelpers.ts +247 -111
  203. package/src/modular/helpers/typeHelpers.ts +54 -17
  204. package/src/modular/modularCodeModel.ts +17 -5
  205. package/src/modular/serialization/buildSerializerFunction.ts +224 -0
  206. package/src/modular/serialization/collectionUtils.ts +20 -0
  207. package/src/modular/serialization/index.ts +263 -0
  208. package/src/modular/serialization/operationHelpers.ts +660 -0
  209. package/src/modular/serialization/serializeArray.ts +51 -0
  210. package/src/modular/serialization/serializeDateTime.ts +22 -0
  211. package/src/modular/serialization/serializeHeaders.ts +64 -0
  212. package/src/modular/serialization/serializers.ts +304 -0
  213. package/src/modular/serialization/util.ts +167 -0
  214. package/src/reify/index.ts +41 -0
  215. package/src/testing/index.ts +10 -0
  216. package/src/transform/transform.ts +15 -15
  217. package/src/transform/transformApiVersionInfo.ts +29 -16
  218. package/src/transform/transformHelperFunctionDetails.ts +8 -8
  219. package/src/transform/transformParameters.ts +15 -15
  220. package/src/transform/transformPaths.ts +12 -12
  221. package/src/transform/transformResponses.ts +21 -18
  222. package/src/transform/transformSchemas.ts +17 -8
  223. package/src/transform/transformTelemetryInfo.ts +4 -4
  224. package/src/transform/transfromRLCOptions.ts +14 -7
  225. package/src/utils/clientUtils.ts +2 -2
  226. package/src/utils/emitUtil.ts +6 -3
  227. package/src/utils/importHelper.ts +64 -0
  228. package/src/utils/modelUtils.ts +79 -47
  229. package/src/utils/namespaceUtils.ts +1 -1
  230. package/src/utils/operationUtil.ts +22 -24
@@ -0,0 +1,263 @@
1
+ import {
2
+ addImportsToFiles,
3
+ addImportToSpecifier,
4
+ Imports as RuntimeImports
5
+ } from "@azure-tools/rlc-common";
6
+ import {
7
+ getAllModels,
8
+ SdkType,
9
+ SdkUnionType,
10
+ UsageFlags as TCGCUsageFlags
11
+ } from "@azure-tools/typespec-client-generator-core";
12
+ import { isDefined } from "@azure/core-util";
13
+ import { UsageFlags } from "@typespec/compiler";
14
+ import * as path from "path";
15
+ import { FunctionDeclarationStructure, OptionalKind } from "ts-morph";
16
+ import { toCamelCase, toPascalCase } from "../../utils/casingUtils.js";
17
+ import { SdkContext } from "../../utils/interfaces.js";
18
+ import {
19
+ getModularModelFilePath,
20
+ getRLCIndexFilePath
21
+ } from "../helpers/namingHelpers.js";
22
+ import { Client, ModularCodeModel } from "../modularCodeModel.js";
23
+ import {
24
+ serializeEnumFunctionBody,
25
+ serializeModelPropertiesInline,
26
+ serializeType,
27
+ serializeUnionInline
28
+ } from "./serializers.js";
29
+ import { getUsage, SerializeFunctionType, SerializerMap } from "./util.js";
30
+
31
+ export function buildSerializers(
32
+ dpgContext: SdkContext,
33
+ codeModel: ModularCodeModel,
34
+ client: Client
35
+ ): SerializerMap {
36
+ // Root for changes associated with EXPERIMENTAL_TYPESPEC_TS_SERIALIZATION flag
37
+ const unions = codeModel.types
38
+ .filter((type) => type.type === "combined" && isDefined(type.tcgcType))
39
+ .map((type) => type.tcgcType as SdkUnionType);
40
+ const serializers = createSerializerMetadata(dpgContext, unions);
41
+ const entries = Object.entries(serializers).map(
42
+ ([modularTypeName, meta]) => ({
43
+ ...meta,
44
+ modularTypeName
45
+ })
46
+ );
47
+
48
+ const functions = entries
49
+ .flatMap(({ deserializerFunctionName, serializerFunctionName, type }) => [
50
+ serializerFunctionName
51
+ ? createSerializerFunctionStructure(
52
+ dpgContext,
53
+ UsageFlags.Input,
54
+ serializers,
55
+ type,
56
+ codeModel.runtimeImports
57
+ )
58
+ : undefined,
59
+ deserializerFunctionName
60
+ ? createSerializerFunctionStructure(
61
+ dpgContext,
62
+ UsageFlags.Output,
63
+ serializers,
64
+ type,
65
+ codeModel.runtimeImports
66
+ )
67
+ : undefined
68
+ ])
69
+ .filter(isDefined);
70
+
71
+ if (!functions.length) {
72
+ return {};
73
+ }
74
+
75
+ const utilFilePath = path.join(
76
+ ...[
77
+ codeModel.modularOptions.sourceRoot,
78
+ client.subfolder,
79
+ "utils",
80
+ "serializeUtil.ts"
81
+ ].filter(isDefined)
82
+ );
83
+ const sourceFile = codeModel.project.createSourceFile(utilFilePath);
84
+
85
+ sourceFile.addFunctions(functions);
86
+
87
+ entries.forEach(({ modularTypeName, rlcTypeAlias, rlcTypeName }) => {
88
+ addImportToSpecifier(
89
+ "modularModel",
90
+ codeModel.runtimeImports,
91
+ modularTypeName
92
+ );
93
+ if (rlcTypeName) {
94
+ addImportToSpecifier(
95
+ "rlcIndex",
96
+ codeModel.runtimeImports,
97
+ rlcTypeAlias ? `${rlcTypeName} as ${rlcTypeAlias}` : rlcTypeName
98
+ );
99
+ }
100
+ });
101
+
102
+ addImportsToFiles(codeModel.runtimeImports, sourceFile, {
103
+ modularModel: path.relative(
104
+ path.dirname(utilFilePath),
105
+ getModularModelFilePath(codeModel, client, "js")
106
+ ),
107
+ rlcIndex: path.relative(
108
+ path.dirname(utilFilePath),
109
+ getRLCIndexFilePath(dpgContext, client, "js")
110
+ )
111
+ });
112
+
113
+ return serializers;
114
+ }
115
+
116
+ function createSerializerMetadata(
117
+ dpgContext: SdkContext,
118
+ unions: SdkUnionType[]
119
+ ): SerializerMap {
120
+ const allModels = getAllModels(dpgContext);
121
+ const typesWithSerializers = [...allModels, ...unions].filter(
122
+ hasSerializeFunction
123
+ );
124
+
125
+ const serializers = Object.fromEntries(
126
+ typesWithSerializers.map((type) => {
127
+ const serializerType = type as { usage?: TCGCUsageFlags };
128
+ const rlcTypeName =
129
+ serializerType.usage && serializerType.usage & TCGCUsageFlags.Output
130
+ ? toPascalCase(`${type.name} Output`)
131
+ : serializerType.usage && serializerType.usage & TCGCUsageFlags.Input
132
+ ? type.name
133
+ : undefined;
134
+ const rlcTypeAlias = rlcTypeName
135
+ ? toPascalCase(`${type.name} Rest`)
136
+ : undefined;
137
+
138
+ const usage = getUsage(dpgContext, type);
139
+ const [serializerFunctionName, deserializerFunctionName] = (
140
+ [UsageFlags.Input, UsageFlags.Output] as const
141
+ ).map((functionType) =>
142
+ functionType & usage
143
+ ? toCamelCase(
144
+ `${
145
+ functionType === UsageFlags.Input ? "serialize" : "deserialize"
146
+ } ${type.name}`
147
+ )
148
+ : undefined
149
+ );
150
+
151
+ return [
152
+ type.name,
153
+ {
154
+ rlcTypeName,
155
+ rlcTypeAlias,
156
+ type,
157
+ serializerFunctionName,
158
+ deserializerFunctionName
159
+ }
160
+ ] as const;
161
+ })
162
+ );
163
+
164
+ return serializers;
165
+ }
166
+
167
+ function createSerializerFunctionStructure(
168
+ dpgContext: SdkContext,
169
+ functionType: UsageFlags,
170
+ serializerMap: SerializerMap,
171
+ type: SerializeFunctionType,
172
+ runtimeImports: RuntimeImports
173
+ ): OptionalKind<FunctionDeclarationStructure> {
174
+ const modularTypeName = type.name;
175
+ const serializerMetadata = serializerMap[modularTypeName];
176
+
177
+ const functionName =
178
+ functionType === UsageFlags.Input
179
+ ? serializerMetadata?.serializerFunctionName ?? "FIXMYNAME"
180
+ : serializerMetadata?.deserializerFunctionName ?? "FIXMYNAME";
181
+
182
+ const paramName = "o";
183
+ const types = type.isGeneratedName
184
+ ? ["any", "any"]
185
+ : [modularTypeName, serializerMetadata?.rlcTypeAlias ?? "FIXMYNAME"];
186
+ const [paramType, returnType] =
187
+ functionType === UsageFlags.Input ? types : types.reverse();
188
+ const parameters = [{ name: paramName, type: paramType }];
189
+ const statements = [];
190
+ switch (true) {
191
+ case !hasSerializeFunction(type): {
192
+ statements.push(
193
+ `return ${serializeType({
194
+ dpgContext,
195
+ functionType,
196
+ serializerMap,
197
+ type,
198
+ valueExpr: paramName,
199
+ importCallback: (importType, importedName) =>
200
+ addImportToSpecifier(importType, runtimeImports, importedName)
201
+ })};`
202
+ );
203
+ break;
204
+ }
205
+ case type.kind === "model": {
206
+ statements.push(
207
+ `return ${serializeModelPropertiesInline({
208
+ dpgContext,
209
+ functionType,
210
+ serializerMap,
211
+ type,
212
+ valueExpr: paramName,
213
+ importCallback: (importType, importedName) =>
214
+ addImportToSpecifier(importType, runtimeImports, importedName)
215
+ })}`
216
+ );
217
+ break;
218
+ }
219
+ case type.kind === "union": {
220
+ statements.push(
221
+ `return ${serializeUnionInline({
222
+ dpgContext,
223
+ functionType,
224
+ serializerMap,
225
+ type,
226
+ valueExpr: paramName,
227
+ importCallback: (importType, importedName) =>
228
+ addImportToSpecifier(importType, runtimeImports, importedName)
229
+ })}`
230
+ );
231
+ break;
232
+ }
233
+ case type.kind === "enum": {
234
+ statements.push(
235
+ serializeEnumFunctionBody({
236
+ dpgContext,
237
+ functionType,
238
+ serializerMap,
239
+ type,
240
+ valueExpr: paramName,
241
+ importCallback: (importType, importedName) =>
242
+ addImportToSpecifier(importType, runtimeImports, importedName)
243
+ })
244
+ );
245
+ break;
246
+ }
247
+ }
248
+
249
+ const functionDecl: OptionalKind<FunctionDeclarationStructure> = {
250
+ isExported: true,
251
+ name: functionName,
252
+ parameters,
253
+ returnType,
254
+ statements
255
+ };
256
+ return functionDecl;
257
+ }
258
+
259
+ function hasSerializeFunction(type: SdkType): type is SerializeFunctionType {
260
+ const isValidTypeKind =
261
+ type.kind === "enum" || type.kind === "model" || type.kind === "union";
262
+ return Boolean(isValidTypeKind && type.name);
263
+ }