@signaltree/core 2.0.5 → 3.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/index.d.ts CHANGED
@@ -1,5 +1,12 @@
1
1
  import { WritableSignal, Signal } from '@angular/core';
2
2
 
3
+ type NotFn<T> = T extends (...args: unknown[]) => unknown ? never : T;
4
+ declare module '@angular/core' {
5
+ interface WritableSignal<T> {
6
+ (value: NotFn<T>): void;
7
+ (updater: (current: T) => T): void;
8
+ }
9
+ }
3
10
  type Primitive = string | number | boolean | null | undefined | bigint | symbol;
4
11
  type BuiltInObject = Date | RegExp | ((...args: unknown[]) => unknown) | Map<unknown, unknown> | Set<unknown> | WeakMap<object, unknown> | WeakSet<object> | ArrayBuffer | DataView | Error | Promise<unknown> | Uint16Array | Int32Array | Uint32Array | Float32Array | Float64Array | BigInt64Array | BigUint64Array | URL | URLSearchParams | FormData | Blob | File | Headers | Request | Response | AbortController | AbortSignal;
5
12
  interface NodeAccessor<T> {
@@ -7,9 +14,13 @@ interface NodeAccessor<T> {
7
14
  (value: T): void;
8
15
  (updater: (current: T) => T): void;
9
16
  }
10
- type SignalifiedNode<T> = NodeAccessor<T> & TreeNode<T>;
17
+ type AccessibleNode<T> = NodeAccessor<T> & TreeNode<T>;
18
+ type CallableWritableSignal<T> = WritableSignal<T> & {
19
+ (value: NotFn<T>): void;
20
+ (updater: (current: T) => T): void;
21
+ };
11
22
  type TreeNode<T> = {
12
- [K in keyof T]: T[K] extends readonly unknown[] ? WritableSignal<T[K]> : T[K] extends object ? T[K] extends Signal<unknown> ? T[K] : T[K] extends BuiltInObject ? WritableSignal<T[K]> : T[K] extends (...args: unknown[]) => unknown ? WritableSignal<T[K]> : SignalifiedNode<T[K]> : WritableSignal<T[K]>;
23
+ [K in keyof T]: T[K] extends readonly unknown[] ? CallableWritableSignal<T[K]> : T[K] extends object ? T[K] extends Signal<unknown> ? T[K] : T[K] extends BuiltInObject ? CallableWritableSignal<T[K]> : T[K] extends (...args: unknown[]) => unknown ? CallableWritableSignal<T[K]> : AccessibleNode<T[K]> : CallableWritableSignal<T[K]>;
13
24
  };
14
25
  type RemoveSignalMethods<T> = T extends infer U ? U : never;
15
26
  interface EnhancerMeta {
@@ -53,6 +64,15 @@ type SignalTree<T> = NodeAccessor<T> & {
53
64
  batch(updater: (tree: T) => void): void;
54
65
  batchUpdate(updater: (current: T) => Partial<T>): void;
55
66
  memoize<R>(fn: (tree: T) => R, cacheKey?: string): Signal<R>;
67
+ memoizedUpdate(updater: (current: T) => Partial<T>, cacheKey?: string): void;
68
+ clearMemoCache(key?: string): void;
69
+ getCacheStats(): {
70
+ size: number;
71
+ hitRate: number;
72
+ totalHits: number;
73
+ totalMisses: number;
74
+ keys: string[];
75
+ };
56
76
  optimize(): void;
57
77
  clearCache(): void;
58
78
  invalidatePattern(pattern: string): number;
@@ -67,6 +87,10 @@ type SignalTree<T> = NodeAccessor<T> & {
67
87
  redo(): void;
68
88
  getHistory(): TimeTravelEntry<T>[];
69
89
  resetHistory(): void;
90
+ jumpTo?: (index: number) => void;
91
+ canUndo?: () => boolean;
92
+ canRedo?: () => boolean;
93
+ getCurrentIndex?: () => number;
70
94
  [key: string]: unknown;
71
95
  };
72
96
  type TreePreset = 'basic' | 'performance' | 'development' | 'production';
@@ -142,10 +166,6 @@ declare function isAnySignal(value: unknown): boolean;
142
166
  declare function parsePath(path: string): string[];
143
167
  declare function composeEnhancers<T>(...enhancers: Array<(tree: T) => T>): (tree: T) => T;
144
168
  declare function createLazySignalTree<T extends object>(obj: T, equalityFn: (a: unknown, b: unknown) => boolean, basePath?: string): TreeNode<T>;
145
- declare function unwrap<T>(node: TreeNode<T>): T;
146
- declare function unwrap<T>(node: NodeAccessor<T> & TreeNode<T>): T;
147
- declare function unwrap<T>(node: NodeAccessor<T>): T;
148
- declare function unwrap<T>(node: unknown): T;
149
169
 
150
170
  declare function createEnhancer<I = unknown, O = unknown>(meta: EnhancerMeta, enhancerFn: (input: I) => O): EnhancerWithMeta<I, O>;
151
171
  declare function resolveEnhancerOrder(enhancers: EnhancerWithMeta<unknown, unknown>[], availableCapabilities?: Set<string>, debugMode?: boolean): EnhancerWithMeta<unknown, unknown>[];
@@ -192,5 +212,5 @@ declare const SIGNAL_TREE_MESSAGES: Readonly<{
192
212
  readonly SUBSCRIBE_NO_CONTEXT: "no angular context";
193
213
  }>;
194
214
 
195
- export { ENHANCER_META, SIGNAL_TREE_CONSTANTS, SIGNAL_TREE_MESSAGES, composeEnhancers, createEnhancer, createLazySignalTree, deepEqual, equal, isAnySignal, isBuiltInObject, isNodeAccessor, parsePath, resolveEnhancerOrder, signalTree, unwrap };
196
- export type { AsyncAction, AsyncActionConfig, BuiltInObject, ChainResult, Enhancer, EnhancerMeta, EnhancerWithMeta, EntityHelpers, Middleware, PerformanceMetrics, Primitive, RemoveSignalMethods, SignalTree, TimeTravelEntry, TreeConfig, TreeNode, TreePreset, WithMethod };
215
+ export { ENHANCER_META, SIGNAL_TREE_CONSTANTS, SIGNAL_TREE_MESSAGES, composeEnhancers, createEnhancer, createLazySignalTree, deepEqual, equal, isAnySignal, isBuiltInObject, isNodeAccessor, parsePath, resolveEnhancerOrder, signalTree };
216
+ export type { AsyncAction, AsyncActionConfig, BuiltInObject, ChainResult, Enhancer, EnhancerMeta, EnhancerWithMeta, EntityHelpers, Middleware, NotFn, PerformanceMetrics, Primitive, RemoveSignalMethods, SignalTree, TimeTravelEntry, TreeConfig, TreeNode, TreePreset, WithMethod };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@signaltree/core",
3
- "version": "2.0.5",
3
+ "version": "3.0.1",
4
4
  "description": "Lightweight, type-safe signal-based state management for Angular. Core package providing hierarchical signal trees, basic entity management, and async actions.",
5
5
  "peerDependencies": {
6
6
  "@angular/core": "^20.1.0"