Skip to content

Commit b4d0d89

Browse files
committed
Merge branch 'main' into feat/use-algolia-namespace
2 parents dab0567 + 5a49984 commit b4d0d89

File tree

7 files changed

+362
-54
lines changed

7 files changed

+362
-54
lines changed
Lines changed: 86 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,19 @@
11
import type {
2-
AnalyticsClient,
2+
Region as AbtestingRegion,
3+
AbtestingClient,
4+
} from '@experimental-api-clients-automation/client-abtesting/src/abtestingClient';
5+
import {
6+
createAbtestingClient,
7+
REGIONS as abtestingRegions,
8+
} from '@experimental-api-clients-automation/client-abtesting/src/abtestingClient';
9+
import type {
310
Region as AnalyticsRegion,
11+
AnalyticsClient,
12+
} from '@experimental-api-clients-automation/client-analytics/src/analyticsClient';
13+
import {
14+
createAnalyticsClient,
15+
REGIONS as analyticsRegions,
416
} from '@experimental-api-clients-automation/client-analytics/src/analyticsClient';
5-
import { createAnalyticsClient } from '@experimental-api-clients-automation/client-analytics/src/analyticsClient';
617
import {
718
createMemoryCache,
819
createFallbackableCache,
@@ -11,22 +22,27 @@ import {
1122
DEFAULT_READ_TIMEOUT_BROWSER,
1223
DEFAULT_WRITE_TIMEOUT_BROWSER,
1324
} from '@experimental-api-clients-automation/client-common';
25+
import type { CreateClientOptions } from '@experimental-api-clients-automation/client-common';
26+
import {
27+
createPersonalizationClient,
28+
REGIONS as personalizationRegions,
29+
} from '@experimental-api-clients-automation/client-personalization/src/personalizationClient';
1430
import type {
15-
CreateClientOptions,
16-
Host,
17-
Requester,
18-
} from '@experimental-api-clients-automation/client-common';
19-
import type {
20-
PersonalizationClient,
2131
Region as PersonalizationRegion,
32+
PersonalizationClient,
2233
} from '@experimental-api-clients-automation/client-personalization/src/personalizationClient';
23-
import { createPersonalizationClient } from '@experimental-api-clients-automation/client-personalization/src/personalizationClient';
2434
import {
2535
createSearchClient,
2636
apiClientVersion as searchClientVersion,
2737
} from '@experimental-api-clients-automation/client-search/src/searchClient';
2838
import { createXhrRequester } from '@experimental-api-clients-automation/requester-browser-xhr';
2939

40+
import type {
41+
CommonInitOptions,
42+
InitRegion,
43+
CommonClientOptions,
44+
} from './models';
45+
3046
export * from './models';
3147

3248
export const apiClientVersion = searchClientVersion;
@@ -37,7 +53,7 @@ export type Algoliasearch = ReturnType<typeof algoliasearch>;
3753
export function algoliasearch(
3854
appId: string,
3955
apiKey: string,
40-
options?: { requester?: Requester; hosts?: Host[] }
56+
options?: CommonClientOptions
4157
) {
4258
if (!appId || typeof appId !== 'string') {
4359
throw new Error('`appId` is missing.');
@@ -68,42 +84,85 @@ export function algoliasearch(
6884
};
6985

7086
function initAnalytics(
71-
analyticsAppId: string,
72-
analyticsApiKey: string,
73-
region?: AnalyticsRegion,
74-
analyticsOptions?: { requester?: Requester; hosts?: Host[] }
87+
initOptions: CommonInitOptions & InitRegion<AnalyticsRegion> = {}
7588
): AnalyticsClient {
89+
if (
90+
initOptions.region &&
91+
(typeof initOptions.region !== 'string' ||
92+
!analyticsRegions.includes(initOptions.region))
93+
) {
94+
throw new Error(
95+
`\`region\` must be one of the following: ${analyticsRegions.join(
96+
', '
97+
)}`
98+
);
99+
}
100+
76101
return createAnalyticsClient({
77-
appId: analyticsAppId,
78-
apiKey: analyticsApiKey,
79-
region,
80-
...analyticsOptions,
102+
...initOptions.options,
103+
...commonOptions,
104+
appId: initOptions.appId ?? appId,
105+
apiKey: initOptions.apiKey ?? apiKey,
106+
region: initOptions.region,
107+
});
108+
}
109+
110+
function initAbtesting(
111+
initOptions: CommonInitOptions & InitRegion<AbtestingRegion> = {}
112+
): AbtestingClient {
113+
if (
114+
initOptions.region &&
115+
(typeof initOptions.region !== 'string' ||
116+
!abtestingRegions.includes(initOptions.region))
117+
) {
118+
throw new Error(
119+
`\`region\` must be one of the following: ${abtestingRegions.join(
120+
', '
121+
)}`
122+
);
123+
}
124+
125+
return createAbtestingClient({
126+
...initOptions.options,
81127
...commonOptions,
128+
appId: initOptions.appId ?? appId,
129+
apiKey: initOptions.apiKey ?? apiKey,
130+
region: initOptions.region,
82131
});
83132
}
84133

85134
function initPersonalization(
86-
personalizationAppId: string,
87-
personalizationApiKey: string,
88-
region: PersonalizationRegion,
89-
personalizationOptions?: { requester?: Requester; hosts?: Host[] }
135+
initOptions: CommonInitOptions & Required<InitRegion<PersonalizationRegion>>
90136
): PersonalizationClient {
91-
if (!region) {
137+
if (!initOptions.region) {
92138
throw new Error('`region` is missing.');
93139
}
94140

141+
if (
142+
initOptions.region &&
143+
(typeof initOptions.region !== 'string' ||
144+
!personalizationRegions.includes(initOptions.region))
145+
) {
146+
throw new Error(
147+
`\`region\` must be one of the following: ${personalizationRegions.join(
148+
', '
149+
)}`
150+
);
151+
}
152+
95153
return createPersonalizationClient({
96-
appId: personalizationAppId,
97-
apiKey: personalizationApiKey,
98-
region,
99-
...personalizationOptions,
154+
...initOptions.options,
100155
...commonOptions,
156+
appId: initOptions.appId ?? appId,
157+
apiKey: initOptions.apiKey ?? apiKey,
158+
region: initOptions.region,
101159
});
102160
}
103161

104162
return {
105163
...createSearchClient({ appId, apiKey, ...commonOptions }),
106164
initAnalytics,
107165
initPersonalization,
166+
initAbtesting,
108167
};
109168
}

clients/algoliasearch-client-javascript/packages/algoliasearch/builds/models.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
import type {
2+
Host,
3+
Requester,
4+
} from '@experimental-api-clients-automation/client-common';
15
import {
26
ErrorBase,
37
PutProps,
@@ -9,5 +13,27 @@ import {
913
export * from '@experimental-api-clients-automation/client-search/model';
1014
export * from '@experimental-api-clients-automation/client-personalization/model';
1115
export * from '@experimental-api-clients-automation/client-analytics/model';
16+
export * from '@experimental-api-clients-automation/client-abtesting/model';
1217

1318
export { ErrorBase, PutProps, PostProps, DelProps, GetProps };
19+
20+
export type CommonClientOptions = { requester?: Requester; hosts?: Host[] };
21+
22+
export type CommonInitOptions = Partial<{
23+
/**
24+
* App to target with the initialized client, defaults to the `algoliasearch` appId.
25+
*/
26+
appId: string;
27+
/**
28+
* API key of the targeted app ID, defaults to the `algoliasearch` apiKey.
29+
*/
30+
apiKey: string;
31+
options: CommonClientOptions;
32+
}>;
33+
34+
export type InitRegion<TRegion> = Partial<{
35+
/**
36+
* Available regions of the initialized client.
37+
*/
38+
region: TRegion;
39+
}>;
Lines changed: 86 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,47 @@
11
import type {
2-
AnalyticsClient,
2+
Region as AbtestingRegion,
3+
AbtestingClient,
4+
} from '@experimental-api-clients-automation/client-abtesting/src/abtestingClient';
5+
import {
6+
createAbtestingClient,
7+
REGIONS as abtestingRegions,
8+
} from '@experimental-api-clients-automation/client-abtesting/src/abtestingClient';
9+
import type {
310
Region as AnalyticsRegion,
11+
AnalyticsClient,
12+
} from '@experimental-api-clients-automation/client-analytics/src/analyticsClient';
13+
import {
14+
createAnalyticsClient,
15+
REGIONS as analyticsRegions,
416
} from '@experimental-api-clients-automation/client-analytics/src/analyticsClient';
5-
import { createAnalyticsClient } from '@experimental-api-clients-automation/client-analytics/src/analyticsClient';
617
import {
718
DEFAULT_CONNECT_TIMEOUT_NODE,
819
DEFAULT_READ_TIMEOUT_NODE,
920
DEFAULT_WRITE_TIMEOUT_NODE,
1021
createMemoryCache,
1122
createNullCache,
1223
} from '@experimental-api-clients-automation/client-common';
24+
import type { CreateClientOptions } from '@experimental-api-clients-automation/client-common';
25+
import {
26+
createPersonalizationClient,
27+
REGIONS as personalizationRegions,
28+
} from '@experimental-api-clients-automation/client-personalization/src/personalizationClient';
1329
import type {
14-
CreateClientOptions,
15-
Host,
16-
Requester,
17-
} from '@experimental-api-clients-automation/client-common';
18-
import type {
19-
PersonalizationClient,
2030
Region as PersonalizationRegion,
31+
PersonalizationClient,
2132
} from '@experimental-api-clients-automation/client-personalization/src/personalizationClient';
22-
import { createPersonalizationClient } from '@experimental-api-clients-automation/client-personalization/src/personalizationClient';
2333
import {
2434
createSearchClient,
2535
apiClientVersion as searchClientVersion,
2636
} from '@experimental-api-clients-automation/client-search/src/searchClient';
2737
import { createHttpRequester } from '@experimental-api-clients-automation/requester-node-http';
2838

39+
import type {
40+
CommonInitOptions,
41+
InitRegion,
42+
CommonClientOptions,
43+
} from './models';
44+
2945
export * from './models';
3046

3147
export const apiClientVersion = searchClientVersion;
@@ -36,7 +52,7 @@ export type Algoliasearch = ReturnType<typeof algoliasearch>;
3652
export function algoliasearch(
3753
appId: string,
3854
apiKey: string,
39-
options?: { requester?: Requester; hosts?: Host[] }
55+
options?: CommonClientOptions
4056
) {
4157
if (!appId || typeof appId !== 'string') {
4258
throw new Error('`appId` is missing.');
@@ -61,42 +77,85 @@ export function algoliasearch(
6177
};
6278

6379
function initAnalytics(
64-
analyticsAppId: string,
65-
analyticsApiKey: string,
66-
region?: AnalyticsRegion,
67-
analyticsOptions?: { requester?: Requester; hosts?: Host[] }
80+
initOptions: CommonInitOptions & InitRegion<AnalyticsRegion> = {}
6881
): AnalyticsClient {
82+
if (
83+
initOptions.region &&
84+
(typeof initOptions.region !== 'string' ||
85+
!analyticsRegions.includes(initOptions.region))
86+
) {
87+
throw new Error(
88+
`\`region\` must be one of the following: ${analyticsRegions.join(
89+
', '
90+
)}`
91+
);
92+
}
93+
6994
return createAnalyticsClient({
70-
appId: analyticsAppId,
71-
apiKey: analyticsApiKey,
72-
region,
73-
...analyticsOptions,
95+
...initOptions.options,
96+
...commonOptions,
97+
appId: initOptions.appId ?? appId,
98+
apiKey: initOptions.apiKey ?? apiKey,
99+
region: initOptions.region,
100+
});
101+
}
102+
103+
function initAbtesting(
104+
initOptions: CommonInitOptions & InitRegion<AbtestingRegion> = {}
105+
): AbtestingClient {
106+
if (
107+
initOptions.region &&
108+
(typeof initOptions.region !== 'string' ||
109+
!abtestingRegions.includes(initOptions.region))
110+
) {
111+
throw new Error(
112+
`\`region\` must be one of the following: ${abtestingRegions.join(
113+
', '
114+
)}`
115+
);
116+
}
117+
118+
return createAbtestingClient({
119+
...initOptions.options,
74120
...commonOptions,
121+
appId: initOptions.appId ?? appId,
122+
apiKey: initOptions.apiKey ?? apiKey,
123+
region: initOptions.region,
75124
});
76125
}
77126

78127
function initPersonalization(
79-
personalizationAppId: string,
80-
personalizationApiKey: string,
81-
region: PersonalizationRegion,
82-
personalizationOptions?: { requester?: Requester; hosts?: Host[] }
128+
initOptions: CommonInitOptions & Required<InitRegion<PersonalizationRegion>>
83129
): PersonalizationClient {
84-
if (!region) {
130+
if (!initOptions.region) {
85131
throw new Error('`region` is missing.');
86132
}
87133

134+
if (
135+
initOptions.region &&
136+
(typeof initOptions.region !== 'string' ||
137+
!personalizationRegions.includes(initOptions.region))
138+
) {
139+
throw new Error(
140+
`\`region\` must be one of the following: ${personalizationRegions.join(
141+
', '
142+
)}`
143+
);
144+
}
145+
88146
return createPersonalizationClient({
89-
appId: personalizationAppId,
90-
apiKey: personalizationApiKey,
91-
region,
92-
...personalizationOptions,
147+
...initOptions.options,
93148
...commonOptions,
149+
appId: initOptions.appId ?? appId,
150+
apiKey: initOptions.apiKey ?? apiKey,
151+
region: initOptions.region,
94152
});
95153
}
96154

97155
return {
98156
...createSearchClient({ appId, apiKey, ...commonOptions }),
99157
initAnalytics,
100158
initPersonalization,
159+
initAbtesting,
101160
};
102161
}

clients/algoliasearch-client-javascript/packages/algoliasearch/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@
5858
"test": "jest"
5959
},
6060
"dependencies": {
61+
"@experimental-api-clients-automation/client-abtesting": "0.8.0",
6162
"@experimental-api-clients-automation/client-analytics": "0.8.0",
6263
"@experimental-api-clients-automation/client-common": "0.8.0",
6364
"@experimental-api-clients-automation/client-personalization": "0.8.0",

0 commit comments

Comments
 (0)