@@ -58,7 +58,7 @@ import {
58
58
isPathParam ,
59
59
HttpOperationBody ,
60
60
} from "@typespec/http" ;
61
- import { Availability , Version , getAddedOnVersions , getAvailabilityMap , getVersion } from "@typespec/versioning" ;
61
+ import { Version , getAddedOnVersions , getVersion } from "@typespec/versioning" ;
62
62
import {
63
63
isPollingLocation ,
64
64
getPagedResult ,
@@ -164,6 +164,7 @@ import {
164
164
modelIs ,
165
165
getNamePrefixForProperty ,
166
166
isAllValueInteger ,
167
+ isStable ,
167
168
} from "./type-utils.js" ;
168
169
import {
169
170
getServiceVersion ,
@@ -558,13 +559,6 @@ export class CodeModelBuilder {
558
559
const versioning = getVersion ( this . program , client . service ) ;
559
560
if ( versioning && versioning . getVersions ( ) ) {
560
561
// @versioned in versioning
561
- codeModelClient . apiVersions = [ ] ;
562
- for ( const version of versioning . getVersions ( ) ) {
563
- const apiVersion = new ApiVersion ( ) ;
564
- apiVersion . version = version . value ;
565
- codeModelClient . apiVersions . push ( apiVersion ) ;
566
- }
567
-
568
562
if ( ! this . sdkContext . apiVersion || [ "all" , "latest" ] . includes ( this . sdkContext . apiVersion ) ) {
569
563
this . apiVersion = getDefaultApiVersion ( this . sdkContext , client . service ) ;
570
564
} else {
@@ -573,6 +567,13 @@ export class CodeModelBuilder {
573
567
throw new Error ( "Unrecognized api-version: " + this . sdkContext . apiVersion ) ;
574
568
}
575
569
}
570
+
571
+ codeModelClient . apiVersions = [ ] ;
572
+ for ( const version of this . getFilteredApiVersions ( this . apiVersion , versioning . getVersions ( ) ) ) {
573
+ const apiVersion = new ApiVersion ( ) ;
574
+ apiVersion . version = version . value ;
575
+ codeModelClient . apiVersions . push ( apiVersion ) ;
576
+ }
576
577
}
577
578
578
579
// server
@@ -665,6 +666,23 @@ export class CodeModelBuilder {
665
666
return clients ;
666
667
}
667
668
669
+ /**
670
+ * Filter api-versions for "ServiceVersion".
671
+ * TODO(xiaofei) pending TCGC design: https://github.com/Azure/typespec-azure/issues/746
672
+ *
673
+ * @param pinnedApiVersion the api-version to use as filter base
674
+ * @param versions api-versions to filter
675
+ * @returns filtered api-versions
676
+ */
677
+ private getFilteredApiVersions ( pinnedApiVersion : Version | undefined , versions : Version [ ] ) : Version [ ] {
678
+ if ( ! pinnedApiVersion ) {
679
+ return versions ;
680
+ }
681
+ return versions
682
+ . slice ( 0 , versions . indexOf ( pinnedApiVersion ) + 1 )
683
+ . filter ( ( version ) => ! isStable ( pinnedApiVersion ) || isStable ( version ) ) ;
684
+ }
685
+
668
686
/**
669
687
* `@armProviderNamespace` currently will add a default server if not defined globally:
670
688
* https://github.com/Azure/typespec-azure/blob/8b8d7c05f168d9305a09691c4fedcb88f4a57652/packages/typespec-azure-resource-manager/src/namespace.ts#L121-L128
@@ -678,9 +696,6 @@ export class CodeModelBuilder {
678
696
}
679
697
680
698
private needToSkipProcessingOperation ( operation : Operation , clientContext : ClientContext ) : boolean {
681
- if ( ! this . existsAtCurrentVersion ( operation ) ) {
682
- return true ;
683
- }
684
699
// don't generate protocol and convenience method for overloaded operations
685
700
// issue link: https://github.com/Azure/autorest.java/issues/1958#issuecomment-1562558219 we will support generate overload methods for non-union type in future (TODO issue: https://github.com/Azure/autorest.java/issues/2160)
686
701
if ( getOverloadedOperation ( this . program , operation ) ) {
@@ -690,20 +705,6 @@ export class CodeModelBuilder {
690
705
return false ;
691
706
}
692
707
693
- private existsAtCurrentVersion ( type : Type ) : boolean {
694
- const availabilityMap = getAvailabilityMap ( this . program , type ) ;
695
- // if unversioned then everything exists
696
- if (
697
- ! availabilityMap ||
698
- ! this . apiVersion ||
699
- this . supportsAdvancedVersioning ( ) // if supports non-breaking versioning, then it always exists
700
- ) {
701
- return true ;
702
- }
703
- const availability = availabilityMap . get ( this . apiVersion ?. name ) ;
704
- return availability === Availability . Added || availability === Availability . Available ;
705
- }
706
-
707
708
/**
708
709
* Whether we support advanced versioning in non-breaking fashion.
709
710
*/
@@ -800,9 +801,7 @@ export class CodeModelBuilder {
800
801
// host
801
802
clientContext . hostParameters . forEach ( ( it ) => codeModelOperation . addParameter ( it ) ) ;
802
803
// parameters
803
- op . parameters . parameters
804
- . filter ( ( param ) => this . existsAtCurrentVersion ( param . param ) )
805
- . map ( ( it ) => this . processParameter ( codeModelOperation , it , clientContext ) ) ;
804
+ op . parameters . parameters . map ( ( it ) => this . processParameter ( codeModelOperation , it , clientContext ) ) ;
806
805
// "accept" header
807
806
this . addAcceptHeaderParameter ( codeModelOperation , op . responses ) ;
808
807
// body
@@ -2294,8 +2293,7 @@ export class CodeModelBuilder {
2294
2293
if (
2295
2294
prop . name === discriminatorPropertyName || // skip the discriminator property
2296
2295
isNeverType ( prop . type ) || // skip property of type "never"
2297
- ! isPayloadProperty ( this . program , prop ) ||
2298
- ! this . existsAtCurrentVersion ( prop )
2296
+ ! isPayloadProperty ( this . program , prop )
2299
2297
) {
2300
2298
continue ;
2301
2299
}
@@ -2331,9 +2329,7 @@ export class CodeModelBuilder {
2331
2329
const resource = this . dummyObjectSchema ( type , resourceModelName , namespace ) ;
2332
2330
const declaredProperties = walkPropertiesInherited ( type ) ;
2333
2331
for ( const prop of declaredProperties ) {
2334
- if ( this . existsAtCurrentVersion ( type ) ) {
2335
- resource . addProperty ( this . processModelProperty ( prop ) ) ;
2336
- }
2332
+ resource . addProperty ( this . processModelProperty ( prop ) ) ;
2337
2333
}
2338
2334
return resource ;
2339
2335
}
0 commit comments