Skip to content

Commit c971410

Browse files
authored
feat(generators): factor utilsPackageVersion for JavaScript (#511)
1 parent d0b9625 commit c971410

File tree

16 files changed

+143
-72
lines changed

16 files changed

+143
-72
lines changed

config/clients.config.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
"javascript": {
1515
"folder": "clients/algoliasearch-client-javascript",
1616
"gitRepoId": "algoliasearch-client-javascript",
17+
"utilsPackageVersion": "0.2.0",
1718
"modelFolder": "model",
1819
"apiFolder": "src",
1920
"customGenerator": "algolia-javascript",

config/openapitools.json

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,7 @@
99
"npmName": "@experimental-api-clients-automation/client-search",
1010
"buildFile": "client-search",
1111
"packageVersion": "0.2.0",
12-
"packageName": "@experimental-api-clients-automation/client-search",
13-
"utilsPackageVersion": "0.2.0"
12+
"packageName": "@experimental-api-clients-automation/client-search"
1413
}
1514
},
1615
"javascript-algoliasearch-lite": {
@@ -20,8 +19,7 @@
2019
"npmName": "@experimental-api-clients-automation/algoliasearch-lite",
2120
"buildFile": "algoliasearch-lite",
2221
"packageVersion": "0.2.0",
23-
"packageName": "@experimental-api-clients-automation/algoliasearch-lite",
24-
"utilsPackageVersion": "0.2.0"
22+
"packageName": "@experimental-api-clients-automation/algoliasearch-lite"
2523
}
2624
},
2725
"javascript-recommend": {
@@ -31,8 +29,7 @@
3129
"npmName": "@experimental-api-clients-automation/recommend",
3230
"buildFile": "recommend",
3331
"packageVersion": "0.2.0",
34-
"packageName": "@experimental-api-clients-automation/recommend",
35-
"utilsPackageVersion": "0.2.0"
32+
"packageName": "@experimental-api-clients-automation/recommend"
3633
}
3734
},
3835
"javascript-personalization": {
@@ -42,7 +39,6 @@
4239
"buildFile": "client-personalization",
4340
"packageVersion": "0.2.0",
4441
"packageName": "@experimental-api-clients-automation/client-personalization",
45-
"utilsPackageVersion": "0.2.0",
4642
"hasRegionalHost": true
4743
}
4844
},
@@ -53,7 +49,6 @@
5349
"buildFile": "client-analytics",
5450
"packageVersion": "0.2.0",
5551
"packageName": "@experimental-api-clients-automation/client-analytics",
56-
"utilsPackageVersion": "0.2.0",
5752
"hasRegionalHost": true
5853
}
5954
},
@@ -64,7 +59,6 @@
6459
"buildFile": "client-insights",
6560
"packageVersion": "0.2.0",
6661
"packageName": "@experimental-api-clients-automation/client-insights",
67-
"utilsPackageVersion": "0.2.0",
6862
"hasRegionalHost": true
6963
}
7064
},
@@ -75,7 +69,6 @@
7569
"buildFile": "client-abtesting",
7670
"packageVersion": "0.2.0",
7771
"packageName": "@experimental-api-clients-automation/client-abtesting",
78-
"utilsPackageVersion": "0.2.0",
7972
"hasRegionalHost": true
8073
}
8174
},
@@ -86,7 +79,6 @@
8679
"buildFile": "client-query-suggestions",
8780
"packageVersion": "0.2.0",
8881
"packageName": "@experimental-api-clients-automation/client-query-suggestions",
89-
"utilsPackageVersion": "0.2.0",
9082
"hasRegionalHost": true
9183
}
9284
},
@@ -97,7 +89,6 @@
9789
"buildFile": "client-sources",
9890
"packageVersion": "0.2.0",
9991
"packageName": "@experimental-api-clients-automation/client-sources",
100-
"utilsPackageVersion": "0.2.0",
10192
"hasRegionalHost": true
10293
}
10394
},
@@ -109,7 +100,6 @@
109100
"buildFile": "client-predict",
110101
"packageVersion": "0.2.0",
111102
"packageName": "@experimental-api-clients-automation/client-predict",
112-
"utilsPackageVersion": "0.2.0",
113103
"hasRegionalHost": true
114104
}
115105
},

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public Map<String, Object> postProcessOperationsWithModels(
5252
);
5353
additionalProperties.put(
5454
"packageVersion",
55-
Utils.getPackageVersion("java")
55+
Utils.getClientConfigField("java", "packageVersion")
5656
);
5757
} catch (GenerationException e) {
5858
e.printStackTrace();

generators/src/main/java/com/algolia/codegen/AlgoliaJavascriptGenerator.java renamed to generators/src/main/java/com/algolia/codegen/AlgoliaJavaScriptGenerator.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import org.openapitools.codegen.SupportingFile;
1111
import org.openapitools.codegen.languages.TypeScriptNodeClientCodegen;
1212

13-
public class AlgoliaJavascriptGenerator extends TypeScriptNodeClientCodegen {
13+
public class AlgoliaJavaScriptGenerator extends TypeScriptNodeClientCodegen {
1414

1515
private String CLIENT;
1616

@@ -82,6 +82,10 @@ public Map<String, Object> postProcessOperationsWithModels(
8282
Utils.getClientNameKebabCase(results),
8383
additionalProperties
8484
);
85+
additionalProperties.put(
86+
"utilsPackageVersion",
87+
Utils.getClientConfigField("javascript", "utilsPackageVersion")
88+
);
8589
} catch (GenerationException e) {
8690
e.printStackTrace();
8791
System.exit(1);

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ public Map<String, Object> postProcessOperationsWithModels(
5757
Utils.generateServer(client, additionalProperties);
5858
additionalProperties.put(
5959
"packageVersion",
60-
Utils.getPackageVersion("php")
60+
Utils.getClientConfigField("php", "packageVersion")
6161
);
6262
} catch (GenerationException e) {
6363
e.printStackTrace();

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

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -153,20 +153,21 @@ public static void generateServer(
153153
}
154154
}
155155

156-
// Get the package version from clients.config.json (doesn't work for JavaScript)
157-
public static String getPackageVersion(String language)
156+
/** Get the `field` value in the `config/clients.config.json` file for the given language */
157+
public static String getClientConfigField(String language, String field)
158158
throws GenerationException {
159-
if (language.equals("javascript")) {
159+
if (language.equals("javascript") && field.equals("packageVersion")) {
160160
throw new GenerationException(
161-
"Cannot use getPackageVersion with language=\"javascript\", " +
162-
"read openapitools.json instead"
161+
"Cannot read 'packageVersion' with language=\"javascript\", " +
162+
"read configs/openapitools.json instead"
163163
);
164164
}
165+
165166
try {
166167
JsonNode config = Json
167168
.mapper()
168169
.readTree(new File("config/clients.config.json"));
169-
return config.get(language).get("packageVersion").asText();
170+
return config.get(language).get(field).asText();
170171
} catch (IOException e) {
171172
throw new GenerationException(
172173
"Couldn't read packageVersion from clients.config.json",

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

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.algolia.codegen.cts.manager;
22

3+
import com.algolia.codegen.GenerationException;
34
import com.algolia.codegen.Utils;
45
import com.fasterxml.jackson.databind.JsonNode;
56
import java.util.*;
@@ -9,10 +10,16 @@ public abstract class CtsManager {
910

1011
public abstract void addSupportingFiles(List<SupportingFile> supportingFiles);
1112

12-
protected void addExtraToBundle(Map<String, Object> bundle) {}
13+
protected void addExtraToBundle(Map<String, Object> bundle)
14+
throws GenerationException {}
1315

1416
public void addDataToBundle(Map<String, Object> bundle) {
15-
this.addExtraToBundle(bundle);
17+
try {
18+
this.addExtraToBundle(bundle);
19+
} catch (GenerationException e) {
20+
e.printStackTrace();
21+
System.exit(1);
22+
}
1623
}
1724

1825
protected Object[] getFilteredPackageVersions(List<String> packages) {
Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.algolia.codegen.cts.manager;
22

3+
import com.algolia.codegen.GenerationException;
34
import com.algolia.codegen.Utils;
45
import java.util.*;
56
import org.openapitools.codegen.SupportingFile;
@@ -12,14 +13,11 @@ public void addSupportingFiles(List<SupportingFile> supportingFiles) {
1213
);
1314
}
1415

15-
protected void addExtraToBundle(Map<String, Object> bundle) {
16+
protected void addExtraToBundle(Map<String, Object> bundle)
17+
throws GenerationException {
1618
bundle.put(
1719
"packageVersion",
18-
Utils
19-
.readJsonFile("config/clients.config.json")
20-
.get("java")
21-
.get("packageVersion")
22-
.asText()
20+
Utils.getClientConfigField("java", "packageVersion")
2321
);
2422
}
2523
}

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

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.algolia.codegen.cts.manager;
22

3+
import com.algolia.codegen.GenerationException;
34
import com.algolia.codegen.Utils;
45
import com.fasterxml.jackson.databind.JsonNode;
56
import java.util.*;
@@ -44,24 +45,12 @@ private List<Object> getPackageDependencies() {
4445
return result;
4546
}
4647

47-
protected void addExtraToBundle(Map<String, Object> bundle) {
48+
protected void addExtraToBundle(Map<String, Object> bundle)
49+
throws GenerationException {
4850
bundle.put("packageDependencies", this.getPackageDependencies());
49-
bundle.put("utilsPackageVersion", this.getUtilsPackageVersion());
50-
}
51-
52-
private String getUtilsPackageVersion() {
53-
JsonNode openApiToolsConfig = Utils.readJsonFile(
54-
"config/openapitools.json"
51+
bundle.put(
52+
"utilsPackageVersion",
53+
Utils.getClientConfigField("javascript", "utilsPackageVersion")
5554
);
56-
57-
String utilsPackageVersion = openApiToolsConfig
58-
.get("generator-cli")
59-
.get("generators")
60-
.get("javascript-search")
61-
.get("additionalProperties")
62-
.get("utilsPackageVersion")
63-
.asText();
64-
65-
return utilsPackageVersion;
6655
}
6756
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
com.algolia.codegen.AlgoliaJavaGenerator
2-
com.algolia.codegen.AlgoliaJavascriptGenerator
2+
com.algolia.codegen.AlgoliaJavaScriptGenerator
33
com.algolia.codegen.AlgoliaPhpGenerator
44
com.algolia.codegen.cts.AlgoliaCtsGenerator

scripts/__tests__/common.test.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import execa from 'execa';
22

33
import { gitCommit } from '../common';
4+
import { getClientsConfigField } from '../config';
45

56
jest.mock('execa');
67

@@ -51,3 +52,27 @@ describe('gitCommit', () => {
5152
);
5253
});
5354
});
55+
56+
describe('config', () => {
57+
describe('getClientsConfigField', () => {
58+
it('throws if the field is not found', () => {
59+
expect(() => {
60+
getClientsConfigField('javascript', 'packageVersion');
61+
}).toThrowErrorMatchingInlineSnapshot(
62+
`"Unable to find 'packageVersion' for 'javascript'"`
63+
);
64+
65+
expect(() => {
66+
getClientsConfigField('java', 'utilsPackageVersion');
67+
}).toThrowErrorMatchingInlineSnapshot(
68+
`"Unable to find 'utilsPackageVersion' for 'java'"`
69+
);
70+
});
71+
72+
it('find the field if it exists', () => {
73+
expect(getClientsConfigField('java', ['tests', 'extension'])).toEqual(
74+
'.test.java'
75+
);
76+
});
77+
});
78+
});

scripts/ci/githubActions/setRunVariables.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ export const DEPENDENCIES = {
6060
...CLIENTS_COMMON_FILES,
6161
JS_CLIENT_FOLDER,
6262
'templates/javascript',
63-
'generators/src/main/java/com/algolia/codegen/AlgoliaJavascriptGenerator.java',
63+
'generators/src/main/java/com/algolia/codegen/AlgoliaJavaScriptGenerator.java',
6464
`:!${JS_CLIENT_FOLDER}/.github`,
6565
`:!${JS_CLIENT_FOLDER}/README.md`,
6666
'tests/CTS/methods/requests/templates/javascript',

scripts/config.ts

Lines changed: 28 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,58 @@
11
import clientsConfig from '../config/clients.config.json';
22
import openapiConfig from '../config/openapitools.json';
33

4-
import type { Language } from './types';
4+
import type { Language, LanguageConfig } from './types';
5+
6+
export function getClientsConfigField(
7+
language: Language,
8+
pathToField: string[] | string
9+
): any {
10+
const config: LanguageConfig = clientsConfig[language];
11+
const path = Array.isArray(pathToField) ? pathToField : [pathToField];
12+
13+
return path.reduce((current, key) => {
14+
if (!current || !current[key]) {
15+
throw new Error(`Unable to find '${pathToField}' for '${language}'`);
16+
}
17+
18+
return current[key];
19+
}, config);
20+
}
521

622
export function getLanguageFolder(language: Language): string {
7-
return clientsConfig[language].folder;
23+
return getClientsConfigField(language, 'folder');
824
}
925

1026
export function getLanguageApiFolder(language: Language): string {
11-
return clientsConfig[language].apiFolder;
27+
return getClientsConfigField(language, 'apiFolder');
1228
}
1329

1430
export function getLanguageModelFolder(language: Language): string {
15-
return clientsConfig[language].modelFolder;
31+
return getClientsConfigField(language, 'modelFolder');
1632
}
1733

1834
export function getTestExtension(language: Language): string {
19-
return clientsConfig[language].tests.extension;
35+
return getClientsConfigField(language, ['tests', 'extension']);
2036
}
2137

2238
export function getTestOutputFolder(language: Language): string {
23-
return clientsConfig[language].tests.outputFolder;
39+
return getClientsConfigField(language, ['tests', 'outputFolder']);
2440
}
2541

2642
export function getCustomGenerator(language: Language): string {
27-
return clientsConfig[language].customGenerator;
43+
return getClientsConfigField(language, 'customGenerator');
2844
}
2945

30-
// Returns the version of the package from clients.config.json, except for JavaScript where it returns the version of javascript-search
46+
/**
47+
* Returns the version of the package from clients.config.json, except for JavaScript where it returns the version of javascript-search.
48+
*/
3149
export function getPackageVersionDefault(language: Language): string {
3250
if (language === 'javascript') {
3351
return openapiConfig['generator-cli'].generators['javascript-search']
3452
.additionalProperties.packageVersion;
3553
}
36-
return clientsConfig[language].packageVersion;
54+
55+
return getClientsConfigField(language, 'packageVersion');
3756
}
3857

3958
export function getGitHubUrl(

0 commit comments

Comments
 (0)