synstate 3.1.0 → 3.2.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/README.md +59 -1
- package/dist/core/base/create-child-observable.d.mts.map +1 -1
- package/dist/core/base/create-child-observable.mjs +0 -1
- package/dist/core/base/create-child-observable.mjs.map +1 -1
- package/dist/core/base/create-observable-base.d.mts.map +1 -1
- package/dist/core/base/create-observable-base.mjs +0 -1
- package/dist/core/base/create-observable-base.mjs.map +1 -1
- package/dist/core/combine/combine.d.mts.map +1 -1
- package/dist/core/combine/combine.mjs +0 -1
- package/dist/core/combine/combine.mjs.map +1 -1
- package/dist/core/combine/merge.d.mts.map +1 -1
- package/dist/core/combine/merge.mjs +0 -2
- package/dist/core/combine/merge.mjs.map +1 -1
- package/dist/core/combine/zip.d.mts.map +1 -1
- package/dist/core/combine/zip.mjs +0 -2
- package/dist/core/combine/zip.mjs.map +1 -1
- package/dist/core/create/counter.d.mts +10 -2
- package/dist/core/create/counter.d.mts.map +1 -1
- package/dist/core/create/counter.mjs +17 -7
- package/dist/core/create/counter.mjs.map +1 -1
- package/dist/core/create/from-abortable-promise.d.mts.map +1 -1
- package/dist/core/create/from-abortable-promise.mjs +0 -2
- package/dist/core/create/from-abortable-promise.mjs.map +1 -1
- package/dist/core/create/from-promise.d.mts.map +1 -1
- package/dist/core/create/from-promise.mjs +0 -1
- package/dist/core/create/from-promise.mjs.map +1 -1
- package/dist/core/create/from-subscribable.d.mts.map +1 -1
- package/dist/core/create/from-subscribable.mjs +0 -1
- package/dist/core/create/from-subscribable.mjs.map +1 -1
- package/dist/core/create/just.d.mts.map +1 -1
- package/dist/core/create/just.mjs +0 -1
- package/dist/core/create/just.mjs.map +1 -1
- package/dist/core/operators/audit.d.mts.map +1 -1
- package/dist/core/operators/audit.mjs +0 -1
- package/dist/core/operators/audit.mjs.map +1 -1
- package/dist/core/operators/debounce.d.mts.map +1 -1
- package/dist/core/operators/debounce.mjs +0 -1
- package/dist/core/operators/debounce.mjs.map +1 -1
- package/dist/core/operators/filter.d.mts.map +1 -1
- package/dist/core/operators/filter.mjs +19 -0
- package/dist/core/operators/filter.mjs.map +1 -1
- package/dist/core/operators/map.d.mts.map +1 -1
- package/dist/core/operators/map.mjs +0 -1
- package/dist/core/operators/map.mjs.map +1 -1
- package/dist/core/operators/skip-if-no-change.d.mts.map +1 -1
- package/dist/core/operators/skip-if-no-change.mjs +0 -1
- package/dist/core/operators/skip-if-no-change.mjs.map +1 -1
- package/dist/core/operators/take-until.d.mts.map +1 -1
- package/dist/core/operators/take-until.mjs +0 -1
- package/dist/core/operators/take-until.mjs.map +1 -1
- package/dist/core/operators/throttle.d.mts.map +1 -1
- package/dist/core/operators/throttle.mjs +0 -1
- package/dist/core/operators/throttle.mjs.map +1 -1
- package/dist/core/operators/with-buffered-from.d.mts.map +1 -1
- package/dist/core/operators/with-buffered-from.mjs +0 -1
- package/dist/core/operators/with-buffered-from.mjs.map +1 -1
- package/dist/core/predefined/operators/unwrap-optional.d.mts.map +1 -1
- package/dist/core/predefined/operators/unwrap-optional.mjs +0 -1
- package/dist/core/predefined/operators/unwrap-optional.mjs.map +1 -1
- package/dist/core/predefined/operators/unwrap-result-ok.d.mts.map +1 -1
- package/dist/core/predefined/operators/unwrap-result-ok.mjs +0 -1
- package/dist/core/predefined/operators/unwrap-result-ok.mjs.map +1 -1
- package/dist/core/utils/id-maker.d.mts.map +1 -1
- package/dist/core/utils/id-maker.mjs +0 -1
- package/dist/core/utils/id-maker.mjs.map +1 -1
- package/dist/core/utils/utils.d.mts.map +1 -1
- package/dist/core/utils/utils.mjs +0 -1
- package/dist/core/utils/utils.mjs.map +1 -1
- package/package.json +11 -11
- package/src/core/base/create-child-observable.mts +0 -1
- package/src/core/base/create-observable-base.mts +3 -1
- package/src/core/combine/combine.mts +0 -1
- package/src/core/combine/merge.mts +0 -2
- package/src/core/combine/zip.mts +0 -2
- package/src/core/create/counter.mts +20 -10
- package/src/core/create/counter.test.mts +183 -0
- package/src/core/create/from-abortable-promise.mts +0 -2
- package/src/core/create/from-promise.mts +0 -1
- package/src/core/create/from-subscribable.mts +0 -1
- package/src/core/create/just.mts +0 -1
- package/src/core/operators/audit.mts +0 -1
- package/src/core/operators/debounce.mts +0 -1
- package/src/core/operators/filter.mts +41 -0
- package/src/core/operators/map.mts +0 -1
- package/src/core/operators/skip-if-no-change.mts +0 -1
- package/src/core/operators/take-until.mts +0 -1
- package/src/core/operators/throttle.mts +0 -1
- package/src/core/operators/with-buffered-from.mts +0 -1
- package/src/core/predefined/operators/unwrap-optional.mts +0 -1
- package/src/core/predefined/operators/unwrap-result-ok.mts +0 -1
- package/src/core/utils/id-maker.mts +0 -1
- package/src/core/utils/utils.mts +0 -1
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import {
|
|
2
2
|
asSafeUint,
|
|
3
3
|
expectType,
|
|
4
|
+
isNotUndefined,
|
|
5
|
+
isString,
|
|
4
6
|
Optional,
|
|
5
7
|
pipe,
|
|
6
8
|
SafeUint,
|
|
@@ -68,6 +70,11 @@ export function filter<A, B extends A>(
|
|
|
68
70
|
predicate: (value: A, index: SafeUint | -1) => value is B,
|
|
69
71
|
): DropInitialValueOperator<A, B>;
|
|
70
72
|
|
|
73
|
+
// A type-guard predicate and a boolean one are both functions at run time, so
|
|
74
|
+
// this set only refines the return type (#1952). It stays overloaded because
|
|
75
|
+
// one signature with a union parameter infers `unknown` for a generic guard
|
|
76
|
+
// such as `isNotUndefined`; see the type test below.
|
|
77
|
+
// @sumi-expect-error functions/no-refinement-overload
|
|
71
78
|
export function filter<A>(
|
|
72
79
|
predicate: (value: A, index: SafeUint | -1) => boolean,
|
|
73
80
|
): DropInitialValueOperator<A, A>;
|
|
@@ -139,4 +146,38 @@ if (import.meta.vitest !== undefined) {
|
|
|
139
146
|
|
|
140
147
|
expectType<typeof _d, Observable<number>>('=');
|
|
141
148
|
}
|
|
149
|
+
|
|
150
|
+
{
|
|
151
|
+
const s = source<number | undefined>();
|
|
152
|
+
|
|
153
|
+
const _guarded = s.pipe(filter((x): x is number => x !== undefined));
|
|
154
|
+
|
|
155
|
+
expectType<typeof _guarded, Observable<number>>('=');
|
|
156
|
+
|
|
157
|
+
const _inferred = s.pipe(filter((x) => x !== undefined));
|
|
158
|
+
|
|
159
|
+
expectType<typeof _inferred, Observable<number>>('=');
|
|
160
|
+
|
|
161
|
+
// A generic guard is what a single signature with a union parameter
|
|
162
|
+
// loses (it infers `unknown`), and why this set stays overloaded.
|
|
163
|
+
const _generic = s.pipe(filter(isNotUndefined));
|
|
164
|
+
|
|
165
|
+
expectType<typeof _generic, Observable<number>>('=');
|
|
166
|
+
|
|
167
|
+
const _withIndex = s.pipe(filter((x, i) => i === -1 || x === 0));
|
|
168
|
+
|
|
169
|
+
expectType<typeof _withIndex, Observable<number | undefined>>('=');
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
{
|
|
173
|
+
const _d = source<unknown>().pipe(filter(isString));
|
|
174
|
+
|
|
175
|
+
expectType<typeof _d, Observable<string>>('=');
|
|
176
|
+
|
|
177
|
+
const _standalone = filter((x: number) => x > 0);
|
|
178
|
+
|
|
179
|
+
expectType<typeof _standalone, DropInitialValueOperator<number, number>>(
|
|
180
|
+
'=',
|
|
181
|
+
);
|
|
182
|
+
}
|
|
142
183
|
}
|
|
@@ -51,7 +51,6 @@ export const map = <A, B>(
|
|
|
51
51
|
mapFn: (x: A, index: SafeUint | -1) => B,
|
|
52
52
|
): KeepInitialValueOperator<A, B> =>
|
|
53
53
|
// @sumi-expect-error banned-syntax/no-unsafe-type-assertion
|
|
54
|
-
// eslint-disable-next-line total-functions/no-unsafe-type-assertion
|
|
55
54
|
((parentObservable) =>
|
|
56
55
|
createMapObservable(parentObservable, mapFn)) as KeepInitialValueOperator<
|
|
57
56
|
A,
|
|
@@ -71,7 +71,6 @@ export const skipIfNoChange = <A,>(
|
|
|
71
71
|
eq: (x: A, y: A) => boolean = (x, y) => Object.is(x, y),
|
|
72
72
|
): KeepInitialValueOperator<A, A> =>
|
|
73
73
|
// @sumi-expect-error banned-syntax/no-unsafe-type-assertion
|
|
74
|
-
// eslint-disable-next-line total-functions/no-unsafe-type-assertion
|
|
75
74
|
((parentObservable) =>
|
|
76
75
|
createSkipIfNoChangeObservable(
|
|
77
76
|
parentObservable,
|
|
@@ -58,7 +58,6 @@ export const takeUntil = <A,>(
|
|
|
58
58
|
notifier: Observable<unknown>,
|
|
59
59
|
): KeepInitialValueOperator<A, A> =>
|
|
60
60
|
// @sumi-expect-error banned-syntax/no-unsafe-type-assertion
|
|
61
|
-
// eslint-disable-next-line total-functions/no-unsafe-type-assertion
|
|
62
61
|
((parentObservable) =>
|
|
63
62
|
createTakeUntilObservable(
|
|
64
63
|
parentObservable,
|
|
@@ -89,7 +89,6 @@ export const throttle = <A,>(
|
|
|
89
89
|
milliSeconds: number,
|
|
90
90
|
): KeepInitialValueOperator<A, A> =>
|
|
91
91
|
// @sumi-expect-error banned-syntax/no-unsafe-type-assertion
|
|
92
|
-
// eslint-disable-next-line total-functions/no-unsafe-type-assertion
|
|
93
92
|
((parentObservable) =>
|
|
94
93
|
createThrottleObservable(
|
|
95
94
|
parentObservable,
|
|
@@ -64,7 +64,6 @@ export const withBufferedFrom = <A, B>(
|
|
|
64
64
|
observable: Observable<B>,
|
|
65
65
|
): KeepInitialValueOperator<A, readonly [A, readonly B[]]> =>
|
|
66
66
|
// @sumi-expect-error banned-syntax/no-unsafe-type-assertion
|
|
67
|
-
// eslint-disable-next-line total-functions/no-unsafe-type-assertion
|
|
68
67
|
((parentObservable) =>
|
|
69
68
|
createWithBufferedFromObservable(
|
|
70
69
|
parentObservable,
|
|
@@ -47,5 +47,4 @@ export const unwrapOptional = <
|
|
|
47
47
|
O extends UnknownOptional,
|
|
48
48
|
>(): KeepInitialValueOperator<O, Optional.Unwrap<O> | undefined> =>
|
|
49
49
|
// @sumi-expect-error banned-syntax/no-unsafe-type-assertion
|
|
50
|
-
// eslint-disable-next-line total-functions/no-unsafe-type-assertion
|
|
51
50
|
map(Optional.unwrap as Fn<O, Optional.Unwrap<O> | undefined>);
|
|
@@ -47,5 +47,4 @@ export const unwrapResultOk = <
|
|
|
47
47
|
R extends UnknownResult,
|
|
48
48
|
>(): KeepInitialValueOperator<R, Result.UnwrapOk<R> | undefined> =>
|
|
49
49
|
// @sumi-expect-error banned-syntax/no-unsafe-type-assertion
|
|
50
|
-
// eslint-disable-next-line total-functions/no-unsafe-type-assertion
|
|
51
50
|
map(Result.unwrapOk as Fn<R, Result.UnwrapOk<R> | undefined>);
|
|
@@ -9,7 +9,6 @@ function* idMaker<T extends symbol>(): Generator<T, T, T> {
|
|
|
9
9
|
|
|
10
10
|
while (true) {
|
|
11
11
|
// @sumi-expect-error banned-syntax/no-unsafe-type-assertion
|
|
12
|
-
// eslint-disable-next-line total-functions/no-unsafe-type-assertion
|
|
13
12
|
yield Symbol(mut_i.toString()) as T;
|
|
14
13
|
|
|
15
14
|
mut_i += 1;
|
package/src/core/utils/utils.mts
CHANGED