dynamodb-toolbox
Version:
Lightweight and type-safe query builder for DynamoDB and TypeScript.
18 lines (17 loc) • 1 kB
JavaScript
import { z } from 'zod';
import { withValidate } from '../utils.js';
import { schemaZodParser } from './schema.js';
import { withDefault, withOptional } from './utils.js';
export const anyOfZodParser = (schema, options = {}) => {
let zodFormatter;
const { discriminator } = schema.props;
if (discriminator !== undefined) {
// LIMITATION: Does not support nested `anyOf`s for now, should change with v4: https://v4.zod.dev/v4#upgraded-zdiscriminatedunion
// LIMITATION: Does not support `savedAs` attributes for now as ZodEffects are not valid discriminatedUnion options
zodFormatter = z.discriminatedUnion(discriminator, schema.elements.map(element => schemaZodParser(element, { ...options, defined: true })));
}
else {
zodFormatter = z.union(schema.elements.map(element => schemaZodParser(element, { ...options, defined: true })));
}
return withDefault(schema, options, withOptional(schema, options, withValidate(schema, zodFormatter)));
};