@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
@@ -102,3 +102,14 @@ export interface ModelValueGet200Response extends HttpResponse {
102
102
  export interface ModelValuePut204Response extends HttpResponse {
103
103
  status: "204";
104
104
  }
105
+
106
+ /** The request has succeeded. */
107
+ export interface NullableFloatValueGet200Response extends HttpResponse {
108
+ status: "200";
109
+ body: (number | null)[];
110
+ }
111
+
112
+ /** There is no content to send for this request, but the headers may be useful. */
113
+ export interface NullableFloatValuePut204Response extends HttpResponse {
114
+ status: "204";
115
+ }
@@ -1,5 +1,8 @@
1
- emitters:
2
- "../../../../../../../../../../../packages/typespec-ts/dist/src/index.js":
1
+ emit:
2
+ - "@azure-tools/typespec-ts"
3
+ options:
4
+ "@azure-tools/typespec-ts":
5
+ "emitter-output-dir": "{project-root}"
3
6
  generateMetadata: false
4
7
  generateTest: false
5
8
  addCredentials: false
@@ -52,7 +52,7 @@
52
52
  "autoPublish": false,
53
53
  "dependencies": {
54
54
  "@azure/core-auth": "^1.3.0",
55
- "@azure-rest/core-client": "^1.1.0",
55
+ "@azure-rest/core-client": "^1.1.2",
56
56
  "@azure/core-rest-pipeline": "^1.8.0",
57
57
  "@azure/logger": "^1.0.0",
58
58
  "tslib": "^2.2.0"
@@ -67,7 +67,7 @@
67
67
  "prettier": "^2.5.1",
68
68
  "rimraf": "^3.0.0",
69
69
  "source-map-support": "^0.5.9",
70
- "typescript": "~4.8.0",
70
+ "typescript": "~5.0.0",
71
71
  "@rollup/plugin-commonjs": "^24.0.0",
72
72
  "@rollup/plugin-json": "^6.0.0",
73
73
  "@rollup/plugin-multi-entry": "^6.0.0",
@@ -1,5 +1,8 @@
1
- emitters:
2
- "../../../../../../../../../../../packages/typespec-ts/dist/src/index.js":
1
+ emit:
2
+ - "@azure-tools/typespec-ts"
3
+ options:
4
+ "@azure-tools/typespec-ts":
5
+ "emitter-output-dir": "{project-root}"
3
6
  azureSdkForJs: false
4
7
  addCredentials: false
5
8
  isCadlTest: true
@@ -1,5 +1,8 @@
1
- emitters:
2
- "../../../../../../../../../../../packages/typespec-ts/dist/src/index.js":
1
+ emit:
2
+ - "@azure-tools/typespec-ts"
3
+ options:
4
+ "@azure-tools/typespec-ts":
5
+ "emitter-output-dir": "{project-root}"
3
6
  generateMetadata: false
4
7
  generateTest: true
5
8
  addCredentials: false
@@ -1,5 +1,8 @@
1
- emitters:
2
- "../../../../../../../../../../../packages/typespec-ts/dist/src/index.js":
1
+ emit:
2
+ - "@azure-tools/typespec-ts"
3
+ options:
4
+ "@azure-tools/typespec-ts":
5
+ "emitter-output-dir": "{project-root}"
3
6
  generateMetadata: false
4
7
  generateTest: true
5
8
  addCredentials: false
@@ -1,12 +1,12 @@
1
- # ResiliencyDevDriven REST client library for JavaScript
1
+ # AzureCore REST client library for JavaScript
2
2
 
3
- DPG Swagger that tests our ability to grow up.
3
+ Illustrates bodies templated with Azure Core
4
4
 
5
5
  **Please rely heavily on our [REST client docs](https://github.com/Azure/azure-sdk-for-js/blob/main/documentation/rest-clients.md) to use this library**
6
6
 
7
7
  Key links:
8
8
 
9
- - [Package (NPM)](https://www.npmjs.com/package/@msinternal/dev-driven)
9
+ - [Package (NPM)](https://www.npmjs.com/package/@msinternal/azurecore)
10
10
 
11
11
  ## Getting started
12
12
 
@@ -18,15 +18,15 @@ Key links:
18
18
 
19
19
  - You must have an [Azure subscription](https://azure.microsoft.com/free/) to use this package.
20
20
 
21
- ### Install the `@msinternal/dev-driven` package
21
+ ### Install the `@msinternal/azurecore` package
22
22
 
23
- Install the ResiliencyDevDriven REST client REST client library for JavaScript with `npm`:
23
+ Install the AzureCore REST client REST client library for JavaScript with `npm`:
24
24
 
25
25
  ```bash
26
- npm install @msinternal/dev-driven
26
+ npm install @msinternal/azurecore
27
27
  ```
28
28
 
29
- ### Create and authenticate a `ResiliencyDevDrivenClient`
29
+ ### Create and authenticate a `AzureCoreClient`
30
30
 
31
31
  To use an [Azure Active Directory (AAD) token credential](https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/identity/identity/samples/AzureIdentityExamples.md#authenticating-with-a-pre-fetched-access-token),
32
32
  provide an instance of the desired credential type obtained from the
@@ -6,7 +6,7 @@
6
6
  "dtsRollup": {
7
7
  "enabled": true,
8
8
  "untrimmedFilePath": "",
9
- "publicTrimmedFilePath": "./types/lro-basic.d.ts"
9
+ "publicTrimmedFilePath": "./types/azurecore.d.ts"
10
10
  },
11
11
  "messages": {
12
12
  "tsdocMessageReporting": { "default": { "logLevel": "none" } },
@@ -1,20 +1,20 @@
1
1
  {
2
- "name": "@msinternal/dev-driven",
2
+ "name": "@msinternal/azurecore",
3
3
  "sdk-type": "client",
4
4
  "author": "Microsoft Corporation",
5
5
  "version": "1.0.0",
6
- "description": "Dev Driven Test Service",
6
+ "description": "AzureCore Test Service",
7
7
  "keywords": ["node", "azure", "cloud", "typescript", "browser", "isomorphic"],
8
8
  "license": "MIT",
9
9
  "main": "dist/index.js",
10
10
  "module": "./dist-esm/index.js",
11
- "types": "./types/dev-driven.d.ts",
11
+ "types": "./types/azurecore.d.ts",
12
12
  "repository": "github:Azure/azure-sdk-for-js",
13
13
  "bugs": { "url": "https://github.com/Azure/azure-sdk-for-js/issues" },
14
14
  "files": [
15
15
  "dist/",
16
16
  "dist-esm/",
17
- "types/dev-driven.d.ts",
17
+ "types/azurecore.d.ts",
18
18
  "README.md",
19
19
  "LICENSE",
20
20
  "review/*"
@@ -52,7 +52,7 @@
52
52
  "autoPublish": false,
53
53
  "dependencies": {
54
54
  "@azure/core-auth": "^1.3.0",
55
- "@azure-rest/core-client": "^1.1.0",
55
+ "@azure-rest/core-client": "^1.1.2",
56
56
  "@azure/core-rest-pipeline": "^1.8.0",
57
57
  "@azure/logger": "^1.0.0",
58
58
  "tslib": "^2.2.0",
@@ -68,7 +68,7 @@
68
68
  "prettier": "^2.5.1",
69
69
  "rimraf": "^3.0.0",
70
70
  "source-map-support": "^0.5.9",
71
- "typescript": "~4.8.0",
71
+ "typescript": "~5.0.0",
72
72
  "@rollup/plugin-commonjs": "^24.0.0",
73
73
  "@rollup/plugin-json": "^6.0.0",
74
74
  "@rollup/plugin-multi-entry": "^6.0.0",
@@ -0,0 +1,31 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT license.
3
+
4
+ import { getClient, ClientOptions } from "@azure-rest/core-client";
5
+ import { AzureCoreClient } from "./clientDefinitions";
6
+
7
+ /**
8
+ * Initialize a new instance of `AzureCoreClient`
9
+ * @param options type: ClientOptions, the parameter for all optional parameters
10
+ */
11
+ export default function createClient(
12
+ options: ClientOptions = {}
13
+ ): AzureCoreClient {
14
+ const baseUrl = options.baseUrl ?? `http://localhost:3000`;
15
+ options.apiVersion = options.apiVersion ?? "2022-12-01-preview";
16
+ const userAgentInfo = `azsdk-js-azurecore-rest/1.0.0`;
17
+ const userAgentPrefix =
18
+ options.userAgentOptions && options.userAgentOptions.userAgentPrefix
19
+ ? `${options.userAgentOptions.userAgentPrefix} ${userAgentInfo}`
20
+ : `${userAgentInfo}`;
21
+ options = {
22
+ ...options,
23
+ userAgentOptions: {
24
+ userAgentPrefix,
25
+ },
26
+ };
27
+
28
+ const client = getClient(baseUrl, options) as AzureCoreClient;
29
+
30
+ return client;
31
+ }
@@ -0,0 +1,108 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT license.
3
+
4
+ import {
5
+ CreateOrUpdateParameters,
6
+ CreateOrReplaceParameters,
7
+ GetParameters,
8
+ DeleteParameters,
9
+ ListParameters,
10
+ ListWithPageParameters,
11
+ ListWithCustomPageModelParameters,
12
+ ExportParameters,
13
+ } from "./parameters";
14
+ import {
15
+ CreateOrUpdate200Response,
16
+ CreateOrUpdate201Response,
17
+ CreateOrUpdateDefaultResponse,
18
+ CreateOrReplace200Response,
19
+ CreateOrReplace201Response,
20
+ CreateOrReplaceDefaultResponse,
21
+ Get200Response,
22
+ GetDefaultResponse,
23
+ Delete204Response,
24
+ DeleteDefaultResponse,
25
+ List200Response,
26
+ ListDefaultResponse,
27
+ ListWithPage200Response,
28
+ ListWithPageDefaultResponse,
29
+ ListWithCustomPageModel200Response,
30
+ ListWithCustomPageModelDefaultResponse,
31
+ Export200Response,
32
+ ExportDefaultResponse,
33
+ } from "./responses";
34
+ import { Client, StreamableMethod } from "@azure-rest/core-client";
35
+
36
+ export interface CreateOrUpdate {
37
+ /** Creates or updates a User */
38
+ patch(
39
+ options: CreateOrUpdateParameters
40
+ ): StreamableMethod<
41
+ | CreateOrUpdate200Response
42
+ | CreateOrUpdate201Response
43
+ | CreateOrUpdateDefaultResponse
44
+ >;
45
+ /** Creates or replaces a User */
46
+ put(
47
+ options: CreateOrReplaceParameters
48
+ ): StreamableMethod<
49
+ | CreateOrReplace200Response
50
+ | CreateOrReplace201Response
51
+ | CreateOrReplaceDefaultResponse
52
+ >;
53
+ /** Gets a User */
54
+ get(
55
+ options?: GetParameters
56
+ ): StreamableMethod<Get200Response | GetDefaultResponse>;
57
+ /** Deletes a User */
58
+ delete(
59
+ options?: DeleteParameters
60
+ ): StreamableMethod<Delete204Response | DeleteDefaultResponse>;
61
+ }
62
+
63
+ export interface List {
64
+ /** Lists all Users */
65
+ get(
66
+ options?: ListParameters
67
+ ): StreamableMethod<List200Response | ListDefaultResponse>;
68
+ }
69
+
70
+ export interface ListWithPage {
71
+ /** List with Azure.Core.Page<>. */
72
+ get(
73
+ options?: ListWithPageParameters
74
+ ): StreamableMethod<ListWithPage200Response | ListWithPageDefaultResponse>;
75
+ }
76
+
77
+ export interface ListWithCustomPageModel {
78
+ /** List with custom page model. */
79
+ get(
80
+ options?: ListWithCustomPageModelParameters
81
+ ): StreamableMethod<
82
+ ListWithCustomPageModel200Response | ListWithCustomPageModelDefaultResponse
83
+ >;
84
+ }
85
+
86
+ export interface Export {
87
+ /** Exports a User */
88
+ post(
89
+ options: ExportParameters
90
+ ): StreamableMethod<Export200Response | ExportDefaultResponse>;
91
+ }
92
+
93
+ export interface Routes {
94
+ /** Resource for '/azure/core/basic/users/\{id\}' has methods for the following verbs: patch, put, get, delete */
95
+ (path: "/azure/core/basic/users/{id}", id: number): CreateOrUpdate;
96
+ /** Resource for '/azure/core/basic/users' has methods for the following verbs: get */
97
+ (path: "/azure/core/basic/users"): List;
98
+ /** Resource for '/azure/core/basic/page' has methods for the following verbs: get */
99
+ (path: "/azure/core/basic/page"): ListWithPage;
100
+ /** Resource for '/azure/core/basic/custom-page' has methods for the following verbs: get */
101
+ (path: "/azure/core/basic/custom-page"): ListWithCustomPageModel;
102
+ /** Resource for '/azure/core/basic/users/\{id\}:export' has methods for the following verbs: post */
103
+ (path: "/azure/core/basic/users/{id}:export", id: number): Export;
104
+ }
105
+
106
+ export type AzureCoreClient = Client & {
107
+ path: Routes;
108
+ };
@@ -1,9 +1,9 @@
1
1
  // Copyright (c) Microsoft Corporation.
2
2
  // Licensed under the MIT license.
3
3
 
4
- import ResiliencyDevDriven from "./resiliencyDevDriven";
4
+ import AzureCoreClient from "./azureCoreClient";
5
5
 
6
- export * from "./resiliencyDevDriven";
6
+ export * from "./azureCoreClient";
7
7
  export * from "./parameters";
8
8
  export * from "./responses";
9
9
  export * from "./clientDefinitions";
@@ -11,5 +11,6 @@ export * from "./isUnexpected";
11
11
  export * from "./models";
12
12
  export * from "./outputModels";
13
13
  export * from "./paginateHelper";
14
+ export * from "./serializeHelper";
14
15
 
15
- export default ResiliencyDevDriven;
16
+ export default AzureCoreClient;
@@ -0,0 +1,178 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT license.
3
+
4
+ import {
5
+ CreateOrUpdate200Response,
6
+ CreateOrUpdate201Response,
7
+ CreateOrUpdateDefaultResponse,
8
+ CreateOrReplace200Response,
9
+ CreateOrReplace201Response,
10
+ CreateOrReplaceDefaultResponse,
11
+ Get200Response,
12
+ GetDefaultResponse,
13
+ Delete204Response,
14
+ DeleteDefaultResponse,
15
+ List200Response,
16
+ ListDefaultResponse,
17
+ ListWithPage200Response,
18
+ ListWithPageDefaultResponse,
19
+ ListWithCustomPageModel200Response,
20
+ ListWithCustomPageModelDefaultResponse,
21
+ Export200Response,
22
+ ExportDefaultResponse,
23
+ } from "./responses";
24
+
25
+ const responseMap: Record<string, string[]> = {
26
+ "PATCH /azure/core/basic/users/{id}": ["200", "201"],
27
+ "PUT /azure/core/basic/users/{id}": ["200", "201"],
28
+ "GET /azure/core/basic/users/{id}": ["200"],
29
+ "DELETE /azure/core/basic/users/{id}": ["204"],
30
+ "GET /azure/core/basic/users": ["200"],
31
+ "GET /azure/core/basic/page": ["200"],
32
+ "GET /azure/core/basic/custom-page": ["200"],
33
+ "POST /azure/core/basic/users/{id}:export": ["200"],
34
+ };
35
+
36
+ export function isUnexpected(
37
+ response:
38
+ | CreateOrUpdate200Response
39
+ | CreateOrUpdate201Response
40
+ | CreateOrUpdateDefaultResponse
41
+ ): response is CreateOrUpdateDefaultResponse;
42
+ export function isUnexpected(
43
+ response:
44
+ | CreateOrReplace200Response
45
+ | CreateOrReplace201Response
46
+ | CreateOrReplaceDefaultResponse
47
+ ): response is CreateOrReplaceDefaultResponse;
48
+ export function isUnexpected(
49
+ response: Get200Response | GetDefaultResponse
50
+ ): response is GetDefaultResponse;
51
+ export function isUnexpected(
52
+ response: Delete204Response | DeleteDefaultResponse
53
+ ): response is DeleteDefaultResponse;
54
+ export function isUnexpected(
55
+ response: List200Response | ListDefaultResponse
56
+ ): response is ListDefaultResponse;
57
+ export function isUnexpected(
58
+ response: ListWithPage200Response | ListWithPageDefaultResponse
59
+ ): response is ListWithPageDefaultResponse;
60
+ export function isUnexpected(
61
+ response:
62
+ | ListWithCustomPageModel200Response
63
+ | ListWithCustomPageModelDefaultResponse
64
+ ): response is ListWithCustomPageModelDefaultResponse;
65
+ export function isUnexpected(
66
+ response: Export200Response | ExportDefaultResponse
67
+ ): response is ExportDefaultResponse;
68
+ export function isUnexpected(
69
+ response:
70
+ | CreateOrUpdate200Response
71
+ | CreateOrUpdate201Response
72
+ | CreateOrUpdateDefaultResponse
73
+ | CreateOrReplace200Response
74
+ | CreateOrReplace201Response
75
+ | CreateOrReplaceDefaultResponse
76
+ | Get200Response
77
+ | GetDefaultResponse
78
+ | Delete204Response
79
+ | DeleteDefaultResponse
80
+ | List200Response
81
+ | ListDefaultResponse
82
+ | ListWithPage200Response
83
+ | ListWithPageDefaultResponse
84
+ | ListWithCustomPageModel200Response
85
+ | ListWithCustomPageModelDefaultResponse
86
+ | Export200Response
87
+ | ExportDefaultResponse
88
+ ): response is
89
+ | CreateOrUpdateDefaultResponse
90
+ | CreateOrReplaceDefaultResponse
91
+ | GetDefaultResponse
92
+ | DeleteDefaultResponse
93
+ | ListDefaultResponse
94
+ | ListWithPageDefaultResponse
95
+ | ListWithCustomPageModelDefaultResponse
96
+ | ExportDefaultResponse {
97
+ const lroOriginal = response.headers["x-ms-original-url"];
98
+ const url = new URL(lroOriginal ?? response.request.url);
99
+ const method = response.request.method;
100
+ let pathDetails = responseMap[`${method} ${url.pathname}`];
101
+ if (!pathDetails) {
102
+ pathDetails = getParametrizedPathSuccess(method, url.pathname);
103
+ }
104
+ return !pathDetails.includes(response.status);
105
+ }
106
+
107
+ function getParametrizedPathSuccess(method: string, path: string): string[] {
108
+ const pathParts = path.split("/");
109
+
110
+ // Traverse list to match the longest candidate
111
+ // matchedLen: the length of candidate path
112
+ // matchedValue: the matched status code array
113
+ let matchedLen = -1,
114
+ matchedValue: string[] = [];
115
+
116
+ // Iterate the responseMap to find a match
117
+ for (const [key, value] of Object.entries(responseMap)) {
118
+ // Extracting the path from the map key which is in format
119
+ // GET /path/foo
120
+ if (!key.startsWith(method)) {
121
+ continue;
122
+ }
123
+ const candidatePath = getPathFromMapKey(key);
124
+ // Get each part of the url path
125
+ const candidateParts = candidatePath.split("/");
126
+
127
+ // track if we have found a match to return the values found.
128
+ let found = true;
129
+ for (
130
+ let i = candidateParts.length - 1, j = pathParts.length - 1;
131
+ i >= 1 && j >= 1;
132
+ i--, j--
133
+ ) {
134
+ if (
135
+ candidateParts[i]?.startsWith("{") &&
136
+ candidateParts[i]?.indexOf("}") !== -1
137
+ ) {
138
+ const start = candidateParts[i]!.indexOf("}") + 1,
139
+ end = candidateParts[i]?.length;
140
+ // If the current part of the candidate is a "template" part
141
+ // Try to use the suffix of pattern to match the path
142
+ // {guid} ==> $
143
+ // {guid}:export ==> :export$
144
+ const isMatched = new RegExp(
145
+ `${candidateParts[i]?.slice(start, end)}`
146
+ ).test(pathParts[j] || "");
147
+
148
+ if (!isMatched) {
149
+ found = false;
150
+ break;
151
+ }
152
+ continue;
153
+ }
154
+
155
+ // If the candidate part is not a template and
156
+ // the parts don't match mark the candidate as not found
157
+ // to move on with the next candidate path.
158
+ if (candidateParts[i] !== pathParts[j]) {
159
+ found = false;
160
+ break;
161
+ }
162
+ }
163
+
164
+ // We finished evaluating the current candidate parts
165
+ // Update the matched value if and only if we found the longer pattern
166
+ if (found && candidatePath.length > matchedLen) {
167
+ matchedLen = candidatePath.length;
168
+ matchedValue = value;
169
+ }
170
+ }
171
+
172
+ return matchedValue;
173
+ }
174
+
175
+ function getPathFromMapKey(mapKey: string): string {
176
+ const pathStart = mapKey.indexOf("/");
177
+ return mapKey.slice(pathStart);
178
+ }
@@ -0,0 +1,18 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT license.
3
+
4
+ /** Details about a user. */
5
+ export interface User {
6
+ /** The user's name. */
7
+ name: string;
8
+ /** The user's order list */
9
+ orders?: Array<UserOrder>;
10
+ }
11
+
12
+ /** UserOrder for testing list with expand. */
13
+ export interface UserOrder {
14
+ /** The user's id. */
15
+ userId: number;
16
+ /** The user's order detail */
17
+ detail: string;
18
+ }
@@ -0,0 +1,32 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT license.
3
+
4
+ import { Paged } from "@azure/core-paging";
5
+
6
+ /** Details about a user. */
7
+ export interface UserOutput {
8
+ /** The user's id. */
9
+ readonly id: number;
10
+ /** The user's name. */
11
+ name: string;
12
+ /** The user's order list */
13
+ orders?: Array<UserOrderOutput>;
14
+ /** The entity tag for this resource. */
15
+ readonly etag: string;
16
+ }
17
+
18
+ /** UserOrder for testing list with expand. */
19
+ export interface UserOrderOutput {
20
+ /** The user's id. */
21
+ readonly id: number;
22
+ /** The user's id. */
23
+ userId: number;
24
+ /** The user's order detail */
25
+ detail: string;
26
+ }
27
+
28
+ /** Paged collection of User items */
29
+ export type UserListOutput = Paged<UserOutput>;
30
+ /** Paged collection of User items */
31
+ export type PagedUserOutput = Paged<UserOutput>;
32
+ export type UserListResultsOutput = Paged<UserOutput>;
@@ -45,9 +45,13 @@ export interface PagingOptions<TResponse> {
45
45
  * where the page items are found. The default value is `value`.
46
46
  * This type will allow us to provide strongly typed Iterator based on the response we get as second parameter
47
47
  */
48
- export type PaginateReturn<TResult> = TResult extends {
49
- body: { value?: infer TPage };
50
- }
48
+ export type PaginateReturn<TResult> = TResult extends
49
+ | {
50
+ body: { value?: infer TPage };
51
+ }
52
+ | {
53
+ body: { items?: infer TPage };
54
+ }
51
55
  ? GetArrayType<TPage>
52
56
  : Array<unknown>;
53
57
 
@@ -66,8 +70,10 @@ export function paginate<TResponse extends PathUncheckedResponse>(
66
70
  // Extract element type from initial response
67
71
  type TElement = PaginateReturn<TResponse>;
68
72
  let firstRun = true;
69
- const itemName = "value";
70
- const nextLinkName = "nextLink";
73
+ // We need to check the response for success before trying to inspect it looking for
74
+ // the properties to use for nextLink and itemName
75
+ checkPagingRequest(initialResponse);
76
+ const { itemName, nextLinkName } = getPaginationProperties(initialResponse);
71
77
  const { customGetPage } = options;
72
78
  const pagedResult: PagedResult<TElement[]> = {
73
79
  firstPageLink: "",
@@ -152,3 +158,47 @@ function checkPagingRequest(response: PathUncheckedResponse): void {
152
158
  );
153
159
  }
154
160
  }
161
+
162
+ /**
163
+ * Extracts the itemName and nextLinkName from the initial response to use them for pagination
164
+ */
165
+ function getPaginationProperties(initialResponse: PathUncheckedResponse) {
166
+ // Build a set with the passed custom nextLinkNames
167
+ const nextLinkNames = new Set(["nextLink"]);
168
+
169
+ // Build a set with the passed custom set of itemNames
170
+ const itemNames = new Set(["value", "items"]);
171
+
172
+ let nextLinkName: string | undefined;
173
+ let itemName: string | undefined;
174
+
175
+ for (const name of nextLinkNames) {
176
+ const nextLink = (initialResponse.body as Record<string, unknown>)[
177
+ name
178
+ ] as string;
179
+ if (nextLink) {
180
+ nextLinkName = name;
181
+ break;
182
+ }
183
+ }
184
+
185
+ for (const name of itemNames) {
186
+ const item = (initialResponse.body as Record<string, unknown>)[
187
+ name
188
+ ] as string;
189
+ if (item) {
190
+ itemName = name;
191
+ break;
192
+ }
193
+ }
194
+
195
+ if (!itemName) {
196
+ throw new Error(
197
+ `Couldn't paginate response\n Body doesn't contain an array property with name: ${[
198
+ ...itemNames,
199
+ ].join(" OR ")}`
200
+ );
201
+ }
202
+
203
+ return { itemName, nextLinkName };
204
+ }