Skip to content

Commit 3b673ce

Browse files
authoredSep 6, 2024··
fix(javascript): type definition and template cleanup (#3656)
1 parent a254f03 commit 3b673ce

File tree

13 files changed

+106
-169
lines changed

13 files changed

+106
-169
lines changed
 

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

+2-2
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,8 @@ public void processOpts() {
8282
supportingFiles.add(new SupportingFile("README.mustache", "", "../../README.md"));
8383

8484
// `algoliasearch` builds
85-
supportingFiles.add(new SupportingFile("algoliasearch/builds/browser.mustache", "builds", "browser.ts"));
86-
supportingFiles.add(new SupportingFile("algoliasearch/builds/node.mustache", "builds", "node.ts"));
85+
supportingFiles.add(new SupportingFile("algoliasearch/builds/definition.mustache", "builds", "browser.ts"));
86+
supportingFiles.add(new SupportingFile("algoliasearch/builds/definition.mustache", "builds", "node.ts"));
8787
supportingFiles.add(new SupportingFile("algoliasearch/builds/models.mustache", "builds", "models.ts"));
8888

8989
// `lite` builds

‎templates/javascript/clients/algoliasearch/builds/browser.mustache

-39
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,12 @@
1-
{{#nodeSearchHelpers}}
2-
import { createHmac } from 'node:crypto';
3-
{{/nodeSearchHelpers}}
4-
5-
import {
6-
DEFAULT_CONNECT_TIMEOUT_BROWSER,
7-
DEFAULT_CONNECT_TIMEOUT_NODE,
8-
DEFAULT_READ_TIMEOUT_BROWSER,
9-
DEFAULT_READ_TIMEOUT_NODE,
10-
DEFAULT_WRITE_TIMEOUT_BROWSER,
11-
DEFAULT_WRITE_TIMEOUT_NODE,
12-
createBrowserLocalStorageCache,
13-
createFallbackableCache,
14-
createMemoryCache,
15-
createNullCache,
16-
serializeQueryParameters,
17-
} from '@algolia/client-common';
1+
// {{{generationBanner}}}
182

193
import type { ClientOptions } from '@algolia/client-common';
204
import type { AbtestingClient, Region as AbtestingRegion } from "@algolia/client-abtesting"
215
import type { AnalyticsClient, Region as AnalyticsRegion } from "@algolia/client-analytics"
226
import type { PersonalizationClient, Region as PersonalizationRegion } from "@algolia/client-personalization"
237
import type { RecommendClient } from "@algolia/recommend"
8+
import type { SearchClient } from "@algolia/client-search"
249

25-
import { createXhrRequester } from '@algolia/requester-browser-xhr';
26-
import { createHttpRequester } from '@algolia/requester-node-http';
2710
import { abtestingClient } from '@algolia/client-abtesting';
2811
import { analyticsClient } from '@algolia/client-analytics';
2912
import { personalizationClient } from '@algolia/client-personalization';
@@ -33,29 +16,65 @@ import { recommendClient } from '@algolia/recommend';
3316
import type {
3417
InitClientOptions,
3518
InitClientRegion,
36-
GenerateSecuredApiKeyOptions,
37-
GetSecuredApiKeyRemainingValidityOptions,
3819
} from './models';
3920

40-
import { apiClientVersion } from './models';
41-
4221
export * from './models';
4322

44-
/**
45-
* The client type.
46-
*/
47-
export type Algoliasearch = ReturnType<typeof algoliasearch>;
48-
49-
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
50-
export function algoliasearch(
51-
appId: string,
52-
apiKey: string,
53-
options?: ClientOptions
54-
) {
23+
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;
28+
};
29+
30+
export function algoliasearch(appId: string, apiKey: string, options?: ClientOptions): Algoliasearch {
5531
if (!appId || typeof appId !== 'string') {
5632
throw new Error('`appId` is missing.');
5733
}
5834

5935
if (!apiKey || typeof apiKey !== 'string') {
6036
throw new Error('`apiKey` is missing.');
61-
}
37+
}
38+
39+
return {
40+
...searchClient(appId, apiKey, options),
41+
/**
42+
* Get the value of the `algoliaAgent`, used by our libraries internally and telemetry system.
43+
*/
44+
get _ua(): string {
45+
return this.transporter.algoliaAgent.value;
46+
},
47+
initRecommend: (initOptions: InitClientOptions = {}): RecommendClient => {
48+
return recommendClient(initOptions.appId || appId, initOptions.apiKey || apiKey, initOptions.options);
49+
},
50+
51+
initAnalytics: (initOptions: InitClientOptions & InitClientRegion<AnalyticsRegion> = {}): AnalyticsClient => {
52+
return analyticsClient(
53+
initOptions.appId || appId,
54+
initOptions.apiKey || apiKey,
55+
initOptions.region,
56+
initOptions.options,
57+
);
58+
},
59+
60+
initAbtesting: (initOptions: InitClientOptions & InitClientRegion<AbtestingRegion> = {}): AbtestingClient => {
61+
return abtestingClient(
62+
initOptions.appId || appId,
63+
initOptions.apiKey || apiKey,
64+
initOptions.region,
65+
initOptions.options,
66+
);
67+
},
68+
69+
initPersonalization: (
70+
initOptions: InitClientOptions & Required<InitClientRegion<PersonalizationRegion>>,
71+
): PersonalizationClient => {
72+
return personalizationClient(
73+
initOptions.appId || appId,
74+
initOptions.apiKey || apiKey,
75+
initOptions.region,
76+
initOptions.options,
77+
);
78+
},
79+
}
80+
}

‎templates/javascript/clients/algoliasearch/builds/initClients.mustache

-15
This file was deleted.

‎templates/javascript/clients/algoliasearch/builds/models.mustache

+6-4
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
// {{{generationBanner}}}
22

3-
import type { Region as ABTestingRegion } from '@algolia/client-abtesting';
4-
import type { Region as AnalyticsRegion } from '@algolia/client-analytics';
3+
import type { AbtestingClient, Region as AbTestingRegion } from '@algolia/client-abtesting';
4+
import type { AnalyticsClient, Region as AnalyticsRegion } from '@algolia/client-analytics';
55
import type { ClientOptions } from '@algolia/client-common';
6+
import type { PersonalizationClient, Region as PersonalizationRegion } from '@algolia/client-personalization';
67
import type {
78
AdvancedSyntaxFeatures,
89
AlternativesAsExact,
@@ -78,8 +79,9 @@ import type {
7879
Value,
7980
} from '@algolia/client-search';
8081
import { apiClientVersion } from '@algolia/client-search';
82+
import type { RecommendClient } from '@algolia/recommend';
8183

82-
type Region = ABTestingRegion | AnalyticsRegion;
84+
type Region = AbTestingRegion | AnalyticsRegion;
8385

8486
export * from '@algolia/client-search';
8587
export * from '@algolia/recommend';
@@ -161,7 +163,7 @@ export {
161163
TypoToleranceEnum,
162164
Value,
163165
AnalyticsRegion,
164-
ABTestingRegion,
166+
AbTestingRegion,
165167
Region,
166168
apiClientVersion,
167169
};

‎templates/javascript/clients/algoliasearch/builds/node.mustache

-36
This file was deleted.

‎templates/javascript/clients/api-single.mustache

+24-25
Original file line numberDiff line numberDiff line change
@@ -21,27 +21,26 @@ export function create{{#lambda.titlecase}}{{apiName}}{{/lambda.titlecase}}({
2121
...options
2222
}: CreateClientOptions{{#hasRegionalHost}} & {region{{#fallbackToAliasHost}}?{{/fallbackToAliasHost}}: Region }{{/hasRegionalHost}}) {
2323
const auth = createAuth(appIdOption, apiKeyOption, authMode);
24-
const transporter = createTransporter({
25-
hosts: getDefaultHosts({{#hostWithAppID}}appIdOption{{/hostWithAppID}}{{#hasRegionalHost}}regionOption{{/hasRegionalHost}}),
26-
...options,
27-
algoliaAgent: getAlgoliaAgent({
28-
algoliaAgents,
29-
client: '{{{algoliaAgent}}}',
30-
version: apiClientVersion,
31-
}),
32-
baseHeaders: {
33-
'content-type': 'text/plain',
34-
...auth.headers(),
35-
...options.baseHeaders,
36-
},
37-
baseQueryParameters: {
38-
...auth.queryParameters(),
39-
...options.baseQueryParameters,
40-
},
41-
});
4224
4325
return {
44-
transporter,
26+
transporter: createTransporter({
27+
hosts: getDefaultHosts({{#hostWithAppID}}appIdOption{{/hostWithAppID}}{{#hasRegionalHost}}regionOption{{/hasRegionalHost}}),
28+
...options,
29+
algoliaAgent: getAlgoliaAgent({
30+
algoliaAgents,
31+
client: '{{{algoliaAgent}}}',
32+
version: apiClientVersion,
33+
}),
34+
baseHeaders: {
35+
'content-type': 'text/plain',
36+
...auth.headers(),
37+
...options.baseHeaders,
38+
},
39+
baseQueryParameters: {
40+
...auth.queryParameters(),
41+
...options.baseQueryParameters,
42+
},
43+
}),
4544

4645
/**
4746
* The `appId` currently in use.
@@ -53,16 +52,16 @@ export function create{{#lambda.titlecase}}{{apiName}}{{/lambda.titlecase}}({
5352
*/
5453
clearCache(): Promise<void> {
5554
return Promise.all([
56-
transporter.requestsCache.clear(),
57-
transporter.responsesCache.clear(),
55+
this.transporter.requestsCache.clear(),
56+
this.transporter.responsesCache.clear(),
5857
]).then(() => undefined);
5958
},
6059

6160
/**
6261
* Get the value of the `algoliaAgent`, used by our libraries internally and telemetry system.
6362
*/
6463
get _ua(): string {
65-
return transporter.algoliaAgent.value;
64+
return this.transporter.algoliaAgent.value;
6665
},
6766

6867
/**
@@ -72,7 +71,7 @@ export function create{{#lambda.titlecase}}{{apiName}}{{/lambda.titlecase}}({
7271
* @param version - The version of the agent.
7372
*/
7473
addAlgoliaAgent(segment: string, version?: string): void {
75-
transporter.algoliaAgent.add({ segment, version });
74+
this.transporter.algoliaAgent.add({ segment, version });
7675
},
7776

7877
/**
@@ -82,7 +81,7 @@ export function create{{#lambda.titlecase}}{{apiName}}{{/lambda.titlecase}}({
8281
* @param params.apiKey - The new API Key to use.
8382
*/
8483
setClientApiKey({ apiKey }: { apiKey: string }): void {
85-
transporter.baseHeaders['x-algolia-api-key'] = apiKey;
84+
this.transporter.baseHeaders['x-algolia-api-key'] = apiKey;
8685
},
8786

8887
{{#isSearchClient}}
@@ -153,7 +152,7 @@ export function create{{#lambda.titlecase}}{{apiName}}{{/lambda.titlecase}}({
153152
{{/vendorExtensions}}
154153
};
155154

156-
return transporter.request(request, requestOptions);
155+
return this.transporter.request(request, requestOptions);
157156
},
158157

159158
{{/operation}}

‎templates/javascript/clients/client/api/nodeHelpers.mustache

+4-4
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@
66
* @param generateSecuredApiKey.parentApiKey - The base API key from which to generate the new secured one.
77
* @param generateSecuredApiKey.restrictions - A set of properties defining the restrictions of the secured API key.
88
*/
9-
generateSecuredApiKey({
9+
generateSecuredApiKey: ({
1010
parentApiKey,
1111
restrictions = {},
12-
}: GenerateSecuredApiKeyOptions): string {
12+
}: GenerateSecuredApiKeyOptions): string => {
1313
let mergedRestrictions = restrictions;
1414
if (restrictions.searchParams) {
1515
// merge searchParams with the root restrictions
@@ -47,9 +47,9 @@ generateSecuredApiKey({
4747
* @param getSecuredApiKeyRemainingValidity - The `getSecuredApiKeyRemainingValidity` object.
4848
* @param getSecuredApiKeyRemainingValidity.securedApiKey - The secured API key generated with the `generateSecuredApiKey` method.
4949
*/
50-
getSecuredApiKeyRemainingValidity({
50+
getSecuredApiKeyRemainingValidity: ({
5151
securedApiKey,
52-
}: GetSecuredApiKeyRemainingValidityOptions): number {
52+
}: GetSecuredApiKeyRemainingValidityOptions): number => {
5353
const decodedString = Buffer.from(securedApiKey, 'base64').toString(
5454
'ascii'
5555
);

‎templates/javascript/clients/client/builds/browser.mustache

+2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
// {{{generationBanner}}}
22

3+
export type {{#lambda.titlecase}}{{apiName}}{{/lambda.titlecase}} = ReturnType<typeof create{{#lambda.titlecase}}{{apiName}}{{/lambda.titlecase}}>;
4+
35
{{> client/builds/definition}}
46
return create{{#lambda.titlecase}}{{apiName}}{{/lambda.titlecase}}({
57
appId,

‎templates/javascript/clients/client/builds/definition.mustache

+2-7
Original file line numberDiff line numberDiff line change
@@ -23,24 +23,19 @@ export {
2323
export * from '../model';
2424

2525
{{#isSearchClient}}
26-
import { GenerateSecuredApiKeyOptions, GetSecuredApiKeyRemainingValidityOptions } from '../model';
26+
import { GenerateSecuredApiKeyOptions, GetSecuredApiKeyRemainingValidityOptions, SearchClientNodeHelpers } from '../model';
2727
{{/isSearchClient}}
2828

2929
{{#nodeSearchHelpers}}
3030
import {createHmac} from 'node:crypto';
3131
{{/nodeSearchHelpers}}
3232

33-
/**
34-
* The client type.
35-
*/
36-
export type {{#lambda.titlecase}}{{apiName}}{{/lambda.titlecase}} = ReturnType<typeof {{apiName}}>;
37-
3833
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
3934
export function {{apiName}}(
4035
appId: string,
4136
apiKey: string,{{#hasRegionalHost}}region{{#fallbackToAliasHost}}?{{/fallbackToAliasHost}}: Region,{{/hasRegionalHost}}
4237
options?: ClientOptions
43-
) {
38+
): {{#lambda.titlecase}}{{apiName}}{{/lambda.titlecase}} {
4439
if (!appId || typeof appId !== 'string') {
4540
throw new Error("`appId` is missing.");
4641
}

‎templates/javascript/clients/client/builds/liteNode.mustache

+2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
// {{{generationBanner}}}
22

3+
export type {{#lambda.titlecase}}{{apiName}}{{/lambda.titlecase}} = ReturnType<typeof create{{#lambda.titlecase}}{{apiName}}{{/lambda.titlecase}}>;
4+
35
{{> client/builds/definition}}
46
return create{{#lambda.titlecase}}{{apiName}}{{/lambda.titlecase}}({
57
appId,

‎templates/javascript/clients/client/builds/node.mustache

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
// {{{generationBanner}}}
22

3+
export type {{#lambda.titlecase}}{{apiName}}{{/lambda.titlecase}} = ReturnType<typeof create{{#lambda.titlecase}}{{apiName}}{{/lambda.titlecase}}>{{#nodeSearchHelpers}} & SearchClientNodeHelpers{{/nodeSearchHelpers}};
4+
35
{{> client/builds/definition}}
46
return {
57
...create{{#lambda.titlecase}}{{apiName}}{{/lambda.titlecase}}({
@@ -17,9 +19,8 @@
1719
hostsCache: createMemoryCache(),
1820
...options,
1921
}),
20-
2122
{{#nodeSearchHelpers}}
2223
{{> client/api/nodeHelpers}}
2324
{{/nodeSearchHelpers}}
24-
};
25+
}
2526
}

‎templates/javascript/clients/client/model/clientMethodProps.mustache

+7
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@ export type WaitForApiKeyOptions = WaitForOptions & {
107107
}
108108
);
109109

110+
{{#isSearchClient}}
110111
export type GenerateSecuredApiKeyOptions = {
111112
/**
112113
* The base API key from which to generate the new secured one.
@@ -126,6 +127,12 @@ export type GetSecuredApiKeyRemainingValidityOptions = {
126127
securedApiKey: string;
127128
}
128129

130+
export type SearchClientNodeHelpers = {
131+
generateSecuredApiKey: (opts: GenerateSecuredApiKeyOptions) => string;
132+
getSecuredApiKeyRemainingValidity: (opts: GetSecuredApiKeyRemainingValidityOptions) => number;
133+
}
134+
{{/isSearchClient}}
135+
129136
export type DeleteObjectsOptions = Pick<ChunkedBatchOptions, 'indexName'> & {
130137
/**
131138
* The objectIDs to delete.

0 commit comments

Comments
 (0)
Please sign in to comment.