edgedb-zod
Version:
Creates Zod schemas for your EdgeDB types
88 lines (87 loc) • 2.49 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.scalarToZod = void 0;
const zodType = (name, ...args) => `${name}(${args})`;
const zodEnum = (values) => {
const str = values.join(", ");
return zodType("enum", `[${str}]`);
};
const scalarToZod = (type) => {
if (type.enum_values) {
const values = type.enum_values.map((v) => `"${v}"`);
return [
zodEnum(values),
];
}
switch (type.name) {
case "std::str":
return [
zodType("string"),
];
case "std::bool":
return [
zodType("boolean"),
];
case "std::json":
return [
zodType("unknown"),
];
case "std::uuid":
return [
zodType("string"),
zodType("uuid"),
];
case "std::int16":
return [
zodType("number"),
zodType("int"),
zodType("min", 0),
zodType("max", 65535),
];
case "std::int32":
return [
zodType("number"),
zodType("int"),
zodType("min", 0),
zodType("max", 2147483647),
];
case "std::int64":
return [
zodType("number"),
zodType("int"),
zodType("min", 0),
];
case "std::bigint":
return [
zodType("bigint"),
];
case "std::datetime":
return [
zodType("string"),
zodType("regex", /^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d{3})?)?Z?$/),
];
case "std::float32":
return [
zodType("number"),
zodType("min", 0),
zodType("max", 3.40282347E+38),
];
case "std::float64":
return [
zodType("number"),
zodType("min", 0),
zodType("max", 1.7976931348623157E+308),
];
// This is not a type in EdgeDB, the JS driver has this
case "std::number":
return [
zodType("number"),
];
default:
// TODO: Null might make more sense
return [
zodType("never"),
];
}
};
exports.scalarToZod = scalarToZod;