@dereekb/rxjs 2.0.0 → 4.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 (95) hide show
  1. package/CHANGELOG.md +47 -0
  2. package/package.json +10 -8
  3. package/src/index.js +1 -1
  4. package/src/index.js.map +1 -1
  5. package/src/lib/filter/filter.map.d.ts +4 -3
  6. package/src/lib/filter/filter.map.js.map +1 -1
  7. package/src/lib/filter/filter.source.d.ts +4 -4
  8. package/src/lib/filter/filter.source.js.map +1 -1
  9. package/src/lib/filter/index.js +4 -4
  10. package/src/lib/filter/index.js.map +1 -1
  11. package/src/lib/index.d.ts +1 -0
  12. package/src/lib/index.js +8 -7
  13. package/src/lib/index.js.map +1 -1
  14. package/src/lib/iterator/index.d.ts +1 -0
  15. package/src/lib/iterator/index.js +7 -6
  16. package/src/lib/iterator/index.js.map +1 -1
  17. package/src/lib/iterator/iteration.accumulator.d.ts +8 -4
  18. package/src/lib/iterator/iteration.accumulator.js +18 -21
  19. package/src/lib/iterator/iteration.accumulator.js.map +1 -1
  20. package/src/lib/iterator/iteration.accumulator.rxjs.d.ts +7 -3
  21. package/src/lib/iterator/iteration.accumulator.rxjs.js +21 -10
  22. package/src/lib/iterator/iteration.accumulator.rxjs.js.map +1 -1
  23. package/src/lib/iterator/iteration.d.ts +7 -3
  24. package/src/lib/iterator/iteration.mapped.page.d.ts +3 -2
  25. package/src/lib/iterator/iteration.mapped.page.js.map +1 -1
  26. package/src/lib/iterator/iteration.next.d.ts +8 -3
  27. package/src/lib/iterator/iteration.next.js +19 -6
  28. package/src/lib/iterator/iteration.next.js.map +1 -1
  29. package/src/lib/iterator/iterator.page.d.ts +22 -6
  30. package/src/lib/iterator/iterator.page.js +17 -5
  31. package/src/lib/iterator/iterator.page.js.map +1 -1
  32. package/src/lib/loading/index.js +8 -8
  33. package/src/lib/loading/index.js.map +1 -1
  34. package/src/lib/loading/loading.state.d.ts +4 -1
  35. package/src/lib/loading/loading.state.js +12 -2
  36. package/src/lib/loading/loading.state.js.map +1 -1
  37. package/src/lib/lock.d.ts +13 -7
  38. package/src/lib/lock.js +38 -14
  39. package/src/lib/lock.js.map +1 -1
  40. package/src/lib/object.js +2 -2
  41. package/src/lib/object.js.map +1 -1
  42. package/src/lib/rxjs/array.d.ts +17 -0
  43. package/src/lib/rxjs/array.js +23 -9
  44. package/src/lib/rxjs/array.js.map +1 -1
  45. package/src/lib/rxjs/boolean.d.ts +13 -1
  46. package/src/lib/rxjs/boolean.js +31 -1
  47. package/src/lib/rxjs/boolean.js.map +1 -1
  48. package/src/lib/rxjs/delta.d.ts +32 -0
  49. package/src/lib/rxjs/delta.js +51 -0
  50. package/src/lib/rxjs/delta.js.map +1 -0
  51. package/src/lib/rxjs/factory.d.ts +31 -0
  52. package/src/lib/rxjs/factory.js +21 -0
  53. package/src/lib/rxjs/factory.js.map +1 -0
  54. package/src/lib/rxjs/getter.d.ts +4 -4
  55. package/src/lib/rxjs/getter.js +3 -3
  56. package/src/lib/rxjs/getter.js.map +1 -1
  57. package/src/lib/rxjs/index.d.ts +9 -1
  58. package/src/lib/rxjs/index.js +16 -8
  59. package/src/lib/rxjs/index.js.map +1 -1
  60. package/src/lib/rxjs/lifecycle.d.ts +18 -0
  61. package/src/lib/rxjs/lifecycle.js +55 -0
  62. package/src/lib/rxjs/lifecycle.js.map +1 -0
  63. package/src/lib/rxjs/map.d.ts +10 -0
  64. package/src/lib/rxjs/map.js +17 -0
  65. package/src/lib/rxjs/map.js.map +1 -0
  66. package/src/lib/rxjs/number.d.ts +16 -1
  67. package/src/lib/rxjs/number.js +15 -3
  68. package/src/lib/rxjs/number.js.map +1 -1
  69. package/src/lib/rxjs/rxjs.async.d.ts +57 -0
  70. package/src/lib/rxjs/rxjs.async.js +69 -0
  71. package/src/lib/rxjs/rxjs.async.js.map +1 -0
  72. package/src/lib/rxjs/rxjs.d.ts +10 -2
  73. package/src/lib/rxjs/rxjs.js +17 -16
  74. package/src/lib/rxjs/rxjs.js.map +1 -1
  75. package/src/lib/rxjs/rxjs.map.d.ts +9 -0
  76. package/src/lib/rxjs/rxjs.map.js +26 -0
  77. package/src/lib/rxjs/rxjs.map.js.map +1 -0
  78. package/src/lib/rxjs/set.d.ts +4 -0
  79. package/src/lib/rxjs/set.js +14 -0
  80. package/src/lib/rxjs/set.js.map +1 -0
  81. package/src/lib/rxjs/use.d.ts +7 -0
  82. package/src/lib/rxjs/use.js +14 -0
  83. package/src/lib/rxjs/use.js.map +1 -0
  84. package/src/lib/rxjs/value.d.ts +28 -5
  85. package/src/lib/rxjs/value.js +54 -3
  86. package/src/lib/rxjs/value.js.map +1 -1
  87. package/src/lib/work/index.d.ts +2 -0
  88. package/src/lib/work/index.js +6 -0
  89. package/src/lib/work/index.js.map +1 -0
  90. package/src/lib/work/work.factory.d.ts +35 -0
  91. package/src/lib/work/work.factory.js +43 -0
  92. package/src/lib/work/work.factory.js.map +1 -0
  93. package/src/lib/work/work.instance.d.ts +60 -0
  94. package/src/lib/work/work.instance.js +129 -0
  95. package/src/lib/work/work.instance.js.map +1 -0
