@yiin/reactive-proxy-state 1.0.32 → 1.0.33

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/index.cjs CHANGED
@@ -3706,12 +3706,32 @@ function toRaw(observed) {
3706
3706
  const raw = observed && observed["__v_raw" /* RAW */];
3707
3707
  return raw ? toRaw(raw) : observed;
3708
3708
  }
3709
- function reactive(obj, emit, path = []) {
3709
+ function createAsyncEmit(emit) {
3710
+ const queue = [];
3711
+ let flushScheduled = false;
3712
+ return (event) => {
3713
+ queue.push(event);
3714
+ if (!flushScheduled) {
3715
+ flushScheduled = true;
3716
+ queueMicrotask(() => {
3717
+ flushScheduled = false;
3718
+ const batch = queue.splice(0);
3719
+ for (const queuedEvent of batch) {
3720
+ emit(queuedEvent);
3721
+ }
3722
+ });
3723
+ }
3724
+ };
3725
+ }
3726
+ function reactive(obj, emit, path = [], options) {
3710
3727
  if (obj["__v_skip" /* SKIP */]) {
3711
3728
  return obj;
3712
3729
  }
3713
3730
  if (globalSeen.has(obj))
3714
3731
  return globalSeen.get(obj);
3732
+ if (emit && path.length === 0 && options?.async) {
3733
+ emit = createAsyncEmit(emit);
3734
+ }
3715
3735
  if (emit && path.length === 0) {
3716
3736
  try {
3717
3737
  const initialEvent = {
package/dist/index.js CHANGED
@@ -3646,12 +3646,32 @@ function toRaw(observed) {
3646
3646
  const raw = observed && observed["__v_raw" /* RAW */];
3647
3647
  return raw ? toRaw(raw) : observed;
3648
3648
  }
3649
- function reactive(obj, emit, path = []) {
3649
+ function createAsyncEmit(emit) {
3650
+ const queue = [];
3651
+ let flushScheduled = false;
3652
+ return (event) => {
3653
+ queue.push(event);
3654
+ if (!flushScheduled) {
3655
+ flushScheduled = true;
3656
+ queueMicrotask(() => {
3657
+ flushScheduled = false;
3658
+ const batch = queue.splice(0);
3659
+ for (const queuedEvent of batch) {
3660
+ emit(queuedEvent);
3661
+ }
3662
+ });
3663
+ }
3664
+ };
3665
+ }
3666
+ function reactive(obj, emit, path = [], options) {
3650
3667
  if (obj["__v_skip" /* SKIP */]) {
3651
3668
  return obj;
3652
3669
  }
3653
3670
  if (globalSeen.has(obj))
3654
3671
  return globalSeen.get(obj);
3672
+ if (emit && path.length === 0 && options?.async) {
3673
+ emit = createAsyncEmit(emit);
3674
+ }
3655
3675
  if (emit && path.length === 0) {
3656
3676
  try {
3657
3677
  const initialEvent = {
@@ -1,4 +1,4 @@
1
- import { EmitFunction, Path } from "./types";
1
+ import { EmitFunction, Path, ReactiveOptions } from "./types";
2
2
  /**
3
3
  * Checks if an object is a reactive proxy
4
4
  */
@@ -11,4 +11,4 @@ export declare function toRaw<T>(observed: T): T;
11
11
  /**
12
12
  * Create a reactive proxy for an object
13
13
  */
14
- export declare function reactive<T extends object>(obj: T, emit?: EmitFunction, path?: Path): T;
14
+ export declare function reactive<T extends object>(obj: T, emit?: EmitFunction, path?: Path, options?: ReactiveOptions): T;
package/dist/types.d.ts CHANGED
@@ -12,6 +12,10 @@ export interface StateEvent {
12
12
  oldValues?: any[];
13
13
  }
14
14
  export type EmitFunction = (event: StateEvent) => void;
15
+ export interface ReactiveOptions {
16
+ /** When true, defers emit calls to the next microtask instead of firing synchronously */
17
+ async?: boolean;
18
+ }
15
19
  import { Ref } from './ref';
16
20
  import { ComputedRef } from './computed';
17
21
  export type BaseWatchSource<T = any> = Ref<T> | ComputedRef<T> | (() => T);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yiin/reactive-proxy-state",
3
- "version": "1.0.32",
3
+ "version": "1.0.33",
4
4
  "author": "Yiin <stanislovas@yiin.lt>",
5
5
  "repository": {
6
6
  "type": "git",