@signaltree/core 7.1.6 → 7.6.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 +392 -0
- package/dist/enhancers/devtools/devtools.js +446 -17
- package/dist/index.js +2 -1
- package/dist/lib/entity-signal.js +4 -5
- package/dist/lib/markers/entity-map.js +25 -4
- package/dist/lib/markers/form.js +310 -0
- package/dist/lib/markers/stored.js +112 -10
- package/dist/lib/signal-tree.js +1 -3
- package/dist/lib/utils.js +36 -1
- package/package.json +1 -1
- package/src/index.d.ts +2 -1
- package/src/lib/markers/entity-map.d.ts +17 -2
- package/src/lib/markers/form.d.ts +86 -0
- package/src/lib/markers/index.d.ts +2 -1
- package/src/lib/markers/stored.d.ts +12 -0
- package/src/lib/types.d.ts +12 -1
|
@@ -1,10 +1,19 @@
|
|
|
1
1
|
export declare const STORED_MARKER: unique symbol;
|
|
2
|
+
export type MigrationFn<T> = (oldData: unknown, oldVersion: number) => T;
|
|
2
3
|
export interface StoredOptions<T> {
|
|
3
4
|
serialize?: (value: T) => string;
|
|
4
5
|
deserialize?: (stored: string) => T;
|
|
5
6
|
storage?: Storage | null;
|
|
6
7
|
debounceMs?: number;
|
|
8
|
+
version?: number;
|
|
9
|
+
migrate?: MigrationFn<T>;
|
|
10
|
+
clearOnMigrationFailure?: boolean;
|
|
7
11
|
}
|
|
12
|
+
type StorageKeyMap<T, Prefix extends string> = {
|
|
13
|
+
[K in keyof T]: T[K] extends string ? `${Prefix}:${T[K] & string}` : T[K] extends object ? StorageKeyMap<T[K], `${Prefix}:${K & string}`> : never;
|
|
14
|
+
};
|
|
15
|
+
export declare function createStorageKeys<T extends object, P extends string>(prefix: P, keys: T): StorageKeyMap<T, P>;
|
|
16
|
+
export declare function clearStoragePrefix(prefix: string, storage?: Storage): void;
|
|
8
17
|
export interface StoredMarker<T> {
|
|
9
18
|
[STORED_MARKER]: true;
|
|
10
19
|
key: string;
|
|
@@ -17,7 +26,10 @@ export interface StoredSignal<T> {
|
|
|
17
26
|
update(fn: (current: T) => T): void;
|
|
18
27
|
clear(): void;
|
|
19
28
|
reload(): void;
|
|
29
|
+
readonly key: string;
|
|
30
|
+
readonly version: number;
|
|
20
31
|
}
|
|
21
32
|
export declare function stored<T>(key: string, defaultValue: T, options?: StoredOptions<T>): StoredMarker<T>;
|
|
22
33
|
export declare function isStoredMarker(value: unknown): value is StoredMarker<unknown>;
|
|
23
34
|
export declare function createStoredSignal<T>(marker: StoredMarker<T>): StoredSignal<T>;
|
|
35
|
+
export {};
|
package/src/lib/types.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Signal, WritableSignal } from '@angular/core';
|
|
2
|
+
import { FormMarker, FormSignal } from './markers/form';
|
|
2
3
|
import { StatusMarker, StatusSignal } from './markers/status';
|
|
3
4
|
import { StoredMarker, StoredSignal } from './markers/stored';
|
|
4
5
|
import { SecurityValidatorConfig } from './security/security-validator';
|
|
@@ -34,7 +35,7 @@ export interface NodeAccessor<T> {
|
|
|
34
35
|
(updater: (current: T) => T): void;
|
|
35
36
|
}
|
|
36
37
|
export type TreeNode<T> = {
|
|
37
|
-
[K in keyof T]: T[K] extends EntityMapMarker<infer E, infer Key> ? EntitySignal<E, Key> : T[K] extends StatusMarker<infer Err> ? StatusSignal<Err> : T[K] extends StoredMarker<infer V> ? StoredSignal<V> : T[K] extends Primitive ? CallableWritableSignal<T[K]> : T[K] extends readonly unknown[] ? CallableWritableSignal<T[K]> : T[K] extends Date | RegExp | Map<any, any> | Set<any> | Error | ((...args: unknown[]) => unknown) ? CallableWritableSignal<T[K]> : T[K] extends object ? NodeAccessor<T[K]> & TreeNode<T[K]> : CallableWritableSignal<T[K]>;
|
|
38
|
+
[K in keyof T]: T[K] extends EntityMapMarker<infer E, infer Key> ? EntitySignal<E, Key> : T[K] extends StatusMarker<infer Err> ? StatusSignal<Err> : T[K] extends StoredMarker<infer V> ? StoredSignal<V> : T[K] extends FormMarker<infer F> ? FormSignal<F> : T[K] extends Primitive ? CallableWritableSignal<T[K]> : T[K] extends readonly unknown[] ? CallableWritableSignal<T[K]> : T[K] extends Date | RegExp | Map<any, any> | Set<any> | Error | ((...args: unknown[]) => unknown) ? CallableWritableSignal<T[K]> : T[K] extends object ? NodeAccessor<T[K]> & TreeNode<T[K]> : CallableWritableSignal<T[K]>;
|
|
38
39
|
};
|
|
39
40
|
export interface ISignalTree<T> extends NodeAccessor<T> {
|
|
40
41
|
readonly state: TreeNode<T>;
|
|
@@ -245,11 +246,21 @@ export interface DevToolsConfig {
|
|
|
245
246
|
enableBrowserDevTools?: boolean;
|
|
246
247
|
enableLogging?: boolean;
|
|
247
248
|
performanceThreshold?: number;
|
|
249
|
+
enableTimeTravel?: boolean;
|
|
248
250
|
name?: string;
|
|
249
251
|
treeName?: string;
|
|
250
252
|
enabled?: boolean;
|
|
251
253
|
logActions?: boolean;
|
|
252
254
|
maxAge?: number;
|
|
255
|
+
rateLimitMs?: number;
|
|
256
|
+
maxSendsPerSecond?: number;
|
|
257
|
+
includePaths?: string[];
|
|
258
|
+
excludePaths?: string[];
|
|
259
|
+
formatPath?: (path: string) => string;
|
|
260
|
+
maxDepth?: number;
|
|
261
|
+
maxArrayLength?: number;
|
|
262
|
+
maxStringLength?: number;
|
|
263
|
+
serialize?: (state: unknown) => unknown;
|
|
253
264
|
features?: {
|
|
254
265
|
jump?: boolean;
|
|
255
266
|
skip?: boolean;
|