@@ -1 +1 @@
1
- {"version":3,"file":"array.js","sourceRoot":"","sources":["../../../../../../packages/rxjs/src/lib/rxjs/array.ts"],"names":[],"mappings":";;;AAAA,8CAA0E;AAC1E,+BAAoG;AACpG,wCAAgF;AAIhF,SAAgB,+BAA+B,CAAI,QAA8B;IAC/E,IAAI,CAAC,QAAQ,EAAE;QACb,QAAQ,GAAG,CAAC,KAAQ,EAAE,EAAE,CAAC,KAAqB,CAAA;KAC/C;IAED,OAAO,IAAA,2BAAoB,EAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAC7E,CAAC;AAND,0EAMC;AAcD,SAAgB,aAAa,CAAI,SAAkC,EAAE;IACnE,MAAM,EAAE,SAAS,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC;IACpC,OAAO,IAAA,gBAAI,EAAC,CAAC,GAAQ,EAAE,IAA4B,EAAE,EAAE;QACrD,IAAI,IAAI,IAAI,IAAI,EAAE;YAChB,IAAI,SAAS,EAAE;gBACb,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;aACxB;iBAAM;gBACL,GAAG,GAAG,IAAA,iCAA0B,EAAC,GAAG,EAAE,IAAI,CAAC,CAAC;aAC7C;SACF;QAED,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,EAAE,CAAC,CAAC;AACT,CAAC;AAbD,sCAaC;AAMA,CAAC;AAIF;;;;;;;;;;GAUG;AACH,SAAgB,cAAc,CAAO,IAAkC;IACrE,OAAO,IAAA,sBAAU,EAAC,CAAC,SAAY,EAAE,EAAE;QACjC,MAAM,EAAE,IAAI,GAAG,EAAE,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;QAEtD,OAAO,cAAc,CAAC,IAAI,CACxB,IAAA,qBAAS,EAAC,SAAgB,CAAC,EAAE,8DAA8D;QAC3F,IAAA,gBAAI,EAAC,CAAC,GAAe,EAAE,IAA4B,EAAE,EAAE;YACrD,IAAI,IAAI,IAAI,IAAI,EAAE;gBAChB,GAAG,GAAG,IAAA,iCAA0B,EAAC,GAAI,EAAE,IAAK,CAAC,CAAC;aAC/C;YAED,OAAO,GAAI,CAAC;QACd,CAAC,EAAE,IAAK,CAA2C,EACnD,+BAA+B,EAAE,EACjC,IAAA,uBAAW,EAAC,CAAC,CAAC,CACf,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAjBD,wCAiBC"}
1
+ {"version":3,"file":"array.js","sourceRoot":"","sources":["../../../../../../packages/rxjs/src/lib/rxjs/array.ts"],"names":[],"mappings":";;;AAAA,+BAAmJ;AACnJ,wCAAuH;AAIvH,SAAgB,+BAA+B,CAAI,QAA8B;IAC/E,IAAI,CAAC,QAAQ,EAAE;QACb,QAAQ,GAAG,CAAC,KAAQ,EAAE,EAAE,CAAC,KAAqB,CAAA;KAC/C;IAED,OAAO,IAAA,2BAAoB,EAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAC7E,CAAC;AAND,0EAMC;AAcD,SAAgB,aAAa,CAAI,SAAkC,EAAE;IACnE,MAAM,EAAE,SAAS,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC;IACpC,OAAO,IAAA,WAAI,EAAC,CAAC,GAAQ,EAAE,IAA4B,EAAE,EAAE;QACrD,IAAI,IAAI,IAAI,IAAI,EAAE;YAChB,IAAI,SAAS,EAAE;gBACb,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;aACxB;iBAAM;gBACL,GAAG,GAAG,IAAA,iCAA0B,EAAC,GAAG,EAAE,IAAI,CAAC,CAAC;aAC7C;SACF;QAED,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,EAAE,CAAC,CAAC;AACT,CAAC;AAbD,sCAaC;AAgBA,CAAC;AAIF;;;;;;;;;;GAUG;AACH,SAAgB,cAAc,CAAO,IAAkC;IACrE,OAAO,IAAA,iBAAU,EAAC,CAAC,SAAY,EAAE,EAAE;QACjC,MAAM,EAAE,IAAI,GAAG,EAAE,EAAE,cAAc,EAAE,YAAY,GAAG,KAAK,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;QAE5E,OAAO,cAAc,CAAC,IAAI,CACxB,IAAA,gBAAS,EAAC,SAAgB,CAAC,EAAE,8DAA8D;QAC3F,IAAA,WAAI,EAAC,CAAC,GAAQ,EAAE,IAA4B,EAAE,EAAE;YAE9C,IAAI,IAAI,IAAI,IAAI,EAAE;gBAChB,IAAI,YAAY,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;oBACvC,IAAA,0BAAmB,EAAC,GAAG,EAAE,IAAI,CAAC,CAAC;iBAChC;qBAAM;oBACL,GAAG,CAAC,IAAI,CAAC,IAAW,CAAC,CAAC;iBACvB;aACF;YAED,OAAO,GAAI,CAAC;QACd,CAAC,EAAE,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,EAAE,CAA2C,EACxD,+BAA+B,EAAE,EACjC,IAAA,kBAAW,EAAC,CAAC,CAAC,CACf,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAtBD,wCAsBC;AAED;;;;;GAKG;AACH,SAAgB,UAAU,CAAI,OAAkC;IAC9D,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAA,UAAG,EAAC,CAAC,CAAC,EAAE,CAAC,IAAA,uBAAgB,EAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAA,UAAG,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC1E,CAAC;AAFD,gCAEC"}
@@ -1,5 +1,17 @@
1
- import { OperatorFunction } from "rxjs";
1
+ import { OperatorFunction, MonoTypeOperatorFunction } from "rxjs";
2
2
  /**
3
3
  * Returns the pipe if usePipe is true, otherwise returns the identity.
4
4
  */
5
5
  export declare function pipeIf<A>(usePipe: boolean, pipe: OperatorFunction<A, A>): OperatorFunction<A, A>;
6
+ /**
7
+ * Maps the opposite value of the input boolean.
8
+ */
9
+ export declare function isNot(): MonoTypeOperatorFunction<boolean>;
10
+ /**
11
+ * Emits a value when moving from a true value to a false value.
12
+ */
13
+ export declare function onTrueToFalse(): MonoTypeOperatorFunction<boolean>;
14
+ /**
15
+ * Emits a value when moving from a false value to a true value.
16
+ */
17
+ export declare function onFalseToTrue(): MonoTypeOperatorFunction<boolean>;
@@ -1,7 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.pipeIf = void 0;
3
+ exports.onFalseToTrue = exports.onTrueToFalse = exports.isNot = exports.pipeIf = void 0;
4
4
  const rxjs_1 = require("rxjs");
