rxjs-poll 1.1.8 → 2.0.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.
Files changed (86) hide show
  1. package/README.md +231 -71
  2. package/dist/cjs/common/config.js +43 -25
  3. package/dist/cjs/common/config.js.map +1 -1
  4. package/dist/cjs/common/observables.js +5 -5
  5. package/dist/cjs/common/observables.js.map +1 -1
  6. package/dist/cjs/common/operators.js +12 -0
  7. package/dist/cjs/common/operators.js.map +1 -0
  8. package/dist/cjs/common/strategies.js +41 -0
  9. package/dist/cjs/common/strategies.js.map +1 -0
  10. package/dist/cjs/common/utils.js +2 -2
  11. package/dist/cjs/common/utils.js.map +1 -1
  12. package/dist/cjs/constants/config.const.js +20 -0
  13. package/dist/cjs/constants/config.const.js.map +1 -0
  14. package/dist/cjs/constants/poll.const.js +12 -0
  15. package/dist/cjs/constants/poll.const.js.map +1 -0
  16. package/dist/cjs/constants/strategies.const.js +11 -0
  17. package/dist/cjs/constants/strategies.const.js.map +1 -0
  18. package/dist/cjs/index.js +5 -1
  19. package/dist/cjs/index.js.map +1 -1
  20. package/dist/cjs/poll.js +27 -27
  21. package/dist/cjs/poll.js.map +1 -1
  22. package/dist/cjs/types/config.type.js +3 -0
  23. package/dist/cjs/types/config.type.js.map +1 -0
  24. package/dist/cjs/types/poll.type.js +3 -0
  25. package/dist/cjs/types/poll.type.js.map +1 -0
  26. package/dist/cjs/types/strategies.type.js +3 -0
  27. package/dist/cjs/types/strategies.type.js.map +1 -0
  28. package/dist/cjs/types/utils.type.js +3 -0
  29. package/dist/cjs/types/utils.type.js.map +1 -0
  30. package/dist/esm/common/config.js +33 -21
  31. package/dist/esm/common/config.js.map +1 -1
  32. package/dist/esm/common/observables.js +5 -5
  33. package/dist/esm/common/observables.js.map +1 -1
  34. package/dist/esm/common/operators.js +7 -0
  35. package/dist/esm/common/operators.js.map +1 -0
  36. package/dist/esm/common/strategies.js +38 -0
  37. package/dist/esm/common/strategies.js.map +1 -0
  38. package/dist/esm/common/utils.js +1 -1
  39. package/dist/esm/common/utils.js.map +1 -1
  40. package/dist/esm/constants/config.const.js +17 -0
  41. package/dist/esm/constants/config.const.js.map +1 -0
  42. package/dist/esm/constants/poll.const.js +9 -0
  43. package/dist/esm/constants/poll.const.js.map +1 -0
  44. package/dist/esm/constants/strategies.const.js +8 -0
  45. package/dist/esm/constants/strategies.const.js.map +1 -0
  46. package/dist/esm/index.js +2 -0
  47. package/dist/esm/index.js.map +1 -1
  48. package/dist/esm/poll.js +29 -27
  49. package/dist/esm/poll.js.map +1 -1
  50. package/dist/esm/types/config.type.js +2 -0
  51. package/dist/esm/types/config.type.js.map +1 -0
  52. package/dist/esm/types/poll.type.js +2 -0
  53. package/dist/esm/types/poll.type.js.map +1 -0
  54. package/dist/esm/types/strategies.type.js +2 -0
  55. package/dist/esm/types/strategies.type.js.map +1 -0
  56. package/dist/esm/types/utils.type.js +2 -0
  57. package/dist/esm/types/utils.type.js.map +1 -0
  58. package/dist/types/common/config.d.ts +3 -30
  59. package/dist/types/common/config.d.ts.map +1 -1
  60. package/dist/types/common/observables.d.ts +2 -2
  61. package/dist/types/common/observables.d.ts.map +1 -1
  62. package/dist/types/common/operators.d.ts +3 -0
  63. package/dist/types/common/operators.d.ts.map +1 -0
  64. package/dist/types/common/strategies.d.ts +5 -0
  65. package/dist/types/common/strategies.d.ts.map +1 -0
  66. package/dist/types/common/utils.d.ts +4 -6
  67. package/dist/types/common/utils.d.ts.map +1 -1
  68. package/dist/types/constants/config.const.d.ts +15 -0
  69. package/dist/types/constants/config.const.d.ts.map +1 -0
  70. package/dist/types/constants/poll.const.d.ts +9 -0
  71. package/dist/types/constants/poll.const.d.ts.map +1 -0
  72. package/dist/types/constants/strategies.const.d.ts +8 -0
  73. package/dist/types/constants/strategies.const.d.ts.map +1 -0
  74. package/dist/types/index.d.ts +5 -1
  75. package/dist/types/index.d.ts.map +1 -1
  76. package/dist/types/poll.d.ts +7 -7
  77. package/dist/types/poll.d.ts.map +1 -1
  78. package/dist/types/types/config.type.d.ts +58 -0
  79. package/dist/types/types/config.type.d.ts.map +1 -0
  80. package/dist/types/types/poll.type.d.ts +12 -0
  81. package/dist/types/types/poll.type.d.ts.map +1 -0
  82. package/dist/types/types/strategies.type.d.ts +6 -0
  83. package/dist/types/types/strategies.type.d.ts.map +1 -0
  84. package/dist/types/types/utils.type.d.ts +3 -0
  85. package/dist/types/types/utils.type.d.ts.map +1 -0
  86. package/package.json +2 -2
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.pollType = exports.pollMode = void 0;
4
+ exports.pollMode = {
5
+ DELAY: 'delay',
6
+ RETRY: 'retry',
7
+ };
8
+ exports.pollType = {
9
+ REPEAT: 'repeat',
10
+ INTERVAL: 'interval',
11
+ };
12
+ //# sourceMappingURL=poll.const.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"poll.const.js","sourceRoot":"","sources":["../../../src/constants/poll.const.ts"],"names":[],"mappings":";;;AAAa,QAAA,QAAQ,GAAG;IACtB,KAAK,EAAE,OAAO;IACd,KAAK,EAAE,OAAO;CACN,CAAC;AAEE,QAAA,QAAQ,GAAG;IACtB,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,UAAU;CACZ,CAAC"}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.strategyType = void 0;
4
+ exports.strategyType = {
5
+ CONSTANT: 'constant',
6
+ LINEAR: 'linear',
7
+ EXPONENTIAL: 'exponential',
8
+ RANDOM: 'random',
9
+ DYNAMIC: 'dynamic',
10
+ };
11
+ //# sourceMappingURL=strategies.const.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strategies.const.js","sourceRoot":"","sources":["../../../src/constants/strategies.const.ts"],"names":[],"mappings":";;;AAAa,QAAA,YAAY,GAAG;IAC1B,QAAQ,EAAE,UAAU;IACpB,MAAM,EAAE,QAAQ;IAChB,WAAW,EAAE,aAAa;IAC1B,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,SAAS;CACV,CAAC"}
package/dist/cjs/index.js CHANGED
@@ -1,6 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.poll = void 0;
3
+ exports.poll = exports.strategyType = exports.pollType = void 0;
4
+ var poll_const_1 = require("./constants/poll.const");
5
+ Object.defineProperty(exports, "pollType", { enumerable: true, get: function () { return poll_const_1.pollType; } });
6
+ var strategies_const_1 = require("./constants/strategies.const");
7
+ Object.defineProperty(exports, "strategyType", { enumerable: true, get: function () { return strategies_const_1.strategyType; } });
4
8
  var poll_1 = require("./poll");
