UNPKG

backend-smith

Version:

A CLI tool for automating backend component generation in Express.js, including modules, schemas, routes, services, and more.

54 lines (45 loc) 2.33 kB
import { parseFieldsHelper, type Field } from "../helper/parseFieldsHelper" import { toPascalCase } from "../helper/toPascalCase"; export const schemaTemplate = (module: string, fields: string[]) => { const parsedFields = parseFieldsHelper(fields); const name = toPascalCase(module) const types: string[] = []; const toSchema = (fields: Record<string, Field>) => { let result: string = '{'; Object.entries(fields).forEach(([key, field]) => { if (typeof field.type === 'string') { result += `${key}: { type: ${field.type}, required: ${field.required} ${field.enum ? `, enum: ["${field.enum.join('", "')}"]` : ''}},${'\n'}` } else if (Array.isArray(field.type)) { if (typeof field.type[0] === 'string') { if (field.enum) { result += `${key}: { type: [${field.type[0]}], required: ${field.required} ${field.enum ? `, enum: ["${field.enum.join('", "')}"]` : ''}},${'\n'}` } else { result += `${key}: [{ type: ${field.type[0]}, required: ${field.required}}],${'\n'}` } } else { const name = toPascalCase(key) types.push(`I${name}`); result += `${key}: [new Schema<I${name}>(${toSchema(field.type[0])}, { timestamps: false, _id: false })],${'\n'}` } } else if (typeof field.type === 'object' && !Array.isArray(field.type) && field.type != null) { const name = toPascalCase(key) types.push(`I${name}`); result += `${key}: new Schema<I${name}>(${toSchema(field.type)}, { timestamps: false, _id: false }),${'\n'}` } }) result += '}' return result; } const schemaString = toSchema(parsedFields); return ` import mongoose from "mongoose"; import { type I${name} ${types.length ? `,${types.join(', ')} ` : ''} } from "./${module}.dto"; const Schema = mongoose.Schema; const ${name}Schema = new Schema<I${name}>(${schemaString}, { timestamps: true }); export default mongoose.model<I${name}>("${module}", ${name}Schema); ` }