@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.
- package/CHANGELOG.md +47 -0
- package/package.json +10 -8
- package/src/index.js +1 -1
- package/src/index.js.map +1 -1
- package/src/lib/filter/filter.map.d.ts +4 -3
- package/src/lib/filter/filter.map.js.map +1 -1
- package/src/lib/filter/filter.source.d.ts +4 -4
- package/src/lib/filter/filter.source.js.map +1 -1
- package/src/lib/filter/index.js +4 -4
- package/src/lib/filter/index.js.map +1 -1
- package/src/lib/index.d.ts +1 -0
- package/src/lib/index.js +8 -7
- package/src/lib/index.js.map +1 -1
- package/src/lib/iterator/index.d.ts +1 -0
- package/src/lib/iterator/index.js +7 -6
- package/src/lib/iterator/index.js.map +1 -1
- package/src/lib/iterator/iteration.accumulator.d.ts +8 -4
- package/src/lib/iterator/iteration.accumulator.js +18 -21
- package/src/lib/iterator/iteration.accumulator.js.map +1 -1
- package/src/lib/iterator/iteration.accumulator.rxjs.d.ts +7 -3
- package/src/lib/iterator/iteration.accumulator.rxjs.js +21 -10
- package/src/lib/iterator/iteration.accumulator.rxjs.js.map +1 -1
- package/src/lib/iterator/iteration.d.ts +7 -3
- package/src/lib/iterator/iteration.mapped.page.d.ts +3 -2
- package/src/lib/iterator/iteration.mapped.page.js.map +1 -1
- package/src/lib/iterator/iteration.next.d.ts +8 -3
- package/src/lib/iterator/iteration.next.js +19 -6
- package/src/lib/iterator/iteration.next.js.map +1 -1
- package/src/lib/iterator/iterator.page.d.ts +22 -6
- package/src/lib/iterator/iterator.page.js +17 -5
- package/src/lib/iterator/iterator.page.js.map +1 -1
- package/src/lib/loading/index.js +8 -8
- package/src/lib/loading/index.js.map +1 -1
- package/src/lib/loading/loading.state.d.ts +4 -1
- package/src/lib/loading/loading.state.js +12 -2
- package/src/lib/loading/loading.state.js.map +1 -1
- package/src/lib/lock.d.ts +13 -7
- package/src/lib/lock.js +38 -14
- package/src/lib/lock.js.map +1 -1
- package/src/lib/object.js +2 -2
- package/src/lib/object.js.map +1 -1
- package/src/lib/rxjs/array.d.ts +17 -0
- package/src/lib/rxjs/array.js +23 -9
- package/src/lib/rxjs/array.js.map +1 -1
- package/src/lib/rxjs/boolean.d.ts +13 -1
- package/src/lib/rxjs/boolean.js +31 -1
- package/src/lib/rxjs/boolean.js.map +1 -1
- package/src/lib/rxjs/delta.d.ts +32 -0
- package/src/lib/rxjs/delta.js +51 -0
- package/src/lib/rxjs/delta.js.map +1 -0
- package/src/lib/rxjs/factory.d.ts +31 -0
- package/src/lib/rxjs/factory.js +21 -0
- package/src/lib/rxjs/factory.js.map +1 -0
- package/src/lib/rxjs/getter.d.ts +4 -4
- package/src/lib/rxjs/getter.js +3 -3
- package/src/lib/rxjs/getter.js.map +1 -1
- package/src/lib/rxjs/index.d.ts +9 -1
- package/src/lib/rxjs/index.js +16 -8
- package/src/lib/rxjs/index.js.map +1 -1
- package/src/lib/rxjs/lifecycle.d.ts +18 -0
- package/src/lib/rxjs/lifecycle.js +55 -0
- package/src/lib/rxjs/lifecycle.js.map +1 -0
- package/src/lib/rxjs/map.d.ts +10 -0
- package/src/lib/rxjs/map.js +17 -0
- package/src/lib/rxjs/map.js.map +1 -0
- package/src/lib/rxjs/number.d.ts +16 -1
- package/src/lib/rxjs/number.js +15 -3
- package/src/lib/rxjs/number.js.map +1 -1
- package/src/lib/rxjs/rxjs.async.d.ts +57 -0
- package/src/lib/rxjs/rxjs.async.js +69 -0
- package/src/lib/rxjs/rxjs.async.js.map +1 -0
- package/src/lib/rxjs/rxjs.d.ts +10 -2
- package/src/lib/rxjs/rxjs.js +17 -16
- package/src/lib/rxjs/rxjs.js.map +1 -1
- package/src/lib/rxjs/rxjs.map.d.ts +9 -0
- package/src/lib/rxjs/rxjs.map.js +26 -0
- package/src/lib/rxjs/rxjs.map.js.map +1 -0
- package/src/lib/rxjs/set.d.ts +4 -0
- package/src/lib/rxjs/set.js +14 -0
- package/src/lib/rxjs/set.js.map +1 -0
- package/src/lib/rxjs/use.d.ts +7 -0
- package/src/lib/rxjs/use.js +14 -0
- package/src/lib/rxjs/use.js.map +1 -0
- package/src/lib/rxjs/value.d.ts +28 -5
- package/src/lib/rxjs/value.js +54 -3
- package/src/lib/rxjs/value.js.map +1 -1
- package/src/lib/work/index.d.ts +2 -0
- package/src/lib/work/index.js +6 -0
- package/src/lib/work/index.js.map +1 -0
- package/src/lib/work/work.factory.d.ts +35 -0
- package/src/lib/work/work.factory.js +43 -0
- package/src/lib/work/work.factory.js.map +1 -0
- package/src/lib/work/work.instance.d.ts +60 -0
- package/src/lib/work/work.instance.js +129 -0
- package/src/lib/work/work.instance.js.map +1 -0
package/src/lib/rxjs/rxjs.d.ts
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
import { Maybe } from '@dereekb/util';
|
|
2
2
|
import { Observable, MonoTypeOperatorFunction } from 'rxjs';
|
|
3
|
-
export declare function combineLatestFromMapValuesObsFn<T, O>(mapToObs: (value: T) => Observable<O>): (map: Map<any, T>) => Observable<O[]>;
|
|
4
|
-
export declare function combineLatestFromArrayObsFn<T, O>(mapToObs: (value: T) => Observable<O>): (values: T[]) => Observable<O[]>;
|
|
5
3
|
/**
|
|
6
4
|
* Merges both startWith and tapFirst to initialize a pipe.
|
|
7
5
|
*
|
|
@@ -19,3 +17,13 @@ export declare function initialize<T>(tap: (value: Maybe<T>) => void, initial?:
|
|
|
19
17
|
* @returns
|
|
20
18
|
*/
|
|
21
19
|
export declare function tapFirst<T>(tap: (value: T) => void, skipFirst?: boolean): MonoTypeOperatorFunction<T>;
|
|
20
|
+
/**
|
|
21
|
+
* Prevents an observable from emitting complete until it is unsubscribed from.
|
|
22
|
+
*
|
|
23
|
+
* The subscription will never have complete() called as complete only gets called after it unsubscribes,
|
|
24
|
+
* so use finalize() if additional cleanup is required.
|
|
25
|
+
*
|
|
26
|
+
* @param obs
|
|
27
|
+
* @returns
|
|
28
|
+
*/
|
|
29
|
+
export declare function preventComplete<T>(obs: Observable<T>): Observable<T>;
|
package/src/lib/rxjs/rxjs.js
CHANGED
|
@@ -1,22 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.preventComplete = exports.tapFirst = exports.initialize = void 0;
|
|
4
4
|
const rxjs_1 = require("rxjs");
|
|
5
|
-
function combineLatestFromMapValuesObsFn(mapToObs) {
|
|
6
|
-
const combineArrayFn = combineLatestFromArrayObsFn(mapToObs);
|
|
7
|
-
return (latestMap) => {
|
|
8
|
-
const mapValues = Array.from(latestMap).map(y => y[1]);
|
|
9
|
-
return combineArrayFn(mapValues);
|
|
10
|
-
};
|
|
11
|
-
}
|
|
12
|
-
exports.combineLatestFromMapValuesObsFn = combineLatestFromMapValuesObsFn;
|
|
13
|
-
function combineLatestFromArrayObsFn(mapToObs) {
|
|
14
|
-
return (latest) => {
|
|
15
|
-
const newObs = latest.map(mapToObs);
|
|
16
|
-
return (newObs.length) ? (0, rxjs_1.combineLatest)(newObs) : (0, rxjs_1.of)([]);
|
|
17
|
-
};
|
|
18
|
-
}
|
|
19
|
-
exports.combineLatestFromArrayObsFn = combineLatestFromArrayObsFn;
|
|
20
5
|
/**
|
|
21
6
|
* Merges both startWith and tapFirst to initialize a pipe.
|
|
22
7
|
*
|
|
@@ -46,4 +31,20 @@ function tapFirst(tap, skipFirst = false) {
|
|
|
46
31
|
});
|
|
47
32
|
}
|
|
48
33
|
exports.tapFirst = tapFirst;
|
|
34
|
+
/**
|
|
35
|
+
* Prevents an observable from emitting complete until it is unsubscribed from.
|
|
36
|
+
*
|
|
37
|
+
* The subscription will never have complete() called as complete only gets called after it unsubscribes,
|
|
38
|
+
* so use finalize() if additional cleanup is required.
|
|
39
|
+
*
|
|
40
|
+
* @param obs
|
|
41
|
+
* @returns
|
|
42
|
+
*/
|
|
43
|
+
function preventComplete(obs) {
|
|
44
|
+
const complete = new rxjs_1.BehaviorSubject(0);
|
|
45
|
+
return (0, rxjs_1.combineLatest)([obs, complete]).pipe((0, rxjs_1.map)(([x]) => x), (0, rxjs_1.shareReplay)(1), (0, rxjs_1.finalize)(() => {
|
|
46
|
+
complete.complete();
|
|
47
|
+
}));
|
|
48
|
+
}
|
|
49
|
+
exports.preventComplete = preventComplete;
|
|
49
50
|
//# sourceMappingURL=rxjs.js.map
|
package/src/lib/rxjs/rxjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rxjs.js","sourceRoot":"","sources":["../../../../../../packages/rxjs/src/lib/rxjs/rxjs.ts"],"names":[],"mappings":";;;AACA,+
|
|
1
|
+
{"version":3,"file":"rxjs.js","sourceRoot":"","sources":["../../../../../../packages/rxjs/src/lib/rxjs/rxjs.ts"],"names":[],"mappings":";;;AACA,+BAAkJ;AAElJ;;;;;;;GAOG;AACH,SAAgB,UAAU,CAAI,GAA8B,EAAE,OAAkB,EAAE,SAAmB;IACnG,OAAO,CAAC,MAAqB,EAAE,EAAE;QAC/B,MAAM,UAAU,GAAkB,MAAM,CAAC,IAAI,CAC3C,IAAA,gBAAS,EAAC,OAAO,CAAC,EAClB,QAAQ,CAAC,CAAC,CAAW,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,IAAI,IAAI,SAAS,CAAC,CAC/C,CAAC;QAEnB,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC;AACJ,CAAC;AATD,gCASC;AAGD;;;;;;GAMG;AACH,SAAgB,QAAQ,CAAI,GAAuB,EAAE,SAAS,GAAG,KAAK;IACpE,OAAO,IAAA,gBAAS,EAAC,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE;QAChC,GAAG,CAAC,KAAK,CAAC,CAAC;QACX,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;AACL,CAAC;AALD,4BAKC;AAED;;;;;;;;GAQG;AACH,SAAgB,eAAe,CAAI,GAAkB;IACnD,MAAM,QAAQ,GAAG,IAAI,sBAAe,CAAS,CAAC,CAAC,CAAC;IAEhD,OAAO,IAAA,oBAAa,EAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CACxC,IAAA,UAAG,EAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EACf,IAAA,kBAAW,EAAC,CAAC,CAAC,EACd,IAAA,eAAQ,EAAC,GAAG,EAAE;QACZ,QAAQ,CAAC,QAAQ,EAAE,CAAC;IACtB,CAAC,CAAC,CACH,CAAC;AACJ,CAAC;AAVD,0CAUC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Observable } from 'rxjs';
|
|
2
|
+
/**
|
|
3
|
+
* Creates a map function that maps the input Map to an Observable that returns values mapped from the map's values.
|
|
4
|
+
*
|
|
5
|
+
* @param mapToObs
|
|
6
|
+
* @returns
|
|
7
|
+
*/
|
|
8
|
+
export declare function combineLatestFromMapValuesObsFn<T, O>(mapToObs: (value: T) => Observable<O>): (map: Map<any, T>) => Observable<O[]>;
|
|
9
|
+
export declare function combineLatestFromArrayObsFn<T, O>(mapToObs: (value: T) => Observable<O>): (values: T[]) => Observable<O[]>;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.combineLatestFromArrayObsFn = exports.combineLatestFromMapValuesObsFn = void 0;
|
|
4
|
+
const rxjs_1 = require("rxjs");
|
|
5
|
+
/**
|
|
6
|
+
* Creates a map function that maps the input Map to an Observable that returns values mapped from the map's values.
|
|
7
|
+
*
|
|
8
|
+
* @param mapToObs
|
|
9
|
+
* @returns
|
|
10
|
+
*/
|
|
11
|
+
function combineLatestFromMapValuesObsFn(mapToObs) {
|
|
12
|
+
const combineArrayFn = combineLatestFromArrayObsFn(mapToObs);
|
|
13
|
+
return (latestMap) => {
|
|
14
|
+
const mapValues = Array.from(latestMap).map(y => y[1]);
|
|
15
|
+
return combineArrayFn(mapValues);
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
exports.combineLatestFromMapValuesObsFn = combineLatestFromMapValuesObsFn;
|
|
19
|
+
function combineLatestFromArrayObsFn(mapToObs) {
|
|
20
|
+
return (latest) => {
|
|
21
|
+
const newObs = latest.map(mapToObs);
|
|
22
|
+
return (newObs.length) ? (0, rxjs_1.combineLatest)(newObs) : (0, rxjs_1.of)([]);
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
exports.combineLatestFromArrayObsFn = combineLatestFromArrayObsFn;
|
|
26
|
+
//# sourceMappingURL=rxjs.map.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rxjs.map.js","sourceRoot":"","sources":["../../../../../../packages/rxjs/src/lib/rxjs/rxjs.map.ts"],"names":[],"mappings":";;;AAAA,+BAAqD;AAErD;;;;;GAKG;AACH,SAAgB,+BAA+B,CAAO,QAAqC;IACzF,MAAM,cAAc,GAAG,2BAA2B,CAAC,QAAQ,CAAC,CAAC;IAC7D,OAAO,CAAC,SAAsB,EAAE,EAAE;QAChC,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvD,OAAO,cAAc,CAAC,SAAS,CAAC,CAAC;IACnC,CAAC,CAAC;AACJ,CAAC;AAND,0EAMC;AAED,SAAgB,2BAA2B,CAAO,QAAqC;IACrF,OAAO,CAAC,MAAM,EAAE,EAAE;QAChB,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACpC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAA,oBAAa,EAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAA,SAAE,EAAC,EAAE,CAAC,CAAC;IAC1D,CAAC,CAAC;AACJ,CAAC;AALD,kEAKC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { Maybe } from "@dereekb/util";
|
|
2
|
+
import { Observable, OperatorFunction } from "rxjs";
|
|
3
|
+
export declare function setContainsAllValuesFrom<T>(valuesObs: Observable<Maybe<Iterable<T>>>): OperatorFunction<Set<T>, boolean>;
|
|
4
|
+
export declare function setContainsAnyValueFrom<T>(valuesObs: Observable<Maybe<Iterable<T>>>): OperatorFunction<Set<T>, boolean>;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.setContainsAnyValueFrom = exports.setContainsAllValuesFrom = void 0;
|
|
4
|
+
const util_1 = require("@dereekb/util");
|
|
5
|
+
const value_1 = require("./value");
|
|
6
|
+
function setContainsAllValuesFrom(valuesObs) {
|
|
7
|
+
return (0, value_1.combineLatestMapFrom)(valuesObs, (set, values) => (0, util_1.setContainsAllValues)(set, values !== null && values !== void 0 ? values : []));
|
|
8
|
+
}
|
|
9
|
+
exports.setContainsAllValuesFrom = setContainsAllValuesFrom;
|
|
10
|
+
function setContainsAnyValueFrom(valuesObs) {
|
|
11
|
+
return (0, value_1.combineLatestMapFrom)(valuesObs, (set, values) => (0, util_1.setContainsAnyValue)(set, values !== null && values !== void 0 ? values : []));
|
|
12
|
+
}
|
|
13
|
+
exports.setContainsAnyValueFrom = setContainsAnyValueFrom;
|
|
14
|
+
//# sourceMappingURL=set.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"set.js","sourceRoot":"","sources":["../../../../../../packages/rxjs/src/lib/rxjs/set.ts"],"names":[],"mappings":";;;AAAA,wCAAiF;AAEjF,mCAA+C;AAE/C,SAAgB,wBAAwB,CAAI,SAAyC;IACnF,OAAO,IAAA,4BAAoB,EAAC,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,IAAA,2BAAoB,EAAC,GAAG,EAAE,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI,EAAE,CAAC,CAAC,CAAC;AACnG,CAAC;AAFD,4DAEC;AAED,SAAgB,uBAAuB,CAAI,SAAyC;IAClF,OAAO,IAAA,4BAAoB,EAAC,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,IAAA,0BAAmB,EAAC,GAAG,EAAE,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI,EAAE,CAAC,CAAC,CAAC;AAClG,CAAC;AAFD,0DAEC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useFirst = void 0;
|
|
4
|
+
const rxjs_1 = require("rxjs");
|
|
5
|
+
/**
|
|
6
|
+
* Convenience function to subscribe to the input observable and use the first value.
|
|
7
|
+
*
|
|
8
|
+
* @param useFn
|
|
9
|
+
*/
|
|
10
|
+
function useFirst(obs, useFn) {
|
|
11
|
+
obs.pipe((0, rxjs_1.first)()).subscribe(useFn);
|
|
12
|
+
}
|
|
13
|
+
exports.useFirst = useFirst;
|
|
14
|
+
//# sourceMappingURL=use.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use.js","sourceRoot":"","sources":["../../../../../../packages/rxjs/src/lib/rxjs/use.ts"],"names":[],"mappings":";;;AAAA,+BAAyC;AAEzC;;;;GAIG;AACH,SAAgB,QAAQ,CAAI,GAAkB,EAAE,KAAyB;IACvE,GAAG,CAAC,IAAI,CAAC,IAAA,YAAK,GAAE,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AACrC,CAAC;AAFD,4BAEC"}
|
package/src/lib/rxjs/value.d.ts
CHANGED
|
@@ -1,13 +1,18 @@
|
|
|
1
1
|
import { MonoTypeOperatorFunction, Observable, OperatorFunction } from 'rxjs';
|
|
2
|
-
import {
|
|
2
|
+
import { GetterOrValue, Maybe } from '@dereekb/util';
|
|
3
|
+
export declare type IsCheckFunction<T = any> = (value: T) => Observable<boolean>;
|
|
3
4
|
/**
|
|
4
5
|
* Function that validates the input value and returns an observable.
|
|
5
6
|
*/
|
|
6
|
-
export declare type
|
|
7
|
+
export declare type IsValidFunction<T = any> = IsCheckFunction<T>;
|
|
7
8
|
/**
|
|
8
9
|
* Function that checks modification status of the input value and returns a value.
|
|
9
10
|
*/
|
|
10
|
-
export declare type
|
|
11
|
+
export declare type IsModifiedFunction<T = any> = IsCheckFunction<T>;
|
|
12
|
+
export declare function makeReturnIfIsFunction<T>(isCheckFunction: Maybe<IsModifiedFunction<T>>, defaultValueOnMaybe?: boolean): (value: Maybe<T>) => Observable<Maybe<T>>;
|
|
13
|
+
export declare function returnIfIs<T>(isCheckFunction: Maybe<IsModifiedFunction<T>>, value: Maybe<T>, defaultValueOnMaybe?: boolean): Observable<Maybe<T>>;
|
|
14
|
+
export declare function makeCheckIsFunction<T>(isCheckFunction: Maybe<IsModifiedFunction<T>>, defaultValueOnMaybe?: boolean): (value: Maybe<T>) => Observable<boolean>;
|
|
15
|
+
export declare function checkIs<T>(isCheckFunction: Maybe<IsModifiedFunction<T>>, value: Maybe<T>, defaultValueOnMaybe?: boolean): Observable<boolean>;
|
|
11
16
|
/**
|
|
12
17
|
* Observable filter that filters maybe value that are defined.
|
|
13
18
|
*/
|
|
@@ -15,7 +20,7 @@ export declare function filterMaybe<T>(): OperatorFunction<Maybe<T>, T>;
|
|
|
15
20
|
/**
|
|
16
21
|
* Skips all initial maybe values, and then returns all values after the first non-null/undefined value is returned.
|
|
17
22
|
*/
|
|
18
|
-
export declare function skipFirstMaybe<T>(): MonoTypeOperatorFunction<
|
|
23
|
+
export declare function skipFirstMaybe<T>(): MonoTypeOperatorFunction<T>;
|
|
19
24
|
/**
|
|
20
25
|
* Provides a switchMap that will emit the observable if the observable is defined, otherwise will return the default value.
|
|
21
26
|
*
|
|
@@ -32,4 +37,22 @@ export declare function switchMapMaybeObs<T = any>(): OperatorFunction<Maybe<Obs
|
|
|
32
37
|
/**
|
|
33
38
|
* Used to pass a default value incase an observable has not yet started emititng values.
|
|
34
39
|
*/
|
|
35
|
-
export declare function timeoutStartWith<T>(defaultValue:
|
|
40
|
+
export declare function timeoutStartWith<T>(defaultValue: GetterOrValue<T>): MonoTypeOperatorFunction<T>;
|
|
41
|
+
/**
|
|
42
|
+
* Combines both combineLatest with map values to an other value.
|
|
43
|
+
*
|
|
44
|
+
* @param combineObs
|
|
45
|
+
* @param mapFn
|
|
46
|
+
* @returns
|
|
47
|
+
*/
|
|
48
|
+
export declare function combineLatestMapFrom<A, B, C>(combineObs: Observable<B>, mapFn: (a: A, b: B) => C): OperatorFunction<A, C>;
|
|
49
|
+
/**
|
|
50
|
+
* Creates an observable that emits a starting value, then a second value after a delay.
|
|
51
|
+
*
|
|
52
|
+
* If the delay is not provided, or is falsy, then the second value is never emitted.
|
|
53
|
+
*/
|
|
54
|
+
export declare function emitDelayObs<T>(startWith: T, endWith: T, delayTime: Maybe<number>): Observable<T>;
|
|
55
|
+
/**
|
|
56
|
+
* Emits a value after a given delay after every new emission.
|
|
57
|
+
*/
|
|
58
|
+
export declare function emitAfterDelay<T>(value: T, delayTime: number): MonoTypeOperatorFunction<T>;
|
package/src/lib/rxjs/value.js
CHANGED
|
@@ -1,9 +1,29 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.timeoutStartWith = exports.switchMapMaybeObs = exports.switchMapMaybeDefault = exports.skipFirstMaybe = exports.filterMaybe = void 0;
|
|
3
|
+
exports.emitAfterDelay = exports.emitDelayObs = exports.combineLatestMapFrom = exports.timeoutStartWith = exports.switchMapMaybeObs = exports.switchMapMaybeDefault = exports.skipFirstMaybe = exports.filterMaybe = exports.checkIs = exports.makeCheckIsFunction = exports.returnIfIs = exports.makeReturnIfIsFunction = void 0;
|
|
4
4
|
const rxjs_1 = require("rxjs");
|
|
5
5
|
const util_1 = require("@dereekb/util");
|
|
6
|
-
// MARK:
|
|
6
|
+
// MARK: IsCheck
|
|
7
|
+
function makeReturnIfIsFunction(isCheckFunction, defaultValueOnMaybe) {
|
|
8
|
+
return (value) => returnIfIs(isCheckFunction, value, defaultValueOnMaybe);
|
|
9
|
+
}
|
|
10
|
+
exports.makeReturnIfIsFunction = makeReturnIfIsFunction;
|
|
11
|
+
function returnIfIs(isCheckFunction, value, defaultValueOnMaybe) {
|
|
12
|
+
return checkIs(isCheckFunction, value, defaultValueOnMaybe).pipe((0, rxjs_1.map)(x => (x) ? value : undefined));
|
|
13
|
+
}
|
|
14
|
+
exports.returnIfIs = returnIfIs;
|
|
15
|
+
function makeCheckIsFunction(isCheckFunction, defaultValueOnMaybe) {
|
|
16
|
+
return (value) => checkIs(isCheckFunction, value, defaultValueOnMaybe);
|
|
17
|
+
}
|
|
18
|
+
exports.makeCheckIsFunction = makeCheckIsFunction;
|
|
19
|
+
function checkIs(isCheckFunction, value, defaultValueOnMaybe = false) {
|
|
20
|
+
const is = (isCheckFunction) ?
|
|
21
|
+
((value != null) ? isCheckFunction(value) : (0, rxjs_1.of)(defaultValueOnMaybe)) :
|
|
22
|
+
(0, rxjs_1.of)(true);
|
|
23
|
+
return is;
|
|
24
|
+
}
|
|
25
|
+
exports.checkIs = checkIs;
|
|
26
|
+
// MARK: Filter
|
|
7
27
|
/**
|
|
8
28
|
* Observable filter that filters maybe value that are defined.
|
|
9
29
|
*/
|
|
@@ -52,8 +72,39 @@ exports.switchMapMaybeObs = switchMapMaybeObs;
|
|
|
52
72
|
*/
|
|
53
73
|
function timeoutStartWith(defaultValue) {
|
|
54
74
|
return (source) => {
|
|
55
|
-
return source.pipe((0, rxjs_1.timeout)({ first: 0, with: () => source.pipe((0, rxjs_1.startWith)((0, util_1.
|
|
75
|
+
return source.pipe((0, rxjs_1.timeout)({ first: 0, with: () => source.pipe((0, rxjs_1.startWith)((0, util_1.getValueFromGetter)(defaultValue))) }));
|
|
56
76
|
};
|
|
57
77
|
}
|
|
58
78
|
exports.timeoutStartWith = timeoutStartWith;
|
|
79
|
+
/**
|
|
80
|
+
* Combines both combineLatest with map values to an other value.
|
|
81
|
+
*
|
|
82
|
+
* @param combineObs
|
|
83
|
+
* @param mapFn
|
|
84
|
+
* @returns
|
|
85
|
+
*/
|
|
86
|
+
function combineLatestMapFrom(combineObs, mapFn) {
|
|
87
|
+
return (obs) => (0, rxjs_1.combineLatest)([obs, combineObs]).pipe((0, rxjs_1.map)(([a, b]) => mapFn(a, b)));
|
|
88
|
+
}
|
|
89
|
+
exports.combineLatestMapFrom = combineLatestMapFrom;
|
|
90
|
+
/**
|
|
91
|
+
* Creates an observable that emits a starting value, then a second value after a delay.
|
|
92
|
+
*
|
|
93
|
+
* If the delay is not provided, or is falsy, then the second value is never emitted.
|
|
94
|
+
*/
|
|
95
|
+
function emitDelayObs(startWith, endWith, delayTime) {
|
|
96
|
+
let obs = (0, rxjs_1.of)(startWith);
|
|
97
|
+
if (delayTime) {
|
|
98
|
+
obs = obs.pipe(emitAfterDelay(endWith, delayTime));
|
|
99
|
+
}
|
|
100
|
+
return obs;
|
|
101
|
+
}
|
|
102
|
+
exports.emitDelayObs = emitDelayObs;
|
|
103
|
+
/**
|
|
104
|
+
* Emits a value after a given delay after every new emission.
|
|
105
|
+
*/
|
|
106
|
+
function emitAfterDelay(value, delayTime) {
|
|
107
|
+
return (obs) => obs.pipe((0, rxjs_1.switchMap)((x) => (0, rxjs_1.of)(value).pipe((0, rxjs_1.delay)(delayTime), (0, rxjs_1.startWith)(x))));
|
|
108
|
+
}
|
|
109
|
+
exports.emitAfterDelay = emitAfterDelay;
|
|
59
110
|
//# sourceMappingURL=value.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"value.js","sourceRoot":"","sources":["../../../../../../packages/rxjs/src/lib/rxjs/value.ts"],"names":[],"mappings":";;;AAAA,+
|
|
1
|
+
{"version":3,"file":"value.js","sourceRoot":"","sources":["../../../../../../packages/rxjs/src/lib/rxjs/value.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
tslib_1.__exportStar(require("./work.factory"), exports);
|
|
5
|
+
tslib_1.__exportStar(require("./work.instance"), exports);
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/rxjs/src/lib/work/index.ts"],"names":[],"mappings":";;;AAAA,yDAA+B;AAC/B,0DAAgC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { Observable } from 'rxjs';
|
|
2
|
+
import { FactoryWithRequiredInput, Maybe } from '@dereekb/util';
|
|
3
|
+
import { WorkInstance, WorkInstanceDelegate } from './work.instance';
|
|
4
|
+
/**
|
|
5
|
+
* A function that handles the incoming value to do work and creates a WorkContext.
|
|
6
|
+
*/
|
|
7
|
+
export declare type WorkFactory<T, O> = FactoryWithRequiredInput<Maybe<WorkInstance<T, O>>, T>;
|
|
8
|
+
/**
|
|
9
|
+
* Performs the work. Can either return an observable that will use the handler, or can use the handler itself.
|
|
10
|
+
*/
|
|
11
|
+
export declare type Work<T = any, O = any> = WorkUsingObservable<T, O> | WorkUsingContext<T, O>;
|
|
12
|
+
/**
|
|
13
|
+
* Performs the work using the value and returns an observable.
|
|
14
|
+
*/
|
|
15
|
+
export declare type WorkUsingObservable<T = any, O = any> = (value: T) => Observable<O>;
|
|
16
|
+
/**
|
|
17
|
+
* Performs the work that uses the context handler to handle the event.
|
|
18
|
+
*/
|
|
19
|
+
export declare type WorkUsingContext<T = any, O = any> = (value: T, instance: WorkInstance<T, O>) => void;
|
|
20
|
+
/**
|
|
21
|
+
* Config for workFactory().
|
|
22
|
+
*/
|
|
23
|
+
export interface WorkFactoryConfig<T, O> {
|
|
24
|
+
readonly work: Work<T, O>;
|
|
25
|
+
readonly delegate: WorkInstanceDelegate<O>;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Creates a function that handles the incoming value and creates a WorkContext.
|
|
29
|
+
*/
|
|
30
|
+
export declare function workFactory<T, O>({ work, delegate }: WorkFactoryConfig<T, O>): WorkFactory<T, O>;
|
|
31
|
+
export declare type WorkFactoryConfigFactory<T, O> = FactoryWithRequiredInput<WorkFactoryConfig<T, O>, T>;
|
|
32
|
+
/**
|
|
33
|
+
* Creates a WorkFactory using the input WorkFactoryConfigFactory that generates new work configuration given the input.
|
|
34
|
+
*/
|
|
35
|
+
export declare function workFactoryForConfigFactory<T, O>(configFactory: WorkFactoryConfigFactory<T, O>): WorkFactory<T, O>;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.workFactoryForConfigFactory = exports.workFactory = void 0;
|
|
4
|
+
const rxjs_1 = require("rxjs");
|
|
5
|
+
const work_instance_1 = require("./work.instance");
|
|
6
|
+
/**
|
|
7
|
+
* Creates a function that handles the incoming value and creates a WorkContext.
|
|
8
|
+
*/
|
|
9
|
+
function workFactory({ work, delegate }) {
|
|
10
|
+
return (value) => {
|
|
11
|
+
const handler = new work_instance_1.WorkInstance(value, delegate);
|
|
12
|
+
let fnResult;
|
|
13
|
+
try {
|
|
14
|
+
fnResult = work(value, handler);
|
|
15
|
+
}
|
|
16
|
+
catch (e) {
|
|
17
|
+
console.error('Work encountered an unexpected error.', e);
|
|
18
|
+
handler.reject(e);
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
if (!handler.isComplete) {
|
|
22
|
+
if (fnResult && (0, rxjs_1.isObservable)(fnResult)) {
|
|
23
|
+
if (handler.hasStarted) {
|
|
24
|
+
throw new Error('Work already marked as begun from returned result. Either return an observable or use the handler directly.');
|
|
25
|
+
}
|
|
26
|
+
handler.startWorkingWithObservable(fnResult);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return handler;
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
exports.workFactory = workFactory;
|
|
33
|
+
/**
|
|
34
|
+
* Creates a WorkFactory using the input WorkFactoryConfigFactory that generates new work configuration given the input.
|
|
35
|
+
*/
|
|
36
|
+
function workFactoryForConfigFactory(configFactory) {
|
|
37
|
+
return (value) => {
|
|
38
|
+
const config = configFactory(value);
|
|
39
|
+
return workFactory(config)(value);
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
exports.workFactoryForConfigFactory = workFactoryForConfigFactory;
|
|
43
|
+
//# sourceMappingURL=work.factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"work.factory.js","sourceRoot":"","sources":["../../../../../../packages/rxjs/src/lib/work/work.factory.ts"],"names":[],"mappings":";;;AAAA,+BAAgD;AAEhD,mDAAqE;AA8BrE;;GAEG;AACH,SAAgB,WAAW,CAAO,EAAE,IAAI,EAAE,QAAQ,EAA2B;IAC3E,OAAO,CAAC,KAAQ,EAAE,EAAE;QAClB,MAAM,OAAO,GAAG,IAAI,4BAAY,CAAO,KAAK,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,QAA8B,CAAC;QAEnC,IAAI;YACF,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;SACjC;QAAC,OAAO,CAAM,EAAE;YACf,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,CAAC,CAAC,CAAC;YAC1D,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAClB,OAAO;SACR;QAED,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;YACvB,IAAI,QAAQ,IAAI,IAAA,mBAAY,EAAC,QAAQ,CAAC,EAAE;gBACtC,IAAI,OAAO,CAAC,UAAU,EAAE;oBACtB,MAAM,IAAI,KAAK,CAAC,6GAA6G,CAAC,CAAC;iBAChI;gBAED,OAAO,CAAC,0BAA0B,CAAC,QAAQ,CAAC,CAAC;aAC9C;SACF;QAED,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC;AACJ,CAAC;AAzBD,kCAyBC;AAID;;GAEG;AACH,SAAgB,2BAA2B,CAAO,aAA6C;IAC7F,OAAO,CAAC,KAAK,EAAE,EAAE;QACf,MAAM,MAAM,GAA4B,aAAa,CAAC,KAAK,CAAC,CAAC;QAC7D,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC,CAAC;AACJ,CAAC;AALD,kEAKC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { Maybe, Destroyable } from "@dereekb/util";
|
|
2
|
+
import { Observable } from "rxjs";
|
|
3
|
+
import { LoadingState } from "../loading";
|
|
4
|
+
/**
|
|
5
|
+
* Delegate for WorkInstance
|
|
6
|
+
*/
|
|
7
|
+
export interface WorkInstanceDelegate<O = any> {
|
|
8
|
+
startWorking(): void;
|
|
9
|
+
success(result?: Maybe<O>): void;
|
|
10
|
+
reject(error?: Maybe<any>): void;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Instance that tracks doing an arbitrary piece of asynchronous work that has an input value and an output value.
|
|
14
|
+
*/
|
|
15
|
+
export declare class WorkInstance<I = any, O = any> implements Destroyable {
|
|
16
|
+
readonly value: I;
|
|
17
|
+
readonly delegate: WorkInstanceDelegate<O>;
|
|
18
|
+
private _done;
|
|
19
|
+
private _doneActionBegan;
|
|
20
|
+
private _result;
|
|
21
|
+
private _loadingState;
|
|
22
|
+
private _sub;
|
|
23
|
+
readonly loadingState$: Observable<LoadingState<O>>;
|
|
24
|
+
protected readonly _hasStarted$: Observable<boolean>;
|
|
25
|
+
protected readonly _isComplete$: Observable<boolean>;
|
|
26
|
+
constructor(value: I, delegate: WorkInstanceDelegate<O>);
|
|
27
|
+
get hasStarted(): boolean;
|
|
28
|
+
get hasStarted$(): Observable<boolean>;
|
|
29
|
+
get isComplete(): boolean;
|
|
30
|
+
get isComplete$(): Observable<boolean>;
|
|
31
|
+
get result(): Maybe<LoadingState<O>>;
|
|
32
|
+
get result$(): Observable<LoadingState<O>>;
|
|
33
|
+
/**
|
|
34
|
+
* Begins working with the input loading state, and passes the value through as the result.
|
|
35
|
+
*
|
|
36
|
+
* If the loading state returns an error, the error is forwarded.
|
|
37
|
+
*
|
|
38
|
+
* @param loadingStateObs
|
|
39
|
+
*/
|
|
40
|
+
startWorkingWithLoadingStateObservable(loadingStateObs: Observable<Maybe<LoadingState<O>>>): void;
|
|
41
|
+
/**
|
|
42
|
+
* Begins working using an observable.
|
|
43
|
+
*/
|
|
44
|
+
startWorkingWithObservable(workObs: Observable<O>): void;
|
|
45
|
+
/**
|
|
46
|
+
* Notifies the system that the work has begun.
|
|
47
|
+
*/
|
|
48
|
+
startWorking(): void;
|
|
49
|
+
/**
|
|
50
|
+
* Sets success on the work.
|
|
51
|
+
*/
|
|
52
|
+
success(result?: O): void;
|
|
53
|
+
/**
|
|
54
|
+
* Sets rejected on the work.
|
|
55
|
+
*/
|
|
56
|
+
reject(error?: any): void;
|
|
57
|
+
destroy(): void;
|
|
58
|
+
private _setWorking;
|
|
59
|
+
private _setComplete;
|
|
60
|
+
}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.WorkInstance = void 0;
|
|
4
|
+
const rxjs_1 = require("@dereekb/rxjs");
|
|
5
|
+
const rxjs_2 = require("rxjs");
|
|
6
|
+
const loading_1 = require("../loading");
|
|
7
|
+
const rxjs_3 = require("../rxjs");
|
|
8
|
+
const subscription_1 = require("../subscription");
|
|
9
|
+
/**
|
|
10
|
+
* Instance that tracks doing an arbitrary piece of asynchronous work that has an input value and an output value.
|
|
11
|
+
*/
|
|
12
|
+
class WorkInstance {
|
|
13
|
+
constructor(value, delegate) {
|
|
14
|
+
this.value = value;
|
|
15
|
+
this.delegate = delegate;
|
|
16
|
+
this._done = false;
|
|
17
|
+
this._doneActionBegan = false;
|
|
18
|
+
this._loadingState = new rxjs_2.BehaviorSubject(undefined);
|
|
19
|
+
this._sub = new subscription_1.SubscriptionObject();
|
|
20
|
+
this.loadingState$ = this._loadingState.pipe((0, rxjs_1.filterMaybe)());
|
|
21
|
+
this._hasStarted$ = this._loadingState.pipe((0, rxjs_2.map)(x => Boolean(x)), (0, rxjs_2.shareReplay)(1));
|
|
22
|
+
this._isComplete$ = this.loadingState$.pipe((0, rxjs_2.map)(x => (0, rxjs_1.loadingStateHasFinishedLoading)(x)), (0, rxjs_2.shareReplay)(1));
|
|
23
|
+
// Schedule to cleanup self once isComplete is true.
|
|
24
|
+
this.result$.subscribe((loadingState) => {
|
|
25
|
+
this._result = loadingState;
|
|
26
|
+
this.destroy();
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
get hasStarted() {
|
|
30
|
+
return this._loadingState.value != null;
|
|
31
|
+
}
|
|
32
|
+
get hasStarted$() {
|
|
33
|
+
return this._done ? (0, rxjs_2.of)(this._doneActionBegan) : this._hasStarted$;
|
|
34
|
+
}
|
|
35
|
+
get isComplete() {
|
|
36
|
+
return this._done || (0, rxjs_1.loadingStateHasFinishedLoading)(this._loadingState.value);
|
|
37
|
+
}
|
|
38
|
+
get isComplete$() {
|
|
39
|
+
return this._done ? (0, rxjs_2.of)(true) : this._isComplete$;
|
|
40
|
+
}
|
|
41
|
+
get result() {
|
|
42
|
+
return this._result;
|
|
43
|
+
}
|
|
44
|
+
get result$() {
|
|
45
|
+
return (this._result) ? (0, rxjs_2.of)(this._result) : this._isComplete$.pipe((0, rxjs_2.filter)(x => x === true), (0, rxjs_2.switchMap)(_ => this.loadingState$));
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Begins working with the input loading state, and passes the value through as the result.
|
|
49
|
+
*
|
|
50
|
+
* If the loading state returns an error, the error is forwarded.
|
|
51
|
+
*
|
|
52
|
+
* @param loadingStateObs
|
|
53
|
+
*/
|
|
54
|
+
startWorkingWithLoadingStateObservable(loadingStateObs) {
|
|
55
|
+
const obs = (0, rxjs_3.preventComplete)(loadingStateObs).pipe((0, rxjs_1.filterMaybe)(), (0, rxjs_2.shareReplay)(1));
|
|
56
|
+
this._sub.subscription = obs.pipe((0, rxjs_2.delay)(0), // delay to prevent an immediate start working, which can override the _sub.subscription value
|
|
57
|
+
(0, rxjs_2.first)()).subscribe(() => {
|
|
58
|
+
this.startWorkingWithObservable(obs.pipe((0, rxjs_2.filter)(x => x && !(0, loading_1.loadingStateIsLoading)(x)), // don't return until it has finished loading.
|
|
59
|
+
(0, rxjs_2.map)(x => {
|
|
60
|
+
if (x.error) {
|
|
61
|
+
throw x.error;
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
return x.value;
|
|
65
|
+
}
|
|
66
|
+
})));
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Begins working using an observable.
|
|
71
|
+
*/
|
|
72
|
+
startWorkingWithObservable(workObs) {
|
|
73
|
+
this.startWorking();
|
|
74
|
+
this._sub.subscription = workObs.pipe((0, rxjs_2.first)()).subscribe({
|
|
75
|
+
next: (workResult) => {
|
|
76
|
+
this.success(workResult);
|
|
77
|
+
},
|
|
78
|
+
error: (error) => {
|
|
79
|
+
var _a, _b;
|
|
80
|
+
const message = (_b = (_a = error.message) !== null && _a !== void 0 ? _a : error.code) !== null && _b !== void 0 ? _b : undefined;
|
|
81
|
+
this.reject((message) ? ({ message }) : undefined);
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Notifies the system that the work has begun.
|
|
87
|
+
*/
|
|
88
|
+
startWorking() {
|
|
89
|
+
this._setWorking();
|
|
90
|
+
this.delegate.startWorking();
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Sets success on the work.
|
|
94
|
+
*/
|
|
95
|
+
success(result) {
|
|
96
|
+
this._setComplete((0, loading_1.successResult)(result));
|
|
97
|
+
this.delegate.success(result);
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Sets rejected on the work.
|
|
101
|
+
*/
|
|
102
|
+
reject(error) {
|
|
103
|
+
this._setComplete((0, loading_1.errorResult)(error));
|
|
104
|
+
this.delegate.reject(error);
|
|
105
|
+
}
|
|
106
|
+
destroy() {
|
|
107
|
+
this._doneActionBegan = this.hasStarted;
|
|
108
|
+
this._done = true;
|
|
109
|
+
// Delay to prevent error.
|
|
110
|
+
setTimeout(() => {
|
|
111
|
+
this._loadingState.complete();
|
|
112
|
+
this._sub.destroy();
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
_setWorking() {
|
|
116
|
+
if (this.hasStarted) {
|
|
117
|
+
throw new Error('Action already has been triggered for this context.');
|
|
118
|
+
}
|
|
119
|
+
this._loadingState.next((0, loading_1.beginLoading)());
|
|
120
|
+
}
|
|
121
|
+
_setComplete(loadingState) {
|
|
122
|
+
if (this.isComplete) {
|
|
123
|
+
throw new Error('Action has already been marked as completed.');
|
|
124
|
+
}
|
|
125
|
+
this._loadingState.next(loadingState);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
exports.WorkInstance = WorkInstance;
|
|
129
|
+
//# sourceMappingURL=work.instance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"work.instance.js","sourceRoot":"","sources":["../../../../../../packages/rxjs/src/lib/work/work.instance.ts"],"names":[],"mappings":"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"}
|