Skip to content

Commit b0853b2

Browse files
qiaozhav-jiaodi
andauthored
Add api version in ClientOptions and policy inside generated client (#2561)
* remove-api-version-from-options-and-add-policy-inside-client * generate api version in client side * to not use delete * fix ci error * fix autorest ci * fix ci * api version support * fix ci * fix ci * fix autorest codegen ci * add use options for documentation * resolve comments * fix ci * merge main * fix docs * fix ci * fix ci error * fix ci * fix unit test --------- Co-authored-by: Jiao Di (MSFT) <80496810+v-jiaodi@users.noreply.github.com>
1 parent 773418d commit b0853b2

253 files changed

Lines changed: 1847 additions & 962 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

packages/autorest.typescript/src/restLevelClient/transforms/transform.ts

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,12 @@ function transformApiVersion(
7373
const queryVersionDetail = getOperationQueryApiVersion(model);
7474
const pathVersionDetail = extractPathApiVersion(urlInfo);
7575
const isCrossedVersion =
76-
pathVersionDetail?.isCrossedVersion || queryVersionDetail?.isCrossedVersion;
76+
queryVersionDetail || pathVersionDetail
77+
? Boolean(
78+
pathVersionDetail?.isCrossedVersion ||
79+
queryVersionDetail?.isCrossedVersion
80+
)
81+
: undefined;
7782
let defaultValue =
7883
pathVersionDetail?.defaultValue ?? queryVersionDetail?.defaultValue;
7984

@@ -88,7 +93,8 @@ function transformApiVersion(
8893
pathVersionDetail
8994
),
9095
isCrossedVersion,
91-
defaultValue
96+
defaultValue,
97+
required: pathVersionDetail?.required ?? queryVersionDetail?.required
9298
};
9399
}
94100

