Skip to content

Commit e78687f

Browse files
chore: generated code for commit 46c1526f. [skip ci]
algolia/api-clients-automation@46c1526 Co-authored-by: algolia-bot <[email protected]> Co-authored-by: Clément Vannicatte <[email protected]>
1 parent 0b18321 commit e78687f

File tree

21 files changed

+548
-187
lines changed

21 files changed

+548
-187
lines changed

bundlesize.config.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"files": [
33
{
44
"path": "packages/algoliasearch/dist/algoliasearch.umd.js",
5-
"maxSize": "8.30KB"
5+
"maxSize": "8.60KB"
66
},
77
{
88
"path": "packages/algoliasearch/dist/lite/lite.umd.js",
@@ -30,7 +30,7 @@
3030
},
3131
{
3232
"path": "packages/client-search/dist/client-search.umd.js",
33-
"maxSize": "6.60KB"
33+
"maxSize": "6.90KB"
3434
},
3535
{
3636
"path": "packages/client-sources/dist/client-sources.umd.js",

packages/algoliasearch/lite/src/liteClient.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,12 +89,14 @@ export function createLiteClient({
8989

9090
return {
9191
transporter,
92+
9293
/**
9394
* Get the value of the `algoliaAgent`, used by our libraries internally and telemetry system.
9495
*/
9596
get _ua(): string {
9697
return transporter.algoliaAgent.value;
9798
},
99+
98100
/**
99101
* Adds a `segment` to the `x-algolia-agent` sent with every requests.
100102
*
@@ -104,6 +106,7 @@ export function createLiteClient({
104106
addAlgoliaAgent(segment: string, version?: string): void {
105107
transporter.algoliaAgent.add({ segment, version });
106108
},
109+
107110
/**
108111
* This method allow you to send requests to the Algolia REST API.
109112
*

packages/client-abtesting/src/abtestingClient.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,12 +73,14 @@ export function createAbtestingClient({
7373

7474
return {
7575
transporter,
76+
7677
/**
7778
* Get the value of the `algoliaAgent`, used by our libraries internally and telemetry system.
7879
*/
7980
get _ua(): string {
8081
return transporter.algoliaAgent.value;
8182
},
83+
8284
/**
8385
* Adds a `segment` to the `x-algolia-agent` sent with every requests.
8486
*
@@ -88,6 +90,7 @@ export function createAbtestingClient({
8890
addAlgoliaAgent(segment: string, version?: string): void {
8991
transporter.algoliaAgent.add({ segment, version });
9092
},
93+
9194
/**
9295
* Creates a new A/B test with provided configuration. You can set an A/B test on two different indices with different settings, or on the same index with different search parameters by providing a customSearchParameters setting on one of the variants.
9396
*

packages/client-analytics/src/analyticsClient.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,12 +99,14 @@ export function createAnalyticsClient({
9999

100100
return {
101101
transporter,
102+
102103
/**
103104
* Get the value of the `algoliaAgent`, used by our libraries internally and telemetry system.
104105
*/
105106
get _ua(): string {
106107
return transporter.algoliaAgent.value;
107108
},
109+
108110
/**
109111
* Adds a `segment` to the `x-algolia-agent` sent with every requests.
110112
*
@@ -114,6 +116,7 @@ export function createAnalyticsClient({
114116
addAlgoliaAgent(segment: string, version?: string): void {
115117
transporter.algoliaAgent.add({ segment, version });
116118
},
119+
117120
/**
118121
* This method allow you to send requests to the Algolia REST API.
119122
*

packages/client-common/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
export * from './src/createAuth';
22
export * from './src/createEchoRequester';
3-
export * from './src/createRetryablePromise';
3+
export * from './src/createIterablePromise';
44
export * from './src/cache';
55
export * from './src/transporter';
66
export * from './src/createAlgoliaAgent';

packages/client-common/jest.config.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ const config: Config.InitialOptions = {
1414
testPathIgnorePatterns: [
1515
'src/__tests__/cache/null-cache.test.ts',
1616
'src/__tests__/cache/memory-cache.test.ts',
17+
'src/__tests__/create-iterable-promise.test.ts',
1718
],
1819
},
1920
{
Lines changed: 238 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,238 @@
1+
import { createIterablePromise } from '../createIterablePromise';
2+
3+
describe('createIterablePromise', () => {
4+
describe('func', () => {
5+
it('provides the `previousResponse` parameter', async () => {
6+
const responses: Array<string | undefined> = [];
7+
const promise = createIterablePromise<string | undefined>({
8+
func: (previousResponse) => {
9+
return new Promise((resolve) => {
10+
resolve(previousResponse === undefined ? 'yes' : 'no');
11+
});
12+
},
13+
validate: () => responses.length === 3,
14+
aggregator: (response) => responses.push(response),
15+
});
16+
17+
await expect(promise).resolves.toEqual('no');
18+
expect(responses).toEqual(['yes', 'no', 'no']);
19+
});
20+
});
21+
22+
describe('validate', () => {
23+
it('iterates on a `func` until `validate` is met', async () => {
24+
let calls = 0;
25+
const promise = createIterablePromise({
26+
func: () => {
27+
return new Promise((resolve) => {
28+
calls += 1;
29+
resolve(`success #${calls}`);
30+
});
31+
},
32+
validate: () => calls >= 3,
33+
});
34+
35+
await expect(promise).resolves.toEqual('success #3');
36+
expect(calls).toBe(3);
37+
});
38+
39+
it('forward the response of the `func`', async () => {
40+
let calls = 0;
41+
const promise = createIterablePromise<number>({
42+
func: () => {
43+
return new Promise((resolve) => {
44+
calls += 1;
45+
resolve(calls);
46+
});
47+
},
48+
validate: (response) => response >= 3,
49+
});
50+
51+
await expect(promise).resolves.toEqual(3);
52+
expect(calls).toBe(3);
53+
});
54+
});
55+
56+
describe('aggregator', () => {
57+
it('is called before iterating', async () => {
58+
let calls = 0;
59+
let count = 0;
60+
const promise = createIterablePromise({
61+
func: () => {
62+
return new Promise((resolve) => {
63+
calls += 1;
64+
resolve(`success #${calls}`);
65+
});
66+
},
67+
validate: () => calls >= 3,
68+
aggregator: () => (count += 3),
69+
});
70+
71+
await expect(promise).resolves.toEqual('success #3');
72+
expect(calls).toBe(3);
73+
expect(count).toBe(3 * 3);
74+
});
75+
76+
it('forward the response of the `func`', async () => {
77+
let calls = 0;
78+
const responses: string[] = [];
79+
const promise = createIterablePromise<string>({
80+
func: () => {
81+
return new Promise((resolve) => {
82+
calls += 1;
83+
resolve(`success #${calls}`);
84+
});
85+
},
86+
validate: () => calls >= 3,
87+
aggregator: (response) => {
88+
responses.push(response);
89+
},
90+
});
91+
92+
await expect(promise).resolves.toEqual('success #3');
93+
expect(calls).toBe(3);
94+
expect(responses).toEqual(['success #1', 'success #2', 'success #3']);
95+
});
96+
});
97+
98+
describe('timeout', () => {
99+
it('defaults to no timeout (0)', async () => {
100+
let calls = 0;
101+
const before = Date.now();
102+
const promise = createIterablePromise({
103+
func: () => {
104+
return new Promise((resolve) => {
105+
calls += 1;
106+
resolve(`success #${calls}`);
107+
});
108+
},
109+
validate: () => calls >= 2,
110+
});
111+
112+
await expect(promise).resolves.toEqual('success #2');
113+
114+
expect(Date.now() - before).toBeGreaterThanOrEqual(0);
115+
expect(Date.now() - before).toBeLessThan(10);
116+
expect(calls).toBe(2);
117+
});
118+
119+
it('waits before calling the `func` again', async () => {
120+
let calls = 0;
121+
const before = Date.now();
122+
const promise = createIterablePromise({
123+
func: () => {
124+
return new Promise((resolve) => {
125+
calls += 1;
126+
resolve(`success #${calls}`);
127+
});
128+
},
129+
validate: () => calls >= 2,
130+
timeout: () => 2000,
131+
});
132+
133+
await expect(promise).resolves.toEqual('success #2');
134+
135+
expect(Date.now() - before).toBeGreaterThanOrEqual(2000);
136+
expect(Date.now() - before).toBeLessThan(2010);
137+
expect(calls).toBe(2);
138+
});
139+
});
140+
141+
describe('error', () => {
142+
it('gets the rejection of the given promise via reject', async () => {
143+
let calls = 0;
144+
145+
const promise = createIterablePromise({
146+
func: () => {
147+
return new Promise((resolve, reject) => {
148+
calls += 1;
149+
if (calls <= 3) {
150+
resolve('okay');
151+
} else {
152+
reject(new Error('nope'));
153+
}
154+
});
155+
},
156+
validate: () => false,
157+
});
158+
159+
await expect(promise).rejects.toEqual(
160+
expect.objectContaining({ message: 'nope' })
161+
);
162+
});
163+
164+
it('gets the rejection of the given promise via throw', async () => {
165+
let calls = 0;
166+
167+
const promise = createIterablePromise({
168+
func: () => {
169+
return new Promise((resolve) => {
170+
calls += 1;
171+
if (calls <= 3) {
172+
resolve('okay');
173+
} else {
174+
throw new Error('nope');
175+
}
176+
});
177+
},
178+
validate: () => false,
179+
});
180+
181+
await expect(promise).rejects.toEqual(
182+
expect.objectContaining({ message: 'nope' })
183+
);
184+
});
185+
186+
it('rejects with the given `message` when `validate` hits', async () => {
187+
const MAX_RETRIES = 3;
188+
let calls = 0;
189+
190+
const promise = createIterablePromise({
191+
func: () => {
192+
return new Promise((resolve) => {
193+
calls += 1;
194+
resolve('okay');
195+
});
196+
},
197+
validate: () => false,
198+
error: {
199+
validate: () => calls >= MAX_RETRIES,
200+
message: () => `Error is thrown: ${calls}/${MAX_RETRIES}`,
201+
},
202+
});
203+
204+
await expect(promise).rejects.toEqual(
205+
expect.objectContaining({
206+
message: 'Error is thrown: 3/3',
207+
})
208+
);
209+
expect(calls).toBe(MAX_RETRIES);
210+
});
211+
212+
it('forward the response of the `func`', async () => {
213+
const MAX_RETRIES = 3;
214+
let calls = 0;
215+
216+
const promise = createIterablePromise<number>({
217+
func: () => {
218+
return new Promise((resolve) => {
219+
calls += 1;
220+
resolve(calls);
221+
});
222+
},
223+
validate: () => false,
224+
error: {
225+
validate: (response) => response >= MAX_RETRIES,
226+
message: (response) => `Error is thrown: ${response}/${MAX_RETRIES}`,
227+
},
228+
});
229+
230+
await expect(promise).rejects.toEqual(
231+
expect.objectContaining({
232+
message: 'Error is thrown: 3/3',
233+
})
234+
);
235+
expect(calls).toBe(MAX_RETRIES);
236+
});
237+
});
238+
});

0 commit comments

Comments
 (0)