Skip to content

Commit 7189cbe

Browse files
authoredAug 28, 2024··
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

+1-4
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

+6-2
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

+6-2
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({
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

+25-2
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

+19-23
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

+10-29
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+
}
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

+13-17
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
*/

‎templates/javascript/clients/package.mustache

+3-6
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
"default": "./dist/{{packageName}}.cjs",
2424
"types": "./dist/builds/node.d.ts"
2525
},
26-
"default": {
26+
"browser": {
2727
"umd": "./dist/{{packageName}}.umd.js",
2828
"module": "./dist/{{packageName}}.esm.browser.js",
2929
"import": "./dist/{{packageName}}.esm.browser.js",
@@ -66,15 +66,14 @@
6666
},
6767
"exports": {
6868
".": {
69-
"types": "./index.d.ts",
7069
"node": {
7170
"import": "./dist/algoliasearch.esm.node.js",
7271
"module": "./dist/algoliasearch.esm.node.js",
7372
"require": "./dist/algoliasearch.cjs",
7473
"default": "./dist/algoliasearch.cjs",
7574
"types": "./dist/algoliasearch/builds/node.d.ts"
7675
},
77-
"default": {
76+
"browser": {
7877
"umd": "./dist/algoliasearch.umd.js",
7978
"module": "./dist/algoliasearch.esm.browser.js",
8079
"import": "./dist/algoliasearch.esm.browser.js",
@@ -83,15 +82,14 @@
8382
}
8483
},
8584
"./lite": {
86-
"types": "./lite.d.ts",
8785
"node": {
8886
"import": "./dist/lite/lite.esm.node.js",
8987
"module": "./dist/lite/lite.esm.node.js",
9088
"require": "./dist/lite/lite.cjs",
9189
"default": "./dist/lite/lite.cjs",
9290
"types": "./dist/lite/builds/node.d.ts"
9391
},
94-
"default": {
92+
"browser": {
9593
"umd": "./dist/lite/lite.umd.js",
9694
"module": "./dist/lite/lite.esm.browser.js",
9795
"import": "./dist/lite/lite.esm.browser.js",
@@ -118,7 +116,6 @@
118116
"@algolia/client-analytics": "{{analyticsVersion}}",
119117
"@algolia/client-abtesting": "{{abtestingVersion}}",
120118
"@algolia/client-personalization": "{{personalizationVersion}}",
121-
"@algolia/recommend": "{{recommendVersion}}",
122119
"@algolia/client-search": "{{searchVersion}}",
123120
"@algolia/client-common": "{{utilsPackageVersion}}",
124121
"@algolia/recommend": "{{recommendVersion}}",

‎tests/output/javascript/yarn.lock

+2-18
Original file line numberDiff line numberDiff line change
@@ -923,7 +923,7 @@ __metadata:
923923
languageName: node
924924
linkType: hard
925925

926-
"@types/node@npm:*":
926+
"@types/node@npm:*, @types/node@npm:22.5.0":
927927
version: 22.5.0
928928
resolution: "@types/node@npm:22.5.0"
929929
dependencies:
@@ -932,15 +932,6 @@ __metadata:
932932
languageName: node
933933
linkType: hard
934934

935-
"@types/node@npm:22.2.0":
936-
version: 22.2.0
937-
resolution: "@types/node@npm:22.2.0"
938-
dependencies:
939-
undici-types: "npm:~6.13.0"
940-
checksum: 10/2957c5c81f1a07a1210f28382adae65c11070c301e395fa819448516f1a2a710054b29e0ec7d8e28624afbcd90dae810403a497109545dea835b554fc76edf6c
941-
languageName: node
942-
linkType: hard
943-
944935
"@types/stack-utils@npm:^2.0.0":
945936
version: 2.0.3
946937
resolution: "@types/stack-utils@npm:2.0.3"
@@ -2065,7 +2056,7 @@ __metadata:
20652056
"@algolia/recommend": "link:../../../clients/algoliasearch-client-javascript/packages/recommend"
20662057
"@algolia/requester-node-http": "link:../../../clients/algoliasearch-client-javascript/packages/requester-node-http"
20672058
"@types/jest": "npm:29.5.12"
2068-
"@types/node": "npm:22.2.0"
2059+
"@types/node": "npm:22.5.0"
20692060
algoliasearch: "link:../../../clients/algoliasearch-client-javascript/packages/algoliasearch"
20702061
dotenv: "npm:16.4.5"
20712062
jest: "npm:29.7.0"
@@ -3460,13 +3451,6 @@ __metadata:
34603451
languageName: node
34613452
linkType: hard
34623453

3463-
"undici-types@npm:~6.13.0":
3464-
version: 6.13.0
3465-
resolution: "undici-types@npm:6.13.0"
3466-
checksum: 10/da52e37cbc6da3a75da86fa08dd795ca8924430deb91005eb884b840e46e19013ccd4c1c289f70018e8cf0c338add24a500e7c3acfcd49b1ffb27ff9f91e38b9
3467-
languageName: node
3468-
linkType: hard
3469-
34703454
"undici-types@npm:~6.19.2":
34713455
version: 6.19.8
34723456
resolution: "undici-types@npm:6.19.8"

0 commit comments

Comments
 (0)
Please sign in to comment.