Skip to content

Commit

Permalink
fix(javascript): dependency imports and low-level init (#3596)
Browse files Browse the repository at this point in the history
  • Loading branch information
shortcuts committed Aug 28, 2024
1 parent 86891f6 commit 7189cbe
Show file tree
Hide file tree
Showing 11 changed files with 107 additions and 155 deletions.
Original file line number Diff line number Diff line change
@@ -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';

Expand Down Expand Up @@ -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,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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({
Expand Down Expand Up @@ -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({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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({
Expand Down Expand Up @@ -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({
Expand Down
Original file line number Diff line number Diff line change
@@ -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' ],
},
],
};
27 changes: 25 additions & 2 deletions clients/algoliasearch-client-javascript/yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down Expand Up @@ -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:
Expand Down
42 changes: 19 additions & 23 deletions templates/javascript/clients/algoliasearch/builds/browser.mustache
Original file line number Diff line number Diff line change
Expand Up @@ -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.
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -74,4 +55,4 @@ export function algoliasearch(

if (!apiKey || typeof apiKey !== 'string') {
throw new Error('`apiKey` is missing.');
}
}
Original file line number Diff line number Diff line change
@@ -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<AnalyticsRegion> = {}): 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<AbtestingRegion> = {}): 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<InitClientRegion<PersonalizationRegion>>): 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);
}
30 changes: 13 additions & 17 deletions templates/javascript/clients/algoliasearch/builds/node.mustache
Original file line number Diff line number Diff line change
Expand Up @@ -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.
*/
Expand Down
Loading

0 comments on commit 7189cbe

Please sign in to comment.