UNPKG

generator-begcode

Version:

Spring Boot + Angular/React/Vue in one handy generator

83 lines (82 loc) 2.69 kB
import { upperFirst } from 'lodash-es'; import { merge } from '../utils/object-utils.js'; export default class JDLField { name; type; comment; validations; options; constructor(args) { const merged = merge(defaults(), args); if (!merged.name || !merged.type) { throw new Error(`The field name and type are mandatory to create a field. name: ${merged.name}, type: ${merged.type}.`); } this.name = merged.name; this.type = merged.type; this.comment = merged.comment; this.validations = merged.validations ?? {}; this.options = merged.options ?? {}; } addValidation(validation) { if (!validation) { throw new Error("Can't add a nil JDL validation to the JDL field."); } this.validations[validation.name] = validation; } forEachValidation(functionToApply) { if (!functionToApply) { throw new Error('A function must be passed to iterate over validations'); } Object.values(this.validations).forEach(functionToApply); } validationQuantity() { return Object.keys(this.validations).length; } forEachOption(functionToApply) { if (!functionToApply) { throw new Error('A function must be passed to iterate over options'); } Object.entries(this.options).forEach(functionToApply); } optionQuantity() { return Object.keys(this.options).length; } toString() { let string = ''; let lineComment = ''; if (this.comment) { if (this.comment.includes('\n') && this.comment.length > 70) { string += `/**\n${this.comment .split('\n') .map(line => ` * ${line}\n`) .join('')} */\n`; } else { lineComment = ` /** ${this.comment} */`; } } Object.entries(this.options ?? {}).forEach(([key, value]) => { key = upperFirst(key); if (value === true) { string += `@${key}\n`; } else if (typeof value === 'string') { string += `@${key}("${value}")\n`; } else { string += `@${key}(${value})\n`; } }); string += `${this.name} ${this.type}`; Object.keys(this.validations).forEach(validationName => { string += ` ${this.validations[validationName].toString()}`; }); return string + lineComment; } } function defaults() { return { validations: {}, options: {}, }; }