synstate 0.1.2 → 1.0.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/README.md +200 -147
- package/assets/old/synstate-icon-square.png +0 -0
- package/assets/synstate-logo.png +0 -0
- package/dist/core/class/child-observable-class.d.mts +2 -0
- package/dist/core/class/child-observable-class.d.mts.map +1 -1
- package/dist/core/class/child-observable-class.mjs +44 -13
- package/dist/core/class/child-observable-class.mjs.map +1 -1
- package/dist/core/class/observable-base-class.d.mts +4 -4
- package/dist/core/class/observable-base-class.d.mts.map +1 -1
- package/dist/core/class/observable-base-class.mjs +8 -8
- package/dist/core/class/observable-base-class.mjs.map +1 -1
- package/dist/core/class/root-observable-class.d.mts +3 -1
- package/dist/core/class/root-observable-class.d.mts.map +1 -1
- package/dist/core/class/root-observable-class.mjs +9 -9
- package/dist/core/class/root-observable-class.mjs.map +1 -1
- package/dist/core/combine/combine.d.mts +7 -6
- package/dist/core/combine/combine.d.mts.map +1 -1
- package/dist/core/combine/combine.mjs +11 -12
- package/dist/core/combine/combine.mjs.map +1 -1
- package/dist/core/combine/merge.d.mts +7 -6
- package/dist/core/combine/merge.d.mts.map +1 -1
- package/dist/core/combine/merge.mjs +9 -9
- package/dist/core/combine/merge.mjs.map +1 -1
- package/dist/core/combine/zip.d.mts +21 -19
- package/dist/core/combine/zip.d.mts.map +1 -1
- package/dist/core/combine/zip.mjs +22 -21
- package/dist/core/combine/zip.mjs.map +1 -1
- package/dist/core/create/{interval.d.mts → counter.d.mts} +14 -12
- package/dist/core/create/counter.d.mts.map +1 -0
- package/dist/core/create/{interval.mjs → counter.mjs} +21 -23
- package/dist/core/create/counter.mjs.map +1 -0
- package/dist/core/create/from-abortable-promise.d.mts +29 -0
- package/dist/core/create/from-abortable-promise.d.mts.map +1 -0
- package/dist/core/create/from-abortable-promise.mjs +70 -0
- package/dist/core/create/from-abortable-promise.mjs.map +1 -0
- package/dist/core/create/from-promise.d.mts +9 -6
- package/dist/core/create/from-promise.d.mts.map +1 -1
- package/dist/core/create/from-promise.mjs +8 -5
- package/dist/core/create/from-promise.mjs.map +1 -1
- package/dist/core/create/from-subscribable.d.mts +4 -4
- package/dist/core/create/from-subscribable.mjs +4 -4
- package/dist/core/create/index.d.mts +3 -3
- package/dist/core/create/index.d.mts.map +1 -1
- package/dist/core/create/index.mjs +4 -4
- package/dist/core/create/just.d.mts +32 -0
- package/dist/core/create/just.d.mts.map +1 -0
- package/dist/core/create/just.mjs +44 -0
- package/dist/core/create/just.mjs.map +1 -0
- package/dist/core/create/source.d.mts +7 -12
- package/dist/core/create/source.d.mts.map +1 -1
- package/dist/core/create/source.mjs +1 -6
- package/dist/core/create/source.mjs.map +1 -1
- package/dist/core/create/timer.d.mts +6 -4
- package/dist/core/create/timer.d.mts.map +1 -1
- package/dist/core/create/timer.mjs +6 -7
- package/dist/core/create/timer.mjs.map +1 -1
- package/dist/core/index.d.mts +0 -1
- package/dist/core/index.d.mts.map +1 -1
- package/dist/core/index.mjs +8 -13
- package/dist/core/index.mjs.map +1 -1
- package/dist/core/operators/audit.d.mts +97 -0
- package/dist/core/operators/audit.d.mts.map +1 -0
- package/dist/core/operators/audit.mjs +144 -0
- package/dist/core/operators/audit.mjs.map +1 -0
- package/dist/core/operators/debounce.d.mts +88 -0
- package/dist/core/operators/debounce.d.mts.map +1 -0
- package/dist/core/operators/debounce.mjs +130 -0
- package/dist/core/operators/debounce.mjs.map +1 -0
- package/dist/core/operators/filter.d.mts +6 -5
- package/dist/core/operators/filter.d.mts.map +1 -1
- package/dist/core/operators/filter.mjs +3 -3
- package/dist/core/operators/filter.mjs.map +1 -1
- package/dist/core/operators/index.d.mts +4 -4
- package/dist/core/operators/index.d.mts.map +1 -1
- package/dist/core/operators/index.mjs +4 -4
- package/dist/core/operators/{map-with-index.d.mts → map.d.mts} +12 -11
- package/dist/core/operators/map.d.mts.map +1 -0
- package/dist/core/operators/{map-with-index.mjs → map.mjs} +17 -17
- package/dist/core/operators/map.mjs.map +1 -0
- package/dist/core/operators/merge-map.d.mts +56 -29
- package/dist/core/operators/merge-map.d.mts.map +1 -1
- package/dist/core/operators/merge-map.mjs +58 -31
- package/dist/core/operators/merge-map.mjs.map +1 -1
- package/dist/core/operators/pairwise.d.mts +6 -6
- package/dist/core/operators/pairwise.mjs +9 -9
- package/dist/core/operators/pairwise.mjs.map +1 -1
- package/dist/core/operators/scan.d.mts +6 -6
- package/dist/core/operators/scan.mjs +9 -9
- package/dist/core/operators/scan.mjs.map +1 -1
- package/dist/core/operators/skip-if-no-change.d.mts +20 -8
- package/dist/core/operators/skip-if-no-change.d.mts.map +1 -1
- package/dist/core/operators/skip-if-no-change.mjs +23 -11
- package/dist/core/operators/skip-if-no-change.mjs.map +1 -1
- package/dist/core/operators/skip-until.d.mts +5 -5
- package/dist/core/operators/skip-until.mjs +8 -8
- package/dist/core/operators/skip-until.mjs.map +1 -1
- package/dist/core/operators/skip-while.d.mts +19 -8
- package/dist/core/operators/skip-while.d.mts.map +1 -1
- package/dist/core/operators/skip-while.mjs +26 -11
- package/dist/core/operators/skip-while.mjs.map +1 -1
- package/dist/core/operators/switch-map.d.mts +57 -26
- package/dist/core/operators/switch-map.d.mts.map +1 -1
- package/dist/core/operators/switch-map.mjs +59 -28
- package/dist/core/operators/switch-map.mjs.map +1 -1
- package/dist/core/operators/take-until.d.mts +5 -5
- package/dist/core/operators/take-until.mjs +8 -8
- package/dist/core/operators/take-until.mjs.map +1 -1
- package/dist/core/operators/take-while.d.mts +16 -7
- package/dist/core/operators/take-while.d.mts.map +1 -1
- package/dist/core/operators/take-while.mjs +18 -10
- package/dist/core/operators/take-while.mjs.map +1 -1
- package/dist/core/operators/throttle.d.mts +81 -0
- package/dist/core/operators/throttle.d.mts.map +1 -0
- package/dist/core/operators/throttle.mjs +126 -0
- package/dist/core/operators/throttle.mjs.map +1 -0
- package/dist/core/operators/with-buffered-from.d.mts +9 -9
- package/dist/core/operators/with-buffered-from.mjs +12 -12
- package/dist/core/operators/with-buffered-from.mjs.map +1 -1
- package/dist/core/operators/with-current-value-from.d.mts +10 -9
- package/dist/core/operators/with-current-value-from.d.mts.map +1 -1
- package/dist/core/operators/with-current-value-from.mjs +13 -12
- package/dist/core/operators/with-current-value-from.mjs.map +1 -1
- package/dist/core/operators/with-initial-value.d.mts +5 -5
- package/dist/core/operators/with-initial-value.mjs +8 -8
- package/dist/core/operators/with-initial-value.mjs.map +1 -1
- package/dist/core/predefined/index.mjs +0 -1
- package/dist/core/predefined/index.mjs.map +1 -1
- package/dist/core/predefined/operators/attach-index.d.mts +50 -0
- package/dist/core/predefined/operators/attach-index.d.mts.map +1 -1
- package/dist/core/predefined/operators/attach-index.mjs +51 -2
- package/dist/core/predefined/operators/attach-index.mjs.map +1 -1
- package/dist/core/predefined/operators/index.d.mts +0 -1
- package/dist/core/predefined/operators/index.d.mts.map +1 -1
- package/dist/core/predefined/operators/index.mjs +0 -1
- package/dist/core/predefined/operators/index.mjs.map +1 -1
- package/dist/core/predefined/operators/map-optional.d.mts +48 -1
- package/dist/core/predefined/operators/map-optional.d.mts.map +1 -1
- package/dist/core/predefined/operators/map-optional.mjs +49 -1
- package/dist/core/predefined/operators/map-optional.mjs.map +1 -1
- package/dist/core/predefined/operators/map-result-err.d.mts +48 -1
- package/dist/core/predefined/operators/map-result-err.d.mts.map +1 -1
- package/dist/core/predefined/operators/map-result-err.mjs +49 -1
- package/dist/core/predefined/operators/map-result-err.mjs.map +1 -1
- package/dist/core/predefined/operators/map-result-ok.d.mts +48 -1
- package/dist/core/predefined/operators/map-result-ok.d.mts.map +1 -1
- package/dist/core/predefined/operators/map-result-ok.mjs +49 -1
- package/dist/core/predefined/operators/map-result-ok.mjs.map +1 -1
- package/dist/core/predefined/operators/map-to.d.mts +40 -0
- package/dist/core/predefined/operators/map-to.d.mts.map +1 -1
- package/dist/core/predefined/operators/map-to.mjs +43 -1
- package/dist/core/predefined/operators/map-to.mjs.map +1 -1
- package/dist/core/predefined/operators/pluck.d.mts +39 -0
- package/dist/core/predefined/operators/pluck.d.mts.map +1 -1
- package/dist/core/predefined/operators/pluck.mjs +42 -1
- package/dist/core/predefined/operators/pluck.mjs.map +1 -1
- package/dist/core/predefined/operators/skip.d.mts +48 -0
- package/dist/core/predefined/operators/skip.d.mts.map +1 -1
- package/dist/core/predefined/operators/skip.mjs +47 -0
- package/dist/core/predefined/operators/skip.mjs.map +1 -1
- package/dist/core/predefined/operators/take.d.mts +42 -0
- package/dist/core/predefined/operators/take.d.mts.map +1 -1
- package/dist/core/predefined/operators/take.mjs +41 -0
- package/dist/core/predefined/operators/take.mjs.map +1 -1
- package/dist/core/predefined/operators/unwrap-optional.d.mts +41 -1
- package/dist/core/predefined/operators/unwrap-optional.d.mts.map +1 -1
- package/dist/core/predefined/operators/unwrap-optional.mjs +42 -1
- package/dist/core/predefined/operators/unwrap-optional.mjs.map +1 -1
- package/dist/core/predefined/operators/unwrap-result-err.d.mts +41 -1
- package/dist/core/predefined/operators/unwrap-result-err.d.mts.map +1 -1
- package/dist/core/predefined/operators/unwrap-result-err.mjs +42 -1
- package/dist/core/predefined/operators/unwrap-result-err.mjs.map +1 -1
- package/dist/core/predefined/operators/unwrap-result-ok.d.mts +41 -1
- package/dist/core/predefined/operators/unwrap-result-ok.d.mts.map +1 -1
- package/dist/core/predefined/operators/unwrap-result-ok.mjs +42 -1
- package/dist/core/predefined/operators/unwrap-result-ok.mjs.map +1 -1
- package/dist/core/types/id.d.mts +2 -1
- package/dist/core/types/id.d.mts.map +1 -1
- package/dist/core/types/index.d.mts +1 -0
- package/dist/core/types/index.d.mts.map +1 -1
- package/dist/core/types/observable-family.d.mts +10 -14
- package/dist/core/types/observable-family.d.mts.map +1 -1
- package/dist/core/types/observable-kind.d.mts +1 -0
- package/dist/core/types/observable-kind.d.mts.map +1 -1
- package/dist/core/types/observable.d.mts +5 -3
- package/dist/core/types/observable.d.mts.map +1 -1
- package/dist/core/types/observable.mjs.map +1 -1
- package/dist/core/types/timer.d.mts +2 -0
- package/dist/core/types/timer.d.mts.map +1 -0
- package/dist/core/types/timer.mjs +2 -0
- package/dist/core/types/timer.mjs.map +1 -0
- package/dist/core/utils/id-maker.d.mts +2 -2
- package/dist/core/utils/id-maker.d.mts.map +1 -1
- package/dist/core/utils/id-maker.mjs +3 -3
- package/dist/core/utils/id-maker.mjs.map +1 -1
- package/dist/core/utils/index.mjs +1 -1
- package/dist/core/utils/utils.d.mts +2 -0
- package/dist/core/utils/utils.d.mts.map +1 -1
- package/dist/core/utils/utils.mjs.map +1 -1
- package/dist/entry-point.mjs +11 -14
- package/dist/entry-point.mjs.map +1 -1
- package/dist/index.mjs +11 -14
- package/dist/index.mjs.map +1 -1
- package/dist/types.d.mts +1 -2
- package/dist/utils/collect-to-array.d.mts +3 -0
- package/dist/utils/collect-to-array.d.mts.map +1 -0
- package/dist/utils/collect-to-array.mjs +11 -0
- package/dist/utils/collect-to-array.mjs.map +1 -0
- package/dist/utils/create-boolean-state.d.mts +40 -0
- package/dist/utils/create-boolean-state.d.mts.map +1 -0
- package/dist/utils/create-boolean-state.mjs +53 -0
- package/dist/utils/create-boolean-state.mjs.map +1 -0
- package/dist/utils/create-event-emitter.d.mts +4 -4
- package/dist/utils/create-event-emitter.mjs +4 -4
- package/dist/utils/create-reducer.d.mts +11 -7
- package/dist/utils/create-reducer.d.mts.map +1 -1
- package/dist/utils/create-reducer.mjs +7 -7
- package/dist/utils/create-reducer.mjs.map +1 -1
- package/dist/utils/create-state.d.mts +8 -48
- package/dist/utils/create-state.d.mts.map +1 -1
- package/dist/utils/create-state.mjs +10 -60
- package/dist/utils/create-state.mjs.map +1 -1
- package/dist/utils/index.d.mts +2 -0
- package/dist/utils/index.d.mts.map +1 -1
- package/dist/utils/index.mjs +3 -1
- package/dist/utils/index.mjs.map +1 -1
- package/package.json +21 -14
- package/src/core/class/child-observable-class.mts +68 -14
- package/src/core/class/circular-dependency-comparison.test.mts +142 -0
- package/src/core/class/circular-dependency.test.mts +251 -0
- package/src/core/class/observable-base-class.mts +10 -9
- package/src/core/class/root-observable-class.mts +15 -10
- package/src/core/combine/combine.mts +14 -13
- package/src/core/combine/merge.mts +14 -14
- package/src/core/combine/zip.mts +27 -25
- package/src/core/create/{interval.mts → counter.mts} +32 -30
- package/src/core/create/from-abortable-promise.mts +83 -0
- package/src/core/create/from-promise.mts +10 -7
- package/src/core/create/from-subscribable.mts +4 -4
- package/src/core/create/index.mts +3 -3
- package/src/core/create/just.mts +43 -0
- package/src/core/create/source.mts +10 -14
- package/src/core/create/timer.mts +12 -11
- package/src/core/index.mts +0 -1
- package/src/core/operators/audit.mts +172 -0
- package/src/core/operators/debounce.mts +154 -0
- package/src/core/operators/filter.mts +9 -9
- package/src/core/operators/index.mts +4 -4
- package/src/core/operators/{map-with-index.mts → map.mts} +20 -20
- package/src/core/operators/merge-map.mts +59 -32
- package/src/core/operators/pairwise.mts +10 -10
- package/src/core/operators/scan.mts +10 -10
- package/src/core/operators/skip-if-no-change.mts +24 -12
- package/src/core/operators/skip-until.mts +9 -9
- package/src/core/operators/skip-while.mts +29 -12
- package/src/core/operators/switch-map.mts +60 -29
- package/src/core/operators/take-until.mts +9 -9
- package/src/core/operators/take-while.mts +19 -11
- package/src/core/operators/{throttle-time.mts → throttle.mts} +58 -38
- package/src/core/operators/with-buffered-from.mts +13 -13
- package/src/core/operators/with-current-value-from.mts +14 -13
- package/src/core/operators/with-initial-value.mts +9 -9
- package/src/core/predefined/operators/attach-index.mts +52 -2
- package/src/core/predefined/operators/index.mts +0 -1
- package/src/core/predefined/operators/map-optional.mts +49 -2
- package/src/core/predefined/operators/map-result-err.mts +49 -2
- package/src/core/predefined/operators/map-result-ok.mts +49 -2
- package/src/core/predefined/operators/map-to.mts +41 -1
- package/src/core/predefined/operators/pluck.mts +40 -1
- package/src/core/predefined/operators/skip.mts +48 -0
- package/src/core/predefined/operators/take.mts +42 -0
- package/src/core/predefined/operators/unwrap-optional.mts +43 -2
- package/src/core/predefined/operators/unwrap-result-err.mts +43 -2
- package/src/core/predefined/operators/unwrap-result-ok.mts +43 -2
- package/src/core/types/id.mts +3 -1
- package/src/core/types/index.mts +1 -0
- package/src/core/types/observable-family.mts +13 -24
- package/src/core/types/observable-kind.mts +2 -0
- package/src/core/types/observable.mts +5 -4
- package/src/core/types/timer.mts +2 -0
- package/src/core/utils/id-maker.mts +4 -4
- package/src/core/utils/utils.mts +1 -0
- package/src/utils/collect-to-array.mts +17 -0
- package/src/utils/create-boolean-state.mts +68 -0
- package/src/utils/create-event-emitter.mts +4 -4
- package/src/utils/create-reducer.mts +12 -8
- package/src/utils/create-state.mts +10 -75
- package/src/utils/index.mts +2 -0
- package/dist/core/create/from-array.d.mts +0 -39
- package/dist/core/create/from-array.d.mts.map +0 -1
- package/dist/core/create/from-array.mjs +0 -65
- package/dist/core/create/from-array.mjs.map +0 -1
- package/dist/core/create/interval.d.mts.map +0 -1
- package/dist/core/create/interval.mjs.map +0 -1
- package/dist/core/create/of.d.mts +0 -39
- package/dist/core/create/of.d.mts.map +0 -1
- package/dist/core/create/of.mjs +0 -63
- package/dist/core/create/of.mjs.map +0 -1
- package/dist/core/operators/audit-time.d.mts +0 -62
- package/dist/core/operators/audit-time.d.mts.map +0 -1
- package/dist/core/operators/audit-time.mjs +0 -109
- package/dist/core/operators/audit-time.mjs.map +0 -1
- package/dist/core/operators/debounce-time.d.mts +0 -51
- package/dist/core/operators/debounce-time.d.mts.map +0 -1
- package/dist/core/operators/debounce-time.mjs +0 -93
- package/dist/core/operators/debounce-time.mjs.map +0 -1
- package/dist/core/operators/map-with-index.d.mts.map +0 -1
- package/dist/core/operators/map-with-index.mjs.map +0 -1
- package/dist/core/operators/throttle-time.d.mts +0 -62
- package/dist/core/operators/throttle-time.d.mts.map +0 -1
- package/dist/core/operators/throttle-time.mjs +0 -107
- package/dist/core/operators/throttle-time.mjs.map +0 -1
- package/dist/core/predefined/operators/map.d.mts +0 -3
- package/dist/core/predefined/operators/map.d.mts.map +0 -1
- package/dist/core/predefined/operators/map.mjs +0 -8
- package/dist/core/predefined/operators/map.mjs.map +0 -1
- package/dist/globals.d.mts +0 -4
- package/src/core/create/from-array.mts +0 -76
- package/src/core/create/of.mts +0 -73
- package/src/core/operators/audit-time.mts +0 -136
- package/src/core/operators/debounce-time.mts +0 -116
- package/src/core/predefined/operators/map.mts +0 -5
- package/src/globals.d.mts +0 -4
- /package/assets/{synstate-icon.png → old/synstate-icon.png} +0 -0
|
@@ -1,136 +0,0 @@
|
|
|
1
|
-
import { Optional } from 'ts-data-forge';
|
|
2
|
-
import { AsyncChildObservableClass } from '../class/index.mjs';
|
|
3
|
-
import {
|
|
4
|
-
type AuditTimeOperatorObservable,
|
|
5
|
-
type KeepInitialValueOperator,
|
|
6
|
-
type Observable,
|
|
7
|
-
type UpdaterSymbol,
|
|
8
|
-
} from '../types/index.mjs';
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Emits the last value from the source observable after a specified time window has passed.
|
|
12
|
-
* Unlike throttleTime which emits the first value, auditTime emits the last value.
|
|
13
|
-
*
|
|
14
|
-
* @template A - The type of values from the source
|
|
15
|
-
* @param milliSeconds - The audit time window in milliseconds
|
|
16
|
-
* @returns An operator that audits emissions from the observable
|
|
17
|
-
*
|
|
18
|
-
* @example
|
|
19
|
-
* ```ts
|
|
20
|
-
* // Timeline (1000ms audit):
|
|
21
|
-
* //
|
|
22
|
-
* // Time(ms) 0 100 200 300 400 ... 1000 1100
|
|
23
|
-
* // input$ e1 e2 e3 e4 e5
|
|
24
|
-
* // audited$ e5 (emitted at end of window)
|
|
25
|
-
* // |-------1000ms window------> ^
|
|
26
|
-
* //
|
|
27
|
-
* // Explanation:
|
|
28
|
-
* // - auditTime emits the LAST value received during each time window
|
|
29
|
-
* // - Unlike throttleTime (which emits the FIRST value), audit emits the LAST
|
|
30
|
-
* // - At 0-1000ms: e1-e5 are received
|
|
31
|
-
* // - At 1000ms: e5 (the last value in the window) is emitted
|
|
32
|
-
* // - Useful when you want the most recent value after a burst of events
|
|
33
|
-
*
|
|
34
|
-
* const input$ = source<number>();
|
|
35
|
-
*
|
|
36
|
-
* const audited$ = input$.pipe(auditTime(200));
|
|
37
|
-
*
|
|
38
|
-
* const mut_history: number[] = [];
|
|
39
|
-
*
|
|
40
|
-
* audited$.subscribe((value) => {
|
|
41
|
-
* mut_history.push(value);
|
|
42
|
-
* });
|
|
43
|
-
*
|
|
44
|
-
* input$.next(1);
|
|
45
|
-
*
|
|
46
|
-
* input$.next(2);
|
|
47
|
-
*
|
|
48
|
-
* input$.next(3);
|
|
49
|
-
*
|
|
50
|
-
* assert.deepStrictEqual(mut_history, []);
|
|
51
|
-
*
|
|
52
|
-
* await new Promise((resolve) => {
|
|
53
|
-
* setTimeout(resolve, 250);
|
|
54
|
-
* });
|
|
55
|
-
*
|
|
56
|
-
* assert.deepStrictEqual(mut_history, [3]);
|
|
57
|
-
*
|
|
58
|
-
* input$.next(4);
|
|
59
|
-
*
|
|
60
|
-
* input$.next(5);
|
|
61
|
-
*
|
|
62
|
-
* await new Promise((resolve) => {
|
|
63
|
-
* setTimeout(resolve, 250);
|
|
64
|
-
* });
|
|
65
|
-
*
|
|
66
|
-
* assert.deepStrictEqual(mut_history, [3, 5]);
|
|
67
|
-
* ```
|
|
68
|
-
*/
|
|
69
|
-
export const auditTime = <A,>(
|
|
70
|
-
milliSeconds: number,
|
|
71
|
-
): KeepInitialValueOperator<A, A> =>
|
|
72
|
-
// eslint-disable-next-line total-functions/no-unsafe-type-assertion
|
|
73
|
-
((parentObservable) =>
|
|
74
|
-
new AuditTimeObservableClass(
|
|
75
|
-
parentObservable,
|
|
76
|
-
milliSeconds,
|
|
77
|
-
)) as KeepInitialValueOperator<A, A>;
|
|
78
|
-
|
|
79
|
-
class AuditTimeObservableClass<A>
|
|
80
|
-
extends AsyncChildObservableClass<A, readonly [A]>
|
|
81
|
-
implements AuditTimeOperatorObservable<A>
|
|
82
|
-
{
|
|
83
|
-
readonly #milliSeconds: number;
|
|
84
|
-
#mut_timerId: TimerId | undefined;
|
|
85
|
-
#mut_isSkipping: boolean;
|
|
86
|
-
|
|
87
|
-
constructor(parentObservable: Observable<A>, milliSeconds: number) {
|
|
88
|
-
super({
|
|
89
|
-
parents: [parentObservable],
|
|
90
|
-
initialValue: parentObservable.getSnapshot(),
|
|
91
|
-
});
|
|
92
|
-
|
|
93
|
-
this.#mut_isSkipping = false;
|
|
94
|
-
|
|
95
|
-
this.#mut_timerId = undefined;
|
|
96
|
-
|
|
97
|
-
this.#milliSeconds = milliSeconds;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
override tryUpdate(updaterSymbol: UpdaterSymbol): void {
|
|
101
|
-
const par = this.parents[0];
|
|
102
|
-
|
|
103
|
-
if (
|
|
104
|
-
par.updaterSymbol !== updaterSymbol ||
|
|
105
|
-
Optional.isNone(par.getSnapshot()) ||
|
|
106
|
-
this.#mut_isSkipping
|
|
107
|
-
) {
|
|
108
|
-
return; // skip update
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
// set timer
|
|
112
|
-
this.#mut_isSkipping = true;
|
|
113
|
-
|
|
114
|
-
this.#mut_timerId = setTimeout(() => {
|
|
115
|
-
const sn = par.getSnapshot();
|
|
116
|
-
|
|
117
|
-
if (Optional.isNone(sn)) return;
|
|
118
|
-
|
|
119
|
-
this.startUpdate(sn.value);
|
|
120
|
-
|
|
121
|
-
this.#mut_isSkipping = false;
|
|
122
|
-
}, this.#milliSeconds);
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
#resetTimer(): void {
|
|
126
|
-
if (this.#mut_timerId !== undefined) {
|
|
127
|
-
clearTimeout(this.#mut_timerId);
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
override complete(): void {
|
|
132
|
-
this.#resetTimer();
|
|
133
|
-
|
|
134
|
-
super.complete();
|
|
135
|
-
}
|
|
136
|
-
}
|
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
import { Optional } from 'ts-data-forge';
|
|
2
|
-
import { AsyncChildObservableClass } from '../class/index.mjs';
|
|
3
|
-
import {
|
|
4
|
-
type DebounceTimeOperatorObservable,
|
|
5
|
-
type KeepInitialValueOperator,
|
|
6
|
-
type Observable,
|
|
7
|
-
type UpdaterSymbol,
|
|
8
|
-
} from '../types/index.mjs';
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Delays emissions from the source observable until a specified time has passed without another emission.
|
|
12
|
-
* Useful for handling user input events like typing or scrolling.
|
|
13
|
-
*
|
|
14
|
-
* @template A - The type of values from the source
|
|
15
|
-
* @param milliSeconds - The debounce duration in milliseconds
|
|
16
|
-
* @returns An operator that debounces the observable
|
|
17
|
-
*
|
|
18
|
-
* @example
|
|
19
|
-
* ```ts
|
|
20
|
-
* // Timeline (300ms debounce):
|
|
21
|
-
* //
|
|
22
|
-
* // Time(ms) 0 100 200 300 400 500 600 ... 900 1000
|
|
23
|
-
* // input$ 'h' 'he' 'hel' 'hello'
|
|
24
|
-
* // debounced$ 'hello' (emitted after 300ms silence)
|
|
25
|
-
* //
|
|
26
|
-
* // Explanation:
|
|
27
|
-
* // - At 0ms: 'h' is emitted, timer starts
|
|
28
|
-
* // - At 100ms: 'he' is emitted, timer resets
|
|
29
|
-
* // - At 200ms: 'hel' is emitted, timer resets
|
|
30
|
-
* // - At 300ms: 'hello' is emitted, timer resets
|
|
31
|
-
* // - At 600ms: No new emission for 300ms, 'hello' is finally emitted
|
|
32
|
-
*
|
|
33
|
-
* const input$ = source<string>();
|
|
34
|
-
*
|
|
35
|
-
* const debounced$ = input$.pipe(debounceTime(300));
|
|
36
|
-
*
|
|
37
|
-
* const mut_history: string[] = [];
|
|
38
|
-
*
|
|
39
|
-
* debounced$.subscribe((value) => {
|
|
40
|
-
* mut_history.push(value);
|
|
41
|
-
* });
|
|
42
|
-
*
|
|
43
|
-
* input$.next('h');
|
|
44
|
-
*
|
|
45
|
-
* input$.next('he');
|
|
46
|
-
*
|
|
47
|
-
* input$.next('hel');
|
|
48
|
-
*
|
|
49
|
-
* input$.next('hello');
|
|
50
|
-
*
|
|
51
|
-
* await new Promise((resolve) => {
|
|
52
|
-
* setTimeout(resolve, 400);
|
|
53
|
-
* });
|
|
54
|
-
*
|
|
55
|
-
* assert.deepStrictEqual(mut_history, ['hello']);
|
|
56
|
-
* ```
|
|
57
|
-
*/
|
|
58
|
-
export const debounceTime = <A,>(
|
|
59
|
-
milliSeconds: number,
|
|
60
|
-
): KeepInitialValueOperator<A, A> =>
|
|
61
|
-
// eslint-disable-next-line total-functions/no-unsafe-type-assertion
|
|
62
|
-
((parentObservable) =>
|
|
63
|
-
new DebounceTimeObservableClass(
|
|
64
|
-
parentObservable,
|
|
65
|
-
milliSeconds,
|
|
66
|
-
)) as KeepInitialValueOperator<A, A>;
|
|
67
|
-
|
|
68
|
-
class DebounceTimeObservableClass<A>
|
|
69
|
-
extends AsyncChildObservableClass<A, readonly [A]>
|
|
70
|
-
implements DebounceTimeOperatorObservable<A>
|
|
71
|
-
{
|
|
72
|
-
readonly #milliSeconds: number;
|
|
73
|
-
#mut_timerId: TimerId | undefined;
|
|
74
|
-
|
|
75
|
-
constructor(parentObservable: Observable<A>, milliSeconds: number) {
|
|
76
|
-
super({
|
|
77
|
-
parents: [parentObservable],
|
|
78
|
-
initialValue: parentObservable.getSnapshot(),
|
|
79
|
-
});
|
|
80
|
-
|
|
81
|
-
this.#mut_timerId = undefined;
|
|
82
|
-
|
|
83
|
-
this.#milliSeconds = milliSeconds;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
override tryUpdate(updaterSymbol: UpdaterSymbol): void {
|
|
87
|
-
const par = this.parents[0];
|
|
88
|
-
|
|
89
|
-
const sn = par.getSnapshot();
|
|
90
|
-
|
|
91
|
-
if (par.updaterSymbol !== updaterSymbol || Optional.isNone(sn)) {
|
|
92
|
-
return; // skip update
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
this.#resetTimer();
|
|
96
|
-
|
|
97
|
-
// set timer
|
|
98
|
-
this.#mut_timerId = setTimeout(() => {
|
|
99
|
-
if (Optional.isNone(sn)) return;
|
|
100
|
-
|
|
101
|
-
this.startUpdate(sn.value);
|
|
102
|
-
}, this.#milliSeconds);
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
#resetTimer(): void {
|
|
106
|
-
if (this.#mut_timerId !== undefined) {
|
|
107
|
-
clearTimeout(this.#mut_timerId);
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
override complete(): void {
|
|
112
|
-
this.#resetTimer();
|
|
113
|
-
|
|
114
|
-
super.complete();
|
|
115
|
-
}
|
|
116
|
-
}
|
package/src/globals.d.mts
DELETED
|
File without changes
|