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

Lines changed: 1 addition & 0 deletions
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

Lines changed: 5 additions & 5 deletions
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

Lines changed: 5 additions & 5 deletions
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

Lines changed: 1 addition & 1 deletion
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

Lines changed: 15 additions & 12 deletions
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

Lines changed: 21 additions & 18 deletions
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

Lines changed: 16 additions & 0 deletions
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

Lines changed: 2 additions & 2 deletions
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

Lines changed: 2 additions & 2 deletions
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.
Lines changed: 20 additions & 44 deletions
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)