diff --git a/clients/algoliasearch-client-javascript/base.rollup.config.js b/clients/algoliasearch-client-javascript/base.rollup.config.js index 4bb7f57886..71ac2954ef 100644 --- a/clients/algoliasearch-client-javascript/base.rollup.config.js +++ b/clients/algoliasearch-client-javascript/base.rollup.config.js @@ -1,6 +1,5 @@ import babel from '@rollup/plugin-babel'; import { nodeResolve } from '@rollup/plugin-node-resolve'; -import globals from 'rollup-plugin-node-globals'; import terser from '@rollup/plugin-terser'; import ts from 'rollup-plugin-typescript2'; @@ -271,11 +270,9 @@ export function buildConfigs(pkg) { input: baseConfig.input, external: [...baseConfig.external, ...baseConfig.dependencies], plugins: [ - globals({ - global: true, - }), nodeResolve({ preferBuiltins: true, + exportConditions: [isUmdBuild || isEsmBrowserBuild ? 'browser' : 'node'], }), ts({ check: checkForTypes, diff --git a/clients/algoliasearch-client-javascript/packages/algoliasearch/__tests__/algoliasearch.browser.test.ts b/clients/algoliasearch-client-javascript/packages/algoliasearch/__tests__/algoliasearch.browser.test.ts index 6e500a4fb1..f45779b9b7 100644 --- a/clients/algoliasearch-client-javascript/packages/algoliasearch/__tests__/algoliasearch.browser.test.ts +++ b/clients/algoliasearch-client-javascript/packages/algoliasearch/__tests__/algoliasearch.browser.test.ts @@ -145,10 +145,11 @@ describe('api', () => { }); it('default `init` clients to the root `algoliasearch` credentials', async () => { - const abtestingClient = client.initAbtesting(); - const analyticsClient = client.initAnalytics(); + const abtestingClient = client.initAbtesting({ options: { requester: echoRequester() } }); + const analyticsClient = client.initAnalytics({ options: { requester: echoRequester() } }); const personalizationClient = client.initPersonalization({ region: 'eu', + options: { requester: echoRequester() }, }); const res1 = (await abtestingClient.customGet({ @@ -185,15 +186,18 @@ describe('api', () => { const abtestingClient = client.initAbtesting({ appId: 'appId1', apiKey: 'apiKey1', + options: { requester: echoRequester() }, }); const analyticsClient = client.initAnalytics({ appId: 'appId2', apiKey: 'apiKey2', + options: { requester: echoRequester() }, }); const personalizationClient = client.initPersonalization({ appId: 'appId3', apiKey: 'apiKey3', region: 'eu', + options: { requester: echoRequester() }, }); const res1 = (await abtestingClient.customGet({ diff --git a/clients/algoliasearch-client-javascript/packages/algoliasearch/__tests__/algoliasearch.node.test.ts b/clients/algoliasearch-client-javascript/packages/algoliasearch/__tests__/algoliasearch.node.test.ts index 162d65233c..42a6f38a3b 100644 --- a/clients/algoliasearch-client-javascript/packages/algoliasearch/__tests__/algoliasearch.node.test.ts +++ b/clients/algoliasearch-client-javascript/packages/algoliasearch/__tests__/algoliasearch.node.test.ts @@ -144,10 +144,11 @@ describe('api', () => { }); it('default `init` clients to the root `algoliasearch` credentials', async () => { - const abtestingClient = client.initAbtesting(); - const analyticsClient = client.initAnalytics(); + const abtestingClient = client.initAbtesting({ options: { requester: echoRequester() } }); + const analyticsClient = client.initAnalytics({ options: { requester: echoRequester() } }); const personalizationClient = client.initPersonalization({ region: 'eu', + options: { requester: echoRequester() }, }); const res1 = (await abtestingClient.customGet({ @@ -184,15 +185,18 @@ describe('api', () => { const abtestingClient = client.initAbtesting({ appId: 'appId1', apiKey: 'apiKey1', + options: { requester: echoRequester() }, }); const analyticsClient = client.initAnalytics({ appId: 'appId2', apiKey: 'apiKey2', + options: { requester: echoRequester() }, }); const personalizationClient = client.initPersonalization({ appId: 'appId3', apiKey: 'apiKey3', region: 'eu', + options: { requester: echoRequester() }, }); const res1 = (await abtestingClient.customGet({ diff --git a/clients/algoliasearch-client-javascript/packages/algoliasearch/jest.config.cjs b/clients/algoliasearch-client-javascript/packages/algoliasearch/jest.config.cjs index 02c3447437..0f867cf71e 100644 --- a/clients/algoliasearch-client-javascript/packages/algoliasearch/jest.config.cjs +++ b/clients/algoliasearch-client-javascript/packages/algoliasearch/jest.config.cjs @@ -1,8 +1,24 @@ -/** @type {import('jest').Config} */ -module.exports = { +/** @type {import('jest').Config.InitialOptions} */ +const baseConfig = { + preset: 'ts-jest', roots: ['__tests__'], moduleDirectories: ['../../node_modules'], transform: { "\\.[jt]sx?$": "babel-jest", } }; +/** @type {import('jest').Config} */ +module.exports = { + projects: [ + { + ...baseConfig, + testEnvironment: 'jsdom', + testPathIgnorePatterns: [ '__tests__/algoliasearch.node.test.ts' ], + }, + { + ...baseConfig, + testEnvironment: 'node', + testPathIgnorePatterns: [ '__tests__/algoliasearch.browser.test.ts' ], + }, + ], +}; diff --git a/clients/algoliasearch-client-javascript/yarn.lock b/clients/algoliasearch-client-javascript/yarn.lock index 8d6ec74fa4..8a5c1733f9 100644 --- a/clients/algoliasearch-client-javascript/yarn.lock +++ b/clients/algoliasearch-client-javascript/yarn.lock @@ -250,7 +250,19 @@ __metadata: languageName: node linkType: hard -"@babel/generator@npm:^7.25.0, @babel/generator@npm:^7.25.4, @babel/generator@npm:^7.7.2": +"@babel/generator@npm:^7.25.0, @babel/generator@npm:^7.7.2": + version: 7.25.0 + resolution: "@babel/generator@npm:7.25.0" + dependencies: + "@babel/types": "npm:^7.25.0" + "@jridgewell/gen-mapping": "npm:^0.3.5" + "@jridgewell/trace-mapping": "npm:^0.3.25" + jsesc: "npm:^2.5.1" + checksum: 10/de3ce2ae7aa0c9585260556ca5a81ce2ce6b8269e3260d7bb4e47a74661af715184ca6343e9906c22e4dd3eed5ce39977dfaf6cded4d2d8968fa096c7cf66697 + languageName: node + linkType: hard + +"@babel/generator@npm:^7.25.4": version: 7.25.5 resolution: "@babel/generator@npm:7.25.5" dependencies: @@ -1583,7 +1595,18 @@ __metadata: languageName: node linkType: hard -"@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": +"@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": + version: 7.25.2 + resolution: "@babel/types@npm:7.25.2" + dependencies: + "@babel/helper-string-parser": "npm:^7.24.8" + "@babel/helper-validator-identifier": "npm:^7.24.7" + to-fast-properties: "npm:^2.0.0" + checksum: 10/ccf5399db1dcd6dd87b84a6f7bc8dd241e04a326f4f038c973c26ccb69cd360c8f2276603f584c58fd94da95229313060b27baceb0d9b18a435742d3f616afd1 + languageName: node + linkType: hard + +"@babel/types@npm:^7.25.4": version: 7.25.4 resolution: "@babel/types@npm:7.25.4" dependencies: diff --git a/templates/javascript/clients/algoliasearch/builds/browser.mustache b/templates/javascript/clients/algoliasearch/builds/browser.mustache index 31118bf6e7..ebac9125f7 100644 --- a/templates/javascript/clients/algoliasearch/builds/browser.mustache +++ b/templates/javascript/clients/algoliasearch/builds/browser.mustache @@ -3,32 +3,28 @@ import type { InitClientOptions, InitClientRegion } from "./models" {{> algoliasearch/builds/definition}} - const commonOptions: CreateClientOptions = { - apiKey, - appId, - timeouts: { - connect: DEFAULT_CONNECT_TIMEOUT_BROWSER, - read: DEFAULT_READ_TIMEOUT_BROWSER, - write: DEFAULT_WRITE_TIMEOUT_BROWSER, - }, - requester: createXhrRequester(), - algoliaAgents: [{ segment: 'Browser' }], - authMode: 'WithinQueryParameters', - responsesCache: createMemoryCache(), - requestsCache: createMemoryCache({ serializable: false }), - hostsCache: createFallbackableCache({ - caches: [ - createBrowserLocalStorageCache({ key: `${apiClientVersion}-${appId}` }), - createMemoryCache(), - ], - }), - ...options, - }; - {{> algoliasearch/builds/initClients}} return { - ...createSearchClient(commonOptions), + ...searchClient(appId, apiKey, { + timeouts: { + connect: DEFAULT_CONNECT_TIMEOUT_BROWSER, + read: DEFAULT_READ_TIMEOUT_BROWSER, + write: DEFAULT_WRITE_TIMEOUT_BROWSER, + }, + requester: createXhrRequester(), + algoliaAgents: [{ segment: 'Browser' }], + authMode: 'WithinQueryParameters', + responsesCache: createMemoryCache(), + requestsCache: createMemoryCache({ serializable: false }), + hostsCache: createFallbackableCache({ + caches: [ + createBrowserLocalStorageCache({ key: `${apiClientVersion}-${appId}` }), + createMemoryCache(), + ], + }), + ...options, + }), /** * Get the value of the `algoliaAgent`, used by our libraries internally and telemetry system. */ diff --git a/templates/javascript/clients/algoliasearch/builds/definition.mustache b/templates/javascript/clients/algoliasearch/builds/definition.mustache index a9d013dbb1..3ffebaeade 100644 --- a/templates/javascript/clients/algoliasearch/builds/definition.mustache +++ b/templates/javascript/clients/algoliasearch/builds/definition.mustache @@ -15,37 +15,18 @@ import { createNullCache, serializeQueryParameters, } from '@algolia/client-common'; -import type { AbtestingClient } from '@algolia/client-abtesting'; -import type { Region as AbtestingRegion } from '@algolia/client-abtesting/src/abtestingClient'; -import { - createAbtestingClient, - REGIONS as abtestingRegions, -} from '@algolia/client-abtesting/src/abtestingClient'; -import type { AnalyticsClient } from '@algolia/client-analytics'; -import { - createAnalyticsClient, - REGIONS as analyticsRegions, -} from '@algolia/client-analytics/src/analyticsClient'; -import type { Region as AnalyticsRegion } from '@algolia/client-analytics/src/analyticsClient'; -import type { - ClientOptions, - CreateClientOptions, -} from '@algolia/client-common'; -import type { PersonalizationClient } from '@algolia/client-personalization'; -import type { Region as PersonalizationRegion } from '@algolia/client-personalization/src/personalizationClient'; -import { - createPersonalizationClient, - REGIONS as personalizationRegions, -} from '@algolia/client-personalization/src/personalizationClient'; -import { - createSearchClient, - apiClientVersion as searchClientVersion, -} from '@algolia/client-search/src/searchClient'; -import type { RecommendClient } from '@algolia/recommend'; -import { createRecommendClient } from '@algolia/recommend/src/recommendClient'; + +import type { ClientOptions } from '@algolia/client-common'; + import { createXhrRequester } from '@algolia/requester-browser-xhr'; import { createHttpRequester } from '@algolia/requester-node-http'; +import { AbtestingClient, Region as AbtestingRegion, abtestingClient } from '@algolia/client-abtesting'; +import { AnalyticsClient, Region as AnalyticsRegion, analyticsClient } from '@algolia/client-analytics'; +import { PersonalizationClient, Region as PersonalizationRegion, personalizationClient } from '@algolia/client-personalization'; +import { searchClient, apiClientVersion as searchClientVersion } from '@algolia/client-search'; +import { RecommendClient, recommendClient } from '@algolia/recommend'; + import type { InitClientOptions, InitClientRegion, @@ -74,4 +55,4 @@ export function algoliasearch( if (!apiKey || typeof apiKey !== 'string') { throw new Error('`apiKey` is missing.'); - } \ No newline at end of file + } diff --git a/templates/javascript/clients/algoliasearch/builds/initClients.mustache b/templates/javascript/clients/algoliasearch/builds/initClients.mustache index d2eb88176c..fc4df266ed 100644 --- a/templates/javascript/clients/algoliasearch/builds/initClients.mustache +++ b/templates/javascript/clients/algoliasearch/builds/initClients.mustache @@ -1,61 +1,15 @@ function initRecommend(initOptions: InitClientOptions = {}): RecommendClient { - return createRecommendClient({ - ...commonOptions, - ...initOptions.options, - ...initOptions, - }); + return recommendClient(initOptions.appId || appId, initOptions.apiKey ||apiKey, initOptions.options); } function initAnalytics(initOptions: InitClientOptions & InitClientRegion = {}): AnalyticsClient { - if ( - initOptions.region && - (typeof initOptions.region !== 'string' || - !analyticsRegions.includes(initOptions.region)) - ) { - throw new Error( - `\`region\` must be one of the following: ${analyticsRegions.join(', ')}` - ); - } - - return createAnalyticsClient({ - ...commonOptions, - ...initOptions.options, - ...initOptions, - }); + return analyticsClient(initOptions.appId || appId, initOptions.apiKey ||apiKey, initOptions.region, initOptions.options); } function initAbtesting(initOptions: InitClientOptions & InitClientRegion = {}): AbtestingClient { - if ( - initOptions.region && - (typeof initOptions.region !== 'string' || - !abtestingRegions.includes(initOptions.region)) - ) { - throw new Error( - `\`region\` must be one of the following: ${abtestingRegions.join(', ')}` - ); - } - - return createAbtestingClient({ - ...commonOptions, - ...initOptions.options, - ...initOptions, - }); + return abtestingClient(initOptions.appId || appId, initOptions.apiKey ||apiKey, initOptions.region, initOptions.options); } function initPersonalization(initOptions: InitClientOptions & Required>): PersonalizationClient { - if ( - !initOptions.region || (initOptions.region && - (typeof initOptions.region !== 'string' || - !personalizationRegions.includes(initOptions.region))) - ) { - throw new Error( - `\`region\` is required and must be one of the following: ${personalizationRegions.join(', ')}` - ); - } - - return createPersonalizationClient({ - ...commonOptions, - ...initOptions.options, - ...initOptions, - }); + return personalizationClient(initOptions.appId || appId, initOptions.apiKey ||apiKey, initOptions.region, initOptions.options); } \ No newline at end of file diff --git a/templates/javascript/clients/algoliasearch/builds/node.mustache b/templates/javascript/clients/algoliasearch/builds/node.mustache index 67d4347c16..043377f765 100644 --- a/templates/javascript/clients/algoliasearch/builds/node.mustache +++ b/templates/javascript/clients/algoliasearch/builds/node.mustache @@ -3,26 +3,22 @@ import type { InitClientOptions, InitClientRegion {{#nodeSearchHelpers}}, GenerateSecuredApiKeyOptions, GetSecuredApiKeyRemainingValidityOptions {{/nodeSearchHelpers}} } from "./models" {{> algoliasearch/builds/definition}} - const commonOptions: CreateClientOptions = { - apiKey, - appId, - timeouts: { - connect: DEFAULT_CONNECT_TIMEOUT_NODE, - read: DEFAULT_READ_TIMEOUT_NODE, - write: DEFAULT_WRITE_TIMEOUT_NODE, - }, - requester: createHttpRequester(), - algoliaAgents: [{ segment: 'Node.js', version: process.versions.node }], - responsesCache: createNullCache(), - requestsCache: createNullCache(), - hostsCache: createMemoryCache(), - ...options, - }; - {{> algoliasearch/builds/initClients}} return { - ...createSearchClient(commonOptions), + ...searchClient(appId, apiKey, { + timeouts: { + connect: DEFAULT_CONNECT_TIMEOUT_NODE, + read: DEFAULT_READ_TIMEOUT_NODE, + write: DEFAULT_WRITE_TIMEOUT_NODE, + }, + requester: createHttpRequester(), + algoliaAgents: [{ segment: 'Node.js', version: process.versions.node }], + responsesCache: createNullCache(), + requestsCache: createNullCache(), + hostsCache: createMemoryCache(), + ...options, + }), /** * Get the value of the `algoliaAgent`, used by our libraries internally and telemetry system. */ diff --git a/templates/javascript/clients/package.mustache b/templates/javascript/clients/package.mustache index 7d81fc50f3..f07b39f7f7 100644 --- a/templates/javascript/clients/package.mustache +++ b/templates/javascript/clients/package.mustache @@ -23,7 +23,7 @@ "default": "./dist/{{packageName}}.cjs", "types": "./dist/builds/node.d.ts" }, - "default": { + "browser": { "umd": "./dist/{{packageName}}.umd.js", "module": "./dist/{{packageName}}.esm.browser.js", "import": "./dist/{{packageName}}.esm.browser.js", @@ -66,7 +66,6 @@ }, "exports": { ".": { - "types": "./index.d.ts", "node": { "import": "./dist/algoliasearch.esm.node.js", "module": "./dist/algoliasearch.esm.node.js", @@ -74,7 +73,7 @@ "default": "./dist/algoliasearch.cjs", "types": "./dist/algoliasearch/builds/node.d.ts" }, - "default": { + "browser": { "umd": "./dist/algoliasearch.umd.js", "module": "./dist/algoliasearch.esm.browser.js", "import": "./dist/algoliasearch.esm.browser.js", @@ -83,7 +82,6 @@ } }, "./lite": { - "types": "./lite.d.ts", "node": { "import": "./dist/lite/lite.esm.node.js", "module": "./dist/lite/lite.esm.node.js", @@ -91,7 +89,7 @@ "default": "./dist/lite/lite.cjs", "types": "./dist/lite/builds/node.d.ts" }, - "default": { + "browser": { "umd": "./dist/lite/lite.umd.js", "module": "./dist/lite/lite.esm.browser.js", "import": "./dist/lite/lite.esm.browser.js", @@ -118,7 +116,6 @@ "@algolia/client-analytics": "{{analyticsVersion}}", "@algolia/client-abtesting": "{{abtestingVersion}}", "@algolia/client-personalization": "{{personalizationVersion}}", - "@algolia/recommend": "{{recommendVersion}}", "@algolia/client-search": "{{searchVersion}}", "@algolia/client-common": "{{utilsPackageVersion}}", "@algolia/recommend": "{{recommendVersion}}", diff --git a/tests/output/javascript/yarn.lock b/tests/output/javascript/yarn.lock index ba9d3b14ed..810c59c0b7 100644 --- a/tests/output/javascript/yarn.lock +++ b/tests/output/javascript/yarn.lock @@ -923,7 +923,7 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:*": +"@types/node@npm:*, @types/node@npm:22.5.0": version: 22.5.0 resolution: "@types/node@npm:22.5.0" dependencies: @@ -932,15 +932,6 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:22.2.0": - version: 22.2.0 - resolution: "@types/node@npm:22.2.0" - dependencies: - undici-types: "npm:~6.13.0" - checksum: 10/2957c5c81f1a07a1210f28382adae65c11070c301e395fa819448516f1a2a710054b29e0ec7d8e28624afbcd90dae810403a497109545dea835b554fc76edf6c - languageName: node - linkType: hard - "@types/stack-utils@npm:^2.0.0": version: 2.0.3 resolution: "@types/stack-utils@npm:2.0.3" @@ -2065,7 +2056,7 @@ __metadata: "@algolia/recommend": "link:../../../clients/algoliasearch-client-javascript/packages/recommend" "@algolia/requester-node-http": "link:../../../clients/algoliasearch-client-javascript/packages/requester-node-http" "@types/jest": "npm:29.5.12" - "@types/node": "npm:22.2.0" + "@types/node": "npm:22.5.0" algoliasearch: "link:../../../clients/algoliasearch-client-javascript/packages/algoliasearch" dotenv: "npm:16.4.5" jest: "npm:29.7.0" @@ -3460,13 +3451,6 @@ __metadata: languageName: node linkType: hard -"undici-types@npm:~6.13.0": - version: 6.13.0 - resolution: "undici-types@npm:6.13.0" - checksum: 10/da52e37cbc6da3a75da86fa08dd795ca8924430deb91005eb884b840e46e19013ccd4c1c289f70018e8cf0c338add24a500e7c3acfcd49b1ffb27ff9f91e38b9 - languageName: node - linkType: hard - "undici-types@npm:~6.19.2": version: 6.19.8 resolution: "undici-types@npm:6.19.8"