@ledgerhq/live-promise 0.0.3 → 0.0.4-next.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @ledgerhq/live-promise
2
2
 
3
+ ## 0.0.4-next.0
4
+
5
+ ### Patch Changes
6
+
7
+ - [#6566](https://github.com/LedgerHQ/ledger-live/pull/6566) [`cfb97f7`](https://github.com/LedgerHQ/ledger-live/commit/cfb97f7d5c81824815522e8699b7469047b1513a) Thanks [@cgrellard-ledger](https://github.com/cgrellard-ledger)! - Prevent unnecessary http retries when 422
8
+
3
9
  ## 0.0.3
4
10
 
5
11
  ### Patch Changes
package/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License
2
+
3
+ Copyright (c) 2017-present Ledger https://www.ledger.com/
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
package/lib/promise.d.ts CHANGED
@@ -4,6 +4,7 @@ declare const defaults: {
4
4
  interval: number;
5
5
  intervalMultiplicator: number;
6
6
  context: string;
7
+ retryCondition: (_: any) => boolean;
7
8
  };
8
9
  export declare function retry<A>(f: () => Promise<A>, options?: Partial<typeof defaults>): Promise<A>;
9
10
  type Job<R, A extends Array<any>> = (...args: A) => Promise<R>;
@@ -1 +1 @@
1
- {"version":3,"file":"promise.d.ts","sourceRoot":"","sources":["../src/promise.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,KAAK,OAAQ,MAAM,KAAG,QAAQ,IAAI,CAAwC,CAAC;AACxF,QAAA,MAAM,QAAQ;;;;;CAKb,CAAC;AACF,wBAAgB,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,OAAO,QAAQ,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAqB5F;AACD,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,SAAS,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;AAC/D,eAAO,MAAM,WAAW,yEAEW,MAAM,cAUxC,CAAC;AACF,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAOlF;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CAAC,CAAC,EAAE,CAAC,EAC1C,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EACf,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,GACxC,OAAO,CAAC,CAAC,EAAE,CAAC,CAwBd"}
1
+ {"version":3,"file":"promise.d.ts","sourceRoot":"","sources":["../src/promise.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,KAAK,OAAQ,MAAM,KAAG,QAAQ,IAAI,CAAwC,CAAC;AACxF,QAAA,MAAM,QAAQ;;;;;;CAMb,CAAC;AACF,wBAAgB,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,OAAO,QAAQ,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAwB5F;AACD,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,SAAS,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;AAC/D,eAAO,MAAM,WAAW,yEAEW,MAAM,cAUxC,CAAC;AACF,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAOlF;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CAAC,CAAC,EAAE,CAAC,EAC1C,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EACf,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,GACxC,OAAO,CAAC,CAAC,EAAE,CAAC,CAwBd"}
package/lib/promise.js CHANGED
@@ -18,9 +18,10 @@ const defaults = {
18
18
  interval: 300,
19
19
  intervalMultiplicator: 1.5,
20
20
  context: "",
21
+ retryCondition: _ => true,
21
22
  };
22
23
  function retry(f, options) {
23
- const { maxRetry, interval, intervalMultiplicator, context } = Object.assign(Object.assign({}, defaults), options);
24
+ const { maxRetry, interval, intervalMultiplicator, context, retryCondition } = Object.assign(Object.assign({}, defaults), options);
24
25
  function rec(remainingTry, i) {
25
26
  const result = f();
26
27
  if (remainingTry <= 0) {
@@ -28,6 +29,9 @@ function retry(f, options) {
28
29
  }
29
30
  // In case of failure, wait the interval, retry the action
30
31
  return result.catch(e => {
32
+ if (!retryCondition(e)) {
33
+ return e;
34
+ }
31
35
  (0, logs_1.log)("promise-retry", context + " failed. " + remainingTry + " retry remain. " + String(e));
32
36
  return (0, exports.delay)(i).then(() => rec(remainingTry - 1, i * intervalMultiplicator));
33
37
  });
@@ -1 +1 @@
1
- {"version":3,"file":"promise.js","sourceRoot":"","sources":["../src/promise.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"promise.js","sourceRoot":"","sources":["../src/promise.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,yCAAqC;AAC9B,MAAM,KAAK,GAAG,CAAC,EAAU,EAAiB,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AAA3E,QAAA,KAAK,SAAsE;AACxF,MAAM,QAAQ,GAAG;IACf,QAAQ,EAAE,CAAC;IACX,QAAQ,EAAE,GAAG;IACb,qBAAqB,EAAE,GAAG;IAC1B,OAAO,EAAE,EAAE;IACX,cAAc,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI;CAC1B,CAAC;AACF,SAAgB,KAAK,CAAI,CAAmB,EAAE,OAAkC;IAC9E,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,qBAAqB,EAAE,OAAO,EAAE,cAAc,EAAE,mCACvE,QAAQ,GACR,OAAO,CACX,CAAC;IAEF,SAAS,GAAG,CAAC,YAAoB,EAAE,CAAS;QAC1C,MAAM,MAAM,GAAG,CAAC,EAAE,CAAC;QAEnB,IAAI,YAAY,IAAI,CAAC,EAAE;YACrB,OAAO,MAAM,CAAC;SACf;QAED,0DAA0D;QAC1D,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YACtB,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE;gBACtB,OAAO,CAAC,CAAC;aACV;YACD,IAAA,UAAG,EAAC,eAAe,EAAE,OAAO,GAAG,WAAW,GAAG,YAAY,GAAG,iBAAiB,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3F,OAAO,IAAA,aAAK,EAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC;QAC/E,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AACjC,CAAC;AAxBD,sBAwBC;AAEM,MAAM,WAAW,GAAG,CACzB,GAAc,EACd,kBAA0C,GAAG,EAAE,CAAC,EAAE,EACvC,EAAE;IACb,MAAM,MAAM,GAAwB,EAAE,CAAC;IACvC,OAAO,CAAC,GAAG,IAAI,EAAE,EAAE;QACjB,MAAM,EAAE,GAAG,eAAe,CAAC,GAAG,IAAI,CAAC,CAAC;QACpC,MAAM,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QAC9C,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QACzC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAC/B,OAAO,CAAC,CAAC;IACX,CAAC,CAAC;AACJ,CAAC,CAAC;AAZW,QAAA,WAAW,eAYtB;AACF,SAAgB,kBAAkB,CAAI,EAAU,EAAE,EAAoB;IACpE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;QACnB,MAAM,SAAS,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC;QAChD,IAAI,SAAS,IAAI,CAAC;YAAE,OAAO,CAAC,CAAC;QAC7B,OAAO,IAAA,aAAK,EAAC,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;AACL,CAAC;AAPD,gDAOC;AAED;;;;;;GAMG;AACH,SAAsB,iBAAiB,CACrC,KAAa,EACb,KAAe,EACf,EAAyC;;QAEzC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACjC,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YACxC,IAAI;YACJ,KAAK;SACN,CAAC,CAAC,CAAC;QAEJ,SAAe,IAAI;;gBACjB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;oBAAE,OAAO;gBAC/B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;gBAC5B,IAAI,KAAK,EAAE;oBACT,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;oBAC9B,IAAI,CAAC,KAAK,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;iBACrC;gBACD,MAAM,IAAI,EAAE,CAAC,CAAC,oDAAoD;YACpE,CAAC;SAAA;QAED,mDAAmD;QACnD,MAAM,OAAO,CAAC,GAAG,CACf,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;aACjC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC;aACrB,GAAG,CAAC,IAAI,CAAC,CACb,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;CAAA;AA5BD,8CA4BC"}
@@ -10,22 +10,72 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  const promise_1 = require("./promise");
13
- test("promiseAllBatched", () => __awaiter(void 0, void 0, void 0, function* () {
14
- const promisifyIdPlusOne = (a) => Promise.resolve(a + 1);
15
- const p = (0, promise_1.promiseAllBatched)(5, [], promisifyIdPlusOne);
16
- expect(typeof p.then).toBe("function");
17
- expect(yield p).toEqual([]);
18
- expect(yield (0, promise_1.promiseAllBatched)(5, [1, 2, 3, 4, 5, 6, 7, 8], promisifyIdPlusOne)).toEqual([
19
- 2, 3, 4, 5, 6, 7, 8, 9,
20
- ]);
21
- expect(yield (0, promise_1.promiseAllBatched)(1, [1, 2, 3, 4, 5, 6, 7, 8], promisifyIdPlusOne)).toEqual([
22
- 2, 3, 4, 5, 6, 7, 8, 9,
23
- ]);
24
- expect(yield (0, promise_1.promiseAllBatched)(10, [1, 2, 3, 4, 5, 6, 7, 8], promisifyIdPlusOne)).toEqual([
25
- 2, 3, 4, 5, 6, 7, 8, 9,
26
- ]);
27
- expect(yield (0, promise_1.promiseAllBatched)(2, Array(6).fill(0), (_, i) => Promise.resolve(i))).toEqual([
28
- 0, 1, 2, 3, 4, 5,
29
- ]);
30
- }));
13
+ describe("promise", () => {
14
+ test("promiseAllBatched", () => __awaiter(void 0, void 0, void 0, function* () {
15
+ const promisifyIdPlusOne = (a) => Promise.resolve(a + 1);
16
+ const p = (0, promise_1.promiseAllBatched)(5, [], promisifyIdPlusOne);
17
+ expect(typeof p.then).toBe("function");
18
+ expect(yield p).toEqual([]);
19
+ expect(yield (0, promise_1.promiseAllBatched)(5, [1, 2, 3, 4, 5, 6, 7, 8], promisifyIdPlusOne)).toEqual([
20
+ 2, 3, 4, 5, 6, 7, 8, 9,
21
+ ]);
22
+ expect(yield (0, promise_1.promiseAllBatched)(1, [1, 2, 3, 4, 5, 6, 7, 8], promisifyIdPlusOne)).toEqual([
23
+ 2, 3, 4, 5, 6, 7, 8, 9,
24
+ ]);
25
+ expect(yield (0, promise_1.promiseAllBatched)(10, [1, 2, 3, 4, 5, 6, 7, 8], promisifyIdPlusOne)).toEqual([
26
+ 2, 3, 4, 5, 6, 7, 8, 9,
27
+ ]);
28
+ expect(yield (0, promise_1.promiseAllBatched)(2, Array(6).fill(0), (_, i) => Promise.resolve(i))).toEqual([
29
+ 0, 1, 2, 3, 4, 5,
30
+ ]);
31
+ }));
32
+ describe("promise retries", () => {
33
+ test("should retry by default", () => __awaiter(void 0, void 0, void 0, function* () {
34
+ let numberOfExecutions = 0;
35
+ const testFunction = () => Promise.reject(numberOfExecutions++);
36
+ try {
37
+ yield (0, promise_1.retry)(() => testFunction(), {
38
+ maxRetry: 5,
39
+ });
40
+ }
41
+ catch (e) {
42
+ expect(e).toBe(5);
43
+ }
44
+ expect(numberOfExecutions).toBe(6);
45
+ }));
46
+ test("should retry when retryCondition is passed", () => __awaiter(void 0, void 0, void 0, function* () {
47
+ let numberOfExecutions = 0;
48
+ const testFunction = () => Promise.reject(numberOfExecutions++);
49
+ try {
50
+ yield (0, promise_1.retry)(() => testFunction(), {
51
+ maxRetry: 5,
52
+ retryCondition: _ => {
53
+ return true;
54
+ },
55
+ });
56
+ }
57
+ catch (e) {
58
+ expect(e).toBe(5);
59
+ }
60
+ expect(numberOfExecutions).toBe(6);
61
+ }));
62
+ test("should not retry when retryCondition returns false", () => __awaiter(void 0, void 0, void 0, function* () {
63
+ let numberOfExecutions = 0;
64
+ const testFunction = () => Promise.reject(numberOfExecutions++);
65
+ try {
66
+ yield (0, promise_1.retry)(() => testFunction(), {
67
+ maxRetry: 5,
68
+ retryCondition: e => {
69
+ expect(e).toBe(0);
70
+ return false;
71
+ },
72
+ });
73
+ }
74
+ catch (e) {
75
+ expect(e).toBe(0);
76
+ }
77
+ expect(numberOfExecutions).toBe(1);
78
+ }));
79
+ });
80
+ });
31
81
  //# sourceMappingURL=promise.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"promise.test.js","sourceRoot":"","sources":["../src/promise.test.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,uCAA8C;AAC9C,IAAI,CAAC,mBAAmB,EAAE,GAAS,EAAE;IACnC,MAAM,kBAAkB,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAEjE,MAAM,CAAC,GAAG,IAAA,2BAAiB,EAAC,CAAC,EAAE,EAAE,EAAE,kBAAkB,CAAC,CAAC;IACvD,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACvC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC5B,MAAM,CAAC,MAAM,IAAA,2BAAiB,EAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAC,OAAO,CAAC;QACvF,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;KACvB,CAAC,CAAC;IACH,MAAM,CAAC,MAAM,IAAA,2BAAiB,EAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAC,OAAO,CAAC;QACvF,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;KACvB,CAAC,CAAC;IACH,MAAM,CAAC,MAAM,IAAA,2BAAiB,EAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAC,OAAO,CAAC;QACxF,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;KACvB,CAAC,CAAC;IACH,MAAM,CAAC,MAAM,IAAA,2BAAiB,EAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;QACzF,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;KACjB,CAAC,CAAC;AACL,CAAC,CAAA,CAAC,CAAC"}
1
+ {"version":3,"file":"promise.test.js","sourceRoot":"","sources":["../src/promise.test.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@ declare const defaults: {
4
4
  interval: number;
5
5
  intervalMultiplicator: number;
6
6
  context: string;
7
+ retryCondition: (_: any) => boolean;
7
8
  };
8
9
  export declare function retry<A>(f: () => Promise<A>, options?: Partial<typeof defaults>): Promise<A>;
9
10
  type Job<R, A extends Array<any>> = (...args: A) => Promise<R>;
@@ -1 +1 @@
1
- {"version":3,"file":"promise.d.ts","sourceRoot":"","sources":["../src/promise.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,KAAK,OAAQ,MAAM,KAAG,QAAQ,IAAI,CAAwC,CAAC;AACxF,QAAA,MAAM,QAAQ;;;;;CAKb,CAAC;AACF,wBAAgB,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,OAAO,QAAQ,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAqB5F;AACD,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,SAAS,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;AAC/D,eAAO,MAAM,WAAW,yEAEW,MAAM,cAUxC,CAAC;AACF,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAOlF;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CAAC,CAAC,EAAE,CAAC,EAC1C,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EACf,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,GACxC,OAAO,CAAC,CAAC,EAAE,CAAC,CAwBd"}
1
+ {"version":3,"file":"promise.d.ts","sourceRoot":"","sources":["../src/promise.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,KAAK,OAAQ,MAAM,KAAG,QAAQ,IAAI,CAAwC,CAAC;AACxF,QAAA,MAAM,QAAQ;;;;;;CAMb,CAAC;AACF,wBAAgB,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,OAAO,QAAQ,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAwB5F;AACD,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,SAAS,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;AAC/D,eAAO,MAAM,WAAW,yEAEW,MAAM,cAUxC,CAAC;AACF,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAOlF;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CAAC,CAAC,EAAE,CAAC,EAC1C,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EACf,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,GACxC,OAAO,CAAC,CAAC,EAAE,CAAC,CAwBd"}
package/lib-es/promise.js CHANGED
@@ -14,9 +14,10 @@ const defaults = {
14
14
  interval: 300,
15
15
  intervalMultiplicator: 1.5,
16
16
  context: "",
17
+ retryCondition: _ => true,
17
18
  };
18
19
  export function retry(f, options) {
19
- const { maxRetry, interval, intervalMultiplicator, context } = Object.assign(Object.assign({}, defaults), options);
20
+ const { maxRetry, interval, intervalMultiplicator, context, retryCondition } = Object.assign(Object.assign({}, defaults), options);
20
21
  function rec(remainingTry, i) {
21
22
  const result = f();
22
23
  if (remainingTry <= 0) {
@@ -24,6 +25,9 @@ export function retry(f, options) {
24
25
  }
25
26
  // In case of failure, wait the interval, retry the action
26
27
  return result.catch(e => {
28
+ if (!retryCondition(e)) {
29
+ return e;
30
+ }
27
31
  log("promise-retry", context + " failed. " + remainingTry + " retry remain. " + String(e));
28
32
  return delay(i).then(() => rec(remainingTry - 1, i * intervalMultiplicator));
29
33
  });
@@ -1 +1 @@
1
- {"version":3,"file":"promise.js","sourceRoot":"","sources":["../src/promise.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"promise.js","sourceRoot":"","sources":["../src/promise.ts"],"names":[],"mappings":"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"}
@@ -7,23 +7,73 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
7
7
  step((generator = generator.apply(thisArg, _arguments || [])).next());
8
8
  });
9
9
  };
10
- import { promiseAllBatched } from "./promise";
11
- test("promiseAllBatched", () => __awaiter(void 0, void 0, void 0, function* () {
12
- const promisifyIdPlusOne = (a) => Promise.resolve(a + 1);
13
- const p = promiseAllBatched(5, [], promisifyIdPlusOne);
14
- expect(typeof p.then).toBe("function");
15
- expect(yield p).toEqual([]);
16
- expect(yield promiseAllBatched(5, [1, 2, 3, 4, 5, 6, 7, 8], promisifyIdPlusOne)).toEqual([
17
- 2, 3, 4, 5, 6, 7, 8, 9,
18
- ]);
19
- expect(yield promiseAllBatched(1, [1, 2, 3, 4, 5, 6, 7, 8], promisifyIdPlusOne)).toEqual([
20
- 2, 3, 4, 5, 6, 7, 8, 9,
21
- ]);
22
- expect(yield promiseAllBatched(10, [1, 2, 3, 4, 5, 6, 7, 8], promisifyIdPlusOne)).toEqual([
23
- 2, 3, 4, 5, 6, 7, 8, 9,
24
- ]);
25
- expect(yield promiseAllBatched(2, Array(6).fill(0), (_, i) => Promise.resolve(i))).toEqual([
26
- 0, 1, 2, 3, 4, 5,
27
- ]);
28
- }));
10
+ import { promiseAllBatched, retry } from "./promise";
11
+ describe("promise", () => {
12
+ test("promiseAllBatched", () => __awaiter(void 0, void 0, void 0, function* () {
13
+ const promisifyIdPlusOne = (a) => Promise.resolve(a + 1);
14
+ const p = promiseAllBatched(5, [], promisifyIdPlusOne);
15
+ expect(typeof p.then).toBe("function");
16
+ expect(yield p).toEqual([]);
17
+ expect(yield promiseAllBatched(5, [1, 2, 3, 4, 5, 6, 7, 8], promisifyIdPlusOne)).toEqual([
18
+ 2, 3, 4, 5, 6, 7, 8, 9,
19
+ ]);
20
+ expect(yield promiseAllBatched(1, [1, 2, 3, 4, 5, 6, 7, 8], promisifyIdPlusOne)).toEqual([
21
+ 2, 3, 4, 5, 6, 7, 8, 9,
22
+ ]);
23
+ expect(yield promiseAllBatched(10, [1, 2, 3, 4, 5, 6, 7, 8], promisifyIdPlusOne)).toEqual([
24
+ 2, 3, 4, 5, 6, 7, 8, 9,
25
+ ]);
26
+ expect(yield promiseAllBatched(2, Array(6).fill(0), (_, i) => Promise.resolve(i))).toEqual([
27
+ 0, 1, 2, 3, 4, 5,
28
+ ]);
29
+ }));
30
+ describe("promise retries", () => {
31
+ test("should retry by default", () => __awaiter(void 0, void 0, void 0, function* () {
32
+ let numberOfExecutions = 0;
33
+ const testFunction = () => Promise.reject(numberOfExecutions++);
34
+ try {
35
+ yield retry(() => testFunction(), {
36
+ maxRetry: 5,
37
+ });
38
+ }
39
+ catch (e) {
40
+ expect(e).toBe(5);
41
+ }
42
+ expect(numberOfExecutions).toBe(6);
43
+ }));
44
+ test("should retry when retryCondition is passed", () => __awaiter(void 0, void 0, void 0, function* () {
45
+ let numberOfExecutions = 0;
46
+ const testFunction = () => Promise.reject(numberOfExecutions++);
47
+ try {
48
+ yield retry(() => testFunction(), {
49
+ maxRetry: 5,
50
+ retryCondition: _ => {
51
+ return true;
52
+ },
53
+ });
54
+ }
55
+ catch (e) {
56
+ expect(e).toBe(5);
57
+ }
58
+ expect(numberOfExecutions).toBe(6);
59
+ }));
60
+ test("should not retry when retryCondition returns false", () => __awaiter(void 0, void 0, void 0, function* () {
61
+ let numberOfExecutions = 0;
62
+ const testFunction = () => Promise.reject(numberOfExecutions++);
63
+ try {
64
+ yield retry(() => testFunction(), {
65
+ maxRetry: 5,
66
+ retryCondition: e => {
67
+ expect(e).toBe(0);
68
+ return false;
69
+ },
70
+ });
71
+ }
72
+ catch (e) {
73
+ expect(e).toBe(0);
74
+ }
75
+ expect(numberOfExecutions).toBe(1);
76
+ }));
77
+ });
78
+ });
29
79
  //# sourceMappingURL=promise.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"promise.test.js","sourceRoot":"","sources":["../src/promise.test.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,IAAI,CAAC,mBAAmB,EAAE,GAAS,EAAE;IACnC,MAAM,kBAAkB,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAEjE,MAAM,CAAC,GAAG,iBAAiB,CAAC,CAAC,EAAE,EAAE,EAAE,kBAAkB,CAAC,CAAC;IACvD,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACvC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC5B,MAAM,CAAC,MAAM,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAC,OAAO,CAAC;QACvF,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;KACvB,CAAC,CAAC;IACH,MAAM,CAAC,MAAM,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAC,OAAO,CAAC;QACvF,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;KACvB,CAAC,CAAC;IACH,MAAM,CAAC,MAAM,iBAAiB,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAC,OAAO,CAAC;QACxF,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;KACvB,CAAC,CAAC;IACH,MAAM,CAAC,MAAM,iBAAiB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;QACzF,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;KACjB,CAAC,CAAC;AACL,CAAC,CAAA,CAAC,CAAC"}
1
+ {"version":3,"file":"promise.test.js","sourceRoot":"","sources":["../src/promise.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ledgerhq/live-promise",
3
- "version": "0.0.3",
3
+ "version": "0.0.4-next.0",
4
4
  "description": "Ledger Live Promise utilities",
5
5
  "keywords": [
6
6
  "Ledger"
@@ -24,9 +24,9 @@
24
24
  "@ledgerhq/logs": "^6.12.0"
25
25
  },
26
26
  "devDependencies": {
27
- "@types/jest": "^29.2.4",
28
- "jest": "^28.1.1",
29
- "ts-jest": "^28.0.5"
27
+ "@types/jest": "^29.5.10",
28
+ "jest": "^29.7.0",
29
+ "ts-jest": "^29.1.1"
30
30
  },
31
31
  "scripts": {
32
32
  "clean": "rimraf lib lib-es",
@@ -1,20 +1,70 @@
1
- import { promiseAllBatched } from "./promise";
2
- test("promiseAllBatched", async () => {
3
- const promisifyIdPlusOne = (a: number) => Promise.resolve(a + 1);
1
+ import { promiseAllBatched, retry } from "./promise";
4
2
 
5
- const p = promiseAllBatched(5, [], promisifyIdPlusOne);
6
- expect(typeof p.then).toBe("function");
7
- expect(await p).toEqual([]);
8
- expect(await promiseAllBatched(5, [1, 2, 3, 4, 5, 6, 7, 8], promisifyIdPlusOne)).toEqual([
9
- 2, 3, 4, 5, 6, 7, 8, 9,
10
- ]);
11
- expect(await promiseAllBatched(1, [1, 2, 3, 4, 5, 6, 7, 8], promisifyIdPlusOne)).toEqual([
12
- 2, 3, 4, 5, 6, 7, 8, 9,
13
- ]);
14
- expect(await promiseAllBatched(10, [1, 2, 3, 4, 5, 6, 7, 8], promisifyIdPlusOne)).toEqual([
15
- 2, 3, 4, 5, 6, 7, 8, 9,
16
- ]);
17
- expect(await promiseAllBatched(2, Array(6).fill(0), (_, i) => Promise.resolve(i))).toEqual([
18
- 0, 1, 2, 3, 4, 5,
19
- ]);
3
+ describe("promise", () => {
4
+ test("promiseAllBatched", async () => {
5
+ const promisifyIdPlusOne = (a: number) => Promise.resolve(a + 1);
6
+
7
+ const p = promiseAllBatched(5, [], promisifyIdPlusOne);
8
+ expect(typeof p.then).toBe("function");
9
+ expect(await p).toEqual([]);
10
+ expect(await promiseAllBatched(5, [1, 2, 3, 4, 5, 6, 7, 8], promisifyIdPlusOne)).toEqual([
11
+ 2, 3, 4, 5, 6, 7, 8, 9,
12
+ ]);
13
+ expect(await promiseAllBatched(1, [1, 2, 3, 4, 5, 6, 7, 8], promisifyIdPlusOne)).toEqual([
14
+ 2, 3, 4, 5, 6, 7, 8, 9,
15
+ ]);
16
+ expect(await promiseAllBatched(10, [1, 2, 3, 4, 5, 6, 7, 8], promisifyIdPlusOne)).toEqual([
17
+ 2, 3, 4, 5, 6, 7, 8, 9,
18
+ ]);
19
+ expect(await promiseAllBatched(2, Array(6).fill(0), (_, i) => Promise.resolve(i))).toEqual([
20
+ 0, 1, 2, 3, 4, 5,
21
+ ]);
22
+ });
23
+ describe("promise retries", () => {
24
+ test("should retry by default", async () => {
25
+ let numberOfExecutions = 0;
26
+ const testFunction = () => Promise.reject(numberOfExecutions++);
27
+ try {
28
+ await retry(() => testFunction(), {
29
+ maxRetry: 5,
30
+ });
31
+ } catch (e) {
32
+ expect(e).toBe(5);
33
+ }
34
+ expect(numberOfExecutions).toBe(6);
35
+ });
36
+
37
+ test("should retry when retryCondition is passed", async () => {
38
+ let numberOfExecutions = 0;
39
+ const testFunction = () => Promise.reject(numberOfExecutions++);
40
+ try {
41
+ await retry(() => testFunction(), {
42
+ maxRetry: 5,
43
+ retryCondition: _ => {
44
+ return true;
45
+ },
46
+ });
47
+ } catch (e) {
48
+ expect(e).toBe(5);
49
+ }
50
+ expect(numberOfExecutions).toBe(6);
51
+ });
52
+
53
+ test("should not retry when retryCondition returns false", async () => {
54
+ let numberOfExecutions = 0;
55
+ const testFunction = () => Promise.reject(numberOfExecutions++);
56
+ try {
57
+ await retry(() => testFunction(), {
58
+ maxRetry: 5,
59
+ retryCondition: e => {
60
+ expect(e).toBe(0);
61
+ return false;
62
+ },
63
+ });
64
+ } catch (e) {
65
+ expect(e).toBe(0);
66
+ }
67
+ expect(numberOfExecutions).toBe(1);
68
+ });
69
+ });
20
70
  });
package/src/promise.ts CHANGED
@@ -5,9 +5,10 @@ const defaults = {
5
5
  interval: 300,
6
6
  intervalMultiplicator: 1.5,
7
7
  context: "",
8
+ retryCondition: _ => true,
8
9
  };
9
10
  export function retry<A>(f: () => Promise<A>, options?: Partial<typeof defaults>): Promise<A> {
10
- const { maxRetry, interval, intervalMultiplicator, context } = {
11
+ const { maxRetry, interval, intervalMultiplicator, context, retryCondition } = {
11
12
  ...defaults,
12
13
  ...options,
13
14
  };
@@ -21,6 +22,9 @@ export function retry<A>(f: () => Promise<A>, options?: Partial<typeof defaults>
21
22
 
22
23
  // In case of failure, wait the interval, retry the action
23
24
  return result.catch(e => {
25
+ if (!retryCondition(e)) {
26
+ return e;
27
+ }
24
28
  log("promise-retry", context + " failed. " + remainingTry + " retry remain. " + String(e));
25
29
  return delay(i).then(() => rec(remainingTry - 1, i * intervalMultiplicator));
26
30
  });