@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.
@@ -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 {};
@@ -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;