@juulsgaard/signal-tools 22.0.1 → 22.0.3
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/index.d.ts +11 -3
- package/dist/index.mjs +2 -1
- package/dist/operators.mjs +2 -7
- package/dist/proxy-signal.mjs +26 -0
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as _angular_core from '@angular/core';
|
|
2
|
-
import { Signal, Injector, WritableSignal } from '@angular/core';
|
|
2
|
+
import { Signal, Injector, WritableSignal, ValueEqualityFn } from '@angular/core';
|
|
3
3
|
import * as rxjs from 'rxjs';
|
|
4
4
|
import { Subscribable, Observable, Observer, Unsubscribable, BehaviorSubject, Subject } from 'rxjs';
|
|
5
5
|
import { IValueLoadingState } from '@juulsgaard/rxjs-tools';
|
|
@@ -823,13 +823,21 @@ declare function toLoadingSignal<T>(promise: Promise<T>, options?: LoadingSignal
|
|
|
823
823
|
* @param firstValue - The value to seed as the initial value in the new signal state
|
|
824
824
|
*/
|
|
825
825
|
declare function pairwiseSignal<T>(inputSignal: Signal<T>, firstValue: T): Signal<[prev: T, next: T]>;
|
|
826
|
+
|
|
827
|
+
interface ProxySignalOptions<TOut> {
|
|
828
|
+
equal?: ValueEqualityFn<TOut>;
|
|
829
|
+
}
|
|
830
|
+
type ProxySignal<T> = WritableSignal<T> & {
|
|
831
|
+
readonly error: Signal<Error | undefined>;
|
|
832
|
+
};
|
|
826
833
|
/**
|
|
827
834
|
* Create a writable signal that proxies another signal via a custom setter
|
|
828
835
|
* @param signal - The signal to proxy
|
|
829
836
|
* @param getter - The getter for the proxy
|
|
830
837
|
* @param setter - The setter for the proxy
|
|
838
|
+
* @param options - Options to change behaviour of the proxy
|
|
831
839
|
*/
|
|
832
|
-
declare function proxySignal<T, TOut>(signal: WritableSignal<T>, getter: (value: T) => TOut, setter: (value: TOut) => T):
|
|
840
|
+
declare function proxySignal<T, TOut>(signal: WritableSignal<T>, getter: (value: T) => TOut, setter: (value: TOut, setError?: (e: Error | string | undefined) => void) => T, options?: NoInfer<ProxySignalOptions<TOut>>): ProxySignal<TOut>;
|
|
833
841
|
|
|
834
842
|
export { AsyncRequestState, EmptyRequestState, ErrorRequestState, IRequestState, IValueRequestState, LoadingRequestState, RequestTracker, SignalMap, SignalQueue, SignalSet, SignalStack, StaticRequestState, ValueRequestTracker, WritableRequestState, debouncedSignal, debouncedThrottledSignal, loadingSignal, pairwiseSignal, proxySignal, requestState, requestTracker, searchSignal, signalMap, signalQueue, signalSet, signalStack, subjectToSignal, throttledSignal, toLoadingSignal };
|
|
835
|
-
export type { CreateLoadingSignalOptions, LoadingSignal, LoadingSignalOptions, ReadonlySignalMap, ReadonlySignalSet, SignalQueueDelta, SignalQueueOptions, SignalStackDelta };
|
|
843
|
+
export type { CreateLoadingSignalOptions, LoadingSignal, LoadingSignalOptions, ProxySignal, ReadonlySignalMap, ReadonlySignalSet, SignalQueueDelta, SignalQueueOptions, SignalStackDelta };
|
package/dist/index.mjs
CHANGED
|
@@ -14,4 +14,5 @@ export { RequestTracker, ValueRequestTracker, requestTracker } from './request-s
|
|
|
14
14
|
export { debouncedSignal, debouncedThrottledSignal, searchSignal, throttledSignal } from './async.mjs';
|
|
15
15
|
export { subjectToSignal } from './interop.mjs';
|
|
16
16
|
export { loadingSignal, toLoadingSignal } from './loading-signal.mjs';
|
|
17
|
-
export { pairwiseSignal
|
|
17
|
+
export { pairwiseSignal } from './operators.mjs';
|
|
18
|
+
export { proxySignal } from './proxy-signal.mjs';
|
package/dist/operators.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { computed
|
|
1
|
+
import { computed } from '@angular/core';
|
|
2
2
|
|
|
3
3
|
function pairwiseSignal(inputSignal, firstValue) {
|
|
4
4
|
let prevValue = firstValue;
|
|
@@ -9,10 +9,5 @@ function pairwiseSignal(inputSignal, firstValue) {
|
|
|
9
9
|
return tuple;
|
|
10
10
|
});
|
|
11
11
|
}
|
|
12
|
-
function proxySignal(signal, getter, setter) {
|
|
13
|
-
const output = linkedSignal(() => getter(signal()));
|
|
14
|
-
output.set = (value) => signal.set(setter(value));
|
|
15
|
-
return output;
|
|
16
|
-
}
|
|
17
12
|
|
|
18
|
-
export { pairwiseSignal
|
|
13
|
+
export { pairwiseSignal };
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { linkedSignal } from '@angular/core';
|
|
2
|
+
import { parseError } from '@juulsgaard/ts-tools';
|
|
3
|
+
|
|
4
|
+
function proxySignal(signal, getter, setter, options) {
|
|
5
|
+
const error = linkedSignal({
|
|
6
|
+
source: signal,
|
|
7
|
+
computation: () => void 0
|
|
8
|
+
});
|
|
9
|
+
const output = linkedSignal(() => getter(signal()), {
|
|
10
|
+
equal: options?.equal,
|
|
11
|
+
set: (value, rawSet) => {
|
|
12
|
+
let parserError;
|
|
13
|
+
const setError = (e) => {
|
|
14
|
+
parserError = e == null ? void 0 : parseError(e);
|
|
15
|
+
};
|
|
16
|
+
const mapped = setter(value, setError);
|
|
17
|
+
signal.set(mapped);
|
|
18
|
+
error.set(parserError);
|
|
19
|
+
rawSet(value);
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
output.error = error.asReadonly();
|
|
23
|
+
return output;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export { proxySignal };
|
package/package.json
CHANGED