@azure-tools/typespec-ts 0.12.0 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.rush/temp/operation/build/all.log +1 -0
- package/.rush/temp/operation/build/state.json +3 -0
- package/.rush/temp/package-deps_build.json +205 -190
- package/.rush/temp/shrinkwrap-deps.json +488 -471
- package/CHANGELOG.md +7 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/modelUtils.d.ts +1 -1
- package/dist/src/modelUtils.d.ts.map +1 -1
- package/dist/src/modelUtils.js +79 -56
- package/dist/src/modelUtils.js.map +1 -1
- package/dist/src/operationUtil.d.ts +26 -0
- package/dist/src/operationUtil.d.ts.map +1 -1
- package/dist/src/operationUtil.js +76 -17
- package/dist/src/operationUtil.js.map +1 -1
- package/dist/src/transform/transform.d.ts.map +1 -1
- package/dist/src/transform/transform.js +9 -6
- package/dist/src/transform/transform.js.map +1 -1
- package/dist/src/transform/transformApiVersionInfo.d.ts.map +1 -1
- package/dist/src/transform/transformApiVersionInfo.js +3 -3
- package/dist/src/transform/transformApiVersionInfo.js.map +1 -1
- package/dist/src/transform/transformHelperFunctionDetails.d.ts +6 -0
- package/dist/src/transform/transformHelperFunctionDetails.d.ts.map +1 -0
- package/dist/src/transform/{transformAnnotationDetails.js → transformHelperFunctionDetails.js} +2 -2
- package/dist/src/transform/transformHelperFunctionDetails.js.map +1 -0
- package/dist/src/transform/transformParameters.d.ts.map +1 -1
- package/dist/src/transform/transformParameters.js +41 -33
- package/dist/src/transform/transformParameters.js.map +1 -1
- package/dist/src/transform/transformPaths.d.ts.map +1 -1
- package/dist/src/transform/transformPaths.js +20 -12
- package/dist/src/transform/transformPaths.js.map +1 -1
- package/dist/src/transform/transformResponses.d.ts.map +1 -1
- package/dist/src/transform/transformResponses.js +29 -8
- package/dist/src/transform/transformResponses.js.map +1 -1
- package/dist/src/transform/transformSchemas.js +1 -1
- package/dist/src/transform/transformSchemas.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +41 -38
- package/src/index.ts +2 -0
- package/src/modelUtils.ts +143 -47
- package/src/operationUtil.ts +111 -22
- package/src/transform/transform.ts +20 -5
- package/src/transform/transformApiVersionInfo.ts +18 -3
- package/src/transform/{transformAnnotationDetails.ts → transformHelperFunctionDetails.ts} +3 -3
- package/src/transform/transformParameters.ts +71 -20
- package/src/transform/transformPaths.ts +30 -15
- package/src/transform/transformResponses.ts +50 -6
- package/src/transform/transformSchemas.ts +1 -1
- package/test/commands/cadl-ranch-list.ts +25 -28
- package/test/commands/gen-cadl-ranch.ts +6 -2
- package/test/integration/arrayItemTypes.spec.ts +2 -2
- package/test/integration/azurecore.spec.ts +64 -24
- package/test/integration/collectionFormat.spec.ts +44 -0
- package/test/integration/dictionary.spec.ts +2 -2
- package/test/integration/extensibleEnums.spec.ts +8 -8
- package/test/integration/fixedEnums.spec.ts +7 -7
- package/test/integration/generated/arrays/itemTypes/src/arrayItemTypesClient.ts +5 -1
- package/test/integration/generated/arrays/itemTypes/src/clientDefinitions.ts +20 -20
- package/test/integration/generated/arrays/itemTypes/src/logger.ts +5 -0
- package/test/integration/generated/authentication/apiKey/package.json +1 -1
- package/test/integration/generated/authentication/apiKey/src/authApiKeyClient.ts +6 -2
- package/test/integration/generated/authentication/apiKey/src/logger.ts +5 -0
- package/test/integration/generated/authentication/oauth2/src/authOauth2Client.ts +6 -2
- package/test/integration/generated/authentication/oauth2/src/logger.ts +5 -0
- package/test/integration/generated/authentication/union/src/authUnionClient.ts +6 -2
- package/test/integration/generated/authentication/union/src/logger.ts +5 -0
- package/test/integration/generated/azure/core/package.json +1 -1
- package/test/integration/generated/azure/core/src/azureCoreClient.ts +5 -1
- package/test/integration/generated/azure/core/src/clientDefinitions.ts +22 -8
- package/test/integration/generated/azure/core/src/isUnexpected.ts +18 -7
- package/test/integration/generated/azure/core/src/logger.ts +5 -0
- package/test/integration/generated/azure/core/src/outputModels.ts +7 -0
- package/test/integration/generated/azure/core/src/paginateHelper.ts +55 -5
- package/test/integration/generated/azure/core/src/parameters.ts +1 -0
- package/test/integration/generated/azure/core/src/responses.ts +23 -1
- package/test/integration/generated/azure/core-traits/package.json +1 -1
- package/test/integration/generated/azure/core-traits/src/azureCoreTraitsClient.ts +5 -1
- package/test/integration/generated/azure/core-traits/src/clientDefinitions.ts +7 -25
- package/test/integration/generated/azure/core-traits/src/isUnexpected.ts +6 -19
- package/test/integration/generated/azure/core-traits/src/logger.ts +5 -0
- package/test/integration/generated/azure/core-traits/src/outputModels.ts +15 -0
- package/test/integration/generated/azure/core-traits/src/parameters.ts +4 -19
- package/test/integration/generated/azure/core-traits/src/responses.ts +6 -30
- package/test/integration/generated/dictionary/package.json +1 -1
- package/test/integration/generated/dictionary/src/clientDefinitions.ts +22 -22
- package/test/integration/generated/dictionary/src/dictClient.ts +5 -1
- package/test/integration/generated/dictionary/src/logger.ts +5 -0
- package/test/integration/generated/enums/extensible/README.md +3 -3
- package/test/integration/generated/enums/extensible/package.json +1 -1
- package/test/integration/generated/enums/extensible/src/clientDefinitions.ts +5 -5
- package/test/integration/generated/enums/extensible/src/index.ts +3 -3
- package/test/integration/generated/enums/extensible/src/logger.ts +5 -0
- package/test/integration/generated/enums/extensible/src/{enumsExtensible.ts → typeEnumExtensible.ts} +9 -5
- package/test/integration/generated/enums/fixed/README.md +3 -3
- package/test/integration/generated/enums/fixed/package.json +1 -1
- package/test/integration/generated/enums/fixed/src/clientDefinitions.ts +5 -5
- package/test/integration/generated/enums/fixed/src/index.ts +3 -3
- package/test/integration/generated/enums/fixed/src/logger.ts +5 -0
- package/test/integration/generated/enums/fixed/src/{enumsFixed.ts → typeEnumFixed.ts} +9 -5
- package/test/integration/generated/internal/src/clientDefinitions.ts +38 -12
- package/test/integration/generated/internal/src/index.ts +0 -1
- package/test/integration/generated/internal/src/internalClient.ts +5 -1
- package/test/integration/generated/internal/src/logger.ts +5 -0
- package/test/integration/generated/internal/src/outputModels.ts +9 -5
- package/test/integration/generated/internal/src/parameters.ts +32 -8
- package/test/integration/generated/internal/src/responses.ts +18 -5
- package/test/integration/generated/lro/lroCore/README.md +3 -3
- package/test/integration/generated/lro/lroCore/package.json +2 -2
- package/test/integration/generated/lro/lroCore/src/clientDefinitions.ts +8 -5
- package/test/integration/generated/lro/lroCore/src/index.ts +3 -3
- package/test/integration/generated/lro/lroCore/src/isUnexpected.ts +14 -7
- package/test/integration/generated/lro/lroCore/src/logger.ts +5 -0
- package/test/integration/generated/lro/lroCore/src/pollingHelper.ts +38 -0
- package/test/integration/generated/lro/lroCore/src/responses.ts +18 -0
- package/test/integration/generated/lro/lroCore/src/{azureLroCore.ts → specsAzureCoreLroStandard.ts} +9 -5
- package/test/integration/generated/lro/{lroBasic → lroRPC}/README.md +7 -7
- package/test/integration/generated/lro/{lroBasic → lroRPC}/api-extractor.json +1 -1
- package/test/integration/generated/lro/{lroBasic → lroRPC}/package.json +6 -6
- package/test/integration/generated/lro/lroRPC/src/clientDefinitions.ts +79 -0
- package/test/integration/generated/{resiliency/devDriven → lro/lroRPC}/src/index.ts +4 -4
- package/test/integration/generated/{resiliency/devDriven → lro/lroRPC}/src/isUnexpected.ts +57 -21
- package/test/integration/generated/lro/lroRPC/src/logger.ts +5 -0
- package/test/integration/generated/lro/lroRPC/src/models.ts +8 -0
- package/test/integration/generated/lro/lroRPC/src/outputModels.ts +40 -0
- package/test/integration/generated/lro/lroRPC/src/parameters.ts +20 -0
- package/test/integration/generated/lro/{lroBasic → lroRPC}/src/pollingHelper.ts +52 -0
- package/test/integration/generated/lro/lroRPC/src/responses.ts +124 -0
- package/test/integration/generated/lro/lroRPC/src/specsAzureCoreLroRpc.ts +35 -0
- package/test/integration/generated/lro/{lroBasic → lroRPC}/tspconfig.yaml +2 -2
- package/test/integration/generated/models/inheritance/README.md +3 -3
- package/test/integration/generated/models/inheritance/package.json +1 -1
- package/test/integration/generated/models/inheritance/src/clientDefinitions.ts +13 -11
- package/test/integration/generated/models/inheritance/src/index.ts +3 -3
- package/test/integration/generated/models/inheritance/src/logger.ts +5 -0
- package/test/integration/generated/models/inheritance/src/{modelsInheritance.ts → typeModelInheritance.ts} +9 -5
- package/test/integration/generated/models/propertyNullable/README.md +3 -3
- package/test/integration/generated/models/propertyNullable/package.json +1 -1
- package/test/integration/generated/models/propertyNullable/src/clientDefinitions.ts +43 -43
- package/test/integration/generated/models/propertyNullable/src/index.ts +3 -3
- package/test/integration/generated/models/propertyNullable/src/logger.ts +5 -0
- package/test/integration/generated/models/propertyNullable/src/parameters.ts +14 -12
- package/test/integration/generated/models/propertyNullable/src/responses.ts +4 -4
- package/test/integration/generated/models/propertyNullable/src/{modelsPropertyNullable.ts → typePropertyNullable.ts} +9 -5
- package/test/integration/generated/models/propertyOptional/README.md +3 -3
- package/test/integration/generated/models/propertyOptional/package.json +1 -1
- package/test/integration/generated/models/propertyOptional/src/clientDefinitions.ts +47 -47
- package/test/integration/generated/models/propertyOptional/src/index.ts +3 -3
- package/test/integration/generated/models/propertyOptional/src/logger.ts +5 -0
- package/test/integration/generated/models/propertyOptional/src/parameters.ts +7 -6
- package/test/integration/generated/models/propertyOptional/src/responses.ts +4 -4
- package/test/integration/generated/models/propertyOptional/src/{modelsPropertyOptional.ts → typePropertyOptional.ts} +9 -5
- package/test/integration/generated/models/propertyTypes/README.md +3 -3
- package/test/integration/generated/models/propertyTypes/package.json +1 -1
- package/test/integration/generated/models/propertyTypes/src/clientDefinitions.ts +123 -47
- package/test/integration/generated/models/propertyTypes/src/index.ts +3 -3
- package/test/integration/generated/models/propertyTypes/src/logger.ts +5 -0
- package/test/integration/generated/models/propertyTypes/src/models.ts +24 -0
- package/test/integration/generated/models/propertyTypes/src/outputModels.ts +24 -0
- package/test/integration/generated/models/propertyTypes/src/parameters.ts +48 -6
- package/test/integration/generated/models/propertyTypes/src/responses.ts +52 -4
- package/test/integration/generated/models/propertyTypes/src/{modelsPropertyTypes.ts → typePropertyValueTypes.ts} +9 -5
- package/test/integration/generated/models/usage/README.md +3 -3
- package/test/integration/generated/models/usage/package.json +1 -1
- package/test/integration/generated/models/usage/src/clientDefinitions.ts +7 -7
- package/test/integration/generated/models/usage/src/index.ts +3 -3
- package/test/integration/generated/models/usage/src/logger.ts +5 -0
- package/test/integration/generated/models/usage/src/{modelsUsage.ts → typeModelUsage.ts} +9 -5
- package/test/integration/generated/models/visibility/README.md +3 -3
- package/test/integration/generated/models/visibility/package.json +1 -1
- package/test/integration/generated/models/visibility/src/clientDefinitions.ts +3 -3
- package/test/integration/generated/models/visibility/src/index.ts +3 -3
- package/test/integration/generated/models/visibility/src/logger.ts +5 -0
- package/test/integration/generated/models/visibility/src/{modelsVisibilityAutomatic.ts → typeModelVisibility.ts} +9 -5
- package/test/integration/generated/parameters/collection-format/src/clientDefinitions.ts +24 -0
- package/test/integration/generated/parameters/collection-format/src/collectionFormatClient.ts +5 -1
- package/test/integration/generated/parameters/collection-format/src/logger.ts +5 -0
- package/test/integration/generated/parameters/collection-format/src/parameters.ts +33 -0
- package/test/integration/generated/parameters/collection-format/src/responses.ts +15 -0
- package/test/integration/generated/parameters/collection-format/src/serializeHelper.ts +12 -0
- package/test/integration/generated/parameters/spread/src/clientDefinitions.ts +61 -0
- package/test/integration/generated/{lro/lroBasic → parameters/spread}/src/index.ts +4 -5
- package/test/integration/generated/parameters/spread/src/logger.ts +5 -0
- package/test/integration/generated/{lro/lroBasic/src/outputModels.ts → parameters/spread/src/models.ts} +2 -3
- package/test/integration/generated/parameters/spread/src/parameters.ts +61 -0
- package/test/integration/generated/{lro/lroBasic/src/azureLro.ts → parameters/spread/src/parametersSpread.ts} +10 -6
- package/test/integration/generated/parameters/spread/src/responses.ts +25 -0
- package/test/integration/generated/{resiliency/devDriven → parameters/spread}/tspconfig.yaml +2 -4
- package/test/integration/generated/projection/src/clientDefinitions.ts +47 -21
- package/test/integration/generated/projection/src/logger.ts +5 -0
- package/test/integration/generated/projection/src/models.ts +18 -7
- package/test/integration/generated/projection/src/parameters.ts +32 -10
- package/test/integration/generated/projection/src/projectionClient.ts +5 -1
- package/test/integration/generated/projection/src/responses.ts +18 -3
- package/test/integration/generated/resiliency/srvDriven1/README.md +4 -4
- package/test/integration/generated/resiliency/srvDriven1/package.json +1 -1
- package/test/integration/generated/resiliency/srvDriven1/src/clientDefinitions.ts +25 -49
- package/test/integration/generated/resiliency/srvDriven1/src/index.ts +3 -5
- package/test/integration/generated/resiliency/srvDriven1/src/logger.ts +5 -0
- package/test/integration/generated/resiliency/srvDriven1/src/parameters.ts +11 -32
- package/test/integration/generated/resiliency/srvDriven1/src/responses.ts +9 -24
- package/test/integration/generated/resiliency/srvDriven1/src/serviceDrivenOldClient.ts +43 -0
- package/test/integration/generated/resiliency/srvDriven1/tspconfig.yaml +1 -0
- package/test/integration/generated/resiliency/srvDriven2/README.md +13 -4
- package/test/integration/generated/resiliency/srvDriven2/package.json +1 -1
- package/test/integration/generated/resiliency/srvDriven2/src/clientDefinitions.ts +32 -68
- package/test/integration/generated/resiliency/srvDriven2/src/index.ts +3 -5
- package/test/integration/generated/resiliency/srvDriven2/src/logger.ts +5 -0
- package/test/integration/generated/resiliency/srvDriven2/src/parameters.ts +19 -42
- package/test/integration/generated/resiliency/srvDriven2/src/responses.ts +10 -31
- package/test/integration/generated/resiliency/srvDriven2/src/serviceDrivenNewClient.ts +43 -0
- package/test/integration/generated/resiliency/srvDriven2/tspconfig.yaml +1 -0
- package/test/integration/generated/server/path/multiple/src/logger.ts +5 -0
- package/test/integration/generated/server/path/multiple/src/multipleParamInServerPathClient.ts +6 -2
- package/test/integration/generated/server/path/single/src/logger.ts +5 -0
- package/test/integration/generated/server/path/single/src/singleParamInServerPathClient.ts +6 -2
- package/test/integration/generated/specialWords/src/logger.ts +5 -0
- package/test/integration/generated/specialWords/src/specialWordsClient.ts +5 -1
- package/test/integration/generated/unions/src/clientDefinitions.ts +8 -8
- package/test/integration/generated/unions/src/logger.ts +5 -0
- package/test/integration/generated/unions/src/unionsClient.ts +5 -1
- package/test/integration/internal.spec.ts +45 -12
- package/test/integration/lroCore.spec.ts +89 -0
- package/test/integration/modelInheritance.spec.ts +13 -13
- package/test/integration/modelPropertyNullable.spec.ts +8 -8
- package/test/integration/modelPropertyOptional.spec.ts +32 -32
- package/test/integration/modelPropertyType.spec.ts +22 -6
- package/test/integration/modelUsage.spec.ts +7 -7
- package/test/integration/projection.spec.ts +62 -15
- package/test/integration/resiliencyDpgCustomization.spec.ts +133 -38
- package/test/integration/spreadParameters.spec.ts +82 -0
- package/test/integration/unions.spec.ts +4 -4
- package/test/unit/apiVersion.spec.ts +19 -7
- package/test/unit/clientFactoryGenerator.spec.ts +44 -16
- package/test/unit/modelsGenerator.spec.ts +212 -2
- package/test/unit/util/emitUtil.ts +13 -4
- package/test/unit/util/testUtil.ts +7 -2
- package/typespec-ts.build.log +0 -1
- package/dist/src/transform/transformAnnotationDetails.d.ts +0 -6
- package/dist/src/transform/transformAnnotationDetails.d.ts.map +0 -1
- package/dist/src/transform/transformAnnotationDetails.js.map +0 -1
- package/test/integration/generated/internal/src/models.ts +0 -8
- package/test/integration/generated/lro/lroBasic/src/clientDefinitions.ts +0 -37
- package/test/integration/generated/lro/lroBasic/src/parameters.ts +0 -8
- package/test/integration/generated/lro/lroBasic/src/responses.ts +0 -23
- package/test/integration/generated/resiliency/devDriven/.eslintrc.json +0 -11
- package/test/integration/generated/resiliency/devDriven/README.md +0 -56
- package/test/integration/generated/resiliency/devDriven/api-extractor.json +0 -18
- package/test/integration/generated/resiliency/devDriven/package.json +0 -81
- package/test/integration/generated/resiliency/devDriven/rollup.config.js +0 -118
- package/test/integration/generated/resiliency/devDriven/src/clientDefinitions.ts +0 -75
- package/test/integration/generated/resiliency/devDriven/src/models.ts +0 -8
- package/test/integration/generated/resiliency/devDriven/src/outputModels.ts +0 -25
- package/test/integration/generated/resiliency/devDriven/src/paginateHelper.ts +0 -154
- package/test/integration/generated/resiliency/devDriven/src/parameters.ts +0 -17
- package/test/integration/generated/resiliency/devDriven/src/resiliencyDevDriven.ts +0 -31
- package/test/integration/generated/resiliency/devDriven/src/responses.ts +0 -62
- package/test/integration/generated/resiliency/devDriven/tsconfig.json +0 -25
- package/test/integration/generated/resiliency/srvDriven1/src/models.ts +0 -6
- package/test/integration/generated/resiliency/srvDriven1/src/outputModels.ts +0 -6
- package/test/integration/generated/resiliency/srvDriven1/src/resiliencyServiceDriven1.ts +0 -31
- package/test/integration/generated/resiliency/srvDriven2/src/models.ts +0 -6
- package/test/integration/generated/resiliency/srvDriven2/src/outputModels.ts +0 -6
- package/test/integration/generated/resiliency/srvDriven2/src/resiliencyServiceDriven2.ts +0 -31
- package/test/integration/helloWorld.spec.ts +0 -20
- package/test/integration/lroBasic.spec.ts +0 -25
- /package/test/integration/generated/lro/{lroBasic → lroRPC}/.eslintrc.json +0 -0
- /package/test/integration/generated/lro/{lroBasic → lroRPC}/rollup.config.js +0 -0
- /package/test/integration/generated/lro/{lroBasic → lroRPC}/tsconfig.json +0 -0
|
@@ -16,6 +16,7 @@ import {
|
|
|
16
16
|
RLCModel,
|
|
17
17
|
RLCOptions,
|
|
18
18
|
Schema,
|
|
19
|
+
SchemaContext,
|
|
19
20
|
UrlInfo
|
|
20
21
|
} from "@azure-tools/rlc-common";
|
|
21
22
|
import { Program, getDoc } from "@typespec/compiler";
|
|
@@ -28,13 +29,14 @@ import {
|
|
|
28
29
|
getTypeName,
|
|
29
30
|
predictDefaultValue
|
|
30
31
|
} from "../modelUtils.js";
|
|
31
|
-
import {
|
|
32
|
+
import { transformHelperFunctionDetails } from "./transformHelperFunctionDetails.js";
|
|
32
33
|
import { transformToParameterTypes } from "./transformParameters.js";
|
|
33
34
|
import { transformPaths } from "./transformPaths.js";
|
|
34
35
|
import { transformToResponseTypes } from "./transformResponses.js";
|
|
35
36
|
import { transformSchemas } from "./transformSchemas.js";
|
|
36
37
|
import { transformRLCOptions } from "./transfromRLCOptions.js";
|
|
37
38
|
import { transformApiVersionInfo } from "./transformApiVersionInfo.js";
|
|
39
|
+
import { getClientLroOverload } from "../operationUtil.js";
|
|
38
40
|
|
|
39
41
|
export async function transformRLCModel(
|
|
40
42
|
program: Program,
|
|
@@ -80,7 +82,13 @@ export async function transformRLCModel(
|
|
|
80
82
|
client,
|
|
81
83
|
dpgContext
|
|
82
84
|
);
|
|
83
|
-
const
|
|
85
|
+
const helperDetails = transformHelperFunctionDetails(
|
|
86
|
+
program,
|
|
87
|
+
client,
|
|
88
|
+
dpgContext
|
|
89
|
+
);
|
|
90
|
+
// Enrich client-level annotation detail
|
|
91
|
+
helperDetails.clientLroOverload = getClientLroOverload(paths);
|
|
84
92
|
const urlInfo = transformUrlInfo(program, dpgContext);
|
|
85
93
|
const apiVersionInfo = transformApiVersionInfo(
|
|
86
94
|
client,
|
|
@@ -98,7 +106,7 @@ export async function transformRLCModel(
|
|
|
98
106
|
importSet,
|
|
99
107
|
apiVersionInfo,
|
|
100
108
|
parameters,
|
|
101
|
-
|
|
109
|
+
helperDetails,
|
|
102
110
|
urlInfo
|
|
103
111
|
};
|
|
104
112
|
}
|
|
@@ -121,11 +129,18 @@ export function transformUrlInfo(
|
|
|
121
129
|
const property = host?.[0]?.parameters.get(key);
|
|
122
130
|
const type = property?.type;
|
|
123
131
|
|
|
124
|
-
if (!type) {
|
|
132
|
+
if (!property || !type) {
|
|
125
133
|
continue;
|
|
126
134
|
}
|
|
127
135
|
|
|
128
|
-
const schema = getSchemaForType(
|
|
136
|
+
const schema = getSchemaForType(
|
|
137
|
+
program,
|
|
138
|
+
dpgContext,
|
|
139
|
+
type,
|
|
140
|
+
[SchemaContext.Exception, SchemaContext.Input],
|
|
141
|
+
false,
|
|
142
|
+
property!
|
|
143
|
+
);
|
|
129
144
|
urlParameters.push({
|
|
130
145
|
name: key,
|
|
131
146
|
type: getTypeName(schema),
|
|
@@ -10,7 +10,8 @@ import {
|
|
|
10
10
|
ApiVersionInfo,
|
|
11
11
|
UrlInfo,
|
|
12
12
|
extractPathApiVersion,
|
|
13
|
-
extractDefinedPosition
|
|
13
|
+
extractDefinedPosition,
|
|
14
|
+
SchemaContext
|
|
14
15
|
} from "@azure-tools/rlc-common";
|
|
15
16
|
import { getHttpOperation } from "@typespec/http";
|
|
16
17
|
import {
|
|
@@ -71,7 +72,14 @@ function getOperationQueryApiVersion(
|
|
|
71
72
|
(p) => p.type === "query" && isApiVersion(dpgContext, p)
|
|
72
73
|
);
|
|
73
74
|
params.map((p) => {
|
|
74
|
-
const type = getSchemaForType(
|
|
75
|
+
const type = getSchemaForType(
|
|
76
|
+
program,
|
|
77
|
+
dpgContext,
|
|
78
|
+
p.param.type,
|
|
79
|
+
[SchemaContext.Exception, SchemaContext.Input],
|
|
80
|
+
false,
|
|
81
|
+
p.param
|
|
82
|
+
);
|
|
75
83
|
const typeString = JSON.stringify(trimUsage(type));
|
|
76
84
|
apiVersionTypes.add(typeString);
|
|
77
85
|
});
|
|
@@ -87,7 +95,14 @@ function getOperationQueryApiVersion(
|
|
|
87
95
|
(p) => p.type === "query" && isApiVersion(dpgContext, p)
|
|
88
96
|
);
|
|
89
97
|
params.map((p) => {
|
|
90
|
-
const type = getSchemaForType(
|
|
98
|
+
const type = getSchemaForType(
|
|
99
|
+
program,
|
|
100
|
+
dpgContext,
|
|
101
|
+
p.param.type,
|
|
102
|
+
[SchemaContext.Exception, SchemaContext.Input],
|
|
103
|
+
false,
|
|
104
|
+
p.param
|
|
105
|
+
);
|
|
91
106
|
const typeString = JSON.stringify(trimUsage(type));
|
|
92
107
|
apiVersionTypes.add(typeString);
|
|
93
108
|
});
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
listOperationGroups,
|
|
6
6
|
listOperationsInOperationGroup
|
|
7
7
|
} from "@azure-tools/typespec-client-generator-core";
|
|
8
|
-
import {
|
|
8
|
+
import { HelperFunctionDetails } from "@azure-tools/rlc-common";
|
|
9
9
|
import { ignoreDiagnostics, Model, Program, Type } from "@typespec/compiler";
|
|
10
10
|
import { getHttpOperation, HttpOperation } from "@typespec/http";
|
|
11
11
|
import {
|
|
@@ -15,11 +15,11 @@ import {
|
|
|
15
15
|
} from "../operationUtil.js";
|
|
16
16
|
import { getSpecialSerializeInfo } from "./transformParameters.js";
|
|
17
17
|
|
|
18
|
-
export function
|
|
18
|
+
export function transformHelperFunctionDetails(
|
|
19
19
|
program: Program,
|
|
20
20
|
client: SdkClient,
|
|
21
21
|
dpgContext: SdkContext
|
|
22
|
-
):
|
|
22
|
+
): HelperFunctionDetails {
|
|
23
23
|
// Extract paged metadata from Azure.Core.Page
|
|
24
24
|
const annotationDetails = {
|
|
25
25
|
hasLongRunning: hasPollingOperations(program, client, dpgContext)
|
|
@@ -84,13 +84,18 @@ export function transformToParameterTypes(
|
|
|
84
84
|
// transform path param
|
|
85
85
|
const pathParams = transformPathParameters();
|
|
86
86
|
// transform header param includeing content-type
|
|
87
|
-
const headerParams = transformHeaderParameters(
|
|
87
|
+
const headerParams = transformHeaderParameters(
|
|
88
|
+
program,
|
|
89
|
+
dpgContext,
|
|
90
|
+
parameters
|
|
91
|
+
);
|
|
88
92
|
// transform body
|
|
89
93
|
const bodyType = getBodyType(program, route);
|
|
90
94
|
let bodyParameter = undefined;
|
|
91
95
|
if (bodyType) {
|
|
92
96
|
bodyParameter = transformBodyParameters(
|
|
93
97
|
program,
|
|
98
|
+
dpgContext,
|
|
94
99
|
parameters,
|
|
95
100
|
headerParams,
|
|
96
101
|
outputImportedSet,
|
|
@@ -108,13 +113,18 @@ export function transformToParameterTypes(
|
|
|
108
113
|
|
|
109
114
|
function getParameterMetadata(
|
|
110
115
|
program: Program,
|
|
116
|
+
dpgContext: SdkContext,
|
|
111
117
|
paramType: "query" | "path" | "header",
|
|
112
118
|
parameter: HttpOperationParameter
|
|
113
119
|
): ParameterMetadata {
|
|
114
|
-
const schema = getSchemaForType(
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
120
|
+
const schema = getSchemaForType(
|
|
121
|
+
program,
|
|
122
|
+
dpgContext,
|
|
123
|
+
parameter.param.type,
|
|
124
|
+
[SchemaContext.Exception, SchemaContext.Input],
|
|
125
|
+
false,
|
|
126
|
+
parameter.param
|
|
127
|
+
) as Schema;
|
|
118
128
|
let type = getTypeName(schema);
|
|
119
129
|
const name = getParameterName(parameter.name);
|
|
120
130
|
let description =
|
|
@@ -175,7 +185,7 @@ function transformQueryParameters(
|
|
|
175
185
|
return [];
|
|
176
186
|
}
|
|
177
187
|
return queryParameters.map((qp) =>
|
|
178
|
-
getParameterMetadata(program, "query", qp)
|
|
188
|
+
getParameterMetadata(program, dpgContext, "query", qp)
|
|
179
189
|
);
|
|
180
190
|
}
|
|
181
191
|
|
|
@@ -191,6 +201,7 @@ function transformPathParameters() {
|
|
|
191
201
|
|
|
192
202
|
function transformHeaderParameters(
|
|
193
203
|
program: Program,
|
|
204
|
+
dpgContext: SdkContext,
|
|
194
205
|
parameters: HttpOperationParameters
|
|
195
206
|
): ParameterMetadata[] {
|
|
196
207
|
const headerParameters = parameters.parameters.filter(
|
|
@@ -200,12 +211,13 @@ function transformHeaderParameters(
|
|
|
200
211
|
return [];
|
|
201
212
|
}
|
|
202
213
|
return headerParameters.map((qp) =>
|
|
203
|
-
getParameterMetadata(program, "header", qp)
|
|
214
|
+
getParameterMetadata(program, dpgContext, "header", qp)
|
|
204
215
|
);
|
|
205
216
|
}
|
|
206
217
|
|
|
207
218
|
function transformBodyParameters(
|
|
208
219
|
program: Program,
|
|
220
|
+
dpgContext: SdkContext,
|
|
209
221
|
parameters: HttpOperationParameters,
|
|
210
222
|
headers: ParameterMetadata[],
|
|
211
223
|
importedModels: Set<string>,
|
|
@@ -224,6 +236,7 @@ function transformBodyParameters(
|
|
|
224
236
|
// Case 1: Handle the normal case without binary or form data
|
|
225
237
|
return transformNormalBody(
|
|
226
238
|
program,
|
|
239
|
+
dpgContext,
|
|
227
240
|
bodyType,
|
|
228
241
|
parameters,
|
|
229
242
|
importedModels,
|
|
@@ -236,6 +249,7 @@ function transformBodyParameters(
|
|
|
236
249
|
// Case 3: Handle the form data
|
|
237
250
|
return transformMultiFormBody(
|
|
238
251
|
program,
|
|
252
|
+
dpgContext,
|
|
239
253
|
bodyType,
|
|
240
254
|
parameters,
|
|
241
255
|
importedModels
|
|
@@ -245,6 +259,7 @@ function transformBodyParameters(
|
|
|
245
259
|
|
|
246
260
|
function transformNormalBody(
|
|
247
261
|
program: Program,
|
|
262
|
+
dpgContext: SdkContext,
|
|
248
263
|
bodyType: Type,
|
|
249
264
|
parameters: HttpOperationParameters,
|
|
250
265
|
importedModels: Set<string>,
|
|
@@ -252,16 +267,18 @@ function transformNormalBody(
|
|
|
252
267
|
) {
|
|
253
268
|
const description = extractDescriptionsFromBody(
|
|
254
269
|
program,
|
|
270
|
+
dpgContext,
|
|
255
271
|
bodyType,
|
|
256
272
|
parameters
|
|
257
273
|
).join("\n\n");
|
|
258
274
|
const type = extractNameFromCadlType(
|
|
259
275
|
program,
|
|
276
|
+
dpgContext,
|
|
260
277
|
bodyType,
|
|
261
278
|
importedModels,
|
|
262
279
|
headers
|
|
263
280
|
);
|
|
264
|
-
const schema = getSchemaForType(program, bodyType);
|
|
281
|
+
const schema = getSchemaForType(program, dpgContext, bodyType);
|
|
265
282
|
return {
|
|
266
283
|
isPartialBody: false,
|
|
267
284
|
body: [
|
|
@@ -304,6 +321,7 @@ function transformBinaryBody(
|
|
|
304
321
|
|
|
305
322
|
function transformMultiFormBody(
|
|
306
323
|
program: Program,
|
|
324
|
+
dpgContext: SdkContext,
|
|
307
325
|
bodyType: Type,
|
|
308
326
|
parameters: HttpOperationParameters,
|
|
309
327
|
importedModels: Set<string>
|
|
@@ -311,9 +329,15 @@ function transformMultiFormBody(
|
|
|
311
329
|
const isModelBody = bodyType.kind === "Model";
|
|
312
330
|
|
|
313
331
|
if (!isModelBody) {
|
|
314
|
-
const type = extractNameFromCadlType(
|
|
332
|
+
const type = extractNameFromCadlType(
|
|
333
|
+
program,
|
|
334
|
+
dpgContext,
|
|
335
|
+
bodyType,
|
|
336
|
+
importedModels
|
|
337
|
+
);
|
|
315
338
|
const description = extractDescriptionsFromBody(
|
|
316
339
|
program,
|
|
340
|
+
dpgContext,
|
|
317
341
|
bodyType,
|
|
318
342
|
parameters
|
|
319
343
|
).join("\n\n");
|
|
@@ -338,10 +362,14 @@ function transformMultiFormBody(
|
|
|
338
362
|
|
|
339
363
|
for (const [paramName, paramType] of bodyType.properties) {
|
|
340
364
|
let type: string;
|
|
341
|
-
const bodySchema = getSchemaForType(
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
365
|
+
const bodySchema = getSchemaForType(
|
|
366
|
+
program,
|
|
367
|
+
dpgContext,
|
|
368
|
+
paramType.type,
|
|
369
|
+
[SchemaContext.Exception, SchemaContext.Input],
|
|
370
|
+
false,
|
|
371
|
+
paramType
|
|
372
|
+
) as any;
|
|
345
373
|
if (bodySchema?.format === "byte") {
|
|
346
374
|
type = getBinaryType([SchemaContext.Input, SchemaContext.Exception]);
|
|
347
375
|
} else if (bodySchema?.items?.format === "byte") {
|
|
@@ -350,7 +378,12 @@ function transformMultiFormBody(
|
|
|
350
378
|
SchemaContext.Exception
|
|
351
379
|
])}>`;
|
|
352
380
|
} else {
|
|
353
|
-
type = extractNameFromCadlType(
|
|
381
|
+
type = extractNameFromCadlType(
|
|
382
|
+
program,
|
|
383
|
+
dpgContext,
|
|
384
|
+
paramType.type,
|
|
385
|
+
importedModels
|
|
386
|
+
);
|
|
354
387
|
}
|
|
355
388
|
bodyParameters.body!.push({
|
|
356
389
|
name: paramName,
|
|
@@ -375,11 +408,12 @@ function getBodyDetail(bodyType: Type, headers: ParameterMetadata[]) {
|
|
|
375
408
|
|
|
376
409
|
function extractNameFromCadlType(
|
|
377
410
|
program: Program,
|
|
411
|
+
dpgContext: SdkContext,
|
|
378
412
|
cadlType: Type,
|
|
379
413
|
importedModels: Set<string>,
|
|
380
414
|
headers?: ParameterMetadata[]
|
|
381
415
|
) {
|
|
382
|
-
const bodySchema = getSchemaForType(program, cadlType, [
|
|
416
|
+
const bodySchema = getSchemaForType(program, dpgContext, cadlType, [
|
|
383
417
|
SchemaContext.Input,
|
|
384
418
|
SchemaContext.Exception
|
|
385
419
|
]) as Schema;
|
|
@@ -437,6 +471,7 @@ function generateAnomymousModelSigniture(
|
|
|
437
471
|
|
|
438
472
|
function extractDescriptionsFromBody(
|
|
439
473
|
program: Program,
|
|
474
|
+
dpgContext: SdkContext,
|
|
440
475
|
bodyType: Type,
|
|
441
476
|
parameters: HttpOperationParameters
|
|
442
477
|
) {
|
|
@@ -445,7 +480,7 @@ function extractDescriptionsFromBody(
|
|
|
445
480
|
getFormattedPropertyDoc(
|
|
446
481
|
program,
|
|
447
482
|
parameters.bodyParameter,
|
|
448
|
-
getSchemaForType(program, bodyType, [
|
|
483
|
+
getSchemaForType(program, dpgContext, bodyType, [
|
|
449
484
|
SchemaContext.Input,
|
|
450
485
|
SchemaContext.Exception
|
|
451
486
|
])
|
|
@@ -455,9 +490,9 @@ function extractDescriptionsFromBody(
|
|
|
455
490
|
|
|
456
491
|
export function getSpecialSerializeInfo(parameter: HttpOperationParameter) {
|
|
457
492
|
let hasMultiCollection = false;
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
493
|
+
let hasPipeCollection = false;
|
|
494
|
+
let hasSsvCollection = false;
|
|
495
|
+
let hasTsvCollection = false;
|
|
461
496
|
const descriptions = [];
|
|
462
497
|
const collectionInfo = [];
|
|
463
498
|
if (
|
|
@@ -468,7 +503,23 @@ export function getSpecialSerializeInfo(parameter: HttpOperationParameter) {
|
|
|
468
503
|
descriptions.push("buildMultiCollection");
|
|
469
504
|
collectionInfo.push("multi");
|
|
470
505
|
}
|
|
471
|
-
|
|
506
|
+
if (parameter.type === "query" && (parameter as any).format === "ssv") {
|
|
507
|
+
hasSsvCollection = true;
|
|
508
|
+
descriptions.push("buildSsvCollection");
|
|
509
|
+
collectionInfo.push("ssv");
|
|
510
|
+
}
|
|
511
|
+
|
|
512
|
+
if (parameter.type === "query" && (parameter as any).format === "tsv") {
|
|
513
|
+
hasTsvCollection = true;
|
|
514
|
+
descriptions.push("buildTsvCollection");
|
|
515
|
+
collectionInfo.push("tsv");
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
if (parameter.type === "query" && (parameter as any).format === "pipes") {
|
|
519
|
+
hasPipeCollection = true;
|
|
520
|
+
descriptions.push("buildPipeCollection");
|
|
521
|
+
collectionInfo.push("pipe");
|
|
522
|
+
}
|
|
472
523
|
return {
|
|
473
524
|
hasMultiCollection,
|
|
474
525
|
hasPipeCollection,
|
|
@@ -26,11 +26,11 @@ import {
|
|
|
26
26
|
} from "@azure-tools/typespec-client-generator-core";
|
|
27
27
|
import { getSchemaForType } from "../modelUtils.js";
|
|
28
28
|
import {
|
|
29
|
+
extractOperationLroDetail,
|
|
29
30
|
getOperationGroupName,
|
|
30
31
|
getOperationStatuscode,
|
|
31
32
|
isDefaultStatusCode,
|
|
32
33
|
isDefinedStatusCode,
|
|
33
|
-
isLongRunningOperation,
|
|
34
34
|
isPagingOperation
|
|
35
35
|
} from "../operationUtil.js";
|
|
36
36
|
|
|
@@ -48,13 +48,13 @@ export function transformPaths(
|
|
|
48
48
|
);
|
|
49
49
|
for (const op of operations) {
|
|
50
50
|
const route = ignoreDiagnostics(getHttpOperation(program, op));
|
|
51
|
-
transformOperation(program, route, paths,
|
|
51
|
+
transformOperation(program, dpgContext, route, paths, operationGroup);
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
54
|
const clientOperations = listOperationsInOperationGroup(dpgContext, client);
|
|
55
55
|
for (const clientOp of clientOperations) {
|
|
56
56
|
const route = ignoreDiagnostics(getHttpOperation(program, clientOp));
|
|
57
|
-
transformOperation(program, route, paths
|
|
57
|
+
transformOperation(program, dpgContext, route, paths);
|
|
58
58
|
}
|
|
59
59
|
return paths;
|
|
60
60
|
}
|
|
@@ -97,33 +97,38 @@ function getResponseTypes(
|
|
|
97
97
|
|
|
98
98
|
function transformOperation(
|
|
99
99
|
program: Program,
|
|
100
|
+
dpgContext: SdkContext,
|
|
100
101
|
route: HttpOperation,
|
|
101
102
|
paths: Paths,
|
|
102
|
-
|
|
103
|
+
|
|
103
104
|
operationGroup?: SdkOperationGroup
|
|
104
105
|
) {
|
|
105
106
|
const respNames = [];
|
|
107
|
+
const operationGroupName = getOperationGroupName(operationGroup);
|
|
106
108
|
for (const resp of route.responses) {
|
|
107
109
|
const respName = getResponseTypeName(
|
|
108
|
-
|
|
110
|
+
operationGroupName,
|
|
109
111
|
route.operation.name,
|
|
110
112
|
getOperationStatuscode(resp)
|
|
111
113
|
);
|
|
112
114
|
respNames.push(respName);
|
|
113
115
|
}
|
|
116
|
+
const responseTypes = getResponseTypes(route, operationGroup);
|
|
114
117
|
const method: OperationMethod = {
|
|
115
118
|
description: getDoc(program, route.operation) ?? "",
|
|
116
119
|
hasOptionalOptions: !hasRequiredOptions(dpgContext, route.parameters),
|
|
117
|
-
optionsName: getParameterTypeName(
|
|
118
|
-
|
|
119
|
-
route.operation.name
|
|
120
|
-
),
|
|
121
|
-
responseTypes: getResponseTypes(route, operationGroup),
|
|
120
|
+
optionsName: getParameterTypeName(operationGroupName, route.operation.name),
|
|
121
|
+
responseTypes,
|
|
122
122
|
returnType: respNames.join(" | "),
|
|
123
123
|
successStatus: gerOperationSuccessStatus(route),
|
|
124
124
|
operationName: route.operation.name,
|
|
125
|
-
|
|
126
|
-
|
|
125
|
+
operationHelperDetail: {
|
|
126
|
+
lroDetails: extractOperationLroDetail(
|
|
127
|
+
program,
|
|
128
|
+
route,
|
|
129
|
+
responseTypes,
|
|
130
|
+
operationGroupName
|
|
131
|
+
),
|
|
127
132
|
isPageable: isPagingOperation(program, route)
|
|
128
133
|
}
|
|
129
134
|
};
|
|
@@ -137,15 +142,19 @@ function transformOperation(
|
|
|
137
142
|
} else {
|
|
138
143
|
paths[route.path] = {
|
|
139
144
|
description: getDoc(program, route.operation) ?? "",
|
|
140
|
-
name: route.operation.name || "Client",
|
|
145
|
+
name: escapeCoreName(route.operation.name || "Client"),
|
|
141
146
|
pathParameters: route.parameters.parameters
|
|
142
147
|
.filter((p) => p.type === "path")
|
|
143
148
|
.map((p) => {
|
|
144
149
|
return {
|
|
145
150
|
name: p.name,
|
|
146
151
|
type: p.param.sourceProperty
|
|
147
|
-
? getSchemaForType(
|
|
148
|
-
|
|
152
|
+
? getSchemaForType(
|
|
153
|
+
program,
|
|
154
|
+
dpgContext,
|
|
155
|
+
p.param.sourceProperty?.type
|
|
156
|
+
).type
|
|
157
|
+
: getSchemaForType(program, dpgContext, p.param.type).type,
|
|
149
158
|
description: getDoc(program, p.param)
|
|
150
159
|
};
|
|
151
160
|
}),
|
|
@@ -157,6 +166,12 @@ function transformOperation(
|
|
|
157
166
|
}
|
|
158
167
|
}
|
|
159
168
|
|
|
169
|
+
function escapeCoreName(name: string) {
|
|
170
|
+
if (["client", "streamablemethod"].indexOf(name.toLowerCase()) > -1) {
|
|
171
|
+
return "_" + name;
|
|
172
|
+
}
|
|
173
|
+
return name;
|
|
174
|
+
}
|
|
160
175
|
function hasRequiredOptions(
|
|
161
176
|
dpgContext: SdkContext,
|
|
162
177
|
routeParameters: HttpOperationParameters
|
|
@@ -14,7 +14,8 @@ import {
|
|
|
14
14
|
OperationResponse,
|
|
15
15
|
ResponseMetadata,
|
|
16
16
|
Schema,
|
|
17
|
-
SchemaContext
|
|
17
|
+
SchemaContext,
|
|
18
|
+
getLroLogicalResponseName
|
|
18
19
|
} from "@azure-tools/rlc-common";
|
|
19
20
|
import { Program, getDoc, ignoreDiagnostics } from "@typespec/compiler";
|
|
20
21
|
import {
|
|
@@ -31,7 +32,8 @@ import {
|
|
|
31
32
|
import {
|
|
32
33
|
getOperationGroupName,
|
|
33
34
|
getOperationStatuscode,
|
|
34
|
-
isBinaryPayload
|
|
35
|
+
isBinaryPayload,
|
|
36
|
+
getOperationLroOverload
|
|
35
37
|
} from "../operationUtil.js";
|
|
36
38
|
|
|
37
39
|
export function transformToResponseTypes(
|
|
@@ -77,15 +79,24 @@ export function transformToResponseTypes(
|
|
|
77
79
|
description: resp.description
|
|
78
80
|
};
|
|
79
81
|
// transform header
|
|
80
|
-
const headers = transformHeaders(program, resp);
|
|
82
|
+
const headers = transformHeaders(program, dpgContext, resp);
|
|
81
83
|
// transform body
|
|
82
|
-
const body = transformBody(program, resp, inputImportedSet);
|
|
84
|
+
const body = transformBody(program, dpgContext, resp, inputImportedSet);
|
|
83
85
|
rlcOperationUnit.responses.push({
|
|
84
86
|
...rlcResponseUnit,
|
|
85
87
|
headers,
|
|
86
88
|
body
|
|
87
89
|
});
|
|
88
90
|
}
|
|
91
|
+
const lroLogicalResponse = transformLroLogicalResponse(
|
|
92
|
+
program,
|
|
93
|
+
route,
|
|
94
|
+
getOperationGroupName(operationGroup),
|
|
95
|
+
rlcOperationUnit.responses
|
|
96
|
+
);
|
|
97
|
+
if (lroLogicalResponse) {
|
|
98
|
+
rlcOperationUnit.responses.push(lroLogicalResponse);
|
|
99
|
+
}
|
|
89
100
|
rlcResponses.push(rlcOperationUnit);
|
|
90
101
|
}
|
|
91
102
|
return rlcResponses;
|
|
@@ -99,6 +110,7 @@ export function transformToResponseTypes(
|
|
|
99
110
|
*/
|
|
100
111
|
function transformHeaders(
|
|
101
112
|
program: Program,
|
|
113
|
+
dpgContext: SdkContext,
|
|
102
114
|
response: HttpOperationResponse
|
|
103
115
|
): ResponseHeaderSchema[] | undefined {
|
|
104
116
|
if (!response.responses.length) {
|
|
@@ -120,7 +132,7 @@ function transformHeaders(
|
|
|
120
132
|
if (!value) {
|
|
121
133
|
continue;
|
|
122
134
|
}
|
|
123
|
-
const typeSchema = getSchemaForType(program, value!.type, [
|
|
135
|
+
const typeSchema = getSchemaForType(program, dpgContext, value!.type, [
|
|
124
136
|
SchemaContext.Output
|
|
125
137
|
]) as Schema;
|
|
126
138
|
const type = getTypeName(typeSchema);
|
|
@@ -139,6 +151,7 @@ function transformHeaders(
|
|
|
139
151
|
|
|
140
152
|
function transformBody(
|
|
141
153
|
program: Program,
|
|
154
|
+
dpgContext: SdkContext,
|
|
142
155
|
response: HttpOperationResponse,
|
|
143
156
|
importedModels: Set<string>
|
|
144
157
|
) {
|
|
@@ -163,7 +176,7 @@ function transformBody(
|
|
|
163
176
|
descriptions.add("Value may contain any sequence of octets");
|
|
164
177
|
continue;
|
|
165
178
|
}
|
|
166
|
-
const bodySchema = getSchemaForType(program, body!.type, [
|
|
179
|
+
const bodySchema = getSchemaForType(program, dpgContext, body!.type, [
|
|
167
180
|
SchemaContext.Output
|
|
168
181
|
]) as Schema;
|
|
169
182
|
if (bodySchema.fromCore) {
|
|
@@ -188,3 +201,34 @@ function transformBody(
|
|
|
188
201
|
fromCore
|
|
189
202
|
};
|
|
190
203
|
}
|
|
204
|
+
|
|
205
|
+
function transformLroLogicalResponse(
|
|
206
|
+
program: Program,
|
|
207
|
+
route: HttpOperation,
|
|
208
|
+
operationGroupName: string,
|
|
209
|
+
existingResponses: ResponseMetadata[]
|
|
210
|
+
): ResponseMetadata | undefined {
|
|
211
|
+
const operationLroOverload = getOperationLroOverload(
|
|
212
|
+
program,
|
|
213
|
+
route,
|
|
214
|
+
undefined,
|
|
215
|
+
existingResponses
|
|
216
|
+
);
|
|
217
|
+
if (!operationLroOverload) {
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
const sortedResponses = existingResponses
|
|
221
|
+
.filter((r) => r.statusCode.startsWith("20"))
|
|
222
|
+
.sort((r1, r2) => (r1.statusCode > r2.statusCode ? -1 : 1));
|
|
223
|
+
const successResp = sortedResponses[0];
|
|
224
|
+
const logicalLROResponse: ResponseMetadata = {
|
|
225
|
+
statusCode: "200",
|
|
226
|
+
description: `The final response for long-running ${route.operation.name} operation`,
|
|
227
|
+
predefinedName: getLroLogicalResponseName(
|
|
228
|
+
operationGroupName,
|
|
229
|
+
route.operation.name
|
|
230
|
+
),
|
|
231
|
+
body: successResp?.body
|
|
232
|
+
};
|
|
233
|
+
return logicalLROResponse;
|
|
234
|
+
}
|
|
@@ -68,7 +68,7 @@ export function transformSchemas(
|
|
|
68
68
|
}
|
|
69
69
|
}
|
|
70
70
|
program.stateMap(modelKey).forEach((context, cadlModel) => {
|
|
71
|
-
const model = getSchemaForType(program, cadlModel, context);
|
|
71
|
+
const model = getSchemaForType(program, dpgContext, cadlModel, context);
|
|
72
72
|
if (model) {
|
|
73
73
|
model.usage = context;
|
|
74
74
|
}
|