generator-begcode
Version:
Spring Boot + Angular/React/Vue in one handy generator
85 lines (84 loc) • 2.41 kB
JavaScript
export default class JDLOptions {
options;
optionSize;
constructor() {
this.options = {};
this.optionSize = 0;
}
addOption(option) {
if (!option || !option.getType) {
throw new Error("Can't add nil option.");
}
if (option.getType() === 'UNARY') {
addUnaryOption(this.options, option);
}
else {
addBinaryOption(this.options, option);
}
this.optionSize++;
}
getOptions() {
const options = [];
Object.values(this.options).forEach(item => {
if (item.getType && item.getType() === 'UNARY') {
options.push(item);
return;
}
Object.values(item).forEach(option => options.push(option));
});
return options;
}
getOptionsForName(optionName) {
if (!optionName) {
return [];
}
return this.getOptions().filter(option => option.name === optionName);
}
has(optionName) {
if (!optionName) {
return false;
}
return !!this.options[optionName] || this.getOptions().filter(option => option.name === optionName).length !== 0;
}
size() {
return this.optionSize;
}
forEach(passedFunction, thisArg) {
if (!passedFunction) {
return;
}
this.getOptions().forEach(jdlOption => {
passedFunction.call(thisArg, jdlOption);
});
}
toString(indent = 0) {
if (this.optionSize === 0) {
return '';
}
const options = this.getOptions();
const spaceBeforeEachOption = ' '.repeat(indent);
return options.map(jdlOption => `${spaceBeforeEachOption}${jdlOption.toString()}`).join('\n');
}
}
function addUnaryOption(options, optionToAdd) {
const key = optionToAdd.name;
if (!options[key]) {
options[key] = optionToAdd;
return;
}
options[key].addEntitiesFromAnotherOption(optionToAdd);
}
function addBinaryOption(options, optionToAdd) {
const { name, value } = optionToAdd;
if (!options[name]) {
options[name] = {
[value]: optionToAdd,
};
}
else if (!options[name][value]) {
options[name][value] = optionToAdd;
}
else {
options[name][value].addEntitiesFromAnotherOption(optionToAdd);
}
}