generator-pyhipster
Version:
Python (Flask) + Angular/React/Vue in one handy generator
363 lines (343 loc) • 13.5 kB
JavaScript
/**
* Copyright 2013-2022 the original author or authors from the JHipster project.
*
* This file is part of the JHipster project, see https://www.jhipster.tech/
* for more information.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
const { GATEWAY, MONOLITH, MICROSERVICE } = require('./application-types');
const {
CASSANDRA,
COUCHBASE,
MARIADB,
MONGODB,
MSSQL,
MYSQL,
NEO4J,
ORACLE,
POSTGRESQL,
SQL,
H2_DISK,
H2_MEMORY,
} = require('./database-types');
const { KAFKA } = require('./message-broker-types');
const messageBrokerTypes = require('./message-broker-types');
const databaseTypes = require('./database-types');
const NO_DATABASE = databaseTypes.NO;
const { JWT, OAUTH2, SESSION } = require('./authentication-types');
const { MAVEN, GRADLE } = require('./build-tool-types');
const { CAFFEINE, EHCACHE, HAZELCAST, INFINISPAN, MEMCACHED, REDIS } = require('./cache-types');
const cacheTypes = require('./cache-types');
const NO_CACHE_PROVIDER = cacheTypes.NO;
const { PROTRACTOR, CYPRESS, CUCUMBER, GATLING } = require('./test-framework-types');
const { ANGULAR_X, ANGULAR, REACT, VUE, SVELTE } = require('./client-framework-types');
const { ELASTICSEARCH } = require('./search-engine-types');
const searchEngines = require('./search-engine-types');
const NO_MESSAGE_BROKER = messageBrokerTypes.NO;
const NO_SEARCH_ENGINE = searchEngines.FALSE;
const COUCHBASE_SEARCH_ENGINE = searchEngines.COUCHBASE;
const { EUREKA, CONSUL } = require('./service-discovery-types');
const serviceDiscovery = require('./service-discovery-types');
const FALSE_SERVICE_DISCOVERY = serviceDiscovery.FALSE;
const NO_SERVICE_DISCOVERY = serviceDiscovery.NO;
const { SPRING_WEBSOCKET } = require('./websocket-types');
const websocketTypes = require('./websocket-types');
const NO_WEBSOCKET = websocketTypes.FALSE;
const ApplicationOptionTypes = {
STRING: 'string',
INTEGER: 'integer',
BOOLEAN: 'boolean',
LIST: 'list',
};
const optionNames = {
APPLICATION_TYPE: 'applicationType',
AUTHENTICATION_TYPE: 'authenticationType',
BASE_NAME: 'baseName',
BLUEPRINT: 'blueprint',
BLUEPRINTS: 'blueprints',
BUILD_TOOL: 'buildTool',
CACHE_PROVIDER: 'cacheProvider',
CLIENT_FRAMEWORK: 'clientFramework',
CLIENT_PACKAGE_MANAGER: 'clientPackageManager',
CLIENT_THEME: 'clientTheme',
CLIENT_THEME_VARIANT: 'clientThemeVariant',
WITH_ADMIN_UI: 'withAdminUi',
CREATION_TIMESTAMP: 'creationTimestamp',
DATABASE_TYPE: 'databaseType',
DEV_DATABASE_TYPE: 'devDatabaseType',
DTO_SUFFIX: 'dtoSuffix',
EMBEDDABLE_LAUNCH_SCRIPT: 'embeddableLaunchScript',
ENABLE_HIBERNATE_CACHE: 'enableHibernateCache',
ENABLE_SWAGGER_CODEGEN: 'enableSwaggerCodegen',
ENABLE_TRANSLATION: 'enableTranslation',
ENTITY_SUFFIX: 'entitySuffix',
EXPERIMENTAL: 'experimental',
I_18_N: 'i18N',
INSTALL_MODULES: 'installModules',
JHI_PREFIX: 'jhiPrefix',
JHIPSTER_VERSION: 'jhipsterVersion',
JWT_SECRET_KEY: 'jwtSecretKey',
LANGUAGES: 'languages',
MESSAGE_BROKER: 'messageBroker',
NATIVE_LANGUAGE: 'nativeLanguage',
NPM: 'npm',
OTHER_MODULES: 'otherModules',
PACKAGE_NAME: 'packageName',
PACKAGE_FOLDER: 'packageFolder',
PROD_DATABASE_TYPE: 'prodDatabaseType',
REACTIVE: 'reactive',
REMEMBER_ME_KEY: 'rememberMeKey',
SEARCH_ENGINE: 'searchEngine',
SERVER_PORT: 'serverPort',
SERVICE_DISCOVERY_TYPE: 'serviceDiscoveryType',
SKIP_CLIENT: 'skipClient',
SKIP_GIT: 'skipGit',
SKIP_INSTALL: 'skipInstall',
SKIP_SERVER: 'skipServer',
SKIP_USER_MANAGEMENT: 'skipUserManagement',
TEST_FRAMEWORKS: 'testFrameworks',
WEBSOCKET: 'websocket',
WITH_ENTITIES: 'withEntities',
ENABLE_GRADLE_ENTERPRISE: 'enableGradleEnterprise',
GRADLE_ENTERPRISE_HOST: 'gradleEnterpriseHost',
};
const optionValues = {
// TODO refactor it mixes default values (e.g. BaseName=Jhipster) and element list (e.g. application types)
[ ]: {
[ ]: MONOLITH,
[ ]: MICROSERVICE,
[ ]: GATEWAY,
},
[ ]: {
[ ]: JWT,
[ ]: OAUTH2,
[ ]: SESSION,
},
[ ]: 'jhipster',
[ ]: undefined,
[ ]: [],
[ ]: {
[ ]: MAVEN,
[ ]: GRADLE,
},
[ ]: {
[ ]: CAFFEINE,
[ ]: EHCACHE,
[ ]: HAZELCAST,
[ ]: INFINISPAN,
[ ]: MEMCACHED,
[ ]: REDIS,
[ ]: NO_CACHE_PROVIDER,
},
[ ]: {
[ ]: ANGULAR_X,
[ ]: ANGULAR,
[ ]: REACT,
[ ]: VUE,
[ ]: SVELTE,
},
[ ]: {
npm: 'npm',
},
[ ]: 'none',
[ ]: { none: '', default: 'primary' },
[ ]: {
[ ]: SQL,
[ ]: MONGODB,
[ ]: CASSANDRA,
[ ]: COUCHBASE,
[ ]: NEO4J,
[ ]: NO_DATABASE,
},
[ ]: {
// these options + the prod database type
[ ]: H2_DISK,
[ ]: H2_MEMORY,
},
[ ]: 'DTO',
[ ]: true,
[ ]: true,
[ ]: false,
[ ]: false,
[ ]: '',
[ ]: false,
[ ]: true,
[ ]: false,
[ ]: 'jhi',
[ ]: '',
[ ]: '',
[ ]: [],
[ ]: {
kafka: KAFKA,
false: NO_MESSAGE_BROKER,
},
[ ]: true,
[ ]: [],
[ ]: 'com/mycompany/myapp',
[ ]: 'com.mycompany.myapp',
[ ]: {
[ ]: MYSQL,
[ ]: MARIADB,
[ ]: POSTGRESQL,
[ ]: ORACLE,
[ ]: MSSQL,
[ ]: NO_DATABASE,
},
[ ]: false,
[ ]: '',
[ ]: {
[ ]: ELASTICSEARCH,
[ ]: COUCHBASE_SEARCH_ENGINE,
[ ]: NO_SEARCH_ENGINE,
},
[ ]: '8080',
[ ]: {
[ ]: EUREKA,
[ ]: CONSUL,
[ ]: NO_SERVICE_DISCOVERY,
[ ]: FALSE_SERVICE_DISCOVERY,
},
[ ]: false,
[ ]: false,
[ ]: false,
[ ]: false,
[ ]: false,
[ ]: {
[ ]: PROTRACTOR,
[ ]: CYPRESS,
[ ]: CUCUMBER,
[ ]: GATLING,
},
[ ]: true,
[ ]: {
[ ]: SPRING_WEBSOCKET,
false: NO_WEBSOCKET,
},
[ ]: false,
[ ]: true,
[ ]: false,
[ ]: '',
};
const optionTypes = {
[ ]: { type: ApplicationOptionTypes.STRING },
[ ]: { type: ApplicationOptionTypes.STRING },
[ ]: { type: ApplicationOptionTypes.STRING },
[ ]: { type: ApplicationOptionTypes.STRING },
[ ]: { type: ApplicationOptionTypes.LIST },
[ ]: { type: ApplicationOptionTypes.STRING },
[ ]: { type: ApplicationOptionTypes.STRING },
[ ]: { type: ApplicationOptionTypes.STRING },
[ ]: { type: ApplicationOptionTypes.STRING },
[ ]: { type: ApplicationOptionTypes.STRING },
[ ]: { type: ApplicationOptionTypes.STRING },
[ ]: { type: ApplicationOptionTypes.INTEGER },
[ ]: { type: ApplicationOptionTypes.STRING },
[ ]: { type: ApplicationOptionTypes.STRING },
[ ]: { type: ApplicationOptionTypes.STRING },
[ ]: { type: ApplicationOptionTypes.BOOLEAN },
[ ]: { type: ApplicationOptionTypes.BOOLEAN },
[ ]: { type: ApplicationOptionTypes.BOOLEAN },
[ ]: { type: ApplicationOptionTypes.BOOLEAN },
[ ]: { type: ApplicationOptionTypes.STRING },
[ ]: { type: ApplicationOptionTypes.BOOLEAN },
[ ]: { type: ApplicationOptionTypes.BOOLEAN },
[ ]: { type: ApplicationOptionTypes.BOOLEAN },
[ ]: { type: ApplicationOptionTypes.STRING },
[ ]: { type: ApplicationOptionTypes.STRING },
[ ]: { type: ApplicationOptionTypes.STRING },
[ ]: { type: ApplicationOptionTypes.LIST },
[ ]: { type: ApplicationOptionTypes.STRING },
[ ]: { type: ApplicationOptionTypes.STRING },
[ ]: { type: ApplicationOptionTypes.BOOLEAN },
[ ]: { type: ApplicationOptionTypes.LIST },
[ ]: { type: ApplicationOptionTypes.STRING },
[ ]: { type: ApplicationOptionTypes.STRING },
[ ]: { type: ApplicationOptionTypes.STRING },
[ ]: { type: ApplicationOptionTypes.BOOLEAN },
[ ]: { type: ApplicationOptionTypes.STRING },
[ ]: { type: ApplicationOptionTypes.STRING },
[ ]: { type: ApplicationOptionTypes.INTEGER },
[ ]: { type: ApplicationOptionTypes.STRING },
[ ]: { type: ApplicationOptionTypes.BOOLEAN },
[ ]: { type: ApplicationOptionTypes.BOOLEAN },
[ ]: { type: ApplicationOptionTypes.BOOLEAN },
[ ]: { type: ApplicationOptionTypes.BOOLEAN },
[ ]: { type: ApplicationOptionTypes.BOOLEAN },
[ ]: { type: ApplicationOptionTypes.LIST },
[ ]: { type: ApplicationOptionTypes.BOOLEAN },
[ ]: { type: ApplicationOptionTypes.STRING },
[ ]: { type: ApplicationOptionTypes.BOOLEAN },
[ ]: { type: ApplicationOptionTypes.BOOLEAN },
[ ]: { type: ApplicationOptionTypes.BOOLEAN },
[ ]: { type: ApplicationOptionTypes.STRING },
};
const QuotedOptionNames = [
optionNames.JHIPSTER_VERSION,
optionNames.REMEMBER_ME_KEY,
optionNames.JWT_SECRET_KEY,
optionNames.GRADLE_ENTERPRISE_HOST,
];
module.exports = {
OptionTypes: ApplicationOptionTypes,
OptionNames: optionNames,
OptionValues: optionValues,
QuotedOptionNames,
getTypeForOption,
doesOptionExist,
doesOptionValueExist,
shouldTheValueBeQuoted,
};
/**
* Returns the option's type, one of string, boolean, list or integer.
* @param {String} optionName - the option's name.
* @returns {string} the option's type.
*/
function getTypeForOption(optionName) {
if (!optionName) {
throw new Error('A name has to be passed to get the option type.');
}
if (!optionTypes[optionName]) {
throw new Error(`Unrecognised application option name: ${optionName}.`);
}
return optionTypes[optionName].type;
}
/**
* Checks whether the option value exists for the passed option name.
* @param {String} name - the option name.
* @param {String|Boolean|Number} value - the option value.
* @returns {Boolean} whether the option value exists for the name.
*/
function doesOptionValueExist(name, value) {
return doesOptionExist(name) && optionValues[name][value] != null;
}
/**
* Checks whether the option's exists.
* @param {String} optionName - the option's name.
* @returns {Boolean} the option's existence.
*/
function doesOptionExist(optionName) {
return !!optionName && !!optionTypes[optionName];
}
/**
* Checks whether the corresponding option has a value that should be quoted in the JDL, like the jhipsterVersion
* attribute.
* @param {String} optionName - the name of the option to check.
* @return {boolean} whether it should be quoted in the JDL.
*/
function shouldTheValueBeQuoted(optionName) {
if (!optionName) {
throw new Error('An option name has to be passed to know whether it is quoted.');
}
return QuotedOptionNames.includes(optionName);
}