generator-fastboot
Version:
Spring Boot + Angular/React/Vue in one handy generator
418 lines (384 loc) • 12.9 kB
JavaScript
/**
* Copyright 2013-2021 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 validationOptions = require('../jdl/jhipster/validations');
const databaseTypes = require('../jdl/jhipster/database-types');
const { ANGULAR_X, REACT, VUE } = require('../jdl/jhipster/client-framework-types');
const commonPackageJson = require('./common/templates/package.json');
// Version of Java
const JAVA_VERSION = '11'; // Java version is forced to be 11. We keep the variable as it might be useful in the future.
// Version of Node, NPM
const NODE_VERSION = '14.16.0';
const NPM_VERSION = commonPackageJson.devDependencies.npm;
const OPENAPI_GENERATOR_CLI_VERSION = '1.0.13-4.3.1';
const GRADLE_VERSION = '6.8.3';
const JIB_VERSION = '2.8.0';
// Libraries version
const JHIPSTER_DEPENDENCIES_VERSION = '7.0.1';
// The spring-boot version should match the one managed by https://mvnrepository.com/artifact/tech.jhipster/jhipster-dependencies/JHIPSTER_DEPENDENCIES_VERSION
const SPRING_BOOT_VERSION = '2.4.4';
const LIQUIBASE_VERSION = '4.3.2';
const LIQUIBASE_DTD_VERSION = LIQUIBASE_VERSION.split('.', 3).slice(0, 2).join('.');
const HIBERNATE_VERSION = '5.4.29.Final';
const JACOCO_VERSION = '0.8.6';
const KAFKA_VERSION = '5.5.3';
const JACKSON_DATABIND_NULLABLE_VERSION = '0.2.1';
// Version of docker images
const DOCKER_COMPOSE_FORMAT_VERSION = '3.8';
const DOCKER_JHIPSTER_REGISTRY = 'jhipster/jhipster-registry:v6.7.1';
const DOCKER_JHIPSTER_CONTROL_CENTER = 'jhipster/jhipster-control-center:v0.4.1';
const DOCKER_JAVA_JRE = 'adoptopenjdk:11-jre-hotspot';
const DOCKER_MYSQL = 'mysql:8.0.23';
const DOCKER_MARIADB = 'mariadb:10.5.9';
const DOCKER_POSTGRESQL = 'postgres:13.2';
const DOCKER_MONGODB = 'mongo:4.4.4';
const DOCKER_COUCHBASE = 'couchbase:6.6.1';
const DOCKER_CASSANDRA = 'cassandra:3.11.10';
const DOCKER_MSSQL = 'mcr.microsoft.com/mssql/server:2019-CU9-ubuntu-16.04';
const DOCKER_NEO4J = 'neo4j:4.2.4';
const DOCKER_HAZELCAST_MANAGEMENT_CENTER = 'hazelcast/management-center:4.2021.03-1';
const DOCKER_MEMCACHED = 'memcached:1.6.9-alpine';
const DOCKER_REDIS = 'redis:6.2.1';
const DOCKER_KEYCLOAK = 'jboss/keycloak:12.0.4'; // The version should match the attribute 'keycloakVersion' from /docker-compose/templates/realm-config/jhipster-realm.json.ejs and /server/templates/src/main/docker/config/realm-config/jhipster-realm.json.ejs
const DOCKER_ELASTICSEARCH = 'docker.elastic.co/elasticsearch/elasticsearch:7.9.3'; // The version should be coherent with the one from spring-data-elasticsearch project
const DOCKER_KAFKA = `confluentinc/cp-kafka:${KAFKA_VERSION}`;
const DOCKER_ZOOKEEPER = `confluentinc/cp-zookeeper:${KAFKA_VERSION}`;
const DOCKER_SONAR = 'sonarqube:8.8-community';
const DOCKER_CONSUL = 'consul:1.9.4';
const DOCKER_CONSUL_CONFIG_LOADER = 'jhipster/consul-config-loader:v0.4.1';
const DOCKER_PROMETHEUS = 'prom/prometheus:v2.26.0';
const DOCKER_PROMETHEUS_ALERTMANAGER = 'prom/alertmanager:v0.21.0';
const DOCKER_GRAFANA = 'grafana/grafana:7.5.2';
const DOCKER_JENKINS = 'jenkins/jenkins:lts-jdk11';
const DOCKER_SWAGGER_EDITOR = 'swaggerapi/swagger-editor:latest';
const DOCKER_PROMETHEUS_OPERATOR = 'quay.io/coreos/prometheus-operator:v0.42.1';
const DOCKER_GRAFANA_WATCHER = 'quay.io/coreos/grafana-watcher:v0.0.8';
// Kubernetes versions
const KUBERNETES_CORE_API_VERSION = 'v1';
const KUBERNETES_BATCH_API_VERSION = 'batch/v1';
const KUBERNETES_DEPLOYMENT_API_VERSION = 'apps/v1';
const KUBERNETES_STATEFULSET_API_VERSION = 'apps/v1';
const KUBERNETES_INGRESS_API_VERSION = 'networking.k8s.io/v1beta1';
const KUBERNETES_ISTIO_NETWORKING_API_VERSION = 'networking.istio.io/v1alpha3';
const KUBERNETES_RBAC_API_VERSION = 'rbac.authorization.k8s.io/v1';
// Helm versions
const HELM_KAFKA = '^0.20.1';
const HELM_ELASTICSEARCH = '^1.32.0';
const HELM_PROMETHEUS = '^9.2.0';
const HELM_GRAFANA = '^4.0.0';
const HELM_MYSQL = '^1.4.0';
const HELM_MARIADB = '^6.12.2';
const HELM_POSTGRESQL = '^6.5.3';
const HELM_MOGODB_REPLICASET = '^3.10.1';
// all constants used throughout all generators
const LOGIN_REGEX = '^(?>[a-zA-Z0-9!$&*+=?^_`{|}~.-]+@[a-zA-Z0-9-]+(?:\\\\.[a-zA-Z0-9-]+)*)|(?>[_.@A-Za-z0-9-]+)$';
// JS does not support atomic groups
const LOGIN_REGEX_JS = '^[a-zA-Z0-9!$&*+=?^_`{|}~.-]+@[a-zA-Z0-9-]+(?:\\\\.[a-zA-Z0-9-]+)*$|^[_.@A-Za-z0-9-]+$';
const MAIN_DIR = 'src/main/';
const TEST_DIR = 'src/test/';
// Note: this will be prepended with 'target/classes' for Maven, or with 'build/resources/main' for Gradle.
const CLIENT_DIST_DIR = 'static/';
const SUPPORTED_VALIDATION_RULES = Object.keys(validationOptions)
.map(key => validationOptions[key])
.filter(e => typeof e === 'string');
const SUPPORTED_CLIENT_FRAMEWORKS = {
ANGULAR: ANGULAR_X,
REACT,
VUE,
};
// documentation constants
const JHIPSTER_DOCUMENTATION_URL = 'https://www.jhipster.tech';
const JHIPSTER_DOCUMENTATION_ARCHIVE_PATH = '/documentation-archive/';
const OFFICIAL_DATABASE_TYPE_NAMES = {
cassandra: 'Cassandra',
couchbase: 'Couchbase',
mongodb: 'MongoDB',
neo4j: 'Neo4j',
sql: 'SQL',
};
const R2DBC_DB_OPTIONS = [
{
value: databaseTypes.POSTGRESQL,
name: 'PostgreSQL',
},
{
value: databaseTypes.MYSQL,
name: 'MySQL',
},
{
value: databaseTypes.MARIADB,
name: 'MariaDB',
},
{
value: databaseTypes.MSSQL,
name: 'Microsoft SQL Server',
},
];
const SQL_DB_OPTIONS = [
{
value: databaseTypes.POSTGRESQL,
name: 'PostgreSQL',
},
{
value: databaseTypes.MYSQL,
name: 'MySQL',
},
{
value: databaseTypes.MARIADB,
name: 'MariaDB',
},
{
value: databaseTypes.ORACLE,
name: 'Oracle',
},
{
value: databaseTypes.MSSQL,
name: 'Microsoft SQL Server',
},
];
const LANGUAGES = [
{
name: 'Albanian',
dispName: 'Shqip',
value: 'al',
dayjsLocaleId: 'sq',
localeId: 'sq',
},
{
name: 'Arabic (Libya)',
dispName: 'العربية',
value: 'ar-ly',
rtl: true,
skipForLocale: true,
localeId: 'ar-LY',
},
{
name: 'Armenian',
dispName: 'Հայերեն',
value: 'hy',
dayjsLocaleId: 'hy-am',
},
{
name: 'Belarusian',
dispName: 'Беларускі',
value: 'by',
dayjsLocaleId: 'be',
localeId: 'be',
},
{
name: 'Bengali',
dispName: 'বাংলা',
value: 'bn',
dayjsLocaleId: 'bn',
},
{ name: 'Bulgarian', dispName: 'Български', value: 'bg' },
{
name: 'Catalan',
dispName: 'Català',
value: 'ca',
},
{
name: 'Chinese (Simplified)',
dispName: '中文(简体)',
value: 'zh-cn',
localeId: 'zh-Hans',
},
{
name: 'Chinese (Traditional)',
dispName: '繁體中文',
value: 'zh-tw',
localeId: 'zh-Hant',
},
{ name: 'Croatian', dispName: 'Hrvatski', value: 'hr' },
{ name: 'Czech', dispName: 'Český', value: 'cs' },
{ name: 'Danish', dispName: 'Dansk', value: 'da' },
{ name: 'Dutch', dispName: 'Nederlands', value: 'nl' },
{ name: 'English', dispName: 'English', value: 'en' },
{ name: 'Estonian', dispName: 'Eesti', value: 'et' },
{
name: 'Farsi',
dispName: 'فارسی',
value: 'fa',
rtl: true,
},
{ name: 'Finnish', dispName: 'Suomi', value: 'fi' },
{ name: 'French', dispName: 'Français', value: 'fr' },
{ name: 'Galician', dispName: 'Galego', value: 'gl' },
{ name: 'German', dispName: 'Deutsch', value: 'de' },
{ name: 'Greek', dispName: 'Ελληνικά', value: 'el' },
{ name: 'Hindi', dispName: 'हिंदी', value: 'hi' },
{ name: 'Hungarian', dispName: 'Magyar', value: 'hu' },
{
name: 'Indonesian',
dispName: 'Bahasa Indonesia',
/*
To fix a nasty bug in the JDK ("Indonesian Locale does not comply with ISO 639")
The locale is set to "in" for Indonesia
See https://bugs.openjdk.java.net/browse/JDK-6457127
And https://github.com/jhipster/generator-jhipster/issues/9494
*/
value: 'in',
localeId: 'id',
dayjsLocaleId: 'id',
},
{ name: 'Italian', dispName: 'Italiano', value: 'it' },
{ name: 'Japanese', dispName: '日本語', value: 'ja' },
{ name: 'Korean', dispName: '한국어', value: 'ko' },
{ name: 'Marathi', dispName: 'मराठी', value: 'mr' },
{ name: 'Myanmar', dispName: 'မြန်မာ', value: 'my' },
{ name: 'Polish', dispName: 'Polski', value: 'pl' },
{
name: 'Portuguese (Brazilian)',
dispName: 'Português (Brasil)',
value: 'pt-br',
localeId: 'pt',
},
{
name: 'Portuguese',
dispName: 'Português',
value: 'pt-pt',
localeId: 'pt-PT',
dayjsLocaleId: 'pt',
},
{ name: 'Romanian', dispName: 'Română', value: 'ro' },
{ name: 'Russian', dispName: 'Русский', value: 'ru' },
{ name: 'Slovak', dispName: 'Slovenský', value: 'sk' },
{ name: 'Serbian', dispName: 'Srpski', value: 'sr' },
{ name: 'Sinhala', dispName: 'සිංහල', value: 'si' },
{ name: 'Spanish', dispName: 'Español', value: 'es' },
{ name: 'Swedish', dispName: 'Svenska', value: 'sv' },
{ name: 'Turkish', dispName: 'Türkçe', value: 'tr' },
{ name: 'Tamil', dispName: 'தமிழ்', value: 'ta' },
{ name: 'Telugu', dispName: 'తెలుగు', value: 'te' },
{ name: 'Thai', dispName: 'ไทย', value: 'th' },
{
name: 'Ukrainian',
dispName: 'Українська',
value: 'ua',
localeId: 'uk',
dayjsLocaleId: 'uk',
},
{
name: 'Uzbek (Cyrillic)',
dispName: 'Ўзбекча',
value: 'uz-Cyrl-uz',
localeId: 'uz-Cyrl',
dayjsLocaleId: 'uz',
},
{
name: 'Uzbek (Latin)',
dispName: 'O`zbekcha',
value: 'uz-Latn-uz',
localeId: 'uz-Latn',
dayjsLocaleId: 'uz-latn',
},
{ name: 'Vietnamese', dispName: 'Tiếng Việt', value: 'vi' },
];
const constants = {
JHIPSTER_CONFIG_DIR: '.jhipster',
INTERPOLATE_REGEX: /<%:([\s\S]+?)%>/g, // so that tags in templates do not get mistreated as _ templates
DOCKER_DIR: `${MAIN_DIR}docker/`,
LINE_LENGTH: 180,
LANGUAGES,
MAIN_DIR,
TEST_DIR,
LOGIN_REGEX,
LOGIN_REGEX_JS,
// supported client frameworks
SUPPORTED_CLIENT_FRAMEWORKS,
CLIENT_MAIN_SRC_DIR: `${MAIN_DIR}webapp/`,
CLIENT_TEST_SRC_DIR: `${TEST_DIR}javascript/`,
CLIENT_WEBPACK_DIR: 'webpack/',
CLIENT_DIST_DIR,
ANGULAR_DIR: `${MAIN_DIR}webapp/app/`,
REACT_DIR: `${MAIN_DIR}webapp/app/`,
VUE_DIR: `${MAIN_DIR}webapp/app/`,
SERVER_MAIN_SRC_DIR: `${MAIN_DIR}java/`,
SERVER_MAIN_RES_DIR: `${MAIN_DIR}resources/`,
SERVER_TEST_SRC_DIR: `${TEST_DIR}java/`,
SERVER_TEST_RES_DIR: `${TEST_DIR}resources/`,
// server related
OFFICIAL_DATABASE_TYPE_NAMES,
// entity related
SUPPORTED_VALIDATION_RULES,
JHIPSTER_DOCUMENTATION_URL,
JHIPSTER_DOCUMENTATION_ARCHIVE_PATH,
DOCKER_JHIPSTER_REGISTRY,
DOCKER_JHIPSTER_CONTROL_CENTER,
DOCKER_JAVA_JRE,
DOCKER_MYSQL,
DOCKER_MARIADB,
DOCKER_POSTGRESQL,
DOCKER_MONGODB,
DOCKER_COUCHBASE,
DOCKER_CASSANDRA,
DOCKER_MSSQL,
DOCKER_NEO4J,
DOCKER_HAZELCAST_MANAGEMENT_CENTER,
DOCKER_MEMCACHED,
DOCKER_REDIS,
DOCKER_ELASTICSEARCH,
DOCKER_KEYCLOAK,
DOCKER_KAFKA,
DOCKER_ZOOKEEPER,
DOCKER_SONAR,
DOCKER_CONSUL,
DOCKER_CONSUL_CONFIG_LOADER,
DOCKER_PROMETHEUS,
DOCKER_PROMETHEUS_ALERTMANAGER,
DOCKER_GRAFANA,
JAVA_VERSION,
KAFKA_VERSION,
GRADLE_VERSION,
// Libraries
JIB_VERSION,
JHIPSTER_DEPENDENCIES_VERSION,
SPRING_BOOT_VERSION,
LIQUIBASE_VERSION,
LIQUIBASE_DTD_VERSION,
HIBERNATE_VERSION,
JACOCO_VERSION,
JACKSON_DATABIND_NULLABLE_VERSION,
// NPM
NODE_VERSION,
NPM_VERSION,
OPENAPI_GENERATOR_CLI_VERSION,
DOCKER_JENKINS,
DOCKER_SWAGGER_EDITOR,
R2DBC_DB_OPTIONS,
SQL_DB_OPTIONS,
DOCKER_COMPOSE_FORMAT_VERSION,
DOCKER_PROMETHEUS_OPERATOR,
DOCKER_GRAFANA_WATCHER,
KUBERNETES_CORE_API_VERSION,
KUBERNETES_BATCH_API_VERSION,
KUBERNETES_DEPLOYMENT_API_VERSION,
KUBERNETES_STATEFULSET_API_VERSION,
KUBERNETES_INGRESS_API_VERSION,
KUBERNETES_ISTIO_NETWORKING_API_VERSION,
KUBERNETES_RBAC_API_VERSION,
HELM_KAFKA,
HELM_ELASTICSEARCH,
HELM_PROMETHEUS,
HELM_GRAFANA,
HELM_MYSQL,
HELM_MARIADB,
HELM_POSTGRESQL,
HELM_MOGODB_REPLICASET,
};
module.exports = constants;