UNPKG

backend-smith

Version:

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

55 lines (49 loc) 1.73 kB
export type Field = { type: string | string[] | Array<Record<string, Field>> | Record<string, Field>, required: boolean, enum?: string[] } const possibleFields: Record<string, string> = { String: 'string', Number: 'number', Boolean: 'boolean', }; const getName = (field: string) => { const firstColonIndex = field.indexOf(':'); const name = field.substring(0, firstColonIndex); if (name.charAt(0) === '*') { return { name: name.slice(1), required: true } } return { name, required: false } } const getType = (field: string) => { const firstColonIndex = field.indexOf(':'); const value = field.substring(firstColonIndex + 1); if (['[', '{'].includes(value.charAt(0))) { const fields = value.slice(1, -1); if (possibleFields[fields]) { return { type: [fields] } } else { if (value.includes('|')) { return { type: ["String"], enum: fields.split("|") } } const result = parseFieldsHelper(fields.split(' ')); if (value.charAt(0) == '[') return { type: [result] } return { type: result }; } } if (value.includes('|')) { return { type: "String", enum: value.split("|") } } return { type: value } } export const parseFieldsHelper = (fields: string[]): Record<string, Field> => { const result: Record<string, Field> = {}; fields.forEach(field => { const { name, required } = getName(field) const { type, enum: enumTypes } = getType(field); result[name] = { type: type, required }; if (enumTypes) { result[name].enum = enumTypes } }) return result; }