5
9
  Object.defineProperty(exports, "poll", { enumerable: true, get: function () { return poll_1.poll; } });
6
10
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AACA,+BAA8B;AAArB,4FAAA,IAAI,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,qDAAkD;AAAzC,sGAAA,QAAQ,OAAA;AACjB,iEAA4D;AAAnD,gHAAA,YAAY,OAAA;AACrB,+BAA8B;AAArB,4FAAA,IAAI,OAAA"}
package/dist/cjs/poll.js CHANGED
@@ -4,39 +4,39 @@ exports.poll = poll;
4
4
  var rxjs_1 = require("rxjs");
5
5
  var config_1 = require("./common/config");
6
6
  var observables_1 = require("./common/observables");
7
+ var operators_1 = require("./common/operators");
7
8
  function poll(config) {
8
9
  return function (source$) {
9
- var _a = (0, config_1.normalizeConfig)(config), type = _a.type, retries = _a.retries, isBackgroundMode = _a.isBackgroundMode, isConsecutiveRule = _a.isConsecutiveRule, getDelay = _a.getDelay;
10
- var retryKey = isConsecutiveRule ? 'consecutiveRetries' : 'retries';
10
+ var _a = (0, config_1.extendConfig)(config), type = _a.type, retry = _a.retry, pauseWhenHidden = _a.pauseWhenHidden, getDelayTime = _a.getDelayTime, getRetryTime = _a.getRetryTime;
11
+ var retryKey = retry.consecutiveOnly ? 'consecutiveRetryCount' : 'retryCount';
11
12
  var state = {
12
- polls: 0,
13
- retries: 0,
14
- consecutiveRetries: 0,
15
- value: null,
16
- error: null,
13
+ pollCount: 0,
14
+ retryCount: 0,
15
+ consecutiveRetryCount: 0,
16
+ value: undefined,
17
+ error: undefined,
17
18
  };
18
- var nextPollDelay = function (value) {
19
- state.polls += 1;
19
+ var nextDelayTime = function (value) {
20
+ state.pollCount += 1;
20
21
  state.value = value;
21
- return getDelay(state);
22
+ return getDelayTime(state);
22
23
  };
23
- var visibility$ = isBackgroundMode ? (0, rxjs_1.of)(true) : observables_1.visibilityState$;
24
- var poller$ = (0, observables_1.getPoller$)(type, source$, nextPollDelay);
25
- return visibility$.pipe((0, rxjs_1.switchMap)(function (isVisible) {
26
- return isVisible
27
- ? poller$.pipe((0, rxjs_1.retry)({
28
- delay: function (error) {
29
- state.error = error;
30
- state.retries += 1;
31
- state.consecutiveRetries += 1;
32
- return state[retryKey] > retries ? (0, rxjs_1.throwError)(function () { return error; }) : (0, rxjs_1.timer)(getDelay(state));
33
- },
34
- }), (0, rxjs_1.tap)(function () {
35
- state.error = null;
36
- state.consecutiveRetries = 0;
37
- }))
38
- : rxjs_1.EMPTY;
39
- }));
24
+ var nextRetryTime = function (error) {
25
+ state.error = error;
26
+ return getRetryTime(state);
27
+ };
28
+ var resetError = function () {
29
+ state.error = null;
30
+ state.consecutiveRetryCount = 0;
31
+ };
32
+ var isRetryLimit = function () {
33
+ state.retryCount += 1;
34
+ state.consecutiveRetryCount += 1;
35
+ return state[retryKey] > retry.limit;
36
+ };
37
+ var visibility$ = pauseWhenHidden ? observables_1.visibilityState$ : (0, rxjs_1.of)(true);
38
+ var poller$ = (0, observables_1.getPoller$)(type, source$, nextDelayTime);
39
+ return visibility$.pipe((0, rxjs_1.switchMap)(function (isVisible) { return (isVisible ? poller$.pipe((0, operators_1.retryPoll)(isRetryLimit, nextRetryTime, resetError)) : rxjs_1.EMPTY); }));
40
40
  };
41
41
  }
42
42
  //# sourceMappingURL=poll.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"poll.js","sourceRoot":"","sources":["../../src/poll.ts"],"names":[],"mappings":";;AAiCA,oBA6CC;AA9ED,6BAAqG;AAErG,0CAAmF;AACnF,oDAAoE;AA8BpE,SAAgB,IAAI,CAAI,MAA4B;IAClD,OAAO,UAAC,OAAO;QACP,IAAA,KAAmE,IAAA,wBAAe,EAAC,MAAM,CAAC,EAAxF,IAAI,UAAA,EAAE,OAAO,aAAA,EAAE,gBAAgB,sBAAA,EAAE,iBAAiB,uBAAA,EAAE,QAAQ,cAA4B,CAAC;QACjG,IAAM,QAAQ,GAAa,iBAAiB,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,SAAS,CAAC;QAChF,IAAM,KAAK,GAAiB;YAC1B,KAAK,EAAE,CAAC;YACR,OAAO,EAAE,CAAC;YACV,kBAAkB,EAAE,CAAC;YAErB,KAAK,EAAE,IAAW;YAClB,KAAK,EAAE,IAAI;SACZ,CAAC;QAEF,IAAM,aAAa,GAAG,UAAC,KAAQ;YAC7B,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;YACjB,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;YAEpB,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC,CAAC;QAEF,IAAM,WAAW,GAAG,gBAAgB,CAAC,CAAC,CAAC,IAAA,SAAE,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,8BAAgB,CAAC;QACnE,IAAM,OAAO,GAAG,IAAA,wBAAU,EAAC,IAAI,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;QAEzD,OAAO,WAAW,CAAC,IAAI,CACrB,IAAA,gBAAS,EAAC,UAAC,SAAS;YAClB,OAAA,SAAS;gBACP,CAAC,CAAC,OAAO,CAAC,IAAI,CACV,IAAA,YAAK,EAAC;oBACJ,KAAK,YAAC,KAAK;wBACT,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;wBACpB,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;wBACnB,KAAK,CAAC,kBAAkB,IAAI,CAAC,CAAC;wBAE9B,OAAO,KAAK,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,IAAA,iBAAU,EAAC,cAAM,OAAA,KAAK,EAAL,CAAK,CAAC,CAAC,CAAC,CAAC,IAAA,YAAK,EAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;oBACtF,CAAC;iBACF,CAAC,EACF,IAAA,UAAG,EAAC;oBACF,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;oBACnB,KAAK,CAAC,kBAAkB,GAAG,CAAC,CAAC;gBAC/B,CAAC,CAAC,CACH;gBACH,CAAC,CAAC,YAAK;QAhBT,CAgBS,CACV,CACF,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"poll.js","sourceRoot":"","sources":["../../src/poll.ts"],"names":[],"mappings":";;AAoCA,oBA4CC;AAhFD,6BAAsE;AAEtE,0CAA+C;AAC/C,oDAAoE;AACpE,gDAA+C;AAgC/C,SAAgB,IAAI,CAAI,MAA4B;IAClD,OAAO,UAAC,OAAO;QACP,IAAA,KAA+D,IAAA,qBAAY,EAAC,MAAM,CAAC,EAAjF,IAAI,UAAA,EAAE,KAAK,WAAA,EAAE,eAAe,qBAAA,EAAE,YAAY,kBAAA,EAAE,YAAY,kBAAyB,CAAC;QAC1F,IAAM,QAAQ,GAAa,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,YAAY,CAAC;QAC1F,IAAM,KAAK,GAAiB;YAC1B,SAAS,EAAE,CAAC;YACZ,UAAU,EAAE,CAAC;YACb,qBAAqB,EAAE,CAAC;YACxB,KAAK,EAAE,SAAS;YAChB,KAAK,EAAE,SAAS;SACjB,CAAC;QAEF,IAAM,aAAa,GAAG,UAAC,KAAQ;YAC7B,KAAK,CAAC,SAAS,IAAI,CAAC,CAAC;YACrB,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;YAEpB,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC,CAAC;QAEF,IAAM,aAAa,GAAG,UAAC,KAAU;YAC/B,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;YAEpB,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC,CAAC;QAEF,IAAM,UAAU,GAAG;YACjB,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;YACnB,KAAK,CAAC,qBAAqB,GAAG,CAAC,CAAC;QAClC,CAAC,CAAC;QAEF,IAAM,YAAY,GAAG;YACnB,KAAK,CAAC,UAAU,IAAI,CAAC,CAAC;YACtB,KAAK,CAAC,qBAAqB,IAAI,CAAC,CAAC;YAEjC,OAAO,KAAK,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;QACvC,CAAC,CAAC;QAEF,IAAM,WAAW,GAAG,eAAe,CAAC,CAAC,CAAC,8BAAgB,CAAC,CAAC,CAAC,IAAA,SAAE,EAAC,IAAI,CAAC,CAAC;QAClE,IAAM,OAAO,GAAG,IAAA,wBAAU,EAAC,IAAI,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;QAEzD,OAAO,WAAW,CAAC,IAAI,CACrB,IAAA,gBAAS,EAAC,UAAC,SAAS,IAAK,OAAA,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAA,qBAAS,EAAC,YAAY,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,YAAK,CAAC,EAAtF,CAAsF,CAAC,CACjH,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=config.type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.type.js","sourceRoot":"","sources":["../../../src/types/config.type.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=poll.type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"poll.type.js","sourceRoot":"","sources":["../../../src/types/poll.type.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=strategies.type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strategies.type.js","sourceRoot":"","sources":["../../../src/types/strategies.type.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=utils.type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.type.js","sourceRoot":"","sources":["../../../src/types/utils.type.ts"],"names":[],"mappings":""}
@@ -1,29 +1,41 @@
1
- import { isFunction, normalizeNumber, sampleNumber } from './utils';
2
- export function normalizeConfig(config) {
1
+ import { controlConfig } from '../constants/config.const';
2
+ import { getStrategyTimeProducer } from './strategies';
3
+ import { isFunction, normalizeNumber, pickNumber } from './utils';
4
+ export function extendConfig(config) {
5
+ const normalizedConfig = normalizeConfig(config);
3
6
  return {
4
- type: config?.type ?? controlConfig.type,
5
- getDelay: isFunction(config?.delay) ? delayProducer(config.delay) : defaultProducer(config?.delay),
6
- retries: normalizeNumber(config?.retries, controlConfig.retries, false),
7
- isConsecutiveRule: config?.isConsecutiveRule ?? true,
8
- isBackgroundMode: Boolean(config?.isBackgroundMode),
7
+ ...normalizedConfig,
8
+ getDelayTime: getTimeProducer('delay', normalizedConfig),
9
+ getRetryTime: getTimeProducer('retry', normalizedConfig),
9
10
  };
10
11
  }
11
- function delayProducer(delayFunc) {
12
+ function getTimeProducer(mode, config) {
13
+ const defaultTime = controlConfig[mode].time;
14
+ const timeProducer = getStrategyTimeProducer(mode, config);
12
15
  return (state) => {
13
- const delay = delayFunc(Object.assign({}, state));
14
- const normalizedDelay = normalizeNumber(delay, controlConfig.delay);
15
- return sampleNumber(normalizedDelay);
16
+ const producedTime = timeProducer({ ...state });
17
+ const normalizedTime = normalizeNumber(producedTime, defaultTime);
18
+ return pickNumber(normalizedTime);
16
19
  };
17
20
  }
18
- function defaultProducer(delay) {
19
- const normalizedDelay = normalizeNumber(delay, controlConfig.delay);
20
- return () => sampleNumber(normalizedDelay);
21
+ function normalizeConfig(config) {
22
+ return {
23
+ type: config?.type ?? controlConfig.type,
24
+ delay: {
25
+ strategy: config?.delay?.strategy ?? controlConfig.delay.strategy,
26
+ time: isFunction(config?.delay?.time)
27
+ ? config.delay.time
28
+ : normalizeNumber(config?.delay?.time, controlConfig.delay.time),
29
+ },
30
+ retry: {
31
+ strategy: config?.retry?.strategy ?? controlConfig.retry.strategy,
32
+ time: isFunction(config?.retry?.time)
33
+ ? config.retry.time
34
+ : normalizeNumber(config?.retry?.time, controlConfig.retry.time),
35
+ limit: normalizeNumber(config?.retry?.limit, controlConfig.retry.limit, false),
36
+ consecutiveOnly: config?.retry?.consecutiveOnly ?? controlConfig.retry.consecutiveOnly,
37
+ },
38
+ pauseWhenHidden: config?.pauseWhenHidden ?? controlConfig.pauseWhenHidden,
39
+ };
21
40
  }
22
- export const controlConfig = {
23
- type: 'repeat',
24
- delay: 1000,
25
- retries: 3,
26
- isConsecutiveRule: true,
27
- isBackgroundMode: false,
28
- };
29
41
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/common/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAO,eAAe,EAAE,YAAY,EAAgB,MAAM,SAAS,CAAC;AAEvF,MAAM,UAAU,eAAe,CAAI,MAA4B;IAC7D,OAAO;QACL,IAAI,EAAE,MAAM,EAAE,IAAI,IAAI,aAAa,CAAC,IAAI;QACxC,QAAQ,EAAE,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC;QAClG,OAAO,EAAE,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC;QACvE,iBAAiB,EAAE,MAAM,EAAE,iBAAiB,IAAI,IAAI;QACpD,gBAAgB,EAAE,OAAO,CAAC,MAAM,EAAE,gBAAgB,CAAC;KACpD,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAI,SAA2B;IACnD,OAAO,CAAC,KAAK,EAAU,EAAE;QACvB,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;QAClD,MAAM,eAAe,GAAG,eAAe,CAAC,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;QAEpE,OAAO,YAAY,CAAC,eAAe,CAAC,CAAC;IACvC,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAI,KAAkC;IAC5D,MAAM,eAAe,GAAG,eAAe,CAAC,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;IAEpE,OAAO,GAAW,EAAE,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAA2B;IACnD,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,IAAI;IACX,OAAO,EAAE,CAAC;IACV,iBAAiB,EAAE,IAAI;IACvB,gBAAgB,EAAE,KAAK;CACf,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/common/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAI1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAElE,MAAM,UAAU,YAAY,CAAI,MAA4B;IAC1D,MAAM,gBAAgB,GAA4B,eAAe,CAAC,MAAM,CAAC,CAAC;IAE1E,OAAO;QACL,GAAG,gBAAgB;QACnB,YAAY,EAAE,eAAe,CAAC,OAAO,EAAE,gBAAgB,CAAC;QACxD,YAAY,EAAE,eAAe,CAAC,OAAO,EAAE,gBAAgB,CAAC;KACzD,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAI,IAAc,EAAE,MAA+B;IACzE,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;IAC7C,MAAM,YAAY,GAAG,uBAAuB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAE3D,OAAO,CAAC,KAAK,EAAU,EAAE;QACvB,MAAM,YAAY,GAAG,YAAY,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;QAChD,MAAM,cAAc,GAAG,eAAe,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;QAElE,OAAO,UAAU,CAAC,cAAc,CAAC,CAAC;IACpC,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAI,MAA2B;IACrD,OAAO;QACL,IAAI,EAAE,MAAM,EAAE,IAAI,IAAI,aAAa,CAAC,IAAI;QACxC,KAAK,EAAE;YACL,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,IAAI,aAAa,CAAC,KAAK,CAAC,QAAQ;YACjE,IAAI,EAAE,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;gBACnC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI;gBACnB,CAAC,CAAC,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC;SACnE;QACD,KAAK,EAAE;YACL,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,IAAI,aAAa,CAAC,KAAK,CAAC,QAAQ;YACjE,IAAI,EAAE,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;gBACnC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI;gBACnB,CAAC,CAAC,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC;YAClE,KAAK,EAAE,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC;YAC9E,eAAe,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,IAAI,aAAa,CAAC,KAAK,CAAC,eAAe;SACvF;QACD,eAAe,EAAE,MAAM,EAAE,eAAe,IAAI,aAAa,CAAC,eAAe;KAC1E,CAAC;AACJ,CAAC"}
@@ -1,23 +1,23 @@
1
1
  import { fromEvent, map, of, repeat, shareReplay, startWith, switchMap, takeLast, tap, timer } from 'rxjs';
2
2
  import { isBrowser, isDocumentVisible } from './utils';
3
3
  export const visibilityState$ = pageVisibility$().pipe(shareReplay({ bufferSize: 1, refCount: true }));
4
- export function getPoller$(type, source$, getDelay) {
4
+ export function getPoller$(type, source$, getTime) {
5
5
  let lastValue;
6
6
  const completed$ = source$.pipe(takeLast(1), tap((value) => {
7
7
  lastValue = value;
8
8
  }));
9
9
  return type === 'repeat'
10
10
  ? completed$.pipe(repeat({
11
- delay: () => timer(getDelay(lastValue)),
11
+ delay: () => timer(getTime(lastValue)),
12
12
  }))
13
- : dynamicInterval$(() => getDelay(lastValue)).pipe(switchMap(() => completed$));
13
+ : dynamicInterval$(() => getTime(lastValue)).pipe(switchMap(() => completed$));
14
14
  }
15
15
  function pageVisibility$() {
16
16
  return isBrowser() ? fromEvent(document, 'visibilitychange').pipe(startWith(null), map(isDocumentVisible)) : of(true);
17
17
  }
18
- function dynamicInterval$(getDelay) {
18
+ function dynamicInterval$(getTime) {
19
19
  return of(null).pipe(repeat({
20
- delay: () => timer(getDelay()),
20
+ delay: () => timer(getTime()),
21
21
  }));
22
22
  }
23
23
  //# sourceMappingURL=observables.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"observables.js","sourceRoot":"","sources":["../../../src/common/observables.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,GAAG,EAAc,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAGvH,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEvD,MAAM,CAAC,MAAM,gBAAgB,GAAG,eAAe,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAEvG,MAAM,UAAU,UAAU,CAAI,IAAc,EAAE,OAAsB,EAAE,QAA8B;IAClG,IAAI,SAAY,CAAC;IACjB,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAC7B,QAAQ,CAAC,CAAC,CAAC,EACX,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACZ,SAAS,GAAG,KAAK,CAAC;IACpB,CAAC,CAAC,CACH,CAAC;IAEF,OAAO,IAAI,KAAK,QAAQ;QACtB,CAAC,CAAC,UAAU,CAAC,IAAI,CACb,MAAM,CAAC;YACL,KAAK,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;SACxC,CAAC,CACH;QACH,CAAC,CAAC,gBAAgB,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;AACpF,CAAC;AAED,SAAS,eAAe;IACtB,OAAO,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;AACxH,CAAC;AAED,SAAS,gBAAgB,CAAC,QAAsB;IAC9C,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAClB,MAAM,CAAC;QACL,KAAK,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;KAC/B,CAAC,CACH,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"observables.js","sourceRoot":"","sources":["../../../src/common/observables.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,GAAG,EAAc,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAGvH,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEvD,MAAM,CAAC,MAAM,gBAAgB,GAAG,eAAe,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAEvG,MAAM,UAAU,UAAU,CAAI,IAAc,EAAE,OAAsB,EAAE,OAA6B;IACjG,IAAI,SAAY,CAAC;IACjB,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAC7B,QAAQ,CAAC,CAAC,CAAC,EACX,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACZ,SAAS,GAAG,KAAK,CAAC;IACpB,CAAC,CAAC,CACH,CAAC;IAEF,OAAO,IAAI,KAAK,QAAQ;QACtB,CAAC,CAAC,UAAU,CAAC,IAAI,CACb,MAAM,CAAC;YACL,KAAK,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;SACvC,CAAC,CACH;QACH,CAAC,CAAC,gBAAgB,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;AACnF,CAAC;AAED,SAAS,eAAe;IACtB,OAAO,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;AACxH,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAqB;IAC7C,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAClB,MAAM,CAAC;QACL,KAAK,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;KAC9B,CAAC,CACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { retry, tap, throwError, timer } from 'rxjs';
2
+ export function retryPoll(isLimit, getTime, resetError) {
3
+ return (source) => source.pipe(retry({
4
+ delay: (error) => (isLimit() ? throwError(() => error) : timer(getTime(error))),
5
+ }), tap(() => resetError()));
6
+ }
7
+ //# sourceMappingURL=operators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operators.js","sourceRoot":"","sources":["../../../src/common/operators.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAE/E,MAAM,UAAU,SAAS,CACvB,OAAsB,EACtB,OAA+B,EAC/B,UAAsB;IAEtB,OAAO,CAAC,MAAM,EAAE,EAAE,CAChB,MAAM,CAAC,IAAI,CACT,KAAK,CAAC;QACJ,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;KAChF,CAAC,EACF,GAAG,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC,CACxB,CAAC;AACN,CAAC"}
@@ -0,0 +1,38 @@
1
+ import { randomNumber } from './utils';
2
+ export function getStrategyTimeProducer(mode, config) {
3
+ const { strategy, time } = config[mode];
4
+ const isDelayMode = mode === 'delay';
5
+ const isConsecutive = config.retry.consecutiveOnly;
6
+ let timeProducer;
7
+ let attemptKey;
8
+ if (isDelayMode) {
9
+ attemptKey = 'pollCount';
10
+ }
11
+ else if (isConsecutive) {
12
+ attemptKey = 'consecutiveRetryCount';
13
+ }
14
+ else {
15
+ attemptKey = 'retryCount';
16
+ }
17
+ switch (strategy) {
18
+ case 'constant':
19
+ timeProducer = () => time;
20
+ break;
21
+ case 'linear':
22
+ timeProducer = (state) => state[attemptKey] * time;
23
+ break;
24
+ case 'exponential':
25
+ timeProducer = (state) => Math.pow(2, state[attemptKey] - 1) * time;
26
+ break;
27
+ case 'random':
28
+ timeProducer = () => randomNumber(time[0], time[1]);
29
+ break;
30
+ case 'dynamic':
31
+ timeProducer = (state) => time(state);
32
+ break;
33
+ default:
34
+ throw new Error('rxjs-poll: Unknown strategy!');
35
+ }
36
+ return timeProducer;
37
+ }
38
+ //# sourceMappingURL=strategies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strategies.js","sourceRoot":"","sources":["../../../src/common/strategies.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,MAAM,UAAU,uBAAuB,CAAI,IAAc,EAAE,MAA+B;IACxF,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,WAAW,GAAG,IAAI,KAAK,OAAO,CAAC;IACrC,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC;IACnD,IAAI,YAAgC,CAAC;IACrC,IAAI,UAAyB,CAAC;IAE9B,IAAI,WAAW,EAAE,CAAC;QAChB,UAAU,GAAG,WAAW,CAAC;IAC3B,CAAC;SAAM,IAAI,aAAa,EAAE,CAAC;QACzB,UAAU,GAAG,uBAAuB,CAAC;IACvC,CAAC;SAAM,CAAC;QACN,UAAU,GAAG,YAAY,CAAC;IAC5B,CAAC;IAED,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,UAAU;YACb,YAAY,GAAG,GAAG,EAAE,CAAC,IAAc,CAAC;YACpC,MAAM;QACR,KAAK,QAAQ;YACX,YAAY,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,GAAI,IAAe,CAAC;YAC/D,MAAM;QACR,KAAK,aAAa;YAChB,YAAY,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,GAAI,IAAe,CAAC;YAChF,MAAM;QACR,KAAK,QAAQ;YACX,YAAY,GAAG,GAAG,EAAE,CAAC,YAAY,CAAE,IAAe,CAAC,CAAC,CAAC,EAAG,IAAe,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5E,MAAM;QACR,KAAK,SAAS;YACZ,YAAY,GAAG,CAAC,KAAmB,EAAE,EAAE,CAAE,IAA2B,CAAC,KAAK,CAAC,CAAC;YAC5E,MAAM;QACR;YACE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IACpD,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC"}
@@ -8,7 +8,7 @@ export function normalizeNumber(value, defaultValue = 0, isFinite = true) {
8
8
  }
9
9
  return Math.abs(normalizedValue);
10
10
  }
11
- export function sampleNumber(value) {
11
+ export function pickNumber(value) {
12
12
  return Array.isArray(value) ? randomNumber(value[0], value[1]) : value;
13
13
  }
14
14
  export function randomNumber(min, max) {
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/common/utils.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,eAAe,CAC7B,KAAkC,EAClC,YAAY,GAAG,CAAC,EAChB,QAAQ,GAAG,IAAI;IAEf,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAW,CAAC;IAChF,CAAC;IAED,IAAI,eAAe,GAAG,KAAK,IAAI,YAAY,CAAC;IAE5C,IAAI,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC;QACrF,eAAe,GAAG,YAAY,CAAC;IACjC,CAAC;IAED,OAAO,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAsB;IACjD,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,GAAW,EAAE,GAAW;IACnD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAc;IACvC,OAAO,OAAO,KAAK,KAAK,UAAU,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,OAAO,OAAO,UAAU,CAAC,MAAM,KAAK,WAAW,IAAI,OAAO,UAAU,CAAC,MAAM,CAAC,QAAQ,KAAK,WAAW,CAAC;AACvG,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC1B,CAAC"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/common/utils.ts"],"names":[],"mappings":"AASA,MAAM,UAAU,eAAe,CAAC,KAA4B,EAAE,YAAY,GAAG,CAAC,EAAE,QAAQ,GAAG,IAAI;IAC7F,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAW,CAAC;IAChF,CAAC;IAED,IAAI,eAAe,GAAG,KAAK,IAAI,YAAY,CAAC;IAE5C,IAAI,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC;QACrF,eAAe,GAAG,YAAY,CAAC;IACjC,CAAC;IAED,OAAO,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAsB;IAC/C,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,GAAW,EAAE,GAAW;IACnD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAc;IACvC,OAAO,OAAO,KAAK,KAAK,UAAU,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,OAAO,OAAO,UAAU,CAAC,MAAM,KAAK,WAAW,IAAI,OAAO,UAAU,CAAC,MAAM,CAAC,QAAQ,KAAK,WAAW,CAAC;AACvG,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { pollType } from './poll.const';
2
+ import { strategyType } from './strategies.const';
3
+ export const controlConfig = {
4
+ type: pollType.REPEAT,
5
+ delay: {
6
+ strategy: strategyType.CONSTANT,
7
+ time: 1000,
8
+ },
9
+ retry: {
10
+ strategy: strategyType.EXPONENTIAL,
11
+ time: 1000,
12
+ limit: 3,
13
+ consecutiveOnly: true,
14
+ },
15
+ pauseWhenHidden: true,
16
+ };
17
+ //# sourceMappingURL=config.const.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.const.js","sourceRoot":"","sources":["../../../src/constants/config.const.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,IAAI,EAAE,QAAQ,CAAC,MAAM;IACrB,KAAK,EAAE;QACL,QAAQ,EAAE,YAAY,CAAC,QAAQ;QAC/B,IAAI,EAAE,IAAI;KACX;IACD,KAAK,EAAE;QACL,QAAQ,EAAE,YAAY,CAAC,WAAW;QAClC,IAAI,EAAE,IAAI;QACV,KAAK,EAAE,CAAC;QACR,eAAe,EAAE,IAAI;KACtB;IACD,eAAe,EAAE,IAAI;CAC2B,CAAC"}
@@ -0,0 +1,9 @@
1
+ export const pollMode = {
2
+ DELAY: 'delay',
3
+ RETRY: 'retry',
4
+ };
5
+ export const pollType = {
6
+ REPEAT: 'repeat',
7
+ INTERVAL: 'interval',
8
+ };
9
+ //# sourceMappingURL=poll.const.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"poll.const.js","sourceRoot":"","sources":["../../../src/constants/poll.const.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,KAAK,EAAE,OAAO;IACd,KAAK,EAAE,OAAO;CACN,CAAC;AAEX,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,UAAU;CACZ,CAAC"}
@@ -0,0 +1,8 @@
1
+ export const strategyType = {
2
+ CONSTANT: 'constant',
3
+ LINEAR: 'linear',
4
+ EXPONENTIAL: 'exponential',
5
+ RANDOM: 'random',
6
+ DYNAMIC: 'dynamic',
7
+ };
8
+ //# sourceMappingURL=strategies.const.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strategies.const.js","sourceRoot":"","sources":["../../../src/constants/strategies.const.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,QAAQ,EAAE,UAAU;IACpB,MAAM,EAAE,QAAQ;IAChB,WAAW,EAAE,aAAa;IAC1B,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,SAAS;CACV,CAAC"}
package/dist/esm/index.js CHANGED
@@ -1,2 +1,4 @@
1
+ export { pollType } from './constants/poll.const';
2
+ export { strategyType } from './constants/strategies.const';
1
3
  export { poll } from './poll';
2
4
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC"}
package/dist/esm/poll.js CHANGED
@@ -1,37 +1,39 @@
1
- import { EMPTY, of, retry, switchMap, tap, throwError, timer } from 'rxjs';
2
- import { normalizeConfig } from './common/config';
1
+ import { EMPTY, of, switchMap } from 'rxjs';
2
+ import { extendConfig } from './common/config';
3
3
  import { getPoller$, visibilityState$ } from './common/observables';
4
+ import { retryPoll } from './common/operators';
4
5
  export function poll(config) {
5
6
  return (source$) => {
6
- const { type, retries, isBackgroundMode, isConsecutiveRule, getDelay } = normalizeConfig(config);
7
- const retryKey = isConsecutiveRule ? 'consecutiveRetries' : 'retries';
7
+ const { type, retry, pauseWhenHidden, getDelayTime, getRetryTime } = extendConfig(config);
8
+ const retryKey = retry.consecutiveOnly ? 'consecutiveRetryCount' : 'retryCount';
8
9
  const state = {
9
- polls: 0,
10
- retries: 0,
11
- consecutiveRetries: 0,
12
- value: null,
13
- error: null,
10
+ pollCount: 0,
11
+ retryCount: 0,
12
+ consecutiveRetryCount: 0,
13
+ value: undefined,
14
+ error: undefined,
14
15
  };
15
- const nextPollDelay = (value) => {
16
- state.polls += 1;
16
+ const nextDelayTime = (value) => {
17
+ state.pollCount += 1;
17
18
  state.value = value;
18
- return getDelay(state);
19
+ return getDelayTime(state);
19
20
  };
20
- const visibility$ = isBackgroundMode ? of(true) : visibilityState$;
21
- const poller$ = getPoller$(type, source$, nextPollDelay);
22
- return visibility$.pipe(switchMap((isVisible) => isVisible
23
- ? poller$.pipe(retry({
24
- delay(error) {
25
- state.error = error;
26
- state.retries += 1;
27
- state.consecutiveRetries += 1;
28
- return state[retryKey] > retries ? throwError(() => error) : timer(getDelay(state));
29
- },
30
- }), tap(() => {
31
- state.error = null;
32
- state.consecutiveRetries = 0;
33
- }))
34
- : EMPTY));
21
+ const nextRetryTime = (error) => {
22
+ state.error = error;
23
+ return getRetryTime(state);
24
+ };
25
+ const resetError = () => {
26
+ state.error = null;
27
+ state.consecutiveRetryCount = 0;
28
+ };
29
+ const isRetryLimit = () => {
30
+ state.retryCount += 1;
31
+ state.consecutiveRetryCount += 1;
32
+ return state[retryKey] > retry.limit;
33
+ };
34
+ const visibility$ = pauseWhenHidden ? visibilityState$ : of(true);
35
+ const poller$ = getPoller$(type, source$, nextDelayTime);
36
+ return visibility$.pipe(switchMap((isVisible) => (isVisible ? poller$.pipe(retryPoll(isRetryLimit, nextRetryTime, resetError)) : EMPTY)));
35
37
  };
36
38
  }
37
39
  //# sourceMappingURL=poll.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"poll.js","sourceRoot":"","sources":["../../src/poll.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAA4B,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAErG,OAAO,EAAE,eAAe,EAAmC,MAAM,iBAAiB,CAAC;AACnF,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AA8BpE,MAAM,UAAU,IAAI,CAAI,MAA4B;IAClD,OAAO,CAAC,OAAO,EAAE,EAAE;QACjB,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;QACjG,MAAM,QAAQ,GAAa,iBAAiB,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,SAAS,CAAC;QAChF,MAAM,KAAK,GAAiB;YAC1B,KAAK,EAAE,CAAC;YACR,OAAO,EAAE,CAAC;YACV,kBAAkB,EAAE,CAAC;YAErB,KAAK,EAAE,IAAW;YAClB,KAAK,EAAE,IAAI;SACZ,CAAC;QAEF,MAAM,aAAa,GAAG,CAAC,KAAQ,EAAU,EAAE;YACzC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;YACjB,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;YAEpB,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC,CAAC;QAEF,MAAM,WAAW,GAAG,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC;QACnE,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;QAEzD,OAAO,WAAW,CAAC,IAAI,CACrB,SAAS,CAAC,CAAC,SAAS,EAAE,EAAE,CACtB,SAAS;YACP,CAAC,CAAC,OAAO,CAAC,IAAI,CACV,KAAK,CAAC;gBACJ,KAAK,CAAC,KAAK;oBACT,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;oBACpB,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;oBACnB,KAAK,CAAC,kBAAkB,IAAI,CAAC,CAAC;oBAE9B,OAAO,KAAK,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;gBACtF,CAAC;aACF,CAAC,EACF,GAAG,CAAC,GAAG,EAAE;gBACP,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;gBACnB,KAAK,CAAC,kBAAkB,GAAG,CAAC,CAAC;YAC/B,CAAC,CAAC,CACH;YACH,CAAC,CAAC,KAAK,CACV,CACF,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"poll.js","sourceRoot":"","sources":["../../src/poll.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAA4B,EAAE,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAEtE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAgC/C,MAAM,UAAU,IAAI,CAAI,MAA4B;IAClD,OAAO,CAAC,OAAO,EAAE,EAAE;QACjB,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,YAAY,EAAE,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QAC1F,MAAM,QAAQ,GAAa,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,YAAY,CAAC;QAC1F,MAAM,KAAK,GAAiB;YAC1B,SAAS,EAAE,CAAC;YACZ,UAAU,EAAE,CAAC;YACb,qBAAqB,EAAE,CAAC;YACxB,KAAK,EAAE,SAAS;YAChB,KAAK,EAAE,SAAS;SACjB,CAAC;QAEF,MAAM,aAAa,GAAG,CAAC,KAAQ,EAAU,EAAE;YACzC,KAAK,CAAC,SAAS,IAAI,CAAC,CAAC;YACrB,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;YAEpB,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC,CAAC;QAEF,MAAM,aAAa,GAAG,CAAC,KAAU,EAAU,EAAE;YAC3C,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;YAEpB,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC,CAAC;QAEF,MAAM,UAAU,GAAG,GAAS,EAAE;YAC5B,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;YACnB,KAAK,CAAC,qBAAqB,GAAG,CAAC,CAAC;QAClC,CAAC,CAAC;QAEF,MAAM,YAAY,GAAG,GAAY,EAAE;YACjC,KAAK,CAAC,UAAU,IAAI,CAAC,CAAC;YACtB,KAAK,CAAC,qBAAqB,IAAI,CAAC,CAAC;YAEjC,OAAO,KAAK,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;QACvC,CAAC,CAAC;QAEF,MAAM,WAAW,GAAG,eAAe,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QAClE,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;QAEzD,OAAO,WAAW,CAAC,IAAI,CACrB,SAAS,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CACjH,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=config.type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.type.js","sourceRoot":"","sources":["../../../src/types/config.type.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=poll.type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"poll.type.js","sourceRoot":"","sources":["../../../src/types/poll.type.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=strategies.type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strategies.type.js","sourceRoot":"","sources":["../../../src/types/strategies.type.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=utils.type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.type.js","sourceRoot":"","sources":["../../../src/types/utils.type.ts"],"names":[],"mappings":""}
@@ -1,31 +1,4 @@
1
- import { Nil, UnsafeMinMax } from './utils';
2
- export declare function normalizeConfig<T>(config?: PollConfig<T> | Nil): NormalizedPollConfig<T>;
3
- export declare const controlConfig: ControlPollConfig<any>;
4
- export type ControlPollConfig<T> = {
5
- delay: number;
6
- } & Omit<NormalizedPollConfig<T>, 'getDelay'>;
7
- export type NormalizedPollConfig<T> = {
8
- type: PollType;
9
- getDelay: DelayProducer<T>;
10
- retries: number;
11
- isConsecutiveRule: boolean;
12
- isBackgroundMode: boolean;
13
- };
14
- export type PollConfig<T> = {
15
- type?: PollType | Nil;
16
- delay?: number | UnsafeMinMax | PollDelayFunc<T> | Nil;
17
- retries?: number | Nil;
18
- isConsecutiveRule?: boolean | Nil;
19
- isBackgroundMode?: boolean | Nil;
20
- };
21
- export type PollType = 'repeat' | 'interval';
22
- export type PollDelayFunc<T> = (state: PollState<T>) => number | UnsafeMinMax | Nil;
23
- type DelayProducer<T> = (state: PollState<T>) => number;
24
- export type PollState<T> = {
25
- polls: number;
26
- value: T;
27
- error: any | null;
28
- } & Record<RetryKey, number>;
29
- export type RetryKey = 'retries' | 'consecutiveRetries';
30
- export {};
1
+ import { ExtendedPollConfig, PollConfig } from '../types/config.type';
2
+ import { Nil } from '../types/utils.type';
3
+ export declare function extendConfig<T>(config?: PollConfig<T> | Nil): ExtendedPollConfig<T>;
31
4
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/common/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,GAAG,EAAiC,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvF,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAQxF;AAiBD,eAAO,MAAM,aAAa,EAAE,iBAAiB,CAAC,GAAG,CAMvC,CAAC;AAEX,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI;IACjC,KAAK,EAAE,MAAM,CAAC;CACf,GAAG,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;AAE9C,MAAM,MAAM,oBAAoB,CAAC,CAAC,IAAI;IACpC,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,gBAAgB,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI;IAC1B,IAAI,CAAC,EAAE,QAAQ,GAAG,GAAG,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,GAAG,YAAY,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;IACvD,OAAO,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC;IACvB,iBAAiB,CAAC,EAAE,OAAO,GAAG,GAAG,CAAC;IAClC,gBAAgB,CAAC,EAAE,OAAO,GAAG,GAAG,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,UAAU,CAAC;AAC7C,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,MAAM,GAAG,YAAY,GAAG,GAAG,CAAC;AACpF,KAAK,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC;AAExD,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,CAAC,CAAC;IACT,KAAK,EAAE,GAAG,GAAG,IAAI,CAAC;CACnB,GAAG,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AAE7B,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,oBAAoB,CAAC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/common/config.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAwB,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAE5F,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAI1C,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAQnF"}
@@ -1,5 +1,5 @@
1
1
  import { Observable } from 'rxjs';
2
- import { PollType } from './config';
2
+ import { PollType } from '../types/poll.type';
3
3
  export declare const visibilityState$: Observable<boolean>;
4
- export declare function getPoller$<T>(type: PollType, source$: Observable<T>, getDelay: (value: T) => number): Observable<T>;
4
+ export declare function getPoller$<T>(type: PollType, source$: Observable<T>, getTime: (value: T) => number): Observable<T>;
5
5
  //# sourceMappingURL=observables.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"observables.d.ts","sourceRoot":"","sources":["../../../src/common/observables.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,UAAU,EAAuE,MAAM,MAAM,CAAC;AAEvH,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAGpC,eAAO,MAAM,gBAAgB,qBAAyE,CAAC;AAEvG,wBAAgB,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,CAgBnH"}
1
+ {"version":3,"file":"observables.d.ts","sourceRoot":"","sources":["../../../src/common/observables.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,UAAU,EAAuE,MAAM,MAAM,CAAC;AAEvH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAG9C,eAAO,MAAM,gBAAgB,qBAAyE,CAAC;AAEvG,wBAAgB,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,CAgBlH"}