5
+ const delta_1 = require("./delta");
5
6
  /**
6
7
  * Returns the pipe if usePipe is true, otherwise returns the identity.
7
8
  */
@@ -9,4 +10,33 @@ function pipeIf(usePipe, pipe) {
9
10
  return (usePipe) ? pipe : rxjs_1.identity;
10
11
  }
11
12
  exports.pipeIf = pipeIf;
13
+ /**
14
+ * Maps the opposite value of the input boolean.
15
+ */
16
+ function isNot() {
17
+ return (0, rxjs_1.map)(x => !x);
18
+ }
19
+ exports.isNot = isNot;
20
+ /**
21
+ * Emits a value when moving from a true value to a false value.
22
+ */
23
+ function onTrueToFalse() {
24
+ return (0, delta_1.onMatchDelta)({
25
+ from: true,
26
+ to: false,
27
+ requireConsecutive: true
28
+ });
29
+ }
30
+ exports.onTrueToFalse = onTrueToFalse;
31
+ /**
32
+ * Emits a value when moving from a false value to a true value.
33
+ */
34
+ function onFalseToTrue() {
35
+ return (0, delta_1.onMatchDelta)({
36
+ from: false,
37
+ to: true,
38
+ requireConsecutive: true
39
+ });
40
+ }
41
+ exports.onFalseToTrue = onFalseToTrue;
12
42
  //# sourceMappingURL=boolean.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"boolean.js","sourceRoot":"","sources":["../../../../../../packages/rxjs/src/lib/rxjs/boolean.ts"],"names":[],"mappings":";;;AAAA,+BAAkD;AAElD;;GAEG;AACF,SAAgB,MAAM,CAAI,OAAgB,EAAE,IAA4B;IACvE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,eAAQ,CAAC;AACrC,CAAC;AAFA,wBAEA"}
