@azure-tools/typespec-ts 0.11.0 → 0.12.0-alpha.20230501.1

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 (412) hide show
  1. package/.rush/temp/package-deps_build.json +265 -152
  2. package/.rush/temp/shrinkwrap-deps.json +58 -54
  3. package/CHANGELOG.md +4 -0
  4. package/CONTRIBUTING.md +5 -2
  5. package/README.md +3 -3
  6. package/dist/src/casingUtils.d.ts +4 -0
  7. package/dist/src/casingUtils.d.ts.map +1 -0
  8. package/dist/src/casingUtils.js +39 -0
  9. package/dist/src/casingUtils.js.map +1 -0
  10. package/dist/src/emitUtil.js +7 -1
  11. package/dist/src/emitUtil.js.map +1 -1
  12. package/dist/src/index.d.ts.map +1 -1
  13. package/dist/src/index.js +41 -9
  14. package/dist/src/index.js.map +1 -1
  15. package/dist/src/lib.d.ts.map +1 -1
  16. package/dist/src/lib.js +2 -1
  17. package/dist/src/lib.js.map +1 -1
  18. package/dist/src/modelUtils.d.ts +22 -1
  19. package/dist/src/modelUtils.d.ts.map +1 -1
  20. package/dist/src/modelUtils.js +105 -13
  21. package/dist/src/modelUtils.js.map +1 -1
  22. package/dist/src/modular/buildApiIndex.d.ts +3 -0
  23. package/dist/src/modular/buildApiIndex.d.ts.map +1 -0
  24. package/dist/src/modular/buildApiIndex.js +12 -0
  25. package/dist/src/modular/buildApiIndex.js.map +1 -0
  26. package/dist/src/modular/buildClassicalClient.d.ts +4 -0
  27. package/dist/src/modular/buildClassicalClient.d.ts.map +1 -0
  28. package/dist/src/modular/buildClassicalClient.js +112 -0
  29. package/dist/src/modular/buildClassicalClient.js.map +1 -0
  30. package/dist/src/modular/buildClientContext.d.ts +7 -0
  31. package/dist/src/modular/buildClientContext.d.ts.map +1 -0
  32. package/dist/src/modular/buildClientContext.js +72 -0
  33. package/dist/src/modular/buildClientContext.js.map +1 -0
  34. package/dist/src/modular/buildCodeModel.d.ts +14 -0
  35. package/dist/src/modular/buildCodeModel.d.ts.map +1 -0
  36. package/dist/src/modular/buildCodeModel.js +1110 -0
  37. package/dist/src/modular/buildCodeModel.js.map +1 -0
  38. package/dist/src/modular/buildOperations.d.ts +13 -0
  39. package/dist/src/modular/buildOperations.d.ts.map +1 -0
  40. package/dist/src/modular/buildOperations.js +70 -0
  41. package/dist/src/modular/buildOperations.js.map +1 -0
  42. package/dist/src/modular/buildProjectFiles.d.ts +5 -0
  43. package/dist/src/modular/buildProjectFiles.d.ts.map +1 -0
  44. package/dist/src/modular/buildProjectFiles.js +182 -0
  45. package/dist/src/modular/buildProjectFiles.js.map +1 -0
  46. package/dist/src/modular/buildRootIndex.d.ts +4 -0
  47. package/dist/src/modular/buildRootIndex.d.ts.map +1 -0
  48. package/dist/src/modular/buildRootIndex.js +66 -0
  49. package/dist/src/modular/buildRootIndex.js.map +1 -0
  50. package/dist/src/modular/buildSharedTypes.d.ts +6 -0
  51. package/dist/src/modular/buildSharedTypes.d.ts.map +1 -0
  52. package/dist/src/modular/buildSharedTypes.js +33 -0
  53. package/dist/src/modular/buildSharedTypes.js.map +1 -0
  54. package/dist/src/modular/emitModels.d.ts +7 -0
  55. package/dist/src/modular/emitModels.d.ts.map +1 -0
  56. package/dist/src/modular/emitModels.js +63 -0
  57. package/dist/src/modular/emitModels.js.map +1 -0
  58. package/dist/src/modular/helpers/clientHelpers.d.ts +4 -0
  59. package/dist/src/modular/helpers/clientHelpers.d.ts.map +1 -0
  60. package/dist/src/modular/helpers/clientHelpers.js +31 -0
  61. package/dist/src/modular/helpers/clientHelpers.js.map +1 -0
  62. package/dist/src/modular/helpers/credentialHelpers.d.ts +7 -0
  63. package/dist/src/modular/helpers/credentialHelpers.d.ts.map +1 -0
  64. package/dist/src/modular/helpers/credentialHelpers.js +32 -0
  65. package/dist/src/modular/helpers/credentialHelpers.js.map +1 -0
  66. package/dist/src/modular/helpers/namingHelpers.d.ts +3 -0
  67. package/dist/src/modular/helpers/namingHelpers.d.ts.map +1 -0
  68. package/dist/src/modular/helpers/namingHelpers.js +4 -0
  69. package/dist/src/modular/helpers/namingHelpers.js.map +1 -0
  70. package/dist/src/modular/helpers/operationHelpers.d.ts +8 -0
  71. package/dist/src/modular/helpers/operationHelpers.d.ts.map +1 -0
  72. package/dist/src/modular/helpers/operationHelpers.js +274 -0
  73. package/dist/src/modular/helpers/operationHelpers.js.map +1 -0
  74. package/dist/src/modular/helpers/parameterHelpers.d.ts +3 -0
  75. package/dist/src/modular/helpers/parameterHelpers.d.ts.map +1 -0
  76. package/dist/src/modular/helpers/parameterHelpers.js +16 -0
  77. package/dist/src/modular/helpers/parameterHelpers.js.map +1 -0
  78. package/dist/src/modular/helpers/typeHelpers.d.ts +16 -0
  79. package/dist/src/modular/helpers/typeHelpers.d.ts.map +1 -0
  80. package/dist/src/modular/helpers/typeHelpers.js +92 -0
  81. package/dist/src/modular/helpers/typeHelpers.js.map +1 -0
  82. package/dist/src/modular/interfaces.d.ts +10 -0
  83. package/dist/src/modular/interfaces.d.ts.map +1 -0
  84. package/dist/src/modular/interfaces.js +2 -0
  85. package/dist/src/modular/interfaces.js.map +1 -0
  86. package/dist/src/modular/modularCodeModel.d.ts +121 -0
  87. package/dist/src/modular/modularCodeModel.d.ts.map +1 -0
  88. package/dist/src/modular/modularCodeModel.js +2 -0
  89. package/dist/src/modular/modularCodeModel.js.map +1 -0
  90. package/dist/src/operationUtil.d.ts +30 -4
  91. package/dist/src/operationUtil.d.ts.map +1 -1
  92. package/dist/src/operationUtil.js +77 -18
  93. package/dist/src/operationUtil.js.map +1 -1
  94. package/dist/src/transform/transform.d.ts +4 -6
  95. package/dist/src/transform/transform.d.ts.map +1 -1
  96. package/dist/src/transform/transform.js +17 -58
  97. package/dist/src/transform/transform.js.map +1 -1
  98. package/dist/src/transform/transformApiVersionInfo.d.ts +5 -0
  99. package/dist/src/transform/transformApiVersionInfo.d.ts.map +1 -0
  100. package/dist/src/transform/transformApiVersionInfo.js +64 -0
  101. package/dist/src/transform/transformApiVersionInfo.js.map +1 -0
  102. package/dist/src/transform/transformHelperFunctionDetails.d.ts +6 -0
  103. package/dist/src/transform/transformHelperFunctionDetails.d.ts.map +1 -0
  104. package/dist/src/transform/{transformAnnotationDetails.js → transformHelperFunctionDetails.js} +2 -2
  105. package/dist/src/transform/transformHelperFunctionDetails.js.map +1 -0
  106. package/dist/src/transform/transformParameters.d.ts +2 -2
  107. package/dist/src/transform/transformParameters.d.ts.map +1 -1
  108. package/dist/src/transform/transformParameters.js +20 -7
  109. package/dist/src/transform/transformParameters.js.map +1 -1
  110. package/dist/src/transform/transformPaths.d.ts +2 -2
  111. package/dist/src/transform/transformPaths.d.ts.map +1 -1
  112. package/dist/src/transform/transformPaths.js +15 -7
  113. package/dist/src/transform/transformPaths.js.map +1 -1
  114. package/dist/src/transform/transformResponses.d.ts +2 -2
  115. package/dist/src/transform/transformResponses.d.ts.map +1 -1
  116. package/dist/src/transform/transformResponses.js +23 -2
  117. package/dist/src/transform/transformResponses.js.map +1 -1
  118. package/dist/src/transform/transformSchemas.d.ts +2 -2
  119. package/dist/src/transform/transformSchemas.d.ts.map +1 -1
  120. package/dist/src/transform/transformSchemas.js +10 -22
  121. package/dist/src/transform/transformSchemas.js.map +1 -1
  122. package/dist/src/transform/transfromRLCOptions.d.ts +2 -2
  123. package/dist/src/transform/transfromRLCOptions.js +1 -1
  124. package/dist/src/transform/transfromRLCOptions.js.map +1 -1
  125. package/dist/tsconfig.tsbuildinfo +1 -1
  126. package/package.json +27 -19
  127. package/src/casingUtils.ts +48 -0
  128. package/src/emitUtil.ts +9 -4
  129. package/src/index.ts +53 -10
  130. package/src/lib.ts +2 -1
  131. package/src/modelUtils.ts +137 -14
  132. package/src/modular/buildApiIndex.ts +13 -0
  133. package/src/modular/buildClassicalClient.ts +147 -0
  134. package/src/modular/buildClientContext.ts +104 -0
  135. package/src/modular/buildCodeModel.ts +1449 -0
  136. package/src/modular/buildOperations.ts +95 -0
  137. package/src/modular/buildProjectFiles.ts +219 -0
  138. package/src/modular/buildRootIndex.ts +94 -0
  139. package/src/modular/buildSharedTypes.ts +40 -0
  140. package/src/modular/emitModels.ts +72 -0
  141. package/src/modular/helpers/clientHelpers.ts +38 -0
  142. package/src/modular/helpers/credentialHelpers.ts +40 -0
  143. package/src/modular/helpers/namingHelpers.ts +5 -0
  144. package/src/modular/helpers/operationHelpers.ts +418 -0
  145. package/src/modular/helpers/parameterHelpers.ts +17 -0
  146. package/src/modular/helpers/typeHelpers.ts +106 -0
  147. package/src/modular/interfaces.ts +10 -0
  148. package/src/modular/modularCodeModel.ts +151 -0
  149. package/src/modular/static/karma.conf.cjs +120 -0
  150. package/src/modular/static/rollup.test.config.js +67 -0
  151. package/src/modular/static/scripts/renameOutput.mjs +17 -0
  152. package/src/operationUtil.ts +119 -31
  153. package/src/transform/transform.ts +33 -96
  154. package/src/transform/transformApiVersionInfo.ts +108 -0
  155. package/src/transform/{transformAnnotationDetails.ts → transformHelperFunctionDetails.ts} +11 -11
  156. package/src/transform/transformParameters.ts +30 -14
  157. package/src/transform/transformPaths.ts +29 -19
  158. package/src/transform/transformResponses.ts +50 -8
  159. package/src/transform/transformSchemas.ts +20 -28
  160. package/src/transform/transfromRLCOptions.ts +3 -3
  161. package/test/commands/cadl-ranch-list.ts +53 -20
  162. package/test/commands/gen-cadl-ranch.ts +6 -2
  163. package/test/commands/run.ts +3 -13
  164. package/test/integration/arrayItemTypes.spec.ts +6 -3
  165. package/test/integration/azurecore.spec.ts +130 -0
  166. package/test/integration/collectionFormat.spec.ts +118 -0
  167. package/test/integration/dictionary.spec.ts +6 -2
  168. package/test/integration/extensibleEnums.spec.ts +8 -8
  169. package/test/integration/fixedEnums.spec.ts +7 -7
  170. package/test/integration/generated/arrays/itemTypes/src/clientDefinitions.ts +33 -18
  171. package/test/integration/generated/arrays/itemTypes/src/parameters.ts +8 -0
  172. package/test/integration/generated/arrays/itemTypes/src/responses.ts +11 -0
  173. package/test/integration/generated/arrays/itemTypes/tspconfig.yaml +5 -2
  174. package/test/integration/generated/authentication/apiKey/package.json +2 -2
  175. package/test/integration/generated/authentication/apiKey/tspconfig.yaml +5 -2
  176. package/test/integration/generated/authentication/oauth2/tspconfig.yaml +5 -2
  177. package/test/integration/generated/authentication/union/tspconfig.yaml +5 -2
  178. package/test/integration/generated/{resiliency/devDriven → azure/core}/README.md +7 -7
  179. package/test/integration/generated/{lro/lroBasic → azure/core}/api-extractor.json +1 -1
  180. package/test/integration/generated/{resiliency/devDriven → azure/core}/package.json +6 -6
  181. package/test/integration/generated/azure/core/src/azureCoreClient.ts +31 -0
  182. package/test/integration/generated/azure/core/src/clientDefinitions.ts +108 -0
  183. package/test/integration/generated/{resiliency/devDriven → azure/core}/src/index.ts +4 -3
  184. package/test/integration/generated/azure/core/src/isUnexpected.ts +178 -0
  185. package/test/integration/generated/azure/core/src/models.ts +18 -0
  186. package/test/integration/generated/azure/core/src/outputModels.ts +32 -0
  187. package/test/integration/generated/{resiliency/devDriven → azure/core}/src/paginateHelper.ts +55 -5
  188. package/test/integration/generated/azure/core/src/parameters.ts +68 -0
  189. package/test/integration/generated/azure/core/src/responses.ts +158 -0
  190. package/test/integration/generated/azure/core/src/serializeHelper.ts +16 -0
  191. package/test/integration/generated/azure/core/tspconfig.yaml +15 -0
  192. package/test/integration/generated/azure/core-traits/README.md +56 -0
  193. package/test/integration/generated/azure/core-traits/api-extractor.json +18 -0
  194. package/test/integration/generated/azure/core-traits/package.json +80 -0
  195. package/test/integration/generated/azure/core-traits/src/azureCoreTraitsClient.ts +31 -0
  196. package/test/integration/generated/azure/core-traits/src/clientDefinitions.ts +22 -0
  197. package/test/integration/generated/azure/core-traits/src/index.ts +13 -0
  198. package/test/integration/generated/{resiliency/devDriven → azure/core-traits}/src/isUnexpected.ts +6 -26
  199. package/test/integration/generated/azure/core-traits/src/outputModels.ts +10 -0
  200. package/test/integration/generated/azure/core-traits/src/parameters.ts +26 -0
  201. package/test/integration/generated/azure/core-traits/src/responses.ts +32 -0
  202. package/test/integration/generated/azure/core-traits/tspconfig.yaml +15 -0
  203. package/test/integration/generated/dictionary/package.json +2 -2
  204. package/test/integration/generated/dictionary/src/clientDefinitions.ts +35 -20
  205. package/test/integration/generated/dictionary/src/parameters.ts +8 -0
  206. package/test/integration/generated/dictionary/src/responses.ts +11 -0
  207. package/test/integration/generated/dictionary/tspconfig.yaml +5 -2
  208. package/test/integration/generated/enums/extensible/README.md +3 -3
  209. package/test/integration/generated/enums/extensible/package.json +2 -2
  210. package/test/integration/generated/enums/extensible/src/clientDefinitions.ts +5 -5
  211. package/test/integration/generated/enums/extensible/src/index.ts +3 -3
  212. package/test/integration/generated/enums/extensible/src/{enumsExtensible.ts → typeEnumExtensible.ts} +4 -4
  213. package/test/integration/generated/enums/extensible/tspconfig.yaml +5 -2
  214. package/test/integration/generated/enums/fixed/README.md +3 -3
  215. package/test/integration/generated/enums/fixed/package.json +2 -2
  216. package/test/integration/generated/enums/fixed/src/clientDefinitions.ts +5 -5
  217. package/test/integration/generated/enums/fixed/src/index.ts +3 -3
  218. package/test/integration/generated/enums/fixed/src/{enumsFixed.ts → typeEnumFixed.ts} +4 -4
  219. package/test/integration/generated/enums/fixed/tspconfig.yaml +5 -2
  220. package/test/integration/generated/hello/package.json +2 -2
  221. package/test/integration/generated/hello/tspconfig.yaml +5 -2
  222. package/test/integration/generated/internal/src/clientDefinitions.ts +27 -0
  223. package/test/integration/generated/internal/src/index.ts +13 -0
  224. package/test/integration/generated/{lro/lroBasic/src/azureLro.ts → internal/src/internalClient.ts} +5 -5
  225. package/test/integration/generated/internal/src/models.ts +8 -0
  226. package/test/integration/generated/internal/src/outputModels.ts +13 -0
  227. package/test/integration/generated/internal/src/parameters.ts +21 -0
  228. package/test/integration/generated/internal/src/responses.ts +20 -0
  229. package/test/integration/generated/internal/tspconfig.yaml +14 -0
  230. package/test/integration/generated/lro/lroCore/.eslintrc.json +11 -0
  231. package/test/integration/generated/lro/lroCore/README.md +56 -0
  232. package/test/integration/generated/{resiliency/devDriven → lro/lroCore}/api-extractor.json +1 -1
  233. package/test/integration/generated/lro/{lroBasic → lroCore}/package.json +6 -6
  234. package/test/integration/generated/lro/lroCore/rollup.config.js +118 -0
  235. package/test/integration/generated/lro/lroCore/src/clientDefinitions.ts +54 -0
  236. package/test/integration/generated/lro/lroCore/src/index.ts +15 -0
  237. package/test/integration/generated/lro/lroCore/src/isUnexpected.ts +135 -0
  238. package/test/integration/generated/lro/lroCore/src/models.ts +8 -0
  239. package/test/integration/generated/lro/lroCore/src/outputModels.ts +50 -0
  240. package/test/integration/generated/lro/lroCore/src/parameters.ts +25 -0
  241. package/test/integration/generated/lro/{lroBasic → lroCore}/src/pollingHelper.ts +38 -0
  242. package/test/integration/generated/lro/lroCore/src/responses.ts +109 -0
  243. package/test/integration/generated/lro/lroCore/src/specsAzureCoreLroStandard.ts +31 -0
  244. package/test/integration/generated/lro/lroCore/tsconfig.json +25 -0
  245. package/test/integration/generated/lro/lroCore/tspconfig.yaml +14 -0
  246. package/test/integration/generated/lro/lroRPC/.eslintrc.json +11 -0
  247. package/test/integration/generated/lro/{lroBasic → lroRPC}/README.md +7 -7
  248. package/test/integration/generated/lro/lroRPC/api-extractor.json +18 -0
  249. package/test/integration/generated/lro/lroRPC/package.json +82 -0
  250. package/test/integration/generated/lro/lroRPC/rollup.config.js +118 -0
  251. package/test/integration/generated/lro/lroRPC/src/clientDefinitions.ts +79 -0
  252. package/test/integration/generated/lro/lroRPC/src/index.ts +15 -0
  253. package/test/integration/generated/lro/lroRPC/src/isUnexpected.ts +153 -0
  254. package/test/integration/generated/lro/lroRPC/src/models.ts +8 -0
  255. package/test/integration/generated/lro/lroRPC/src/outputModels.ts +40 -0
  256. package/test/integration/generated/lro/lroRPC/src/parameters.ts +20 -0
  257. package/test/integration/generated/lro/lroRPC/src/pollingHelper.ts +127 -0
  258. package/test/integration/generated/lro/lroRPC/src/responses.ts +124 -0
  259. package/test/integration/generated/lro/lroRPC/src/specsAzureCoreLroRpc.ts +31 -0
  260. package/test/integration/generated/lro/lroRPC/tsconfig.json +25 -0
  261. package/test/integration/generated/lro/lroRPC/tspconfig.yaml +14 -0
  262. package/test/integration/generated/models/inheritance/README.md +3 -3
  263. package/test/integration/generated/models/inheritance/package.json +2 -2
  264. package/test/integration/generated/models/inheritance/src/clientDefinitions.ts +13 -11
  265. package/test/integration/generated/models/inheritance/src/index.ts +3 -3
  266. package/test/integration/generated/models/inheritance/src/{modelsInheritance.ts → typeModelInheritance.ts} +4 -4
  267. package/test/integration/generated/models/inheritance/tspconfig.yaml +5 -2
  268. package/test/integration/generated/models/propertyNullable/.eslintrc.json +11 -0
  269. package/test/integration/generated/models/propertyNullable/README.md +56 -0
  270. package/test/integration/generated/models/propertyNullable/api-extractor.json +18 -0
  271. package/test/integration/generated/models/propertyNullable/package.json +80 -0
  272. package/test/integration/generated/models/propertyNullable/rollup.config.js +118 -0
  273. package/test/integration/generated/models/propertyNullable/src/clientDefinitions.ts +227 -0
  274. package/test/integration/generated/models/propertyNullable/src/index.ts +13 -0
  275. package/test/integration/generated/models/propertyNullable/src/models.ts +56 -0
  276. package/test/integration/generated/models/propertyNullable/src/outputModels.ts +56 -0
  277. package/test/integration/generated/models/propertyNullable/src/parameters.ts +197 -0
  278. package/test/integration/generated/models/propertyNullable/src/responses.ts +144 -0
  279. package/test/integration/generated/{resiliency/devDriven/src/resiliencyDevDriven.ts → models/propertyNullable/src/typePropertyNullable.ts} +5 -5
  280. package/test/integration/generated/models/propertyNullable/tsconfig.json +25 -0
  281. package/test/integration/generated/models/propertyNullable/tspconfig.yaml +14 -0
  282. package/test/integration/generated/models/propertyOptional/README.md +3 -3
  283. package/test/integration/generated/models/propertyOptional/package.json +2 -2
  284. package/test/integration/generated/models/propertyOptional/src/clientDefinitions.ts +47 -47
  285. package/test/integration/generated/models/propertyOptional/src/index.ts +3 -3
  286. package/test/integration/generated/models/propertyOptional/src/parameters.ts +7 -6
  287. package/test/integration/generated/models/propertyOptional/src/responses.ts +4 -4
  288. package/test/integration/generated/models/propertyOptional/src/{modelsPropertyOptional.ts → typePropertyOptional.ts} +4 -4
  289. package/test/integration/generated/models/propertyOptional/tspconfig.yaml +5 -2
  290. package/test/integration/generated/models/propertyTypes/README.md +3 -3
  291. package/test/integration/generated/models/propertyTypes/package.json +2 -2
  292. package/test/integration/generated/models/propertyTypes/src/clientDefinitions.ts +55 -47
  293. package/test/integration/generated/models/propertyTypes/src/index.ts +3 -3
  294. package/test/integration/generated/models/propertyTypes/src/parameters.ts +8 -6
  295. package/test/integration/generated/models/propertyTypes/src/responses.ts +4 -4
  296. package/test/integration/generated/models/propertyTypes/src/{modelsPropertyTypes.ts → typePropertyValueTypes.ts} +4 -4
  297. package/test/integration/generated/models/propertyTypes/tspconfig.yaml +5 -2
  298. package/test/integration/generated/models/usage/README.md +3 -3
  299. package/test/integration/generated/models/usage/package.json +2 -2
  300. package/test/integration/generated/models/usage/src/clientDefinitions.ts +7 -7
  301. package/test/integration/generated/models/usage/src/index.ts +3 -3
  302. package/test/integration/generated/models/usage/src/{modelsUsage.ts → typeModelUsage.ts} +4 -4
  303. package/test/integration/generated/models/usage/tspconfig.yaml +5 -2
  304. package/test/integration/generated/models/visibility/README.md +3 -3
  305. package/test/integration/generated/models/visibility/package.json +2 -2
  306. package/test/integration/generated/models/visibility/src/clientDefinitions.ts +3 -3
  307. package/test/integration/generated/models/visibility/src/index.ts +3 -3
  308. package/test/integration/generated/models/visibility/src/{modelsVisibilityAutomatic.ts → typeModelVisibility.ts} +4 -4
  309. package/test/integration/generated/models/visibility/tspconfig.yaml +5 -2
  310. package/test/integration/generated/parameters/collection-format/src/clientDefinitions.ts +63 -0
  311. package/test/integration/generated/parameters/collection-format/src/collectionFormatClient.ts +31 -0
  312. package/test/integration/generated/parameters/collection-format/src/index.ts +12 -0
  313. package/test/integration/generated/parameters/collection-format/src/parameters.ts +71 -0
  314. package/test/integration/generated/parameters/collection-format/src/responses.ts +34 -0
  315. package/test/integration/generated/parameters/collection-format/src/serializeHelper.ts +28 -0
  316. package/test/integration/generated/parameters/collection-format/tspconfig.yaml +14 -0
  317. package/test/integration/generated/parameters/spread/src/clientDefinitions.ts +61 -0
  318. package/test/integration/generated/{lro/lroBasic → parameters/spread}/src/index.ts +4 -4
  319. package/test/integration/generated/parameters/spread/src/models.ts +7 -0
  320. package/test/integration/generated/parameters/spread/src/parameters.ts +61 -0
  321. package/test/integration/generated/parameters/spread/src/parametersSpread.ts +31 -0
  322. package/test/integration/generated/parameters/spread/src/responses.ts +25 -0
  323. package/test/integration/generated/parameters/spread/tspconfig.yaml +12 -0
  324. package/test/integration/generated/projection/src/clientDefinitions.ts +71 -0
  325. package/test/integration/generated/projection/src/index.ts +12 -0
  326. package/test/integration/generated/projection/src/models.ts +22 -0
  327. package/test/integration/generated/projection/src/parameters.ts +48 -0
  328. package/test/integration/generated/projection/src/projectionClient.ts +31 -0
  329. package/test/integration/generated/projection/src/responses.ts +34 -0
  330. package/test/integration/generated/projection/tspconfig.yaml +14 -0
  331. package/test/integration/generated/resiliency/srvDriven1/README.md +4 -4
  332. package/test/integration/generated/resiliency/srvDriven1/package.json +2 -2
  333. package/test/integration/generated/resiliency/srvDriven1/src/clientDefinitions.ts +25 -49
  334. package/test/integration/generated/resiliency/srvDriven1/src/index.ts +3 -5
  335. package/test/integration/generated/resiliency/srvDriven1/src/parameters.ts +11 -32
  336. package/test/integration/generated/resiliency/srvDriven1/src/responses.ts +9 -24
  337. package/test/integration/generated/resiliency/srvDriven1/src/serviceDrivenOldClient.ts +39 -0
  338. package/test/integration/generated/resiliency/srvDriven1/tspconfig.yaml +6 -2
  339. package/test/integration/generated/resiliency/srvDriven2/README.md +13 -4
  340. package/test/integration/generated/resiliency/srvDriven2/package.json +2 -2
  341. package/test/integration/generated/resiliency/srvDriven2/src/clientDefinitions.ts +32 -68
  342. package/test/integration/generated/resiliency/srvDriven2/src/index.ts +3 -5
  343. package/test/integration/generated/resiliency/srvDriven2/src/parameters.ts +19 -42
  344. package/test/integration/generated/resiliency/srvDriven2/src/responses.ts +10 -31
  345. package/test/integration/generated/resiliency/srvDriven2/src/serviceDrivenNewClient.ts +39 -0
  346. package/test/integration/generated/resiliency/srvDriven2/tspconfig.yaml +6 -2
  347. package/test/integration/generated/server/path/multiple/src/clientDefinitions.ts +35 -0
  348. package/test/integration/generated/server/path/multiple/src/index.ts +11 -0
  349. package/test/integration/generated/server/path/multiple/src/multipleParamInServerPathClient.ts +39 -0
  350. package/test/integration/generated/server/path/multiple/src/parameters.ts +7 -0
  351. package/test/integration/generated/server/path/multiple/src/responses.ts +14 -0
  352. package/test/integration/generated/server/path/multiple/tspconfig.yaml +14 -0
  353. package/test/integration/generated/server/path/single/src/clientDefinitions.ts +19 -0
  354. package/test/integration/generated/server/path/single/src/index.ts +11 -0
  355. package/test/integration/generated/server/path/single/src/parameters.ts +6 -0
  356. package/test/integration/generated/server/path/single/src/responses.ts +9 -0
  357. package/test/integration/generated/server/path/single/src/singleParamInServerPathClient.ts +34 -0
  358. package/test/integration/generated/server/path/single/tspconfig.yaml +14 -0
  359. package/test/integration/generated/specialWords/tspconfig.yaml +5 -2
  360. package/test/integration/generated/unions/src/clientDefinitions.ts +8 -8
  361. package/test/integration/generated/unions/tspconfig.yaml +5 -2
  362. package/test/integration/internal.spec.ts +43 -0
  363. package/test/integration/lroCore.spec.ts +89 -0
  364. package/test/integration/modelInheritance.spec.ts +13 -13
  365. package/test/integration/modelPropertyNullable.spec.ts +115 -0
  366. package/test/integration/modelPropertyOptional.spec.ts +32 -32
  367. package/test/integration/modelPropertyType.spec.ts +6 -6
  368. package/test/integration/modelUsage.spec.ts +7 -7
  369. package/test/integration/projection.spec.ts +102 -0
  370. package/test/integration/resiliencyDpgCustomization.spec.ts +69 -35
  371. package/test/integration/server.spec.ts +59 -0
  372. package/test/integration/spreadParameters.spec.ts +82 -0
  373. package/test/integration/unions.spec.ts +4 -4
  374. package/test/unit/apiVersion.spec.ts +388 -0
  375. package/test/unit/clientFactoryGenerator.spec.ts +0 -131
  376. package/test/unit/modelsGenerator.spec.ts +2 -2
  377. package/test/unit/parametersGenerator.spec.ts +1 -1
  378. package/test/unit/responsesGenerator.spec.ts +1 -1
  379. package/test/unit/util/emitUtil.ts +6 -5
  380. package/test/unit/util/testUtil.ts +3 -3
  381. package/dist/src/transform/transformAnnotationDetails.d.ts +0 -6
  382. package/dist/src/transform/transformAnnotationDetails.d.ts.map +0 -1
  383. package/dist/src/transform/transformAnnotationDetails.js.map +0 -1
  384. package/dist/src/transform/transformApiVersionParam.d.ts +0 -5
  385. package/dist/src/transform/transformApiVersionParam.d.ts.map +0 -1
  386. package/dist/src/transform/transformApiVersionParam.js +0 -76
  387. package/dist/src/transform/transformApiVersionParam.js.map +0 -1
  388. package/src/transform/transformApiVersionParam.ts +0 -104
  389. package/test/integration/generated/lro/lroBasic/src/clientDefinitions.ts +0 -37
  390. package/test/integration/generated/lro/lroBasic/src/parameters.ts +0 -8
  391. package/test/integration/generated/lro/lroBasic/src/responses.ts +0 -22
  392. package/test/integration/generated/lro/lroBasic/tspconfig.yaml +0 -11
  393. package/test/integration/generated/resiliency/devDriven/src/clientDefinitions.ts +0 -75
  394. package/test/integration/generated/resiliency/devDriven/src/models.ts +0 -8
  395. package/test/integration/generated/resiliency/devDriven/src/outputModels.ts +0 -25
  396. package/test/integration/generated/resiliency/devDriven/src/parameters.ts +0 -17
  397. package/test/integration/generated/resiliency/devDriven/src/responses.ts +0 -62
  398. package/test/integration/generated/resiliency/devDriven/tspconfig.yaml +0 -11
  399. package/test/integration/generated/resiliency/srvDriven1/src/models.ts +0 -6
  400. package/test/integration/generated/resiliency/srvDriven1/src/outputModels.ts +0 -6
  401. package/test/integration/generated/resiliency/srvDriven1/src/resiliencyServiceDriven1.ts +0 -31
  402. package/test/integration/generated/resiliency/srvDriven2/src/models.ts +0 -6
  403. package/test/integration/generated/resiliency/srvDriven2/src/outputModels.ts +0 -6
  404. package/test/integration/generated/resiliency/srvDriven2/src/resiliencyServiceDriven2.ts +0 -31
  405. package/test/integration/helloWorld.spec.ts +0 -20
  406. package/test/integration/lroBasic.spec.ts +0 -25
  407. /package/test/integration/generated/{resiliency/devDriven → azure/core}/.eslintrc.json +0 -0
  408. /package/test/integration/generated/{resiliency/devDriven → azure/core}/rollup.config.js +0 -0
  409. /package/test/integration/generated/{resiliency/devDriven → azure/core}/tsconfig.json +0 -0
  410. /package/test/integration/generated/{lro/lroBasic → azure/core-traits}/.eslintrc.json +0 -0
  411. /package/test/integration/generated/{lro/lroBasic → azure/core-traits}/rollup.config.js +0 -0
  412. /package/test/integration/generated/{lro/lroBasic → azure/core-traits}/tsconfig.json +0 -0
