generator-jhipster 8.0.0-rc.1 → 8.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -1
- package/dist/cli/environment-builder.mjs +3 -3
- package/dist/cli/jhipster-command.mjs +7 -3
- package/dist/cli/program.mjs +1 -1
- package/dist/generators/angular/generator.mjs +8 -7
- package/dist/generators/angular/resources/package.json +10 -9
- package/dist/generators/angular/templates/package.json.ejs +4 -8
- package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/list/_entityFile_.component.html.ejs +6 -10
- package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/service/_entityFile_.service.ts.ejs +1 -1
- package/dist/generators/angular/templates/src/main/webapp/app/layouts/navbar/navbar.component.scss.ejs +1 -1
- package/dist/generators/angular/templates/webpack/webpack.microfrontend.js.ejs +48 -126
- package/dist/generators/app/support/config.mjs +3 -3
- package/dist/generators/base/generator.mjs +0 -3
- package/dist/generators/base/support/config.mjs +6 -6
- package/dist/generators/base/support/jhipster7-context.mjs +3 -3
- package/dist/generators/base-application/generator.mjs +2 -2
- package/dist/generators/base-application/support/enum.mjs +1 -1
- package/dist/generators/base-application/support/prepare-entity.mjs +14 -10
- package/dist/generators/base-application/support/prepare-field.mjs +11 -7
- package/dist/generators/base-application/support/prepare-relationship.mjs +12 -14
- package/dist/generators/base-workspaces/internal/docker-prompts.mjs +13 -12
- package/dist/generators/bootstrap/generator.mjs +64 -43
- package/dist/generators/bootstrap/support/auto-crlf-transform.mjs +34 -21
- package/dist/generators/bootstrap/support/eslint-transform.mjs +2 -5
- package/dist/generators/bootstrap/support/java-unused-imports-transform.mjs +2 -2
- package/dist/generators/bootstrap/support/multi-step-transform/index.mjs +17 -28
- package/dist/generators/bootstrap/support/multi-step-transform/template-file-fs.mjs +12 -6
- package/dist/generators/bootstrap/support/multi-step-transform/template-file.mjs +1 -0
- package/dist/generators/bootstrap/support/prettier-support.mjs +2 -2
- package/dist/generators/bootstrap-application/generator.mjs +10 -3
- package/dist/generators/bootstrap-application-base/generator.mjs +9 -6
- package/dist/generators/bootstrap-application-server/generator.mjs +2 -2
- package/dist/generators/client/resources/package.json +3 -3
- package/dist/generators/client/templates/src/main/webapp/content/css/loading.css.ejs +1 -1
- package/dist/generators/client/templates/webpack/webpack.microfrontend.js.jhi.ejs +14 -1
- package/dist/generators/common/files.mjs +1 -1
- package/dist/generators/common/generator.mjs +29 -7
- package/dist/generators/common/resources/package.json +3 -3
- package/dist/generators/common/templates/.lintstagedrc.cjs.ejs +21 -0
- package/dist/generators/common/templates/.prettierrc.ejs +1 -1
- package/dist/generators/common/templates/README.md.jhi.ejs +2 -0
- package/dist/generators/cypress/templates/src/test/javascript/cypress/e2e/account/settings-page.cy.ts.ejs +3 -0
- package/dist/generators/entity/prompts.mjs +123 -306
- package/dist/generators/generator-constants.mjs +5 -5
- package/dist/generators/heroku/generator.mjs +318 -595
- package/dist/generators/heroku/templates/Procfile.ejs +1 -1
- package/dist/generators/heroku/templates/application-heroku.yml.ejs +0 -12
- package/dist/generators/info/generator.mjs +6 -4
- package/dist/generators/init/generator.mjs +2 -2
- package/dist/generators/java/entity-files.mjs +1 -1
- package/dist/generators/java/generator.mjs +12 -13
- package/dist/generators/java/support/package-info-transform.mjs +20 -6
- package/dist/generators/java/templates/src/main/java/_package_/_entityPackage_/domain/_persistClass_.java.jhi.ejs +24 -28
- package/dist/generators/java/templates/src/main/java/_package_/_entityPackage_/domain/enumeration/_enumName_.java.ejs +3 -3
- package/dist/generators/java/templates/src/test/java/_package_/_entityPackage_/domain/_persistClass_Test.java.ejs +86 -8
- package/dist/generators/java/templates/src/test/java/_package_/_entityPackage_/domain/_persistClass_TestSamples.java.ejs +85 -0
- package/dist/generators/jdl/generator.mjs +14 -5
- package/dist/generators/kubernetes/templates/ingress.yml.ejs +0 -1
- package/dist/generators/languages/command.mjs +5 -0
- package/dist/generators/languages/generator.mjs +20 -13
- package/dist/generators/languages/translation-data.mjs +8 -13
- package/dist/generators/liquibase/generator.mjs +7 -3
- package/dist/generators/project-name/generator.mjs +1 -1
- package/dist/generators/react/generator.mjs +18 -10
- package/dist/generators/react/resources/package.json +19 -18
- package/dist/generators/react/templates/package.json.ejs +4 -5
- package/dist/generators/react/templates/src/main/webapp/app/config/icon-loader.ts.ejs +35 -33
- package/dist/generators/react/templates/src/main/webapp/app/entities/_entityFolder_/_entityFile_-update.tsx.ejs +7 -2
- package/dist/generators/react/templates/src/main/webapp/app/entities/_entityFolder_/_entityFile_.reducer.ts.ejs +1 -1
- package/dist/generators/react/templates/src/main/webapp/app/entities/_entityFolder_/_entityFile_.tsx.ejs +1 -1
- package/dist/generators/react/templates/src/main/webapp/app/modules/home/home.tsx.ejs +1 -1
- package/dist/generators/react/templates/src/main/webapp/app/routes.tsx.ejs +9 -2
- package/dist/generators/react/templates/src/main/webapp/app/shared/layout/header/header-components.tsx.ejs +1 -1
- package/dist/generators/react/templates/src/main/webapp/app/shared/layout/header/header.scss.ejs +5 -4
- package/dist/generators/react/templates/src/main/webapp/app/shared/layout/menus/entities.tsx.ejs +10 -1
- package/dist/generators/react/templates/tsconfig.test.json.ejs +1 -1
- package/dist/generators/react/templates/webpack/webpack.microfrontend.js.jhi.react.ejs +13 -58
- package/dist/generators/server/generator.mjs +13 -4
- package/dist/generators/server/resources/Dockerfile +7 -7
- package/dist/generators/server/resources/gradle/libs.versions.toml +1 -1
- package/dist/generators/server/resources/pom.xml +11 -11
- package/dist/generators/server/support/config.mjs +4 -4
- package/dist/generators/server/support/prepare-entity.mjs +5 -5
- package/dist/generators/server/support/prepare-field.mjs +20 -0
- package/dist/generators/server/support/relationship.mjs +2 -1
- package/dist/generators/server/support/templates/field-values.mjs +5 -2
- package/dist/generators/server/templates/README.md.jhi.spring-boot.ejs +0 -1
- package/dist/generators/server/templates/package.json.ejs +0 -5
- package/dist/generators/server/templates/pom.xml.ejs +1 -8
- package/dist/generators/server/templates/src/main/java/_package_/_entityPackage_/_partials_entity_/get_all_template.ejs +3 -3
- package/dist/generators/server/templates/src/main/java/_package_/_entityPackage_/service/dto/_dtoClass_.java.ejs +2 -2
- package/dist/generators/server/templates/src/main/java/_package_/_entityPackage_/web/rest/_entityClass_Resource.java.ejs +11 -11
- package/dist/generators/server/templates/src/main/java/_package_/config/JacksonConfiguration.java.ejs +2 -1
- package/dist/generators/server/templates/src/main/java/_package_/config/SecurityConfiguration_imperative.java.ejs +1 -1
- package/dist/generators/server/templates/src/main/java/_package_/config/SecurityConfiguration_reactive.java.ejs +2 -0
- package/dist/generators/server/templates/src/main/java/_package_/service/MailService.java.ejs +10 -4
- package/dist/generators/server/templates/src/main/java/_package_/web/rest/PublicUserResource.java.ejs +3 -4
- package/dist/generators/server/templates/src/main/java/_package_/web/rest/UserResource.java.ejs +0 -2
- package/dist/generators/server/templates/src/main/java/_package_/web/rest/errors/ExceptionTranslator.java.ejs +4 -7
- package/dist/generators/server/templates/src/test/java/_package_/_entityPackage_/web/rest/_entityClass_ResourceIT.java.ejs +3 -3
- package/dist/generators/server/templates/src/test/java/_package_/web/rest/AccountResourceIT.java.ejs +4 -4
- package/dist/generators/spring-data-elasticsearch/templates/src/main/java/_package_/_entityPackage_/repository/search/_entityClass_SearchRepository.java.ejs +0 -2
- package/dist/generators/spring-data-neo4j/templates/src/main/java/_package_/_entityPackage_/domain/_persistClass_.java.jhi.spring_data_neo4j.ejs +3 -37
- package/dist/generators/vue/generator.mjs +25 -16
- package/dist/generators/vue/resources/package.json +17 -16
- package/dist/generators/vue/templates/package.json.ejs +3 -5
- package/dist/generators/vue/templates/src/main/webapp/app/core/jhi-navbar/jhi-navbar.component.ts.ejs +10 -3
- package/dist/generators/vue/templates/src/main/webapp/app/core/jhi-navbar/jhi-navbar.vue.ejs +3 -4
- package/dist/generators/vue/templates/src/main/webapp/app/entities/_entityFolder_/_entityFile_.service.ts.ejs +1 -1
- package/dist/generators/vue/templates/src/main/webapp/app/entities/_entityFolder_/_entityFile_.vue.ejs +12 -0
- package/dist/generators/vue/templates/src/main/webapp/app/router/index.ts.ejs +8 -1
- package/dist/generators/vue/templates/webpack/webpack.microfrontend.js.jhi.vue.ejs +19 -34
- package/dist/jdl/converters/jdl-to-json/jdl-to-json-option-converter.js +2 -2
- package/dist/jdl/converters/jdl-to-json/jdl-to-json-relationship-converter.js +1 -1
- package/dist/jdl/converters/jdl-to-json/jdl-without-application-to-json-converter.js +1 -1
- package/dist/jdl/converters/parsed-jdl-to-jdl-object/application-converter.js +1 -17
- package/dist/jdl/exporters/applications/jhipster-application-formatter.js +17 -1
- package/dist/jdl/exporters/config.js +11 -0
- package/dist/jdl/exporters/export-utils.js +2 -13
- package/dist/jdl/index.js +1 -0
- package/dist/jdl/jdl-importer.js +6 -2
- package/dist/jdl/models/jdl-application-configuration-factory.js +34 -2
- package/dist/jdl/models/jdl-application-configuration.js +6 -3
- package/dist/jdl/models/jdl-application-factory.js +2 -2
- package/dist/jdl/models/jdl-application.js +12 -3
- package/dist/jdl/parsing/jdl-ast-builder-visitor.js +63 -7
- package/dist/jdl/parsing/jdl-parser.js +52 -6
- package/dist/jdl/parsing/lexer/application-tokens.js +1 -1
- package/dist/jdl/validators/entity-validator.js +4 -2
- package/dist/jdl/validators/enum-validator.js +4 -2
- package/dist/jdl/validators/jdl-with-application-validator.js +18 -8
- package/dist/jdl/validators/jdl-without-application-validator.js +30 -29
- package/dist/jdl/validators/validator.js +1 -1
- package/dist/types/generators/base/support/config.d.mts +3 -3
- package/dist/types/generators/base-application/support/prepare-entity.d.mts +6 -1
- package/dist/types/generators/bootstrap/support/auto-crlf-transform.d.mts +3 -2
- package/dist/types/generators/bootstrap/support/multi-step-transform/index.d.mts +3 -20
- package/dist/types/generators/bootstrap/support/multi-step-transform/template-file-fs.d.mts +15 -9
- package/dist/types/generators/bootstrap/support/multi-step-transform/template-file.d.mts +1 -0
- package/dist/types/generators/generator-constants.d.mts +3 -3
- package/dist/types/generators/java/support/package-info-transform.d.mts +1 -4
- package/dist/types/generators/server/support/templates/field-values.d.mts +1 -1
- package/dist/types/jdl/exporters/config.d.ts +1 -0
- package/dist/types/jdl/index.d.ts +1 -0
- package/dist/types/jdl/jdl-importer.d.ts +1 -0
- package/dist/types/jdl/models/jdl-application-configuration-factory.d.ts +1 -0
- package/dist/types/jdl/models/jdl-application-configuration-option.d.ts +2 -2
- package/dist/types/jdl/models/jdl-application-configuration.d.ts +8 -6
- package/dist/types/jdl/models/jdl-application-factory.d.ts +1 -1
- package/dist/types/jdl/models/jdl-application.d.ts +8 -4
- package/dist/types/jdl/models/jdl-object.d.ts +1 -1
- package/dist/types/jdl/models/list-jdl-application-configuration-option.d.ts +1 -1
- package/dist/types/jdl/parsing/jdl-ast-builder-visitor.d.ts +10 -0
- package/dist/types/jdl/parsing/jdl-parser.d.ts +3 -0
- package/dist/types/jdl/parsing/lexer/application-tokens.d.ts +1 -0
- package/dist/types/jdl/validators/entity-validator.d.ts +2 -2
- package/dist/types/jdl/validators/enum-validator.d.ts +2 -2
- package/dist/types/jdl/validators/validator.d.ts +4 -1
- package/package.json +31 -31
|
@@ -53,6 +53,7 @@ export default class LanguagesGenerator extends BaseApplicationGenerator {
|
|
|
53
53
|
composedBlueprints;
|
|
54
54
|
languageCommand;
|
|
55
55
|
writeJavaLanguageFiles;
|
|
56
|
+
regenerateLanguages;
|
|
56
57
|
constructor(args, options, features) {
|
|
57
58
|
super(args, options, features);
|
|
58
59
|
this.languageCommand = this.options.commandName === 'languages';
|
|
@@ -177,7 +178,7 @@ export default class LanguagesGenerator extends BaseApplicationGenerator {
|
|
|
177
178
|
return this.asPreparingTaskGroup({
|
|
178
179
|
prepareForTemplates({ application, source }) {
|
|
179
180
|
if (application.enableTranslation) {
|
|
180
|
-
if (!this.languageCommand) {
|
|
181
|
+
if (!this.languageCommand || this.regenerateLanguages) {
|
|
181
182
|
this.languagesToApply = application.languages;
|
|
182
183
|
}
|
|
183
184
|
else {
|
|
@@ -204,17 +205,21 @@ export default class LanguagesGenerator extends BaseApplicationGenerator {
|
|
|
204
205
|
get default() {
|
|
205
206
|
return this.asDefaultTaskGroup({
|
|
206
207
|
async loadNativeLanguage({ application, control }) {
|
|
208
|
+
if (application.skipClient)
|
|
209
|
+
return;
|
|
207
210
|
control.translations = control.translations ?? {};
|
|
208
211
|
this.translationData = new TranslationData({ generator: this, translations: control.translations });
|
|
209
212
|
const { clientSrcDir, enableTranslation, nativeLanguage } = application;
|
|
210
213
|
const fallbackLanguage = 'en';
|
|
211
214
|
this.queueLoadLanguages({ clientSrcDir, enableTranslation, nativeLanguage, fallbackLanguage });
|
|
212
215
|
const filter = createTranslationsFilter({ clientSrcDir, nativeLanguage, fallbackLanguage });
|
|
213
|
-
|
|
216
|
+
const listener = filePath => {
|
|
214
217
|
if (filter(filePath)) {
|
|
218
|
+
this.env.sharedFs.removeListener('change', listener);
|
|
215
219
|
this.queueLoadLanguages({ clientSrcDir, enableTranslation, nativeLanguage, fallbackLanguage });
|
|
216
220
|
}
|
|
217
|
-
}
|
|
221
|
+
};
|
|
222
|
+
this.env.sharedFs.on('change', listener);
|
|
218
223
|
control.getWebappTranslation = (...args) => this.translationData.getClientTranslation(...args);
|
|
219
224
|
},
|
|
220
225
|
insight() {
|
|
@@ -305,7 +310,7 @@ export default class LanguagesGenerator extends BaseApplicationGenerator {
|
|
|
305
310
|
if (application.enableTranslation &&
|
|
306
311
|
application.generateUserManagement &&
|
|
307
312
|
!application.skipServer &&
|
|
308
|
-
|
|
313
|
+
application.backendTypeSpringBoot) {
|
|
309
314
|
updateLanguagesInJava.call(this, { application, control });
|
|
310
315
|
}
|
|
311
316
|
},
|
|
@@ -317,6 +322,8 @@ export default class LanguagesGenerator extends BaseApplicationGenerator {
|
|
|
317
322
|
get postWritingEntities() {
|
|
318
323
|
return this.asPostWritingEntitiesTaskGroup({
|
|
319
324
|
addEntities({ application, entities, source }) {
|
|
325
|
+
if (application.skipClient)
|
|
326
|
+
return;
|
|
320
327
|
const languagesToApply = application.enableTranslation ? this.languagesToApply : [...new Set([application.nativeLanguage, 'en'])];
|
|
321
328
|
for (const entity of entities.filter(entity => !entity.skipClient && !entity.builtIn)) {
|
|
322
329
|
for (const language of languagesToApply) {
|
|
@@ -346,16 +353,16 @@ export default class LanguagesGenerator extends BaseApplicationGenerator {
|
|
|
346
353
|
this.queueTask({
|
|
347
354
|
method: async () => {
|
|
348
355
|
const filter = createTranslationsFileFilter({ clientSrcDir, nativeLanguage, fallbackLanguage });
|
|
349
|
-
await this.
|
|
356
|
+
await this.pipeline({
|
|
350
357
|
name: 'loading translations',
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
}
|
|
358
|
+
filter: file => file.path.startsWith(this.destinationPath()) && filter(file),
|
|
359
|
+
refresh: true,
|
|
360
|
+
}, this.translationData.loadFromStreamTransform({
|
|
361
|
+
enableTranslation,
|
|
362
|
+
clientSrcDir,
|
|
363
|
+
nativeLanguage,
|
|
364
|
+
fallbackLanguage,
|
|
365
|
+
}));
|
|
359
366
|
},
|
|
360
367
|
taskName: 'loadingTranslations',
|
|
361
368
|
queueName: QUEUES.LOADING_TRANSLATIONS_QUEUE,
|
|
@@ -18,9 +18,8 @@
|
|
|
18
18
|
*/
|
|
19
19
|
import { inspect } from 'node:util';
|
|
20
20
|
import * as _ from 'lodash-es';
|
|
21
|
-
import {
|
|
21
|
+
import { transform } from '@yeoman/transform';
|
|
22
22
|
import { Minimatch } from 'minimatch';
|
|
23
|
-
import { clearFileState } from 'mem-fs-editor/state';
|
|
24
23
|
const { get } = _;
|
|
25
24
|
export const createTranslationsFilter = ({ clientSrcDir, nativeLanguage, fallbackLanguage }) => {
|
|
26
25
|
const pattern = !fallbackLanguage || nativeLanguage === fallbackLanguage
|
|
@@ -42,22 +41,18 @@ export default class TranslationData {
|
|
|
42
41
|
this.generator = generator;
|
|
43
42
|
this.translations = translations;
|
|
44
43
|
}
|
|
45
|
-
loadFromStreamTransform({ clientSrcDir, nativeLanguage, fallbackLanguage = 'en' }) {
|
|
44
|
+
loadFromStreamTransform({ enableTranslation, clientSrcDir, nativeLanguage, fallbackLanguage = 'en' }) {
|
|
46
45
|
const filter = createTranslationsFileFilter({ clientSrcDir, nativeLanguage, fallbackLanguage });
|
|
47
46
|
const minimatchNative = new Minimatch(`**/${clientSrcDir}i18n/${nativeLanguage}/*.json`);
|
|
48
|
-
return
|
|
49
|
-
if (filter(file)) {
|
|
47
|
+
return transform(file => {
|
|
48
|
+
if (filter(file) && file.contents) {
|
|
50
49
|
const contents = JSON.parse(file.contents.toString());
|
|
51
50
|
this.mergeTranslation(contents, !minimatchNative.match(file.path));
|
|
51
|
+
if (!enableTranslation) {
|
|
52
|
+
return undefined;
|
|
53
|
+
}
|
|
52
54
|
}
|
|
53
|
-
|
|
54
|
-
}
|
|
55
|
-
clearTranslationsStatusTransform({ clientSrcDir, nativeLanguage, fallbackLanguage = 'en' }) {
|
|
56
|
-
const filter = createTranslationsFileFilter({ clientSrcDir, nativeLanguage, fallbackLanguage });
|
|
57
|
-
return passthrough(file => {
|
|
58
|
-
if (filter(file)) {
|
|
59
|
-
clearFileState(file);
|
|
60
|
-
}
|
|
55
|
+
return file;
|
|
61
56
|
});
|
|
62
57
|
}
|
|
63
58
|
mergeTranslation(translation, fallback) {
|
|
@@ -35,6 +35,8 @@ export default class LiquibaseGenerator extends BaseEntityChangesGenerator {
|
|
|
35
35
|
recreateInitialChangelog;
|
|
36
36
|
numberOfRows;
|
|
37
37
|
databaseChangelogs = [];
|
|
38
|
+
injectBuildTool = true;
|
|
39
|
+
injectLogs = true;
|
|
38
40
|
constructor(args, options, features) {
|
|
39
41
|
super(args, options, { skipParseOptions: false, ...features });
|
|
40
42
|
this.argument('entities', {
|
|
@@ -137,7 +139,7 @@ export default class LiquibaseGenerator extends BaseEntityChangesGenerator {
|
|
|
137
139
|
prepareEntity(entity, this, application);
|
|
138
140
|
prepareEntityForServer(entity);
|
|
139
141
|
if (!entity.embedded && !entity.primaryKey) {
|
|
140
|
-
prepareEntityPrimaryKeyForTemplates(entity,
|
|
142
|
+
prepareEntityPrimaryKeyForTemplates.call(this, { entity, application });
|
|
141
143
|
}
|
|
142
144
|
for (const field of entity.fields ?? []) {
|
|
143
145
|
prepareField(entity, field, this);
|
|
@@ -222,13 +224,15 @@ export default class LiquibaseGenerator extends BaseEntityChangesGenerator {
|
|
|
222
224
|
get postWriting() {
|
|
223
225
|
return this.asPostWritingTaskGroup({
|
|
224
226
|
customizeSpring({ source }) {
|
|
227
|
+
if (!this.injectLogs)
|
|
228
|
+
return;
|
|
225
229
|
source.addLogbackMainLog?.({ name: 'liquibase', level: 'WARN' });
|
|
226
230
|
source.addLogbackMainLog?.({ name: 'LiquibaseSchemaResolver', level: 'INFO' });
|
|
227
231
|
source.addLogbackTestLog?.({ name: 'liquibase', level: 'WARN' });
|
|
228
232
|
source.addLogbackTestLog?.({ name: 'LiquibaseSchemaResolver', level: 'INFO' });
|
|
229
233
|
},
|
|
230
234
|
customizeMaven({ source, application }) {
|
|
231
|
-
if (!application.buildToolMaven)
|
|
235
|
+
if (!application.buildToolMaven || !this.injectBuildTool)
|
|
232
236
|
return;
|
|
233
237
|
if (!application.javaDependencies) {
|
|
234
238
|
throw new Error('Some application fields are be mandatory');
|
|
@@ -331,7 +335,7 @@ export default class LiquibaseGenerator extends BaseEntityChangesGenerator {
|
|
|
331
335
|
}
|
|
332
336
|
},
|
|
333
337
|
injectGradle({ source, application }) {
|
|
334
|
-
if (!application.buildToolGradle)
|
|
338
|
+
if (!application.buildToolGradle || !this.injectBuildTool)
|
|
335
339
|
return;
|
|
336
340
|
if (!application.javaDependencies) {
|
|
337
341
|
throw new Error('Some application fields are be mandatory');
|
|
@@ -114,7 +114,7 @@ export default class ProjectNameGenerator extends BaseApplicationGenerator {
|
|
|
114
114
|
* @returns Boolean
|
|
115
115
|
*/
|
|
116
116
|
validateBaseName(input) {
|
|
117
|
-
if (!/^([\w
|
|
117
|
+
if (!/^([\w]*)$/.test(input)) {
|
|
118
118
|
return 'Your base name cannot contain special characters or a blank space';
|
|
119
119
|
}
|
|
120
120
|
if (/_/.test(input)) {
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
* limitations under the License.
|
|
18
18
|
*/
|
|
19
19
|
import * as _ from 'lodash-es';
|
|
20
|
-
import {
|
|
20
|
+
import { isFileStateModified } from 'mem-fs-editor/state';
|
|
21
21
|
import chalk from 'chalk';
|
|
22
22
|
import BaseApplicationGenerator from '../base-application/index.mjs';
|
|
23
23
|
import { GENERATOR_CLIENT, GENERATOR_LANGUAGES, GENERATOR_REACT } from '../generator-list.mjs';
|
|
@@ -54,7 +54,7 @@ export default class ReactGenerator extends BaseApplicationGenerator {
|
|
|
54
54
|
});
|
|
55
55
|
}
|
|
56
56
|
get [BaseApplicationGenerator.LOADING]() {
|
|
57
|
-
return this.
|
|
57
|
+
return this.delegateTasksToBlueprint(() => this.loading);
|
|
58
58
|
}
|
|
59
59
|
get preparing() {
|
|
60
60
|
return this.asPreparingTaskGroup({
|
|
@@ -84,18 +84,26 @@ export default class ReactGenerator extends BaseApplicationGenerator {
|
|
|
84
84
|
get [BaseApplicationGenerator.PREPARING_EACH_ENTITY]() {
|
|
85
85
|
return this.asPreparingEachEntityTaskGroup(this.delegateTasksToBlueprint(() => this.preparingEachEntity));
|
|
86
86
|
}
|
|
87
|
-
get
|
|
88
|
-
return {
|
|
89
|
-
cleanupOldFilesTask,
|
|
90
|
-
writeFiles,
|
|
87
|
+
get default() {
|
|
88
|
+
return this.asDefaultTaskGroup({
|
|
91
89
|
queueTranslateTransform({ control, application }) {
|
|
92
90
|
if (!application.enableTranslation) {
|
|
93
|
-
this.queueTransformStream(
|
|
94
|
-
name: 'translating
|
|
95
|
-
|
|
96
|
-
|
|
91
|
+
this.queueTransformStream({
|
|
92
|
+
name: 'translating react application',
|
|
93
|
+
filter: file => isFileStateModified(file) && file.path.startsWith(this.destinationPath()) && isTranslatedReactFile(file),
|
|
94
|
+
refresh: false,
|
|
95
|
+
}, translateReactFilesTransform(control.getWebappTranslation));
|
|
97
96
|
}
|
|
98
97
|
},
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
get [BaseApplicationGenerator.DEFAULT]() {
|
|
101
|
+
return this.delegateTasksToBlueprint(() => this.default);
|
|
102
|
+
}
|
|
103
|
+
get writing() {
|
|
104
|
+
return {
|
|
105
|
+
cleanupOldFilesTask,
|
|
106
|
+
writeFiles,
|
|
99
107
|
};
|
|
100
108
|
}
|
|
101
109
|
get [BaseApplicationGenerator.WRITING]() {
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"@fortawesome/free-solid-svg-icons": "6.4.2",
|
|
5
5
|
"@fortawesome/react-fontawesome": "0.2.0",
|
|
6
6
|
"@reduxjs/toolkit": "1.9.7",
|
|
7
|
-
"axios": "1.
|
|
7
|
+
"axios": "1.6.0",
|
|
8
8
|
"bootstrap": "5.3.2",
|
|
9
9
|
"bootswatch": "5.3.2",
|
|
10
10
|
"lodash": "4.17.21",
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"react-loadable": "5.5.0",
|
|
17
17
|
"react-redux": "8.1.3",
|
|
18
18
|
"react-redux-loading-bar": "5.0.4",
|
|
19
|
-
"react-router-dom": "6.
|
|
19
|
+
"react-router-dom": "6.18.0",
|
|
20
20
|
"react-toastify": "9.1.3",
|
|
21
21
|
"react-transition-group": "4.4.5",
|
|
22
22
|
"reactstrap": "9.2.0",
|
|
@@ -27,31 +27,32 @@
|
|
|
27
27
|
"uuid": "9.0.1"
|
|
28
28
|
},
|
|
29
29
|
"devDependencies": {
|
|
30
|
+
"@module-federation/utilities": "3.0.3-0",
|
|
30
31
|
"@testing-library/react": "14.0.0",
|
|
31
|
-
"@types/jest": "29.5.
|
|
32
|
-
"@types/lodash": "4.14.
|
|
33
|
-
"@types/node": "18.18.
|
|
34
|
-
"@types/react": "18.2.
|
|
35
|
-
"@types/react-dom": "18.2.
|
|
36
|
-
"@types/react-redux": "7.1.
|
|
32
|
+
"@types/jest": "29.5.7",
|
|
33
|
+
"@types/lodash": "4.14.200",
|
|
34
|
+
"@types/node": "18.18.8",
|
|
35
|
+
"@types/react": "18.2.34",
|
|
36
|
+
"@types/react-dom": "18.2.14",
|
|
37
|
+
"@types/react-redux": "7.1.28",
|
|
37
38
|
"@types/redux": "3.6.31",
|
|
38
|
-
"@types/webpack-env": "1.18.
|
|
39
|
-
"@typescript-eslint/eslint-plugin": "6.
|
|
40
|
-
"@typescript-eslint/parser": "6.
|
|
39
|
+
"@types/webpack-env": "1.18.3",
|
|
40
|
+
"@typescript-eslint/eslint-plugin": "6.9.1",
|
|
41
|
+
"@typescript-eslint/parser": "6.9.1",
|
|
41
42
|
"autoprefixer": "10.4.16",
|
|
42
43
|
"browser-sync": "2.29.3",
|
|
43
44
|
"browser-sync-webpack-plugin": "2.3.0",
|
|
44
45
|
"copy-webpack-plugin": "11.0.0",
|
|
45
|
-
"core-js": "3.33.
|
|
46
|
+
"core-js": "3.33.2",
|
|
46
47
|
"cross-env": "7.0.3",
|
|
47
48
|
"css-loader": "6.8.1",
|
|
48
49
|
"css-minimizer-webpack-plugin": "5.0.1",
|
|
49
|
-
"eslint": "8.
|
|
50
|
+
"eslint": "8.52.0",
|
|
50
51
|
"eslint-config-prettier": "9.0.0",
|
|
51
52
|
"eslint-plugin-react": "7.33.2",
|
|
52
53
|
"eslint-webpack-plugin": "4.0.1",
|
|
53
54
|
"folder-hash": "4.0.4",
|
|
54
|
-
"fork-ts-checker-webpack-plugin": "9.0.
|
|
55
|
+
"fork-ts-checker-webpack-plugin": "9.0.2",
|
|
55
56
|
"html-webpack-plugin": "5.5.3",
|
|
56
57
|
"identity-obj-proxy": "3.0.0",
|
|
57
58
|
"jest": "29.7.0",
|
|
@@ -66,10 +67,10 @@
|
|
|
66
67
|
"react-infinite-scroll-component": "6.1.0",
|
|
67
68
|
"redux-mock-store": "1.5.4",
|
|
68
69
|
"rimraf": "5.0.5",
|
|
69
|
-
"sass": "1.69.
|
|
70
|
+
"sass": "1.69.5",
|
|
70
71
|
"sass-loader": "13.3.2",
|
|
71
72
|
"simple-progress-webpack-plugin": "2.0.0",
|
|
72
|
-
"sinon": "
|
|
73
|
+
"sinon": "17.0.1",
|
|
73
74
|
"source-map-loader": "4.0.1",
|
|
74
75
|
"sourcemap-istanbul-instrumenter-loader": "0.2.0",
|
|
75
76
|
"style-loader": "3.3.3",
|
|
@@ -78,10 +79,10 @@
|
|
|
78
79
|
"ts-jest": "29.1.1",
|
|
79
80
|
"ts-loader": "9.5.0",
|
|
80
81
|
"typescript": "5.2.2",
|
|
81
|
-
"webpack": "5.
|
|
82
|
+
"webpack": "5.89.0",
|
|
82
83
|
"webpack-cli": "5.1.4",
|
|
83
84
|
"webpack-dev-server": "4.15.1",
|
|
84
|
-
"webpack-merge": "5.
|
|
85
|
+
"webpack-merge": "5.10.0",
|
|
85
86
|
"webpack-notifier": "1.15.0",
|
|
86
87
|
"workbox-webpack-plugin": "7.0.0"
|
|
87
88
|
}
|
|
@@ -45,6 +45,7 @@
|
|
|
45
45
|
"react-loadable": "<%= nodeDependencies['react-loadable'] %>",
|
|
46
46
|
"react-redux": "<%= nodeDependencies['react-redux'] %>",
|
|
47
47
|
"react-redux-loading-bar": "<%= nodeDependencies['react-redux-loading-bar'] %>",
|
|
48
|
+
"react-router": "<%= nodeDependencies['react-router-dom'] %>",
|
|
48
49
|
"react-router-dom": "<%= nodeDependencies['react-router-dom'] %>",
|
|
49
50
|
"react-toastify": "<%= nodeDependencies['react-toastify'] %>",
|
|
50
51
|
"react-transition-group": "<%= nodeDependencies['react-transition-group'] %>",
|
|
@@ -64,6 +65,9 @@
|
|
|
64
65
|
<%_ } _%>
|
|
65
66
|
},
|
|
66
67
|
"devDependencies": {
|
|
68
|
+
<%_ if (applicationTypeGateway && microfrontend) { _%>
|
|
69
|
+
"@module-federation/utilities": "<%= nodeDependencies['@module-federation/utilities'] %>",
|
|
70
|
+
<%_ } _%>
|
|
67
71
|
"@testing-library/react": "<%= nodeDependencies['@testing-library/react'] %>",
|
|
68
72
|
"@types/jest": "<%= nodeDependencies['@types/jest'] %>",
|
|
69
73
|
"@types/lodash": "<%= nodeDependencies['@types/lodash'] %>",
|
|
@@ -104,11 +108,6 @@
|
|
|
104
108
|
<%_ if (enableI18nRTL) { _%>
|
|
105
109
|
"postcss-rtlcss": "<%= nodeDependencies['postcss-rtlcss'] %>",
|
|
106
110
|
<%_ } _%>
|
|
107
|
-
"prettier": "<%= nodeDependencies['prettier'] %>",
|
|
108
|
-
<%_ if (!skipServer) { _%>
|
|
109
|
-
"prettier-plugin-java": "<%= nodeDependencies['prettier-plugin-java'] %>",
|
|
110
|
-
<%_ } _%>
|
|
111
|
-
"prettier-plugin-packagejson": "<%= nodeDependencies['prettier-plugin-packagejson'] %>",
|
|
112
111
|
"react-infinite-scroll-component": "<%= nodeDependencies['react-infinite-scroll-component'] %>",
|
|
113
112
|
"redux-mock-store": "<%= nodeDependencies['redux-mock-store'] %>",
|
|
114
113
|
"rimraf": "<%= nodeDependencies['rimraf'] %>",
|
|
@@ -16,39 +16,41 @@
|
|
|
16
16
|
See the License for the specific language governing permissions and
|
|
17
17
|
limitations under the License.
|
|
18
18
|
-%>
|
|
19
|
-
import {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
19
|
+
import {
|
|
20
|
+
faCogs,
|
|
21
|
+
faBan,
|
|
22
|
+
faAsterisk,
|
|
23
|
+
faArrowLeft,
|
|
24
|
+
faBell,
|
|
25
|
+
faBook,
|
|
26
|
+
faCloud,
|
|
27
|
+
faDatabase,
|
|
28
|
+
faEye,
|
|
29
|
+
faFlag,
|
|
30
|
+
faHeart,
|
|
31
|
+
faHome,
|
|
32
|
+
faList,
|
|
33
|
+
faLock,
|
|
34
|
+
faPencilAlt,
|
|
35
|
+
faPlus,
|
|
36
|
+
faSave,
|
|
37
|
+
faSearch,
|
|
38
|
+
faSort,
|
|
39
|
+
faSync,
|
|
40
|
+
faRoad,
|
|
41
|
+
faSignInAlt,
|
|
42
|
+
faSignOutAlt,
|
|
43
|
+
faTachometerAlt,
|
|
44
|
+
faTasks,
|
|
45
|
+
faThList,
|
|
46
|
+
faTimesCircle,
|
|
47
|
+
faTrash,
|
|
48
|
+
faUser,
|
|
49
|
+
faUserPlus,
|
|
50
|
+
faUsers,
|
|
51
|
+
faUsersCog,
|
|
52
|
+
faWrench,
|
|
53
|
+
} from '@fortawesome/free-solid-svg-icons';
|
|
52
54
|
|
|
53
55
|
import { library } from '@fortawesome/fontawesome-svg-core';
|
|
54
56
|
|
|
@@ -148,13 +148,18 @@ export const <%= entityReactName %>Update = () => {
|
|
|
148
148
|
}
|
|
149
149
|
}, [updateSuccess]);
|
|
150
150
|
|
|
151
|
+
// eslint-disable-next-line complexity
|
|
151
152
|
const saveEntity = values => {
|
|
152
|
-
<%_ for (field of fields
|
|
153
|
+
<%_ for (field of fields) {
|
|
153
154
|
const fieldName = field.fieldName;
|
|
154
155
|
_%>
|
|
155
156
|
<%_ if (field.fieldTypeTimed) { _%>
|
|
156
157
|
values.<%= fieldName %> = convertDateTimeToServer(values.<%= fieldName %>);
|
|
157
|
-
<%_ } _%>
|
|
158
|
+
<%_ } else if (field.fieldTypeNumeric) { _%>
|
|
159
|
+
if (values.<%= fieldName %> !== undefined && typeof values.<%= fieldName %> !== 'number') {
|
|
160
|
+
values.<%= fieldName %> = Number(values.<%= fieldName %>);
|
|
161
|
+
}
|
|
162
|
+
<%_ } _%>
|
|
158
163
|
<%_ } _%>
|
|
159
164
|
|
|
160
165
|
const entity = {
|
|
@@ -48,7 +48,7 @@ const initialState: EntityState<I<%= entityReactName %>> = {
|
|
|
48
48
|
|
|
49
49
|
const apiUrl = '<%= entityApi %>api/<%= entityApiUrl %>';
|
|
50
50
|
<%_ if (searchEngineAny) { _%>
|
|
51
|
-
const apiSearchUrl = '<%= entityApi %>api
|
|
51
|
+
const apiSearchUrl = '<%= entityApi %>api/<%= entityApiUrl %>/_search';
|
|
52
52
|
<%_ } _%>
|
|
53
53
|
|
|
54
54
|
// Actions
|
|
@@ -491,7 +491,7 @@ _%>
|
|
|
491
491
|
<Button tag={Link} to={`/<%= entityPage %>/${<%= entityInstance %>.<%= primaryKey.name %>}/edit<%_ if (paginationPagination) { _%>?page=${paginationState.activePage}&sort=${paginationState.sort},${paginationState.order}<%_ } _%>`} color="primary" size="sm" data-cy="entityEditButton">
|
|
492
492
|
<FontAwesomeIcon icon="pencil-alt" /> <span className="d-none d-md-inline"><Translate contentKey="entity.action.edit">Edit</Translate></span>
|
|
493
493
|
</Button>
|
|
494
|
-
<Button
|
|
494
|
+
<Button onClick={() => location.href=`/<%= entityPage %>/${<%= entityInstance %>.<%= primaryKey.name %>}/delete<%_ if (paginationPagination) { _%>?page=${paginationState.activePage}&sort=${paginationState.sort},${paginationState.order}<%_ } _%>`} color="danger" size="sm" data-cy="entityDeleteButton">
|
|
495
495
|
<FontAwesomeIcon icon="trash" /> <span className="d-none d-md-inline"><Translate contentKey="entity.action.delete">Delete</Translate></span>
|
|
496
496
|
</Button>
|
|
497
497
|
<%_ } _%>
|
|
@@ -50,7 +50,7 @@ export const Home = () => {
|
|
|
50
50
|
<span className="hipster rounded" />
|
|
51
51
|
</Col>
|
|
52
52
|
<Col md="9">
|
|
53
|
-
<
|
|
53
|
+
<h1 className="display-4"><Translate contentKey="home.title">Welcome, <%= backendType %> Hipster!</Translate></h1>
|
|
54
54
|
<p className="lead"><Translate contentKey="home.subtitle">This is your homepage</Translate></p>
|
|
55
55
|
{
|
|
56
56
|
(account?.login) ? (
|
|
@@ -19,6 +19,9 @@
|
|
|
19
19
|
import React<% if (applicationTypeGateway && microfrontend) { %>, { Suspense }<% } %> from 'react';
|
|
20
20
|
import { Route <% if (communicationSpringWebsocket) { %>, useLocation <% } %>} from 'react-router-dom';
|
|
21
21
|
import Loadable from 'react-loadable';
|
|
22
|
+
<%_ if (applicationTypeGateway && microfrontend) { _%>
|
|
23
|
+
import { importRemote } from '@module-federation/utilities';
|
|
24
|
+
<%_ } _%>
|
|
22
25
|
|
|
23
26
|
<%_ if (!authenticationTypeOauth2) { _%>
|
|
24
27
|
import Login from 'app/modules/login/login';
|
|
@@ -59,10 +62,14 @@ const Admin = Loadable({
|
|
|
59
62
|
<%_ if (applicationTypeGateway && microfrontend) { _%>
|
|
60
63
|
|
|
61
64
|
<%_ for (const remote of microfrontends) { _%>
|
|
62
|
-
const <%= remote.capitalizedBaseName %>Routes = React.lazy(() =>
|
|
65
|
+
const <%= remote.capitalizedBaseName %>Routes = React.lazy(() => importRemote<any>({
|
|
66
|
+
url: `./services/<%= remote.lowercaseBaseName %>`,
|
|
67
|
+
scope: '<%= remote.lowercaseBaseName %>',
|
|
68
|
+
module: './entities-routes',
|
|
69
|
+
}).catch(() => import('app/shared/error/error-loading')));
|
|
70
|
+
|
|
63
71
|
<%_ } _%>
|
|
64
72
|
<%_ } _%>
|
|
65
|
-
|
|
66
73
|
const AppRoutes = () => {
|
|
67
74
|
<%_ if (communicationSpringWebsocket) { _%>
|
|
68
75
|
const pageLocation = useLocation();
|
|
@@ -36,7 +36,7 @@ export const Brand = () => (
|
|
|
36
36
|
<NavbarBrand tag={Link} to="/" className="brand-logo">
|
|
37
37
|
<BrandIcon />
|
|
38
38
|
<span className="brand-title"><Translate contentKey="global.title"><%= capitalizedBaseName %></Translate></span>
|
|
39
|
-
<span className="navbar-version">{VERSION}</span>
|
|
39
|
+
<span className="navbar-version">{VERSION.toLowerCase().startsWith('v') ? VERSION : `v${VERSION}`}</span>
|
|
40
40
|
</NavbarBrand>
|
|
41
41
|
);
|
|
42
42
|
|
package/dist/generators/react/templates/src/main/webapp/app/shared/layout/header/header.scss.ejs
CHANGED
|
@@ -33,7 +33,7 @@ Developement Ribbon
|
|
|
33
33
|
transform: rotate(-45deg);
|
|
34
34
|
overflow: hidden;
|
|
35
35
|
position: absolute;
|
|
36
|
-
top:
|
|
36
|
+
top: 40px;
|
|
37
37
|
white-space: nowrap;
|
|
38
38
|
width: 15em;
|
|
39
39
|
z-index: 99999;
|
|
@@ -105,7 +105,7 @@ Navbar styles
|
|
|
105
105
|
}
|
|
106
106
|
|
|
107
107
|
.navbar-version {
|
|
108
|
-
font-size:
|
|
108
|
+
font-size: 0.65em;
|
|
109
109
|
color: $header-color-secondary;
|
|
110
110
|
padding: 0 0 0 10px;
|
|
111
111
|
}
|
|
@@ -119,13 +119,14 @@ Navbar styles
|
|
|
119
119
|
width: auto;
|
|
120
120
|
display: inline-block;
|
|
121
121
|
img {
|
|
122
|
-
|
|
122
|
+
width: 45px;
|
|
123
123
|
}
|
|
124
124
|
}
|
|
125
125
|
}
|
|
126
126
|
|
|
127
127
|
.brand-title {
|
|
128
|
-
font-size:
|
|
128
|
+
font-size: 1.25rem;
|
|
129
|
+
margin-left: .25rem;
|
|
129
130
|
color: $header-color;
|
|
130
131
|
&:hover {
|
|
131
132
|
color: $header-color-hover;
|
package/dist/generators/react/templates/src/main/webapp/app/shared/layout/menus/entities.tsx.ejs
CHANGED
|
@@ -19,12 +19,21 @@
|
|
|
19
19
|
import React<% if (microfrontend) { %>, { Suspense }<% } %> from 'react';
|
|
20
20
|
import { translate } from 'react-jhipster';
|
|
21
21
|
import { NavDropdown } from './menu-components';
|
|
22
|
+
<%_ if (applicationTypeGateway && microfrontend) { _%>
|
|
23
|
+
import { importRemote } from '@module-federation/utilities';
|
|
24
|
+
<%_ } _%>
|
|
22
25
|
<%_ if (microfrontend) { _%>
|
|
23
26
|
|
|
24
27
|
const EntitiesMenuItems = React.lazy(() => import('app/entities/menu').catch(() => import('app/shared/error/error-loading')));
|
|
28
|
+
|
|
25
29
|
<%_ if (applicationTypeGateway) { _%>
|
|
26
30
|
<%_ for (const remote of microfrontends) { _%>
|
|
27
|
-
const <%= remote.capitalizedBaseName %>EntitiesMenuItems = React.lazy(
|
|
31
|
+
const <%= remote.capitalizedBaseName %>EntitiesMenuItems = React.lazy(async () => importRemote<any>({
|
|
32
|
+
url: `./services/<%= remote.lowercaseBaseName %>`,
|
|
33
|
+
scope: '<%= remote.lowercaseBaseName %>',
|
|
34
|
+
module: './entities-menu',
|
|
35
|
+
}).catch(() => import('app/shared/error/error-loading')));
|
|
36
|
+
|
|
28
37
|
<%_ } _%>
|
|
29
38
|
<%_ } _%>
|
|
30
39
|
<%_ } else { _%>
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
-%>
|
|
19
19
|
{
|
|
20
20
|
"extends": "./tsconfig",
|
|
21
|
-
"include": ["<%= this.relativeDir(clientRootDir, clientSrcDir) %>app", "<%= this.relativeDir(clientRootDir, clientSrcDir) %>
|
|
21
|
+
"include": ["<%= this.relativeDir(clientRootDir, clientSrcDir) %>app", "<%= this.relativeDir(clientRootDir, clientSrcDir) %>microfrontends"],
|
|
22
22
|
"exclude": [],
|
|
23
23
|
"compilerOptions": {
|
|
24
24
|
"paths": {
|