@@ -15,12 +15,22 @@ import { pascalCase } from 'change-case'
1515import { getPhpType } from './map-php-type.js'
1616
1717export type ResourceClassProperty =
18- | { name : string ; kind : 'value' ; phpType : string }
19- | { name : string ; kind : 'objectReference' ; referenceName : string }
20- | { name : string ; kind : 'listReference' ; referenceName : string }
18+ | ( { kind : 'value' ; phpType : string } & ResourceClassPropertyMetadata )
19+ | ( { kind : 'objectReference' ; referenceName : string } & ResourceClassPropertyMetadata )
20+ | ( { kind : 'listReference' ; referenceName : string } & ResourceClassPropertyMetadata )
21+
22+ interface ResourceClassPropertyMetadata {
23+ name : string
24+ description : string
25+ isDeprecated : boolean
26+ deprecationMessage : string
27+ }
2128
2229export interface ResourceClassSchema {
2330 name : string
31+ description : string
32+ isDeprecated : boolean
33+ deprecationMessage : string
2434 properties : ResourceClassProperty [ ]
2535}
2636
@@ -72,9 +82,18 @@ export const createResourceModel = (blueprint: Blueprint): ResourceModel => {
7282 name : string ,
7383 properties : Property [ ] ,
7484 baseName : string ,
85+ description = '' ,
86+ isDeprecated = false ,
87+ deprecationMessage = '' ,
7588 ) : void => {
7689 if ( classes . has ( name ) ) return
77- const schema : ResourceClassSchema = { name, properties : [ ] }
90+ const schema : ResourceClassSchema = {
91+ name,
92+ description,
93+ isDeprecated,
94+ deprecationMessage,
95+ properties : [ ] ,
96+ }
7897 classes . set ( name , schema )
7998 if ( name !== currentResourceName ) {
8099 localClassNames . get ( currentResourceName ) ?. push ( name )
@@ -89,7 +108,17 @@ export const createResourceModel = (blueprint: Blueprint): ResourceModel => {
89108 const name = pascalCase ( resourceType )
90109 currentResourceName = name
91110 localClassNames . set ( name , [ ] )
92- addClass ( name , baseResources . get ( resourceType ) ?? [ ] , resourceType )
111+ const sourceResource =
112+ blueprint . resources . find ( ( resource ) => resource . resourceType === resourceType ) ??
113+ ( resourceType === 'event' ? blueprint . events [ 0 ] : blueprint . actionAttempts [ 0 ] )
114+ addClass (
115+ name ,
116+ baseResources . get ( resourceType ) ?? [ ] ,
117+ resourceType ,
118+ sourceResource ?. description ,
119+ sourceResource ?. isDeprecated ,
120+ sourceResource ?. deprecationMessage ,
121+ )
93122
94123 const resourceClass = classes . get ( name )
95124 if ( resourceClass == null ) {
@@ -122,16 +151,29 @@ export const createResourceModel = (blueprint: Blueprint): ResourceModel => {
122151const createResourceClassProperty = (
123152 property : Property ,
124153 baseName : string ,
125- addClass : ( name : string , properties : Property [ ] , baseName : string ) => void ,
154+ addClass : (
155+ name : string ,
156+ properties : Property [ ] ,
157+ baseName : string ,
158+ description ?: string ,
159+ isDeprecated ?: boolean ,
160+ deprecationMessage ?: string ,
161+ ) => void ,
126162) : ResourceClassProperty => {
127163 const referenceName = pascalCase ( `${ baseName } _${ property . name } ` )
164+ const metadata = {
165+ name : property . name ,
166+ description : property . description ,
167+ isDeprecated : property . isDeprecated ,
168+ deprecationMessage : property . deprecationMessage ,
169+ }
128170
129171 if ( property . format === 'object' ) {
130172 const { properties } = property
131173
132174 if ( properties . length > 0 ) {
133- addClass ( referenceName , properties , baseName )
134- return { name : property . name , kind : 'objectReference' , referenceName }
175+ addClass ( referenceName , properties , baseName , property . description )
176+ return { ... metadata , kind : 'objectReference' , referenceName }
135177 }
136178 }
137179
@@ -146,13 +188,13 @@ const createResourceClassProperty = (
146188 : [ ]
147189
148190 if ( itemProperties . length > 0 ) {
149- addClass ( referenceName , itemProperties , baseName )
150- return { name : property . name , kind : 'listReference' , referenceName }
191+ addClass ( referenceName , itemProperties , baseName , property . description )
192+ return { ... metadata , kind : 'listReference' , referenceName }
151193 }
152194 }
153195
154196 return {
155- name : property . name ,
197+ ... metadata ,
156198 kind : 'value' ,
157199 phpType : getPhpType ( property ) ,
158200 }
0 commit comments