From f78cb10c1c348b838444b13e080434e167b7204a Mon Sep 17 00:00:00 2001 From: Renan Meneses de Andrade Franca Date: Wed, 8 May 2024 13:53:31 -0300 Subject: [PATCH] respect the immutability of JHipsterModulePackageJson --- .../module/domain/JHipsterModulesApplyer.java | 7 ++- .../JHipsterModulePackageJson.java | 57 ++++++++++++++++--- 2 files changed, 52 insertions(+), 12 deletions(-) diff --git a/src/main/java/tech/jhipster/lite/module/domain/JHipsterModulesApplyer.java b/src/main/java/tech/jhipster/lite/module/domain/JHipsterModulesApplyer.java index 292e4d4b2da..03aaf402135 100644 --- a/src/main/java/tech/jhipster/lite/module/domain/JHipsterModulesApplyer.java +++ b/src/main/java/tech/jhipster/lite/module/domain/JHipsterModulesApplyer.java @@ -19,6 +19,7 @@ import tech.jhipster.lite.module.domain.javadependency.JavaDependenciesVersionsRepository; import tech.jhipster.lite.module.domain.javadependency.ProjectJavaDependenciesRepository; import tech.jhipster.lite.module.domain.packagejson.JHipsterModulePackageJson; +import tech.jhipster.lite.module.domain.properties.JHipsterModuleProperties; import tech.jhipster.lite.module.domain.properties.JHipsterProjectFolder; import tech.jhipster.lite.module.domain.replacement.ContentReplacer; import tech.jhipster.lite.module.domain.replacement.ContentReplacers; @@ -84,7 +85,7 @@ public JHipsterModuleApplied apply(JHipsterModuleToApply moduleToApply) { .merge(buildGradlePluginsChanges(module)) .merge(buildGradleConfigurationsChanges(module)) ) - .packageJson(buildPackageJson(module)) + .packageJson(buildPackageJsonChanges(module, moduleToApply.properties())) .preActions(module.preActions()) .postActions(module.postActions()) .springFactories(module.springFactories()); @@ -111,12 +112,12 @@ private Optional detectedJavaBuildTool(JHipsterModule module) { return javaBuildTools.detect(module.projectFolder()).or(() -> javaBuildTools.detect(module.files())); } - private JHipsterModulePackageJson buildPackageJson(JHipsterModule module) { + private JHipsterModulePackageJson buildPackageJsonChanges(JHipsterModule module, JHipsterModuleProperties properties) { JHipsterModuleContext context = detectedJavaBuildTool(module) .map(javaBuildTool -> module.context().withJavaBuildTool(javaBuildTool)) .orElse(module.context()); - return module.packageJson().withContext(context); + return module.packageJson().buildChanges(context, properties); } private JHipsterTemplatedFiles buildTemplatedFiles(JHipsterModule module) { diff --git a/src/main/java/tech/jhipster/lite/module/domain/packagejson/JHipsterModulePackageJson.java b/src/main/java/tech/jhipster/lite/module/domain/packagejson/JHipsterModulePackageJson.java index 7c5fa9a90f6..6bd83bf663e 100644 --- a/src/main/java/tech/jhipster/lite/module/domain/packagejson/JHipsterModulePackageJson.java +++ b/src/main/java/tech/jhipster/lite/module/domain/packagejson/JHipsterModulePackageJson.java @@ -1,10 +1,12 @@ package tech.jhipster.lite.module.domain.packagejson; +import static tech.jhipster.lite.module.domain.JHipsterModule.*; + import java.util.ArrayList; import java.util.Collection; import java.util.Optional; -import tech.jhipster.lite.module.domain.JHipsterModule.JHipsterModuleBuilder; import tech.jhipster.lite.module.domain.JHipsterModuleContext; +import tech.jhipster.lite.module.domain.properties.JHipsterModuleProperties; import tech.jhipster.lite.shared.error.domain.Assert; public final class JHipsterModulePackageJson { @@ -15,7 +17,7 @@ public final class JHipsterModulePackageJson { private final PackageJsonDependencies devDependencies; private final PackageJsonDependencies devDependenciesToRemove; private final PackageJsonType type; - private Optional context; + private final Optional context; private JHipsterModulePackageJson(JHipsterModulePackageJsonBuilder builder) { scripts = new Scripts(builder.scripts); @@ -24,13 +26,49 @@ private JHipsterModulePackageJson(JHipsterModulePackageJsonBuilder builder) { devDependencies = new PackageJsonDependencies(builder.devDependencies); devDependenciesToRemove = new PackageJsonDependencies(builder.devDependenciesToRemove); type = new PackageJsonType(builder.type); - context = Optional.empty(); + context = Optional.ofNullable(builder.context); } public static JHipsterModulePackageJsonBuilder builder(JHipsterModuleBuilder module) { return new JHipsterModulePackageJsonBuilder(module); } + public JHipsterModulePackageJson buildChanges(JHipsterModuleContext context, JHipsterModuleProperties properties) { + JHipsterModulePackageJsonBuilder builder = JHipsterModulePackageJson.builder(moduleBuilder(properties)) + .addType(type.type()) + .addContext(context); + + scripts.stream().forEach(script -> builder.addScript(script.key(), script.command())); + dependencies + .stream() + .forEach( + dependency -> + dependency + .versionPackageName() + .ifPresentOrElse( + versionPackageName -> builder.addDependency(dependency.packageName(), dependency.versionSource(), versionPackageName), + () -> builder.addDependency(dependency.packageName(), dependency.versionSource()) + ) + ); + dependenciesToRemove.stream().forEach(dependency -> builder.removeDependency(dependency.packageName(), dependency.versionSource())); + devDependencies + .stream() + .forEach( + dependency -> + dependency + .versionPackageName() + .ifPresentOrElse( + versionPackageName -> builder.addDevDependency(dependency.packageName(), dependency.versionSource(), versionPackageName), + () -> builder.addDevDependency(dependency.packageName(), dependency.versionSource()) + ) + ); + devDependenciesToRemove + .stream() + .forEach(dependency -> builder.removeDevDependency(dependency.packageName(), dependency.versionSource())); + + return builder.build(); + } + public boolean isEmpty() { return ( scripts.isEmpty() && @@ -69,12 +107,6 @@ public Optional context() { return context; } - public JHipsterModulePackageJson withContext(JHipsterModuleContext context) { - this.context = Optional.ofNullable(context); - - return this; - } - public static final class JHipsterModulePackageJsonBuilder { private final JHipsterModuleBuilder module; @@ -84,6 +116,7 @@ public static final class JHipsterModulePackageJsonBuilder { private final Collection dependenciesToRemove = new ArrayList<>(); private final Collection devDependenciesToRemove = new ArrayList<>(); private String type; + private JHipsterModuleContext context; private JHipsterModulePackageJsonBuilder(JHipsterModuleBuilder module) { Assert.notNull("module", module); @@ -149,6 +182,12 @@ public JHipsterModulePackageJsonBuilder addType(String t) { return this; } + public JHipsterModulePackageJsonBuilder addContext(JHipsterModuleContext context) { + this.context = context; + + return this; + } + public JHipsterModuleBuilder and() { return module; }