@@ -112,9 +118,10 @@ function getOperationQueryApiVersion(
112118

113119
if (apiVersionParam && isConstantSchema(apiVersionParam.schema)) {
114120
return {
115-
definedPosition: "path",
121+
definedPosition: "query",
116122
isCrossedVersion: false,
117-
defaultValue: apiVersionParam.schema.value.value.toString()
123+
defaultValue: apiVersionParam.schema.value.value.toString(),
124+
required: apiVersionParam.required
118125
};
119126
}
120127

packages/autorest.typescript/test/rlcIntegration/generated/bodyComplexRest/src/bodyComplexRestClient.ts

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,20 @@ import { getClient, ClientOptions } from "@azure-rest/core-client";
55
import { logger } from "./logger";
66
import { BodyComplexRestClient } from "./clientDefinitions";
77

8+
/** The optional parameters for the client */
9+
export interface BodyComplexRestClientOptions extends ClientOptions {
10+
/** The api version option of the client */
11+
apiVersion?: string;
12+
}
13+
814
/**
915
* Initialize a new instance of `BodyComplexRestClient`
1016
* @param options - the parameter for all optional parameters
1117
*/
12-
export default function createClient(
13-
options: ClientOptions = {},
14-
): BodyComplexRestClient {
18+
export default function createClient({
19+
apiVersion = "2016-02-29",
20+
...options
21+
}: BodyComplexRestClientOptions = {}): BodyComplexRestClient {
1522
const endpointUrl =
1623
options.endpoint ?? options.baseUrl ?? `http://localhost:3000`;
1724
const userAgentInfo = `azsdk-js-body-complex-rest/1.0.0-preview1`;
@@ -28,15 +35,23 @@ export default function createClient(
2835
logger: options.loggingOptions?.logger ?? logger.info,
2936
},
3037
};
31-
3238
const client = getClient(endpointUrl, options) as BodyComplexRestClient;
3339

3440
client.pipeline.removePolicy({ name: "ApiVersionPolicy" });
35-
if (options.apiVersion) {
36-
logger.warning(
37-
"This client does not support client api-version, please change it at the operation level",
38-
);
39-
}
41+
client.pipeline.addPolicy({
42+
name: "ClientApiVersionPolicy",
43+
sendRequest: (req, next) => {
44+
// Use the apiVersion defined in request url directly
45+
// Append one if there is no apiVersion and we have one at client options
46+
const url = new URL(req.url);
47+
if (!url.searchParams.get("api-version") && apiVersion) {
48+
req.url = `${req.url}${
49+
Array.from(url.searchParams.keys()).length > 0 ? "&" : "?"
50+
}api-version=${apiVersion}`;
51+
}
4052

53+
return next(req);
54+
},
55+
});
4156
return client;
4257
}

packages/autorest.typescript/test/rlcIntegration/generated/bodyFileRest/src/bodyFile.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,15 @@ import { getClient, ClientOptions } from "@azure-rest/core-client";
55
import { logger } from "./logger";
66
import { BodyFileClient } from "./clientDefinitions";
77

8+
/** The optional parameters for the client */
9+
export interface BodyFileClientOptions extends ClientOptions {}
10+
811
/**
912
* Initialize a new instance of `BodyFileClient`
1013
* @param options - the parameter for all optional parameters
1114
*/
1215
export default function createClient(
13-
options: ClientOptions = {},
16+
options: BodyFileClientOptions = {},
1417
): BodyFileClient {
1518
const endpointUrl =
1619
options.endpoint ?? options.baseUrl ?? `http://localhost:3000`;
@@ -28,7 +31,6 @@ export default function createClient(
2831
logger: options.loggingOptions?.logger ?? logger.info,
2932
},
3033
};
31-
3234
const client = getClient(endpointUrl, options) as BodyFileClient;
3335

3436
client.pipeline.removePolicy({ name: "ApiVersionPolicy" });

packages/autorest.typescript/test/rlcIntegration/generated/bodyFormDataRest/src/bodyFormData.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,15 @@ import { getClient, ClientOptions } from "@azure-rest/core-client";
55
import { logger } from "./logger";
66
import { BodyFormDataClient } from "./clientDefinitions";
77

8+
/** The optional parameters for the client */
9+
export interface BodyFormDataClientOptions extends ClientOptions {}
10+
811
/**
912
* Initialize a new instance of `BodyFormDataClient`
1013
* @param options - the parameter for all optional parameters
1114
*/
1215
export default function createClient(
13-
options: ClientOptions = {},
16+
options: BodyFormDataClientOptions = {},
1417
): BodyFormDataClient {
1518
const endpointUrl =
1619
options.endpoint ?? options.baseUrl ?? `http://localhost:3000`;
@@ -28,7 +31,6 @@ export default function createClient(
2831
logger: options.loggingOptions?.logger ?? logger.info,
2932
},
3033
};
31-
3234
const client = getClient(endpointUrl, options) as BodyFormDataClient;
3335

3436
client.pipeline.removePolicy({ name: "ApiVersionPolicy" });

packages/autorest.typescript/test/rlcIntegration/generated/bodyStringRest/src/bodyStringRest.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,15 @@ import { getClient, ClientOptions } from "@azure-rest/core-client";
55
import { logger } from "./logger";
66
import { BodyStringRestClient } from "./clientDefinitions";
77

8+
/** The optional parameters for the client */
9+
export interface BodyStringRestClientOptions extends ClientOptions {}
10+
811
/**
912
* Initialize a new instance of `BodyStringRestClient`
1013
* @param options - the parameter for all optional parameters
1114
*/
1215
export default function createClient(
13-
options: ClientOptions = {},
16+
options: BodyStringRestClientOptions = {},
1417
): BodyStringRestClient {
1518
const endpointUrl =
1619
options.endpoint ?? options.baseUrl ?? `http://localhost:3000`;
@@ -28,7 +31,6 @@ export default function createClient(
2831
logger: options.loggingOptions?.logger ?? logger.info,
2932
},
3033
};
31-
3234
const client = getClient(endpointUrl, options) as BodyStringRestClient;
3335

3436
client.pipeline.removePolicy({ name: "ApiVersionPolicy" });

packages/autorest.typescript/test/rlcIntegration/generated/customUrlRest/src/customUrlRestClient.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,17 @@ import { getClient, ClientOptions } from "@azure-rest/core-client";
55
import { logger } from "./logger";
66
import { CustomUrlRestClient } from "./clientDefinitions";
77

8+
/** The optional parameters for the client */
9+
export interface CustomUrlRestClientOptions extends ClientOptions {}
10+
811
/**
912
* Initialize a new instance of `CustomUrlRestClient`
1013
* @param host - A string value that is used as a global part of the parameterized host
1114
* @param options - the parameter for all optional parameters
1215
*/
1316
export default function createClient(
1417
host: string,
15-
options: ClientOptions = {},
18+
options: CustomUrlRestClientOptions = {},
1619
): CustomUrlRestClient {
1720
const endpointUrl =
1821
options.endpoint ?? options.baseUrl ?? `http://{accountName}${host}`;
@@ -30,7 +33,6 @@ export default function createClient(
3033
logger: options.loggingOptions?.logger ?? logger.info,
3134
},
3235
};
33-
3436
const client = getClient(endpointUrl, options) as CustomUrlRestClient;
3537

3638
client.pipeline.removePolicy({ name: "ApiVersionPolicy" });

packages/autorest.typescript/test/rlcIntegration/generated/dpgCustomization/src/dPGCustomizationClient.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,15 @@ import { getClient, ClientOptions } from "@azure-rest/core-client";
55
import { logger } from "./logger";
66
import { DPGCustomizationClient } from "./clientDefinitions";
77

8+
/** The optional parameters for the client */
9+
export interface DPGCustomizationClientOptions extends ClientOptions {}
10+
811
/**
912
* Initialize a new instance of `DPGCustomizationClient`
1013
* @param options - the parameter for all optional parameters
1114
*/
1215
export default function createClient(
13-
options: ClientOptions = {},
16+
options: DPGCustomizationClientOptions = {},
1417
): DPGCustomizationClient {
1518
const endpointUrl =
1619
options.endpoint ?? options.baseUrl ?? `http://localhost:3000`;
@@ -28,7 +31,6 @@ export default function createClient(
2831
logger: options.loggingOptions?.logger ?? logger.info,
2932
},
3033
};
31-
3234
const client = getClient(endpointUrl, options) as DPGCustomizationClient;
3335

3436
client.pipeline.removePolicy({ name: "ApiVersionPolicy" });

packages/autorest.typescript/test/rlcIntegration/generated/headerRest/src/headerRestClient.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,15 @@ import { getClient, ClientOptions } from "@azure-rest/core-client";
55
import { logger } from "./logger";
66
import { HeaderRestClient } from "./clientDefinitions";
77

8+
/** The optional parameters for the client */
9+
export interface HeaderRestClientOptions extends ClientOptions {}
10+
811
/**
912
* Initialize a new instance of `HeaderRestClient`
1013
* @param options - the parameter for all optional parameters
1114
*/
1215
export default function createClient(
13-
options: ClientOptions = {},
16+
options: HeaderRestClientOptions = {},
1417
): HeaderRestClient {
1518
const endpointUrl =
1619
options.endpoint ?? options.baseUrl ?? `http://localhost:3000`;
@@ -28,7 +31,6 @@ export default function createClient(
2831
logger: options.loggingOptions?.logger ?? logger.info,
2932
},
3033
};
31-
3234
const client = getClient(endpointUrl, options) as HeaderRestClient;
3335

3436
client.pipeline.removePolicy({ name: "ApiVersionPolicy" });

packages/autorest.typescript/test/rlcIntegration/generated/httpInfrastructureRest/src/httpInfrastructureRestClient.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,15 @@ import { getClient, ClientOptions } from "@azure-rest/core-client";
55
import { logger } from "./logger";
66
import { HttpInfrastructureRestClient } from "./clientDefinitions";
77

8+
/** The optional parameters for the client */
9+
export interface HttpInfrastructureRestClientOptions extends ClientOptions {}
10+
811
/**
912
* Initialize a new instance of `HttpInfrastructureRestClient`
1013
* @param options - the parameter for all optional parameters
1114
*/
1215
export default function createClient(
13-
options: ClientOptions = {},
16+
options: HttpInfrastructureRestClientOptions = {},
1417
): HttpInfrastructureRestClient {
1518
const endpointUrl =
1619
options.endpoint ?? options.baseUrl ?? `http://localhost:3000`;
@@ -28,7 +31,6 @@ export default function createClient(
2831
logger: options.loggingOptions?.logger ?? logger.info,
2932
},
3033
};
31-
3234
const client = getClient(
3335
endpointUrl,
3436
options,

packages/autorest.typescript/test/rlcIntegration/generated/lroRest/src/lRORestClient.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,15 @@ import { getClient, ClientOptions } from "@azure-rest/core-client";
55
import { logger } from "./logger";
66
import { LRORestClient } from "./clientDefinitions";
77

8+
/** The optional parameters for the client */
9+
export interface LRORestClientOptions extends ClientOptions {}
10+
811
/**
912
* Initialize a new instance of `LRORestClient`
1013
* @param options - the parameter for all optional parameters
1114
*/
1215
export default function createClient(
13-
options: ClientOptions = {},
16+
options: LRORestClientOptions = {},
1417
): LRORestClient {
1518
const endpointUrl =
1619
options.endpoint ?? options.baseUrl ?? `http://localhost:3000`;
@@ -28,7 +31,6 @@ export default function createClient(
2831
logger: options.loggingOptions?.logger ?? logger.info,
2932
},
3033
};
31-
3234
const client = getClient(endpointUrl, options) as LRORestClient;
3335

3436
client.pipeline.removePolicy({ name: "ApiVersionPolicy" });

0 commit comments

Comments
 (0)