Skip to content

Commit 21d09d3

Browse files
authored
feat(javascript): add every APIs (#3942)
1 parent 542b24e commit 21d09d3

File tree

15 files changed

+142
-120
lines changed

15 files changed

+142
-120
lines changed

.eslintignore

+1
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,4 @@ composer.json
66
tsconfig.json
77
vendor
88
builddir
9+
foo

.github/workflows/check.yml

+5-5
Original file line numberDiff line numberDiff line change
@@ -199,10 +199,10 @@ jobs:
199199
type: specs
200200

201201
- name: Remove generated clients
202-
if: ${{ startsWith(env.head_ref, 'chore/prepare-release-') }}
202+
if: ${{ startsWith(github.head_ref, 'chore/prepare-release-') }}
203203
run: |
204204
cd clients/algoliasearch-client-javascript/packages
205-
ls | grep -v -E "(client-common|requester-*|algoliasearch)" | xargs rm -rf
205+
ls | grep -v -E "(logger-console|client-common|requester-*|algoliasearch)" | xargs rm -rf
206206
cd algoliasearch
207207
ls | grep -v -E "__tests__" | xargs rm -rf
208208
@@ -228,11 +228,11 @@ jobs:
228228
run: cd clients/algoliasearch-client-javascript && yarn test ${{ !contains(fromJSON(needs.setup.outputs.JAVASCRIPT_DATA).toRun, 'algoliasearch') && '--ignore algoliasearch' || '' }}
229229

230230
- name: Test JavaScript bundle size
231-
if: ${{ startsWith(env.head_ref, 'chore/prepare-release-') }}
231+
if: ${{ startsWith(github.head_ref, 'chore/prepare-release-') }}
232232
run: cd clients/algoliasearch-client-javascript && yarn test:size
233233

234234
- name: Test JavaScript bundle and types
235-
if: ${{ startsWith(env.head_ref, 'chore/prepare-release-') }}
235+
if: ${{ startsWith(github.head_ref, 'chore/prepare-release-') }}
236236
run: cd clients/algoliasearch-client-javascript && yarn test:bundle
237237

238238
- name: Remove previous CTS output
@@ -335,7 +335,7 @@ jobs:
335335
run: yarn cli generate ${{ matrix.client.language }} ${{ matrix.client.toRun }}
336336

337337
- name: Update composer.lock
338-
if: ${{ matrix.client.language == 'php' && startsWith(env.head_ref, 'chore/renovateBaseBranch') && matrix.client.isMainVersion }}
338+
if: ${{ matrix.client.language == 'php' && startsWith(github.head_ref, 'chore/renovateBaseBranch') && matrix.client.isMainVersion }}
339339
run: cd ${{ matrix.client.path }} && composer update
340340

341341
- name: Check for file duplicates in Swift

clients/algoliasearch-client-javascript/bundlesize.config.json

+5-5
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,19 @@
22
"files": [
33
{
44
"path": "packages/algoliasearch/dist/algoliasearch.umd.js",
5-
"maxSize": "9.50KB"
5+
"maxSize": "12.60KB"
66
},
77
{
88
"path": "packages/algoliasearch/dist/lite/builds/browser.umd.js",
99
"maxSize": "3.95KB"
1010
},
1111
{
1212
"path": "packages/client-abtesting/dist/builds/browser.umd.js",
13-
"maxSize": "4.10KB"
13+
"maxSize": "4.15KB"
1414
},
1515
{
1616
"path": "packages/client-analytics/dist/builds/browser.umd.js",
17-
"maxSize": "4.75KB"
17+
"maxSize": "4.85KB"
1818
},
1919
{
2020
"path": "packages/client-insights/dist/builds/browser.umd.js",
@@ -30,7 +30,7 @@
3030
},
3131
{
3232
"path": "packages/client-search/dist/builds/browser.umd.js",
33-
"maxSize": "7.15KB"
33+
"maxSize": "7.25KB"
3434
},
3535
{
3636
"path": "packages/ingestion/dist/builds/browser.umd.js",
@@ -42,7 +42,7 @@
4242
},
4343
{
4444
"path": "packages/recommend/dist/builds/browser.umd.js",
45-
"maxSize": "4.10KB"
45+
"maxSize": "4.15KB"
4646
}
4747
]
4848
}

