Skip to content

Commit ec5ed86

Browse files
authored
chore: reduce manual intervention on javascript clients (#4659)
1 parent 6fbf899 commit ec5ed86

File tree

5 files changed

+36
-30
lines changed

5 files changed

+36
-30
lines changed

config/clients.config.json

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,8 @@
144144
},
145145
{
146146
"name": "composition",
147-
"output": "clients/algoliasearch-client-javascript/packages/composition"
147+
"output": "clients/algoliasearch-client-javascript/packages/composition",
148+
"isStandaloneClient": true
148149
},
149150
{
150151
"name": "ingestion",
@@ -176,7 +177,9 @@
176177
},
177178
{
178179
"name": "composition-full",
179-
"output": "clients/algoliasearch-client-javascript/packages/client-composition"
180+
"output": "clients/algoliasearch-client-javascript/packages/client-composition",
181+
"isStandaloneClient": true,
182+
"clientName": "composition"
180183
}
181184
],
182185
"folder": "clients/algoliasearch-client-javascript",

config/clients.schema.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,9 @@
4646
"search"
4747
]
4848
},
49-
"output": { "type": "string" }
49+
"output": { "type": "string" },
50+
"isStandaloneClient": { "type": "boolean", "description": "this property only matters for the javascript client, when `true`, your package will be built as a standalone client and not be part of `algoliasearch` directly. This is recommended for non stable APIs." },
51+
"clientName": { "type": "string", "description": "when defined, the name of the generated instance of the client will be hardcoded, otherwise it defaults to the `spec` name, e.g. search -> searchClient" }
5052
},
5153
"required": ["name", "output"],
5254
"additionalProperties": false

generators/src/main/java/com/algolia/codegen/AlgoliaJavascriptGenerator.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ private void setDefaultGeneratorOptions() {
174174

175175
String version = Helpers.getPackageJsonVersion(name);
176176

177-
if (version.contains("alpha") || version.contains("beta")) {
177+
if (version.contains("alpha") || version.contains("beta") || (boolean) pkg.getOrDefault("isStandaloneClient", false) == true) {
178178
continue;
179179
}
180180

@@ -193,9 +193,8 @@ private void setDefaultGeneratorOptions() {
193193
additionalProperties.put("dependencies", dependencies);
194194

195195
// Files used to generate the `lite` client
196-
clientName = "lite" + Helpers.API_SUFFIX;
197196
additionalProperties.put("apiName", "search");
198-
additionalProperties.put("clientName", clientName);
197+
additionalProperties.put("clientName", "lite" + Helpers.API_SUFFIX);
199198
additionalProperties.put("algoliaAgent", "Lite");
200199
}
201200
}

generators/src/main/java/com/algolia/codegen/cts/AlgoliaCTSGenerator.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,6 @@ public Map<String, Object> postProcessSupportingFileData(Map<String, Object> obj
145145
// We can put whatever we want in the bundle, and it will be accessible in the template
146146
bundle.put("mode", mode);
147147
bundle.put("is" + Helpers.capitalize(Helpers.camelize(client)) + "Client", true);
148-
bundle.put("isStandaloneClient", client.contains("search") || client.contains("composition") || client.contains("realtime"));
149148
bundle.put("isSearchClient", client.contains("search")); // just so algoliasearch is treated as a search client too
150149
bundle.put("client", Helpers.createClientName(importClientName, language) + "Client");
151150
bundle.put("clientPrefix", Helpers.createClientName(importClientName, language));

generators/src/main/java/com/algolia/codegen/cts/manager/JavascriptCTSManager.java

Lines changed: 26 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.algolia.codegen.AlgoliaJavascriptGenerator;
44
import com.algolia.codegen.exceptions.GeneratorException;
55
import com.algolia.codegen.utils.*;
6+
import com.fasterxml.jackson.databind.*;
67
import java.util.*;
78
import org.openapitools.codegen.SupportingFile;
89

@@ -43,30 +44,32 @@ public void addSnippetsSupportingFiles(List<SupportingFile> supportingFiles, Str
4344

4445
@Override
4546
public void addDataToBundle(Map<String, Object> bundle) throws GeneratorException {
46-
bundle.put("utilsPackageVersion", Helpers.getPackageJsonVersion("client-common"));
47-
bundle.put("algoliasearchVersion", Helpers.getPackageJsonVersion("algoliasearch"));
48-
bundle.put("initMethod", "init" + Helpers.capitalize(Helpers.camelize(client)));
47+
Optional<Map<String, Object>> clientPkg = Helpers.getClientConfigList("javascript", "clients")
48+
.stream()
49+
.filter(pkg -> ((String) pkg.get("name")).contains(client))
50+
.findFirst();
51+
if (!clientPkg.isPresent()) {
52+
throw new GeneratorException("Cannot find client " + client + " in config/clients.config.json for javascript");
53+
}
54+
55+
boolean isStandaloneClient = (boolean) clientPkg.get().getOrDefault("isStandaloneClient", false);
56+
bundle.put("isStandaloneClient", isStandaloneClient || client.contains("search"));
4957

50-
switch (client) {
51-
case "composition":
52-
bundle.put("clientName", "compositionClient");
53-
bundle.put("importPackage", "@algolia/composition");
54-
break;
55-
case "composition-full":
56-
bundle.put("clientName", "compositionClient");
57-
bundle.put("importPackage", "@algolia/client-composition");
58-
break;
59-
case "realtime-personalization":
60-
bundle.put("clientName", "realtimePersonalizationClient");
61-
bundle.put("importPackage", "@algolia/client-realtime-personalization");
62-
break;
63-
case "algoliasearch":
64-
bundle.put("clientName", "liteClient");
65-
bundle.put("importPackage", "algoliasearch/lite");
66-
break;
67-
default:
68-
bundle.put("clientName", "algoliasearch");
69-
bundle.put("importPackage", "algoliasearch");
58+
if (client.equals("algoliasearch")) {
59+
bundle.put("clientName", "liteClient");
60+
bundle.put("importPackage", "algoliasearch/lite");
61+
} else if (isStandaloneClient) {
62+
bundle.put("clientName", (String) clientPkg.get().getOrDefault("clientName", Helpers.camelize(client)) + Helpers.API_SUFFIX);
63+
64+
JsonNode packageJson = Helpers.readJsonFile(clientPkg.get().get("output") + "/package.json");
65+
bundle.put("importPackage", packageJson.get("name").asText());
66+
} else {
67+
bundle.put("initMethod", "init" + Helpers.capitalize(Helpers.camelize(client)));
68+
bundle.put("clientName", "algoliasearch");
69+
bundle.put("importPackage", "algoliasearch");
7070
}
71+
72+
bundle.put("utilsPackageVersion", Helpers.getPackageJsonVersion("client-common"));
73+
bundle.put("algoliasearchVersion", Helpers.getPackageJsonVersion("algoliasearch"));
7174
}
7275
}

0 commit comments

Comments
 (0)