generator-begcode
Version:
Spring Boot + Angular/React/Vue in one handy generator
99 lines (98 loc) • 3.94 kB
JavaScript
import { Lexer } from 'chevrotain';
import { NAME, UNARY_OPTION, BINARY_OPTION } from './shared-tokens.js';
import { relationshipOptions } from '../../jhipster/index.js';
import ValidationTokens from './validation-tokens.js';
import ApplicationTokens from './application-tokens.js';
import DeploymentTokens from './deployment-tokens.js';
import RelationshipTypeTokens from './relationship-type-tokens.js';
import AigcTypeTokens from './aigc-type-tokens.js';
import OptionTokens from './option-tokens.js';
import createTokenFromConfigCreator from './token-creator.js';
const _tokens = {};
const { BUILT_IN_ENTITY } = relationshipOptions;
function createTokenFromConfig(config) {
const newToken = createTokenFromConfigCreator(config);
_tokens[config.name] = newToken;
return newToken;
}
const BOOLEAN = createTokenFromConfig({
name: 'BOOLEAN',
pattern: Lexer.NA,
});
const CONFIG_KEY = ApplicationTokens.categoryToken;
const DEPLOYMENT_KEY = DeploymentTokens.categoryToken;
createTokenFromConfig({
name: 'WHITESPACE',
pattern: /[\n\t\r \u2028\u2029]+/,
group: Lexer.SKIPPED,
});
createTokenFromConfig({
name: 'JAVADOC',
pattern: /\/\*\*([\s\S]*?)\*\//,
});
createTokenFromConfig({
name: 'BLOCK_COMMENT',
pattern: /\/\*([\s\S]*?)\*\//,
group: Lexer.SKIPPED,
});
createTokenFromConfig({ name: 'CONFIG', pattern: 'config' });
createTokenFromConfig({ name: 'ENTITIES', pattern: 'entities' });
ApplicationTokens.tokens.forEach(token => {
_tokens[token.name] = token;
});
createTokenFromConfig({ name: 'APPLICATION', pattern: 'application' });
createTokenFromConfig({
name: 'SERVICE_DISCOVERY_TYPE',
pattern: 'serviceDiscoveryType',
categories: [CONFIG_KEY, DEPLOYMENT_KEY],
});
DeploymentTokens.tokens.forEach(token => {
_tokens[token.name] = token;
});
createTokenFromConfig({ name: 'DEPLOYMENT', pattern: 'deployment' });
createTokenFromConfig({ name: 'TRUE', pattern: 'true', categories: [BOOLEAN] });
createTokenFromConfig({ name: 'FALSE', pattern: 'false', categories: [BOOLEAN] });
createTokenFromConfig({ name: 'ENTITY', pattern: 'entity' });
createTokenFromConfig({ name: 'ENUM', pattern: 'enum' });
createTokenFromConfig({ name: 'RELATIONSHIP', pattern: 'relationship' });
createTokenFromConfig({ name: 'BUILT_IN_ENTITY', pattern: BUILT_IN_ENTITY });
RelationshipTypeTokens.tokens.forEach(token => {
_tokens[token.name] = token;
});
createTokenFromConfig({ name: 'AIGC', pattern: 'aigc' });
AigcTypeTokens.tokens.forEach(token => {
_tokens[token.name] = token;
});
createTokenFromConfig({ name: 'STAR', pattern: '*' });
OptionTokens.tokens.forEach(token => {
_tokens[token.name] = token;
});
ValidationTokens.tokens.forEach(token => {
_tokens[token.name] = token;
});
createTokenFromConfig({ name: 'REGEX', pattern: /\/[^\n\r]*\// });
createTokenFromConfig({ name: 'DECIMAL', pattern: /-?\d+\.\d+/ });
createTokenFromConfig({ name: 'INTEGER', pattern: /-?\d+/ });
createTokenFromConfig({ name: 'STRING', pattern: /"(?:[^"])*"/ });
createTokenFromConfig({ name: 'LPAREN', pattern: '(' });
createTokenFromConfig({ name: 'RPAREN', pattern: ')' });
createTokenFromConfig({ name: 'LCURLY', pattern: '{' });
createTokenFromConfig({ name: 'RCURLY', pattern: '}' });
createTokenFromConfig({ name: 'LSQUARE', pattern: '[' });
createTokenFromConfig({ name: 'RSQUARE', pattern: ']' });
createTokenFromConfig({ name: 'COMMA', pattern: ',' });
createTokenFromConfig({ name: 'COMMA_WITHOUT_NEWLINE', pattern: /,[^\n\r]/ });
createTokenFromConfig({ name: 'EQUALS', pattern: '=' });
createTokenFromConfig({ name: 'DOT', pattern: '.' });
createTokenFromConfig({ name: 'TO', pattern: 'to' });
createTokenFromConfig({ name: 'AT', pattern: '@' });
const typedTokens = {
UNARY_OPTION,
BINARY_OPTION,
NAME,
};
export const tokens = {
..._tokens,
...typedTokens,
};
export const JDLLexer = new Lexer(Object.values(tokens), { ensureOptimizations: true });