gen-jhipster
Version:
VHipster - Spring Boot + Angular/React/Vue in one handy generator
21 lines (20 loc) • 1.55 kB
JavaScript
import { createNeedleCallback } from "../../base-core/support/needles.js";
export const createEnumNeedleCallback = ({ enumName, enumValues, needle = 'add-item-to-enum', needleValuePrefix = `${enumName} {\n`, }) => createNeedleCallback({
needle,
contentToAdd: (content, needleData) => {
const needleValueSuffix = `;\n`;
const needleValueSeparator = `,\n`;
let beforeContent = content.slice(0, needleData.needleLineIndex);
const afterContent = content.slice(needleData.needleLineIndex);
// Drop extra line ending if it exists, can be caused by prettier formatting
beforeContent = beforeContent.endsWith('/n/n') ? beforeContent.slice(0, -1) : beforeContent;
if (!beforeContent.includes(needleValuePrefix) || !beforeContent.endsWith(needleValueSuffix)) {
throw new Error(`Invalid file content ${beforeContent}, expected to contain ${needleValuePrefix}`);
}
const beforeNeedleContentIndex = beforeContent.lastIndexOf(needleValuePrefix) + needleValuePrefix.length;
const beforeNeedleContent = beforeContent.slice(0, beforeNeedleContentIndex);
let needleContent = beforeContent.slice(beforeNeedleContentIndex).slice(0, -needleValueSuffix.length);
needleContent = needleContent.trim() ? needleContent : '';
return `${beforeNeedleContent}${needleContent}${needleContent ? needleValueSeparator : ''}${enumValues.map(value => `${needleData.indentPrefix}${value}`).join(needleValueSeparator)}${needleValueSuffix}${afterContent}`;
},
});