1
+ {"version":3,"file":"boolean.js","sourceRoot":"","sources":["../../../../../../packages/rxjs/src/lib/rxjs/boolean.ts"],"names":[],"mappings":";;;AAAA,+BAAiF;AACjF,mCAAuC;AAEvC;;GAEG;AACH,SAAgB,MAAM,CAAI,OAAgB,EAAE,IAA4B;IACtE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,eAAQ,CAAC;AACrC,CAAC;AAFD,wBAEC;AAED;;GAEG;AACH,SAAgB,KAAK;IACnB,OAAO,IAAA,UAAG,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACtB,CAAC;AAFD,sBAEC;AAED;;GAEG;AACH,SAAgB,aAAa;IAC3B,OAAO,IAAA,oBAAY,EAAC;QAClB,IAAI,EAAE,IAAI;QACV,EAAE,EAAE,KAAK;QACT,kBAAkB,EAAE,IAAI;KACzB,CAAC,CAAC;AACL,CAAC;AAND,sCAMC;AAED;;GAEG;AACH,SAAgB,aAAa;IAC3B,OAAO,IAAA,oBAAY,EAAC;QAClB,IAAI,EAAE,KAAK;QACX,EAAE,EAAE,IAAI;QACR,kBAAkB,EAAE,IAAI;KACzB,CAAC,CAAC;AACL,CAAC;AAND,sCAMC"}
@@ -0,0 +1,32 @@
1
+ import { MonoTypeOperatorFunction } from 'rxjs';
2
+ /**
3
+ * onDelta function configuration.
4
+ */
5
+ export interface OnMatchDeltaConfig<T> {
6
+ /**
7
+ * The first from value.
8
+ */
9
+ from: T;
10
+ /**
11
+ * The target value to recieve after the first.
12
+ */
13
+ to: T;
14
+ /**
15
+ * Comparison function to compare equality between the emission and the target values.
16
+ *
17
+ * isMatch is checked for each value, and at the time a match is found, allowing a double check to occur on the from target value.
18
+ */
19
+ isMatch?: (a: T, b: T) => boolean;
20
+ /**
21
+ * Whether or not the two values must be emitted consencutively.
22
+ *
23
+ * For example, if requiredConsecutive=true and we are waiting for 1 -> 2, and the emissions are 1,0,2, the observable function will not emit 2.
24
+ */
25
+ requireConsecutive?: boolean;
26
+ }
27
+ /**
28
+ * Emits a value when going from one matching value to a target value.
29
+ *
30
+ * The first value must be determined first before the second is raised.
31
+ */
32
+ export declare function onMatchDelta<T>(config: OnMatchDeltaConfig<T>): MonoTypeOperatorFunction<T>;
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.onMatchDelta = void 0;
4
+ const rxjs_1 = require("rxjs");
5
+ /**
6
+ * Emits a value when going from one matching value to a target value.
7
+ *
8
+ * The first value must be determined first before the second is raised.
9
+ */
10
+ function onMatchDelta(config) {
11
+ const { isMatch: inputIsSame, from, to, requireConsecutive } = config;
12
+ const isMatch = inputIsSame !== null && inputIsSame !== void 0 ? inputIsSame : ((a, b) => a === b);
13
+ return (obs) => {
14
+ return obs.pipe((0, rxjs_1.scan)((acc, next, index) => {
15
+ let emit = false;
16
+ let fromMatch = acc.fromMatch;
17
+ let value;
18
+ // If we do have a match check the next value is a match for delta emission.
19
+ if (acc.fromMatch) {
20
+ const toMatch = isMatch(to, next);
21
+ if (toMatch) {
22
+ // if the two value matches, check fromMatch once more
23
+ fromMatch = isMatch(from, acc.value);
24
+ // emit if both are in agreement
25
+ emit = fromMatch && toMatch;
26
+ if (emit) {
27
+ // set the emit value
28
+ value = next;
29
+ // set fromMatch for the followup emission
30
+ fromMatch = isMatch(from, next);
31
+ }
32
+ }
33
+ }
34
+ // If we aren't emitting, update fromMatch/value depending on current state.
35
+ if (!emit) {
36
+ // if we don't have a from match yet or we require consecutive successes, check next as the from value.
37
+ if (!acc.fromMatch || requireConsecutive) {
38
+ fromMatch = isMatch(from, next);
39
+ value = next;
40
+ }
41
+ }
42
+ return {
43
+ emit,
44
+ value,
45
+ fromMatch
46
+ };
47
+ }, { emit: false, fromMatch: false, value: 0 }), (0, rxjs_1.filter)(({ emit }) => Boolean(emit)), (0, rxjs_1.map)(({ value }) => value));
48
+ };
49
+ }
50
+ exports.onMatchDelta = onMatchDelta;
51
+ //# sourceMappingURL=delta.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delta.js","sourceRoot":"","sources":["../../../../../../packages/rxjs/src/lib/rxjs/delta.ts"],"names":[],"mappings":";;;AAAA,+BAAiG;AA6CjG;;;;GAIG;AACH,SAAgB,YAAY,CAAI,MAA6B;IAC3D,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,EAAE,kBAAkB,EAAE,GAAG,MAAM,CAAC;IACtE,MAAM,OAAO,GAAG,WAAW,aAAX,WAAW,cAAX,WAAW,GAAI,CAAC,CAAC,CAAI,EAAE,CAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IAEzD,OAAO,CAAC,GAAkB,EAAE,EAAE;QAC5B,OAAO,GAAG,CAAC,IAAI,CACb,IAAA,WAAI,EAAC,CAAC,GAAwB,EAAE,IAAO,EAAE,KAAa,EAAE,EAAE;YACxD,IAAI,IAAI,GAAY,KAAK,CAAC;YAC1B,IAAI,SAAS,GAAY,GAAG,CAAC,SAAS,CAAC;YACvC,IAAI,KAAS,CAAC;YAEd,4EAA4E;YAC5E,IAAI,GAAG,CAAC,SAAS,EAAE;gBACjB,MAAM,OAAO,GAAG,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;gBAElC,IAAI,OAAO,EAAE;oBAEX,sDAAsD;oBACtD,SAAS,GAAG,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;oBAErC,gCAAgC;oBAChC,IAAI,GAAG,SAAS,IAAI,OAAO,CAAC;oBAE5B,IAAI,IAAI,EAAE;wBAER,qBAAqB;wBACrB,KAAK,GAAG,IAAI,CAAC;wBAEb,0CAA0C;wBAC1C,SAAS,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;qBACjC;iBACF;aACF;YAED,4EAA4E;YAC5E,IAAI,CAAC,IAAI,EAAE;gBAET,uGAAuG;gBACvG,IAAI,CAAC,GAAG,CAAC,SAAS,IAAI,kBAAkB,EAAE;oBACxC,SAAS,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;oBAChC,KAAK,GAAG,IAAI,CAAC;iBACd;aACF;YAED,OAAO;gBACL,IAAI;gBACJ,KAAK;gBACL,SAAS;aACV,CAAC;QACJ,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,CAAQ,EAAE,CAAC,EACtD,IAAA,aAAM,EAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EACnC,IAAA,UAAG,EAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,CAC1B,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAtDD,oCAsDC"}
@@ -0,0 +1,31 @@
1
+ import { FactoryWithInput } from '@dereekb/util';
2
+ import { Observable } from 'rxjs';
3
+ /**
4
+ * factoryTimer() configuration
5
+ */
6
+ export interface FactoryTimerConfig<T> {
7
+ /**
8
+ * How long to wait before the first emission.
9
+ */
10
+ wait?: number;
11
+ /**
12
+ * Interval period
13
+ */
14
+ interval?: number;
15
+ /**
16
+ * Max number of iterations.
17
+ */
18
+ limit?: number;
19
+ /**
20
+ * Factory for values.
21
+ */
22
+ factory: FactoryWithInput<T, number>;
23
+ }
24
+ export declare const DEFAULT_FACTORY_TIMER_INTERVAL = 1000;
25
+ /**
26
+ * Creates an observable that uses timer internally and maps values from the factory result.
27
+ *
28
+ * @param config
29
+ * @returns
30
+ */
31
+ export declare function factoryTimer<T>(config: FactoryTimerConfig<T>): Observable<T>;
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.factoryTimer = exports.DEFAULT_FACTORY_TIMER_INTERVAL = void 0;
4
+ const rxjs_1 = require("rxjs");
5
+ exports.DEFAULT_FACTORY_TIMER_INTERVAL = 1000;
6
+ /**
7
+ * Creates an observable that uses timer internally and maps values from the factory result.
8
+ *
9
+ * @param config
10
+ * @returns
11
+ */
12
+ function factoryTimer(config) {
13
+ const { wait = 0, interval = exports.DEFAULT_FACTORY_TIMER_INTERVAL, limit, factory } = config;
14
+ let obs = (0, rxjs_1.timer)(wait, interval);
15
+ if (limit) {
16
+ obs = obs.pipe((0, rxjs_1.takeWhile)((x) => x < limit));
17
+ }
18
+ return obs.pipe((0, rxjs_1.map)((i) => factory(i)));
19
+ }
20
+ exports.factoryTimer = factoryTimer;
21
+ //# sourceMappingURL=factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.js","sourceRoot":"","sources":["../../../../../../packages/rxjs/src/lib/rxjs/factory.ts"],"names":[],"mappings":";;;AACA,+BAAyD;AA6B5C,QAAA,8BAA8B,GAAG,IAAI,CAAC;AAEnD;;;;;GAKG;AACH,SAAgB,YAAY,CAAI,MAA6B;IAC3D,MAAM,EAAE,IAAI,GAAG,CAAC,EAAE,QAAQ,GAAG,sCAA8B,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;IACvF,IAAI,GAAG,GAAG,IAAA,YAAK,EAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAEhC,IAAI,KAAK,EAAE;QACT,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,IAAA,gBAAS,EAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;KAC7C;IAED,OAAO,GAAG,CAAC,IAAI,CAAC,IAAA,UAAG,EAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,CAAC;AATD,oCASC"}
@@ -3,15 +3,15 @@ import { Observable, OperatorFunction } from 'rxjs';
3
3
  /**
4
4
  * A value that is either the value or an observable that returns the value.
5
5
  */
6
- export declare type ObservableGetter<T> = T | Observable<T>;
6
+ export declare type ObservableOrValue<T> = T | Observable<T>;
7
7
  /**
8
8
  * Wraps the input value as an observable, if it is not an observable.
9
9
  */
