@@ -850,7 +850,7 @@ function hoistEnumMemberAnnotations (member: model.EnumMember, jsDocs: JSDoc[]):
850
850
// We want to enforce a single jsDoc block.
851
851
assert ( jsDocs , jsDocs . length < 2 , 'Use a single multiline jsDoc block instead of multiple single line blocks' )
852
852
853
- const validTags = [ 'obsolete' , 'obsolete_description' , 'codegen_name' , 'since ' , 'aliases' ]
853
+ const validTags = [ 'obsolete' , 'obsolete_description' , 'codegen_name' , 'availability ' , 'aliases' ]
854
854
const tags = parseJsDocTags ( jsDocs )
855
855
if ( jsDocs . length === 1 ) {
856
856
const description = jsDocs [ 0 ] . getDescription ( )
@@ -862,9 +862,26 @@ function hoistEnumMemberAnnotations (member: model.EnumMember, jsDocs: JSDoc[]):
862
862
member . codegenName = value
863
863
} else if ( tag === 'aliases' ) {
864
864
member . aliases = parseCommaSeparated ( value )
865
- } else if ( tag === 'since' ) {
866
- assert ( jsDocs , semver . valid ( value ) , `${ member . name } 's @since is not valid semver: ${ value } ` )
867
- member . since = value
865
+ } else if ( tag === 'availability' ) {
866
+ // The @availability jsTag is different than most because it allows
867
+ // multiple values within the same docstring, hence needing to parse
868
+ // the values again in order to preserve multiple values.
869
+ const jsDocsMulti = parseJsDocTagsAllowDuplicates ( jsDocs )
870
+ const availabilities = parseAvailabilityTags ( jsDocs , jsDocsMulti . availability )
871
+
872
+ // The absence of an 'availability' field on a property implies that
873
+ // the property is available in all flavors.
874
+ member . availability = { }
875
+ for ( const [ availabilityName , availabilityValue ] of Object . entries ( availabilities ) ) {
876
+ member . availability [ availabilityName ] = availabilityValue
877
+
878
+ // Backfilling deprecated fields on a property.
879
+ if ( availabilityName === 'stack' ) {
880
+ if ( availabilityValue . since !== undefined ) {
881
+ member . since = availabilityValue . since
882
+ }
883
+ }
884
+ }
868
885
} else {
869
886
assert ( jsDocs , false , `Unhandled tag: '${ tag } ' with value: '${ value } ' on enum member ${ member . name } ` )
870
887
}
0 commit comments