@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.
Files changed (69) hide show
  1. package/dist/Action.js +15 -0
  2. package/dist/AsyncAction.js +91 -0
  3. package/dist/AsyncScheduler.js +37 -0
  4. package/dist/ObjectUnsubscribedError.js +11 -0
  5. package/dist/Observable.js +103 -0
  6. package/dist/OperatorSubscriber.js +62 -0
  7. package/dist/Scheduler.js +17 -0
  8. package/dist/Subject.js +162 -0
  9. package/dist/Subscriber.js +153 -0
  10. package/dist/Subscription.js +144 -0
  11. package/dist/UnsubscriptionError.js +14 -0
  12. package/dist/args.js +10 -0
  13. package/dist/arrRemove.js +8 -0
  14. package/dist/async.js +6 -0
  15. package/dist/config.js +4 -0
  16. package/dist/createErrorClass.js +12 -0
  17. package/dist/dateTimestampProvider.js +6 -0
  18. package/dist/debounceTime.js +46 -0
  19. package/dist/distinctUntilChanged.js +25 -0
  20. package/dist/errorContext.js +7 -0
  21. package/dist/executeSchedule.js +19 -0
  22. package/dist/filter.js +11 -0
  23. package/dist/from.js +8 -0
  24. package/dist/identity.js +5 -0
  25. package/dist/index.js +2 -0
  26. package/dist/innerFrom.js +145 -0
  27. package/dist/intervalProvider.js +17 -0
  28. package/dist/isArrayLike.js +3 -0
  29. package/dist/isAsyncIterable.js +7 -0
  30. package/dist/isFunction.js +5 -0
  31. package/dist/isInteropObservable.js +8 -0
  32. package/dist/isIterable.js +8 -0
  33. package/dist/isObservable.js +8 -0
  34. package/dist/isPromise.js +7 -0
  35. package/dist/isReadableStreamLike.js +40 -0
  36. package/dist/isScheduler.js +7 -0
  37. package/dist/iterator.js +9 -0
  38. package/dist/lib/markers/async-query.js +134 -0
  39. package/dist/lib/markers/async-source.js +122 -0
  40. package/dist/lib/rxjs-interop/rx-method.js +50 -0
  41. package/dist/lift.js +22 -0
  42. package/dist/noop.js +3 -0
  43. package/dist/observable2.js +3 -0
  44. package/dist/observeOn.js +12 -0
  45. package/dist/of.js +13 -0
  46. package/dist/pipe.js +15 -0
  47. package/dist/reportUnhandledError.js +11 -0
  48. package/dist/rxjs-interop.js +1 -0
  49. package/dist/scheduleArray.js +20 -0
  50. package/dist/scheduleAsyncIterable.js +25 -0
  51. package/dist/scheduleIterable.js +34 -0
  52. package/dist/scheduleObservable.js +9 -0
  53. package/dist/schedulePromise.js +9 -0
  54. package/dist/scheduleReadableStreamLike.js +8 -0
  55. package/dist/scheduled.js +39 -0
  56. package/dist/subscribeOn.js +10 -0
  57. package/dist/switchMap.js +26 -0
  58. package/dist/tap.js +42 -0
  59. package/dist/throwUnobservableError.js +5 -0
  60. package/dist/timeoutProvider.js +17 -0
  61. package/package.json +6 -1
  62. package/src/index.d.ts +2 -0
  63. package/src/lib/markers/async-query.d.ts +31 -0
  64. package/src/lib/markers/async-source.d.ts +27 -0
  65. package/src/lib/markers/index.d.ts +2 -0
  66. package/src/lib/rxjs-interop/index.d.ts +1 -0
  67. package/src/lib/rxjs-interop/rx-method.d.ts +11 -0
  68. package/src/lib/types.d.ts +3 -1
  69. 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,3 @@
1
+ function noop() { }
2
+
3
+ export { noop };
@@ -0,0 +1,3 @@
1
+ var observable = (function () { return (typeof Symbol === 'function' && Symbol.observable) || '@@observable'; })();
2
+
3
+ export { observable };
@@ -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,11 @@
1
+ import { timeoutProvider } from './timeoutProvider.js';
2
+
3
+ function reportUnhandledError(err) {
4
+ timeoutProvider.setTimeout(function () {
5
+ {
6
+ throw err;
7
+ }
8
+ });
9
+ }
10
+
11
+ export { reportUnhandledError };
@@ -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.0",
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": {