@lytjs/reactivity 5.0.1 → 6.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.
Files changed (56) hide show
  1. package/README.md +327 -202
  2. package/dist/async.cjs +276 -0
  3. package/dist/async.cjs.map +1 -0
  4. package/dist/async.d.cts +32 -0
  5. package/dist/async.d.ts +32 -0
  6. package/dist/async.mjs +273 -0
  7. package/dist/async.mjs.map +1 -0
  8. package/dist/index.cjs +1607 -1
  9. package/dist/index.cjs.map +1 -0
  10. package/dist/index.d.cts +226 -0
  11. package/dist/index.d.ts +226 -0
  12. package/dist/index.mjs +1543 -1
  13. package/dist/index.mjs.map +1 -0
  14. package/dist/ref-CwOCKoy2.d.cts +42 -0
  15. package/dist/ref-CwOCKoy2.d.ts +42 -0
  16. package/dist/scope.cjs +74 -0
  17. package/dist/scope.cjs.map +1 -0
  18. package/dist/scope.d.cts +71 -0
  19. package/dist/scope.d.ts +71 -0
  20. package/dist/scope.mjs +70 -0
  21. package/dist/scope.mjs.map +1 -0
  22. package/dist/signal-BOAyevht.d.cts +109 -0
  23. package/dist/signal-BOAyevht.d.ts +109 -0
  24. package/dist/signal-component.cjs +39 -0
  25. package/dist/signal-component.cjs.map +1 -0
  26. package/dist/signal-component.d.cts +31 -0
  27. package/dist/signal-component.d.ts +31 -0
  28. package/dist/signal-component.mjs +35 -0
  29. package/dist/signal-component.mjs.map +1 -0
  30. package/dist/signal.cjs +350 -1
  31. package/dist/signal.cjs.map +1 -0
  32. package/dist/signal.d.cts +1 -0
  33. package/dist/signal.d.ts +1 -0
  34. package/dist/signal.mjs +334 -1
  35. package/dist/signal.mjs.map +1 -0
  36. package/dist/types-CMYee6LB.d.cts +270 -0
  37. package/dist/types-CXeWWYm6.d.ts +270 -0
  38. package/package.json +54 -31
  39. package/dist/types/computed.d.ts +0 -70
  40. package/dist/types/computed.d.ts.map +0 -1
  41. package/dist/types/effect.d.ts +0 -157
  42. package/dist/types/effect.d.ts.map +0 -1
  43. package/dist/types/index.d.ts +0 -21
  44. package/dist/types/index.d.ts.map +0 -1
  45. package/dist/types/reactive.d.ts +0 -98
  46. package/dist/types/reactive.d.ts.map +0 -1
  47. package/dist/types/ref.d.ts +0 -128
  48. package/dist/types/ref.d.ts.map +0 -1
  49. package/dist/types/scheduler.d.ts +0 -44
  50. package/dist/types/scheduler.d.ts.map +0 -1
  51. package/dist/types/signal-component.d.ts +0 -45
  52. package/dist/types/signal-component.d.ts.map +0 -1
  53. package/dist/types/signal.d.ts +0 -87
  54. package/dist/types/signal.d.ts.map +0 -1
  55. package/dist/types/watch.d.ts +0 -125
  56. package/dist/types/watch.d.ts.map +0 -1
