UNPKG

generator-begcode

Version:

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

70 lines (69 loc) 2.77 kB
import { lowerFirst } from 'lodash-es'; import { formatDocAsJavaDoc } from '../../java/support/doc.js'; const doesTheEnumValueHaveACustomValue = enumValue => enumValue.includes('('); const getCustomValuesState = enumValues => { const state = { withoutCustomValue: 0, withCustomValue: 0, }; enumValues.forEach(enumValue => { if (doesTheEnumValueHaveACustomValue(enumValue)) { state.withCustomValue++; } else { state.withoutCustomValue++; } }); return { withoutCustomValues: state.withCustomValue === 0, withSomeCustomValues: state.withCustomValue !== 0 && state.withoutCustomValue !== 0, withCustomValues: state.withoutCustomValue === 0, }; }; const getEnums = (enums, customValuesState, comments) => { if (customValuesState.withoutCustomValues) { return enums.map(enumValue => ({ name: enumValue, value: enumValue, comment: comments?.[enumValue] && formatDocAsJavaDoc(comments[enumValue], 4), label: comments?.[enumValue] || enumValue, })); } return enums.map(enumValue => { if (!doesTheEnumValueHaveACustomValue(enumValue)) { return { name: enumValue.trim(), value: enumValue.trim(), comment: comments?.[enumValue] && formatDocAsJavaDoc(comments[enumValue], 4), label: comments?.[enumValue] || enumValue, }; } const matched = /\s*(.+?)\s*\((.+?)\)/.exec(enumValue); return { name: matched[1], value: matched[2], comment: comments?.[matched[1]] && formatDocAsJavaDoc(comments[matched[1]], 4), label: comments?.[matched[1]] || matched[1], }; }); }; const extractEnumInstance = field => { const fieldType = field.fieldType; return lowerFirst(fieldType); }; const extractEnumEntries = field => field.fieldValues.split(',').map(fieldValue => fieldValue.trim()); export const getEnumInfo = (field, clientRootFolder) => { field.enumInstance = extractEnumInstance(field); const enums = extractEnumEntries(field); const customValuesState = getCustomValuesState(enums); return { enumName: field.fieldType, title: (field.fieldTypeDocumentation && field.fieldTypeDocumentation.split('\n')[0]) || field.fieldType, enumJavadoc: field.fieldTypeDocumentation && formatDocAsJavaDoc(field.fieldTypeDocumentation), enumInstance: field.enumInstance, enums, ...customValuesState, enumValues: getEnums(enums, customValuesState, field.fieldValuesJavadocs), clientRootFolder: clientRootFolder ? `${clientRootFolder}-` : '', }; };