generator-begcode
Version:
Spring Boot + Angular/React/Vue in one handy generator
70 lines (69 loc) • 2.77 kB
JavaScript
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}-` : '',
};
};