generator-jhipster-vuejs
Version:
A Vue.js blueprint for JHipster. It will use Vue.js as the frontend library
490 lines (484 loc) • 19.9 kB
JavaScript
/**
* Copyright 2013-2020 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
*
* http://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 mkdirp = require('mkdirp');
const constants = require('generator-jhipster/generators/generator-constants');
const utils = require('../utils');
const MAIN_SRC_DIR = constants.CLIENT_MAIN_SRC_DIR;
const TEST_SRC_DIR = constants.CLIENT_TEST_SRC_DIR;
const VUE_DIR = constants.ANGULAR_DIR;
const CLIENT_VUE_TEMPLATES_DIR = 'vue';
module.exports = {
writeFiles
};
const vueFiles = {
common: [
{
templates: [
'package.json',
'tsconfig.json',
'.huskyrc',
'.postcssrc.js',
'tslint.json',
'config/index.js',
'config/dev.env.js',
'config/prod.env.js',
'webpack/webpack.common.js',
'webpack/webpack.dev.js',
'webpack/webpack.prod.js',
'webpack/vue.utils.js',
'webpack/loader.conf.js',
'webpack/utils.js'
]
},
{
condition: generator => generator.protractorTests,
templates: ['tsconfig.e2e.json']
}
],
image: [
{
path: MAIN_SRC_DIR,
templates: [
{ file: 'content/images/jhipster_family_member_0.svg', method: 'copy' },
{ file: 'content/images/jhipster_family_member_1.svg', method: 'copy' },
{ file: 'content/images/jhipster_family_member_2.svg', method: 'copy' },
{ file: 'content/images/jhipster_family_member_3.svg', method: 'copy' },
{ file: 'content/images/jhipster_family_member_0_head-192.png', method: 'copy' },
{ file: 'content/images/jhipster_family_member_1_head-192.png', method: 'copy' },
{ file: 'content/images/jhipster_family_member_2_head-192.png', method: 'copy' },
{ file: 'content/images/jhipster_family_member_3_head-192.png', method: 'copy' },
{ file: 'content/images/jhipster_family_member_0_head-256.png', method: 'copy' },
{ file: 'content/images/jhipster_family_member_1_head-256.png', method: 'copy' },
{ file: 'content/images/jhipster_family_member_2_head-256.png', method: 'copy' },
{ file: 'content/images/jhipster_family_member_3_head-256.png', method: 'copy' },
{ file: 'content/images/jhipster_family_member_0_head-384.png', method: 'copy' },
{ file: 'content/images/jhipster_family_member_1_head-384.png', method: 'copy' },
{ file: 'content/images/jhipster_family_member_2_head-384.png', method: 'copy' },
{ file: 'content/images/jhipster_family_member_3_head-384.png', method: 'copy' },
{ file: 'content/images/jhipster_family_member_0_head-512.png', method: 'copy' },
{ file: 'content/images/jhipster_family_member_1_head-512.png', method: 'copy' },
{ file: 'content/images/jhipster_family_member_2_head-512.png', method: 'copy' },
{ file: 'content/images/jhipster_family_member_3_head-512.png', method: 'copy' },
{ file: 'content/images/logo-jhipster.png', method: 'copy' }
]
}
],
css: [
{
path: MAIN_SRC_DIR,
templates: [
'content/css/loading.css'
]
}
],
sass: [
{
path: MAIN_SRC_DIR,
templates: ['content/scss/_bootstrap-variables.scss', 'content/scss/global.scss', 'content/scss/vendor.scss']
},
{
condition: generator => generator.enableI18nRTL,
path: MAIN_SRC_DIR,
templates: ['content/scss/rtl.scss']
}
],
swagger: [
{
path: MAIN_SRC_DIR,
templates: ['swagger-ui/index.html', { file: 'swagger-ui/dist/images/throbber.gif', method: 'copy' }]
}
],
commonWeb: [
{
path: MAIN_SRC_DIR,
templates: [
'WEB-INF/web.xml',
{ file: 'favicon.ico', method: 'copy' },
'robots.txt',
'404.html',
'index.html',
'manifest.webapp'
]
}
],
vueApp: [
{
path: VUE_DIR,
templates: [
'app.vue',
'app.component.ts',
'shims-vue.d.ts',
'constants.ts',
'main.ts',
'shared/config/axios-interceptor.ts',
'shared/config/config.ts',
'shared/config/config-bootstrap-vue.ts',
'shared/config/store/account-store.ts',
'shared/config/store/alert-store.ts',
'shared/security/authority.ts',
'router/index.ts',
'router/admin.ts',
'router/entities.ts',
'router/pages.ts'
]
}
],
i18n: [
{
condition: generator => generator.enableTranslation,
path: VUE_DIR,
templates: [
'locale/translation.service.ts',
'shared/config/formatter.ts',
'shared/config/store/translation-store.ts',
]
}
],
sharedVueApp: [
{
path: VUE_DIR,
templates: [
'core/home/home.vue',
'core/home/home.component.ts',
'core/error/error.vue',
'core/error/error.component.ts',
'core/jhi-footer/jhi-footer.vue',
'core/jhi-footer/jhi-footer.component.ts',
'core/jhi-navbar/jhi-navbar.vue',
'core/jhi-navbar/jhi-navbar.component.ts',
'core/ribbon/ribbon.vue',
'core/ribbon/ribbon.component.ts',
'shared/date/filters.ts',
'shared/sort/jhi-sort-indicator.component.ts',
'shared/sort/jhi-sort-indicator.vue',
'shared/sort/sorts.ts',
'shared/alert/alert.service.ts',
'shared/alert/alert.mixin.ts',
'shared/data/data-utils.service.ts',
'shared/jhi-item-count.component.ts',
'shared/jhi-item-count.vue',
'shared/model/user.model.ts'
]
}
],
accountModule: [
{
path: VUE_DIR,
templates: [
'account/account.service.ts'
]
},
{
condition: generator => generator.authenticationType !== 'oauth2',
path: VUE_DIR,
templates: [
'account/login-form/login-form.vue',
'account/login-form/login-form.component.ts',
'account/login.service.ts',
'router/account.ts',
]
},
{
condition: generator => !generator.skipUserManagement,
path: VUE_DIR,
templates: [
'account/change-password/change-password.vue',
'account/change-password/change-password.component.ts',
'account/register/register.vue',
'account/register/register.component.ts',
'account/register/register.service.ts',
'account/reset-password/init/reset-password-init.vue',
'account/reset-password/init/reset-password-init.component.ts',
'account/reset-password/finish/reset-password-finish.vue',
'account/reset-password/finish/reset-password-finish.component.ts',
'account/settings/settings.vue',
'account/settings/settings.component.ts',
'account/activate/activate.component.ts',
'account/activate/activate.service.ts',
'account/activate/activate.vue'
]
},
{
condition: generator => generator.authenticationType === 'session' && !this.skipUserManagement,
path: VUE_DIR,
templates: [
'account/sessions/sessions.vue',
'account/sessions/sessions.component.ts'
]
},
{
condition: generator => generator.authenticationType === 'oauth2',
path: VUE_DIR,
templates: [
'account/login.service.ts'
]
}
],
adminModule: [
{
path: VUE_DIR,
templates: [
// admin modules
'admin/configuration/configuration.vue',
'admin/configuration/configuration.component.ts',
'admin/configuration/configuration.service.ts',
'admin/docs/docs.vue',
'admin/docs/docs.component.ts',
'admin/health/health.vue',
'admin/health/health.component.ts',
'admin/health/health-modal.vue',
'admin/health/health-modal.component.ts',
'admin/health/health.service.ts',
'admin/logs/logs.vue',
'admin/logs/logs.component.ts',
'admin/logs/logs.service.ts',
'admin/metrics/metrics.vue',
'admin/metrics/metrics.component.ts',
'admin/metrics/metrics.service.ts',
'admin/metrics/metrics-modal.vue',
'admin/metrics/metrics-modal.component.ts'
]
},
{
condition: generator => (generator.databaseType !== 'no' || generator.authenticationType === 'uaa') && generator.databaseType !== 'cassandra',
path: VUE_DIR,
templates: [
'admin/audits/audits.vue',
'admin/audits/audits.component.ts',
'admin/audits/audits.service.ts'
]
},
{
condition: generator => generator.websocket === 'spring-websocket',
path: VUE_DIR,
templates: [
'admin/tracker/tracker.vue',
'admin/tracker/tracker.component.ts',
'admin/tracker/tracker.service.ts'
]
},
{
condition: generator => !generator.skipUserManagement,
path: VUE_DIR,
templates: [
'admin/user-management/user-management.vue',
'admin/user-management/user-management.component.ts',
'admin/user-management/user-management-view.vue',
'admin/user-management/user-management-view.component.ts',
'admin/user-management/user-management-edit.vue',
'admin/user-management/user-management-edit.component.ts',
'admin/user-management/user-management.service.ts'
]
},
{
condition: generator => generator.applicationType === 'gateway' && generator.serviceDiscoveryType,
path: VUE_DIR,
templates: [
'admin/gateway/gateway.vue',
'admin/gateway/gateway.component.ts',
'admin/gateway/gateway.service.ts'
]
}
],
clientTestConfig: [
{
path: TEST_SRC_DIR,
templates: [
'jest.conf.js',
]
}
],
clientTestFw: [
{
path: TEST_SRC_DIR,
templates: [
'jest.conf.js',
'spec/app/account/account.service.spec.ts',
'spec/app/core/home/home.component.spec.ts',
'spec/app/core/error/error.component.spec.ts',
'spec/app/core/jhi-navbar/jhi-navbar.component.spec.ts',
'spec/app/core/ribbon/ribbon.component.spec.ts',
'spec/app/shared/alert/alert.service.spec.ts',
'spec/app/shared/config/axios-interceptor.spec.ts',
'spec/app/shared/data/data-utils.service.spec.ts',
'spec/app/admin/configuration/configuration.component.spec.ts',
'spec/app/admin/health/health.component.spec.ts',
'spec/app/admin/health/health-modal.component.spec.ts',
'spec/app/admin/health/health.service.spec.ts',
'spec/app/admin/logs/logs.component.spec.ts',
'spec/app/admin/metrics/metrics.component.spec.ts',
'spec/app/admin/metrics/metrics-modal.component.spec.ts'
]
},
{
condition: generator => ((generator.databaseType !== 'no' || generator.authenticationType === 'uaa') && generator.databaseType !== 'cassandra'),
path: TEST_SRC_DIR,
templates: [
'spec/app/admin/audits/audits.component.spec.ts'
]
},
{
condition: generator => generator.enableTranslation,
path: TEST_SRC_DIR,
templates: [
'spec/app/shared/config/formatter.spec.ts',
]
},
{
condition: generator => generator.authenticationType === 'oauth2',
path: TEST_SRC_DIR,
templates: [
'spec/app/account/login.service.spec.ts',
]
},
{
condition: generator => generator.authenticationType !== 'oauth2',
path: TEST_SRC_DIR,
templates: [
'spec/app/account/login-form/login-form.component.spec.ts'
]
},
{
condition: generator => generator.authenticationType === 'session' && !generator.skipUserManagement,
path: TEST_SRC_DIR,
templates: [
'spec/app/account/sessions/sessions.component.spec.ts',
'spec/app/account/login.service.spec.ts'
]
},
{
condition: generator => !generator.skipUserManagement,
path: TEST_SRC_DIR,
templates: [
'spec/app/account/change-password/change-password.component.spec.ts',
'spec/app/account/register/register.component.spec.ts',
'spec/app/account/reset-password/init/reset-password-init.component.spec.ts',
'spec/app/account/reset-password/finish/reset-password-finish.component.spec.ts',
'spec/app/account/settings/settings.component.spec.ts',
'spec/app/account/activate/activate.component.spec.ts'
]
},
{
condition: generator => (generator.databaseType !== 'no' || generator.authenticationType === 'uaa') && generator.databaseType !== 'cassandra',
path: TEST_SRC_DIR,
templates: ['spec/app/admin/audits/audits.component.spec.ts']
},
{
condition: generator => generator.websocket === 'spring-websocket',
path: TEST_SRC_DIR,
templates: [
'spec/app/admin/tracker/tracker.component.spec.ts',
'spec/app/admin/tracker/tracker.service.spec.ts'
]
},
{
condition: generator => !generator.skipUserManagement,
path: TEST_SRC_DIR,
templates: [
'spec/app/admin/user-management/user-management.component.spec.ts',
'spec/app/admin/user-management/user-management-view.component.spec.ts',
'spec/app/admin/user-management/user-management-edit.component.spec.ts'
]
},
{
condition: generator => generator.applicationType === 'gateway' && generator.serviceDiscoveryType,
path: TEST_SRC_DIR,
templates: [
'spec/app/admin/gateway/gateway.component.spec.ts'
]
},
{
condition: generator => generator.protractorTests,
path: TEST_SRC_DIR,
templates: [
'e2e/modules/account/account.spec.ts',
'e2e/modules/administration/administration.spec.ts',
'e2e/util/utils.ts',
'e2e/page-objects/navbar-page.ts',
'e2e/page-objects/signin-page.ts',
'e2e/page-objects/alert-page.ts',
'e2e/page-objects/administration-page.ts',
'protractor.conf.js'
]
},
{
condition: generator => generator.protractorTests && !generator.skipUserManagement,
path: TEST_SRC_DIR,
templates: [
'e2e/page-objects/password-page.ts',
'e2e/page-objects/settings-page.ts',
'e2e/page-objects/register-page.ts'
]
}
]
};
function writeFiles() {
mkdirp(MAIN_SRC_DIR);
// write Vue.js files
this.writeFilesToDisk(vueFiles, this, false, `${CLIENT_VUE_TEMPLATES_DIR}`);
if (!this.enableTranslation) {
utils.replaceTranslation(this, [
'app/app.vue',
'app/core/home/home.vue',
'app/core/error/error.vue',
'app/core/jhi-footer/jhi-footer.vue',
'app/core/jhi-navbar/jhi-navbar.vue',
'app/core/ribbon/ribbon.vue',
'app/shared/jhi-item-count.vue',
'app/admin/configuration/configuration.vue',
'app/admin/health/health.vue',
'app/admin/health/health-modal.vue',
'app/admin/logs/logs.vue',
'app/admin/metrics/metrics.vue',
'app/admin/metrics/metrics-modal.vue'
]);
if ((this.databaseType !== 'no' || this.authenticationType === 'uaa') && this.databaseType !== 'cassandra') {
utils.replaceTranslation(this, [
'app/admin/audits/audits.vue'
]);
}
if (this.authenticationType !== 'oauth2') {
utils.replaceTranslation(this, [
'app/account/login-form/login-form.vue',
]);
}
if (!this.skipUserManagement) {
utils.replaceTranslation(this, [
'app/account/change-password/change-password.vue',
'app/account/activate/activate.vue',
'app/account/register/register.vue',
'app/account/reset-password/init/reset-password-init.vue',
'app/account/reset-password/finish/reset-password-finish.vue',
'app/account/settings/settings.vue',
'app/admin/user-management/user-management.vue',
'app/admin/user-management/user-management-view.vue',
'app/admin/user-management/user-management-edit.vue'
]);
}
if (this.authenticationType === 'session' && !this.skipUserManagement) {
utils.replaceTranslation(this, ['app/account/sessions/sessions.vue']);
}
if (this.applicationType === 'gateway' && this.serviceDiscoveryType) {
utils.replaceTranslation(this, ['app/admin/gateway/gateway.vue']);
}
if (this.websocket === 'spring-websocket') {
utils.replaceTranslation(this, ['app/admin/tracker/tracker.vue']);
}
}
}