clients/algoliasearch-client-javascript/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
],
88
"scripts": {
99
"build:all": "lerna run build --include-dependencies",
10-
"build:many": "lerna run build --scope '@algolia/requester-testing' --scope ${0:-'{@algolia/*,algoliasearch}'} --include-dependencies",
10+
"build:many": "lerna run build --scope '@algolia/requester-testing' --scope '@algolia/logger-console' --scope ${0:-'{@algolia/*,algoliasearch}'} --include-dependencies",
1111
"clean": "lerna run clean",
1212
"release:bump": "lerna version ${0:-patch} --no-changelog --no-git-tag-version --no-push --exact --force-publish --yes",
1313
"release:publish": "tsc --project scripts/tsconfig.json && node scripts/dist/scripts/publish.js",

clients/algoliasearch-client-javascript/yarn.lock

+15-12
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ __metadata:
5454
languageName: unknown
5555
linkType: soft
5656

57-
"@algolia/client-insights@workspace:packages/client-insights":
57+
"@algolia/client-insights@npm:5.8.1, @algolia/client-insights@workspace:packages/client-insights":
5858
version: 0.0.0-use.local
5959
resolution: "@algolia/client-insights@workspace:packages/client-insights"
6060
dependencies:
@@ -88,7 +88,7 @@ __metadata:
8888
languageName: unknown
8989
linkType: soft
9090

91-
"@algolia/client-query-suggestions@workspace:packages/client-query-suggestions":
91+
"@algolia/client-query-suggestions@npm:5.8.1, @algolia/client-query-suggestions@workspace:packages/client-query-suggestions":
9292
version: 0.0.0-use.local
9393
resolution: "@algolia/client-query-suggestions@workspace:packages/client-query-suggestions"
9494
dependencies:
@@ -105,7 +105,7 @@ __metadata:
105105
languageName: unknown
106106
linkType: soft
107107

108-
"@algolia/client-search@npm:5.8.1, @algolia/client-search@workspace:packages/client-search":
108+
"@algolia/client-search@workspace:packages/client-search":
109109
version: 0.0.0-use.local
110110
resolution: "@algolia/client-search@workspace:packages/client-search"
111111
dependencies:
@@ -122,7 +122,7 @@ __metadata:
122122
languageName: unknown
123123
linkType: soft
124124

125-
"@algolia/ingestion@workspace:packages/ingestion":
125+
"@algolia/ingestion@npm:1.8.1, @algolia/ingestion@workspace:packages/ingestion":
126126
version: 0.0.0-use.local
127127
resolution: "@algolia/ingestion@workspace:packages/ingestion"
128128
dependencies:
@@ -155,7 +155,7 @@ __metadata:
155155
languageName: unknown
156156
linkType: soft
157157

158-
"@algolia/monitoring@workspace:packages/monitoring":
158+
"@algolia/monitoring@npm:1.8.1, @algolia/monitoring@workspace:packages/monitoring":
159159
version: 0.0.0-use.local
160160
resolution: "@algolia/monitoring@workspace:packages/monitoring"
161161
dependencies:
@@ -2088,8 +2088,11 @@ __metadata:
20882088
"@algolia/client-abtesting": "npm:5.8.1"
20892089
"@algolia/client-analytics": "npm:5.8.1"
20902090
"@algolia/client-common": "npm:5.8.1"
2091+
"@algolia/client-insights": "npm:5.8.1"
20912092
"@algolia/client-personalization": "npm:5.8.1"
2092-
"@algolia/client-search": "npm:5.8.1"
2093+
"@algolia/client-query-suggestions": "npm:5.8.1"
2094+
"@algolia/ingestion": "npm:1.8.1"
2095+
"@algolia/monitoring": "npm:1.8.1"
20932096
"@algolia/recommend": "npm:5.8.1"
20942097
"@algolia/requester-browser-xhr": "npm:5.8.1"
20952098
"@algolia/requester-fetch": "npm:5.8.1"
@@ -3938,13 +3941,13 @@ __metadata:
39383941
linkType: hard
39393942

39403943
"form-data@npm:^4.0.0":
3941-
version: 4.0.0
3942-
resolution: "form-data@npm:4.0.0"
3944+
version: 4.0.1
3945+
resolution: "form-data@npm:4.0.1"
39433946
dependencies:
39443947
asynckit: "npm:^0.4.0"
39453948
combined-stream: "npm:^1.0.8"
39463949
mime-types: "npm:^2.1.12"
3947-
checksum: 10/7264aa760a8cf09482816d8300f1b6e2423de1b02bba612a136857413fdc96d7178298ced106817655facc6b89036c6e12ae31c9eb5bdc16aabf502ae8a5d805
3950+
checksum: 10/6adb1cff557328bc6eb8a68da205f9ae44ab0e88d4d9237aaf91eed591ffc64f77411efb9016af7d87f23d0a038c45a788aa1c6634e51175c4efa36c2bc53774
39483951
languageName: node
39493952
linkType: hard
39503953

@@ -5819,11 +5822,11 @@ __metadata:
58195822
linkType: hard
58205823

58215824
"nan@npm:^2.14.0":
5822-
version: 2.20.0
5823-
resolution: "nan@npm:2.20.0"
5825+
version: 2.21.0
5826+
resolution: "nan@npm:2.21.0"
58245827
dependencies:
58255828
node-gyp: "npm:latest"
5826-
checksum: 10/5f16e4c9953075d9920229c703c1d781c0b74118ce3d9e926b448a4eef92b7d8be5ac6adc748a13a5fafb594436cbfe63250e3471aefdd78e3a0cd14603b9ba7
5829+
checksum: 10/4517d316776b509a961c65241b72863e70f63aa5b0c354ca19fbbbf7c78254e54aa1f0de142fac1df986a04c27e74a1fb7e4aa85e9e3834daa172b8d9d1bbb07
58275830
languageName: node
58285831
linkType: hard
58295832

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

+21-18
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,7 @@
55
import io.swagger.v3.oas.models.OpenAPI;
66
import io.swagger.v3.oas.models.Operation;
77
import io.swagger.v3.oas.models.servers.Server;
8-
import java.util.List;
9-
import java.util.Map;
10-
import java.util.Spliterator;
11-
import java.util.Spliterators;
8+
import java.util.*;
129
import java.util.stream.StreamSupport;
1310
import org.openapitools.codegen.CodegenOperation;
1411
import org.openapitools.codegen.SupportingFile;
@@ -158,26 +155,32 @@ private void setDefaultGeneratorOptions() {
158155
additionalProperties.put("isSearchClient", CLIENT.equals("search") || isAlgoliasearchClient);
159156
additionalProperties.put("isIngestionClient", CLIENT.equals("ingestion"));
160157
additionalProperties.put("isAlgoliasearchClient", isAlgoliasearchClient);
161-
additionalProperties.put(
162-
"isAvailableInAlgoliasearch",
163-
CLIENT.equals("search") ||
164-
CLIENT.equals("recommend") ||
165-
CLIENT.equals("personalization") ||
166-
CLIENT.equals("analytics") ||
167-
CLIENT.equals("abtesting")
168-
);
169158
additionalProperties.put("packageVersion", Helpers.getPackageJsonVersion(packageName));
170159
additionalProperties.put("packageName", packageName);
171160
additionalProperties.put("npmPackageName", isAlgoliasearchClient ? packageName : "@algolia/" + packageName);
172161
additionalProperties.put("nodeSearchHelpers", CLIENT.equals("search") || isAlgoliasearchClient);
173162

174163
if (isAlgoliasearchClient) {
175-
// Files used to create the package.json of the algoliasearch package
176-
additionalProperties.put("analyticsVersion", Helpers.getPackageJsonVersion("client-analytics"));
177-
additionalProperties.put("abtestingVersion", Helpers.getPackageJsonVersion("client-abtesting"));
178-
additionalProperties.put("personalizationVersion", Helpers.getPackageJsonVersion("client-personalization"));
179-
additionalProperties.put("searchVersion", Helpers.getPackageJsonVersion("client-search"));
180-
additionalProperties.put("recommendVersion", Helpers.getPackageJsonVersion("recommend"));
164+
var dependencies = new ArrayList<Map<String, Object>>();
165+
List<Map<String, Object>> packages = Helpers.getClientConfigList("javascript", "clients");
166+
for (Map<String, Object> pkg : packages) {
167+
String name = ((String) pkg.get("output")).replace("clients/algoliasearch-client-javascript/packages/", "");
168+
if (name.contains("search")) {
169+
continue;
170+
}
171+
172+
var dependency = new HashMap<String, Object>();
173+
dependency.put("dependencyName", Helpers.createClientName((String) pkg.get("name"), "javascript"));
174+
dependency.put("dependencyPackage", "@algolia/" + name);
175+
dependency.put("dependencyVersion", Helpers.getPackageJsonVersion(name));
176+
dependency.put(
177+
"dependencyHasRegionalHosts",
178+
!name.contains("search") && !name.contains("recommend") && !name.contains("monitoring")
179+
);
180+
181+
dependencies.add(dependency);
182+
}
183+
additionalProperties.put("dependencies", dependencies);
181184

182185
// Files used to generate the `lite` client
183186
clientName = "lite" + Helpers.API_SUFFIX;

generators/src/main/java/com/algolia/codegen/utils/Helpers.java

+16
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,22 @@ public static String getClientConfigField(String language, String... fields) thr
198198
return value.asText();
199199
}
200200

201+
/** Get the `field` value in the `config/clients.config.json` file for the given language */
202+
public static List<Map<String, Object>> getClientConfigList(String language, String... fields) throws ConfigException {
203+
if (fields.length == 0) {
204+
throw new ConfigException("getClientConfigList requires at least one field");
205+
}
206+
JsonNode value = getClientConfig(language);
207+
for (String field : fields) {
208+
value = value.get(field);
209+
}
210+
try {
211+
return new ObjectMapper().readerForListOf(Map.class).readValue(value);
212+
} catch (IOException e) {
213+
throw new ConfigException("Cannot convert value", e);
214+
}
215+
}
216+
201217
public static List<String> getClientListForLanguage(String language) throws ConfigException {
202218
JsonNode value = getClientConfig(language);
203219
value = value.get("clients");

playground/javascript/node/algoliasearch.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ async function testAlgoliasearch() {
8080
}
8181

8282
try {
83-
const analyticsClient = client.initAnalytics();
83+
const analyticsClient = client.initAnalytics({region: 'de'});
8484

8585
const res = await analyticsClient.getTopFilterForAttribute({
8686
attribute: 'myAttribute1,myAttribute2',
@@ -97,7 +97,7 @@ async function testAlgoliasearch() {
9797
}
9898

9999
try {
100-
const abtestingClient = client.initAbtesting();
100+
const abtestingClient = client.initAbtesting({region: 'us'});
101101

102102
const res = await abtestingClient.getABTest({
103103
id: 42,

templates/javascript/clients/README.mustache

+2-2
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,10 @@
3232

3333
## 💡 Getting Started
3434

35-
{{#isAvailableInAlgoliasearch}}
35+
{{^isAlgoliasearchClient}}
3636
> [!TIP]
3737
> This API client is already a dependency of [the algoliasearch client](https://www.npmjs.com/package/algoliasearch), you don't need to manually install `{{{npmPackageName}}}` if you already have `algoliasearch` installed.
38-
{{/isAvailableInAlgoliasearch}}
38+
{{/isAlgoliasearchClient}}
3939

4040
To get started, you first need to install {{npmPackageName}} (or any other available API client package).
4141
All of our clients comes with type definition, and are available for both browser and node environments.
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,30 @@
11
// {{{generationBanner}}}
22

33
import type { ClientOptions } from '@algolia/client-common';
4-
import type { AbtestingClient, Region as AbtestingRegion } from "@algolia/client-abtesting"
5-
import type { AnalyticsClient, Region as AnalyticsRegion } from "@algolia/client-analytics"
6-
import type { PersonalizationClient, Region as PersonalizationRegion } from "@algolia/client-personalization"
7-
import type { RecommendClient } from "@algolia/recommend"
8-
import type { SearchClient } from "@algolia/client-search"
9-
10-
import { abtestingClient } from '@algolia/client-abtesting';
11-
import { analyticsClient } from '@algolia/client-analytics';
12-
import { personalizationClient } from '@algolia/client-personalization';
4+
import type { SearchClient } from '@algolia/client-search';
135
import { searchClient } from '@algolia/client-search';
14-
import { recommendClient } from '@algolia/recommend';
6+
7+
{{#dependencies}}
8+
import { {{{dependencyName}}}Client } from '{{{dependencyPackage}}}';
9+
import type { {{#lambda.titlecase}}{{{dependencyName}}}{{/lambda.titlecase}}Client } from '{{{dependencyPackage}}}';
10+
{{/dependencies}}
1511

1612
import type {
1713
InitClientOptions,
18-
InitClientRegion,
14+
{{#dependencies}}
15+
{{#dependencyHasRegionalHosts}}
16+
{{#lambda.titlecase}}{{{dependencyName}}}Region{{/lambda.titlecase}},
17+
{{#lambda.titlecase}}{{{dependencyName}}}RegionOptions{{/lambda.titlecase}},
18+
{{/dependencyHasRegionalHosts}}
19+
{{/dependencies}}
1920
} from './models';
2021

2122
export * from './models';
2223

2324
export type Algoliasearch = SearchClient & {
24-
initRecommend: (initOptions?: InitClientOptions)=> RecommendClient;
25-
initAnalytics: (initOptions?: InitClientOptions & InitClientRegion<AnalyticsRegion>)=> AnalyticsClient;
26-
initAbtesting: (initOptions?: InitClientOptions & InitClientRegion<AbtestingRegion>)=> AbtestingClient;
27-
initPersonalization: (initOptions: InitClientOptions & Required<InitClientRegion<PersonalizationRegion>>)=> PersonalizationClient;
25+
{{#dependencies}}
26+
init{{#lambda.titlecase}}{{{dependencyName}}}{{/lambda.titlecase}}: (initOptions: InitClientOptions {{#dependencyHasRegionalHosts}}& {{#lambda.titlecase}}{{{dependencyName}}}RegionOptions{{/lambda.titlecase}}{{/dependencyHasRegionalHosts}}) => {{#lambda.titlecase}}{{{dependencyName}}}{{/lambda.titlecase}}Client;
27+
{{/dependencies}}
2828
};
2929

3030
export function algoliasearch(appId: string, apiKey: string, options?: ClientOptions): Algoliasearch {
@@ -40,43 +40,19 @@ export function algoliasearch(appId: string, apiKey: string, options?: ClientOpt
4040

4141
return {
4242
...client,
43+
4344
/**
4445
* Get the value of the `algoliaAgent`, used by our libraries internally and telemetry system.
4546
*/
4647
get _ua(): string {
4748
return client.transporter.algoliaAgent.value;
4849
},
49-
initRecommend: (initOptions: InitClientOptions = {}): RecommendClient => {
50-
return recommendClient(initOptions.appId || appId, initOptions.apiKey || apiKey, initOptions.options);
51-
},
5250

53-
initAnalytics: (initOptions: InitClientOptions & InitClientRegion<AnalyticsRegion> = {}): AnalyticsClient => {
54-
return analyticsClient(
55-
initOptions.appId || appId,
56-
initOptions.apiKey || apiKey,
57-
initOptions.region,
58-
initOptions.options,
59-
);
51+
{{#dependencies}}
52+
init{{#lambda.titlecase}}{{{dependencyName}}}{{/lambda.titlecase}}: (initOptions: InitClientOptions {{#dependencyHasRegionalHosts}}& {{#lambda.titlecase}}{{{dependencyName}}}RegionOptions{{/lambda.titlecase}}{{/dependencyHasRegionalHosts}}): {{#lambda.titlecase}}{{{dependencyName}}}{{/lambda.titlecase}}Client => {
53+
return {{{dependencyName}}}Client(initOptions.appId || appId, initOptions.apiKey || apiKey, {{#dependencyHasRegionalHosts}}initOptions.region,{{/dependencyHasRegionalHosts}}initOptions.options);
6054
},
6155

62-
initAbtesting: (initOptions: InitClientOptions & InitClientRegion<AbtestingRegion> = {}): AbtestingClient => {
63-
return abtestingClient(
64-
initOptions.appId || appId,
65-
initOptions.apiKey || apiKey,
66-
initOptions.region,
67-
initOptions.options,
68-
);
69-
},
70-
71-
initPersonalization: (
72-
initOptions: InitClientOptions & Required<InitClientRegion<PersonalizationRegion>>,
73-
): PersonalizationClient => {
74-
return personalizationClient(
75-
initOptions.appId || appId,
76-
initOptions.apiKey || apiKey,
77-
initOptions.region,
78-
initOptions.options,
79-
);
80-
},
56+
{{/dependencies}}
8157
}
8258
}

0 commit comments

Comments
 (0)