Skip to content

Commit c044401

Browse files
authored
fix(javascript): allow async param on createIterablePromise (#4144)
1 parent 9330265 commit c044401

File tree

19 files changed

+70
-34
lines changed

19 files changed

+70
-34
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"extends": "../tsconfig.json",
3+
"compilerOptions": {
4+
"noEmit": true,
5+
"skipLibCheck": true
6+
},
7+
"include": ["*.ts"]
8+
}

Diff for: clients/algoliasearch-client-javascript/packages/client-common/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
"scripts": {
3131
"build": "yarn clean && yarn tsup",
3232
"clean": "rm -rf ./dist || true",
33-
"test": "vitest --run",
33+
"test": "tsc --noEmit && vitest --run",
3434
"test:bundle": "publint . && attw --pack ."
3535
},
3636
"devDependencies": {

Diff for: clients/algoliasearch-client-javascript/packages/client-common/src/__tests__/cache/browser-local-storage-cache.test.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ describe('browser local storage cache', () => {
9191

9292
await cache.clear();
9393

94-
const defaultValue = (): Promise<void> => Promise.resolve({ bar: 2 });
94+
const defaultValue = (): Promise<{ bar: number }> => Promise.resolve({ bar: 2 });
9595

9696
expect(localStorage.length).toBe(0);
9797

Diff for: clients/algoliasearch-client-javascript/packages/client-common/src/__tests__/create-iterable-promise.test.ts

+20
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,26 @@ describe('createIterablePromise', () => {
5353
await expect(promise).resolves.toEqual(3);
5454
expect(calls).toBe(3);
5555
});
56+
57+
test('allow async function', async () => {
58+
createIterablePromise({
59+
func: () => {
60+
return Promise.resolve({
61+
hits: [],
62+
cursor: '',
63+
});
64+
},
65+
validate: async () => {
66+
return await Promise.resolve(true);
67+
},
68+
aggregator: async (res) => {
69+
return await Promise.resolve(res);
70+
},
71+
timeout: async () => {
72+
return await Promise.resolve(1000);
73+
},
74+
});
75+
});
5676
});
5777

5878
describe('aggregator', () => {

Diff for: clients/algoliasearch-client-javascript/packages/client-common/src/createIterablePromise.ts

+11-8
Original file line numberDiff line numberDiff line change
@@ -20,22 +20,25 @@ export function createIterablePromise<TResponse>({
2020
const retry = (previousResponse?: TResponse): Promise<TResponse> => {
2121
return new Promise<TResponse>((resolve, reject) => {
2222
func(previousResponse)
23-
.then((response) => {
23+
.then(async (response) => {
2424
if (aggregator) {
25-
aggregator(response);
25+
await aggregator(response);
2626
}
2727

28-
if (validate(response)) {
28+
if (await validate(response)) {
2929
return resolve(response);
3030
}
3131

32-
if (error && error.validate(response)) {
33-
return reject(new Error(error.message(response)));
32+
if (error && (await error.validate(response))) {
33+
return reject(new Error(await error.message(response)));
3434
}
3535

36-
return setTimeout(() => {
37-
retry(response).then(resolve).catch(reject);
38-
}, timeout());
36+
return setTimeout(
37+
() => {
38+
retry(response).then(resolve).catch(reject);
39+
},
40+
await timeout(),
41+
);
3942
})
4043
.catch((err) => {
4144
reject(err);

Diff for: clients/algoliasearch-client-javascript/packages/client-common/src/types/createIterablePromise.ts

+5-5
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ export type IterableOptions<TResponse> = Partial<{
22
/**
33
* The function that runs right after the API call has been resolved, allows you to do anything with the response before `validate`.
44
*/
5-
aggregator: (response: TResponse) => void;
5+
aggregator: (response: TResponse) => unknown | PromiseLike<unknown>;
66

77
/**
88
* The `validate` condition to throw an error and its message.
@@ -11,18 +11,18 @@ export type IterableOptions<TResponse> = Partial<{
1111
/**
1212
* The function to validate the error condition.
1313
*/
14-
validate: (response: TResponse) => boolean;
14+
validate: (response: TResponse) => boolean | PromiseLike<boolean>;
1515

1616
/**
1717
* The error message to throw.
1818
*/
19-
message: (response: TResponse) => string;
19+
message: (response: TResponse) => string | PromiseLike<string>;
2020
};
2121

2222
/**
2323
* The function to decide how long to wait between iterations.
2424
*/
25-
timeout: () => number;
25+
timeout: () => number | PromiseLike<number>;
2626
}>;
2727

2828
export type CreateIterablePromise<TResponse> = IterableOptions<TResponse> & {
@@ -36,5 +36,5 @@ export type CreateIterablePromise<TResponse> = IterableOptions<TResponse> & {
3636
/**
3737
* The validator function. It receive the resolved return of the API call.
3838
*/
39-
validate: (response: TResponse) => boolean;
39+
validate: (response: TResponse) => boolean | PromiseLike<boolean>;
4040
};

Diff for: clients/algoliasearch-client-javascript/packages/client-common/tsconfig.json

+3-2
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@
22
"extends": "../../tsconfig.json",
33
"compilerOptions": {
44
"types": ["node", "vitest/globals"],
5-
"outDir": "dist"
5+
"outDir": "dist",
6+
"skipLibCheck": true
67
},
78
"include": ["src"],
8-
"exclude": ["dist", "node_modules", "src/__tests__"]
9+
"exclude": ["dist", "node_modules"]
910
}

Diff for: clients/algoliasearch-client-javascript/packages/logger-console/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
"scripts": {
3131
"build": "yarn clean && yarn tsup",
3232
"clean": "rm -rf ./dist || true",
33-
"test": "vitest --run",
33+
"test": "tsc --noEmit && vitest --run",
3434
"test:bundle": "publint . && attw --pack ."
3535
},
3636
"devDependencies": {

Diff for: clients/algoliasearch-client-javascript/packages/logger-console/tsconfig.json

+3-2
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@
22
"extends": "../../tsconfig.json",
33
"compilerOptions": {
44
"types": ["node", "vitest/globals"],
5-
"outDir": "dist"
5+
"outDir": "dist",
6+
"skipLibCheck": true
67
},
78
"include": ["src", "index.ts"],
8-
"exclude": ["dist", "node_modules", "src/__tests__"]
9+
"exclude": ["dist", "node_modules"]
910
}

Diff for: clients/algoliasearch-client-javascript/packages/requester-browser-xhr/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
"scripts": {
2828
"build": "yarn clean && yarn tsup",
2929
"clean": "rm -rf ./dist || true",
30-
"test": "vitest --run",
30+
"test": "tsc --noEmit && vitest --run",
3131
"test:bundle": "publint . && attw --pack . --ignore-rules cjs-resolves-to-esm"
3232
},
3333
"dependencies": {

Diff for: clients/algoliasearch-client-javascript/packages/requester-browser-xhr/src/__tests__/browser-xhr-requester.test.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ describe('timeout handling', () => {
114114

115115
afterAll(
116116
() =>
117-
new Promise((done) => {
117+
new Promise<void>((done) => {
118118
done();
119119
}),
120120
);

Diff for: clients/algoliasearch-client-javascript/packages/requester-browser-xhr/tsconfig.json

+3-2
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@
22
"extends": "../../tsconfig.json",
33
"compilerOptions": {
44
"types": ["node", "vitest/globals"],
5-
"outDir": "dist"
5+
"outDir": "dist",
6+
"skipLibCheck": true
67
},
78
"include": ["src"],
8-
"exclude": ["dist", "node_modules", "src/__tests__"]
9+
"exclude": ["dist", "node_modules"]
910
}

Diff for: clients/algoliasearch-client-javascript/packages/requester-fetch/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343
"scripts": {
4444
"build": "yarn clean && yarn tsup",
4545
"clean": "rm -rf ./dist || true",
46-
"test": "vitest --run",
46+
"test": "tsc --noEmit && vitest --run",
4747
"test:bundle": "publint . && attw --pack ."
4848
},
4949
"dependencies": {

Diff for: clients/algoliasearch-client-javascript/packages/requester-fetch/src/__tests__/fetch-requester.test.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ describe('timeout handling', () => {
108108

109109
afterAll(
110110
() =>
111-
new Promise((done) => {
111+
new Promise<void>((done) => {
112112
done();
113113
}),
114114
);

Diff for: clients/algoliasearch-client-javascript/packages/requester-fetch/tsconfig.json

+3-2
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@
22
"extends": "../../tsconfig.json",
33
"compilerOptions": {
44
"types": ["node", "vitest/globals"],
5-
"outDir": "dist"
5+
"outDir": "dist",
6+
"skipLibCheck": true
67
},
78
"include": ["src"],
8-
"exclude": ["dist", "node_modules", "src/__tests__"]
9+
"exclude": ["dist", "node_modules"]
910
}

Diff for: clients/algoliasearch-client-javascript/packages/requester-node-http/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
"scripts": {
3131
"build": "yarn clean && yarn tsup",
3232
"clean": "rm -rf ./dist || true",
33-
"test": "vitest --run",
33+
"test": "tsc --noEmit && vitest --run",
3434
"test:bundle": "publint . && attw --pack ."
3535
},
3636
"dependencies": {

Diff for: clients/algoliasearch-client-javascript/packages/requester-node-http/src/__tests__/node-http-requester.test.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ describe('timeout handling', () => {
164164

165165
afterAll(
166166
() =>
167-
new Promise((done) => {
167+
new Promise<void>((done) => {
168168
done();
169169
}),
170170
);

Diff for: clients/algoliasearch-client-javascript/packages/requester-node-http/tsconfig.json

+3-2
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@
22
"extends": "../../tsconfig.json",
33
"compilerOptions": {
44
"types": ["node", "vitest/globals"],
5-
"outDir": "dist"
5+
"outDir": "dist",
6+
"skipLibCheck": true
67
},
78
"include": ["src"],
8-
"exclude": ["dist", "node_modules", "src/__tests__"]
9+
"exclude": ["dist", "node_modules"]
910
}

Diff for: templates/javascript/clients/package.mustache

+2-2
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
"build": "yarn clean && yarn tsup && yarn rollup -c rollup.config.js",
1212
"clean": "rm -rf ./dist || true",
1313
{{#isAlgoliasearchClient}}
14-
"test": "vitest --run",
14+
"test": "tsc -p __tests__/tsconfig.json && vitest --run",
1515
{{/isAlgoliasearchClient}}
1616
"test:bundle": "publint . && attw --pack ."
1717
},
@@ -145,4 +145,4 @@
145145
"engines": {
146146
"node": ">= 14.0.0"
147147
}
148-
}
148+
}

0 commit comments

Comments
 (0)