@@ -0,0 +1,270 @@
1
+ import { R as Ref, S as ShallowRef, C as ComputedRef } from './ref-CwOCKoy2.cjs';
2
+
3
+ /**
4
+ * 包裹首次渲染过程,期间禁用响应式依赖收集。
5
+ * 支持嵌套调用:如果外层已经处于首次渲染优化期间,
6
+ * 内层调用不会提前重置标志位。
7
+ */
8
+ declare function withFirstRenderOptimization<T>(fn: () => T): T;
9
+ /**
10
+ * 检查当前是否应跳过响应式依赖收集。
11
+ * 在 withFirstRenderOptimization 执行期间返回 true。
12
+ */
13
+ declare function shouldSkipTracking(): boolean;
14
+ /**
15
+ * 获取被跳过的追踪次数(用于调试和测试)。
16
+ */
17
+ declare function getSkippedTrackingCount(): number;
18
+ /**
19
+ * 重置被跳过的追踪计数(用于测试)。
20
+ */
21
+ declare function resetSkippedTrackingCount(): void;
22
+ /**
23
+ * 依赖集合类型,存储订阅某个响应式属性的所有 ReactiveEffect。
24
+ */
25
+ type Dep = Set<ReactiveEffect>;
26
+ /**
27
+ * 响应式副作用类。
28
+ * 封装一个副作用函数,支持依赖自动收集、调度执行和手动停止。
29
+ *
30
+ * 创建时会自动注册到当前活跃的 effectScope 中。
31
+ *
32
+ * @typeParam T - 副作用函数的返回值类型
33
+ *
34
+ * @example
35
+ * ```ts
36
+ * const eff = new ReactiveEffect(() => {
37
+ * console.log(state.count);
38
+ * });
39
+ * eff.run(); // 执行副作用,同时收集依赖
40
+ * eff.stop(); // 停止副作用,清理所有依赖
41
+ * ```
42
+ */
43
+ declare class ReactiveEffect<T = unknown> {
44
+ fn: () => T;
45
+ scheduler?: ((...args: unknown[]) => unknown) | undefined;
46
+ active: boolean;
47
+ deps: Dep[];
48
+ parent: ReactiveEffect | undefined;
49
+ computed?: boolean;
50
+ allowRecurse?: boolean;
51
+ onStop?: () => void;
52
+ onTrack?: (event: {
53
+ target: object;
54
+ key: string | symbol;
55
+ type: string;
56
+ }) => void;
57
+ onTrigger?: (event: {
58
+ target: object;
59
+ key: string | symbol;
60
+ type: string;
61
+ newValue?: unknown;
62
+ oldValue?: unknown;
63
+ }) => void;
64
+ onError?: (error: Error) => void;
65
+ _cleanups: Array<() => void>;
66
+ constructor(fn: () => T, scheduler?: ((...args: unknown[]) => unknown) | undefined);
67
+ run(): T | undefined;
68
+ stop(): void;
69
+ }
70
+ /**
71
+ * 创建一个响应式副作用并立即执行。
72
+ *
73
+ * 副作用函数会在执行期间自动追踪所使用的响应式属性,
74
+ * 当这些属性发生变化时,副作用会重新执行。
75
+ *
76
+ * @param fn - 副作用函数,返回 void
77
+ * @param options - 配置选项
78
+ * @param options.lazy - 是否延迟执行(false 时立即执行)
79
+ * @param options.scheduler - 自定义调度器,替代默认的立即执行行为
80
+ * @param options.allowRecurse - 是否允许副作用递归触发自身
81
+ * @param options.onStop - 副作用停止时的回调
82
+ * @param options.onTrack - 依赖被追踪时的调试回调
83
+ * @param options.onTrigger - 依赖被触发时的调试回调
84
+ * @returns 副作用运行器,可调用 run() 手动执行或 stop() 停止
85
+ */
86
+ declare function effect(fn: () => void, options?: {
87
+ lazy?: false;
88
+ scheduler?: (...args: unknown[]) => unknown;
89
+ allowRecurse?: boolean;
90
+ onStop?: () => void;
91
+ onTrack?: (event: {
92
+ target: object;
93
+ key: string | symbol;
94
+ type: string;
95
+ }) => void;
96
+ onTrigger?: (event: {
97
+ target: object;
98
+ key: string | symbol;
99
+ type: string;
100
+ newValue?: unknown;
101
+ oldValue?: unknown;
102
+ }) => void;
103
+ }): ReactiveEffectRunner<void>;
104
+ declare function effect<T>(fn: () => T, options: {
105
+ lazy: true;
106
+ scheduler?: (...args: unknown[]) => unknown;
107
+ allowRecurse?: boolean;
108
+ onStop?: () => void;
109
+ onTrack?: (event: {
110
+ target: object;
111
+ key: string | symbol;
112
+ type: string;
113
+ }) => void;
114
+ onTrigger?: (event: {
115
+ target: object;
116
+ key: string | symbol;
117
+ type: string;
118
+ newValue?: unknown;
119
+ oldValue?: unknown;
120
+ }) => void;
121
+ }): ReactiveEffectRunner<T>;
122
+ /**
123
+ * 停止一个响应式副作用。
124
+ * 清理所有依赖关系,并调用 onStop 回调。
125
+ *
126
+ * @param runner - 由 effect() 返回的副作用运行器
127
+ */
128
+ declare function stop(runner: ReactiveEffectRunner): void;
129
+ /**
130
+ * 暂停依赖追踪。
131
+ * 调用后,响应式属性的读取不会建立依赖关系。
132
+ * 可通过 resetTracking() 恢复。
133
+ */
134
+ declare function pauseTracking(): void;
135
+ /**
136
+ * 启用依赖追踪。
137
+ * 将当前追踪状态压入栈中并设为 true。
138
+ * 可通过 resetTracking() 恢复到之前的状态。
139
+ */
140
+ declare function enableTracking(): void;
141
+ /**
142
+ * 重置依赖追踪状态到上一次暂停/启用之前的状态。
143
+ * 从追踪栈中弹出最近的状态并恢复。
144
+ */
145
+ declare function resetTracking(): void;
146
+ /**
147
+ * 批量执行函数,期间暂停依赖追踪。
148
+ * 与 signalBatch 不同,batch 侧重于暂停追踪而非延迟通知。
149
+ * 支持嵌套调用,内层 batch 不会提前恢复追踪状态。
150
+ *
151
+ * @param fn - 需要批量执行的函数
152
+ *
153
+ * @example
154
+ * ```ts
155
+ * batch(() => {
156
+ * state.a = 1; // 不会触发依赖更新
157
+ * state.b = 2; // 不会触发依赖更新
158
+ * }); // 函数结束后恢复追踪
159
+ * ```
160
+ */
161
+ declare function batch(fn: () => void): void;
162
+ /**
163
+ * batchAsync - like batch but supports async functions.
164
+ * Pauses tracking during fn execution (including after await),
165
+ * and restores tracking state when fn completes (or throws).
166
+ * Returns a Promise.
167
+ */
168
+ declare function batchAsync(fn: () => void | Promise<void>): Promise<void>;
169
+ /**
170
+ * untrack - execute fn without tracking dependencies.
171
+ * Semantically different from batch: untrack means "run but don't track".
172
+ * Returns the return value of fn.
173
+ */
174
+ declare function untrack<T>(fn: () => T): T;
175
+ /**
176
+ * 在当前活跃的 effect 上注册一个清理回调。
177
+ * 该回调会在 effect 重新执行前或停止时被调用,用于清理副作用资源。
178
+ *
179
+ * @param fn - 清理回调函数
180
+ * @param failSilently - 当没有活跃 effect 时是否静默失败(默认 false,开发模式下会发出警告)
181
+ *
182
+ * @example
183
+ * ```ts
184
+ * effect(() => {
185
+ * const timer = setInterval(() => console.log('tick'), 1000);
186
+ * onEffectCleanup(() => clearInterval(timer));
187
+ * });
188
+ * ```
189
+ */
190
+ declare function onEffectCleanup(fn: () => void, failSilently?: boolean): void;
191
+
192
+ type ReactiveEffectRunner<T = unknown> = {
193
+ (): T;
194
+ effect: ReactiveEffect;
195
+ };
196
+ type EffectScheduler = (...args: unknown[]) => unknown;
197
+ interface ReactiveEffectOptions {
198
+ lazy?: boolean;
199
+ scheduler?: EffectScheduler;
200
+ allowRecurse?: boolean;
201
+ onStop?: () => void;
202
+ onTrack?: (event: DebuggerEvent) => void;
203
+ onTrigger?: (event: DebuggerEvent) => void;
204
+ }
205
+ /**
206
+ * 调试事件
207
+ * 注意:此版本使用具体的 ReactiveEffect 类引用(生产者视角),
208
+ * 与 @lytjs/shared-types 中使用脱敏 ReactiveEffectRef 的版本不同。
209
+ * 保持此定义以避免类型不兼容(type: string vs 'track' | 'trigger')。
210
+ */
211
+ interface DebuggerEvent {
212
+ effect: ReactiveEffect;
213
+ target: object;
214
+ type: 'track' | 'trigger';
215
+ key: unknown;
216
+ }
217
+ interface WatchOptions<Immediate = boolean> {
218
+ immediate?: Immediate;
219
+ deep?: boolean;
220
+ flush?: 'pre' | 'post' | 'sync';
221
+ once?: boolean;
222
+ onTrack?: (event: DebuggerEvent) => void;
223
+ onTrigger?: (event: DebuggerEvent) => void;
224
+ scheduler?: WatchScheduler;
225
+ allowRecurse?: boolean;
226
+ }
227
+ interface WatchEffectOptions {
228
+ flush?: 'pre' | 'post' | 'sync';
229
+ once?: boolean;
230
+ onTrack?: (event: DebuggerEvent) => void;
231
+ onTrigger?: (event: DebuggerEvent) => void;
232
+ scheduler?: WatchScheduler;
233
+ allowRecurse?: boolean;
234
+ }
235
+ type WatchSource<T = unknown> = Ref<T> | (() => T) | object;
236
+ type WatchCallback<T = unknown, S = T> = (newValue: T, oldValue: S, onCleanup: OnCleanup) => void;
237
+ /**
238
+ * immediate 模式下 oldValue 为 undefined,否则为 T | undefined。
239
+ * 用于 watch 函数的回调类型推断。
240
+ */
241
+ type WatchCallbackWithImmediate<T, Immediate extends boolean> = WatchCallback<T, Immediate extends true ? undefined : T | undefined>;
242
+ type OnCleanup = (cleanupFn: () => void) => void;
243
+ type WatchHandle = () => void;
244
+ type WatchScheduler = (...args: unknown[]) => unknown;
245
+ type ComputedGetter<T> = () => T;
246
+ type ComputedSetter<T> = (newValue: T) => void;
247
+ interface WritableComputedOptions<T> {
248
+ get: ComputedGetter<T>;
249
+ set: ComputedSetter<T>;
250
+ }
251
+ type WritableComputedRef<T = unknown> = ComputedRef<T> & {
252
+ value: T;
253
+ };
254
+ type UnwrapRef<T> = T extends ShallowRef<infer V> ? V : T extends Ref<infer V> ? UnwrapRef<V> : T;
255
+ type UnwrapNestedRefs<T> = T extends Ref<infer V> ? UnwrapRef<V> : T extends object | ((...args: unknown[]) => unknown) ? {
256
+ [K in keyof T]: UnwrapNestedRefs<T[K]>;
257
+ } : T;
258
+ type DeepReadonly<T> = {
259
+ readonly [K in keyof T]: DeepReadonly<T[K]>;
260
+ };
261
+ type ToRefs<T = unknown> = {
262
+ [K in keyof T]: Ref<T[K]>;
263
+ };
264
+ type ReactiveObject<T extends object = object> = {
265
+ [K in keyof T]: T[K];
266
+ } & {
267
+ __v_isReactive: true;
268
+ };
269
+
270
+ export { type ComputedGetter as C, type DeepReadonly as D, type OnCleanup as O, type ReactiveEffectOptions as R, type ToRefs as T, type UnwrapNestedRefs as U, type WritableComputedOptions as W, type WritableComputedRef as a, type WatchSource as b, type WatchCallbackWithImmediate as c, type WatchOptions as d, type WatchHandle as e, type WatchEffectOptions as f, type ComputedSetter as g, type DebuggerEvent as h, type ReactiveEffectRunner as i, type ReactiveObject as j, type UnwrapRef as k, type WatchCallback as l, batch as m, batchAsync as n, effect as o, enableTracking as p, getSkippedTrackingCount as q, onEffectCleanup as r, pauseTracking as s, resetSkippedTrackingCount as t, resetTracking as u, shouldSkipTracking as v, stop as w, untrack as x, withFirstRenderOptimization as y, ReactiveEffect as z };
@@ -0,0 +1,270 @@
1
+ import { R as Ref, S as ShallowRef, C as ComputedRef } from './ref-CwOCKoy2.js';
2
+
3
+ /**
4
+ * 包裹首次渲染过程,期间禁用响应式依赖收集。
5
+ * 支持嵌套调用:如果外层已经处于首次渲染优化期间,
6
+ * 内层调用不会提前重置标志位。
7
+ */
8
+ declare function withFirstRenderOptimization<T>(fn: () => T): T;
9
+ /**
10
+ * 检查当前是否应跳过响应式依赖收集。
11
+ * 在 withFirstRenderOptimization 执行期间返回 true。
12
+ */
13
+ declare function shouldSkipTracking(): boolean;
14
+ /**
15
+ * 获取被跳过的追踪次数(用于调试和测试)。
16
+ */
17
+ declare function getSkippedTrackingCount(): number;
18
+ /**
19
+ * 重置被跳过的追踪计数(用于测试)。
20
+ */
21
+ declare function resetSkippedTrackingCount(): void;
22
+ /**
23
+ * 依赖集合类型,存储订阅某个响应式属性的所有 ReactiveEffect。
24
+ */
25
+ type Dep = Set<ReactiveEffect>;
26
+ /**
27
+ * 响应式副作用类。
28
+ * 封装一个副作用函数,支持依赖自动收集、调度执行和手动停止。
29
+ *
30
+ * 创建时会自动注册到当前活跃的 effectScope 中。
31
+ *
32
+ * @typeParam T - 副作用函数的返回值类型
33
+ *
34
+ * @example
35
+ * ```ts
36
+ * const eff = new ReactiveEffect(() => {
37
+ * console.log(state.count);
38
+ * });
39
+ * eff.run(); // 执行副作用,同时收集依赖
40
+ * eff.stop(); // 停止副作用,清理所有依赖
41
+ * ```
42
+ */
43
+ declare class ReactiveEffect<T = unknown> {
44
+ fn: () => T;
45
+ scheduler?: ((...args: unknown[]) => unknown) | undefined;
46
+ active: boolean;
47
+ deps: Dep[];
48
+ parent: ReactiveEffect | undefined;
49
+ computed?: boolean;
50
+ allowRecurse?: boolean;
51
+ onStop?: () => void;
52
+ onTrack?: (event: {
53
+ target: object;
54
+ key: string | symbol;
55
+ type: string;
56
+ }) => void;
57
+ onTrigger?: (event: {
58
+ target: object;
59
+ key: string | symbol;
60
+ type: string;
61
+ newValue?: unknown;
62
+ oldValue?: unknown;
63
+ }) => void;
64
+ onError?: (error: Error) => void;
65
+ _cleanups: Array<() => void>;
66
+ constructor(fn: () => T, scheduler?: ((...args: unknown[]) => unknown) | undefined);
67
+ run(): T | undefined;
68
+ stop(): void;
69
+ }
70
+ /**
71
+ * 创建一个响应式副作用并立即执行。
72
+ *
73
+ * 副作用函数会在执行期间自动追踪所使用的响应式属性,
74
+ * 当这些属性发生变化时,副作用会重新执行。
75
+ *
76
+ * @param fn - 副作用函数,返回 void
77
+ * @param options - 配置选项
78
+ * @param options.lazy - 是否延迟执行(false 时立即执行)
79
+ * @param options.scheduler - 自定义调度器,替代默认的立即执行行为
80
+ * @param options.allowRecurse - 是否允许副作用递归触发自身
81
+ * @param options.onStop - 副作用停止时的回调
82
+ * @param options.onTrack - 依赖被追踪时的调试回调
83
+ * @param options.onTrigger - 依赖被触发时的调试回调
84
+ * @returns 副作用运行器,可调用 run() 手动执行或 stop() 停止
85
+ */
86
+ declare function effect(fn: () => void, options?: {
87
+ lazy?: false;
88
+ scheduler?: (...args: unknown[]) => unknown;
89
+ allowRecurse?: boolean;
90
+ onStop?: () => void;
91
+ onTrack?: (event: {
92
+ target: object;
93
+ key: string | symbol;
94
+ type: string;
95
+ }) => void;
96
+ onTrigger?: (event: {
97
+ target: object;
98
+ key: string | symbol;
99
+ type: string;
100
+ newValue?: unknown;
101
+ oldValue?: unknown;
102
+ }) => void;
103
+ }): ReactiveEffectRunner<void>;
104
+ declare function effect<T>(fn: () => T, options: {
105
+ lazy: true;
106
+ scheduler?: (...args: unknown[]) => unknown;
107
+ allowRecurse?: boolean;
108
+ onStop?: () => void;
109
+ onTrack?: (event: {
110
+ target: object;
111
+ key: string | symbol;
112
+ type: string;
113
+ }) => void;
114
+ onTrigger?: (event: {
115
+ target: object;
116
+ key: string | symbol;
117
+ type: string;
118
+ newValue?: unknown;
119
+ oldValue?: unknown;
120
+ }) => void;
121
+ }): ReactiveEffectRunner<T>;
122
+ /**
123
+ * 停止一个响应式副作用。
124
+ * 清理所有依赖关系,并调用 onStop 回调。
125
+ *
126
+ * @param runner - 由 effect() 返回的副作用运行器
127
+ */
128
+ declare function stop(runner: ReactiveEffectRunner): void;
129
+ /**
130
+ * 暂停依赖追踪。
131
+ * 调用后,响应式属性的读取不会建立依赖关系。
132
+ * 可通过 resetTracking() 恢复。
133
+ */
134
+ declare function pauseTracking(): void;
135
+ /**
136
+ * 启用依赖追踪。
137
+ * 将当前追踪状态压入栈中并设为 true。
138
+ * 可通过 resetTracking() 恢复到之前的状态。
139
+ */
140
+ declare function enableTracking(): void;
141
+ /**
142
+ * 重置依赖追踪状态到上一次暂停/启用之前的状态。
143
+ * 从追踪栈中弹出最近的状态并恢复。
144
+ */
145
+ declare function resetTracking(): void;
146
+ /**
147
+ * 批量执行函数,期间暂停依赖追踪。
148
+ * 与 signalBatch 不同,batch 侧重于暂停追踪而非延迟通知。
149
+ * 支持嵌套调用,内层 batch 不会提前恢复追踪状态。
150
+ *
151
+ * @param fn - 需要批量执行的函数
152
+ *
153
+ * @example
154
+ * ```ts
155
+ * batch(() => {
156
+ * state.a = 1; // 不会触发依赖更新
157
+ * state.b = 2; // 不会触发依赖更新
158
+ * }); // 函数结束后恢复追踪
159
+ * ```
160
+ */
161
+ declare function batch(fn: () => void): void;
162
+ /**
163
+ * batchAsync - like batch but supports async functions.
164
+ * Pauses tracking during fn execution (including after await),
165
+ * and restores tracking state when fn completes (or throws).
166
+ * Returns a Promise.
167
+ */
168
+ declare function batchAsync(fn: () => void | Promise<void>): Promise<void>;
169
+ /**
170
+ * untrack - execute fn without tracking dependencies.
171
+ * Semantically different from batch: untrack means "run but don't track".
172
+ * Returns the return value of fn.
173
+ */
174
+ declare function untrack<T>(fn: () => T): T;
175
+ /**
176
+ * 在当前活跃的 effect 上注册一个清理回调。
177
+ * 该回调会在 effect 重新执行前或停止时被调用,用于清理副作用资源。
178
+ *
179
+ * @param fn - 清理回调函数
180
+ * @param failSilently - 当没有活跃 effect 时是否静默失败(默认 false,开发模式下会发出警告)
181
+ *
182
+ * @example
183
+ * ```ts
184
+ * effect(() => {
185
+ * const timer = setInterval(() => console.log('tick'), 1000);
186
+ * onEffectCleanup(() => clearInterval(timer));
187
+ * });
188
+ * ```
189
+ */
190
+ declare function onEffectCleanup(fn: () => void, failSilently?: boolean): void;
191
+
192
+ type ReactiveEffectRunner<T = unknown> = {
193
+ (): T;
194
+ effect: ReactiveEffect;
195
+ };
196
+ type EffectScheduler = (...args: unknown[]) => unknown;
197
+ interface ReactiveEffectOptions {
198
+ lazy?: boolean;
199
+ scheduler?: EffectScheduler;
200
+ allowRecurse?: boolean;
201
+ onStop?: () => void;
202
+ onTrack?: (event: DebuggerEvent) => void;
203
+ onTrigger?: (event: DebuggerEvent) => void;
204
+ }
205
+ /**
206
+ * 调试事件
207
+ * 注意:此版本使用具体的 ReactiveEffect 类引用(生产者视角),
208
+ * 与 @lytjs/shared-types 中使用脱敏 ReactiveEffectRef 的版本不同。
209
+ * 保持此定义以避免类型不兼容(type: string vs 'track' | 'trigger')。
210
+ */
211
+ interface DebuggerEvent {
212
+ effect: ReactiveEffect;
213
+ target: object;
214
+ type: 'track' | 'trigger';
215
+ key: unknown;
216
+ }
217
+ interface WatchOptions<Immediate = boolean> {
218
+ immediate?: Immediate;
219
+ deep?: boolean;
220
+ flush?: 'pre' | 'post' | 'sync';
221
+ once?: boolean;
222
+ onTrack?: (event: DebuggerEvent) => void;
223
+ onTrigger?: (event: DebuggerEvent) => void;
224
+ scheduler?: WatchScheduler;
225
+ allowRecurse?: boolean;
226
+ }
227
+ interface WatchEffectOptions {
228
+ flush?: 'pre' | 'post' | 'sync';
229
+ once?: boolean;
230
+ onTrack?: (event: DebuggerEvent) => void;
231
+ onTrigger?: (event: DebuggerEvent) => void;
232
+ scheduler?: WatchScheduler;
233
+ allowRecurse?: boolean;
234
+ }
235
+ type WatchSource<T = unknown> = Ref<T> | (() => T) | object;
236
+ type WatchCallback<T = unknown, S = T> = (newValue: T, oldValue: S, onCleanup: OnCleanup) => void;
237
+ /**
238
+ * immediate 模式下 oldValue 为 undefined,否则为 T | undefined。
239
+ * 用于 watch 函数的回调类型推断。
240
+ */
241
+ type WatchCallbackWithImmediate<T, Immediate extends boolean> = WatchCallback<T, Immediate extends true ? undefined : T | undefined>;
242
+ type OnCleanup = (cleanupFn: () => void) => void;
243
+ type WatchHandle = () => void;
244
+ type WatchScheduler = (...args: unknown[]) => unknown;
245
+ type ComputedGetter<T> = () => T;
246
+ type ComputedSetter<T> = (newValue: T) => void;
247
+ interface WritableComputedOptions<T> {
248
+ get: ComputedGetter<T>;
249
+ set: ComputedSetter<T>;
250
+ }
251
+ type WritableComputedRef<T = unknown> = ComputedRef<T> & {
252
+ value: T;
253
+ };
254
+ type UnwrapRef<T> = T extends ShallowRef<infer V> ? V : T extends Ref<infer V> ? UnwrapRef<V> : T;
255
+ type UnwrapNestedRefs<T> = T extends Ref<infer V> ? UnwrapRef<V> : T extends object | ((...args: unknown[]) => unknown) ? {
256
+ [K in keyof T]: UnwrapNestedRefs<T[K]>;
257
+ } : T;
258
+ type DeepReadonly<T> = {
259
+ readonly [K in keyof T]: DeepReadonly<T[K]>;
260
+ };
261
+ type ToRefs<T = unknown> = {
262
+ [K in keyof T]: Ref<T[K]>;
263
+ };
264
+ type ReactiveObject<T extends object = object> = {
265
+ [K in keyof T]: T[K];
266
+ } & {
267
+ __v_isReactive: true;
268
+ };
269
+
270
+ export { type ComputedGetter as C, type DeepReadonly as D, type OnCleanup as O, type ReactiveEffectOptions as R, type ToRefs as T, type UnwrapNestedRefs as U, type WritableComputedOptions as W, type WritableComputedRef as a, type WatchSource as b, type WatchCallbackWithImmediate as c, type WatchOptions as d, type WatchHandle as e, type WatchEffectOptions as f, type ComputedSetter as g, type DebuggerEvent as h, type ReactiveEffectRunner as i, type ReactiveObject as j, type UnwrapRef as k, type WatchCallback as l, batch as m, batchAsync as n, effect as o, enableTracking as p, getSkippedTrackingCount as q, onEffectCleanup as r, pauseTracking as s, resetSkippedTrackingCount as t, resetTracking as u, shouldSkipTracking as v, stop as w, untrack as x, withFirstRenderOptimization as y, ReactiveEffect as z };
package/package.json CHANGED
@@ -1,56 +1,79 @@
1
1
  {
2
2
  "name": "@lytjs/reactivity",
3
- "version": "5.0.1",
4
- "description": "Lyt.js 响应式系统 - 提供响应式数据、计算属性、侦听器等核心响应式能力",
3
+ "version": "6.0.0",
4
+ "description": "LytJS reactive system - signals, refs, computed, watch, and effects",
5
+ "type": "module",
5
6
  "main": "./dist/index.cjs",
6
7
  "module": "./dist/index.mjs",
7
- "types": "./dist/types/index.d.ts",
8
+ "types": "./dist/index.d.ts",
8
9
  "exports": {
9
10
  ".": {
10
- "types": "./dist/types/index.d.ts",
11
+ "types": "./dist/index.d.ts",
11
12
  "import": "./dist/index.mjs",
12
- "require": "./dist/index.cjs",
13
- "default": "./dist/index.mjs"
13
+ "require": "./dist/index.cjs"
14
14
  },
15
15
  "./signal": {
16
- "types": "./dist/types/signal.d.ts",
16
+ "types": "./dist/signal.d.ts",
17
17
  "import": "./dist/signal.mjs",
18
- "require": "./dist/signal.cjs",
19
- "default": "./dist/signal.mjs"
18
+ "require": "./dist/signal.cjs"
19
+ },
20
+ "./signal-component": {
21
+ "types": "./dist/signal-component.d.ts",
22
+ "import": "./dist/signal-component.mjs",
23
+ "require": "./dist/signal-component.cjs"
24
+ },
25
+ "./scope": {
26
+ "types": "./dist/scope.d.ts",
27
+ "import": "./dist/scope.mjs",
28
+ "require": "./dist/scope.cjs"
29
+ },
30
+ "./async": {
31
+ "types": "./dist/async.d.ts",
32
+ "import": "./dist/async.mjs",
33
+ "require": "./dist/async.cjs"
20
34
  }
21
35
  },
22
- "sideEffects": false,
23
36
  "files": [
24
37
  "dist"
25
38
  ],
39
+ "sideEffects": false,
40
+ "scripts": {
41
+ "build": "tsup",
42
+ "dev": "tsup --watch",
43
+ "test": "vitest run",
44
+ "test:watch": "vitest",
45
+ "test:coverage": "vitest run --coverage",
46
+ "type-check": "tsc --noEmit",
47
+ "lint": "eslint \"src/**/*.ts\" \"tests/**/*.ts\"",
48
+ "clean": "rm -rf dist"
49
+ },
50
+ "dependencies": {
51
+ "@lytjs/shared-types": "^6.0.0",
52
+ "@lytjs/common-is": "^6.0.0",
53
+ "@lytjs/common-scheduler": "^6.0.0",
54
+ "@lytjs/common-error": "^6.0.0",
55
+ "@lytjs/common-constants": "^6.0.0",
56
+ "@lytjs/common-assertions": "^6.0.0"
57
+ },
58
+ "devDependencies": {
59
+ "tsup": "^8.0.0",
60
+ "typescript": "^5.4.0",
61
+ "vitest": "^1.6.0"
62
+ },
63
+ "peerDependencies": {},
26
64
  "license": "MIT",
27
- "author": "lytjs",
28
65
  "repository": {
29
66
  "type": "git",
30
- "url": "https://gitee.com/lytjs/lytjs"
67
+ "url": "https://gitee.com/lytjs/lytjs.git",
68
+ "directory": "packages/reactivity"
31
69
  },
32
- "homepage": "https://gitee.com/lytjs/lytjs",
33
70
  "keywords": [
34
- "lyt",
35
71
  "lytjs",
36
- "javascript",
37
- "framework",
38
- "frontend",
39
- "vue-like",
40
- "lightweight",
41
- "zero-dependency",
42
72
  "reactivity",
73
+ "signal",
74
+ "vue",
43
75
  "reactive",
44
- "ref",
45
76
  "computed",
46
- "watch",
47
- "effect",
48
- "响应式"
49
- ],
50
- "publishConfig": {
51
- "access": "public"
52
- },
53
- "dependencies": {
54
- "@lytjs/common": "^5.0.1"
55
- }
77
+ "watch"
78
+ ]
56
79
  }