Skip to content

Commit 7189cbe

Browse files
authored
fix(javascript): dependency imports and low-level init (#3596)
1 parent 86891f6 commit 7189cbe

File tree

11 files changed

+107
-155
lines changed

11 files changed

+107
-155
lines changed

clients/algoliasearch-client-javascript/base.rollup.config.js

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import babel from '@rollup/plugin-babel';
22
import { nodeResolve } from '@rollup/plugin-node-resolve';
3-
import globals from 'rollup-plugin-node-globals';
43
import terser from '@rollup/plugin-terser';
54
import ts from 'rollup-plugin-typescript2';
65

@@ -271,11 +270,9 @@ export function buildConfigs(pkg) {
271270
input: baseConfig.input,
272271
external: [...baseConfig.external, ...baseConfig.dependencies],
273272
plugins: [
274-
globals({
275-
global: true,
276-
}),
277273
nodeResolve({
278274
preferBuiltins: true,
275+
exportConditions: [isUmdBuild || isEsmBrowserBuild ? 'browser' : 'node'],
279276
}),
280277
ts({
281278
check: checkForTypes,

clients/algoliasearch-client-javascript/packages/algoliasearch/__tests__/algoliasearch.browser.test.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -145,10 +145,11 @@ describe('api', () => {
145145
});
146146

147147
it('default `init` clients to the root `algoliasearch` credentials', async () => {
148-
const abtestingClient = client.initAbtesting();
149-
const analyticsClient = client.initAnalytics();
148+
const abtestingClient = client.initAbtesting({ options: { requester: echoRequester() } });
149+
const analyticsClient = client.initAnalytics({ options: { requester: echoRequester() } });
150150
const personalizationClient = client.initPersonalization({
151151
region: 'eu',
152+
options: { requester: echoRequester() },
152153
});
153154

154155
const res1 = (await abtestingClient.customGet({
@@ -185,15 +186,18 @@ describe('api', () => {
185186
const abtestingClient = client.initAbtesting({
186187
appId: 'appId1',
187188
apiKey: 'apiKey1',
189+
options: { requester: echoRequester() },
188190
});
189191
const analyticsClient = client.initAnalytics({
190192
appId: 'appId2',
191193
apiKey: 'apiKey2',
194+
options: { requester: echoRequester() },
192195
});
193196
const personalizationClient = client.initPersonalization({
194197
appId: 'appId3',
195198
apiKey: 'apiKey3',
196199
region: 'eu',
200+
options: { requester: echoRequester() },
197201
});
198202

199203
const res1 = (await abtestingClient.customGet({

clients/algoliasearch-client-javascript/packages/algoliasearch/__tests__/algoliasearch.node.test.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -144,10 +144,11 @@ describe('api', () => {
144144
});
145145

146146
it('default `init` clients to the root `algoliasearch` credentials', async () => {
147-
const abtestingClient = client.initAbtesting();
148-
const analyticsClient = client.initAnalytics();
147+
const abtestingClient = client.initAbtesting({ options: { requester: echoRequester() } });
148+
const analyticsClient = client.initAnalytics({ options: { requester: echoRequester() } });
149149
const personalizationClient = client.initPersonalization({
150150
region: 'eu',
151+
options: { requester: echoRequester() },
151152
});
152153

153154
const res1 = (await abtestingClient.customGet({
@@ -184,15 +185,18 @@ describe('api', () => {
184185
const abtestingClient = client.initAbtesting({
185186
appId: 'appId1',
186187
apiKey: 'apiKey1',
188+
options: { requester: echoRequester() },
187189
});
188190
const analyticsClient = client.initAnalytics({
189191
appId: 'appId2',
190192
apiKey: 'apiKey2',
193+
options: { requester: echoRequester() },
191194
});
192195
const personalizationClient = client.initPersonalization({
193196
appId: 'appId3',
194197
apiKey: 'apiKey3',
195198
region: 'eu',
199+
options: { requester: echoRequester() },
196200
});
197201

198202
const res1 = (await abtestingClient.customGet({
Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,24 @@
1-
/** @type {import('jest').Config} */
2-
module.exports = {
1+
/** @type {import('jest').Config.InitialOptions} */
2+
const baseConfig = {
3+
preset: 'ts-jest',
34
roots: ['__tests__'],
45
moduleDirectories: ['../../node_modules'],
56
transform: {
67
"\\.[jt]sx?$": "babel-jest",
78
}
89
};
10+
/** @type {import('jest').Config} */
11+
module.exports = {
12+
projects: [
13+
{
14+
...baseConfig,
15+
testEnvironment: 'jsdom',
16+
testPathIgnorePatterns: [ '__tests__/algoliasearch.node.test.ts' ],
17+
},
18+
{
19+
...baseConfig,
20+
testEnvironment: 'node',
21+
testPathIgnorePatterns: [ '__tests__/algoliasearch.browser.test.ts' ],
22+
},
23+
],
24+
};

clients/algoliasearch-client-javascript/yarn.lock

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -250,7 +250,19 @@ __metadata:
250250
languageName: node
251251
linkType: hard
252252

253-
"@babel/generator@npm:^7.25.0, @babel/generator@npm:^7.25.4, @babel/generator@npm:^7.7.2":
253+
"@babel/generator@npm:^7.25.0, @babel/generator@npm:^7.7.2":
254+
version: 7.25.0
255+
resolution: "@babel/generator@npm:7.25.0"
256+
dependencies:
257+
"@babel/types": "npm:^7.25.0"
258+
"@jridgewell/gen-mapping": "npm:^0.3.5"
259+
"@jridgewell/trace-mapping": "npm:^0.3.25"
260+
jsesc: "npm:^2.5.1"
261+
checksum: 10/de3ce2ae7aa0c9585260556ca5a81ce2ce6b8269e3260d7bb4e47a74661af715184ca6343e9906c22e4dd3eed5ce39977dfaf6cded4d2d8968fa096c7cf66697
262+
languageName: node
263+
linkType: hard
264+
265+
"@babel/generator@npm:^7.25.4":
254266
version: 7.25.5
255267
resolution: "@babel/generator@npm:7.25.5"
256268
dependencies:
@@ -1583,7 +1595,18 @@ __metadata:
15831595
languageName: node
15841596
linkType: hard
15851597

1586-
"@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.24.7, @babel/types@npm:^7.24.8, @babel/types@npm:^7.25.0, @babel/types@npm:^7.25.2, @babel/types@npm:^7.25.4, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4":
1598+
"@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.24.7, @babel/types@npm:^7.24.8, @babel/types@npm:^7.25.0, @babel/types@npm:^7.25.2, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4":
1599+
version: 7.25.2
1600+
resolution: "@babel/types@npm:7.25.2"
1601+
dependencies:
1602+
"@babel/helper-string-parser": "npm:^7.24.8"
1603+
"@babel/helper-validator-identifier": "npm:^7.24.7"
1604+
to-fast-properties: "npm:^2.0.0"
1605+
checksum: 10/ccf5399db1dcd6dd87b84a6f7bc8dd241e04a326f4f038c973c26ccb69cd360c8f2276603f584c58fd94da95229313060b27baceb0d9b18a435742d3f616afd1
1606+
languageName: node
1607+
linkType: hard
1608+
1609+
"@babel/types@npm:^7.25.4":
15871610
version: 7.25.4
15881611
resolution: "@babel/types@npm:7.25.4"
15891612
dependencies:

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

Lines changed: 19 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -3,32 +3,28 @@
33
import type { InitClientOptions, InitClientRegion } from "./models"
44

55
{{> algoliasearch/builds/definition}}
6-
const commonOptions: CreateClientOptions = {
7-
apiKey,
8-
appId,
9-
timeouts: {
10-
connect: DEFAULT_CONNECT_TIMEOUT_BROWSER,
11-
read: DEFAULT_READ_TIMEOUT_BROWSER,
12-
write: DEFAULT_WRITE_TIMEOUT_BROWSER,
13-
},
14-
requester: createXhrRequester(),
15-
algoliaAgents: [{ segment: 'Browser' }],
16-
authMode: 'WithinQueryParameters',
17-
responsesCache: createMemoryCache(),
18-
requestsCache: createMemoryCache({ serializable: false }),
19-
hostsCache: createFallbackableCache({
20-
caches: [
21-
createBrowserLocalStorageCache({ key: `${apiClientVersion}-${appId}` }),
22-
createMemoryCache(),
23-
],
24-
}),
25-
...options,
26-
};
27-
286
{{> algoliasearch/builds/initClients}}
297

308
return {
31-
...createSearchClient(commonOptions),
9+
...searchClient(appId, apiKey, {
10+
timeouts: {
11+
connect: DEFAULT_CONNECT_TIMEOUT_BROWSER,
12+
read: DEFAULT_READ_TIMEOUT_BROWSER,
13+
write: DEFAULT_WRITE_TIMEOUT_BROWSER,
14+
},
15+
requester: createXhrRequester(),
16+
algoliaAgents: [{ segment: 'Browser' }],
17+
authMode: 'WithinQueryParameters',
18+
responsesCache: createMemoryCache(),
19+
requestsCache: createMemoryCache({ serializable: false }),
20+
hostsCache: createFallbackableCache({
21+
caches: [
22+
createBrowserLocalStorageCache({ key: `${apiClientVersion}-${appId}` }),
23+
createMemoryCache(),
24+
],
25+
}),
26+
...options,
27+
}),
3228
/**
3329
* Get the value of the `algoliaAgent`, used by our libraries internally and telemetry system.
3430
*/

templates/javascript/clients/algoliasearch/builds/definition.mustache

Lines changed: 10 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -15,37 +15,18 @@ import {
1515
createNullCache,
1616
serializeQueryParameters,
1717
} from '@algolia/client-common';
18-
import type { AbtestingClient } from '@algolia/client-abtesting';
19-
import type { Region as AbtestingRegion } from '@algolia/client-abtesting/src/abtestingClient';
20-
import {
21-
createAbtestingClient,
22-
REGIONS as abtestingRegions,
23-
} from '@algolia/client-abtesting/src/abtestingClient';
24-
import type { AnalyticsClient } from '@algolia/client-analytics';
25-
import {
26-
createAnalyticsClient,
27-
REGIONS as analyticsRegions,
28-
} from '@algolia/client-analytics/src/analyticsClient';
29-
import type { Region as AnalyticsRegion } from '@algolia/client-analytics/src/analyticsClient';
30-
import type {
31-
ClientOptions,
32-
CreateClientOptions,
33-
} from '@algolia/client-common';
34-
import type { PersonalizationClient } from '@algolia/client-personalization';
35-
import type { Region as PersonalizationRegion } from '@algolia/client-personalization/src/personalizationClient';
36-
import {
37-
createPersonalizationClient,
38-
REGIONS as personalizationRegions,
39-
} from '@algolia/client-personalization/src/personalizationClient';
40-
import {
41-
createSearchClient,
42-
apiClientVersion as searchClientVersion,
43-
} from '@algolia/client-search/src/searchClient';
44-
import type { RecommendClient } from '@algolia/recommend';
45-
import { createRecommendClient } from '@algolia/recommend/src/recommendClient';
18+
19+
import type { ClientOptions } from '@algolia/client-common';
20+
4621
import { createXhrRequester } from '@algolia/requester-browser-xhr';
4722
import { createHttpRequester } from '@algolia/requester-node-http';
4823

24+
import { AbtestingClient, Region as AbtestingRegion, abtestingClient } from '@algolia/client-abtesting';
25+
import { AnalyticsClient, Region as AnalyticsRegion, analyticsClient } from '@algolia/client-analytics';
26+
import { PersonalizationClient, Region as PersonalizationRegion, personalizationClient } from '@algolia/client-personalization';
27+
import { searchClient, apiClientVersion as searchClientVersion } from '@algolia/client-search';
28+
import { RecommendClient, recommendClient } from '@algolia/recommend';
29+
4930
import type {
5031
InitClientOptions,
5132
InitClientRegion,
@@ -74,4 +55,4 @@ export function algoliasearch(
7455

7556
if (!apiKey || typeof apiKey !== 'string') {
7657
throw new Error('`apiKey` is missing.');
77-
}
58+
}
Lines changed: 4 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,61 +1,15 @@
11
function initRecommend(initOptions: InitClientOptions = {}): RecommendClient {
2-
return createRecommendClient({
3-
...commonOptions,
4-
...initOptions.options,
5-
...initOptions,
6-
});
2+
return recommendClient(initOptions.appId || appId, initOptions.apiKey ||apiKey, initOptions.options);
73
}
84

95
function initAnalytics(initOptions: InitClientOptions & InitClientRegion<AnalyticsRegion> = {}): AnalyticsClient {
10-
if (
11-
initOptions.region &&
12-
(typeof initOptions.region !== 'string' ||
13-
!analyticsRegions.includes(initOptions.region))
14-
) {
15-
throw new Error(
16-
`\`region\` must be one of the following: ${analyticsRegions.join(', ')}`
17-
);
18-
}
19-
20-
return createAnalyticsClient({
21-
...commonOptions,
22-
...initOptions.options,
23-
...initOptions,
24-
});
6+
return analyticsClient(initOptions.appId || appId, initOptions.apiKey ||apiKey, initOptions.region, initOptions.options);
257
}
268

279
function initAbtesting(initOptions: InitClientOptions & InitClientRegion<AbtestingRegion> = {}): AbtestingClient {
28-
if (
29-
initOptions.region &&
30-
(typeof initOptions.region !== 'string' ||
31-
!abtestingRegions.includes(initOptions.region))
32-
) {
33-
throw new Error(
34-
`\`region\` must be one of the following: ${abtestingRegions.join(', ')}`
35-
);
36-
}
37-
38-
return createAbtestingClient({
39-
...commonOptions,
40-
...initOptions.options,
41-
...initOptions,
42-
});
10+
return abtestingClient(initOptions.appId || appId, initOptions.apiKey ||apiKey, initOptions.region, initOptions.options);
4311
}
4412

4513
function initPersonalization(initOptions: InitClientOptions & Required<InitClientRegion<PersonalizationRegion>>): PersonalizationClient {
46-
if (
47-
!initOptions.region || (initOptions.region &&
48-
(typeof initOptions.region !== 'string' ||
49-
!personalizationRegions.includes(initOptions.region)))
50-
) {
51-
throw new Error(
52-
`\`region\` is required and must be one of the following: ${personalizationRegions.join(', ')}`
53-
);
54-
}
55-
56-
return createPersonalizationClient({
57-
...commonOptions,
58-
...initOptions.options,
59-
...initOptions,
60-
});
14+
return personalizationClient(initOptions.appId || appId, initOptions.apiKey ||apiKey, initOptions.region, initOptions.options);
6115
}

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

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,26 +3,22 @@
33
import type { InitClientOptions, InitClientRegion {{#nodeSearchHelpers}}, GenerateSecuredApiKeyOptions, GetSecuredApiKeyRemainingValidityOptions {{/nodeSearchHelpers}} } from "./models"
44

55
{{> algoliasearch/builds/definition}}
6-
const commonOptions: CreateClientOptions = {
7-
apiKey,
8-
appId,
9-
timeouts: {
10-
connect: DEFAULT_CONNECT_TIMEOUT_NODE,
11-
read: DEFAULT_READ_TIMEOUT_NODE,
12-
write: DEFAULT_WRITE_TIMEOUT_NODE,
13-
},
14-
requester: createHttpRequester(),
15-
algoliaAgents: [{ segment: 'Node.js', version: process.versions.node }],
16-
responsesCache: createNullCache(),
17-
requestsCache: createNullCache(),
18-
hostsCache: createMemoryCache(),
19-
...options,
20-
};
21-
226
{{> algoliasearch/builds/initClients}}
237

248
return {
25-
...createSearchClient(commonOptions),
9+
...searchClient(appId, apiKey, {
10+
timeouts: {
11+
connect: DEFAULT_CONNECT_TIMEOUT_NODE,
12+
read: DEFAULT_READ_TIMEOUT_NODE,
13+
write: DEFAULT_WRITE_TIMEOUT_NODE,
14+
},
15+
requester: createHttpRequester(),
16+
algoliaAgents: [{ segment: 'Node.js', version: process.versions.node }],
17+
responsesCache: createNullCache(),
18+
requestsCache: createNullCache(),
19+
hostsCache: createMemoryCache(),
20+
...options,
21+
}),
2622
/**
2723
* Get the value of the `algoliaAgent`, used by our libraries internally and telemetry system.
2824
*/

0 commit comments

Comments
 (0)