single-source-of-truth
Version:
Use Zod schemas to your generate Prisma schema
53 lines • 1.65 kB
JavaScript
import Cursor from 'code-block-writer';
export function buildFieldLine(field) {
const cursor = new Cursor({});
cursor.write(field.name).space();
cursor.write(resolvePrismaType(field));
if (field.attributes.list)
cursor.write('[]');
if (field.attributes.nullable)
cursor.write('?');
if (field.attributes.id)
cursor.space().write('@id');
if (field.attributes.unique)
cursor.space().write('@unique');
const relation = buildFieldRelationAttribute(field.attributes);
if (relation)
cursor.space().write(relation);
return cursor.toString();
}
function resolvePrismaType(field) {
switch (field.type) {
case 'string':
return 'String';
case 'integer':
return 'Int';
case 'float':
return 'Float';
case 'boolean':
return 'Boolean';
case 'date':
return 'DateTime';
case 'bigint':
return 'BigInt';
case 'object':
return 'Json';
default:
return field.type;
}
}
function buildFieldRelationAttribute(attributes) {
const parts = [];
if (attributes.name)
parts.push(`name:"${attributes.name}"`);
if (attributes.references) {
const fields = attributes.references.map((r) => r[0]);
parts.push(`fields:[${fields.join(',')}]`);
const references = attributes.references.map((r) => r[1]);
parts.push(`references:[${references.join(',')}]`);
}
if (parts.length === 0)
return null;
return `@relation(${parts.join(',')})`;
}
//# sourceMappingURL=field.js.map