@azure-tools/typespec-ts 0.14.0 → 0.15.0-alpha.20230822.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 (141) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/dist/src/index.d.ts +1 -5
  3. package/dist/src/index.d.ts.map +1 -1
  4. package/dist/src/index.js +148 -78
  5. package/dist/src/index.js.map +1 -1
  6. package/dist/src/lib.d.ts.map +1 -1
  7. package/dist/src/lib.js +4 -2
  8. package/dist/src/lib.js.map +1 -1
  9. package/dist/src/modular/buildClassicalClient.d.ts +1 -1
  10. package/dist/src/modular/buildClassicalClient.d.ts.map +1 -1
  11. package/dist/src/modular/buildClassicalClient.js +27 -15
  12. package/dist/src/modular/buildClassicalClient.js.map +1 -1
  13. package/dist/src/modular/buildClientContext.d.ts +1 -1
  14. package/dist/src/modular/buildClientContext.d.ts.map +1 -1
  15. package/dist/src/modular/buildClientContext.js +16 -7
  16. package/dist/src/modular/buildClientContext.js.map +1 -1
  17. package/dist/src/modular/buildCodeModel.d.ts.map +1 -1
  18. package/dist/src/modular/buildCodeModel.js +59 -12
  19. package/dist/src/modular/buildCodeModel.js.map +1 -1
  20. package/dist/src/modular/buildOperations.d.ts +2 -1
  21. package/dist/src/modular/buildOperations.d.ts.map +1 -1
  22. package/dist/src/modular/buildOperations.js +25 -29
  23. package/dist/src/modular/buildOperations.js.map +1 -1
  24. package/dist/src/modular/buildProjectFiles.d.ts +2 -2
  25. package/dist/src/modular/buildProjectFiles.d.ts.map +1 -1
  26. package/dist/src/modular/buildProjectFiles.js +284 -145
  27. package/dist/src/modular/buildProjectFiles.js.map +1 -1
  28. package/dist/src/modular/buildRootIndex.d.ts.map +1 -1
  29. package/dist/src/modular/buildRootIndex.js +5 -5
  30. package/dist/src/modular/buildRootIndex.js.map +1 -1
  31. package/dist/src/modular/buildSubpathIndex.d.ts.map +1 -1
  32. package/dist/src/modular/buildSubpathIndex.js +9 -2
  33. package/dist/src/modular/buildSubpathIndex.js.map +1 -1
  34. package/dist/src/modular/emitModels.d.ts +3 -2
  35. package/dist/src/modular/emitModels.d.ts.map +1 -1
  36. package/dist/src/modular/emitModels.js +40 -7
  37. package/dist/src/modular/emitModels.js.map +1 -1
  38. package/dist/src/modular/helpers/clientHelpers.d.ts.map +1 -1
  39. package/dist/src/modular/helpers/clientHelpers.js +5 -3
  40. package/dist/src/modular/helpers/clientHelpers.js.map +1 -1
  41. package/dist/src/modular/helpers/docsHelpers.d.ts +3 -0
  42. package/dist/src/modular/helpers/docsHelpers.d.ts.map +1 -0
  43. package/dist/src/modular/helpers/docsHelpers.js +10 -0
  44. package/dist/src/modular/helpers/docsHelpers.js.map +1 -0
  45. package/dist/src/modular/helpers/operationHelpers.d.ts +11 -4
  46. package/dist/src/modular/helpers/operationHelpers.d.ts.map +1 -1
  47. package/dist/src/modular/helpers/operationHelpers.js +197 -56
  48. package/dist/src/modular/helpers/operationHelpers.js.map +1 -1
  49. package/dist/src/modular/helpers/typeHelpers.d.ts.map +1 -1
  50. package/dist/src/modular/helpers/typeHelpers.js +6 -0
  51. package/dist/src/modular/helpers/typeHelpers.js.map +1 -1
  52. package/dist/src/modular/modularCodeModel.d.ts +2 -0
  53. package/dist/src/modular/modularCodeModel.d.ts.map +1 -1
  54. package/dist/src/transform/transform.d.ts +5 -8
  55. package/dist/src/transform/transform.d.ts.map +1 -1
  56. package/dist/src/transform/transform.js +23 -13
  57. package/dist/src/transform/transform.js.map +1 -1
  58. package/dist/src/transform/transformApiVersionInfo.d.ts +2 -1
  59. package/dist/src/transform/transformApiVersionInfo.d.ts.map +1 -1
  60. package/dist/src/transform/transformApiVersionInfo.js.map +1 -1
  61. package/dist/src/transform/transformHelperFunctionDetails.d.ts +2 -1
  62. package/dist/src/transform/transformHelperFunctionDetails.d.ts.map +1 -1
  63. package/dist/src/transform/transformHelperFunctionDetails.js +4 -10
  64. package/dist/src/transform/transformHelperFunctionDetails.js.map +1 -1
  65. package/dist/src/transform/transformParameters.d.ts +2 -12
  66. package/dist/src/transform/transformParameters.d.ts.map +1 -1
  67. package/dist/src/transform/transformParameters.js +6 -47
  68. package/dist/src/transform/transformParameters.js.map +1 -1
  69. package/dist/src/transform/transformPaths.d.ts +2 -2
  70. package/dist/src/transform/transformPaths.d.ts.map +1 -1
  71. package/dist/src/transform/transformPaths.js.map +1 -1
  72. package/dist/src/transform/transformResponses.d.ts +2 -2
  73. package/dist/src/transform/transformResponses.d.ts.map +1 -1
  74. package/dist/src/transform/transformResponses.js +5 -1
  75. package/dist/src/transform/transformResponses.js.map +1 -1
  76. package/dist/src/transform/transformSchemas.d.ts +2 -2
  77. package/dist/src/transform/transformSchemas.d.ts.map +1 -1
  78. package/dist/src/transform/transformSchemas.js.map +1 -1
  79. package/dist/src/transform/transformTelemetryInfo.d.ts +4 -0
  80. package/dist/src/transform/transformTelemetryInfo.d.ts.map +1 -0
  81. package/dist/src/transform/transformTelemetryInfo.js +42 -0
  82. package/dist/src/transform/transformTelemetryInfo.js.map +1 -0
  83. package/dist/src/transform/transfromRLCOptions.d.ts +4 -2
  84. package/dist/src/transform/transfromRLCOptions.d.ts.map +1 -1
  85. package/dist/src/transform/transfromRLCOptions.js +72 -19
  86. package/dist/src/transform/transfromRLCOptions.js.map +1 -1
  87. package/dist/src/utils/clientUtils.d.ts +2 -1
  88. package/dist/src/utils/clientUtils.d.ts.map +1 -1
  89. package/dist/src/utils/clientUtils.js.map +1 -1
  90. package/dist/src/utils/interfaces.d.ts +13 -0
  91. package/dist/src/utils/interfaces.d.ts.map +1 -0
  92. package/dist/src/utils/interfaces.js +2 -0
  93. package/dist/src/utils/interfaces.js.map +1 -0
  94. package/dist/src/utils/modelUtils.d.ts +1 -1
  95. package/dist/src/utils/modelUtils.d.ts.map +1 -1
  96. package/dist/src/utils/modelUtils.js +25 -20
  97. package/dist/src/utils/modelUtils.js.map +1 -1
  98. package/dist/src/utils/operationUtil.d.ts +15 -4
  99. package/dist/src/utils/operationUtil.d.ts.map +1 -1
  100. package/dist/src/utils/operationUtil.js +65 -1
  101. package/dist/src/utils/operationUtil.js.map +1 -1
  102. package/dist/tsconfig.tsbuildinfo +1 -1
  103. package/package.json +28 -18
  104. package/src/index.ts +231 -129
  105. package/src/lib.ts +4 -2
  106. package/src/modular/buildClassicalClient.ts +33 -16
  107. package/src/modular/buildClientContext.ts +18 -8
  108. package/src/modular/buildCodeModel.ts +71 -13
  109. package/src/modular/buildOperations.ts +31 -36
  110. package/src/modular/buildProjectFiles.ts +329 -162
  111. package/src/modular/buildRootIndex.ts +5 -7
  112. package/src/modular/buildSubpathIndex.ts +9 -2
  113. package/src/modular/emitModels.ts +55 -9
  114. package/src/modular/helpers/clientHelpers.ts +5 -3
  115. package/src/modular/helpers/docsHelpers.ts +10 -0
  116. package/src/modular/helpers/operationHelpers.ts +328 -75
  117. package/src/modular/helpers/typeHelpers.ts +6 -0
  118. package/src/modular/modularCodeModel.ts +2 -0
  119. package/src/transform/transform.ts +24 -31
  120. package/src/transform/transformApiVersionInfo.ts +1 -1
  121. package/src/transform/transformHelperFunctionDetails.ts +12 -11
  122. package/src/transform/transformParameters.ts +20 -63
  123. package/src/transform/transformPaths.ts +5 -5
  124. package/src/transform/transformResponses.ts +10 -6
  125. package/src/transform/transformSchemas.ts +2 -2
  126. package/src/transform/transformTelemetryInfo.ts +72 -0
  127. package/src/transform/transfromRLCOptions.ts +100 -23
  128. package/src/utils/clientUtils.ts +2 -4
  129. package/src/utils/interfaces.ts +14 -0
  130. package/src/utils/modelUtils.ts +18 -11
  131. package/src/utils/operationUtil.ts +92 -6
  132. package/dist/src/modular/helpers/fixmeHelpers.d.ts +0 -2
  133. package/dist/src/modular/helpers/fixmeHelpers.d.ts.map +0 -1
  134. package/dist/src/modular/helpers/fixmeHelpers.js +0 -4
  135. package/dist/src/modular/helpers/fixmeHelpers.js.map +0 -1
  136. package/dist/src/modular/helpers/parameterHelpers.d.ts +0 -3
  137. package/dist/src/modular/helpers/parameterHelpers.d.ts.map +0 -1
  138. package/dist/src/modular/helpers/parameterHelpers.js +0 -16
  139. package/dist/src/modular/helpers/parameterHelpers.js.map +0 -1
  140. package/src/modular/helpers/fixmeHelpers.ts +0 -3
  141. package/src/modular/helpers/parameterHelpers.ts +0 -17
