@signaltree/core 5.1.6 → 6.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 +76 -76
- package/dist/enhancers/batching/{lib/batching.js → batching.js} +45 -17
- package/dist/enhancers/devtools/{lib/devtools.js → devtools.js} +83 -98
- package/dist/enhancers/effects/effects.js +66 -0
- package/dist/enhancers/entities/entities.js +51 -0
- package/dist/enhancers/memoization/{lib/memoization.js → memoization.js} +33 -23
- package/dist/enhancers/presets/lib/presets.js +5 -65
- package/dist/enhancers/serialization/{lib/serialization.js → serialization.js} +12 -18
- package/dist/enhancers/time-travel/{lib/time-travel.js → time-travel.js} +62 -24
- package/dist/enhancers/time-travel/utils.js +11 -0
- package/dist/index.js +8 -8
- package/dist/lib/async-helpers.js +6 -6
- package/dist/lib/presets.js +21 -0
- package/dist/lib/signal-tree.js +156 -496
- package/dist/lib/types.js +1 -1
- package/dist/lib/utils.js +40 -2
- package/package.json +1 -6
- package/src/enhancers/batching/batching.d.ts +11 -0
- package/src/enhancers/batching/index.d.ts +1 -1
- package/src/enhancers/devtools/{lib/devtools.d.ts → devtools.d.ts} +10 -19
- package/src/enhancers/devtools/devtools.types.d.ts +1 -0
- package/src/enhancers/devtools/index.d.ts +1 -1
- package/src/enhancers/effects/effects.d.ts +9 -0
- package/src/enhancers/effects/effects.types.d.ts +1 -0
- package/src/enhancers/effects/index.d.ts +1 -0
- package/src/enhancers/entities/entities.d.ts +11 -0
- package/src/enhancers/entities/entities.types.d.ts +1 -0
- package/src/enhancers/entities/index.d.ts +1 -1
- package/src/enhancers/index.d.ts +3 -3
- package/src/enhancers/memoization/index.d.ts +1 -1
- package/src/enhancers/memoization/memoization.d.ts +54 -0
- package/src/enhancers/memoization/memoization.types.d.ts +1 -0
- package/src/enhancers/presets/lib/presets.d.ts +3 -6
- package/src/enhancers/serialization/index.d.ts +1 -1
- package/src/{serialization.d.ts → enhancers/serialization/serialization.d.ts} +17 -8
- package/src/enhancers/test-helpers/types-equals.d.ts +2 -0
- package/src/enhancers/time-travel/index.d.ts +1 -1
- package/src/enhancers/time-travel/time-travel.d.ts +10 -0
- package/src/enhancers/time-travel/time-travel.types.d.ts +1 -0
- package/src/enhancers/time-travel/utils.d.ts +2 -0
- package/src/enhancers/types.d.ts +1 -74
- package/src/enhancers/typing/helpers-types.d.ts +2 -0
- package/src/index.d.ts +7 -8
- package/src/lib/async-helpers.d.ts +2 -2
- package/src/lib/dev-proxy.d.ts +3 -0
- package/src/lib/presets.d.ts +34 -0
- package/src/lib/signal-tree.d.ts +2 -7
- package/src/lib/types.d.ts +121 -90
- package/src/lib/utils.d.ts +4 -0
- package/dist/deep-clone.js +0 -80
- package/dist/enhancers/computed/lib/computed.js +0 -21
- package/dist/enhancers/entities/lib/entities.js +0 -66
- package/dist/lib/performance/diff-engine.js +0 -156
- package/dist/lib/performance/path-index.js +0 -156
- package/dist/lib/performance/update-engine.js +0 -188
- package/src/async-helpers.d.ts +0 -8
- package/src/batching.d.ts +0 -16
- package/src/computed.d.ts +0 -12
- package/src/constants.d.ts +0 -14
- package/src/devtools.d.ts +0 -77
- package/src/diff-engine.d.ts +0 -33
- package/src/enhancers/batching/lib/batching.d.ts +0 -16
- package/src/enhancers/computed/index.d.ts +0 -1
- package/src/enhancers/computed/lib/computed.d.ts +0 -12
- package/src/enhancers/entities/lib/entities.d.ts +0 -17
- package/src/enhancers/memoization/lib/memoization.d.ts +0 -65
- package/src/enhancers/presets/test-setup.d.ts +0 -3
- package/src/enhancers/serialization/lib/serialization.d.ts +0 -59
- package/src/enhancers/time-travel/lib/time-travel.d.ts +0 -36
- package/src/enhancers/time-travel/lib/utils.d.ts +0 -1
- package/src/entities.d.ts +0 -28
- package/src/memoization.d.ts +0 -65
- package/src/memory-manager.d.ts +0 -30
- package/src/path-index.d.ts +0 -25
- package/src/path-notifier.d.ts +0 -12
- package/src/presets.d.ts +0 -11
- package/src/security-validator.d.ts +0 -33
- package/src/signal-tree.d.ts +0 -8
- package/src/test-setup.d.ts +0 -3
- package/src/time-travel.d.ts +0 -36
- package/src/types.d.ts +0 -436
- package/src/update-engine.d.ts +0 -32
- package/src/utils.d.ts +0 -1
- /package/src/{entity-signal.d.ts → enhancers/batching/batching.types.d.ts} +0 -0
package/dist/lib/types.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
const ENHANCER_META = Symbol('signaltree:enhancer:meta');
|
|
2
1
|
function entityMap(config) {
|
|
3
2
|
return {
|
|
4
3
|
__isEntityMap: true,
|
|
5
4
|
__entityMapConfig: config ?? {}
|
|
6
5
|
};
|
|
7
6
|
}
|
|
7
|
+
const ENHANCER_META = Symbol('signaltree:enhancer:meta');
|
|
8
8
|
|
|
9
9
|
export { ENHANCER_META, entityMap };
|
package/dist/lib/utils.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { isSignal, signal, runInInjectionContext, effect } from '@angular/core';
|
|
2
2
|
import { isBuiltInObject } from '../is-built-in-object.js';
|
|
3
3
|
|
|
4
|
-
const CALLABLE_SIGNAL_SYMBOL = Symbol.for('NodeAccessor');
|
|
4
|
+
const CALLABLE_SIGNAL_SYMBOL = Symbol.for('SignalTree:NodeAccessor');
|
|
5
5
|
function isEntityMapMarker(value) {
|
|
6
6
|
return Boolean(value && typeof value === 'object' && value.__isEntityMap === true);
|
|
7
7
|
}
|
|
@@ -257,5 +257,43 @@ function unwrap(node) {
|
|
|
257
257
|
}
|
|
258
258
|
return result;
|
|
259
259
|
}
|
|
260
|
+
function snapshotState(state) {
|
|
261
|
+
return unwrap(state);
|
|
262
|
+
}
|
|
263
|
+
function applyState(stateNode, snapshot) {
|
|
264
|
+
if (snapshot === null || snapshot === undefined) return;
|
|
265
|
+
if (typeof snapshot !== 'object') return;
|
|
266
|
+
for (const key of Object.keys(snapshot)) {
|
|
267
|
+
const val = snapshot[key];
|
|
268
|
+
const target = stateNode[key];
|
|
269
|
+
if (isNodeAccessor(target)) {
|
|
270
|
+
if (val && typeof val === 'object') {
|
|
271
|
+
try {
|
|
272
|
+
applyState(target, val);
|
|
273
|
+
} catch {
|
|
274
|
+
try {
|
|
275
|
+
target(val);
|
|
276
|
+
} catch {}
|
|
277
|
+
}
|
|
278
|
+
} else {
|
|
279
|
+
try {
|
|
280
|
+
target(val);
|
|
281
|
+
} catch {}
|
|
282
|
+
}
|
|
283
|
+
} else if (isSignal(target)) {
|
|
284
|
+
try {
|
|
285
|
+
target.set?.(val);
|
|
286
|
+
} catch {
|
|
287
|
+
try {
|
|
288
|
+
target(val);
|
|
289
|
+
} catch {}
|
|
290
|
+
}
|
|
291
|
+
} else {
|
|
292
|
+
try {
|
|
293
|
+
stateNode[key] = val;
|
|
294
|
+
} catch {}
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
}
|
|
260
298
|
|
|
261
|
-
export { composeEnhancers, createLazySignalTree, isAnySignal, isBuiltInObject, isNodeAccessor, toWritableSignal, unwrap };
|
|
299
|
+
export { applyState, composeEnhancers, createLazySignalTree, isAnySignal, isBuiltInObject, isEntityMapMarker, isNodeAccessor, snapshotState, toWritableSignal, unwrap };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@signaltree/core",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "6.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
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -23,11 +23,6 @@
|
|
|
23
23
|
"import": "./dist/enhancers/batching/index.js",
|
|
24
24
|
"default": "./dist/enhancers/batching/index.js"
|
|
25
25
|
},
|
|
26
|
-
"./enhancers/computed": {
|
|
27
|
-
"types": "./src/enhancers/computed/index.d.ts",
|
|
28
|
-
"import": "./dist/enhancers/computed/index.js",
|
|
29
|
-
"default": "./dist/enhancers/computed/index.js"
|
|
30
|
-
},
|
|
31
26
|
"./enhancers/middleware": {
|
|
32
27
|
"types": "./src/enhancers/middleware/index.d.ts",
|
|
33
28
|
"import": "./dist/enhancers/middleware/index.js",
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ISignalTree, Enhancer, BatchingConfig } from '../../lib/types';
|
|
2
|
+
export type BatchingMethods<T> = import('../../lib/types').BatchingMethods<T>;
|
|
3
|
+
export declare function batchingWithConfig<T>(config?: BatchingConfig): Enhancer<BatchingMethods<T>>;
|
|
4
|
+
export declare function batching(config?: BatchingConfig): <Tree extends ISignalTree<any>>(tree: Tree) => Tree & BatchingMethods<any>;
|
|
5
|
+
export declare function highPerformanceBatching<T>(): Enhancer<import("../../lib/types").BatchingMethods<T>>;
|
|
6
|
+
export declare function flushBatchedUpdates(): void;
|
|
7
|
+
export declare function hasPendingUpdates(): boolean;
|
|
8
|
+
export declare function getBatchQueueSize(): number;
|
|
9
|
+
export declare const withBatching: ((config?: BatchingConfig) => Enhancer<import("../../lib/types").BatchingMethods<unknown>>) & {
|
|
10
|
+
highPerformance: typeof highPerformanceBatching;
|
|
11
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from './
|
|
1
|
+
export * from './batching';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Signal } from '@angular/core';
|
|
2
|
-
import type {
|
|
2
|
+
import type { ISignalTree, DevToolsConfig, DevToolsMethods } from '../../lib/types';
|
|
3
3
|
export interface ModuleMetadata {
|
|
4
4
|
name: string;
|
|
5
5
|
methods: string[];
|
|
@@ -39,7 +39,7 @@ export interface CompositionLogger {
|
|
|
39
39
|
data: unknown;
|
|
40
40
|
}>;
|
|
41
41
|
}
|
|
42
|
-
export interface ModularDevToolsInterface
|
|
42
|
+
export interface ModularDevToolsInterface {
|
|
43
43
|
activityTracker: ModuleActivityTracker;
|
|
44
44
|
logger: CompositionLogger;
|
|
45
45
|
metrics: Signal<ModularPerformanceMetrics>;
|
|
@@ -57,21 +57,12 @@ export interface ModularDevToolsInterface<_T = unknown> {
|
|
|
57
57
|
}>;
|
|
58
58
|
};
|
|
59
59
|
}
|
|
60
|
-
export declare function
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
};
|
|
69
|
-
export declare function enableDevTools<T>(treeName?: string): (tree: SignalTree<T>) => SignalTree<T> & {
|
|
70
|
-
__devTools: ModularDevToolsInterface<T>;
|
|
71
|
-
};
|
|
72
|
-
export declare function withFullDevTools<T>(treeName?: string): (tree: SignalTree<T>) => SignalTree<T> & {
|
|
73
|
-
__devTools: ModularDevToolsInterface<T>;
|
|
74
|
-
};
|
|
75
|
-
export declare function withProductionDevTools<T>(): (tree: SignalTree<T>) => SignalTree<T> & {
|
|
76
|
-
__devTools: ModularDevToolsInterface<T>;
|
|
60
|
+
export declare function devTools(config?: DevToolsConfig): <Tree extends ISignalTree<any>>(tree: Tree) => Tree & DevToolsMethods;
|
|
61
|
+
export declare function enableDevTools(treeName?: string): <Tree extends ISignalTree<any>>(tree: Tree) => Tree & DevToolsMethods;
|
|
62
|
+
export declare function fullDevTools(treeName?: string): <Tree extends ISignalTree<any>>(tree: Tree) => Tree & DevToolsMethods;
|
|
63
|
+
export declare function productionDevTools(): <Tree extends ISignalTree<any>>(tree: Tree) => Tree & DevToolsMethods;
|
|
64
|
+
export declare const withDevTools: typeof devTools & {
|
|
65
|
+
production: typeof productionDevTools;
|
|
66
|
+
full: typeof fullDevTools;
|
|
67
|
+
enable: typeof enableDevTools;
|
|
77
68
|
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from './
|
|
1
|
+
export * from './devtools';
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ISignalTree, EffectsMethods } from '../../lib/types';
|
|
2
|
+
export interface EffectsConfig {
|
|
3
|
+
enabled?: boolean;
|
|
4
|
+
}
|
|
5
|
+
export declare function effects(config?: EffectsConfig): <Tree extends ISignalTree<any>>(tree: Tree) => Tree & EffectsMethods<any>;
|
|
6
|
+
export declare function enableEffects(): <Tree extends ISignalTree<any>>(tree: Tree) => Tree & EffectsMethods<any>;
|
|
7
|
+
export declare const withEffects: ((config?: EffectsConfig) => <Tree extends ISignalTree<any>>(tree: Tree) => Tree & EffectsMethods<any>) & {
|
|
8
|
+
enable: typeof enableEffects;
|
|
9
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './effects';
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ISignalTree, EntitiesEnabled } from '../../lib/types';
|
|
2
|
+
export interface EntitiesEnhancerConfig {
|
|
3
|
+
enabled?: boolean;
|
|
4
|
+
}
|
|
5
|
+
export declare function entities(config?: EntitiesEnhancerConfig): <Tree extends ISignalTree<any>>(tree: Tree) => Tree & EntitiesEnabled;
|
|
6
|
+
export declare function enableEntities(): <Tree extends ISignalTree<any>>(tree: Tree) => Tree & EntitiesEnabled;
|
|
7
|
+
export declare function highPerformanceEntities(): <Tree extends ISignalTree<any>>(tree: Tree) => Tree & EntitiesEnabled;
|
|
8
|
+
export declare const withEntities: typeof entities & {
|
|
9
|
+
highPerformance: typeof highPerformanceEntities;
|
|
10
|
+
enable: typeof enableEntities;
|
|
11
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from './
|
|
1
|
+
export * from './entities';
|
package/src/enhancers/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type { EnhancerMeta, EnhancerWithMeta } from '../lib/types';
|
|
2
|
-
export declare function createEnhancer<
|
|
3
|
-
export declare function resolveEnhancerOrder(enhancers: EnhancerWithMeta<unknown
|
|
1
|
+
import type { EnhancerMeta, EnhancerWithMeta, Enhancer } from '../lib/types';
|
|
2
|
+
export declare function createEnhancer<TAdded = unknown>(meta: EnhancerMeta, enhancerFn: Enhancer<TAdded>): EnhancerWithMeta<TAdded>;
|
|
3
|
+
export declare function resolveEnhancerOrder(enhancers: EnhancerWithMeta<unknown>[], availableCapabilities?: Set<string>, debugMode?: boolean): EnhancerWithMeta<unknown>[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from './
|
|
1
|
+
export * from './memoization';
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { ISignalTree } from '../../lib/types';
|
|
2
|
+
export declare function cleanupMemoizationCache(): void;
|
|
3
|
+
import type { MemoizationConfig, MemoizationMethods } from '../../lib/types';
|
|
4
|
+
export declare function memoize<TArgs extends unknown[], TReturn>(fn: (...args: TArgs) => TReturn, keyFn?: (...args: TArgs) => string, config?: MemoizationConfig): (...args: TArgs) => TReturn;
|
|
5
|
+
export declare function memoizeShallow<TArgs extends unknown[], TReturn>(fn: (...args: TArgs) => TReturn, keyFn?: (...args: TArgs) => string): (...args: TArgs) => TReturn;
|
|
6
|
+
export declare function memoizeReference<TArgs extends unknown[], TReturn>(fn: (...args: TArgs) => TReturn, keyFn?: (...args: TArgs) => string): (...args: TArgs) => TReturn;
|
|
7
|
+
export declare const MEMOIZATION_PRESETS: {
|
|
8
|
+
readonly selector: {
|
|
9
|
+
readonly equality: "reference";
|
|
10
|
+
readonly maxCacheSize: 10;
|
|
11
|
+
readonly enableLRU: false;
|
|
12
|
+
readonly ttl: undefined;
|
|
13
|
+
};
|
|
14
|
+
readonly computed: {
|
|
15
|
+
readonly equality: "shallow";
|
|
16
|
+
readonly maxCacheSize: 100;
|
|
17
|
+
readonly enableLRU: false;
|
|
18
|
+
readonly ttl: undefined;
|
|
19
|
+
};
|
|
20
|
+
readonly deepState: {
|
|
21
|
+
readonly equality: "deep";
|
|
22
|
+
readonly maxCacheSize: 1000;
|
|
23
|
+
readonly enableLRU: true;
|
|
24
|
+
readonly ttl: number;
|
|
25
|
+
};
|
|
26
|
+
readonly highFrequency: {
|
|
27
|
+
readonly equality: "reference";
|
|
28
|
+
readonly maxCacheSize: 5;
|
|
29
|
+
readonly enableLRU: false;
|
|
30
|
+
readonly ttl: undefined;
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
export declare function selectorMemoization(): <S>(tree: ISignalTree<S>) => ISignalTree<S> & MemoizationMethods<S>;
|
|
34
|
+
export declare function computedMemoization(): <S>(tree: ISignalTree<S>) => ISignalTree<S> & MemoizationMethods<S>;
|
|
35
|
+
export declare function deepStateMemoization(): <S>(tree: ISignalTree<S>) => ISignalTree<S> & MemoizationMethods<S>;
|
|
36
|
+
export declare function highFrequencyMemoization(): <S>(tree: ISignalTree<S>) => ISignalTree<S> & MemoizationMethods<S>;
|
|
37
|
+
export declare const withMemoization: ((config?: MemoizationConfig) => <Tree extends ISignalTree<any>>(tree: Tree) => Tree & MemoizationMethods<any>) & {
|
|
38
|
+
selector: typeof selectorMemoization;
|
|
39
|
+
computed: typeof computedMemoization;
|
|
40
|
+
deep: typeof deepStateMemoization;
|
|
41
|
+
fast: typeof highFrequencyMemoization;
|
|
42
|
+
};
|
|
43
|
+
export declare function memoization(config?: MemoizationConfig): <Tree extends ISignalTree<any>>(tree: Tree) => Tree & MemoizationMethods<any>;
|
|
44
|
+
export declare function enableMemoization(): <Tree extends ISignalTree<any>>(tree: Tree) => Tree & MemoizationMethods<any>;
|
|
45
|
+
export declare function highPerformanceMemoization(): <Tree extends ISignalTree<any>>(tree: Tree) => Tree & MemoizationMethods<any>;
|
|
46
|
+
export declare function lightweightMemoization(): <Tree extends ISignalTree<any>>(tree: Tree) => Tree & MemoizationMethods<any>;
|
|
47
|
+
export declare function shallowMemoization(): <Tree extends ISignalTree<any>>(tree: Tree) => Tree & MemoizationMethods<any>;
|
|
48
|
+
export declare function clearAllCaches(): void;
|
|
49
|
+
export declare function getGlobalCacheStats(): {
|
|
50
|
+
treeCount: number;
|
|
51
|
+
totalSize: number;
|
|
52
|
+
totalHits: number;
|
|
53
|
+
averageCacheSize: number;
|
|
54
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,11 +1,8 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
1
|
+
import { createDevTree, createMinimalTree, createProdTree } from '../../../lib/presets';
|
|
2
|
+
import type { TreeConfig, TreePreset } from '../../../lib/types';
|
|
3
3
|
export declare const TREE_PRESETS: Record<TreePreset, Partial<TreeConfig>>;
|
|
4
4
|
export declare function createPresetConfig(preset: TreePreset, overrides?: Partial<TreeConfig>): TreeConfig;
|
|
5
5
|
export declare function validatePreset(preset: TreePreset): boolean;
|
|
6
6
|
export declare function getAvailablePresets(): TreePreset[];
|
|
7
7
|
export declare function combinePresets(presets: TreePreset[], overrides?: Partial<TreeConfig>): TreeConfig;
|
|
8
|
-
export
|
|
9
|
-
readonly config: TreeConfig;
|
|
10
|
-
readonly enhancer: (tree: import("../../memoization/lib/memoization").MemoizedSignalTree<unknown>) => import("../../memoization/lib/memoization").MemoizedSignalTree<unknown>;
|
|
11
|
-
};
|
|
8
|
+
export { createDevTree, createProdTree, createMinimalTree };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from './
|
|
1
|
+
export * from './serialization';
|
|
2
2
|
export * from './constants';
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import
|
|
2
|
-
import type { EnhancerWithMeta } from '../../../lib/types';
|
|
1
|
+
import { ISignalTree } from '../../lib/types';
|
|
3
2
|
export interface SerializationConfig {
|
|
4
3
|
includeMetadata?: boolean;
|
|
5
4
|
replacer?: (key: string, value: unknown) => unknown;
|
|
@@ -22,7 +21,7 @@ export interface SerializedState<T = unknown> {
|
|
|
22
21
|
nodeMap?: Record<string, 'b' | 'r'>;
|
|
23
22
|
};
|
|
24
23
|
}
|
|
25
|
-
export interface SerializableSignalTree<T> extends
|
|
24
|
+
export interface SerializableSignalTree<T> extends ISignalTree<T> {
|
|
26
25
|
$: any;
|
|
27
26
|
serialize(config?: SerializationConfig): string;
|
|
28
27
|
deserialize(json: string, config?: SerializationConfig): void;
|
|
@@ -31,14 +30,23 @@ export interface SerializableSignalTree<T> extends SignalTree<T> {
|
|
|
31
30
|
snapshot(): SerializedState<T>;
|
|
32
31
|
restore(snapshot: SerializedState<T>): void;
|
|
33
32
|
}
|
|
33
|
+
export interface SerializationMethods {
|
|
34
|
+
serialize(config?: SerializationConfig): string;
|
|
35
|
+
deserialize(json: string, config?: SerializationConfig): void;
|
|
36
|
+
toJSON(): unknown;
|
|
37
|
+
fromJSON(data: unknown, metadata?: SerializedState<unknown>['metadata']): void;
|
|
38
|
+
snapshot(): SerializedState<unknown>;
|
|
39
|
+
restore(snapshot: SerializedState<unknown>): void;
|
|
40
|
+
}
|
|
34
41
|
export interface PersistenceMethods {
|
|
35
42
|
save(): Promise<void>;
|
|
36
43
|
load(): Promise<void>;
|
|
37
44
|
clear(): Promise<void>;
|
|
38
45
|
__flushAutoSave?: () => Promise<void>;
|
|
39
46
|
}
|
|
40
|
-
export declare function
|
|
41
|
-
export declare
|
|
47
|
+
export declare function serialization(defaultConfig?: SerializationConfig): <Tree extends ISignalTree<any>>(tree: Tree) => Tree & SerializationMethods;
|
|
48
|
+
export declare const withSerialization: (defaultConfig?: SerializationConfig) => <Tree extends ISignalTree<any>>(tree: Tree) => Tree & SerializationMethods;
|
|
49
|
+
export declare function enableSerialization(): <Tree extends ISignalTree<any>>(tree: Tree) => Tree & SerializationMethods;
|
|
42
50
|
export interface StorageAdapter {
|
|
43
51
|
getItem(key: string): string | null | Promise<string | null>;
|
|
44
52
|
setItem(key: string, value: string): void | Promise<void>;
|
|
@@ -52,8 +60,9 @@ export interface PersistenceConfig extends SerializationConfig {
|
|
|
52
60
|
autoLoad?: boolean;
|
|
53
61
|
skipCache?: boolean;
|
|
54
62
|
}
|
|
55
|
-
export declare function
|
|
63
|
+
export declare function persistence(config: PersistenceConfig): <Tree extends ISignalTree<any>>(tree: Tree) => Tree & SerializationMethods & PersistenceMethods;
|
|
64
|
+
export declare const withPersistence: (cfg: PersistenceConfig) => <Tree extends ISignalTree<any>>(tree: Tree) => Tree & SerializationMethods & PersistenceMethods;
|
|
56
65
|
export declare function createStorageAdapter(getItem: (key: string) => string | null | Promise<string | null>, setItem: (key: string, value: string) => void | Promise<void>, removeItem: (key: string) => void | Promise<void>): StorageAdapter;
|
|
57
66
|
export declare function createIndexedDBAdapter(dbName?: string, storeName?: string): StorageAdapter;
|
|
58
|
-
export declare function applySerialization<T extends Record<string, unknown>>(tree:
|
|
59
|
-
export declare function applyPersistence<T extends Record<string, unknown>>(tree:
|
|
67
|
+
export declare function applySerialization<T extends Record<string, unknown>>(tree: ISignalTree<T>): ISignalTree<T> & SerializationMethods;
|
|
68
|
+
export declare function applyPersistence<T extends Record<string, unknown>>(tree: ISignalTree<T>, cfg: PersistenceConfig): ISignalTree<T> & SerializationMethods & PersistenceMethods;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from './
|
|
1
|
+
export * from './time-travel';
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ISignalTree, TimeTravelMethods, TimeTravelConfig, TimeTravelEntry } from '../../lib/types';
|
|
2
|
+
export type { TimeTravelConfig, TimeTravelEntry };
|
|
3
|
+
export declare function timeTravel(config?: TimeTravelConfig): <Tree extends ISignalTree<any>>(tree: Tree) => Tree & TimeTravelMethods;
|
|
4
|
+
export declare function enableTimeTravel(): <Tree extends ISignalTree<any>>(tree: Tree) => Tree & TimeTravelMethods;
|
|
5
|
+
export declare function timeTravelHistory(maxHistorySize: number): <Tree extends ISignalTree<any>>(tree: Tree) => Tree & TimeTravelMethods;
|
|
6
|
+
export declare const withTimeTravel: ((config?: TimeTravelConfig) => <Tree extends ISignalTree<any>>(tree: Tree) => Tree & TimeTravelMethods) & {
|
|
7
|
+
minimal: () => <Tree extends ISignalTree<any>>(tree: Tree) => Tree & TimeTravelMethods;
|
|
8
|
+
debug: () => <Tree extends ISignalTree<any>>(tree: Tree) => Tree & TimeTravelMethods;
|
|
9
|
+
history: typeof timeTravelHistory;
|
|
10
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/src/enhancers/types.d.ts
CHANGED
|
@@ -1,74 +1 @@
|
|
|
1
|
-
export
|
|
2
|
-
maxBatchSize?: number;
|
|
3
|
-
debounceMs?: number;
|
|
4
|
-
flushOnMicrotask?: boolean;
|
|
5
|
-
}
|
|
6
|
-
export interface BatchUpdate<T = unknown> {
|
|
7
|
-
path: string[];
|
|
8
|
-
value: T;
|
|
9
|
-
timestamp: number;
|
|
10
|
-
}
|
|
11
|
-
export interface ComputedSignal<T> {
|
|
12
|
-
(): T;
|
|
13
|
-
readonly value: T;
|
|
14
|
-
}
|
|
15
|
-
export interface ComputedConfig {
|
|
16
|
-
lazy?: boolean;
|
|
17
|
-
memoize?: boolean;
|
|
18
|
-
}
|
|
19
|
-
export interface MemoizationConfig {
|
|
20
|
-
maxSize?: number;
|
|
21
|
-
ttl?: number;
|
|
22
|
-
strategy?: 'lru' | 'fifo' | 'lfu';
|
|
23
|
-
}
|
|
24
|
-
export interface MemoizedFunction<T extends (...args: never[]) => unknown> {
|
|
25
|
-
(...args: Parameters<T>): ReturnType<T>;
|
|
26
|
-
clear(): void;
|
|
27
|
-
stats(): {
|
|
28
|
-
hits: number;
|
|
29
|
-
misses: number;
|
|
30
|
-
size: number;
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
export interface TimeTravelConfig {
|
|
34
|
-
maxHistorySize?: number;
|
|
35
|
-
enableCompression?: boolean;
|
|
36
|
-
}
|
|
37
|
-
export interface TimeTravelState {
|
|
38
|
-
canUndo: boolean;
|
|
39
|
-
canRedo: boolean;
|
|
40
|
-
historySize: number;
|
|
41
|
-
currentIndex: number;
|
|
42
|
-
}
|
|
43
|
-
export interface DevToolsConfig {
|
|
44
|
-
name?: string;
|
|
45
|
-
enabled?: boolean;
|
|
46
|
-
logLevel?: 'debug' | 'info' | 'warn' | 'error';
|
|
47
|
-
}
|
|
48
|
-
export interface DevToolsAction {
|
|
49
|
-
type: string;
|
|
50
|
-
payload?: unknown;
|
|
51
|
-
timestamp: number;
|
|
52
|
-
source: string;
|
|
53
|
-
}
|
|
54
|
-
export interface PresetConfig {
|
|
55
|
-
name: string;
|
|
56
|
-
enhancers: unknown[];
|
|
57
|
-
config?: Record<string, unknown>;
|
|
58
|
-
}
|
|
59
|
-
export interface EntityConfig {
|
|
60
|
-
idField?: string;
|
|
61
|
-
indexes?: string[];
|
|
62
|
-
relations?: Record<string, string>;
|
|
63
|
-
}
|
|
64
|
-
export interface SerializationConfig {
|
|
65
|
-
includeComputed?: boolean;
|
|
66
|
-
includeMeta?: boolean;
|
|
67
|
-
customSerializers?: Record<string, (value: unknown) => unknown>;
|
|
68
|
-
}
|
|
69
|
-
export interface SerializedState {
|
|
70
|
-
version: string;
|
|
71
|
-
timestamp: number;
|
|
72
|
-
data: unknown;
|
|
73
|
-
meta?: Record<string, unknown>;
|
|
74
|
-
}
|
|
1
|
+
export { BatchingMethods, BatchingConfig, MemoizationMethods, MemoizationConfig, TimeTravelMethods, TimeTravelConfig, EffectsMethods, DevToolsMethods, DevToolsConfig, EntitiesEnabled, Enhancer, EnhancerWithMeta, EnhancerMeta, } from '../lib/types';
|
package/src/index.d.ts
CHANGED
|
@@ -1,18 +1,17 @@
|
|
|
1
1
|
export { signalTree } from './lib/signal-tree';
|
|
2
|
-
export type {
|
|
2
|
+
export type { ISignalTree, SignalTree, SignalTreeBase, FullSignalTree, ProdSignalTree, TreeNode, CallableWritableSignal, AccessibleNode, NodeAccessor, Primitive, NotFn, TreeConfig, TreePreset, Enhancer, EnhancerMeta, EnhancerWithMeta, EntitySignal, EntityMapMarker, EntityConfig, MutationOptions, AddOptions, AddManyOptions, TimeTravelEntry, TimeTravelMethods, } from './lib/types';
|
|
3
3
|
export { entityMap } from './lib/types';
|
|
4
4
|
export { equal, deepEqual, isNodeAccessor, isAnySignal, toWritableSignal, parsePath, composeEnhancers, isBuiltInObject, createLazySignalTree, } from './lib/utils';
|
|
5
5
|
export { getPathNotifier } from './lib/path-notifier';
|
|
6
6
|
export { SecurityValidator, SecurityPresets, type SecurityEvent, type SecurityEventType, type SecurityValidatorConfig, } from './lib/security/security-validator';
|
|
7
7
|
export { createEnhancer, resolveEnhancerOrder } from './enhancers/index';
|
|
8
8
|
export { ENHANCER_META } from './lib/types';
|
|
9
|
-
export {
|
|
10
|
-
export {
|
|
11
|
-
export {
|
|
12
|
-
export {
|
|
13
|
-
export {
|
|
14
|
-
export {
|
|
9
|
+
export { batching, highPerformanceBatching, flushBatchedUpdates, hasPendingUpdates, getBatchQueueSize, } from './enhancers/batching/batching';
|
|
10
|
+
export { memoization, selectorMemoization, computedMemoization, deepStateMemoization, highFrequencyMemoization, highPerformanceMemoization, lightweightMemoization, shallowMemoization, memoize, memoizeShallow, memoizeReference, clearAllCaches, getGlobalCacheStats, } from './enhancers/memoization/memoization';
|
|
11
|
+
export { timeTravel, enableTimeTravel, } from './enhancers/time-travel/time-travel';
|
|
12
|
+
export { entities, enableEntities, highPerformanceEntities, } from './enhancers/entities/entities';
|
|
13
|
+
export { serialization, enableSerialization, persistence, createStorageAdapter, createIndexedDBAdapter, applySerialization, applyPersistence, } from './enhancers/serialization/serialization';
|
|
14
|
+
export { devTools, enableDevTools, fullDevTools, productionDevTools, } from './enhancers/devtools/devtools';
|
|
15
15
|
export { createAsyncOperation, trackAsync } from './lib/async-helpers';
|
|
16
16
|
export { TREE_PRESETS, createPresetConfig, validatePreset, getAvailablePresets, combinePresets, createDevTree, } from './enhancers/presets/lib/presets';
|
|
17
|
-
export { computedEnhancer, createComputed, type ComputedConfig, type ComputedSignal, type ComputedSignalTree, } from './enhancers/computed/lib/computed';
|
|
18
17
|
export { SIGNAL_TREE_CONSTANTS, SIGNAL_TREE_MESSAGES } from './lib/constants';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export declare function createAsyncOperation<T, TResult>(name: string, operation: () => Promise<TResult>): (tree:
|
|
1
|
+
import type { ISignalTree } from './types';
|
|
2
|
+
export declare function createAsyncOperation<T, TResult>(name: string, operation: () => Promise<TResult>): (tree: ISignalTree<T>) => Promise<TResult>;
|
|
3
3
|
export declare function trackAsync<T>(operation: () => Promise<T>): {
|
|
4
4
|
pending: import("@angular/core").Signal<boolean>;
|
|
5
5
|
error: import("@angular/core").Signal<Error | null>;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { ISignalTree, TreeConfig, BatchingConfig, MemoizationConfig, TimeTravelConfig, DevToolsConfig, BatchingMethods, MemoizationMethods, TimeTravelMethods, DevToolsMethods, EffectsMethods, EntitiesEnabled } from './types';
|
|
2
|
+
export interface DevTreeConfig extends TreeConfig {
|
|
3
|
+
effects?: Record<string, never>;
|
|
4
|
+
batching?: BatchingConfig;
|
|
5
|
+
memoization?: MemoizationConfig;
|
|
6
|
+
timeTravel?: TimeTravelConfig;
|
|
7
|
+
devTools?: DevToolsConfig;
|
|
8
|
+
entities?: Record<string, never>;
|
|
9
|
+
}
|
|
10
|
+
export interface ProdTreeConfig extends TreeConfig {
|
|
11
|
+
effects?: Record<string, never>;
|
|
12
|
+
batching?: BatchingConfig;
|
|
13
|
+
memoization?: MemoizationConfig;
|
|
14
|
+
entities?: Record<string, never>;
|
|
15
|
+
}
|
|
16
|
+
export interface MinimalTreeConfig extends TreeConfig {
|
|
17
|
+
effects?: Record<string, never>;
|
|
18
|
+
}
|
|
19
|
+
export type FullSignalTree<T> = ISignalTree<T> & EffectsMethods<T> & BatchingMethods & MemoizationMethods<T> & EntitiesEnabled & TimeTravelMethods & DevToolsMethods;
|
|
20
|
+
export type ProdSignalTree<T> = ISignalTree<T> & EffectsMethods<T> & BatchingMethods & MemoizationMethods<T> & EntitiesEnabled;
|
|
21
|
+
export type MinimalSignalTree<T> = ISignalTree<T> & EffectsMethods<T>;
|
|
22
|
+
export declare function createDevTree<T extends object>(initialState: T, config?: DevTreeConfig): FullSignalTree<T>;
|
|
23
|
+
export declare function createDevTree(): {
|
|
24
|
+
enhancer: <Tree extends ISignalTree<any>>(tree: Tree) => Tree & EffectsMethods<any> & BatchingMethods & MemoizationMethods<any> & EntitiesEnabled & TimeTravelMethods & DevToolsMethods;
|
|
25
|
+
};
|
|
26
|
+
export declare function createProdTree<T extends object>(initialState: T, config?: ProdTreeConfig): ProdSignalTree<T>;
|
|
27
|
+
export declare function createMinimalTree<T extends object>(initialState: T, config?: MinimalTreeConfig): MinimalSignalTree<T>;
|
|
28
|
+
export declare const devTree: typeof createDevTree;
|
|
29
|
+
export declare const prodTree: typeof createProdTree;
|
|
30
|
+
export declare const minimalTree: typeof createMinimalTree;
|
|
31
|
+
export declare function buildTree<T extends object>(initialState: T, config?: TreeConfig): {
|
|
32
|
+
add<R>(enhancer: (t: ISignalTree<T>) => R): any;
|
|
33
|
+
done(): ISignalTree<T>;
|
|
34
|
+
};
|
package/src/lib/signal-tree.d.ts
CHANGED
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { TreeConfig, NodeAccessor, ISignalTree } from './types';
|
|
2
2
|
export declare function isNodeAccessor(value: unknown): value is NodeAccessor<unknown>;
|
|
3
|
-
export declare function signalTree<T>(
|
|
4
|
-
export declare function signalTree<T>(obj: T, preset: TreePreset): SignalTree<T>;
|
|
5
|
-
export declare function signalTree<T>(obj: T, config: TreeConfig): SignalTree<T>;
|
|
6
|
-
export declare function signalTree<T extends Record<string, unknown>>(obj: Required<T>, configOrPreset?: TreeConfig | TreePreset): SignalTree<Required<T>>;
|
|
7
|
-
export declare function signalTree<T>(obj: T, configOrPreset?: TreeConfig | TreePreset): SignalTree<T>;
|
|
8
|
-
export declare function applyEnhancer<T, O>(tree: SignalTree<T>, enhancer: EnhancerWithMeta<SignalTree<T>, O>): O;
|
|
3
|
+
export declare function signalTree<T extends object>(initialState: T, config?: TreeConfig): ISignalTree<T>;
|