generator-pyhipster
Version:
Python (Flask) + Angular/React/Vue in one handy generator
256 lines (239 loc) • 8.6 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 { MONOLITH, MICROSERVICE, GATEWAY } = require('./application-types');
const { COUCHBASE, CASSANDRA, MONGODB, SQL, H2_DISK, POSTGRESQL, SQLITE_DISK } = require('./database-types');
const databaseTypes = require('./database-types');
const NO_DATABASE_TYPE = databaseTypes.NO;
const { OptionNames, OptionValues } = require('./application-options');
const { JWT, OAUTH2 } = require('./authentication-types');
const { EHCACHE, HAZELCAST, SIMPLE_CACHE, NO } = require('./cache-types');
const cacheProviderType = require('./cache-types');
const NO_CACHE_PROVIDER = cacheProviderType.NO;
const { EUREKA } = require('./service-discovery-types');
const serviceDiscoveryTypes = require('./service-discovery-types');
const NO_SERVICE_DISCOVERY = serviceDiscoveryTypes.NO;
const { ANGULAR, ANGULAR_X } = require('./client-framework-types');
const { MAVEN } = require('./build-tool-types');
const {
APPLICATION_TYPE,
AUTHENTICATION_TYPE,
BASE_NAME,
BUILD_TOOL,
CACHE_PROVIDER,
CLIENT_FRAMEWORK,
CLIENT_PACKAGE_MANAGER,
CLIENT_THEME,
CLIENT_THEME_VARIANT,
WITH_ADMIN_UI,
DATABASE_TYPE,
DEV_DATABASE_TYPE,
DTO_SUFFIX,
ENABLE_HIBERNATE_CACHE,
ENABLE_SWAGGER_CODEGEN,
ENABLE_TRANSLATION,
ENTITY_SUFFIX,
JHI_PREFIX,
LANGUAGES,
MESSAGE_BROKER,
PACKAGE_FOLDER,
PACKAGE_NAME,
PROD_DATABASE_TYPE,
REACTIVE,
SEARCH_ENGINE,
SERVER_PORT,
SERVICE_DISCOVERY_TYPE,
SKIP_CLIENT,
SKIP_SERVER,
SKIP_USER_MANAGEMENT,
TEST_FRAMEWORKS,
USE_NPM,
WEBSOCKET,
ENABLE_GRADLE_ENTERPRISE,
GRADLE_ENTERPRISE_HOST,
} = OptionNames;
module.exports = {
getConfigForMonolithApplication,
getConfigForGatewayApplication,
getConfigForMicroserviceApplication,
getDefaultConfigForNewApplication,
getConfigForApplicationType,
};
function getConfigForApplicationType(applicationType = undefined, customOptions = {}) {
if (applicationType === MONOLITH) {
return getConfigForMonolithApplication(customOptions);
}
if (applicationType === GATEWAY) {
return getConfigForGatewayApplication(customOptions);
}
if (applicationType === MICROSERVICE) {
return getConfigForMicroserviceApplication(customOptions);
}
return getDefaultConfigForNewApplication(customOptions);
}
function getConfigForMonolithApplication(customOptions = {}) {
const options = {
[AUTHENTICATION_TYPE]: JWT,
[CACHE_PROVIDER]: NO_CACHE_PROVIDER,
[CLIENT_FRAMEWORK]: ANGULAR_X,
[SERVER_PORT]: OptionValues[SERVER_PORT],
[SERVICE_DISCOVERY_TYPE]: false,
[SKIP_USER_MANAGEMENT]: OptionValues[SKIP_USER_MANAGEMENT],
[WITH_ADMIN_UI]: true,
...customOptions,
};
if (!options[CLIENT_THEME]) {
options[CLIENT_THEME] = OptionValues[CLIENT_THEME];
options[CLIENT_THEME_VARIANT] = OptionValues[CLIENT_THEME_VARIANT].none;
} else if (options[CLIENT_THEME] !== OptionValues[CLIENT_THEME] && !options[CLIENT_THEME_VARIANT]) {
options[CLIENT_THEME_VARIANT] = OptionValues[CLIENT_THEME_VARIANT].default;
}
if (options[AUTHENTICATION_TYPE] === OAUTH2) {
options[SKIP_USER_MANAGEMENT] = true;
}
return {
...options,
[APPLICATION_TYPE]: MONOLITH,
};
}
function getConfigForGatewayApplication(customOptions = {}) {
const options = {
[AUTHENTICATION_TYPE]: JWT,
[CLIENT_FRAMEWORK]: ANGULAR_X,
[SERVER_PORT]: OptionValues[SERVER_PORT],
[SERVICE_DISCOVERY_TYPE]: EUREKA,
[SKIP_USER_MANAGEMENT]: OptionValues[SKIP_USER_MANAGEMENT],
[WITH_ADMIN_UI]: true,
...customOptions,
};
if (!options[CLIENT_THEME]) {
options[CLIENT_THEME] = OptionValues[CLIENT_THEME];
options[CLIENT_THEME_VARIANT] = OptionValues[CLIENT_THEME_VARIANT].none;
} else if (options[CLIENT_THEME] !== OptionValues[CLIENT_THEME] && !options[CLIENT_THEME_VARIANT]) {
options[CLIENT_THEME_VARIANT] = OptionValues[CLIENT_THEME_VARIANT].default;
}
if (options[AUTHENTICATION_TYPE] === OAUTH2) {
options[SKIP_USER_MANAGEMENT] = true;
}
if (options[SERVICE_DISCOVERY_TYPE] === false) {
options[SERVICE_DISCOVERY_TYPE] = EUREKA;
}
if (options[SERVICE_DISCOVERY_TYPE] === NO_SERVICE_DISCOVERY) {
options[SERVICE_DISCOVERY_TYPE] = false;
}
options[CACHE_PROVIDER] = NO_CACHE_PROVIDER;
options[ENABLE_HIBERNATE_CACHE] = false;
return {
...options,
[REACTIVE]: true,
[APPLICATION_TYPE]: GATEWAY,
};
}
function getConfigForMicroserviceApplication(customOptions = {}) {
const DEFAULT_SERVER_PORT = '8081';
const options = {
[AUTHENTICATION_TYPE]: JWT,
[CACHE_PROVIDER]: HAZELCAST,
[SERVER_PORT]: DEFAULT_SERVER_PORT,
[SERVICE_DISCOVERY_TYPE]: EUREKA,
[SKIP_USER_MANAGEMENT]: true,
...customOptions,
};
let skipClient = options[SKIP_CLIENT];
if (skipClient === undefined) {
skipClient = options[CLIENT_FRAMEWORK] === undefined;
}
if (skipClient) {
delete options[CLIENT_FRAMEWORK];
delete options[SKIP_SERVER];
}
delete options[CLIENT_THEME];
delete options[CLIENT_THEME_VARIANT];
delete options[WITH_ADMIN_UI];
if (typeof options[SKIP_USER_MANAGEMENT] !== 'boolean') {
options[SKIP_USER_MANAGEMENT] = true;
}
if (options[SERVICE_DISCOVERY_TYPE] === false) {
options[SERVICE_DISCOVERY_TYPE] = EUREKA;
}
if (options[SERVICE_DISCOVERY_TYPE] === NO_SERVICE_DISCOVERY) {
options[SERVICE_DISCOVERY_TYPE] = false;
}
return {
...options,
[APPLICATION_TYPE]: MICROSERVICE,
[SKIP_CLIENT]: skipClient,
};
}
function getDefaultConfigForNewApplication(customOptions = {}) {
const options = {
[BASE_NAME]: OptionValues[BASE_NAME],
[BUILD_TOOL]: MAVEN,
[DATABASE_TYPE]: SQL,
[DEV_DATABASE_TYPE]: SQLITE_DISK,
[CACHE_PROVIDER]: NO_CACHE_PROVIDER,
[ENABLE_HIBERNATE_CACHE]: OptionValues[ENABLE_HIBERNATE_CACHE],
[ENABLE_SWAGGER_CODEGEN]: OptionValues[ENABLE_SWAGGER_CODEGEN],
[ENABLE_TRANSLATION]: OptionValues[ENABLE_TRANSLATION],
[JHI_PREFIX]: OptionValues[JHI_PREFIX],
[LANGUAGES]: OptionValues[LANGUAGES],
[MESSAGE_BROKER]: OptionValues[MESSAGE_BROKER].false,
[PROD_DATABASE_TYPE]: POSTGRESQL,
[SEARCH_ENGINE]: OptionValues[SEARCH_ENGINE].false,
[TEST_FRAMEWORKS]: [],
[WEBSOCKET]: OptionValues[WEBSOCKET].false,
[ENABLE_GRADLE_ENTERPRISE]: OptionValues[ENABLE_GRADLE_ENTERPRISE],
[GRADLE_ENTERPRISE_HOST]: OptionValues[GRADLE_ENTERPRISE_HOST],
...customOptions,
};
if (!options[PACKAGE_NAME] && !options[PACKAGE_FOLDER]) {
options[PACKAGE_FOLDER] = OptionValues[PACKAGE_FOLDER];
options[PACKAGE_NAME] = OptionValues[PACKAGE_NAME];
}
if (!options[PACKAGE_NAME] && options[PACKAGE_FOLDER]) {
options[PACKAGE_NAME] = options[PACKAGE_FOLDER].replace(/\//g, '.');
}
if (!options[PACKAGE_FOLDER] && options[PACKAGE_NAME]) {
options[PACKAGE_FOLDER] = options[PACKAGE_NAME].replace(/\./g, '/');
}
if (options[CLIENT_FRAMEWORK] === ANGULAR) {
options[CLIENT_FRAMEWORK] = ANGULAR_X;
}
if (!options[CLIENT_PACKAGE_MANAGER] && OptionValues[USE_NPM]) {
options[CLIENT_PACKAGE_MANAGER] = OptionValues[CLIENT_PACKAGE_MANAGER].npm;
}
if (typeof options[DTO_SUFFIX] === 'boolean' || typeof options[DTO_SUFFIX] !== 'string') {
options[DTO_SUFFIX] = OptionValues[DTO_SUFFIX];
}
if (typeof options[ENTITY_SUFFIX] === 'boolean' || typeof options[ENTITY_SUFFIX] !== 'string') {
options[ENTITY_SUFFIX] = OptionValues[ENTITY_SUFFIX];
}
if ([MONGODB, COUCHBASE, CASSANDRA, NO_DATABASE_TYPE].includes(options[DATABASE_TYPE])) {
options[DEV_DATABASE_TYPE] = options[DATABASE_TYPE];
options[PROD_DATABASE_TYPE] = options[DATABASE_TYPE];
if (NO_DATABASE_TYPE !== options[DATABASE_TYPE]) {
options[ENABLE_HIBERNATE_CACHE] = false;
}
}
if (options[REACTIVE]) {
options[CACHE_PROVIDER] = NO_CACHE_PROVIDER;
} else {
options[REACTIVE] = OptionValues[REACTIVE];
}
return options;
}