diff --git a/generators/src/main/java/com/algolia/codegen/cts/AlgoliaCtsGenerator.java b/generators/src/main/java/com/algolia/codegen/cts/AlgoliaCtsGenerator.java index 214fd2a89a..8f749277f3 100644 --- a/generators/src/main/java/com/algolia/codegen/cts/AlgoliaCtsGenerator.java +++ b/generators/src/main/java/com/algolia/codegen/cts/AlgoliaCtsGenerator.java @@ -1,6 +1,8 @@ package com.algolia.codegen.cts; import com.algolia.codegen.Utils; +import com.algolia.codegen.cts.CtsManager; +import com.algolia.codegen.cts.CtsManagerFactory; import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonMappingException; @@ -23,6 +25,7 @@ public class AlgoliaCtsGenerator extends DefaultCodegen { private String language; private String client; private String packageName; + private CtsManager ctsManager; /** * Configures the type of generator. @@ -64,6 +67,7 @@ public void processOpts() { language = (String) additionalProperties.get("language"); client = (String) additionalProperties.get("client"); packageName = (String) additionalProperties.get("packageName"); + ctsManager = CtsManagerFactory.getManager(language); JsonNode config = Utils.readJsonFile("config/clients.config.json"); TestConfig testConfig = null; @@ -90,11 +94,7 @@ public void processOpts() { ) ); - if (language.equals("javascript")) { - supportingFiles.add( - new SupportingFile("package.mustache", ".", "package.json") - ); - } + ctsManager.addSupportingFiles(supportingFiles); } @Override @@ -143,28 +143,6 @@ private Map getPackageVersionMap() { return packageVersionMap; } - private String getJavaScriptUtilsPackageVersion() { - JsonNode openApiToolsConfig = Utils.readJsonFile( - "config/openapitools.json" - ); - JsonNode clientsConfig = Utils.readJsonFile("config/clients.config.json"); - - String mainPackage = clientsConfig - .get("javascript") - .get("mainPackage") - .asText(); - - String utilsPackageVersion = openApiToolsConfig - .get("generator-cli") - .get("generators") - .get(mainPackage) - .get("additionalProperties") - .get("utilsPackageVersion") - .asText(); - - return utilsPackageVersion; - } - @Override public Map postProcessSupportingFileData( Map objs @@ -198,13 +176,8 @@ public Map postProcessSupportingFileData( bundle.put("hasRegionalHost", hasRegionalHost); bundle.put("defaultRegion", client.equals("predict") ? "ew" : "us"); bundle.put("lambda", lambda); - bundle.put("packageVersionMap", this.getPackageVersionMap()); - if (language.equals("javascript")) { - bundle.put( - "utilsPackageVersion", - this.getJavaScriptUtilsPackageVersion() - ); - } + bundle.put("packageDependencies", ctsManager.getPackageDependencies()); + ctsManager.addExtraToBundle(bundle); List blocks = new ArrayList<>(); ParametersWithDataType paramsType = new ParametersWithDataType( diff --git a/generators/src/main/java/com/algolia/codegen/cts/CtsManager.java b/generators/src/main/java/com/algolia/codegen/cts/CtsManager.java new file mode 100644 index 0000000000..1411cd0707 --- /dev/null +++ b/generators/src/main/java/com/algolia/codegen/cts/CtsManager.java @@ -0,0 +1,42 @@ +package com.algolia.codegen.cts; + +import com.algolia.codegen.Utils; +import com.fasterxml.jackson.databind.JsonNode; +import java.util.*; +import org.openapitools.codegen.SupportingFile; + +abstract class CtsManager { + + public abstract void addSupportingFiles(List supportingFiles); + + public abstract String getPackageDependencies(); + + public void addExtraToBundle(Map bundle) {} + + protected Map getFilteredPackageVersionMap( + List packages + ) { + HashMap result = new HashMap<>(); + JsonNode openApiToolsConfig = Utils.readJsonFile( + "config/openapitools.json" + ); + + Iterator generatorIterator = openApiToolsConfig + .get("generator-cli") + .get("generators") + .elements(); + while (generatorIterator.hasNext()) { + JsonNode generator = generatorIterator.next(); + JsonNode additionalProperties = generator.get("additionalProperties"); + String packageName = additionalProperties.get("packageName").asText(); + String packageVersion = additionalProperties + .get("packageVersion") + .asText(); + if (packages.contains(packageName)) { + result.put(packageName, packageVersion); + } + } + + return result; + } +} diff --git a/generators/src/main/java/com/algolia/codegen/cts/CtsManagerFactory.java b/generators/src/main/java/com/algolia/codegen/cts/CtsManagerFactory.java new file mode 100644 index 0000000000..d0818c54f0 --- /dev/null +++ b/generators/src/main/java/com/algolia/codegen/cts/CtsManagerFactory.java @@ -0,0 +1,108 @@ +package com.algolia.codegen.cts; + +import com.algolia.codegen.Utils; +import com.algolia.codegen.cts.CtsManager; +import com.fasterxml.jackson.databind.JsonNode; +import java.util.*; +import org.openapitools.codegen.SupportingFile; + +public class CtsManagerFactory { + + public static CtsManager getManager(String language) { + if (language == null) { + return null; + } + switch (language) { + case "javascript": + return new JavaScriptCtsManager(); + case "java": + return new JavaCtsManager(); + case "php": + return new PhpCtsManager(); + } + return null; + } + + public static class JavaScriptCtsManager extends CtsManager { + + public void addSupportingFiles(List supportingFiles) { + supportingFiles.add( + new SupportingFile("package.mustache", ".", "package.json") + ); + } + + public String getPackageDependencies() { + return String.join( + ",\n", + this.getFilteredPackageVersionMap( + List.of( + "@experimental-api-clients-automation/algoliasearch-lite", + "@experimental-api-clients-automation/client-abtesting", + "@experimental-api-clients-automation/client-analytics", + "@experimental-api-clients-automation/client-common", + "@experimental-api-clients-automation/client-insights", + "@experimental-api-clients-automation/client-personalization", + "@experimental-api-clients-automation/client-predict", + "@experimental-api-clients-automation/client-query-suggestions", + "@experimental-api-clients-automation/client-search", + "@experimental-api-clients-automation/client-sources", + "@experimental-api-clients-automation/recommend", + "@experimental-api-clients-automation/requester-node-http" + ) + ) + .entrySet() + .stream() + .map(entry -> { + return ( + " \"" + entry.getKey() + "\": \"" + entry.getValue() + "\"" + ); + }) + .toArray(String[]::new) + ); + } + + public void addExtraToBundle(Map bundle) { + bundle.put("utilsPackageVersion", this.getUtilsPackageVersion()); + } + + private String getUtilsPackageVersion() { + JsonNode openApiToolsConfig = Utils.readJsonFile( + "config/openapitools.json" + ); + JsonNode clientsConfig = Utils.readJsonFile("config/clients.config.json"); + + String mainPackage = clientsConfig + .get("javascript") + .get("mainPackage") + .asText(); + + String utilsPackageVersion = openApiToolsConfig + .get("generator-cli") + .get("generators") + .get(mainPackage) + .get("additionalProperties") + .get("utilsPackageVersion") + .asText(); + + return utilsPackageVersion; + } + } + + public static class JavaCtsManager extends CtsManager { + + public void addSupportingFiles(List supportingFiles) {} + + public String getPackageDependencies() { + return null; + } + } + + public static class PhpCtsManager extends CtsManager { + + public void addSupportingFiles(List supportingFiles) {} + + public String getPackageDependencies() { + return null; + } + } +} diff --git a/tests/CTS/methods/requests/templates/javascript/package.mustache b/tests/CTS/methods/requests/templates/javascript/package.mustache index c482f8da31..2a63380e25 100644 --- a/tests/CTS/methods/requests/templates/javascript/package.mustache +++ b/tests/CTS/methods/requests/templates/javascript/package.mustache @@ -5,20 +5,9 @@ "test": "jest" }, "dependencies": { - {{#packageVersionMap}} - "@experimental-api-clients-automation/algoliasearch-lite": "{{@experimental-api-clients-automation/algoliasearch-lite}}", - "@experimental-api-clients-automation/client-abtesting": "{{@experimental-api-clients-automation/client-abtesting}}", - "@experimental-api-clients-automation/client-analytics": "{{@experimental-api-clients-automation/client-analytics}}", +{{{packageDependencies}}}, "@experimental-api-clients-automation/client-common": "{{utilsPackageVersion}}", - "@experimental-api-clients-automation/client-insights": "{{@experimental-api-clients-automation/client-insights}}", - "@experimental-api-clients-automation/client-personalization": "{{@experimental-api-clients-automation/client-personalization}}", - "@experimental-api-clients-automation/client-predict": "{{@experimental-api-clients-automation/client-predict}}", - "@experimental-api-clients-automation/client-query-suggestions": "{{@experimental-api-clients-automation/client-query-suggestions}}", - "@experimental-api-clients-automation/client-search": "{{@experimental-api-clients-automation/client-search}}", - "@experimental-api-clients-automation/client-sources": "{{@experimental-api-clients-automation/client-sources}}", - "@experimental-api-clients-automation/recommend": "{{@experimental-api-clients-automation/recommend}}", "@experimental-api-clients-automation/requester-node-http": "{{utilsPackageVersion}}" - {{/packageVersionMap}} }, "devDependencies": { "@types/jest": "27.4.1", diff --git a/tests/output/javascript/package.json b/tests/output/javascript/package.json index 5fe8ba3e22..2fed954231 100644 --- a/tests/output/javascript/package.json +++ b/tests/output/javascript/package.json @@ -5,17 +5,17 @@ "test": "jest" }, "dependencies": { + "@experimental-api-clients-automation/client-insights": "0.2.0", + "@experimental-api-clients-automation/recommend": "0.2.0", + "@experimental-api-clients-automation/client-search": "0.2.0", "@experimental-api-clients-automation/algoliasearch-lite": "0.2.0", + "@experimental-api-clients-automation/client-sources": "0.2.0", + "@experimental-api-clients-automation/client-personalization": "0.2.0", "@experimental-api-clients-automation/client-abtesting": "0.2.0", "@experimental-api-clients-automation/client-analytics": "0.2.0", - "@experimental-api-clients-automation/client-common": "0.2.0", - "@experimental-api-clients-automation/client-insights": "0.2.0", - "@experimental-api-clients-automation/client-personalization": "0.2.0", "@experimental-api-clients-automation/client-predict": "0.2.0", "@experimental-api-clients-automation/client-query-suggestions": "0.2.0", - "@experimental-api-clients-automation/client-search": "0.2.0", - "@experimental-api-clients-automation/client-sources": "0.2.0", - "@experimental-api-clients-automation/recommend": "0.2.0", + "@experimental-api-clients-automation/client-common": "0.2.0", "@experimental-api-clients-automation/requester-node-http": "0.2.0" }, "devDependencies": {