@@ -116,13 +116,13 @@ export function addJSDocComment(schemaObject: AnnotatedSchemaObject, node: ts.Pr
116
116
}
117
117
118
118
/** Convert OpenAPI ref into TS indexed access node (ex: `components["schemas"]["Foo"]`) */
119
- export function oapiRef ( path : string ) : ts . TypeNode {
119
+ export function oapiRef ( path : string , deepRequired = false ) : ts . TypeNode {
120
120
const { pointer } = parseRef ( path ) ;
121
121
if ( pointer . length === 0 ) {
122
122
throw new Error ( `Error parsing $ref: ${ path } . Is this a valid $ref?` ) ;
123
123
}
124
124
let t : ts . TypeReferenceNode | ts . IndexedAccessTypeNode = ts . factory . createTypeReferenceNode (
125
- ts . factory . createIdentifier ( String ( pointer [ 0 ] ) ) ,
125
+ ts . factory . createIdentifier ( deepRequired ? `DeepRequired< ${ String ( pointer [ 0 ] ) } >` : String ( pointer [ 0 ] ) ) ,
126
126
) ;
127
127
if ( pointer . length > 1 ) {
128
128
for ( let i = 1 ; i < pointer . length ; i ++ ) {
@@ -251,6 +251,16 @@ export function tsArrayLiteralExpression(
251
251
let variableName = sanitizeMemberName ( name ) ;
252
252
variableName = `${ variableName [ 0 ] . toLowerCase ( ) } ${ variableName . substring ( 1 ) } ` ;
253
253
254
+ if (
255
+ options ?. injectFooter &&
256
+ ! options . injectFooter . some ( ( node ) => ts . isTypeAliasDeclaration ( node ) && node ?. name ?. escapedText === "DeepRequired" )
257
+ ) {
258
+ const helper = stringToAST (
259
+ "type DeepRequired<T> = { [K in keyof T]: Required<DeepRequired<T[K]>> };" ,
260
+ ) [ 0 ] as any ;
261
+ options . injectFooter . push ( helper ) ;
262
+ }
263
+
254
264
const arrayType = options ?. readonly
255
265
? tsReadonlyArray ( elementType , options . injectFooter )
256
266
: ts . factory . createArrayTypeNode ( elementType ) ;
0 commit comments