@signaltree/core 9.3.0 → 9.5.1
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/dist/Action.js +15 -0
- package/dist/AsyncAction.js +91 -0
- package/dist/AsyncScheduler.js +37 -0
- package/dist/ObjectUnsubscribedError.js +11 -0
- package/dist/Observable.js +103 -0
- package/dist/OperatorSubscriber.js +62 -0
- package/dist/Scheduler.js +17 -0
- package/dist/Subject.js +162 -0
- package/dist/Subscriber.js +153 -0
- package/dist/Subscription.js +144 -0
- package/dist/UnsubscriptionError.js +14 -0
- package/dist/args.js +10 -0
- package/dist/arrRemove.js +8 -0
- package/dist/async.js +6 -0
- package/dist/config.js +4 -0
- package/dist/createErrorClass.js +12 -0
- package/dist/dateTimestampProvider.js +6 -0
- package/dist/debounceTime.js +46 -0
- package/dist/distinctUntilChanged.js +25 -0
- package/dist/errorContext.js +7 -0
- package/dist/executeSchedule.js +19 -0
- package/dist/filter.js +11 -0
- package/dist/from.js +8 -0
- package/dist/identity.js +5 -0
- package/dist/index.js +2 -0
- package/dist/innerFrom.js +145 -0
- package/dist/intervalProvider.js +17 -0
- package/dist/isArrayLike.js +3 -0
- package/dist/isAsyncIterable.js +7 -0
- package/dist/isFunction.js +5 -0
- package/dist/isInteropObservable.js +8 -0
- package/dist/isIterable.js +8 -0
- package/dist/isObservable.js +8 -0
- package/dist/isPromise.js +7 -0
- package/dist/isReadableStreamLike.js +40 -0
- package/dist/isScheduler.js +7 -0
- package/dist/iterator.js +9 -0
- package/dist/lib/markers/async-query.js +134 -0
- package/dist/lib/markers/async-source.js +122 -0
- package/dist/lib/rxjs-interop/rx-method.js +50 -0
- package/dist/lift.js +22 -0
- package/dist/noop.js +3 -0
- package/dist/observable2.js +3 -0
- package/dist/observeOn.js +12 -0
- package/dist/of.js +13 -0
- package/dist/pipe.js +15 -0
- package/dist/reportUnhandledError.js +11 -0
- package/dist/rxjs-interop.js +1 -0
- package/dist/scheduleArray.js +20 -0
- package/dist/scheduleAsyncIterable.js +25 -0
- package/dist/scheduleIterable.js +34 -0
- package/dist/scheduleObservable.js +9 -0
- package/dist/schedulePromise.js +9 -0
- package/dist/scheduleReadableStreamLike.js +8 -0
- package/dist/scheduled.js +39 -0
- package/dist/subscribeOn.js +10 -0
- package/dist/switchMap.js +26 -0
- package/dist/tap.js +42 -0
- package/dist/throwUnobservableError.js +5 -0
- package/dist/timeoutProvider.js +17 -0
- package/package.json +6 -1
- package/src/index.d.ts +2 -0
- package/src/lib/markers/async-query.d.ts +31 -0
- package/src/lib/markers/async-source.d.ts +27 -0
- package/src/lib/markers/index.d.ts +2 -0
- package/src/lib/rxjs-interop/index.d.ts +1 -0
- package/src/lib/rxjs-interop/rx-method.d.ts +11 -0
- package/src/lib/types.d.ts +3 -1
- package/src/rxjs-interop.d.ts +1 -0
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { signal, inject, DestroyRef, effect, untracked } from '@angular/core';
|
|
2
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
3
|
+
import { registerMarkerProcessor } from '../internals/materialize-markers.js';
|
|
4
|
+
import { Subject } from '../../Subject.js';
|
|
5
|
+
import { debounceTime } from '../../debounceTime.js';
|
|
6
|
+
import { tap } from '../../tap.js';
|
|
7
|
+
import { filter } from '../../filter.js';
|
|
8
|
+
import { distinctUntilChanged } from '../../distinctUntilChanged.js';
|
|
9
|
+
import { switchMap } from '../../switchMap.js';
|
|
10
|
+
import { isObservable } from '../../isObservable.js';
|
|
11
|
+
import { Observable } from '../../Observable.js';
|
|
12
|
+
import { of } from '../../of.js';
|
|
13
|
+
|
|
14
|
+
const ASYNC_QUERY_MARKER = Symbol('ASYNC_QUERY_MARKER');
|
|
15
|
+
let asyncQueryRegistered = false;
|
|
16
|
+
function asyncQuery(config) {
|
|
17
|
+
if (!asyncQueryRegistered) {
|
|
18
|
+
asyncQueryRegistered = true;
|
|
19
|
+
registerMarkerProcessor(isAsyncQueryMarker, createAsyncQuerySignal);
|
|
20
|
+
}
|
|
21
|
+
return {
|
|
22
|
+
[ASYNC_QUERY_MARKER]: true,
|
|
23
|
+
config
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
function isAsyncQueryMarker(value) {
|
|
27
|
+
return value !== null && typeof value === 'object' && ASYNC_QUERY_MARKER in value && value[ASYNC_QUERY_MARKER] === true;
|
|
28
|
+
}
|
|
29
|
+
function createAsyncQuerySignal(marker) {
|
|
30
|
+
const {
|
|
31
|
+
initialInput,
|
|
32
|
+
initialResult,
|
|
33
|
+
query,
|
|
34
|
+
debounce = 0,
|
|
35
|
+
filter: predicate,
|
|
36
|
+
equal = Object.is
|
|
37
|
+
} = marker.config;
|
|
38
|
+
const inputSignal = signal(initialInput);
|
|
39
|
+
const resultsSignal = signal(initialResult);
|
|
40
|
+
const loadingSignal = signal(false);
|
|
41
|
+
const errorSignal = signal(null);
|
|
42
|
+
let destroyed = false;
|
|
43
|
+
const trigger$ = new Subject();
|
|
44
|
+
let destroyRef = null;
|
|
45
|
+
try {
|
|
46
|
+
destroyRef = inject(DestroyRef, {
|
|
47
|
+
optional: true
|
|
48
|
+
}) ?? null;
|
|
49
|
+
} catch {
|
|
50
|
+
destroyRef = null;
|
|
51
|
+
}
|
|
52
|
+
destroyRef?.onDestroy(() => {
|
|
53
|
+
destroyed = true;
|
|
54
|
+
trigger$.complete();
|
|
55
|
+
});
|
|
56
|
+
const pipeline$ = trigger$.pipe(debounce > 0 ? debounceTime(debounce) : tap(), predicate ? filter(predicate) : tap(), distinctUntilChanged(equal), tap(() => {
|
|
57
|
+
loadingSignal.set(true);
|
|
58
|
+
errorSignal.set(null);
|
|
59
|
+
}), switchMap(input => {
|
|
60
|
+
try {
|
|
61
|
+
const r = query(input);
|
|
62
|
+
if (isObservable(r)) {
|
|
63
|
+
return r;
|
|
64
|
+
}
|
|
65
|
+
return new Observable(subscriber => {
|
|
66
|
+
r.then(v => {
|
|
67
|
+
subscriber.next(v);
|
|
68
|
+
subscriber.complete();
|
|
69
|
+
}, err => subscriber.error(err));
|
|
70
|
+
});
|
|
71
|
+
} catch (err) {
|
|
72
|
+
return of(undefined).pipe(tap(() => {
|
|
73
|
+
errorSignal.set(err);
|
|
74
|
+
loadingSignal.set(false);
|
|
75
|
+
}));
|
|
76
|
+
}
|
|
77
|
+
}), tap({
|
|
78
|
+
next: value => {
|
|
79
|
+
if (destroyed) return;
|
|
80
|
+
resultsSignal.set(value);
|
|
81
|
+
loadingSignal.set(false);
|
|
82
|
+
},
|
|
83
|
+
error: err => {
|
|
84
|
+
if (destroyed) return;
|
|
85
|
+
errorSignal.set(err);
|
|
86
|
+
loadingSignal.set(false);
|
|
87
|
+
}
|
|
88
|
+
}));
|
|
89
|
+
(destroyRef ? pipeline$.pipe(takeUntilDestroyed(destroyRef)) : pipeline$).subscribe({
|
|
90
|
+
error: err => {
|
|
91
|
+
if (destroyed) return;
|
|
92
|
+
errorSignal.set(err);
|
|
93
|
+
loadingSignal.set(false);
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
try {
|
|
97
|
+
effect(() => {
|
|
98
|
+
const v = inputSignal();
|
|
99
|
+
if (v === undefined) return;
|
|
100
|
+
untracked(() => trigger$.next(v));
|
|
101
|
+
}, {
|
|
102
|
+
manualCleanup: false
|
|
103
|
+
});
|
|
104
|
+
} catch {}
|
|
105
|
+
const fn = () => resultsSignal();
|
|
106
|
+
Object.defineProperty(fn, 'input', {
|
|
107
|
+
value: inputSignal
|
|
108
|
+
});
|
|
109
|
+
Object.defineProperty(fn, 'results', {
|
|
110
|
+
value: resultsSignal.asReadonly()
|
|
111
|
+
});
|
|
112
|
+
Object.defineProperty(fn, 'data', {
|
|
113
|
+
value: resultsSignal.asReadonly()
|
|
114
|
+
});
|
|
115
|
+
Object.defineProperty(fn, 'loading', {
|
|
116
|
+
value: loadingSignal.asReadonly()
|
|
117
|
+
});
|
|
118
|
+
Object.defineProperty(fn, 'error', {
|
|
119
|
+
value: errorSignal.asReadonly()
|
|
120
|
+
});
|
|
121
|
+
fn.rerun = () => {
|
|
122
|
+
const cur = inputSignal();
|
|
123
|
+
if (cur !== undefined) trigger$.next(cur);
|
|
124
|
+
};
|
|
125
|
+
fn.reset = () => {
|
|
126
|
+
loadingSignal.set(false);
|
|
127
|
+
errorSignal.set(null);
|
|
128
|
+
resultsSignal.set(initialResult);
|
|
129
|
+
inputSignal.set(initialInput);
|
|
130
|
+
};
|
|
131
|
+
return fn;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
export { ASYNC_QUERY_MARKER, asyncQuery, createAsyncQuerySignal, isAsyncQueryMarker };
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { signal, inject, DestroyRef } from '@angular/core';
|
|
2
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
3
|
+
import { registerMarkerProcessor } from '../internals/materialize-markers.js';
|
|
4
|
+
import { isObservable } from '../../isObservable.js';
|
|
5
|
+
|
|
6
|
+
const ASYNC_SOURCE_MARKER = Symbol('ASYNC_SOURCE_MARKER');
|
|
7
|
+
let asyncSourceRegistered = false;
|
|
8
|
+
function asyncSource(config) {
|
|
9
|
+
if (!asyncSourceRegistered) {
|
|
10
|
+
asyncSourceRegistered = true;
|
|
11
|
+
registerMarkerProcessor(isAsyncSourceMarker, createAsyncSourceSignal);
|
|
12
|
+
}
|
|
13
|
+
return {
|
|
14
|
+
[ASYNC_SOURCE_MARKER]: true,
|
|
15
|
+
config
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
function isAsyncSourceMarker(value) {
|
|
19
|
+
return value !== null && typeof value === 'object' && ASYNC_SOURCE_MARKER in value && value[ASYNC_SOURCE_MARKER] === true;
|
|
20
|
+
}
|
|
21
|
+
function createAsyncSourceSignal(marker) {
|
|
22
|
+
const {
|
|
23
|
+
initial,
|
|
24
|
+
load,
|
|
25
|
+
lazy = false
|
|
26
|
+
} = marker.config;
|
|
27
|
+
const dataSignal = signal(initial);
|
|
28
|
+
const loadingSignal = signal(false);
|
|
29
|
+
const errorSignal = signal(null);
|
|
30
|
+
let currentSub = null;
|
|
31
|
+
let destroyed = false;
|
|
32
|
+
let destroyRef = null;
|
|
33
|
+
try {
|
|
34
|
+
destroyRef = inject(DestroyRef, {
|
|
35
|
+
optional: true
|
|
36
|
+
}) ?? null;
|
|
37
|
+
} catch {
|
|
38
|
+
destroyRef = null;
|
|
39
|
+
}
|
|
40
|
+
destroyRef?.onDestroy(() => {
|
|
41
|
+
destroyed = true;
|
|
42
|
+
currentSub?.unsubscribe();
|
|
43
|
+
currentSub = null;
|
|
44
|
+
});
|
|
45
|
+
function runLoad() {
|
|
46
|
+
if (destroyed) return;
|
|
47
|
+
currentSub?.unsubscribe();
|
|
48
|
+
currentSub = null;
|
|
49
|
+
loadingSignal.set(true);
|
|
50
|
+
errorSignal.set(null);
|
|
51
|
+
let result;
|
|
52
|
+
try {
|
|
53
|
+
result = load();
|
|
54
|
+
} catch (err) {
|
|
55
|
+
loadingSignal.set(false);
|
|
56
|
+
errorSignal.set(err);
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
if (isObservable(result)) {
|
|
60
|
+
const obs = destroyRef ? result.pipe(takeUntilDestroyed(destroyRef)) : result;
|
|
61
|
+
currentSub = obs.subscribe({
|
|
62
|
+
next: value => {
|
|
63
|
+
if (destroyed) return;
|
|
64
|
+
dataSignal.set(value);
|
|
65
|
+
},
|
|
66
|
+
error: err => {
|
|
67
|
+
if (destroyed) return;
|
|
68
|
+
errorSignal.set(err);
|
|
69
|
+
loadingSignal.set(false);
|
|
70
|
+
},
|
|
71
|
+
complete: () => {
|
|
72
|
+
if (destroyed) return;
|
|
73
|
+
loadingSignal.set(false);
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
} else {
|
|
77
|
+
result.then(value => {
|
|
78
|
+
if (destroyed) return;
|
|
79
|
+
dataSignal.set(value);
|
|
80
|
+
loadingSignal.set(false);
|
|
81
|
+
}, err => {
|
|
82
|
+
if (destroyed) return;
|
|
83
|
+
errorSignal.set(err);
|
|
84
|
+
loadingSignal.set(false);
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
if (!lazy) {
|
|
89
|
+
runLoad();
|
|
90
|
+
}
|
|
91
|
+
const fn = () => dataSignal();
|
|
92
|
+
Object.defineProperty(fn, 'data', {
|
|
93
|
+
value: dataSignal.asReadonly()
|
|
94
|
+
});
|
|
95
|
+
Object.defineProperty(fn, 'loading', {
|
|
96
|
+
value: loadingSignal.asReadonly()
|
|
97
|
+
});
|
|
98
|
+
Object.defineProperty(fn, 'error', {
|
|
99
|
+
value: errorSignal.asReadonly()
|
|
100
|
+
});
|
|
101
|
+
fn.refresh = () => runLoad();
|
|
102
|
+
fn.set = value => {
|
|
103
|
+
currentSub?.unsubscribe();
|
|
104
|
+
currentSub = null;
|
|
105
|
+
loadingSignal.set(false);
|
|
106
|
+
errorSignal.set(null);
|
|
107
|
+
dataSignal.set(value);
|
|
108
|
+
};
|
|
109
|
+
fn.update = updater => {
|
|
110
|
+
dataSignal.update(updater);
|
|
111
|
+
};
|
|
112
|
+
fn.reset = () => {
|
|
113
|
+
currentSub?.unsubscribe();
|
|
114
|
+
currentSub = null;
|
|
115
|
+
loadingSignal.set(false);
|
|
116
|
+
errorSignal.set(null);
|
|
117
|
+
dataSignal.set(initial);
|
|
118
|
+
};
|
|
119
|
+
return fn;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
export { ASYNC_SOURCE_MARKER, asyncSource, createAsyncSourceSignal, isAsyncSourceMarker };
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { inject, DestroyRef, Injector, isSignal } from '@angular/core';
|
|
2
|
+
import { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';
|
|
3
|
+
import { Subject } from '../../Subject.js';
|
|
4
|
+
import { Subscription } from '../../Subscription.js';
|
|
5
|
+
import { isObservable } from '../../isObservable.js';
|
|
6
|
+
|
|
7
|
+
function rxMethod(generator, options) {
|
|
8
|
+
const destroyRef = options?.destroyRef ?? inject(DestroyRef);
|
|
9
|
+
const injector = options?.injector ?? inject(Injector);
|
|
10
|
+
const trigger$ = new Subject();
|
|
11
|
+
const sourceSubs = new Set();
|
|
12
|
+
let isDestroyed = false;
|
|
13
|
+
const masterSub = generator(trigger$.asObservable()).pipe(takeUntilDestroyed(destroyRef)).subscribe();
|
|
14
|
+
const fn = input => {
|
|
15
|
+
if (isDestroyed) return Subscription.EMPTY;
|
|
16
|
+
if (input === undefined) {
|
|
17
|
+
trigger$.next(undefined);
|
|
18
|
+
return Subscription.EMPTY;
|
|
19
|
+
}
|
|
20
|
+
if (isSignal(input)) {
|
|
21
|
+
const sub = toObservable(input, {
|
|
22
|
+
injector
|
|
23
|
+
}).pipe(takeUntilDestroyed(destroyRef)).subscribe(value => trigger$.next(value));
|
|
24
|
+
sourceSubs.add(sub);
|
|
25
|
+
sub.add(() => sourceSubs.delete(sub));
|
|
26
|
+
return sub;
|
|
27
|
+
}
|
|
28
|
+
if (isObservable(input)) {
|
|
29
|
+
const sub = input.pipe(takeUntilDestroyed(destroyRef)).subscribe(value => trigger$.next(value));
|
|
30
|
+
sourceSubs.add(sub);
|
|
31
|
+
sub.add(() => sourceSubs.delete(sub));
|
|
32
|
+
return sub;
|
|
33
|
+
}
|
|
34
|
+
trigger$.next(input);
|
|
35
|
+
return Subscription.EMPTY;
|
|
36
|
+
};
|
|
37
|
+
const method = fn;
|
|
38
|
+
method.destroy = () => {
|
|
39
|
+
if (isDestroyed) return;
|
|
40
|
+
isDestroyed = true;
|
|
41
|
+
masterSub.unsubscribe();
|
|
42
|
+
sourceSubs.forEach(s => s.unsubscribe());
|
|
43
|
+
sourceSubs.clear();
|
|
44
|
+
trigger$.complete();
|
|
45
|
+
};
|
|
46
|
+
destroyRef.onDestroy(() => method.destroy());
|
|
47
|
+
return method;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export { rxMethod };
|
package/dist/lift.js
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { isFunction } from './isFunction.js';
|
|
2
|
+
|
|
3
|
+
function hasLift(source) {
|
|
4
|
+
return isFunction(source === null || source === void 0 ? void 0 : source.lift);
|
|
5
|
+
}
|
|
6
|
+
function operate(init) {
|
|
7
|
+
return function (source) {
|
|
8
|
+
if (hasLift(source)) {
|
|
9
|
+
return source.lift(function (liftedSource) {
|
|
10
|
+
try {
|
|
11
|
+
return init(liftedSource, this);
|
|
12
|
+
}
|
|
13
|
+
catch (err) {
|
|
14
|
+
this.error(err);
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
throw new TypeError('Unable to lift unknown Observable type');
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export { hasLift, operate };
|
package/dist/noop.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { executeSchedule } from './executeSchedule.js';
|
|
2
|
+
import { operate } from './lift.js';
|
|
3
|
+
import { createOperatorSubscriber } from './OperatorSubscriber.js';
|
|
4
|
+
|
|
5
|
+
function observeOn(scheduler, delay) {
|
|
6
|
+
if (delay === void 0) { delay = 0; }
|
|
7
|
+
return operate(function (source, subscriber) {
|
|
8
|
+
source.subscribe(createOperatorSubscriber(subscriber, function (value) { return executeSchedule(subscriber, scheduler, function () { return subscriber.next(value); }, delay); }, function () { return executeSchedule(subscriber, scheduler, function () { return subscriber.complete(); }, delay); }, function (err) { return executeSchedule(subscriber, scheduler, function () { return subscriber.error(err); }, delay); }));
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export { observeOn };
|
package/dist/of.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { popScheduler } from './args.js';
|
|
2
|
+
import { from } from './from.js';
|
|
3
|
+
|
|
4
|
+
function of() {
|
|
5
|
+
var args = [];
|
|
6
|
+
for (var _i = 0; _i < arguments.length; _i++) {
|
|
7
|
+
args[_i] = arguments[_i];
|
|
8
|
+
}
|
|
9
|
+
var scheduler = popScheduler(args);
|
|
10
|
+
return from(args, scheduler);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export { of };
|
package/dist/pipe.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { identity } from './identity.js';
|
|
2
|
+
|
|
3
|
+
function pipeFromArray(fns) {
|
|
4
|
+
if (fns.length === 0) {
|
|
5
|
+
return identity;
|
|
6
|
+
}
|
|
7
|
+
if (fns.length === 1) {
|
|
8
|
+
return fns[0];
|
|
9
|
+
}
|
|
10
|
+
return function piped(input) {
|
|
11
|
+
return fns.reduce(function (prev, fn) { return fn(prev); }, input);
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export { pipeFromArray };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { rxMethod } from './lib/rxjs-interop/rx-method.js';
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Observable } from './Observable.js';
|
|
2
|
+
|
|
3
|
+
function scheduleArray(input, scheduler) {
|
|
4
|
+
return new Observable(function (subscriber) {
|
|
5
|
+
var i = 0;
|
|
6
|
+
return scheduler.schedule(function () {
|
|
7
|
+
if (i === input.length) {
|
|
8
|
+
subscriber.complete();
|
|
9
|
+
}
|
|
10
|
+
else {
|
|
11
|
+
subscriber.next(input[i++]);
|
|
12
|
+
if (!subscriber.closed) {
|
|
13
|
+
this.schedule();
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export { scheduleArray };
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Observable } from './Observable.js';
|
|
2
|
+
import { executeSchedule } from './executeSchedule.js';
|
|
3
|
+
|
|
4
|
+
function scheduleAsyncIterable(input, scheduler) {
|
|
5
|
+
if (!input) {
|
|
6
|
+
throw new Error('Iterable cannot be null');
|
|
7
|
+
}
|
|
8
|
+
return new Observable(function (subscriber) {
|
|
9
|
+
executeSchedule(subscriber, scheduler, function () {
|
|
10
|
+
var iterator = input[Symbol.asyncIterator]();
|
|
11
|
+
executeSchedule(subscriber, scheduler, function () {
|
|
12
|
+
iterator.next().then(function (result) {
|
|
13
|
+
if (result.done) {
|
|
14
|
+
subscriber.complete();
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
subscriber.next(result.value);
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
}, 0, true);
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export { scheduleAsyncIterable };
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Observable } from './Observable.js';
|
|
2
|
+
import { iterator } from './iterator.js';
|
|
3
|
+
import { isFunction } from './isFunction.js';
|
|
4
|
+
import { executeSchedule } from './executeSchedule.js';
|
|
5
|
+
|
|
6
|
+
function scheduleIterable(input, scheduler) {
|
|
7
|
+
return new Observable(function (subscriber) {
|
|
8
|
+
var iterator$1;
|
|
9
|
+
executeSchedule(subscriber, scheduler, function () {
|
|
10
|
+
iterator$1 = input[iterator]();
|
|
11
|
+
executeSchedule(subscriber, scheduler, function () {
|
|
12
|
+
var _a;
|
|
13
|
+
var value;
|
|
14
|
+
var done;
|
|
15
|
+
try {
|
|
16
|
+
(_a = iterator$1.next(), value = _a.value, done = _a.done);
|
|
17
|
+
}
|
|
18
|
+
catch (err) {
|
|
19
|
+
subscriber.error(err);
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
if (done) {
|
|
23
|
+
subscriber.complete();
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
subscriber.next(value);
|
|
27
|
+
}
|
|
28
|
+
}, 0, true);
|
|
29
|
+
});
|
|
30
|
+
return function () { return isFunction(iterator$1 === null || iterator$1 === void 0 ? void 0 : iterator$1.return) && iterator$1.return(); };
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export { scheduleIterable };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { innerFrom } from './innerFrom.js';
|
|
2
|
+
import { observeOn } from './observeOn.js';
|
|
3
|
+
import { subscribeOn } from './subscribeOn.js';
|
|
4
|
+
|
|
5
|
+
function scheduleObservable(input, scheduler) {
|
|
6
|
+
return innerFrom(input).pipe(subscribeOn(scheduler), observeOn(scheduler));
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export { scheduleObservable };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { innerFrom } from './innerFrom.js';
|
|
2
|
+
import { observeOn } from './observeOn.js';
|
|
3
|
+
import { subscribeOn } from './subscribeOn.js';
|
|
4
|
+
|
|
5
|
+
function schedulePromise(input, scheduler) {
|
|
6
|
+
return innerFrom(input).pipe(subscribeOn(scheduler), observeOn(scheduler));
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export { schedulePromise };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { scheduleAsyncIterable } from './scheduleAsyncIterable.js';
|
|
2
|
+
import { readableStreamLikeToAsyncGenerator } from './isReadableStreamLike.js';
|
|
3
|
+
|
|
4
|
+
function scheduleReadableStreamLike(input, scheduler) {
|
|
5
|
+
return scheduleAsyncIterable(readableStreamLikeToAsyncGenerator(input), scheduler);
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export { scheduleReadableStreamLike };
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { scheduleObservable } from './scheduleObservable.js';
|
|
2
|
+
import { schedulePromise } from './schedulePromise.js';
|
|
3
|
+
import { scheduleArray } from './scheduleArray.js';
|
|
4
|
+
import { scheduleIterable } from './scheduleIterable.js';
|
|
5
|
+
import { scheduleAsyncIterable } from './scheduleAsyncIterable.js';
|
|
6
|
+
import { isInteropObservable } from './isInteropObservable.js';
|
|
7
|
+
import { isPromise } from './isPromise.js';
|
|
8
|
+
import { isArrayLike } from './isArrayLike.js';
|
|
9
|
+
import { isIterable } from './isIterable.js';
|
|
10
|
+
import { isAsyncIterable } from './isAsyncIterable.js';
|
|
11
|
+
import { createInvalidObservableTypeError } from './throwUnobservableError.js';
|
|
12
|
+
import { isReadableStreamLike } from './isReadableStreamLike.js';
|
|
13
|
+
import { scheduleReadableStreamLike } from './scheduleReadableStreamLike.js';
|
|
14
|
+
|
|
15
|
+
function scheduled(input, scheduler) {
|
|
16
|
+
if (input != null) {
|
|
17
|
+
if (isInteropObservable(input)) {
|
|
18
|
+
return scheduleObservable(input, scheduler);
|
|
19
|
+
}
|
|
20
|
+
if (isArrayLike(input)) {
|
|
21
|
+
return scheduleArray(input, scheduler);
|
|
22
|
+
}
|
|
23
|
+
if (isPromise(input)) {
|
|
24
|
+
return schedulePromise(input, scheduler);
|
|
25
|
+
}
|
|
26
|
+
if (isAsyncIterable(input)) {
|
|
27
|
+
return scheduleAsyncIterable(input, scheduler);
|
|
28
|
+
}
|
|
29
|
+
if (isIterable(input)) {
|
|
30
|
+
return scheduleIterable(input, scheduler);
|
|
31
|
+
}
|
|
32
|
+
if (isReadableStreamLike(input)) {
|
|
33
|
+
return scheduleReadableStreamLike(input, scheduler);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
throw createInvalidObservableTypeError(input);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export { scheduled };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { operate } from './lift.js';
|
|
2
|
+
|
|
3
|
+
function subscribeOn(scheduler, delay) {
|
|
4
|
+
if (delay === void 0) { delay = 0; }
|
|
5
|
+
return operate(function (source, subscriber) {
|
|
6
|
+
subscriber.add(scheduler.schedule(function () { return source.subscribe(subscriber); }, delay));
|
|
7
|
+
});
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export { subscribeOn };
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { innerFrom } from './innerFrom.js';
|
|
2
|
+
import { operate } from './lift.js';
|
|
3
|
+
import { createOperatorSubscriber } from './OperatorSubscriber.js';
|
|
4
|
+
|
|
5
|
+
function switchMap(project, resultSelector) {
|
|
6
|
+
return operate(function (source, subscriber) {
|
|
7
|
+
var innerSubscriber = null;
|
|
8
|
+
var index = 0;
|
|
9
|
+
var isComplete = false;
|
|
10
|
+
var checkComplete = function () { return isComplete && !innerSubscriber && subscriber.complete(); };
|
|
11
|
+
source.subscribe(createOperatorSubscriber(subscriber, function (value) {
|
|
12
|
+
innerSubscriber === null || innerSubscriber === void 0 ? void 0 : innerSubscriber.unsubscribe();
|
|
13
|
+
var innerIndex = 0;
|
|
14
|
+
var outerIndex = index++;
|
|
15
|
+
innerFrom(project(value, outerIndex)).subscribe((innerSubscriber = createOperatorSubscriber(subscriber, function (innerValue) { return subscriber.next(resultSelector ? resultSelector(value, innerValue, outerIndex, innerIndex++) : innerValue); }, function () {
|
|
16
|
+
innerSubscriber = null;
|
|
17
|
+
checkComplete();
|
|
18
|
+
})));
|
|
19
|
+
}, function () {
|
|
20
|
+
isComplete = true;
|
|
21
|
+
checkComplete();
|
|
22
|
+
}));
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export { switchMap };
|
package/dist/tap.js
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { isFunction } from './isFunction.js';
|
|
2
|
+
import { operate } from './lift.js';
|
|
3
|
+
import { createOperatorSubscriber } from './OperatorSubscriber.js';
|
|
4
|
+
import { identity } from './identity.js';
|
|
5
|
+
|
|
6
|
+
function tap(observerOrNext, error, complete) {
|
|
7
|
+
var tapObserver = isFunction(observerOrNext) || error || complete
|
|
8
|
+
?
|
|
9
|
+
{ next: observerOrNext, error: error, complete: complete }
|
|
10
|
+
: observerOrNext;
|
|
11
|
+
return tapObserver
|
|
12
|
+
? operate(function (source, subscriber) {
|
|
13
|
+
var _a;
|
|
14
|
+
(_a = tapObserver.subscribe) === null || _a === void 0 ? void 0 : _a.call(tapObserver);
|
|
15
|
+
var isUnsub = true;
|
|
16
|
+
source.subscribe(createOperatorSubscriber(subscriber, function (value) {
|
|
17
|
+
var _a;
|
|
18
|
+
(_a = tapObserver.next) === null || _a === void 0 ? void 0 : _a.call(tapObserver, value);
|
|
19
|
+
subscriber.next(value);
|
|
20
|
+
}, function () {
|
|
21
|
+
var _a;
|
|
22
|
+
isUnsub = false;
|
|
23
|
+
(_a = tapObserver.complete) === null || _a === void 0 ? void 0 : _a.call(tapObserver);
|
|
24
|
+
subscriber.complete();
|
|
25
|
+
}, function (err) {
|
|
26
|
+
var _a;
|
|
27
|
+
isUnsub = false;
|
|
28
|
+
(_a = tapObserver.error) === null || _a === void 0 ? void 0 : _a.call(tapObserver, err);
|
|
29
|
+
subscriber.error(err);
|
|
30
|
+
}, function () {
|
|
31
|
+
var _a, _b;
|
|
32
|
+
if (isUnsub) {
|
|
33
|
+
(_a = tapObserver.unsubscribe) === null || _a === void 0 ? void 0 : _a.call(tapObserver);
|
|
34
|
+
}
|
|
35
|
+
(_b = tapObserver.finalize) === null || _b === void 0 ? void 0 : _b.call(tapObserver);
|
|
36
|
+
}));
|
|
37
|
+
})
|
|
38
|
+
:
|
|
39
|
+
identity;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export { tap };
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
function createInvalidObservableTypeError(input) {
|
|
2
|
+
return new TypeError("You provided " + (input !== null && typeof input === 'object' ? 'an invalid object' : "'" + input + "'") + " where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.");
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
export { createInvalidObservableTypeError };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { __spreadArray, __read } from 'tslib';
|
|
2
|
+
|
|
3
|
+
var timeoutProvider = {
|
|
4
|
+
setTimeout: function (handler, timeout) {
|
|
5
|
+
var args = [];
|
|
6
|
+
for (var _i = 2; _i < arguments.length; _i++) {
|
|
7
|
+
args[_i - 2] = arguments[_i];
|
|
8
|
+
}
|
|
9
|
+
return setTimeout.apply(void 0, __spreadArray([handler, timeout], __read(args)));
|
|
10
|
+
},
|
|
11
|
+
clearTimeout: function (handle) {
|
|
12
|
+
return (clearTimeout)(handle);
|
|
13
|
+
},
|
|
14
|
+
delegate: undefined,
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
export { timeoutProvider };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@signaltree/core",
|
|
3
|
-
"version": "9.
|
|
3
|
+
"version": "9.5.1",
|
|
4
4
|
"description": "Reactive JSON for Angular. JSON branches, reactive leaves. No actions. No reducers. No selectors.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -29,6 +29,11 @@
|
|
|
29
29
|
"import": "./dist/storage.js",
|
|
30
30
|
"default": "./dist/storage.js"
|
|
31
31
|
},
|
|
32
|
+
"./rxjs-interop": {
|
|
33
|
+
"types": "./src/rxjs-interop.d.ts",
|
|
34
|
+
"import": "./dist/rxjs-interop.js",
|
|
35
|
+
"default": "./dist/rxjs-interop.js"
|
|
36
|
+
},
|
|
32
37
|
"./package.json": "./package.json"
|
|
33
38
|
},
|
|
34
39
|
"peerDependencies": {
|