openai
Version:
The official TypeScript library for the OpenAI API
55 lines (52 loc) • 1.41 kB
text/typescript
import { ZodTupleDef, ZodTupleItems, ZodTypeAny } from 'zod';
import { JsonSchema7Type, parseDef } from '../parseDef';
import { Refs } from '../Refs';
export type JsonSchema7TupleType = {
type: 'array';
minItems: number;
items: JsonSchema7Type[];
} & (
| {
maxItems: number;
}
| {
additionalItems?: JsonSchema7Type | undefined;
}
);
export function parseTupleDef(
def: ZodTupleDef<ZodTupleItems | [], ZodTypeAny | null>,
refs: Refs,
): JsonSchema7TupleType {
if (def.rest) {
return {
type: 'array',
minItems: def.items.length,
items: def.items
.map((x, i) =>
parseDef(x._def, {
...refs,
currentPath: [...refs.currentPath, 'items', `${i}`],
}),
)
.reduce((acc: JsonSchema7Type[], x) => (x === undefined ? acc : [...acc, x]), []),
additionalItems: parseDef(def.rest._def, {
...refs,
currentPath: [...refs.currentPath, 'additionalItems'],
}),
};
} else {
return {
type: 'array',
minItems: def.items.length,
maxItems: def.items.length,
items: def.items
.map((x, i) =>
parseDef(x._def, {
...refs,
currentPath: [...refs.currentPath, 'items', `${i}`],
}),
)
.reduce((acc: JsonSchema7Type[], x) => (x === undefined ? acc : [...acc, x]), []),
};
}
}