flint-reactivity 4.0.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/dist/debug.js ADDED
@@ -0,0 +1,257 @@
1
+ // Flint Reactivity v2 — Debug Mode & Signal Tracking
2
+ // Enhanced debugging capabilities for signals and computed values
3
+ // ─── Debug Manager ──────────────────────────────────────────────
4
+ let debugManager = null;
5
+ export class DebugManager {
6
+ options;
7
+ signalRegistry = new Map();
8
+ computedRegistry = new Map();
9
+ effectRegistry = new Map();
10
+ idCounter = 0;
11
+ enabled = false;
12
+ constructor(options = {}) {
13
+ this.options = {
14
+ enabled: false,
15
+ logChanges: true,
16
+ logComputed: true,
17
+ logEffects: true,
18
+ logBatch: true,
19
+ maxHistory: 100,
20
+ trackPerformance: true,
21
+ ...options,
22
+ };
23
+ this.enabled = this.options.enabled;
24
+ }
25
+ /**
26
+ * Enable debug mode
27
+ */
28
+ enable() {
29
+ this.enabled = true;
30
+ this.options.enabled = true;
31
+ console.log('[Flint Debug] Debug mode enabled');
32
+ }
33
+ /**
34
+ * Disable debug mode
35
+ */
36
+ disable() {
37
+ this.enabled = false;
38
+ this.options.enabled = false;
39
+ console.log('[Flint Debug] Debug mode disabled');
40
+ }
41
+ /**
42
+ * Track a signal
43
+ */
44
+ trackSignal(name, signal) {
45
+ if (!this.enabled)
46
+ return signal;
47
+ const id = `signal_${this.idCounter++}`;
48
+ const debugInfo = {
49
+ id,
50
+ name,
51
+ value: signal(),
52
+ previousValue: undefined,
53
+ changeCount: 0,
54
+ lastChange: Date.now(),
55
+ history: [],
56
+ subscribers: [],
57
+ computedFrom: [],
58
+ };
59
+ this.signalRegistry.set(id, debugInfo);
60
+ // Wrap signal with tracking - create a proper Signal wrapper
61
+ const tracked = (() => {
62
+ // Read
63
+ return signal();
64
+ });
65
+ // Copy the set method with tracking
66
+ tracked.set = (value) => {
67
+ const oldValue = signal();
68
+ signal.set(value);
69
+ const newValue = signal();
70
+ debugInfo.previousValue = oldValue;
71
+ debugInfo.value = newValue;
72
+ debugInfo.changeCount++;
73
+ debugInfo.lastChange = Date.now();
74
+ debugInfo.history.push({
75
+ value: newValue,
76
+ timestamp: Date.now(),
77
+ });
78
+ // Trim history
79
+ if (debugInfo.history.length > this.options.maxHistory) {
80
+ debugInfo.history.shift();
81
+ }
82
+ if (this.options.logChanges) {
83
+ console.log(`[Flint Debug] Signal "${name}" changed:`, oldValue, '->', newValue);
84
+ }
85
+ };
86
+ // Copy the peek method
87
+ tracked.peek = () => signal.peek();
88
+ return tracked;
89
+ }
90
+ /**
91
+ * Track a computed value
92
+ */
93
+ trackComputed(name, computed$) {
94
+ if (!this.enabled)
95
+ return computed$;
96
+ const id = `computed_${this.idCounter++}`;
97
+ const debugInfo = {
98
+ id,
99
+ name,
100
+ value: computed$(),
101
+ recalculationCount: 0,
102
+ lastRecalculation: Date.now(),
103
+ dependencies: [],
104
+ isDirty: false,
105
+ computationTime: 0,
106
+ };
107
+ this.computedRegistry.set(id, debugInfo);
108
+ // Wrap computed with tracking
109
+ const original = computed$;
110
+ const tracked = (() => {
111
+ const startTime = performance.now();
112
+ const value = original();
113
+ const endTime = performance.now();
114
+ debugInfo.value = value;
115
+ debugInfo.recalculationCount++;
116
+ debugInfo.lastRecalculation = Date.now();
117
+ debugInfo.computationTime = endTime - startTime;
118
+ if (this.options.logComputed) {
119
+ console.log(`[Flint Debug] Computed "${name}" recalculated:`, value, `(${(endTime - startTime).toFixed(2)}ms)`);
120
+ }
121
+ return value;
122
+ });
123
+ return tracked;
124
+ }
125
+ /**
126
+ * Get debug info for a signal
127
+ */
128
+ getSignalDebugInfo(id) {
129
+ return this.signalRegistry.get(id);
130
+ }
131
+ /**
132
+ * Get debug info for a computed
133
+ */
134
+ getComputedDebugInfo(id) {
135
+ return this.computedRegistry.get(id);
136
+ }
137
+ /**
138
+ * Get all tracked signals
139
+ */
140
+ getAllSignals() {
141
+ return Array.from(this.signalRegistry.values());
142
+ }
143
+ /**
144
+ * Get all tracked computed values
145
+ */
146
+ getAllComputed() {
147
+ return Array.from(this.computedRegistry.values());
148
+ }
149
+ /**
150
+ * Clear all tracking data
151
+ */
152
+ clear() {
153
+ this.signalRegistry.clear();
154
+ this.computedRegistry.clear();
155
+ this.effectRegistry.clear();
156
+ this.idCounter = 0;
157
+ }
158
+ /**
159
+ * Get performance summary
160
+ */
161
+ getPerformanceSummary() {
162
+ const signals = this.getAllSignals();
163
+ const computed = this.getAllComputed();
164
+ const avgTime = computed.length > 0
165
+ ? computed.reduce((sum, c) => sum + c.computationTime, 0) / computed.length
166
+ : 0;
167
+ return {
168
+ totalSignals: signals.length,
169
+ totalComputed: computed.length,
170
+ totalEffects: this.effectRegistry.size,
171
+ averageComputationTime: avgTime,
172
+ };
173
+ }
174
+ }
175
+ // ─── Singleton Functions ────────────────────────────────────────
176
+ export function createDebugManager(options) {
177
+ if (!debugManager) {
178
+ debugManager = new DebugManager(options);
179
+ }
180
+ return debugManager;
181
+ }
182
+ export function getDebugManager() {
183
+ return debugManager;
184
+ }
185
+ export function enableDebug() {
186
+ if (!debugManager) {
187
+ debugManager = new DebugManager({ enabled: true });
188
+ }
189
+ else {
190
+ debugManager.enable();
191
+ }
192
+ return debugManager;
193
+ }
194
+ export function disableDebug() {
195
+ debugManager?.disable();
196
+ }
197
+ /**
198
+ * Track a signal in debug mode
199
+ */
200
+ export function trackSignal(name, signal) {
201
+ if (!debugManager) {
202
+ debugManager = new DebugManager({ enabled: true });
203
+ }
204
+ return debugManager.trackSignal(name, signal);
205
+ }
206
+ /**
207
+ * Track a computed in debug mode
208
+ */
209
+ export function trackComputed(name, computed$) {
210
+ if (!debugManager) {
211
+ debugManager = new DebugManager({ enabled: true });
212
+ }
213
+ return debugManager.trackComputed(name, computed$);
214
+ }
215
+ /**
216
+ * Print signal history
217
+ */
218
+ export function printSignalHistory(signalId) {
219
+ const info = debugManager?.getSignalDebugInfo(signalId);
220
+ if (!info) {
221
+ console.log('[Flint Debug] Signal not found:', signalId);
222
+ return;
223
+ }
224
+ console.log(`[Flint Debug] Signal "${info.name}" history:`);
225
+ console.table(info.history);
226
+ }
227
+ /**
228
+ * Print computed stats
229
+ */
230
+ export function printComputedStats(computedId) {
231
+ const info = debugManager?.getComputedDebugInfo(computedId);
232
+ if (!info) {
233
+ console.log('[Flint Debug] Computed not found:', computedId);
234
+ return;
235
+ }
236
+ console.log(`[Flint Debug] Computed "${info.name}" stats:`);
237
+ console.log(' Value:', info.value);
238
+ console.log(' Recalculations:', info.recalculationCount);
239
+ console.log(' Last Recalculation:', new Date(info.lastRecalculation).toISOString());
240
+ console.log(' Computation Time:', info.computationTime.toFixed(2), 'ms');
241
+ }
242
+ /**
243
+ * Print performance summary
244
+ */
245
+ export function printPerformanceSummary() {
246
+ if (!debugManager) {
247
+ console.log('[Flint Debug] Debug manager not initialized');
248
+ return;
249
+ }
250
+ const summary = debugManager.getPerformanceSummary();
251
+ console.log('[Flint Debug] Performance Summary:');
252
+ console.log(' Total Signals:', summary.totalSignals);
253
+ console.log(' Total Computed:', summary.totalComputed);
254
+ console.log(' Total Effects:', summary.totalEffects);
255
+ console.log(' Average Computation Time:', summary.averageComputationTime.toFixed(2), 'ms');
256
+ }
257
+ //# sourceMappingURL=debug.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug.js","sourceRoot":"","sources":["../src/debug.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export { state, computed, effect, watch, flushSync, untrack, captureScope, createSelector, createRoot, onCleanup, reactive, model, bind, createRef, shallowRef, derive, signals, poll, watchDebounced, watchThrottled, computedSet, } from './signals.js';
2
+ export type { Signal, Computed, Effect, CleanupFn, Selector, Scope, ReactiveProxy, Ref, Writable, Readable, WatchHandle, } from './types.js';
3
+ export { DebugManager, createDebugManager, getDebugManager, enableDebug, disableDebug, trackSignal, trackComputed, printSignalHistory, printComputedStats, printPerformanceSummary, } from './debug.js';
4
+ export type { DebugOptions, SignalDebugInfo, ComputedDebugInfo, EffectDebugInfo, SignalHistoryEntry, } from './debug.js';
5
+ export type { InferSignal, InferComputed, InferWritable, InferReadable, ComponentProps, ComponentReturn, PartialExcept, RequiredExcept, InferFormValues, InferFormErrors, Validator, Validators, InferStoreState, InferStoreActions, Nullable, Optional, Maybe, DeepReadonly, DeepMutable, FunctionKeys, NonFunctionKeys, PickFunctions, PickState, MethodParams, MethodReturns, EventHandler, EventHandlers, UnwrapPromise, Async, Await, ArrayElement, Tuple, TupleOf, CamelCase, KebabCase, If, And, Or, Not, Equals, IsNever, IsAny, IsUnknown, } from './types-helpers.js';
6
+ export { createSignal, createEffect, createMemo, createStore, batch, createResource, from, produce, } from './compat.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,EACL,QAAQ,EACR,MAAM,EACN,KAAK,EACL,SAAS,EACT,OAAO,EACP,YAAY,EACZ,cAAc,EACd,UAAU,EACV,SAAS,EAET,QAAQ,EACR,KAAK,EACL,IAAI,EACJ,SAAS,EACT,UAAU,EACV,MAAM,EACN,OAAO,EACP,IAAI,EACJ,cAAc,EACd,cAAc,EACd,WAAW,GACZ,MAAM,cAAc,CAAA;AACrB,YAAY,EACV,MAAM,EACN,QAAQ,EACR,MAAM,EACN,SAAS,EACT,QAAQ,EACR,KAAK,EACL,aAAa,EACb,GAAG,EACH,QAAQ,EACR,QAAQ,EACR,WAAW,GACZ,MAAM,YAAY,CAAA;AAGnB,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,eAAe,EACf,WAAW,EACX,YAAY,EACZ,WAAW,EACX,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,uBAAuB,GACxB,MAAM,YAAY,CAAA;AACnB,YAAY,EACV,YAAY,EACZ,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,kBAAkB,GACnB,MAAM,YAAY,CAAA;AAGnB,YAAY,EACV,WAAW,EACX,aAAa,EACb,aAAa,EACb,aAAa,EACb,cAAc,EACd,eAAe,EACf,aAAa,EACb,cAAc,EACd,eAAe,EACf,eAAe,EACf,SAAS,EACT,UAAU,EACV,eAAe,EACf,iBAAiB,EACjB,QAAQ,EACR,QAAQ,EACR,KAAK,EACL,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,eAAe,EACf,aAAa,EACb,SAAS,EACT,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,aAAa,EACb,aAAa,EACb,KAAK,EACL,KAAK,EACL,YAAY,EACZ,KAAK,EACL,OAAO,EACP,SAAS,EACT,SAAS,EACT,EAAE,EACF,GAAG,EACH,EAAE,EACF,GAAG,EACH,MAAM,EACN,OAAO,EACP,KAAK,EACL,SAAS,GACV,MAAM,oBAAoB,CAAA;AAG3B,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,WAAW,EACX,KAAK,EACL,cAAc,EACd,IAAI,EACJ,OAAO,GACR,MAAM,aAAa,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,9 @@
1
+ // Flint Reactivity — Fine-grained signals system v4
2
+ export { state, computed, effect, watch, flushSync, untrack, captureScope, createSelector, createRoot, onCleanup,
3
+ // NEW v4 simplified APIs
4
+ reactive, model, bind, createRef, shallowRef, derive, signals, poll, watchDebounced, watchThrottled, computedSet, } from './signals.js';
5
+ // Debug mode v2
6
+ export { DebugManager, createDebugManager, getDebugManager, enableDebug, disableDebug, trackSignal, trackComputed, printSignalHistory, printComputedStats, printPerformanceSummary, } from './debug.js';
7
+ // Solid/React Compatibility Aliases (v4.2)
8
+ export { createSignal, createEffect, createMemo, createStore, batch, createResource, from, produce, } from './compat.js';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,oDAAoD;AAEpD,OAAO,EACL,KAAK,EACL,QAAQ,EACR,MAAM,EACN,KAAK,EACL,SAAS,EACT,OAAO,EACP,YAAY,EACZ,cAAc,EACd,UAAU,EACV,SAAS;AACT,yBAAyB;AACzB,QAAQ,EACR,KAAK,EACL,IAAI,EACJ,SAAS,EACT,UAAU,EACV,MAAM,EACN,OAAO,EACP,IAAI,EACJ,cAAc,EACd,cAAc,EACd,WAAW,GACZ,MAAM,cAAc,CAAA;AAerB,gBAAgB;AAChB,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,eAAe,EACf,WAAW,EACX,YAAY,EACZ,WAAW,EACX,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,uBAAuB,GACxB,MAAM,YAAY,CAAA;AAwDnB,2CAA2C;AAC3C,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,WAAW,EACX,KAAK,EACL,cAAc,EACd,IAAI,EACJ,OAAO,GACR,MAAM,aAAa,CAAA"}
@@ -0,0 +1,163 @@
1
+ import type { Signal, Computed, Effect, Readable, Writable, WatchHandle, SignalState, ComputedState, CleanupFn, Selector, Scope, ReactiveProxy, Ref } from './types.js';
2
+ /**
3
+ * Create a reactive state signal.
4
+ *
5
+ * @example
6
+ * const count = state(0)
7
+ * count() // read: 0
8
+ * count.set(5) // write: 5
9
+ * count.set(c => c + 1) // write: 6
10
+ */
11
+ export declare function state<T>(initial: T): Writable<T> & Signal<T>;
12
+ /**
13
+ * Create a computed (derived) value.
14
+ * Lazily evaluated and cached. Only recomputes when dependencies change.
15
+ */
16
+ export declare function computed<T>(fn: () => T, options?: {
17
+ equals?: (prev: T, next: T) => boolean;
18
+ }): Computed<T>;
19
+ /**
20
+ * Create a writable computed value.
21
+ * Like computed, but can be set directly.
22
+ *
23
+ * @example
24
+ * const count = state(0)
25
+ * const doubled = computedSet({
26
+ * get: () => count() * 2,
27
+ * set: (value) => count.set(value / 2)
28
+ * })
29
+ *
30
+ * doubled() // read: 0
31
+ * doubled.set(10) // write: sets count to 5
32
+ */
33
+ export declare function computedSet<T>(options: {
34
+ get: () => T;
35
+ set: (value: T) => void;
36
+ equals?: (prev: T, next: T) => boolean;
37
+ }): Writable<T> & Computed<T>;
38
+ /**
39
+ * Create a side effect that auto-tracks dependencies.
40
+ */
41
+ export declare function effect(fn: () => void | CleanupFn): Effect;
42
+ /**
43
+ * Watch a source function and call callback when value changes.
44
+ */
45
+ export declare function watch<T>(source: () => T, callback: (value: T, oldValue: T | undefined) => void): WatchHandle;
46
+ /**
47
+ * Batch multiple signal updates into a single flush.
48
+ */
49
+ export declare function batch(fn: () => void): void;
50
+ /**
51
+ * Run queued effects/computeds immediately.
52
+ */
53
+ export declare function flushSync(): void;
54
+ export declare function captureScope<T>(fn: () => T): {
55
+ value: T;
56
+ dependencies: Set<SignalState<any> | ComputedState<any>>;
57
+ };
58
+ export declare function untrack<T>(fn: () => T): T;
59
+ export declare function createRoot<T>(fn: (dispose: () => void) => T): T & Scope;
60
+ export declare function onCleanup(fn: CleanupFn): void;
61
+ export declare function createSelector<T>(source: Signal<T> | Readable<T> | (() => T)): Selector<T>;
62
+ export { onCleanup as onDispose };
63
+ /**
64
+ * Create a reactive object with Proxy. Reads auto-track, writes auto-trigger.
65
+ *
66
+ * @example
67
+ * const user = reactive({ name: 'John', age: 30 })
68
+ * user.name // tracked
69
+ * user.age = 31 // triggers effects
70
+ */
71
+ export declare function reactive<T extends object>(obj: T): ReactiveProxy<T>;
72
+ /**
73
+ * Create a model — a reactive container with actions.
74
+ * Combines state + computed + actions in one clean API.
75
+ *
76
+ * @example
77
+ * const counter = model({
78
+ * state: { count: 0, step: 1 },
79
+ * computed: {
80
+ * doubled: (s) => s.count * 2,
81
+ * isPositive: (s) => s.count > 0,
82
+ * },
83
+ * actions: {
84
+ * increment(s) { s.count += s.step },
85
+ * decrement(s) { s.count -= s.step },
86
+ * reset(s) { s.count = 0 },
87
+ * },
88
+ * })
89
+ *
90
+ * counter.count() // 0
91
+ * counter.doubled() // 0
92
+ * counter.increment() // s.count = 1
93
+ */
94
+ export declare function model<T extends Record<string, any>, C extends Record<string, (state: T) => any>, A extends Record<string, (state: T, ...args: any[]) => void>>(config: {
95
+ state: T;
96
+ computed?: C;
97
+ actions?: A;
98
+ }): {
99
+ [K in keyof T]: T[K] extends object ? Writable<T[K]> : Signal<T[K]>;
100
+ } & {
101
+ [K in keyof C]: C[K] extends (s: T) => infer R ? Readable<R> : never;
102
+ } & {
103
+ [K in keyof A]: A[K] extends (s: T, ...args: infer P) => void ? (...args: P) => void : never;
104
+ };
105
+ /**
106
+ * Create a two-way binding between a signal and a DOM element property.
107
+ * Simplifies form handling dramatically.
108
+ *
109
+ * @example
110
+ * const name = state('')
111
+ * <input {...bind(name, 'value')} onInput={(e) => name.set(e.target.value)} />
112
+ */
113
+ export declare function bind<T>(signal: Writable<T>, prop: string): Record<string, () => T>;
114
+ /**
115
+ * Create a mutable ref (like React's useRef).
116
+ */
117
+ export declare function createRef<T>(initial: T): Ref<T>;
118
+ /**
119
+ * Create a shallow ref — only triggers on reference change, not deep mutation.
120
+ */
121
+ export declare function shallowRef<T>(value: T): Writable<T> & {
122
+ readonly current: T;
123
+ };
124
+ /**
125
+ * Group multiple signals into a single derived signal.
126
+ *
127
+ * @example
128
+ * const [doubled, tripled] = derive(
129
+ * [count],
130
+ * (c) => [c * 2, c * 3]
131
+ * )
132
+ */
133
+ export declare function derive<T extends Readable<any>[], R>(sources: T, fn: (...values: {
134
+ [K in keyof T]: T[K] extends Readable<infer V> ? V : never;
135
+ }) => R): Readable<R>;
136
+ /**
137
+ * Batch create multiple signals from an object.
138
+ *
139
+ * @example
140
+ * const [count, name, items] = signals(0, 'hello', [])
141
+ */
142
+ export declare function signals<T extends any[]>(...initials: T): {
143
+ [K in keyof T]: Signal<T[K]>;
144
+ };
145
+ /**
146
+ * Create an effect that runs on a specific interval.
147
+ *
148
+ * @example
149
+ * poll(() => fetchData(), 5000) // poll every 5 seconds
150
+ */
151
+ export declare function poll(fn: () => void | CleanupFn, ms: number): Effect;
152
+ /**
153
+ * Create an effect that runs when a signal changes (debounced).
154
+ *
155
+ * @example
156
+ * watchDebounced(searchQuery, (q) => fetchResults(q), 300)
157
+ */
158
+ export declare function watchDebounced<T>(source: () => T, callback: (value: T, oldValue: T | undefined) => void, ms: number): WatchHandle;
159
+ /**
160
+ * Create an effect that runs when a signal changes (throttled).
161
+ */
162
+ export declare function watchThrottled<T>(source: () => T, callback: (value: T, oldValue: T | undefined) => void, ms: number): WatchHandle;
163
+ //# sourceMappingURL=signals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signals.d.ts","sourceRoot":"","sources":["../src/signals.ts"],"names":[],"mappings":"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"}