@@ -0,0 +1,108 @@
1
+ import {
2
+ SdkClient,
3
+ SdkContext,
4
+ isApiVersion,
5
+ listOperationGroups,
6
+ listOperationsInOperationGroup
7
+ } from "@azure-tools/typespec-client-generator-core";
8
+ import { ignoreDiagnostics, Program } from "@typespec/compiler";
9
+ import {
10
+ ApiVersionInfo,
11
+ UrlInfo,
12
+ extractPathApiVersion,
13
+ extractDefinedPosition
14
+ } from "@azure-tools/rlc-common";
15
+ import { getHttpOperation } from "@typespec/http";
16
+ import {
17
+ getEnrichedDefaultApiVersion,
18
+ getSchemaForType,
19
+ trimUsage
20
+ } from "../modelUtils.js";
21
+
22
+ export function transformApiVersionInfo(
23
+ client: SdkClient,
24
+ program: Program,
25
+ dpgContext: SdkContext,
26
+ urlInfo?: UrlInfo
27
+ ): ApiVersionInfo | undefined {
28
+ const queryVersionDetail = getOperationQueryApiVersion(
29
+ client,
30
+ program,
31
+ dpgContext
32
+ );
33
+ const pathVersionDetail = extractPathApiVersion(urlInfo);
34
+ const isCrossedVersion =
35
+ pathVersionDetail?.isCrossedVersion || queryVersionDetail?.isCrossedVersion;
36
+ let defaultValue =
37
+ getEnrichedDefaultApiVersion(program, dpgContext) ??
38
+ pathVersionDetail?.defaultValue ??
39
+ queryVersionDetail?.defaultValue;
40
+
41
+ // Clear the default value if there exists cross version
42
+ if (isCrossedVersion) {
43
+ defaultValue = undefined;
44
+ }
45
+
46
+ return {
47
+ definedPosition: extractDefinedPosition(
48
+ queryVersionDetail,
49
+ pathVersionDetail
50
+ ),
51
+ isCrossedVersion,
52
+ defaultValue
53
+ };
54
+ }
55
+
56
+ function getOperationQueryApiVersion(
57
+ client: SdkClient,
58
+ program: Program,
59
+ dpgContext: SdkContext
60
+ ): ApiVersionInfo | undefined {
61
+ const operationGroups = listOperationGroups(dpgContext, client);
62
+ const apiVersionTypes = new Set<string>();
63
+ for (const operationGroup of operationGroups) {
64
+ const operations = listOperationsInOperationGroup(
65
+ dpgContext,
66
+ operationGroup
67
+ );
68
+ for (const op of operations) {
69
+ const route = ignoreDiagnostics(getHttpOperation(program, op));
70
+ const params = route.parameters.parameters.filter(
71
+ (p) => p.type === "query" && isApiVersion(dpgContext, p)
72
+ );
73
+ params.map((p) => {
74
+ const type = getSchemaForType(program, p.param.type);
75
+ const typeString = JSON.stringify(trimUsage(type));
76
+ apiVersionTypes.add(typeString);
77
+ });
78
+ if (apiVersionTypes.size > 1) {
79
+ break;
80
+ }
81
+ }
82
+ }
83
+ const clientOperations = listOperationsInOperationGroup(dpgContext, client);
84
+ for (const clientOp of clientOperations) {
85
+ const route = ignoreDiagnostics(getHttpOperation(program, clientOp));
86
+ const params = route.parameters.parameters.filter(
87
+ (p) => p.type === "query" && isApiVersion(dpgContext, p)
88
+ );
89
+ params.map((p) => {
90
+ const type = getSchemaForType(program, p.param.type);
91
+ const typeString = JSON.stringify(trimUsage(type));
92
+ apiVersionTypes.add(typeString);
93
+ });
94
+ if (apiVersionTypes.size > 1) {
95
+ break;
96
+ }
97
+ }
98
+ // If no api-version parameter defined return directly
99
+ if (apiVersionTypes.size === 0) {
100
+ return;
101
+ }
102
+ const detail: ApiVersionInfo = {
103
+ definedPosition: "query",
104
+ isCrossedVersion: apiVersionTypes.size > 1,
105
+ defaultValue: undefined // We won't prompt the query versions into client one
106
+ };
107
+ return detail;
108
+ }
@@ -1,11 +1,11 @@
1
1
  import { PagedResultMetadata } from "@azure-tools/typespec-azure-core";
