@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.
- package/CHANGELOG.md +9 -0
- package/dist/src/index.d.ts +1 -5
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +148 -78
- package/dist/src/index.js.map +1 -1
- package/dist/src/lib.d.ts.map +1 -1
- package/dist/src/lib.js +4 -2
- package/dist/src/lib.js.map +1 -1
- package/dist/src/modular/buildClassicalClient.d.ts +1 -1
- package/dist/src/modular/buildClassicalClient.d.ts.map +1 -1
- package/dist/src/modular/buildClassicalClient.js +27 -15
- package/dist/src/modular/buildClassicalClient.js.map +1 -1
- package/dist/src/modular/buildClientContext.d.ts +1 -1
- package/dist/src/modular/buildClientContext.d.ts.map +1 -1
- package/dist/src/modular/buildClientContext.js +16 -7
- package/dist/src/modular/buildClientContext.js.map +1 -1
- package/dist/src/modular/buildCodeModel.d.ts.map +1 -1
- package/dist/src/modular/buildCodeModel.js +59 -12
- package/dist/src/modular/buildCodeModel.js.map +1 -1
- package/dist/src/modular/buildOperations.d.ts +2 -1
- package/dist/src/modular/buildOperations.d.ts.map +1 -1
- package/dist/src/modular/buildOperations.js +25 -29
- package/dist/src/modular/buildOperations.js.map +1 -1
- package/dist/src/modular/buildProjectFiles.d.ts +2 -2
- package/dist/src/modular/buildProjectFiles.d.ts.map +1 -1
- package/dist/src/modular/buildProjectFiles.js +284 -145
- package/dist/src/modular/buildProjectFiles.js.map +1 -1
- package/dist/src/modular/buildRootIndex.d.ts.map +1 -1
- package/dist/src/modular/buildRootIndex.js +5 -5
- package/dist/src/modular/buildRootIndex.js.map +1 -1
- package/dist/src/modular/buildSubpathIndex.d.ts.map +1 -1
- package/dist/src/modular/buildSubpathIndex.js +9 -2
- package/dist/src/modular/buildSubpathIndex.js.map +1 -1
- package/dist/src/modular/emitModels.d.ts +3 -2
- package/dist/src/modular/emitModels.d.ts.map +1 -1
- package/dist/src/modular/emitModels.js +40 -7
- package/dist/src/modular/emitModels.js.map +1 -1
- package/dist/src/modular/helpers/clientHelpers.d.ts.map +1 -1
- package/dist/src/modular/helpers/clientHelpers.js +5 -3
- package/dist/src/modular/helpers/clientHelpers.js.map +1 -1
- package/dist/src/modular/helpers/docsHelpers.d.ts +3 -0
- package/dist/src/modular/helpers/docsHelpers.d.ts.map +1 -0
- package/dist/src/modular/helpers/docsHelpers.js +10 -0
- package/dist/src/modular/helpers/docsHelpers.js.map +1 -0
- package/dist/src/modular/helpers/operationHelpers.d.ts +11 -4
- package/dist/src/modular/helpers/operationHelpers.d.ts.map +1 -1
- package/dist/src/modular/helpers/operationHelpers.js +197 -56
- package/dist/src/modular/helpers/operationHelpers.js.map +1 -1
- package/dist/src/modular/helpers/typeHelpers.d.ts.map +1 -1
- package/dist/src/modular/helpers/typeHelpers.js +6 -0
- package/dist/src/modular/helpers/typeHelpers.js.map +1 -1
- package/dist/src/modular/modularCodeModel.d.ts +2 -0
- package/dist/src/modular/modularCodeModel.d.ts.map +1 -1
- package/dist/src/transform/transform.d.ts +5 -8
- package/dist/src/transform/transform.d.ts.map +1 -1
- package/dist/src/transform/transform.js +23 -13
- package/dist/src/transform/transform.js.map +1 -1
- package/dist/src/transform/transformApiVersionInfo.d.ts +2 -1
- package/dist/src/transform/transformApiVersionInfo.d.ts.map +1 -1
- package/dist/src/transform/transformApiVersionInfo.js.map +1 -1
- package/dist/src/transform/transformHelperFunctionDetails.d.ts +2 -1
- package/dist/src/transform/transformHelperFunctionDetails.d.ts.map +1 -1
- package/dist/src/transform/transformHelperFunctionDetails.js +4 -10
- package/dist/src/transform/transformHelperFunctionDetails.js.map +1 -1
- package/dist/src/transform/transformParameters.d.ts +2 -12
- package/dist/src/transform/transformParameters.d.ts.map +1 -1
- package/dist/src/transform/transformParameters.js +6 -47
- package/dist/src/transform/transformParameters.js.map +1 -1
- package/dist/src/transform/transformPaths.d.ts +2 -2
- package/dist/src/transform/transformPaths.d.ts.map +1 -1
- package/dist/src/transform/transformPaths.js.map +1 -1
- package/dist/src/transform/transformResponses.d.ts +2 -2
- package/dist/src/transform/transformResponses.d.ts.map +1 -1
- package/dist/src/transform/transformResponses.js +5 -1
- package/dist/src/transform/transformResponses.js.map +1 -1
- package/dist/src/transform/transformSchemas.d.ts +2 -2
- package/dist/src/transform/transformSchemas.d.ts.map +1 -1
- package/dist/src/transform/transformSchemas.js.map +1 -1
- package/dist/src/transform/transformTelemetryInfo.d.ts +4 -0
- package/dist/src/transform/transformTelemetryInfo.d.ts.map +1 -0
- package/dist/src/transform/transformTelemetryInfo.js +42 -0
- package/dist/src/transform/transformTelemetryInfo.js.map +1 -0
- package/dist/src/transform/transfromRLCOptions.d.ts +4 -2
- package/dist/src/transform/transfromRLCOptions.d.ts.map +1 -1
- package/dist/src/transform/transfromRLCOptions.js +72 -19
- package/dist/src/transform/transfromRLCOptions.js.map +1 -1
- package/dist/src/utils/clientUtils.d.ts +2 -1
- package/dist/src/utils/clientUtils.d.ts.map +1 -1
- package/dist/src/utils/clientUtils.js.map +1 -1
- package/dist/src/utils/interfaces.d.ts +13 -0
- package/dist/src/utils/interfaces.d.ts.map +1 -0
- package/dist/src/utils/interfaces.js +2 -0
- package/dist/src/utils/interfaces.js.map +1 -0
- package/dist/src/utils/modelUtils.d.ts +1 -1
- package/dist/src/utils/modelUtils.d.ts.map +1 -1
- package/dist/src/utils/modelUtils.js +25 -20
- package/dist/src/utils/modelUtils.js.map +1 -1
- package/dist/src/utils/operationUtil.d.ts +15 -4
- package/dist/src/utils/operationUtil.d.ts.map +1 -1
- package/dist/src/utils/operationUtil.js +65 -1
- package/dist/src/utils/operationUtil.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +28 -18
- package/src/index.ts +231 -129
- package/src/lib.ts +4 -2
- package/src/modular/buildClassicalClient.ts +33 -16
- package/src/modular/buildClientContext.ts +18 -8
- package/src/modular/buildCodeModel.ts +71 -13
- package/src/modular/buildOperations.ts +31 -36
- package/src/modular/buildProjectFiles.ts +329 -162
- package/src/modular/buildRootIndex.ts +5 -7
- package/src/modular/buildSubpathIndex.ts +9 -2
- package/src/modular/emitModels.ts +55 -9
- package/src/modular/helpers/clientHelpers.ts +5 -3
- package/src/modular/helpers/docsHelpers.ts +10 -0
- package/src/modular/helpers/operationHelpers.ts +328 -75
- package/src/modular/helpers/typeHelpers.ts +6 -0
- package/src/modular/modularCodeModel.ts +2 -0
- package/src/transform/transform.ts +24 -31
- package/src/transform/transformApiVersionInfo.ts +1 -1
- package/src/transform/transformHelperFunctionDetails.ts +12 -11
- package/src/transform/transformParameters.ts +20 -63
- package/src/transform/transformPaths.ts +5 -5
- package/src/transform/transformResponses.ts +10 -6
- package/src/transform/transformSchemas.ts +2 -2
- package/src/transform/transformTelemetryInfo.ts +72 -0
- package/src/transform/transfromRLCOptions.ts +100 -23
- package/src/utils/clientUtils.ts +2 -4
- package/src/utils/interfaces.ts +14 -0
- package/src/utils/modelUtils.ts +18 -11
- package/src/utils/operationUtil.ts +92 -6
- package/dist/src/modular/helpers/fixmeHelpers.d.ts +0 -2
- package/dist/src/modular/helpers/fixmeHelpers.d.ts.map +0 -1
- package/dist/src/modular/helpers/fixmeHelpers.js +0 -4
- package/dist/src/modular/helpers/fixmeHelpers.js.map +0 -1
- package/dist/src/modular/helpers/parameterHelpers.d.ts +0 -3
- package/dist/src/modular/helpers/parameterHelpers.d.ts.map +0 -1
- package/dist/src/modular/helpers/parameterHelpers.js +0 -16
- package/dist/src/modular/helpers/parameterHelpers.js.map +0 -1
- package/src/modular/helpers/fixmeHelpers.ts +0 -3
- 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 {
|
|
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
|
-
|
|
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
|
-
|
|
50
|
-
dpgContext: RLCSdkContext
|
|
41
|
+
dpgContext: SdkContext
|
|
51
42
|
): Promise<RLCModel> {
|
|
52
|
-
const
|
|
53
|
-
|
|
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
|
-
|
|
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(
|
|
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
|
|
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
|
-
|
|
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 {
|
|
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
|
-
|
|
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(
|
|
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(
|
|
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 {
|
|
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:
|
|
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:
|
|
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(
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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 {
|
|
35
|
+
import { SdkContext } from "../utils/interfaces.js";
|
|
36
36
|
|
|
37
37
|
export function transformPaths(
|
|
38
38
|
program: Program,
|
|
39
39
|
client: SdkClient,
|
|
40
|
-
dpgContext:
|
|
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:
|
|
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:
|
|
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:
|
|
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 {
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
|
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:
|
|
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 {
|
|
18
|
+
import { SdkContext } from "../utils/interfaces.js";
|
|
19
19
|
|
|
20
20
|
export function transformSchemas(
|
|
21
21
|
program: Program,
|
|
22
22
|
client: SdkClient,
|
|
23
|
-
dpgContext:
|
|
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
|
+
}
|