Skip to content

Commit 3cea192

Browse files
authored
feat: add custom request function (#1312)
increase bundle size for lite package to 4.4ko
1 parent 7c38e64 commit 3cea192

File tree

7 files changed

+44
-5
lines changed

7 files changed

+44
-5
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@
102102
},
103103
{
104104
"path": "packages/algoliasearch/dist/algoliasearch-lite.umd.js",
105-
"maxSize": "4.35KB"
105+
"maxSize": "4.4KB"
106106
},
107107
{
108108
"path": "packages/recommend/dist/recommend.umd.js",

packages/algoliasearch/src/builds/browser.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ import {
5757
copySettings,
5858
copySynonyms,
5959
createSearchClient,
60+
customRequest,
6061
deleteApiKey,
6162
DeleteApiKeyResponse,
6263
deleteBy,
@@ -190,7 +191,7 @@ import {
190191
import { LogLevelEnum } from '@algolia/logger-common';
191192
import { createConsoleLogger } from '@algolia/logger-console';
192193
import { createBrowserXhrRequester } from '@algolia/requester-browser-xhr';
193-
import { createUserAgent, RequestOptions } from '@algolia/transporter';
194+
import { createUserAgent, Request, RequestOptions } from '@algolia/transporter';
194195

195196
import { AlgoliaSearchOptions, InitAnalyticsOptions, InitPersonalizationOptions } from '../types';
196197

@@ -273,6 +274,7 @@ export default function algoliasearch(
273274
searchDictionaryEntries,
274275
setDictionarySettings,
275276
waitAppTask,
277+
customRequest,
276278
initIndex: base => (indexName: string): SearchIndex => {
277279
return initIndex(base)(indexName, {
278280
methods: {
@@ -677,6 +679,10 @@ export type SearchClient = BaseSearchClient & {
677679
taskID: number,
678680
requestOptions?: RequestOptions
679681
) => Readonly<Promise<TaskStatusResponse>>;
682+
readonly customRequest: <TResponse>(
683+
request: Request,
684+
requestOptions?: RequestOptions
685+
) => Readonly<Promise<TResponse>>;
680686
readonly initAnalytics: (options?: InitAnalyticsOptions) => AnalyticsClient;
681687
readonly initPersonalization: (options?: InitPersonalizationOptions) => PersonalizationClient;
682688
/**

packages/algoliasearch/src/builds/browserLite.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { createInMemoryCache } from '@algolia/cache-in-memory';
44
import { AuthMode, version } from '@algolia/client-common';
55
import {
66
createSearchClient,
7+
customRequest,
78
findAnswers,
89
FindAnswersOptions,
910
FindAnswersResponse,
@@ -25,7 +26,7 @@ import {
2526
import { LogLevelEnum } from '@algolia/logger-common';
2627
import { createConsoleLogger } from '@algolia/logger-console';
2728
import { createBrowserXhrRequester } from '@algolia/requester-browser-xhr';
28-
import { createUserAgent, RequestOptions } from '@algolia/transporter';
29+
import { createUserAgent, Request, RequestOptions } from '@algolia/transporter';
2930

3031
import { AlgoliaSearchOptions } from '../types';
3132

@@ -67,6 +68,7 @@ export default function algoliasearch(
6768
searchForFacetValues: multipleSearchForFacetValues,
6869
multipleQueries,
6970
multipleSearchForFacetValues,
71+
customRequest,
7072
initIndex: base => (indexName: string): SearchIndex => {
7173
return initIndex(base)(indexName, {
7274
methods: { search, searchForFacetValues, findAnswers },
@@ -109,6 +111,10 @@ export type SearchClient = BaseSearchClient & {
109111
}>,
110112
requestOptions?: RequestOptions
111113
) => Readonly<Promise<readonly SearchForFacetValuesResponse[]>>;
114+
readonly customRequest: <TResponse>(
115+
request: Request,
116+
requestOptions?: RequestOptions
117+
) => Readonly<Promise<TResponse>>;
112118
};
113119

114120
export { WithoutCredentials, AlgoliaSearchOptions } from '../types';

packages/algoliasearch/src/builds/node.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ import {
5656
copySettings,
5757
copySynonyms,
5858
createSearchClient,
59+
customRequest,
5960
deleteApiKey,
6061
DeleteApiKeyResponse,
6162
deleteBy,
@@ -192,7 +193,7 @@ import {
192193
import { createNullLogger } from '@algolia/logger-common';
193194
import { Destroyable } from '@algolia/requester-common';
194195
import { createNodeHttpRequester } from '@algolia/requester-node-http';
195-
import { createUserAgent, RequestOptions } from '@algolia/transporter';
196+
import { createUserAgent, Request, RequestOptions } from '@algolia/transporter';
196197

197198
import { AlgoliaSearchOptions, InitAnalyticsOptions, InitPersonalizationOptions } from '../types';
198199

@@ -276,6 +277,7 @@ export default function algoliasearch(
276277
searchDictionaryEntries,
277278
setDictionarySettings,
278279
waitAppTask,
280+
customRequest,
279281
initIndex: base => (indexName: string): SearchIndex => {
280282
return initIndex(base)(indexName, {
281283
methods: {
@@ -685,6 +687,10 @@ export type SearchClient = BaseSearchClient & {
685687
taskID: number,
686688
requestOptions?: RequestOptions
687689
) => Readonly<Promise<TaskStatusResponse>>;
690+
readonly customRequest: <TResponse>(
691+
request: Request,
692+
requestOptions?: RequestOptions
693+
) => Readonly<Promise<TResponse>>;
688694
readonly initAnalytics: (options?: InitAnalyticsOptions) => AnalyticsClient;
689695
readonly initPersonalization: (options?: InitPersonalizationOptions) => PersonalizationClient;
690696
/**

packages/client-search/src/__tests__/integration/search.test.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { createObjectNotFoundError, SearchResponse } from '../..';
1+
import { createObjectNotFoundError, ListApiKeysResponse, SearchResponse } from '../..';
22
import { waitResponses } from '../../../../client-common/src/__tests__/helpers';
33
import { TestSuite } from '../../../../client-common/src/__tests__/TestSuite';
44

@@ -263,3 +263,9 @@ test('decompounding at query time', async () => {
263263

264264
expect(results.explain).toMatchObject(explain);
265265
});
266+
267+
it('allows custom request', async () => {
268+
const client = testSuite.makeSearchClient();
269+
const res = await client.customRequest<ListApiKeysResponse>({ method: 'GET', path: '/1/keys' });
270+
expect(res.keys.length).toBeGreaterThan(0);
271+
});
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import { MethodEnum } from '@algolia/requester-common';
2+
import { Request, RequestOptions } from '@algolia/transporter';
3+
4+
import { SearchClient } from '../..';
5+
6+
export const customRequest = <TResponse = any>(base: SearchClient) => {
7+
return (request: Request, requestOptions?: RequestOptions): Readonly<Promise<TResponse>> => {
8+
if (request.method === MethodEnum.Get) {
9+
return base.transporter.read(request, requestOptions);
10+
}
11+
12+
return base.transporter.write(request, requestOptions);
13+
};
14+
};

packages/client-search/src/methods/client/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ export * from './copyIndex';
1010
export * from './copyRules';
1111
export * from './copySettings';
1212
export * from './copySynonyms';
13+
export * from './customRequest';
1314
export * from './deleteApiKey';
1415
export * from './deleteDictionaryEntries';
1516
export * from './generateSecuredApiKey';

0 commit comments

Comments
 (0)