generator-begcode
Version:
Spring Boot + Angular/React/Vue in one handy generator
73 lines (72 loc) • 2.87 kB
JavaScript
import { builtInJDLApplicationConfig } from '../../jhipster/application-options.js';
import { getDefaultJDLApplicationConfig } from '../../command/jdl.js';
import { buildTokens, createJDLLexer } from './parsing/lexer/lexer.js';
import JDLParser from './parsing/jdl-parser.js';
import { checkConfigKeys, checkTokens } from './parsing/self-checks/parsing-system-checker.js';
import JDLApplicationDefinition from './built-in-options/jdl-application-definition.js';
import { buildApplicationTokens } from './built-in-options/tokens/application-tokens.js';
import { deploymentTokens } from './built-in-options/tokens/deployment-tokens.js';
const mergeDefinition = (definition, defaultDefinition) => {
return {
validatorConfig: {
...defaultDefinition.validatorConfig,
...definition.validatorConfig,
},
optionsValues: {
...defaultDefinition.optionsValues,
...definition.optionsValues,
},
optionsTypes: {
...defaultDefinition.optionsTypes,
...definition.optionsTypes,
},
quotedOptionNames: [...defaultDefinition.quotedOptionNames, ...definition.quotedOptionNames],
tokenConfigs: [...defaultDefinition.tokenConfigs, ...definition.tokenConfigs],
};
};
export const createRuntime = (definition) => {
const newDefinition = mergeDefinition(definition, builtInJDLApplicationConfig);
const propertyValidations = newDefinition.validatorConfig;
const applicationDefinition = new JDLApplicationDefinition({
optionValues: newDefinition.optionsValues,
optionTypes: newDefinition.optionsTypes,
quotedOptionNames: newDefinition.quotedOptionNames,
});
let tokens;
let lexer;
let parser;
return {
get tokens() {
if (!tokens) {
const applicationTokens = buildApplicationTokens(newDefinition.tokenConfigs);
tokens = buildTokens({ applicationTokens, deploymentTokens });
checkConfigKeys(tokens, Object.keys(propertyValidations));
}
return tokens;
},
get lexer() {
if (!lexer) {
lexer = createJDLLexer(this.tokens);
}
return lexer;
},
get parser() {
if (!parser) {
parser = new JDLParser(this.tokens);
parser.parse();
const rules = parser.getGAstProductions();
checkTokens(Object.values(this.tokens), Object.values(rules));
}
return parser;
},
applicationDefinition,
propertyValidations,
};
};
let defaultRuntime;
export const getDefaultRuntime = () => {
if (!defaultRuntime) {
defaultRuntime = createRuntime(getDefaultJDLApplicationConfig());
}
return defaultRuntime;
};