@@ -1,10 +1,7 @@
1
1
  // Copyright (c) Microsoft Corporation.
2
2
  // Licensed under the MIT License.
3
3
 
4
- import {
5
- SdkClient,
6
- SdkContext
7
- } from "@azure-tools/typespec-client-generator-core";
4
+ import { SdkClient } from "@azure-tools/typespec-client-generator-core";
8
5
  import {
9
6
  ImportKind,
10
7
  NameType,
@@ -19,7 +16,7 @@ import {
19
16
  SchemaContext,
20
17
  UrlInfo
21
18
  } from "@azure-tools/rlc-common";
22
- import { Program, getDoc } from "@typespec/compiler";
19
+ import { getDoc } from "@typespec/compiler";
23
20
  import { getServers } from "@typespec/http";
24
21
  import { join } from "path";
25
22
  import {
@@ -34,32 +31,19 @@ import { transformToParameterTypes } from "./transformParameters.js";
34
31
  import { transformPaths } from "./transformPaths.js";
35
32
  import { transformToResponseTypes } from "./transformResponses.js";
36
33
  import { transformSchemas } from "./transformSchemas.js";
37
- import { transformRLCOptions } from "./transfromRLCOptions.js";
38
34
  import { transformApiVersionInfo } from "./transformApiVersionInfo.js";
39
35
  import { getClientLroOverload } from "../utils/operationUtil.js";
40
-
41
- export interface RLCSdkContext extends SdkContext {
42
- options?: RLCOptions;
43
- }
36
+ import { transformTelemetryInfo } from "./transformTelemetryInfo.js";
37
+ import { SdkContext } from "../utils/interfaces.js";
44
38
 
45
39
  export async function transformRLCModel(
46
- program: Program,
47
- emitterOptions: RLCOptions,
48
40
  client: SdkClient,
49
- emitterOutputDir: string,
50
- dpgContext: RLCSdkContext
41
+ dpgContext: SdkContext
51
42
  ): Promise<RLCModel> {
52
- const options: RLCOptions = transformRLCOptions(
53
- emitterOptions,
54
- emitterOutputDir,
55
- dpgContext
56
- );
57
- dpgContext.options = options;
43
+ const program = dpgContext.program;
44
+ const options: RLCOptions = dpgContext.rlcOptions!;
58
45
  const srcPath = join(
59
- emitterOutputDir ?? "",
60
- "src",
61
- // When generating modular library, RLC has to go under rest folder
62
- options.isModularLibrary ? "rest" : "",
46
+ dpgContext.generationPathDetail?.rlcSourcesDir ?? "",
63
47
  options.batch && options.batch.length > 1
64
48
  ? normalizeName(client.name.replace("Client", ""), NameType.File)
65
49
  : ""
@@ -90,8 +74,9 @@ export async function transformRLCModel(
90
74
  const helperDetails = transformHelperFunctionDetails(client, dpgContext);
91
75
  // Enrich client-level annotation detail
92
76
  helperDetails.clientLroOverload = getClientLroOverload(paths);
93
- const urlInfo = transformUrlInfo(program, dpgContext);
77
+ const urlInfo = transformUrlInfo(dpgContext);
94
78
  const apiVersionInfo = transformApiVersionInfo(client, dpgContext, urlInfo);
79
+ const telemetryOptions = transformTelemetryInfo(dpgContext, client);
95
80
  return {
96
81
  srcPath,
97
82
  libraryName,
@@ -103,14 +88,13 @@ export async function transformRLCModel(
103
88
  apiVersionInfo,
104
89
  parameters,
105
90
  helperDetails,
106
- urlInfo
91
+ urlInfo,
92
+ telemetryOptions
107
93
  };
108
94
  }
109
95
 
110
- export function transformUrlInfo(
111
- program: Program,
112
- dpgContext: SdkContext
113
- ): UrlInfo | undefined {
96
+ export function transformUrlInfo(dpgContext: SdkContext): UrlInfo | undefined {
97
+ const program = dpgContext.program;
114
98
  const serviceNs = getDefaultService(program)?.type;
115
99
  let endpoint = undefined;
116
100
  const urlParameters: PathParameter[] = [];
@@ -137,7 +121,8 @@ export function transformUrlInfo(
137
121
  property!
138
122
  );
139
123
  urlParameters.push({
140
- name: key,
124
+ oriName: key,
125
+ name: normalizeName(key, NameType.Parameter, true),
141
126
  type: getTypeName(schema),
142
127
  description:
143
128
  (getDoc(program, property) &&
@@ -148,6 +133,14 @@ export function transformUrlInfo(
148
133
  }
149
134
  }
150
135
  }
136
+ if (endpoint && urlParameters.length > 0) {
137
+ for (const param of urlParameters) {
138
+ if (param.oriName) {
139
+ const regexp = new RegExp(`{${param.oriName}}`, "g");
140
+ endpoint = endpoint.replace(regexp, `{${param.name}}`);
141
+ }
142
+ }
143
+ }
151
144
  // Set the default value if missing endpoint parameter
152
145
  if (endpoint == undefined && urlParameters.length === 0) {
153
146
  endpoint = "{endpoint}";
@@ -1,6 +1,5 @@
1
1
  import {
2
2
  SdkClient,
3
- SdkContext,
4
3
  isApiVersion,
5
4
  listOperationGroups,
6
5
  listOperationsInOperationGroup
@@ -19,6 +18,7 @@ import {
19
18
  getSchemaForType,
20
19
  trimUsage
21
20
  } from "../utils/modelUtils.js";
21
+ import { SdkContext } from "../utils/interfaces.js";
22
22
 
23
23
  export function transformApiVersionInfo(
24
24
  client: SdkClient,
@@ -1,7 +1,6 @@
1
1
  import { PagedResultMetadata } from "@azure-tools/typespec-azure-core";
2
2
  import {
3
3
  SdkClient,
4
- SdkContext,
5
4
  listOperationGroups,
6
5
  listOperationsInOperationGroup
7
6
  } from "@azure-tools/typespec-client-generator-core";
@@ -11,9 +10,10 @@ import { getHttpOperation, HttpOperation } from "@typespec/http";
11
10
  import {
12
11
  hasPagingOperations,
13
12
  extractPagedMetadataNested,
14
- hasPollingOperations
13
+ hasPollingOperations,
14
+ getSpecialSerializeInfo
15
15
  } from "../utils/operationUtil.js";
16
- import { getSpecialSerializeInfo } from "./transformParameters.js";
16
+ import { SdkContext } from "../utils/interfaces.js";
17
17
 
18
18
  export function transformHelperFunctionDetails(
19
19
  client: SdkClient,
@@ -168,12 +168,7 @@ function extractPageDetailFromCore(
168
168
  }
169
169
 
170
170
  function parseNextLinkName(paged: PagedResultMetadata): string | undefined {
171
- const pathComponents = paged.nextLinkPath?.split(".");
172
- if (pathComponents) {
173
- // TODO: This logic breaks down if there actually is a dotted path.
174
- return pathComponents[pathComponents.length - 1];
175
- }
176
- return undefined;
171
+ return paged.nextLinkProperty?.name;
177
172
  }
178
173
 
179
174
  function parseItemName(paged: PagedResultMetadata): string | undefined {
@@ -204,7 +199,10 @@ function extractSpecialSerializeInfo(
204
199
  for (const op of operations) {
205
200
  const route = ignoreDiagnostics(getHttpOperation(program, op));
206
201
  route.parameters.parameters.forEach((parameter) => {
207
- const serializeInfo = getSpecialSerializeInfo(parameter);
202
+ const serializeInfo = getSpecialSerializeInfo(
203
+ parameter.type,
204
+ (parameter as any).format
205
+ );
208
206
  hasMultiCollection = hasMultiCollection
209
207
  ? hasMultiCollection
210
208
  : serializeInfo.hasMultiCollection;
@@ -227,7 +225,10 @@ function extractSpecialSerializeInfo(
227
225
  for (const clientOp of clientOperations) {
228
226
  const route = ignoreDiagnostics(getHttpOperation(program, clientOp));
229
227
  route.parameters.parameters.forEach((parameter) => {
230
- const serializeInfo = getSpecialSerializeInfo(parameter);
228
+ const serializeInfo = getSpecialSerializeInfo(
229
+ parameter.type,
230
+ (parameter as any).format
231
+ );
231
232
  hasMultiCollection = hasMultiCollection
232
233
  ? hasMultiCollection
233
234
  : serializeInfo.hasMultiCollection;
@@ -31,6 +31,7 @@ import {
31
31
  import {
32
32
  getOperationGroupName,
33
33
  getOperationName,
34
+ getSpecialSerializeInfo,
34
35
  isBinaryPayload
35
36
  } from "../utils/operationUtil.js";
36
37
  import {
@@ -39,12 +40,12 @@ import {
39
40
  listOperationsInOperationGroup,
40
41
  isApiVersion
41
42
  } from "@azure-tools/typespec-client-generator-core";
42
- import { RLCSdkContext } from "./transform.js";
43
+ import { SdkContext } from "../utils/interfaces.js";
43
44
 
44
45
  export function transformToParameterTypes(
45
46
  importDetails: Map<ImportKind, Set<string>>,
46
47
  client: SdkClient,
47
- dpgContext: RLCSdkContext
48
+ dpgContext: SdkContext
48
49
  ): OperationParameter[] {
49
50
  const program = dpgContext.program;
50
51
  const operationGroups = listOperationGroups(dpgContext, client);
@@ -114,7 +115,7 @@ export function transformToParameterTypes(
114
115
  }
115
116
 
116
117
  function getParameterMetadata(
117
- dpgContext: RLCSdkContext,
118
+ dpgContext: SdkContext,
118
119
  paramType: "query" | "path" | "header",
119
120
  parameter: HttpOperationParameter
120
121
  ): ParameterMetadata {
@@ -140,7 +141,10 @@ function getParameterMetadata(
140
141
  type === "number[]" ||
141
142
  type === "Array<number>"
142
143
  ) {
143
- const serializeInfo = getSpecialSerializeInfo(parameter);
144
+ const serializeInfo = getSpecialSerializeInfo(
145
+ parameter.type,
146
+ (parameter as any).format
147
+ );
144
148
  if (
145
149
  serializeInfo.hasMultiCollection ||
146
150
  serializeInfo.hasPipeCollection ||
@@ -180,7 +184,7 @@ function getParameterName(name: string) {
180
184
  }
181
185
 
182
186
  function transformQueryParameters(
183
- dpgContext: RLCSdkContext,
187
+ dpgContext: SdkContext,
184
188
  parameters: HttpOperationParameters
185
189
  ): ParameterMetadata[] {
186
190
  const queryParameters = parameters.parameters.filter(
@@ -207,7 +211,7 @@ function transformPathParameters() {
207
211
  }
208
212
 
209
213
  function transformHeaderParameters(
210
- dpgContext: RLCSdkContext,
214
+ dpgContext: SdkContext,
211
215
  parameters: HttpOperationParameters
212
216
  ): ParameterMetadata[] {
213
217
  const headerParameters = parameters.parameters.filter(
@@ -222,7 +226,7 @@ function transformHeaderParameters(
222
226
  }
223
227
 
224
228
  function transformBodyParameters(
225
- dpgContext: RLCSdkContext,
229
+ dpgContext: SdkContext,
226
230
  parameters: HttpOperationParameters,
227
231
  headers: ParameterMetadata[],
228
232
  importedModels: Set<string>,
@@ -264,7 +268,7 @@ function transformBodyParameters(
264
268
  }
265
269
 
266
270
  function transformNormalBody(
267
- dpgContext: RLCSdkContext,
271
+ dpgContext: SdkContext,
268
272
  bodyType: Type,
269
273
  parameters: HttpOperationParameters,
270
274
  importedModels: Set<string>,
@@ -307,7 +311,7 @@ function transformNormalBody(
307
311
  }
308
312
 
309
313
  function transformMultiFormBody(
310
- dpgContext: RLCSdkContext,
314
+ dpgContext: SdkContext,
311
315
  bodyType: Type,
312
316
  parameters: HttpOperationParameters,
313
317
  importedModels: Set<string>
@@ -374,7 +378,7 @@ function transformMultiFormBody(
374
378
  }
375
379
 
376
380
  function getBodyDetail(
377
- dpgContext: RLCSdkContext,
381
+ dpgContext: SdkContext,
378
382
  bodyType: Type,
379
383
  headers: ParameterMetadata[]
380
384
  ) {
@@ -389,7 +393,7 @@ function getBodyDetail(
389
393
  }
390
394
 
391
395
  function extractNameFromCadlType(
392
- dpgContext: RLCSdkContext,
396
+ dpgContext: SdkContext,
393
397
  cadlType: Type,
394
398
  importedModels: Set<string>,
395
399
  headers?: ParameterMetadata[]
@@ -402,7 +406,10 @@ function extractNameFromCadlType(
402
406
  if (importedNames) {
403
407
  importedNames.forEach(importedModels.add, importedModels);
404
408
  }
405
- let typeName = getTypeName(bodySchema);
409
+ let typeName = getTypeName(bodySchema, [
410
+ SchemaContext.Input,
411
+ SchemaContext.Exception
412
+ ]);
406
413
  if (isAnonymousModel(bodySchema)) {
407
414
  // Handle anonymous Model
408
415
  return generateAnomymousModelSigniture(bodySchema, importedModels);
@@ -451,7 +458,7 @@ function generateAnomymousModelSigniture(
451
458
  }
452
459
 
453
460
  function extractDescriptionsFromBody(
454
- dpgContext: RLCSdkContext,
461
+ dpgContext: SdkContext,
455
462
  bodyType: Type,
456
463
  parameters: HttpOperationParameters
457
464
  ) {
@@ -467,53 +474,3 @@ function extractDescriptionsFromBody(
467
474
  );
468
475
  return description ? [description] : [];
469
476
  }
470
-
471
- export function getSpecialSerializeInfo(parameter: HttpOperationParameter) {
472
- let hasMultiCollection = false;
473
- let hasPipeCollection = false;
474
- let hasSsvCollection = false;
475
- let hasTsvCollection = false;
476
- let hasCsvCollection = false;
477
- const descriptions = [];
478
- const collectionInfo = [];
479
- if (
480
- (parameter.type === "query" || parameter.type === "header") &&
481
- (parameter as any).format === "multi"
482
- ) {
483
- hasMultiCollection = true;
484
- descriptions.push("buildMultiCollection");
485
- collectionInfo.push("multi");
486
- }
487
- if (parameter.type === "query" && (parameter as any).format === "ssv") {
488
- hasSsvCollection = true;
489
- descriptions.push("buildSsvCollection");
490
- collectionInfo.push("ssv");
491
- }
492
-
493
- if (parameter.type === "query" && (parameter as any).format === "tsv") {
494
- hasTsvCollection = true;
495
- descriptions.push("buildTsvCollection");
496
- collectionInfo.push("tsv");
497
- }
498
-
499
- if (parameter.type === "query" && (parameter as any).format === "pipes") {
500
- hasPipeCollection = true;
501
- descriptions.push("buildPipeCollection");
502
- collectionInfo.push("pipe");
503
- }
504
-
505
- if (parameter.type === "header" && (parameter as any).format === "csv") {
506
- hasCsvCollection = true;
507
- descriptions.push("buildCsvCollection");
508
- collectionInfo.push("csv");
509
- }
510
- return {
511
- hasMultiCollection,
512
- hasPipeCollection,
513
- hasSsvCollection,
514
- hasTsvCollection,
515
- hasCsvCollection,
516
- descriptions,
517
- collectionInfo
518
- };
519
- }
@@ -32,12 +32,12 @@ import {
32
32
  isDefinedStatusCode,
33
33
  isPagingOperation
34
34
  } from "../utils/operationUtil.js";
35
- import { RLCSdkContext } from "./transform.js";
35
+ import { SdkContext } from "../utils/interfaces.js";
36
36
 
37
37
  export function transformPaths(
38
38
  program: Program,
39
39
  client: SdkClient,
40
- dpgContext: RLCSdkContext
40
+ dpgContext: SdkContext
41
41
  ): Paths {
42
42
  const operationGroups = listOperationGroups(dpgContext, client);
43
43
  const paths: Paths = {};
@@ -72,7 +72,7 @@ export function transformPaths(
72
72
  * an operation can end up returning.
73
73
  */
74
74
  function getResponseTypes(
75
- dpgContext: RLCSdkContext,
75
+ dpgContext: SdkContext,
76
76
  operation: HttpOperation
77
77
  ): ResponseTypes {
78
78
  const returnTypes: ResponseTypes = {
@@ -104,7 +104,7 @@ function getResponseTypes(
104
104
  }
105
105
 
106
106
  function transformOperation(
107
- dpgContext: RLCSdkContext,
107
+ dpgContext: SdkContext,
108
108
  route: HttpOperation,
109
109
  paths: Paths
110
110
  ) {
@@ -180,7 +180,7 @@ function escapeCoreName(name: string) {
180
180
  return name;
181
181
  }
182
182
  function hasRequiredOptions(
183
- dpgContext: RLCSdkContext,
183
+ dpgContext: SdkContext,
184
184
  routeParameters: HttpOperationParameters
185
185
  ) {
186
186
  const isRequiredBodyParam = routeParameters.bodyParameter?.optional === false;
@@ -34,12 +34,12 @@ import {
34
34
  getOperationLroOverload,
35
35
  getOperationName
36
36
  } from "../utils/operationUtil.js";
37
- import { RLCSdkContext } from "./transform.js";
37
+ import { SdkContext } from "../utils/interfaces.js";
38
38
 
39
39
  export function transformToResponseTypes(
40
40
  importDetails: Map<ImportKind, Set<string>>,
41
41
  client: SdkClient,
42
- dpgContext: RLCSdkContext
42
+ dpgContext: SdkContext
43
43
  ): OperationResponse[] {
44
44
  const program = dpgContext.program;
45
45
  const operationGroups = listOperationGroups(dpgContext, client);
@@ -114,7 +114,7 @@ export function transformToResponseTypes(
114
114
  * @returns rlc header shcema
115
115
  */
116
116
  function transformHeaders(
117
- dpgContext: RLCSdkContext,
117
+ dpgContext: SdkContext,
118
118
  response: HttpOperationResponse
119
119
  ): ResponseHeaderSchema[] | undefined {
120
120
  if (!response.responses.length) {
@@ -154,7 +154,7 @@ function transformHeaders(
154
154
  }
155
155
 
156
156
  function transformBody(
157
- dpgContext: RLCSdkContext,
157
+ dpgContext: SdkContext,
158
158
  response: HttpOperationResponse,
159
159
  importedModels: Set<string>
160
160
  ) {
@@ -188,7 +188,11 @@ function transformBody(
188
188
  const bodyType = getTypeName(bodySchema);
189
189
  const importedNames = getImportedModelName(bodySchema);
190
190
  if (importedNames) {
191
- importedNames.forEach(importedModels.add, importedModels);
191
+ importedNames
192
+ .filter((name) => {
193
+ return name !== "any";
194
+ })
195
+ .forEach(importedModels.add, importedModels);
192
196
  }
193
197
  typeSet.add(bodyType);
194
198
  }
@@ -206,7 +210,7 @@ function transformBody(
206
210
  }
207
211
 
208
212
  function transformLroLogicalResponse(
209
- dpgContext: RLCSdkContext,
213
+ dpgContext: SdkContext,
210
214
  route: HttpOperation,
211
215
  operationGroupName: string,
212
216
  existingResponses: ResponseMetadata[]
@@ -15,12 +15,12 @@ import {
15
15
  getBodyType,
16
16
  trimUsage
17
17
  } from "../utils/modelUtils.js";
18
- import { RLCSdkContext } from "./transform.js";
18
+ import { SdkContext } from "../utils/interfaces.js";
19
19
 
20
20
  export function transformSchemas(
21
21
  program: Program,
22
22
  client: SdkClient,
23
- dpgContext: RLCSdkContext
23
+ dpgContext: SdkContext
24
24
  ) {
25
25
  const schemas: Map<string, SchemaContext[]> = new Map<
26
26
  string,
@@ -0,0 +1,72 @@
1
+ import { TelemetryInfo } from "@azure-tools/rlc-common";
2
+ import {
3
+ SdkClient,
4
+ SdkContext,
5
+ listOperationGroups,
6
+ listOperationsInOperationGroup
7
+ } from "@azure-tools/typespec-client-generator-core";
8
+ import { ignoreDiagnostics } from "@typespec/compiler";
9
+ import { getHttpOperation, HttpOperation } from "@typespec/http";
10
+
11
+ export function transformTelemetryInfo(
12
+ dpgContext: SdkContext,
13
+ client: SdkClient
14
+ ): TelemetryInfo | undefined {
15
+ const customRequestIdHeaderName = getCustomRequestHeaderNameForClient(
16
+ dpgContext,
17
+ client
18
+ );
19
+ if (customRequestIdHeaderName) {
20
+ return {
21
+ customRequestIdHeaderName
22
+ };
23
+ }
24
+ return undefined;
25
+ }
26
+
27
+ function getCustomRequestHeaderNameForClient(
28
+ dpgContext: SdkContext,
29
+ client: SdkClient
30
+ ) {
31
+ const program = dpgContext.program;
32
+ const operationGroups = listOperationGroups(dpgContext, client);
33
+ for (const operationGroup of operationGroups) {
34
+ const operations = listOperationsInOperationGroup(
35
+ dpgContext,
36
+ operationGroup
37
+ );
38
+ for (const op of operations) {
39
+ const headerName = getCustomRequestHeaderNameForOperation(
40
+ ignoreDiagnostics(getHttpOperation(program, op))
41
+ );
42
+ if (headerName != undefined) {
43
+ return headerName;
44
+ }
45
+ }
46
+ }
47
+ const clientOperations = listOperationsInOperationGroup(dpgContext, client);
48
+ for (const clientOp of clientOperations) {
49
+ const headerName = getCustomRequestHeaderNameForOperation(
50
+ ignoreDiagnostics(getHttpOperation(program, clientOp))
51
+ );
52
+ if (headerName != undefined) {
53
+ return headerName;
54
+ }
55
+ }
56
+ return undefined;
57
+ }
58
+
59
+ function getCustomRequestHeaderNameForOperation(
60
+ route: HttpOperation
61
+ ): string | undefined {
62
+ const CUSTOM_REQUEST_HEADER_NAME = "client-request-id";
63
+ const params = route.parameters.parameters.filter(
64
+ (p) =>
65
+ p.type === "header" && p.name.toLowerCase() === CUSTOM_REQUEST_HEADER_NAME
66
+ );
67
+ if (params.length > 0) {
68
+ return CUSTOM_REQUEST_HEADER_NAME;
69
+ }
70
+
71
+ return undefined;
72
+ }