10
- export declare function asObservable<T>(valueOrObs: ObservableGetter<T>): Observable<T>;
11
- export declare function asObservable<T>(valueOrObs: Maybe<ObservableGetter<T>>): Observable<Maybe<T>>;
10
+ export declare function asObservable<T>(valueOrObs: ObservableOrValue<T>): Observable<T>;
11
+ export declare function asObservable<T>(valueOrObs: Maybe<ObservableOrValue<T>>): Observable<Maybe<T>>;
12
12
  /**
13
13
  * Switch map for an ObservableGetter that pipes through the value.
14
14
  *
15
15
  * @returns
16
16
  */
17
- export declare function getter<T>(): OperatorFunction<ObservableGetter<T>, T>;
17
+ export declare function valueFromObservableOrValue<T>(): OperatorFunction<ObservableOrValue<T>, T>;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getter = exports.asObservable = void 0;
3
+ exports.valueFromObservableOrValue = exports.asObservable = void 0;
4
4
  const rxjs_1 = require("rxjs");
5
5
  function asObservable(valueOrObs) {
6
6
  if ((0, rxjs_1.isObservable)(valueOrObs)) {
@@ -16,7 +16,7 @@ exports.asObservable = asObservable;
16
16
  *
17
17
  * @returns
18
18
  */
19
- function getter() {
19
+ function valueFromObservableOrValue() {
20
20
  return (0, rxjs_1.switchMap)(x => {
21
21
  if ((0, rxjs_1.isObservable)(x)) {
22
22
  return x;
@@ -26,5 +26,5 @@ function getter() {
26
26
  }
27
27
  });
28
28
  }
29
- exports.getter = getter;
29
+ exports.valueFromObservableOrValue = valueFromObservableOrValue;
30
30
  //# sourceMappingURL=getter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"getter.js","sourceRoot":"","sources":["../../../../../../packages/rxjs/src/lib/rxjs/getter.ts"],"names":[],"mappings":";;;AACA,+BAAiF;AAYjF,SAAgB,YAAY,CAAI,UAAsC;IACpE,IAAI,IAAA,mBAAY,EAAC,UAAU,CAAC,EAAE;QAC5B,OAAO,UAAU,CAAC;KACnB;SAAM;QACL,OAAO,IAAA,SAAE,EAAC,UAAU,CAAC,CAAC;KACvB;AACH,CAAC;AAND,oCAMC;AAED;;;;GAIG;AACH,SAAgB,MAAM;IACpB,OAAO,IAAA,gBAAS,EAAC,CAAC,CAAC,EAAE;QACnB,IAAI,IAAA,mBAAY,EAAC,CAAC,CAAC,EAAE;YACnB,OAAO,CAAC,CAAC;SACV;aAAM;YACL,OAAO,IAAA,SAAE,EAAC,CAAC,CAAC,CAAC;SACd;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AARD,wBAQC"}
1
+ {"version":3,"file":"getter.js","sourceRoot":"","sources":["../../../../../../packages/rxjs/src/lib/rxjs/getter.ts"],"names":[],"mappings":";;;AACA,+BAAiF;AAYjF,SAAgB,YAAY,CAAI,UAAuC;IACrE,IAAI,IAAA,mBAAY,EAAC,UAAU,CAAC,EAAE;QAC5B,OAAO,UAAU,CAAC;KACnB;SAAM;QACL,OAAO,IAAA,SAAE,EAAC,UAAU,CAAC,CAAC;KACvB;AACH,CAAC;AAND,oCAMC;AAED;;;;GAIG;AACH,SAAgB,0BAA0B;IACxC,OAAO,IAAA,gBAAS,EAAC,CAAC,CAAC,EAAE;QACnB,IAAI,IAAA,mBAAY,EAAC,CAAC,CAAC,EAAE;YACnB,OAAO,CAAC,CAAC;SACV;aAAM;YACL,OAAO,IAAA,SAAE,EAAC,CAAC,CAAC,CAAC;SACd;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AARD,gEAQC"}
@@ -1,8 +1,16 @@
1
1
  export * from './array';
2
2
  export * from './boolean';
3
+ export * from './delta';
4
+ export * from './factory';
3
5
  export * from './getter';
6
+ export * from './lifecycle';
4
7
  export * from './loading';
5
8
  export * from './misc';
9
+ export * from './map';
6
10
  export * from './number';
7
- export * from './value';
8
11
  export * from './rxjs';
12
+ export * from './rxjs.async';
13
+ export * from './rxjs.map';
14
+ export * from './set';
15
+ export * from './use';
16
+ export * from './value';
@@ -1,12 +1,20 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const tslib_1 = require("tslib");
4
- (0, tslib_1.__exportStar)(require("./array"), exports);
5
- (0, tslib_1.__exportStar)(require("./boolean"), exports);
6
- (0, tslib_1.__exportStar)(require("./getter"), exports);
7
- (0, tslib_1.__exportStar)(require("./loading"), exports);
8
- (0, tslib_1.__exportStar)(require("./misc"), exports);
9
- (0, tslib_1.__exportStar)(require("./number"), exports);
10
- (0, tslib_1.__exportStar)(require("./value"), exports);
11
- (0, tslib_1.__exportStar)(require("./rxjs"), exports);
4
+ tslib_1.__exportStar(require("./array"), exports);
5
+ tslib_1.__exportStar(require("./boolean"), exports);
6
+ tslib_1.__exportStar(require("./delta"), exports);
7
+ tslib_1.__exportStar(require("./factory"), exports);
8
+ tslib_1.__exportStar(require("./getter"), exports);
9
+ tslib_1.__exportStar(require("./lifecycle"), exports);
10
+ tslib_1.__exportStar(require("./loading"), exports);
11
+ tslib_1.__exportStar(require("./misc"), exports);
12
+ tslib_1.__exportStar(require("./map"), exports);
13
+ tslib_1.__exportStar(require("./number"), exports);
14
+ tslib_1.__exportStar(require("./rxjs"), exports);
15
+ tslib_1.__exportStar(require("./rxjs.async"), exports);
16
+ tslib_1.__exportStar(require("./rxjs.map"), exports);
17
+ tslib_1.__exportStar(require("./set"), exports);
18
+ tslib_1.__exportStar(require("./use"), exports);
19
+ tslib_1.__exportStar(require("./value"), exports);
12
20
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/rxjs/src/lib/rxjs/index.ts"],"names":[],"mappings":";;;AAAA,uDAAwB;AACxB,yDAA0B;AAC1B,wDAAyB;AACzB,yDAA0B;AAC1B,sDAAuB;AACvB,wDAAyB;AACzB,uDAAwB;AACxB,sDAAuB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/rxjs/src/lib/rxjs/index.ts"],"names":[],"mappings":";;;AAAA,kDAAwB;AACxB,oDAA0B;AAC1B,kDAAwB;AACxB,oDAA0B;AAC1B,mDAAyB;AACzB,sDAA4B;AAC5B,oDAA0B;AAC1B,iDAAuB;AACvB,gDAAsB;AACtB,mDAAyB;AACzB,iDAAuB;AACvB,uDAA6B;AAC7B,qDAA2B;AAC3B,gDAAsB;AACtB,gDAAsB;AACtB,kDAAwB"}
@@ -0,0 +1,18 @@
1
+ import { Destroyable, PromiseOrValue } from '@dereekb/util';
2
+ import { MonoTypeOperatorFunction } from "rxjs";
3
+ /**
4
+ * Cleans up the instance when a new value is pushed.
5
+ *
6
+ * Can be configured to wait until the previous value's destroy promise has resolved.
7
+ *
8
+ * @param destroy
9
+ * @param wait
10
+ * @returns
11
+ */
12
+ export declare function cleanup<T>(destroy: (instance: T) => PromiseOrValue<any | void>, wait?: boolean): MonoTypeOperatorFunction<T>;
13
+ /**
14
+ * Convenience function for cleanup() on a Destroyable type.
15
+ *
16
+ * @returns
17
+ */
18
+ export declare function cleanupDestroyable<T extends Destroyable>(wait?: boolean): MonoTypeOperatorFunction<T>;
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.cleanupDestroyable = exports.cleanup = void 0;
4
+ const util_1 = require("@dereekb/util");
5
+ const rxjs_1 = require("rxjs");
6
+ /**
7
+ * Cleans up the instance when a new value is pushed.
8
+ *
9
+ * Can be configured to wait until the previous value's destroy promise has resolved.
10
+ *
11
+ * @param destroy
12
+ * @param wait
13
+ * @returns
14
+ */
15
+ function cleanup(destroy, wait = false) {
16
+ return (obs) => {
17
+ let currentInstance;
18
+ return obs.pipe((0, rxjs_1.scan)((acc, instance) => {
19
+ let cleanup;
20
+ if (acc.instance) {
21
+ cleanup = (0, util_1.asPromise)(destroy(acc.instance));
22
+ }
23
+ currentInstance = instance;
24
+ return {
25
+ cleanup,
26
+ instance
27
+ };
28
+ }, {}), (0, rxjs_1.switchMap)(x => {
29
+ let result;
30
+ if (x.cleanup && wait) {
31
+ const continueFn = () => (x.instance);
32
+ result = x.cleanup.then(continueFn).catch(continueFn);
33
+ }
34
+ else {
35
+ result = (0, rxjs_1.of)(x.instance);
36
+ }
37
+ return result;
38
+ }), (0, rxjs_1.finalize)(() => {
39
+ if (currentInstance) {
40
+ destroy(currentInstance);
41
+ }
42
+ }));
43
+ };
44
+ }
45
+ exports.cleanup = cleanup;
46
+ /**
47
+ * Convenience function for cleanup() on a Destroyable type.
48
+ *
49
+ * @returns
50
+ */
51
+ function cleanupDestroyable(wait) {
52
+ return cleanup((x) => x.destroy(), wait);
53
+ }
54
+ exports.cleanupDestroyable = cleanupDestroyable;
55
+ //# sourceMappingURL=lifecycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../../../../../packages/rxjs/src/lib/rxjs/lifecycle.ts"],"names":[],"mappings":";;;AAAA,wCAA8E;AAC9E,+BAAqG;AAcrG;;;;;;;;GAQG;AACH,SAAgB,OAAO,CAAI,OAAoD,EAAE,IAAI,GAAG,KAAK;IAC3F,OAAO,CAAC,GAAkB,EAAE,EAAE;QAC5B,IAAI,eAAyB,CAAC;QAE9B,OAAO,GAAG,CAAC,IAAI,CACb,IAAA,WAAI,EAA6B,CAAC,GAA4B,EAAE,QAAW,EAAE,EAAE;YAC7E,IAAI,OAAkC,CAAC;YAEvC,IAAI,GAAG,CAAC,QAAQ,EAAE;gBAChB,OAAO,GAAG,IAAA,gBAAS,EAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;aAC5C;YAED,eAAe,GAAG,QAAQ,CAAC;YAE3B,OAAO;gBACL,OAAO;gBACP,QAAQ;aACT,CAAC;QACJ,CAAC,EAAE,EAAE,CAAC,EACN,IAAA,gBAAS,EAAC,CAAC,CAAC,EAAE;YACZ,IAAI,MAAkC,CAAC;YAEvC,IAAI,CAAC,CAAC,OAAO,IAAI,IAAI,EAAE;gBACrB,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAE,CAAA;gBACtC,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;aACvD;iBAAM;gBACL,MAAM,GAAG,IAAA,SAAE,EAAC,CAAC,CAAC,QAAS,CAAC,CAAC;aAC1B;YAED,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC,EACF,IAAA,eAAQ,EAAC,GAAG,EAAE;YACZ,IAAI,eAAe,EAAE;gBACnB,OAAO,CAAC,eAAe,CAAC,CAAC;aAC1B;QACH,CAAC,CAAC,CACH,CAAA;IACH,CAAC,CAAC;AACJ,CAAC;AAtCD,0BAsCC;AAED;;;;GAIG;AACH,SAAgB,kBAAkB,CAAwB,IAAc;IACtE,OAAO,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,CAAC;AAC3C,CAAC;AAFD,gDAEC"}
@@ -0,0 +1,10 @@
1
+ import { OperatorFunction } from 'rxjs';
2
+ import { MapKeysIntersectionObject } from "@dereekb/util";
3
+ import { ObservableOrValue } from "./getter";
4
+ /**
5
+ * OperatorFunction that pipes the input from the object with a keys observable to produce the result of mapKeysIntersectionObjectToArray.
6
+ *
7
+ * @param keysObs
8
+ * @returns
9
+ */
10
+ export declare function mapKeysIntersectionToArray<T>(keysObs: ObservableOrValue<Iterable<string>>): OperatorFunction<MapKeysIntersectionObject<T>, T[]>;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.mapKeysIntersectionToArray = void 0;
4
+ const rxjs_1 = require("@dereekb/rxjs");
5
+ const rxjs_2 = require("rxjs");
6
+ const util_1 = require("@dereekb/util");
7
+ /**
8
+ * OperatorFunction that pipes the input from the object with a keys observable to produce the result of mapKeysIntersectionObjectToArray.
9
+ *
10
+ * @param keysObs
11
+ * @returns
12
+ */
13
+ function mapKeysIntersectionToArray(keysObs) {
14
+ return (0, rxjs_2.switchMap)((object) => (0, rxjs_1.asObservable)(keysObs).pipe((0, rxjs_2.map)(keys => (0, util_1.mapKeysIntersectionObjectToArray)(object, keys)), (0, rxjs_2.shareReplay)(1)));
15
+ }
16
+ exports.mapKeysIntersectionToArray = mapKeysIntersectionToArray;
17
+ //# sourceMappingURL=map.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map.js","sourceRoot":"","sources":["../../../../../../packages/rxjs/src/lib/rxjs/map.ts"],"names":[],"mappings":";;;AACA,wCAA6C;AAC7C,+BAAqE;AACrE,wCAA4F;AAG5F;;;;;GAKG;AACH,SAAgB,0BAA0B,CAAI,OAA4C;IACxF,OAAO,IAAA,gBAAS,EAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAA,mBAAY,EAAC,OAAO,CAAC,CAAC,IAAI,CACrD,IAAA,UAAG,EAAC,IAAI,CAAC,EAAE,CAAC,IAAA,uCAAgC,EAAC,MAAM,EAAE,IAAI,CAAC,CAAC,EAC3D,IAAA,kBAAW,EAAC,CAAC,CAAC,CACf,CAAC,CAAC;AACL,CAAC;AALD,gEAKC"}
@@ -1,5 +1,20 @@
1
+ import { IncrementingNumberFactoryConfig } from '@dereekb/util';
2
+ import { Observable } from 'rxjs';
1
3
  import { OperatorFunction } from 'rxjs';
4
+ import { FactoryTimerConfig } from './factory';
2
5
  /**
3
6
  * Similar to count(), but counts emissions as they occur using scan.
4
7
  */
5
- export declare function scanCount(): OperatorFunction<any, number>;
8
+ export declare function scanCount(startAt?: number): OperatorFunction<any, number>;
9
+ /**
10
+ * incrementingNumberTimer() configuration
11
+ */
12
+ export interface IncrementingTimerConfig extends Omit<FactoryTimerConfig<number>, 'factory'>, IncrementingNumberFactoryConfig {
13
+ }
14
+ /**
15
+ * Creates a factoryTimer for incrementing numbers.
16
+ *
17
+ * @param config
18
+ * @returns
19
+ */
20
+ export declare function incrementingNumberTimer(config?: IncrementingTimerConfig): Observable<number>;
@@ -1,12 +1,24 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.scanCount = void 0;
3
+ exports.incrementingNumberTimer = exports.scanCount = void 0;
4
+ const util_1 = require("@dereekb/util");
4
5
  const operators_1 = require("rxjs/operators");
6
+ const factory_1 = require("./factory");
5
7
  /**
6
8
  * Similar to count(), but counts emissions as they occur using scan.
7
9
  */
8
- function scanCount() {
9
- return (0, operators_1.scan)((count, _) => count + 1, 0);
10
+ function scanCount(startAt = 0) {
11
+ return (0, operators_1.scan)((count, _) => count + 1, startAt);
10
12
  }
11
13
  exports.scanCount = scanCount;
14
+ /**
15
+ * Creates a factoryTimer for incrementing numbers.
16
+ *
17
+ * @param config
18
+ * @returns
19
+ */
20
+ function incrementingNumberTimer(config = {}) {
21
+ return (0, factory_1.factoryTimer)(Object.assign(Object.assign({}, config), { factory: (0, util_1.incrementingNumberFactory)(config) }));
22
+ }
23
+ exports.incrementingNumberTimer = incrementingNumberTimer;
12
24
  //# sourceMappingURL=number.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"number.js","sourceRoot":"","sources":["../../../../../../packages/rxjs/src/lib/rxjs/number.ts"],"names":[],"mappings":";;;AACA,8CAAsC;AAEtC;;GAEG;AACH,SAAgB,SAAS;IACvB,OAAO,IAAA,gBAAI,EAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1C,CAAC;AAFD,8BAEC"}
1
+ {"version":3,"file":"number.js","sourceRoot":"","sources":["../../../../../../packages/rxjs/src/lib/rxjs/number.ts"],"names":[],"mappings":";;;AAAA,wCAA2F;AAG3F,8CAAsC;AACtC,uCAA6D;AAE7D;;GAEG;AACH,SAAgB,SAAS,CAAC,OAAO,GAAG,CAAC;IACnC,OAAO,IAAA,gBAAI,EAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;AAChD,CAAC;AAFD,8BAEC;AAQD;;;;;GAKG;AACH,SAAgB,uBAAuB,CAAC,SAAkC,EAAE;IAC1E,OAAO,IAAA,sBAAY,kCACd,MAAM,KACT,OAAO,EAAE,IAAA,gCAAyB,EAAC,MAAM,CAAC,IAC1C,CAAC;AACL,CAAC;AALD,0DAKC"}
@@ -0,0 +1,57 @@
1
+ import { CachedFactoryWithInput, Destroyable } from '@dereekb/util';
2
+ import { Observable, Subject } from 'rxjs';
3
+ /**
4
+ * Default amount of throttle in milliseconds used by AsyncPusher.
5
+ */
6
+ export declare const DEFAULT_ASYNC_PUSHER_THROTTLE = 200;
7
+ /**
8
+ * Special function that when called pushes a value onto an internal subject, and returns an observable.
9
+ *
10
+ * This is useful for cases where a function may get called and subscribes to an observable each time, but we need to throttle that.
11
+ */
12
+ export declare type AsyncPusher<T> = ((value: T) => Observable<T>) & Destroyable & {
13
+ /**
14
+ * Configures the pusher to watch this input observable for complete.
15
+ *
16
+ * @param obs
17
+ */
18
+ watchForCleanup(obs: Observable<any>): void;
19
+ /**
20
+ * The internal subject.
21
+ */
22
+ readonly _subject: Subject<T>;
23
+ };
24
+ export interface AsyncPusherConfig<T> {
25
+ /**
26
+ * Time to throttle each emission.
27
+ */
28
+ throttle?: number;
29
+ /**
30
+ * Whether or not to filter on distinct values.
31
+ */
32
+ distinct?: boolean;
33
+ /**
34
+ * Configuration function to build onto the internal observable.
35
+ */
36
+ pipe?: (obs: Observable<T>) => Observable<T>;
37
+ /**
38
+ * (Optional) Observable to watch for cleaunup.
39
+ */
40
+ cleanupObs?: Observable<any>;
41
+ }
42
+ /**
43
+ * Creates an AsyncPusher.
44
+ *
45
+ * @param config
46
+ * @returns
47
+ */
48
+ export declare function asyncPusher<T>(config?: AsyncPusherConfig<T>): AsyncPusher<T>;
49
+ /**
50
+ * Creates a cache that returns an AsyncPusher.
51
+ *
52
+ * The CachedFactoryWithInput resunt can optionally be pass an observable to watch for the cleanup process.
53
+ *
54
+ * @param config
55
+ * @returns
56
+ */
57
+ export declare function asyncPusherCache<T>(config?: AsyncPusherConfig<T>): CachedFactoryWithInput<AsyncPusher<T>, Observable<any>>;
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.asyncPusherCache = exports.asyncPusher = exports.DEFAULT_ASYNC_PUSHER_THROTTLE = void 0;
4
+ const util_1 = require("@dereekb/util");
5
+ const rxjs_1 = require("rxjs");
6
+ const subscription_1 = require("../subscription");
7
+ const value_1 = require("./value");
8
+ /**
9
+ * Default amount of throttle in milliseconds used by AsyncPusher.
10
+ */
11
+ exports.DEFAULT_ASYNC_PUSHER_THROTTLE = 200;
12
+ /**
13
+ * Creates an AsyncPusher.
14
+ *
15
+ * @param config
16
+ * @returns
17
+ */
18
+ function asyncPusher(config = {}) {
19
+ const { throttle = exports.DEFAULT_ASYNC_PUSHER_THROTTLE, cleanupObs, distinct = true, pipe: pipeObs } = config;
20
+ const _subject = new rxjs_1.BehaviorSubject(undefined);
21
+ const _sub = new subscription_1.SubscriptionObject();
22
+ let obs = _subject.pipe((0, value_1.skipFirstMaybe)(), (0, rxjs_1.throttleTime)(throttle, undefined, { leading: false, trailing: true }));
23
+ if (distinct) {
24
+ obs = obs.pipe((0, rxjs_1.distinctUntilChanged)());
25
+ }
26
+ if (pipeObs) {
27
+ obs = pipeObs(obs);
28
+ }
29
+ const pusher = ((value) => {
30
+ _subject.next(value);
31
+ return obs;
32
+ });
33
+ pusher.destroy = () => {
34
+ _subject.complete();
35
+ _sub.destroy();
36
+ };
37
+ pusher.watchForCleanup = (obs) => {
38
+ _sub.subscription = obs.subscribe({
39
+ complete: () => {
40
+ pusher.destroy();
41
+ }
42
+ });
43
+ };
44
+ pusher._subject = _subject;
45
+ if (cleanupObs) {
46
+ pusher.watchForCleanup(cleanupObs);
47
+ }
48
+ return pusher;
49
+ }
50
+ exports.asyncPusher = asyncPusher;
51
+ /**
52
+ * Creates a cache that returns an AsyncPusher.
53
+ *
54
+ * The CachedFactoryWithInput resunt can optionally be pass an observable to watch for the cleanup process.
55
+ *
56
+ * @param config
57
+ * @returns
58
+ */
59
+ function asyncPusherCache(config) {
60
+ return (0, util_1.cachedGetter)((cleanupObs) => {
61
+ const pusher = asyncPusher(config);
62
+ if (cleanupObs) {
63
+ pusher.watchForCleanup(cleanupObs);
64
+ }
65
+ return pusher;
66
+ });
67
+ }
68
+ exports.asyncPusherCache = asyncPusherCache;
69
+ //# sourceMappingURL=rxjs.async.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rxjs.async.js","sourceRoot":"","sources":["../../../../../../packages/rxjs/src/lib/rxjs/rxjs.async.ts"],"names":[],"mappings":";;;AAAA,wCAAkF;AAClF,+BAAgG;AAChG,kDAAqD;AACrD,mCAAyC;AAEzC;;GAEG;AACU,QAAA,6BAA6B,GAAG,GAAG,CAAC;AA0CjD;;;;;GAKG;AACH,SAAgB,WAAW,CAAI,SAA+B,EAAE;IAC9D,MAAM,EAAE,QAAQ,GAAG,qCAA6B,EAAE,UAAU,EAAE,QAAQ,GAAG,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;IAExG,MAAM,QAAQ,GAAG,IAAI,sBAAe,CAAI,SAAgB,CAAC,CAAC;IAC1D,MAAM,IAAI,GAAG,IAAI,iCAAkB,EAAE,CAAC;IAEtC,IAAI,GAAG,GAAkB,QAAQ,CAAC,IAAI,CACpC,IAAA,sBAAc,GAAE,EAChB,IAAA,mBAAY,EAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CACrD,CAAC;IAEnB,IAAI,QAAQ,EAAE;QACZ,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,IAAA,2BAAoB,GAAE,CAAC,CAAC;KACxC;IAED,IAAI,OAAO,EAAE;QACX,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;KACpB;IAED,MAAM,MAAM,GAAmB,CAAC,CAAC,KAAQ,EAAE,EAAE;QAC3C,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,OAAO,GAAG,CAAC;IACb,CAAC,CAAmB,CAAC;IAErB,MAAM,CAAC,OAAO,GAAG,GAAG,EAAE;QACpB,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACpB,IAAI,CAAC,OAAO,EAAE,CAAC;IACjB,CAAC,CAAC;IAEF,MAAM,CAAC,eAAe,GAAG,CAAC,GAAoB,EAAE,EAAE;QAChD,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC,SAAS,CAAC;YAChC,QAAQ,EAAE,GAAG,EAAE;gBACb,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,CAAC;SACF,CAAC,CAAC;IACL,CAAC,CAAC;IAED,MAAc,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAEpC,IAAI,UAAU,EAAE;QACd,MAAM,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;KACpC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AA5CD,kCA4CC;AAED;;;;;;;GAOG;AACH,SAAgB,gBAAgB,CAAI,MAA6B;IAC/D,OAAO,IAAA,mBAAY,EAAC,CAAC,UAA4B,EAAE,EAAE;QACnD,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;QAEnC,IAAI,UAAU,EAAE;YACd,MAAM,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;SACpC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC,CAAC;AACL,CAAC;AAVD,4CAUC"}