2
2
  import {
3
- Client,
4
- DpgContext,
3
+ SdkClient,
4
+ SdkContext,
5
5
  listOperationGroups,
6
6
  listOperationsInOperationGroup
7
7
  } from "@azure-tools/typespec-client-generator-core";
8
- import { AnnotationDetails } from "@azure-tools/rlc-common";
8
+ import { HelperFunctionDetails } from "@azure-tools/rlc-common";
9
9
  import { ignoreDiagnostics, Model, Program, Type } from "@typespec/compiler";
10
10
  import { getHttpOperation, HttpOperation } from "@typespec/http";
11
11
  import {
@@ -15,11 +15,11 @@ import {
15
15
  } from "../operationUtil.js";
16
16
  import { getSpecialSerializeInfo } from "./transformParameters.js";
17
17
 
18
- export function transformAnnotationDetails(
18
+ export function transformHelperFunctionDetails(
19
19
  program: Program,
20
- client: Client,
21
- dpgContext: DpgContext
22
- ): AnnotationDetails | undefined {
20
+ client: SdkClient,
21
+ dpgContext: SdkContext
22
+ ): HelperFunctionDetails {
23
23
  // Extract paged metadata from Azure.Core.Page
24
24
  const annotationDetails = {
25
25
  hasLongRunning: hasPollingOperations(program, client, dpgContext)
@@ -93,8 +93,8 @@ export function getPageable(
93
93
 
94
94
  function extractPageDetailFromCore(
95
95
  program: Program,
96
- client: Client,
97
- dpgContext: DpgContext
96
+ client: SdkClient,
97
+ dpgContext: SdkContext
98
98
  ) {
99
99
  if (!hasPagingOperations(program, client, dpgContext)) {
100
100
  return;
@@ -171,8 +171,8 @@ function parseItemName(paged: PagedResultMetadata): string | undefined {
171
171
 
172
172
  function extractSpecialSerializeInfo(
173
173
  program: Program,
174
- client: Client,
175
- dpgContext: DpgContext
174
+ client: SdkClient,
175
+ dpgContext: SdkContext
176
176
  ) {
177
177
  let hasMultiCollection = false;
178
178
  let hasPipeCollection = false;
@@ -23,25 +23,25 @@ import {
23
23
  getSchemaForType,
24
24
  getBinaryType,
25
25
  getFormattedPropertyDoc,
26
- getBodyType
26
+ getBodyType,
27
+ predictDefaultValue
27
28
  } from "../modelUtils.js";
28
29
 
29
30
  import { getOperationGroupName, isBinaryPayload } from "../operationUtil.js";
30
31
  import {
31
- Client,
32
- DpgContext,
32
+ SdkClient,
33
+ SdkContext,
33
34
  listOperationGroups,
34
35
  listOperationsInOperationGroup,
35
- OperationGroup,
36
+ SdkOperationGroup,
36
37
  isApiVersion
37
38
  } from "@azure-tools/typespec-client-generator-core";
38
- import { getDefaultValue } from "./transform.js";
39
39
 
40
40
  export function transformToParameterTypes(
41
41
  program: Program,
42
42
  importDetails: Map<ImportKind, Set<string>>,
43
- client: Client,
44
- dpgContext: DpgContext
43
+ client: SdkClient,
44
+ dpgContext: SdkContext
45
45
  ): OperationParameter[] {
46
46
  const operationGroups = listOperationGroups(dpgContext, client);
47
47
  const rlcParameters: OperationParameter[] = [];
@@ -67,7 +67,7 @@ export function transformToParameterTypes(
67
67
  function transformToParameterTypesForRoute(
68
68
  program: Program,
69
69
  route: HttpOperation,
70
- operationGroup?: OperationGroup
70
+ operationGroup?: SdkOperationGroup
71
71
  ) {
72
72
  const parameters = route.parameters;
73
73
  const rlcParameter: OperationParameter = {
@@ -160,7 +160,7 @@ function getParameterName(name: string) {
160
160
 
161
161
  function transformQueryParameters(
162
162
  program: Program,
163
- dpgContext: DpgContext,
163
+ dpgContext: SdkContext,
164
164
  parameters: HttpOperationParameters
165
165
  ): ParameterMetadata[] {
166
166
  const queryParameters = parameters.parameters.filter(
@@ -168,7 +168,7 @@ function transformQueryParameters(
168
168
  p.type === "query" &&
169
169
  !(
170
170
  isApiVersion(dpgContext, p) &&
171
- getDefaultValue(program, dpgContext, p.param)
171
+ predictDefaultValue(program, dpgContext, p.param)
172
172
  )
173
173
  );
174
174
  if (!queryParameters.length) {
@@ -455,9 +455,9 @@ function extractDescriptionsFromBody(
455
455
 
456
456
  export function getSpecialSerializeInfo(parameter: HttpOperationParameter) {
457
457
  let hasMultiCollection = false;
458
- const hasPipeCollection = false;
459
- const hasSsvCollection = false;
460
- const hasTsvCollection = false;
458
+ let hasPipeCollection = false;
459
+ let hasSsvCollection = false;
460
+ let hasTsvCollection = false;
461
461
  const descriptions = [];
462
462
  const collectionInfo = [];
463
463
  if (
@@ -468,7 +468,23 @@ export function getSpecialSerializeInfo(parameter: HttpOperationParameter) {
468
468
  descriptions.push("buildMultiCollection");
469
469
  collectionInfo.push("multi");
470
470
  }
471
- // TODO add other collection logic once cadl has supported it.
471
+ if (parameter.type === "query" && (parameter as any).format === "ssv") {
472
+ hasSsvCollection = true;
473
+ descriptions.push("buildSsvCollection");
474
+ collectionInfo.push("ssv");
475
+ }
476
+
477
+ if (parameter.type === "query" && (parameter as any).format === "tsv") {
478
+ hasTsvCollection = true;
479
+ descriptions.push("buildTsvCollection");
480
+ collectionInfo.push("tsv");
481
+ }
482
+
483
+ if (parameter.type === "query" && (parameter as any).format === "pipes") {
484
+ hasPipeCollection = true;
485
+ descriptions.push("buildPipeCollection");
486
+ collectionInfo.push("pipe");
487
+ }
472
488
  return {
473
489
  hasMultiCollection,
474
490
  hasPipeCollection,
@@ -17,27 +17,27 @@ import {
17
17
  HttpOperationResponse
18
18
  } from "@typespec/http";
19
19
  import {
20
- Client,
21
- DpgContext,
20
+ SdkClient,
21
+ SdkContext,
22
22
  listOperationGroups,
23
23
  listOperationsInOperationGroup,
24
- OperationGroup,
24
+ SdkOperationGroup,
25
25
  isApiVersion
26
26
  } from "@azure-tools/typespec-client-generator-core";
27
27
  import { getSchemaForType } from "../modelUtils.js";
28
28
  import {
29
+ extractOperationLroDetail,
29
30
  getOperationGroupName,
30
31
  getOperationStatuscode,
31
32
  isDefaultStatusCode,
32
33
  isDefinedStatusCode,
33
- isLongRunningOperation,
34
34
  isPagingOperation
35
35
  } from "../operationUtil.js";
36
36
 
37
37
  export function transformPaths(
38
38
  program: Program,
39
- client: Client,
40
- dpgContext: DpgContext
39
+ client: SdkClient,
40
+ dpgContext: SdkContext
41
41
  ): Paths {
42
42
  const operationGroups = listOperationGroups(dpgContext, client);
43
43
  const paths: Paths = {};
@@ -65,7 +65,7 @@ export function transformPaths(
65
65
  */
66
66
  function getResponseTypes(
67
67
  operation: HttpOperation,
68
- operationGroup?: OperationGroup
68
+ operationGroup?: SdkOperationGroup
69
69
  ): ResponseTypes {
70
70
  const returnTypes: ResponseTypes = {
71
71
  error: [],
@@ -99,31 +99,35 @@ function transformOperation(
99
99
  program: Program,
100
100
  route: HttpOperation,
101
101
  paths: Paths,
102
- dpgContext: DpgContext,
103
- operationGroup?: OperationGroup
102
+ dpgContext: SdkContext,
103
+ operationGroup?: SdkOperationGroup
104
104
  ) {
105
105
  const respNames = [];
106
+ const operationGroupName = getOperationGroupName(operationGroup);
106
107
  for (const resp of route.responses) {
107
108
  const respName = getResponseTypeName(
108
- getOperationGroupName(operationGroup),
109
+ operationGroupName,
109
110
  route.operation.name,
110
111
  getOperationStatuscode(resp)
111
112
  );
112
113
  respNames.push(respName);
113
114
  }
115
+ const responseTypes = getResponseTypes(route, operationGroup);
114
116
  const method: OperationMethod = {
115
117
  description: getDoc(program, route.operation) ?? "",
116
118
  hasOptionalOptions: !hasRequiredOptions(dpgContext, route.parameters),
117
- optionsName: getParameterTypeName(
118
- getOperationGroupName(operationGroup),
119
- route.operation.name
120
- ),
121
- responseTypes: getResponseTypes(route, operationGroup),
119
+ optionsName: getParameterTypeName(operationGroupName, route.operation.name),
120
+ responseTypes,
122
121
  returnType: respNames.join(" | "),
123
122
  successStatus: gerOperationSuccessStatus(route),
124
123
  operationName: route.operation.name,
125
- annotations: {
126
- isLongRunning: isLongRunningOperation(program, route),
124
+ operationHelperDetail: {
125
+ lroDetails: extractOperationLroDetail(
126
+ program,
127
+ route,
128
+ responseTypes,
129
+ operationGroupName
130
+ ),
127
131
  isPageable: isPagingOperation(program, route)
128
132
  }
129
133
  };
@@ -137,7 +141,7 @@ function transformOperation(
137
141
  } else {
138
142
  paths[route.path] = {
139
143
  description: getDoc(program, route.operation) ?? "",
140
- name: route.operation.name || "Client",
144
+ name: escapeCoreName(route.operation.name || "Client"),
141
145
  pathParameters: route.parameters.parameters
142
146
  .filter((p) => p.type === "path")
143
147
  .map((p) => {
@@ -157,8 +161,14 @@ function transformOperation(
157
161
  }
158
162
  }
159
163
 
164
+ function escapeCoreName(name: string) {
165
+ if (["client", "streamablemethod"].indexOf(name.toLowerCase()) > -1) {
166
+ return "_" + name;
167
+ }
168
+ return name;
169
+ }
160
170
  function hasRequiredOptions(
161
- dpgContext: DpgContext,
171
+ dpgContext: SdkContext,
162
172
  routeParameters: HttpOperationParameters
163
173
  ) {
164
174
  const isRequiredBodyParam = routeParameters.bodyParameter?.optional === false;
@@ -2,11 +2,11 @@
2
2
  // Licensed under the MIT License.
3
3
 
4
4
  import {
5
- Client,
6
- DpgContext,
5
+ SdkClient,
6
+ SdkContext,
7
7
  listOperationGroups,
8
8
  listOperationsInOperationGroup,
9
- OperationGroup
9
+ SdkOperationGroup
10
10
  } from "@azure-tools/typespec-client-generator-core";
11
11
  import {
12
12
  ResponseHeaderSchema,
@@ -14,7 +14,8 @@ import {
14
14
  OperationResponse,
15
15
  ResponseMetadata,
16
16
  Schema,
17
- SchemaContext
17
+ SchemaContext,
18
+ getLroLogicalResponseName
18
19
  } from "@azure-tools/rlc-common";
19
20
  import { Program, getDoc, ignoreDiagnostics } from "@typespec/compiler";
20
21
  import {
@@ -31,14 +32,15 @@ import {
31
32
  import {
32
33
  getOperationGroupName,
33
34
  getOperationStatuscode,
34
- isBinaryPayload
35
+ isBinaryPayload,
36
+ getOperationLroOverload
35
37
  } from "../operationUtil.js";
36
38
 
37
39
  export function transformToResponseTypes(
38
40
  program: Program,
39
41
  importDetails: Map<ImportKind, Set<string>>,
40
- client: Client,
41
- dpgContext: DpgContext
42
+ client: SdkClient,
43
+ dpgContext: SdkContext
42
44
  ): OperationResponse[] {
43
45
  const operationGroups = listOperationGroups(dpgContext, client);
44
46
  const rlcResponses: OperationResponse[] = [];
@@ -63,7 +65,7 @@ export function transformToResponseTypes(
63
65
  }
64
66
  function transformToResponseTypesForRoute(
65
67
  route: HttpOperation,
66
- operationGroup?: OperationGroup
68
+ operationGroup?: SdkOperationGroup
67
69
  ) {
68
70
  const rlcOperationUnit: OperationResponse = {
69
71
  operationGroup: getOperationGroupName(operationGroup),
@@ -86,6 +88,15 @@ export function transformToResponseTypes(
86
88
  body
87
89
  });
88
90
  }
91
+ const lroLogicalResponse = transformLroLogicalResponse(
92
+ program,
93
+ route,
94
+ getOperationGroupName(operationGroup),
95
+ rlcOperationUnit.responses
96
+ );
97
+ if (lroLogicalResponse) {
98
+ rlcOperationUnit.responses.push(lroLogicalResponse);
99
+ }
89
100
  rlcResponses.push(rlcOperationUnit);
90
101
  }
91
102
  return rlcResponses;
@@ -188,3 +199,34 @@ function transformBody(
188
199
  fromCore
189
200
  };
190
201
  }
202
+
203
+ function transformLroLogicalResponse(
204
+ program: Program,
205
+ route: HttpOperation,
206
+ operationGroupName: string,
207
+ existingResponses: ResponseMetadata[]
208
+ ): ResponseMetadata | undefined {
209
+ const operationLroOverload = getOperationLroOverload(
210
+ program,
211
+ route,
212
+ undefined,
213
+ existingResponses
214
+ );
215
+ if (!operationLroOverload) {
216
+ return;
217
+ }
218
+ const sortedResponses = existingResponses
219
+ .filter((r) => r.statusCode.startsWith("20"))
220
+ .sort((r1, r2) => (r1.statusCode > r2.statusCode ? -1 : 1));
221
+ const successResp = sortedResponses[0];
222
+ const logicalLROResponse: ResponseMetadata = {
223
+ statusCode: "200",
224
+ description: `The final response for long-running ${route.operation.name} operation`,
225
+ predefinedName: getLroLogicalResponseName(
226
+ operationGroupName,
227
+ route.operation.name
228
+ ),
229
+ body: successResp?.body
230
+ };
231
+ return logicalLROResponse;
232
+ }
@@ -2,8 +2,8 @@
2
2
  // Licensed under the MIT License.
3
3
 
4
4
  import {
5
- Client,
6
- DpgContext,
5
+ SdkClient,
6
+ SdkContext,
7
7
  listOperationGroups,
8
8
  listOperationsInOperationGroup
9
9
  } from "@azure-tools/typespec-client-generator-core";
@@ -13,13 +13,14 @@ import { getHttpOperation, HttpOperation } from "@typespec/http";
13
13
  import {
14
14
  getSchemaForType,
15
15
  includeDerivedModel,
16
- getBodyType
16
+ getBodyType,
17
+ trimUsage
17
18
  } from "../modelUtils.js";
18
19
 
19
20
  export function transformSchemas(
20
21
  program: Program,
21
- client: Client,
22
- dpgContext: DpgContext
22
+ client: SdkClient,
23
+ dpgContext: SdkContext
23
24
  ) {
24
25
  const schemas: Map<string, SchemaContext[]> = new Map<
25
26
  string,
@@ -82,20 +83,7 @@ export function transformSchemas(
82
83
  }
83
84
  schemas.set(pureModel, usage);
84
85
  });
85
- function trimUsage(model: any) {
86
- if (typeof model !== "object") {
87
- return model;
88
- }
89
- const tmpModel = Object.assign({}, model);
90
- const tmpModelKeys = Object.keys(tmpModel).filter((item) => {
91
- return item !== "usage";
92
- });
93
- const ordered = tmpModelKeys.sort().reduce((obj, key) => {
94
- (obj as any)[key] = trimUsage(tmpModel[key]);
95
- return obj;
96
- }, {});
97
- return ordered;
98
- }
86
+
99
87
  function setModelMap(type: Type, schemaContext: SchemaContext) {
100
88
  if (program.stateMap(modelKey).get(type)) {
101
89
  const context = program.stateMap(modelKey).get(type);
@@ -109,15 +97,19 @@ export function transformSchemas(
109
97
  }
110
98
  function getGeneratedModels(model: Type, context: SchemaContext) {
111
99
  if (model.kind === "Model") {
112
- if (model.templateArguments && model.templateArguments.length > 0) {
113
- for (const temp of model.templateArguments) {
114
- if (
115
- !program.stateMap(modelKey).get(temp) ||
116
- !program.stateMap(modelKey).get(temp)?.includes(context)
117
- ) {
118
- getGeneratedModels(temp, context);
119
- break;
120
- }
100
+ if (
101
+ model.templateMapper &&
102
+ model.templateMapper.args &&
103
+ model.templateMapper.args.length > 0
104
+ ) {
105
+ const temp = model.templateMapper.args[0];
106
+ if (
107
+ temp &&
108
+ temp.kind === "Model" &&
109
+ (!program.stateMap(modelKey).get(temp) ||
110
+ !program.stateMap(modelKey).get(temp)?.includes(context))
111
+ ) {
112
+ getGeneratedModels(temp, context);
121
113
  }
122
114
  }
123
115
 
@@ -1,5 +1,5 @@
1
1
  import {
2
- DpgContext,
2
+ SdkContext,
3
3
  listClients
4
4
  } from "@azure-tools/typespec-client-generator-core";
5
5
  import {
@@ -11,14 +11,14 @@ import {
11
11
  } from "@azure-tools/rlc-common";
12
12
  import { getDoc, NoTarget, Program } from "@typespec/compiler";
13
13
  import { getAuthentication } from "@typespec/http";
14
- import { getDefaultService } from "./transform.js";
15
14
  import { reportDiagnostic } from "../lib.js";
15
+ import { getDefaultService } from "../modelUtils.js";
16
16
 
17
17
  export function transformRLCOptions(
18
18
  program: Program,
19
19
  emitterOptions: RLCOptions,
20
20
  emitterOutputDir: string,
21
- dpgContext: DpgContext
21
+ dpgContext: SdkContext
22
22
  ): RLCOptions {
23
23
  // Extract the options from emitter option
24
24
  const options = extractRLCOptions(program, emitterOptions, emitterOutputDir);