Skip to content

Commit b11ceea

Browse files
committed
fix(enum-values): access optional prop child props
1 parent 82e98b4 commit b11ceea

File tree

2 files changed

+13
-3
lines changed

2 files changed

+13
-3
lines changed

packages/openapi-typescript/src/lib/ts.ts

+12-2
Original file line numberDiff line numberDiff line change
@@ -116,13 +116,13 @@ export function addJSDocComment(schemaObject: AnnotatedSchemaObject, node: ts.Pr
116116
}
117117

118118
/** 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 {
120120
const { pointer } = parseRef(path);
121121
if (pointer.length === 0) {
122122
throw new Error(`Error parsing $ref: ${path}. Is this a valid $ref?`);
123123
}
124124
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])),
126126
);
127127
if (pointer.length > 1) {
128128
for (let i = 1; i < pointer.length; i++) {
@@ -251,6 +251,16 @@ export function tsArrayLiteralExpression(
251251
let variableName = sanitizeMemberName(name);
252252
variableName = `${variableName[0].toLowerCase()}${variableName.substring(1)}`;
253253

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+
254264
const arrayType = options?.readonly
255265
? tsReadonlyArray(elementType, options.injectFooter)
256266
: ts.factory.createArrayTypeNode(elementType);

packages/openapi-typescript/src/transform/schema-object.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ export function transformSchemaObjectWithComposition(
148148

149149
const enumValuesArray = tsArrayLiteralExpression(
150150
enumValuesVariableName,
151-
oapiRef(options.path ?? ""),
151+
oapiRef(options.path ?? "", true),
152152
schemaObject.enum as (string | number)[],
153153
{
154154
export: true,

0 commit comments

Comments
 (0)