@meshflow/core 0.5.0 → 0.5.2

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.mts CHANGED
@@ -6,7 +6,7 @@ type Unwrap<T> = T extends ReadonlyArray<infer U> ? U : T;
6
6
  * @internal
7
7
  * */
8
8
  type InferLeafType<T> = Unwrap<T> extends infer Node ? Node extends {
9
- readonly name: any;
9
+ readonly path: any;
10
10
  } ? Node extends {
11
11
  readonly children: infer C;
12
12
  } ? InferLeafType<C> : Node : never : never;
@@ -14,7 +14,7 @@ type InferLeafType<T> = Unwrap<T> extends infer Node ? Node extends {
14
14
  * @internal
15
15
  * */
16
16
  type InferLeafPath<T, Prefix extends string = ""> = Unwrap<T> extends infer Node ? Node extends {
17
- readonly name: infer N;
17
+ readonly path: infer N;
18
18
  } ? N extends string ? N extends "" ? Node extends {
19
19
  readonly children: infer C;
20
20
  } ? InferLeafPath<C, Prefix> : never : (Node extends {
@@ -212,13 +212,13 @@ interface MeshFlowTaskNode<P extends MeshPath = MeshPath, V = any, NM = any> {
212
212
  uid: number;
213
213
  type: string;
214
214
  state: V;
215
- nodeBucket: Record<keyof NM, number>;
216
- notifyKeys: Set<keyof NM>;
215
+ nodeBucket: Record<SuggestKey<NM>, number>;
216
+ notifyKeys: Set<SuggestKey<NM>>;
217
217
  dirtySignal: any;
218
218
  proxy: MeshNodeProxy<MeshFlowTaskNode<P, V, NM>, V, NM>;
219
219
  calledBy: TriggerCause;
220
220
  meta: NM;
221
- dependOn: (cb: (val: V) => V, key?: keyof NM) => void;
221
+ dependOn: (cb: (val: V) => V, key?: SuggestKey<NM>) => void;
222
222
  createView: <E extends Record<string, any> = {}>(extraProps?: E) => MeshNodeProxy<MeshFlowTaskNode<P, V, NM>, V, NM, E>;
223
223
  }
224
224
  /**
@@ -269,7 +269,7 @@ type InternalKeys = 'path' | 'uid' | 'type' | 'meta' | 'state';
269
269
  * @typeParam TKeys - 当前节点关联的键集合
270
270
  * @params logic - 桶计算的逻辑块,一个桶里面可以装多个逻辑块,根据策略进行计算,逻辑块入参参考{}
271
271
  */
272
- interface SetRuleOptions<NM, TKeys extends KeysOfUnion<NM>> {
272
+ interface SetRuleOptions<NM, TKeys extends SuggestKey<NM>> {
273
273
  /**
274
274
  * 结果覆盖值 (静态产出)
275
275
  * * @description
@@ -359,7 +359,7 @@ type EntangleOp = "add" | "intersect" | "union" | "merge" | "remove";
359
359
  * @group 参数类型
360
360
  * @category 纠缠设置
361
361
  */
362
- interface GhostProposalApi<T> {
362
+ interface GhostProposalApi<State, NM> {
363
363
  /**
364
364
  * 提交【绝对值覆盖】提案
365
365
  * @description 直接用新值覆盖目标节点的指定状态。
@@ -367,7 +367,7 @@ interface GhostProposalApi<T> {
367
367
  * @param value 期望设置的新值
368
368
  * @param weight 提案权重 (默认: 1)。当同一批次内有多个规则试图 `set` 同一个 key 时,权重最高者获胜。
369
369
  */
370
- set: (key: string, value: any, weight?: number) => void;
370
+ set: (key: SuggestKey<NM>, value: any, weight?: number) => void;
371
371
  /**
372
372
  * 提交【增量运算】提案
373
373
  * @description 提交一个增量操作,引擎会在清算时将其与目标节点的旧值进行合并计算。
@@ -375,7 +375,7 @@ interface GhostProposalApi<T> {
375
375
  * @param delta 增量数据 (如累加的数值、需追加的数组元素)
376
376
  * @param op 运算策略 (默认: 'add')。支持:累加(add)、移除(remove)、交集(intersect)、并集(union)、深度合并(merge)。
377
377
  */
378
- update: (key: string, delta: any, op?: EntangleOp) => void;
378
+ update: (key: SuggestKey<NM>, delta: any, op?: EntangleOp) => void;
379
379
  /**
380
380
  * 提交【函数式补丁】提案
381
381
  * @description 基于目标节点的当前状态进行纯函数推导,适用于高度依赖旧值的复杂状态计算。
@@ -386,7 +386,7 @@ interface GhostProposalApi<T> {
386
386
  * 但由于其返回对象通常会触发堆内存分配,在高频纠缠的情况下会显著增加 GC压力。
387
387
  * 为了追求极致的内存性能并减少 GC 压力,请优先考虑性能更优的update方法。
388
388
  */
389
- patch: (key: string, patchFn: (oldState: T) => T) => void;
389
+ patch: <K extends SuggestKey<NM>, V = IsAny<State> extends false ? State : IsNever<NM> extends true ? any : (IsAny<NM> extends false ? (K extends keyof NM ? NM[K] : any) : any)>(key: K, patchFn: (oldState: V) => V) => void;
390
390
  }
391
391
  /**
392
392
  * 幽灵提案数据载体 (Internal Ghost Payload)
@@ -405,22 +405,30 @@ type EntangleGhost<T = any> = {
405
405
  op?: EntangleOp;
406
406
  patch?: (oldState: T) => T;
407
407
  };
408
+ /**
409
+ * @internal
410
+ * */
411
+ type IsAny<T> = 0 extends (1 & T) ? true : false;
412
+ /**
413
+ * @internal
414
+ * */
415
+ type IsNever<T> = [T] extends [never] ? true : false;
408
416
  /**
409
417
  * 量子纠缠机制的配置选项
410
418
  * @typeParam P - 路径标识类型
411
419
  * @group 参数类型
412
420
  * @category 纠缠设置
413
421
  */
414
- type EntangleArgType<P extends MeshPath, IsProxy extends boolean = boolean> = {
422
+ type EntangleArgType<P extends MeshPath, State = any, NM = any, IsProxy extends boolean = boolean> = {
415
423
  cause: P;
416
424
  impact: P;
417
- via: string[];
425
+ via: Array<SuggestKey<NM>>;
418
426
  isProxy?: IsProxy;
419
427
  filter?: (cause: IsProxy extends true ? any : MeshFlowTaskNode<P>, impact: IsProxy extends true ? any : MeshFlowTaskNode<P>) => boolean;
420
428
  /**
421
429
  * @params propose 提案调用参考{@link GhostProposalApi}
422
430
  */
423
- emit: <T>(cause: IsProxy extends true ? any : MeshFlowTaskNode<P>, impact: IsProxy extends true ? any : MeshFlowTaskNode<P>, propose: GhostProposalApi<T>) => void | EntangleGhost<T> | undefined | Promise<void | EntangleGhost<T> | undefined>;
431
+ emit: (cause: IsProxy extends true ? any : MeshFlowTaskNode<P>, impact: IsProxy extends true ? any : MeshFlowTaskNode<P>, propose: GhostProposalApi<State, NM>) => void | EntangleGhost<State> | undefined | Promise<void | EntangleGhost<State> | undefined>;
424
432
  };
425
433
  /**
426
434
  * 引擎点火溯源标识 (Trigger Cause)
@@ -496,6 +504,7 @@ declare enum DefaultStrategy {
496
504
  */
497
505
  MERGE = "MERGE"
498
506
  }
507
+ type SuggestKey<T> = IsAny<T> extends true ? MeshPath : IsNever<T> extends true ? MeshPath : (T extends any ? keyof T : never) | (string & {});
499
508
 
500
509
  type ContractType = "boolean" | "scalar" | "array" | "object";
501
510
  /**
@@ -634,10 +643,10 @@ declare function useEngineInstance<T, P extends MeshPath, S = any, M extends Rec
634
643
  } & M;
635
644
  plugins: {};
636
645
  }): {
637
- SetRule: <TKeys extends KeysOfUnion<NM>>(outDegreePath: P, inDegreePath: P, key: KeysOfUnion<NM> | (string & {}), options: SetRuleOptions<NM, TKeys>) => void;
646
+ SetRule: <K extends SuggestKey<NM>, TKeys extends SuggestKey<NM> = SuggestKey<NM>>(outDegreePath: P, inDegreePath: P, key: K, options: SetRuleOptions<NM, TKeys>) => void;
638
647
  SetRules: <TKeys extends KeysOfUnion<NM>>(outDegreePaths: P[], inDegreePath: P, key: KeysOfUnion<NM> | (string & {}), options: SetRuleOptions<NM, TKeys>) => void;
639
648
  SetStrategy: (path: P, key: KeysOfUnion<NM>, strategy: DefaultStrategy) => void;
640
- useEntangle: (config: EntangleArgType<P>) => void;
649
+ useEntangle: <State = any>(config: EntangleArgType<P, State, NM>) => void;
641
650
  SetTrace: (myPath: P, onUpdate: (newStatus: "idle" | "pending" | "calculating" | "calculated" | "error" | "canceled") => void) => {
642
651
  cancel: () => void;
643
652
  };
@@ -646,11 +655,11 @@ declare function useEngineInstance<T, P extends MeshPath, S = any, M extends Rec
646
655
  on: (event: MeshEventName, cb: Function) => () => boolean | undefined;
647
656
  }) => void;
648
657
  }) => () => void;
649
- SetValue: (path: P, key: KeysOfUnion<NM> | (string & {}), value: any) => void;
658
+ SetValue: (path: P, key: SuggestKey<NM>, value: any) => void;
650
659
  GetValue: (path: P, key?: string) => any;
651
660
  SetValues: (updates: {
652
661
  path: P;
653
- key: KeysOfUnion<NM> | (string & {});
662
+ key: SuggestKey<NM>;
654
663
  value: any;
655
664
  }[]) => void;
656
665
  GetGroupByPath: (path: MeshPath) => MeshFlowGroupNode<MeshPath>;
@@ -683,7 +692,7 @@ declare function useEngineInstance<T, P extends MeshPath, S = any, M extends Rec
683
692
  notifyAll: () => Promise<void>;
684
693
  batchNotify: (updates: {
685
694
  path: P;
686
- key: (string & {}) | KeysOfUnion<NM>;
695
+ key: SuggestKey<NM>;
687
696
  value: any;
688
697
  }[]) => void;
689
698
  useEntangle: (config: EntangleArgType<P>) => void;
@@ -691,11 +700,13 @@ declare function useEngineInstance<T, P extends MeshPath, S = any, M extends Rec
691
700
  SetBucket: (newBucket: SchemaBucket<P>) => number;
692
701
  GetBucket: (bucketId: number) => SchemaBucket<P>;
693
702
  CancelTask: () => void;
703
+ stageValueFn: (uid: number, key: SuggestKey<NM>, value: any) => void;
694
704
  UITrigger: any;
695
705
  UidToNodeMap: MeshFlowTaskNode<P, any, NM>[];
696
706
  };
697
707
  destroyPlugin: () => void;
698
708
  CancelTask: () => void;
709
+ StageValue: (path: P, key: SuggestKey<NM>, value: any) => void;
699
710
  };
700
711
 
701
712
  /**
@@ -732,7 +743,7 @@ B extends Record<string, any> = StandardUITrigger<T>, NM = any>(config: {
732
743
  notifyAll: () => Promise<void>;
733
744
  batchNotify: (updates: {
734
745
  path: P;
735
- key: KeysOfUnion<NM> | (string & {});
746
+ key: SuggestKey<NM>;
736
747
  value: any;
737
748
  }[]) => void;
738
749
  useEntangle: (config: EntangleArgType<P>) => void;
@@ -740,6 +751,7 @@ B extends Record<string, any> = StandardUITrigger<T>, NM = any>(config: {
740
751
  SetBucket: (newBucket: SchemaBucket<P>) => number;
741
752
  GetBucket: (bucketId: number) => SchemaBucket<P>;
742
753
  CancelTask: () => void;
754
+ stageValueFn: (uid: number, key: SuggestKey<NM>, value: any) => void;
743
755
  UITrigger: B;
744
756
  UidToNodeMap: MeshFlowTaskNode<P, any, NM>[];
745
757
  };
@@ -765,6 +777,9 @@ type BaseEngine<T> = {
765
777
  GetGroupByPath: T extends {
766
778
  GetGroupByPath: infer F;
767
779
  } ? F : never;
780
+ StageValue: T extends {
781
+ StageValue: infer F;
782
+ } ? F : never;
768
783
  };
769
784
  config: {
770
785
  SetRule: T extends {
@@ -837,6 +852,12 @@ type EngineModules<M extends Record<string, any>, P extends MeshPath> = {
837
852
  type Engine<T, M extends Record<string, any>, P extends MeshPath> = BaseEngine<T> & {
838
853
  modules: EngineModules<M, P>;
839
854
  };
855
+ type StripReadonly<T> = T extends Function ? T : T extends readonly any[] ? {
856
+ -readonly [K in keyof T]: StripReadonly<T[K]>;
857
+ } : T extends object ? {
858
+ -readonly [K in keyof T]: StripReadonly<T[K]>;
859
+ } : T;
860
+ type NormalizeSchema<T> = T extends readonly any[] ? (T["length"] extends 0 ? Record<string, any> : StripReadonly<T[0]>) : StripReadonly<T>;
840
861
  /**
841
862
  * 初始化并获取 MeshFlow 引擎实例
842
863
  * * @description
@@ -848,8 +869,8 @@ type Engine<T, M extends Record<string, any>, P extends MeshPath> = BaseEngine<T
848
869
  * @param Schema 类型定义模板(仅用于 TS 类型约束,不参与运行逻辑),注册节点通过模块的方式进行
849
870
  * @param options 引擎配置项与扩展模块 {@link MeshFlowOptions}
850
871
  */
851
- declare const useMeshFlow: <const S extends Record<string, any> | any[], T, //UITrigger的类型
852
- M extends Record<string, any>, NM extends Record<string, any> = InferLeafType<S>, P extends MeshPath = [InferLeafPath<S>] extends [never] ? MeshPath : InferLeafPath<S> | (string & {})>(id: MeshPath, Schema: S, options: {
872
+ declare const useMeshFlow: <const S extends Record<string, any> | readonly Record<string, any>[], T, //UITrigger的类型
873
+ M extends Record<string, any>, NM extends Record<string, any> = IsNever<NormalizeSchema<S>> extends true ? Record<KeysOfUnion<NormalizeSchema<S>>, any> : InferLeafType<S>, P extends MeshPath = [InferLeafPath<S>] extends [never] ? MeshPath : InferLeafPath<S> | (string & {})>(id: MeshPath, Schema: S, options: {
853
874
  metaType?: NM;
854
875
  config?: {
855
876
  useGreedy: boolean;
@@ -861,10 +882,10 @@ M extends Record<string, any>, NM extends Record<string, any> = InferLeafType<S>
861
882
  signalTrigger: (signal: T) => void;
862
883
  };
863
884
  }) => Engine<{
864
- SetRule: <TKeys extends KeysOfUnion<NM>>(outDegreePath: P, inDegreePath: P, key: (string & {}) | KeysOfUnion<NM>, options: SetRuleOptions<NM, TKeys>) => void;
865
- SetRules: <TKeys extends KeysOfUnion<NM>>(outDegreePaths: P[], inDegreePath: P, key: (string & {}) | KeysOfUnion<NM>, options: SetRuleOptions<NM, TKeys>) => void;
885
+ SetRule: <K extends SuggestKey<NM>, TKeys extends SuggestKey<NM> = SuggestKey<NM>>(outDegreePath: P, inDegreePath: P, key: K, options: SetRuleOptions<NM, TKeys>) => void;
886
+ SetRules: <TKeys_1 extends KeysOfUnion<NM>>(outDegreePaths: P[], inDegreePath: P, key: (string & {}) | KeysOfUnion<NM>, options: SetRuleOptions<NM, TKeys_1>) => void;
866
887
  SetStrategy: (path: P, key: KeysOfUnion<NM>, strategy: DefaultStrategy) => void;
867
- useEntangle: (config: EntangleArgType<P>) => void;
888
+ useEntangle: <State = any>(config: EntangleArgType<P, State, NM>) => void;
868
889
  SetTrace: (myPath: P, onUpdate: (newStatus: "idle" | "pending" | "calculating" | "calculated" | "error" | "canceled") => void) => {
869
890
  cancel: () => void;
870
891
  };
@@ -873,11 +894,11 @@ M extends Record<string, any>, NM extends Record<string, any> = InferLeafType<S>
873
894
  on: (event: MeshEventName, cb: Function) => () => boolean | undefined;
874
895
  }) => void;
875
896
  }) => () => void;
876
- SetValue: (path: P, key: (string & {}) | KeysOfUnion<NM>, value: any) => void;
897
+ SetValue: (path: P, key: SuggestKey<NM>, value: any) => void;
877
898
  GetValue: (path: P, key?: string) => any;
878
899
  SetValues: (updates: {
879
900
  path: P;
880
- key: (string & {}) | KeysOfUnion<NM>;
901
+ key: SuggestKey<NM>;
881
902
  value: any;
882
903
  }[]) => void;
883
904
  GetGroupByPath: (path: MeshPath) => MeshFlowGroupNode<MeshPath>;
@@ -910,7 +931,7 @@ M extends Record<string, any>, NM extends Record<string, any> = InferLeafType<S>
910
931
  notifyAll: () => Promise<void>;
911
932
  batchNotify: (updates: {
912
933
  path: P;
913
- key: (string & {}) | KeysOfUnion<NM>;
934
+ key: SuggestKey<NM>;
914
935
  value: any;
915
936
  }[]) => void;
916
937
  useEntangle: (config: EntangleArgType<P>) => void;
@@ -918,11 +939,13 @@ M extends Record<string, any>, NM extends Record<string, any> = InferLeafType<S>
918
939
  SetBucket: (newBucket: SchemaBucket<P>) => number;
919
940
  GetBucket: (bucketId: number) => SchemaBucket<P>;
920
941
  CancelTask: () => void;
942
+ stageValueFn: (uid: number, key: SuggestKey<NM>, value: any) => void;
921
943
  UITrigger: any;
922
944
  UidToNodeMap: MeshFlowTaskNode<P, any, NM>[];
923
945
  };
924
946
  destroyPlugin: () => void;
925
947
  CancelTask: () => void;
948
+ StageValue: (path: P, key: SuggestKey<NM>, value: any) => void;
926
949
  }, M, P>;
927
950
  /**
928
951
  * 类型工厂:锁定全局路径与元数据类型,生成定制化的实例化函数。
package/index.d.ts CHANGED
@@ -6,7 +6,7 @@ type Unwrap<T> = T extends ReadonlyArray<infer U> ? U : T;
6
6
  * @internal
7
7
  * */
8
8
  type InferLeafType<T> = Unwrap<T> extends infer Node ? Node extends {
9
- readonly name: any;
9
+ readonly path: any;
10
10
  } ? Node extends {
11
11
  readonly children: infer C;
12
12
  } ? InferLeafType<C> : Node : never : never;
@@ -14,7 +14,7 @@ type InferLeafType<T> = Unwrap<T> extends infer Node ? Node extends {
14
14
  * @internal
15
15
  * */
16
16
  type InferLeafPath<T, Prefix extends string = ""> = Unwrap<T> extends infer Node ? Node extends {
17
- readonly name: infer N;
17
+ readonly path: infer N;
18
18
  } ? N extends string ? N extends "" ? Node extends {
19
19
  readonly children: infer C;
20
20
  } ? InferLeafPath<C, Prefix> : never : (Node extends {
@@ -212,13 +212,13 @@ interface MeshFlowTaskNode<P extends MeshPath = MeshPath, V = any, NM = any> {
212
212
  uid: number;
213
213
  type: string;
214
214
  state: V;
215
- nodeBucket: Record<keyof NM, number>;
216
- notifyKeys: Set<keyof NM>;
215
+ nodeBucket: Record<SuggestKey<NM>, number>;
216
+ notifyKeys: Set<SuggestKey<NM>>;
217
217
  dirtySignal: any;
218
218
  proxy: MeshNodeProxy<MeshFlowTaskNode<P, V, NM>, V, NM>;
219
219
  calledBy: TriggerCause;
220
220
  meta: NM;
221
- dependOn: (cb: (val: V) => V, key?: keyof NM) => void;
221
+ dependOn: (cb: (val: V) => V, key?: SuggestKey<NM>) => void;
222
222
  createView: <E extends Record<string, any> = {}>(extraProps?: E) => MeshNodeProxy<MeshFlowTaskNode<P, V, NM>, V, NM, E>;
223
223
  }
224
224
  /**
@@ -269,7 +269,7 @@ type InternalKeys = 'path' | 'uid' | 'type' | 'meta' | 'state';
269
269
  * @typeParam TKeys - 当前节点关联的键集合
270
270
  * @params logic - 桶计算的逻辑块,一个桶里面可以装多个逻辑块,根据策略进行计算,逻辑块入参参考{}
271
271
  */
272
- interface SetRuleOptions<NM, TKeys extends KeysOfUnion<NM>> {
272
+ interface SetRuleOptions<NM, TKeys extends SuggestKey<NM>> {
273
273
  /**
274
274
  * 结果覆盖值 (静态产出)
275
275
  * * @description
@@ -359,7 +359,7 @@ type EntangleOp = "add" | "intersect" | "union" | "merge" | "remove";
359
359
  * @group 参数类型
360
360
  * @category 纠缠设置
361
361
  */
362
- interface GhostProposalApi<T> {
362
+ interface GhostProposalApi<State, NM> {
363
363
  /**
364
364
  * 提交【绝对值覆盖】提案
365
365
  * @description 直接用新值覆盖目标节点的指定状态。
@@ -367,7 +367,7 @@ interface GhostProposalApi<T> {
367
367
  * @param value 期望设置的新值
368
368
  * @param weight 提案权重 (默认: 1)。当同一批次内有多个规则试图 `set` 同一个 key 时,权重最高者获胜。
369
369
  */
370
- set: (key: string, value: any, weight?: number) => void;
370
+ set: (key: SuggestKey<NM>, value: any, weight?: number) => void;
371
371
  /**
372
372
  * 提交【增量运算】提案
373
373
  * @description 提交一个增量操作,引擎会在清算时将其与目标节点的旧值进行合并计算。
@@ -375,7 +375,7 @@ interface GhostProposalApi<T> {
375
375
  * @param delta 增量数据 (如累加的数值、需追加的数组元素)
376
376
  * @param op 运算策略 (默认: 'add')。支持:累加(add)、移除(remove)、交集(intersect)、并集(union)、深度合并(merge)。
377
377
  */
378
- update: (key: string, delta: any, op?: EntangleOp) => void;
378
+ update: (key: SuggestKey<NM>, delta: any, op?: EntangleOp) => void;
379
379
  /**
380
380
  * 提交【函数式补丁】提案
381
381
  * @description 基于目标节点的当前状态进行纯函数推导,适用于高度依赖旧值的复杂状态计算。
@@ -386,7 +386,7 @@ interface GhostProposalApi<T> {
386
386
  * 但由于其返回对象通常会触发堆内存分配,在高频纠缠的情况下会显著增加 GC压力。
387
387
  * 为了追求极致的内存性能并减少 GC 压力,请优先考虑性能更优的update方法。
388
388
  */
389
- patch: (key: string, patchFn: (oldState: T) => T) => void;
389
+ patch: <K extends SuggestKey<NM>, V = IsAny<State> extends false ? State : IsNever<NM> extends true ? any : (IsAny<NM> extends false ? (K extends keyof NM ? NM[K] : any) : any)>(key: K, patchFn: (oldState: V) => V) => void;
390
390
  }
391
391
  /**
392
392
  * 幽灵提案数据载体 (Internal Ghost Payload)
@@ -405,22 +405,30 @@ type EntangleGhost<T = any> = {
405
405
  op?: EntangleOp;
406
406
  patch?: (oldState: T) => T;
407
407
  };
408
+ /**
409
+ * @internal
410
+ * */
411
+ type IsAny<T> = 0 extends (1 & T) ? true : false;
412
+ /**
413
+ * @internal
414
+ * */
415
+ type IsNever<T> = [T] extends [never] ? true : false;
408
416
  /**
409
417
  * 量子纠缠机制的配置选项
410
418
  * @typeParam P - 路径标识类型
411
419
  * @group 参数类型
412
420
  * @category 纠缠设置
413
421
  */
414
- type EntangleArgType<P extends MeshPath, IsProxy extends boolean = boolean> = {
422
+ type EntangleArgType<P extends MeshPath, State = any, NM = any, IsProxy extends boolean = boolean> = {
415
423
  cause: P;
416
424
  impact: P;
417
- via: string[];
425
+ via: Array<SuggestKey<NM>>;
418
426
  isProxy?: IsProxy;
419
427
  filter?: (cause: IsProxy extends true ? any : MeshFlowTaskNode<P>, impact: IsProxy extends true ? any : MeshFlowTaskNode<P>) => boolean;
420
428
  /**
421
429
  * @params propose 提案调用参考{@link GhostProposalApi}
422
430
  */
423
- emit: <T>(cause: IsProxy extends true ? any : MeshFlowTaskNode<P>, impact: IsProxy extends true ? any : MeshFlowTaskNode<P>, propose: GhostProposalApi<T>) => void | EntangleGhost<T> | undefined | Promise<void | EntangleGhost<T> | undefined>;
431
+ emit: (cause: IsProxy extends true ? any : MeshFlowTaskNode<P>, impact: IsProxy extends true ? any : MeshFlowTaskNode<P>, propose: GhostProposalApi<State, NM>) => void | EntangleGhost<State> | undefined | Promise<void | EntangleGhost<State> | undefined>;
424
432
  };
425
433
  /**
426
434
  * 引擎点火溯源标识 (Trigger Cause)
@@ -496,6 +504,7 @@ declare enum DefaultStrategy {
496
504
  */
497
505
  MERGE = "MERGE"
498
506
  }
507
+ type SuggestKey<T> = IsAny<T> extends true ? MeshPath : IsNever<T> extends true ? MeshPath : (T extends any ? keyof T : never) | (string & {});
499
508
 
500
509
  type ContractType = "boolean" | "scalar" | "array" | "object";
501
510
  /**
@@ -634,10 +643,10 @@ declare function useEngineInstance<T, P extends MeshPath, S = any, M extends Rec
634
643
  } & M;
635
644
  plugins: {};
636
645
  }): {
637
- SetRule: <TKeys extends KeysOfUnion<NM>>(outDegreePath: P, inDegreePath: P, key: KeysOfUnion<NM> | (string & {}), options: SetRuleOptions<NM, TKeys>) => void;
646
+ SetRule: <K extends SuggestKey<NM>, TKeys extends SuggestKey<NM> = SuggestKey<NM>>(outDegreePath: P, inDegreePath: P, key: K, options: SetRuleOptions<NM, TKeys>) => void;
638
647
  SetRules: <TKeys extends KeysOfUnion<NM>>(outDegreePaths: P[], inDegreePath: P, key: KeysOfUnion<NM> | (string & {}), options: SetRuleOptions<NM, TKeys>) => void;
639
648
  SetStrategy: (path: P, key: KeysOfUnion<NM>, strategy: DefaultStrategy) => void;
640
- useEntangle: (config: EntangleArgType<P>) => void;
649
+ useEntangle: <State = any>(config: EntangleArgType<P, State, NM>) => void;
641
650
  SetTrace: (myPath: P, onUpdate: (newStatus: "idle" | "pending" | "calculating" | "calculated" | "error" | "canceled") => void) => {
642
651
  cancel: () => void;
643
652
  };
@@ -646,11 +655,11 @@ declare function useEngineInstance<T, P extends MeshPath, S = any, M extends Rec
646
655
  on: (event: MeshEventName, cb: Function) => () => boolean | undefined;
647
656
  }) => void;
648
657
  }) => () => void;
649
- SetValue: (path: P, key: KeysOfUnion<NM> | (string & {}), value: any) => void;
658
+ SetValue: (path: P, key: SuggestKey<NM>, value: any) => void;
650
659
  GetValue: (path: P, key?: string) => any;
651
660
  SetValues: (updates: {
652
661
  path: P;
653
- key: KeysOfUnion<NM> | (string & {});
662
+ key: SuggestKey<NM>;
654
663
  value: any;
655
664
  }[]) => void;
656
665
  GetGroupByPath: (path: MeshPath) => MeshFlowGroupNode<MeshPath>;
@@ -683,7 +692,7 @@ declare function useEngineInstance<T, P extends MeshPath, S = any, M extends Rec
683
692
  notifyAll: () => Promise<void>;
684
693
  batchNotify: (updates: {
685
694
  path: P;
686
- key: (string & {}) | KeysOfUnion<NM>;
695
+ key: SuggestKey<NM>;
687
696
  value: any;
688
697
  }[]) => void;
689
698
  useEntangle: (config: EntangleArgType<P>) => void;
@@ -691,11 +700,13 @@ declare function useEngineInstance<T, P extends MeshPath, S = any, M extends Rec
691
700
  SetBucket: (newBucket: SchemaBucket<P>) => number;
692
701
  GetBucket: (bucketId: number) => SchemaBucket<P>;
693
702
  CancelTask: () => void;
703
+ stageValueFn: (uid: number, key: SuggestKey<NM>, value: any) => void;
694
704
  UITrigger: any;
695
705
  UidToNodeMap: MeshFlowTaskNode<P, any, NM>[];
696
706
  };
697
707
  destroyPlugin: () => void;
698
708
  CancelTask: () => void;
709
+ StageValue: (path: P, key: SuggestKey<NM>, value: any) => void;
699
710
  };
700
711
 
701
712
  /**
@@ -732,7 +743,7 @@ B extends Record<string, any> = StandardUITrigger<T>, NM = any>(config: {
732
743
  notifyAll: () => Promise<void>;
733
744
  batchNotify: (updates: {
734
745
  path: P;
735
- key: KeysOfUnion<NM> | (string & {});
746
+ key: SuggestKey<NM>;
736
747
  value: any;
737
748
  }[]) => void;
738
749
  useEntangle: (config: EntangleArgType<P>) => void;
@@ -740,6 +751,7 @@ B extends Record<string, any> = StandardUITrigger<T>, NM = any>(config: {
740
751
  SetBucket: (newBucket: SchemaBucket<P>) => number;
741
752
  GetBucket: (bucketId: number) => SchemaBucket<P>;
742
753
  CancelTask: () => void;
754
+ stageValueFn: (uid: number, key: SuggestKey<NM>, value: any) => void;
743
755
  UITrigger: B;
744
756
  UidToNodeMap: MeshFlowTaskNode<P, any, NM>[];
745
757
  };
@@ -765,6 +777,9 @@ type BaseEngine<T> = {
765
777
  GetGroupByPath: T extends {
766
778
  GetGroupByPath: infer F;
767
779
  } ? F : never;
780
+ StageValue: T extends {
781
+ StageValue: infer F;
782
+ } ? F : never;
768
783
  };
769
784
  config: {
770
785
  SetRule: T extends {
@@ -837,6 +852,12 @@ type EngineModules<M extends Record<string, any>, P extends MeshPath> = {
837
852
  type Engine<T, M extends Record<string, any>, P extends MeshPath> = BaseEngine<T> & {
838
853
  modules: EngineModules<M, P>;
839
854
  };
855
+ type StripReadonly<T> = T extends Function ? T : T extends readonly any[] ? {
856
+ -readonly [K in keyof T]: StripReadonly<T[K]>;
857
+ } : T extends object ? {
858
+ -readonly [K in keyof T]: StripReadonly<T[K]>;
859
+ } : T;
860
+ type NormalizeSchema<T> = T extends readonly any[] ? (T["length"] extends 0 ? Record<string, any> : StripReadonly<T[0]>) : StripReadonly<T>;
840
861
  /**
841
862
  * 初始化并获取 MeshFlow 引擎实例
842
863
  * * @description
@@ -848,8 +869,8 @@ type Engine<T, M extends Record<string, any>, P extends MeshPath> = BaseEngine<T
848
869
  * @param Schema 类型定义模板(仅用于 TS 类型约束,不参与运行逻辑),注册节点通过模块的方式进行
849
870
  * @param options 引擎配置项与扩展模块 {@link MeshFlowOptions}
850
871
  */
851
- declare const useMeshFlow: <const S extends Record<string, any> | any[], T, //UITrigger的类型
852
- M extends Record<string, any>, NM extends Record<string, any> = InferLeafType<S>, P extends MeshPath = [InferLeafPath<S>] extends [never] ? MeshPath : InferLeafPath<S> | (string & {})>(id: MeshPath, Schema: S, options: {
872
+ declare const useMeshFlow: <const S extends Record<string, any> | readonly Record<string, any>[], T, //UITrigger的类型
873
+ M extends Record<string, any>, NM extends Record<string, any> = IsNever<NormalizeSchema<S>> extends true ? Record<KeysOfUnion<NormalizeSchema<S>>, any> : InferLeafType<S>, P extends MeshPath = [InferLeafPath<S>] extends [never] ? MeshPath : InferLeafPath<S> | (string & {})>(id: MeshPath, Schema: S, options: {
853
874
  metaType?: NM;
854
875
  config?: {
855
876
  useGreedy: boolean;
@@ -861,10 +882,10 @@ M extends Record<string, any>, NM extends Record<string, any> = InferLeafType<S>
861
882
  signalTrigger: (signal: T) => void;
862
883
  };
863
884
  }) => Engine<{
864
- SetRule: <TKeys extends KeysOfUnion<NM>>(outDegreePath: P, inDegreePath: P, key: (string & {}) | KeysOfUnion<NM>, options: SetRuleOptions<NM, TKeys>) => void;
865
- SetRules: <TKeys extends KeysOfUnion<NM>>(outDegreePaths: P[], inDegreePath: P, key: (string & {}) | KeysOfUnion<NM>, options: SetRuleOptions<NM, TKeys>) => void;
885
+ SetRule: <K extends SuggestKey<NM>, TKeys extends SuggestKey<NM> = SuggestKey<NM>>(outDegreePath: P, inDegreePath: P, key: K, options: SetRuleOptions<NM, TKeys>) => void;
886
+ SetRules: <TKeys_1 extends KeysOfUnion<NM>>(outDegreePaths: P[], inDegreePath: P, key: (string & {}) | KeysOfUnion<NM>, options: SetRuleOptions<NM, TKeys_1>) => void;
866
887
  SetStrategy: (path: P, key: KeysOfUnion<NM>, strategy: DefaultStrategy) => void;
867
- useEntangle: (config: EntangleArgType<P>) => void;
888
+ useEntangle: <State = any>(config: EntangleArgType<P, State, NM>) => void;
868
889
  SetTrace: (myPath: P, onUpdate: (newStatus: "idle" | "pending" | "calculating" | "calculated" | "error" | "canceled") => void) => {
869
890
  cancel: () => void;
870
891
  };
@@ -873,11 +894,11 @@ M extends Record<string, any>, NM extends Record<string, any> = InferLeafType<S>
873
894
  on: (event: MeshEventName, cb: Function) => () => boolean | undefined;
874
895
  }) => void;
875
896
  }) => () => void;
876
- SetValue: (path: P, key: (string & {}) | KeysOfUnion<NM>, value: any) => void;
897
+ SetValue: (path: P, key: SuggestKey<NM>, value: any) => void;
877
898
  GetValue: (path: P, key?: string) => any;
878
899
  SetValues: (updates: {
879
900
  path: P;
880
- key: (string & {}) | KeysOfUnion<NM>;
901
+ key: SuggestKey<NM>;
881
902
  value: any;
882
903
  }[]) => void;
883
904
  GetGroupByPath: (path: MeshPath) => MeshFlowGroupNode<MeshPath>;
@@ -910,7 +931,7 @@ M extends Record<string, any>, NM extends Record<string, any> = InferLeafType<S>
910
931
  notifyAll: () => Promise<void>;
911
932
  batchNotify: (updates: {
912
933
  path: P;
913
- key: (string & {}) | KeysOfUnion<NM>;
934
+ key: SuggestKey<NM>;
914
935
  value: any;
915
936
  }[]) => void;
916
937
  useEntangle: (config: EntangleArgType<P>) => void;
@@ -918,11 +939,13 @@ M extends Record<string, any>, NM extends Record<string, any> = InferLeafType<S>
918
939
  SetBucket: (newBucket: SchemaBucket<P>) => number;
919
940
  GetBucket: (bucketId: number) => SchemaBucket<P>;
920
941
  CancelTask: () => void;
942
+ stageValueFn: (uid: number, key: SuggestKey<NM>, value: any) => void;
921
943
  UITrigger: any;
922
944
  UidToNodeMap: MeshFlowTaskNode<P, any, NM>[];
923
945
  };
924
946
  destroyPlugin: () => void;
925
947
  CancelTask: () => void;
948
+ StageValue: (path: P, key: SuggestKey<NM>, value: any) => void;
926
949
  }, M, P>;
927
950
  /**
928
951
  * 类型工厂:锁定全局路径与元数据类型,生成定制化的实例化函数。
package/index.js CHANGED
@@ -1 +1 @@
1
- 'use strict';var Ce=(P=>(P[P.FlowStart=0]="FlowStart",P[P.FlowSuccess=1]="FlowSuccess",P[P.FlowEnd=2]="FlowEnd",P[P.FlowAbort=3]="FlowAbort",P[P.FlowWait=4]="FlowWait",P[P.FlowFire=5]="FlowFire",P[P.NodeStart=6]="NodeStart",P[P.NodeSuccess=7]="NodeSuccess",P[P.NodeProcessing=8]="NodeProcessing",P[P.NodeError=9]="NodeError",P[P.NodePending=10]="NodePending",P[P.NodeRevive=11]="NodeRevive",P[P.NodeIntercept=12]="NodeIntercept",P[P.NodeRelease=13]="NodeRelease",P[P.NodeStagnate=14]="NodeStagnate",P[P.NodeBucketSuccess=15]="NodeBucketSuccess",P[P.EntangleWarn=16]="EntangleWarn",P[P.EntangleBlocked=17]="EntangleBlocked",P))(Ce||{}),Ue=(r=>(r[r.CAUSALITY=0]="CAUSALITY",r[r.INVERSION=1]="INVERSION",r[r.REPERCUSSION=2]="REPERCUSSION",r))(Ue||{});var Ve=(r=>(r.OR="OR",r.PRIORITY="PRIORITY",r.MERGE="MERGE",r))(Ve||{});var Le=class{computedRules=[];getRuleResult(e,t,r){if(e.entityId==="__base__")return e.logic(t);if(!(!e._hasRun||r(e.triggerUids)))return e._lastResult;let i=e.logic(t);return i instanceof Promise?i.then(l=>(e._lastResult=l,e._hasRun=true,l)):(e._lastResult=i,e._hasRun=true,i)}store={OR:(e,t,r)=>{let o,i,l=this.computedRules;for(let s=0;s<l.length;s++){let a=l[s],p=this.getRuleResult(a,e,r);if(p instanceof Promise)return (async()=>{let n=await p;if(a.entityId==="__base__"?i=n:n&&(o=n),typeof o>"u")for(let M=s+1;M<l.length;M++){let f=l[M],m=this.getRuleResult(f,e,r),b=m instanceof Promise?await m:m;if(f.entityId==="__base__"){i=b;continue}if(b){o=f.value;break}}return typeof o>"u"&&(o=i),{res:o,version:t}})();let h=p;if(a.entityId==="__base__"){i=h;continue}if(h){o=a.value;break}}return typeof o>"u"&&(o=i),{res:o,version:t}},PRIORITY:(e,t,r)=>{let o,i=this.computedRules;for(let l=0;l<i.length;l++){let s=i[l],a=this.getRuleResult(s,e,r);if(a instanceof Promise)return (async()=>{let p=await a;if(p!==void 0)return {res:s.value!==void 0?s.value:p,version:t};for(let h=l+1;h<i.length;h++){let n=i[h],M=this.getRuleResult(n,e,r),f=M instanceof Promise?await M:M;if(f!==void 0)return {res:f,version:t}}return {res:void 0,version:t}})();if(a!==void 0)return {res:s.value!==void 0?s.value:a,version:t}}return {res:o,version:t}},MERGE:(e,t,r)=>{let o,i,l=this.computedRules,s=(p,h)=>p===void 0?h:h===void 0?p:Array.isArray(p)&&Array.isArray(h)?[...h,...p]:typeof p=="object"&&typeof h=="object"?{...h,...p}:p;for(let p=0;p<l.length;p++){let h=l[p],n=this.getRuleResult(h,e,r);if(n instanceof Promise)return (async()=>{let f=await n,m=(S,R)=>{if(S.entityId==="__base__")i=s(i,R);else if(R){let P=S.value!==void 0?S.value:R;o=s(o,P);}};m(h,f);for(let S=p+1;S<l.length;S++){let R=l[S],P=this.getRuleResult(R,e,r),te=P instanceof Promise?await P:P;m(R,te);}return {res:s(o,i),version:t}})();let M=n;if(h.entityId==="__base__"){i=s(i,M);continue}if(M){let f=h.value!==void 0?h.value:M;o=s(o,f);}}return {res:s(o,i),version:t}}};CurrentStrategy=()=>{};CurrentStrategyType="PRIORITY";getRules=()=>{};constructor(e){this.getRules=e,this.CurrentStrategy=this.store.PRIORITY,this.updateComputedRules();}updateComputedRules(){let e=this.getRules();this.CurrentStrategyType==="PRIORITY"||this.CurrentStrategyType==="MERGE"?this.computedRules=Array.from(e.values()).map(t=>Array.from(t)).flat().sort((t,r)=>r.priority-t.priority):this.computedRules=Array.from(e.values()).map(t=>Array.from(t)).flat();}setStrategy(e){this.CurrentStrategyType=e,this.CurrentStrategy=this.store[e],this.updateComputedRules();}evaluate(e,t,r){return this.CurrentStrategy(e,t,r)}},Ae=class{path;strategy;contract;rules=new Map;isValue=false;id=0;cache=void 0;pendingPromise=null;version=0;deps=new Map;_forceNotify=false;promiseToken=null;useCache=true;effectArray=[];constructor(e,t,r){let o=()=>this.rules;this.strategy=new Le(o),this.path=r,this.isValue=t==="value",this.contract=this.inferType(e),this.cache=e,this.setRule({priority:0,entityId:"__base__",logic:()=>e});}setUseCache(e){this.useCache=e;}forceNotify(){this._forceNotify=true;}isForceNotify(){return this._forceNotify}setStrategy(e){this.strategy.setStrategy(e);}setDefaultRule(e){let t=new Set;t.add(e),this.rules.set(-1,t);}setRules(e,t){t&&this.updateDeps(t);let r=++this.id,o={...e,entityId:r};for(let i of e.triggerUids)this.rules.has(i)||this.rules.set(i,new Set),this.rules.get(i).add(o);return this.strategy.updateComputedRules(),()=>{for(let i of e.triggerUids){let l=this.rules.get(i);l&&(l.delete(o),l.size===0&&(this.rules.delete(i),this.deps.delete(i)));}this.strategy.updateComputedRules();}}updateDeps(e){for(let[t,r,o]of e){if(r.length==0)continue;let i=this.deps.get(t)||Object.create(null);for(let l of r)i[l]=o[l];this.deps.set(t,i);}}setRule(e,t){if(t&&this.updateDeps(t),typeof e.entityId=="string"){this.setDefaultRule(e);return}let r=++this.id,o={...e,entityId:r};if(e)for(let i of e.triggerUids)this.rules.has(i)||this.rules.set(i,new Set),this.rules.get(i).add(o);return this.strategy.updateComputedRules(),()=>{for(let i of e.triggerUids){let l=this.rules.get(i);l&&(l.delete(o),l.size===0&&(this.rules.delete(i),this.deps.delete(i)));}this.strategy.updateComputedRules();}}setSideEffect(e){this.effectArray.push(e);}getSideEffect(){return [...this.effectArray]}evaluate(e){let t=null;if(e.GetToken&&(t=e.GetToken()),this.pendingPromise&&this.promiseToken!==t&&(this.pendingPromise=null,this.promiseToken=null),this.pendingPromise)return this.pendingPromise;let r=false;if(typeof e.triggerUid=="number"){r=true,this.deps.size==0&&(r=false);for(let[s,a]of this.deps.entries()){let p=e.getStateByUid(s);if(!p){r=false;break}for(let h in a){let n=a[h],M=p[h];if(typeof n=="object"&&n!==null){r=false;break}if(n!==M){r=false;break}}if(!r)break}}if(r&&this.useCache)return this.cache;this.promiseToken=t;let o=++this.version,i=s=>{if(!s||s.length===0)return true;for(let a of s){let p=this.deps.get(a);if(!p)return true;let h=e.getProxyByUid(a);if(!h)return true;for(let n in p){let M=p[n],f=h[n];if(typeof M=="object"&&M!==null||M!==f)return true}}return false},l=this.strategy.evaluate(e,o,i);if(!(l instanceof Promise)){let{res:s,version:a}=l;return this.finalizeSync(s,a,e,t)}return this.pendingPromise=(async()=>{try{let{res:s,version:a}=await l;return this.finalizeSync(s,a,e,t)}catch(s){throw {path:this.path,error:s}}finally{this.promiseToken===t&&(this.pendingPromise=null,this.promiseToken=null);}})(),this.pendingPromise}finalizeSync(e,t,r,o){return o!==this.promiseToken||t<this.version?this.cache:(this.cache=e,this.deps.forEach((i,l)=>{let s=r.getProxyByUid(l);if(!s)return;let a=Object.keys(i);for(let p of a)i[p]=s[p];}),e)}inferType(e){return Array.isArray(e)?"array":typeof e}};var We=(g,e,t)=>{let o=i=>{let l=t.triggerUids.map(p=>{let h=i.getProxyByUid(p);if(t.triggerKeys.length===0)return h;let n={};return t.triggerKeys.forEach(M=>{n[M]=h[M];}),n}),s=Object.create(null);return Object.defineProperty(s,"triggerTargets",{get:()=>l}),Object.defineProperty(s,"affectedTatget",{get:()=>i.getProxyByUid(g)[e]}),t.logic({slot:s})};return {value:t.value,targetUid:g,triggerUids:t.triggerUids,priority:t.priority??10,logic:o}},ze=(g,e,t,r,o,i,l,s)=>{if(!g)throw Error();let a=g,p=(M,f)=>{typeof r[M]>"u"&&(r[M]=[],i[M]=new Set),i[M].add(f),i[M].size>r[M].length&&r[M].push(f),typeof o[f]>"u"&&(o[f]=[],l[f]=new Set),l[f].add(M),l[f].size>o[f].length&&o[f].push(M);};return {SetRule:(M,f,m,b)=>{let S=a(M),R=a(f),P=b.triggerKeys||[],te=s.get(R.uid)||0,_=s.get(S.uid)||0;te+=1,_+=1,s.set(R.uid,te),s.set(S.uid,_);let Z=We(R.uid,m,{...b,triggerUids:[S.uid],triggerKeys:P}),W=[M].map(L=>{let c=a(L);return [c.uid,P,c.proxy]});if(p(S.uid,R.uid),typeof R.nodeBucket[m]=="number"){let L=t(R.nodeBucket[m]);L.setRule(Z,W),b.effect&&L.setSideEffect({fn:b.effect,args:b.effectArgs?b.effectArgs:[m]});}else {let L=R.meta[m],c=new Ae(L,m,f);c.setRule(Z,W),b.effect&&c.setSideEffect({fn:b.effect,args:b.effectArgs?b.effectArgs:[m]}),R.nodeBucket[m]=e(c);}R.state[m]=R.meta[m];let y=t(R.nodeBucket[m]);b.forceNotify&&y.forceNotify(),b.cacheStrategy=="none"&&y.setUseCache(false);},SetRules:(M,f,m,b)=>{let S=a(f),R=s.get(S.uid)||0;R+=1,s.set(S.uid,R);let P=[];for(let y of M){let L=a(y);P.push(L.uid);let c=s.get(L.uid)||0;c+=1,s.set(L.uid,c),p(L.uid,S.uid);}let te=b.triggerKeys||[],_=We(S.uid,m,{...b,triggerUids:P,triggerKeys:te}),Z=M.map(y=>{let L=a(y);return [L.uid,te,L.state]});if(typeof S.nodeBucket[m]=="number"){let y=t(S.nodeBucket[m]);y.setRules(_,Z),b.effect&&y.setSideEffect({fn:b.effect,args:b.effectArgs?b.effectArgs:[m]});}else {let y=S.meta[m],L=new Ae(y,m,f);L.setRules(_,Z),b.effect&&L.setSideEffect({fn:b.effect,args:b.effectArgs?b.effectArgs:[m]}),S.nodeBucket[m]=e(L);}S.state[m]=S.meta[m];let W=t(S.nodeBucket[m]);b.forceNotify&&W.forceNotify(),b.cacheStrategy=="none"&&W.setUseCache(false);}}};var qe=(g,e)=>{let t=g||void 0;if(!t)throw Error();return {SetStrategy:(o,i,l)=>{let s=t(o);e(s.nodeBucket[i]).setStrategy(l);}}};function Qe(){let g=new Map,e=new Map,t=new Set,r=(l,s)=>{g.set(l,s);let a=e.get(l);a&&a(s);};return {SetTrace:(l,s)=>{e.set(l,s);let a=g.get(l)||"idle";return s(a),{cancel:()=>{e.delete(l);}}},useTrace:()=>({apply:s=>{s.on(0,()=>{t.forEach(a=>r(a,"idle")),t.clear(),g.clear();}),s.on(13,({path:a,type:p})=>{(p==1||p==2)&&(t.add(a),r(a,"pending"));}),s.on(10,({path:a})=>{t.add(a),(!g.has(a)||g.get(a)==="idle")&&r(a,"pending");}),s.on(6,({path:a})=>{t.add(a),r(a,"calculating");}),s.on(7,({path:a})=>{r(a,"calculated");}),s.on(12,({path:a,type:p})=>{p==3&&r(a,"calculating"),p==6&&r(a,"idle");}),s.on(14,({path:a})=>{r(a,"pending");}),s.on(9,({path:a})=>r(a,"error"));}})}}function Xe(g,e,t,r){return {GetNextDependency:h=>r()[h]||[],GetPrevDependency:h=>t()[h]||[],GetAllPrevDependency:h=>e()[h]||[],GetAllNextDependency:h=>g()[h]||[],rebuildDirectDependencyMaps:h=>{let n=[],M=[],f=g();for(let m of h){let b=f[m]||[];n[m]=b;for(let S=0;S<b.length;S++){let R=b[S];typeof M[R]>"u"&&(M[R]=[]),M[R].push(m);}}return {directNextMap:n,directPrevMap:M}}}}function Ze(g,e){let t=o=>{let i=[],l=[],s=new Map,a=o.size,p=0,h=0;for(let[n,M]of o)M===0&&l.push(n);if(l.length===0&&a>0)throw Error("Circular dependency detected");for(;l.length>0;){i.push([...l]);let n=[];for(let M of l){p++,s.set(M,h);let f=g[M];if(f)for(let m of f){let b=o.get(m)-1;o.set(m,b),b===0&&n.push(m);}}l=n,h++;}if(p<a)throw Error("Circular dependency detected");return {steps:i,levelMap:s}};return ()=>{let o=new Map;for(let i of e.keys()){let l=g[i]||[];o.has(i)||o.set(i,0);for(let s of l){let a=o.get(s)||0;o.set(s,++a);}}return t(o)}}var Ne=()=>{let g=[];return {on:e=>(g.push(e),()=>{let t=g.indexOf(e);t>-1&&g.splice(t,1);}),call:e=>g.forEach(t=>{t(e);})}};function Je(){let{on:g,call:e}=Ne();return {onError:g,callOnError:e}}function et(){let{on:g,call:e}=Ne();return {onSuccess:g,callOnSuccess:e}}var tt=()=>{let g=new Set,e=new Map,t=new Set,r=(s,a)=>{e.get(s)?.forEach(p=>p(a));},o=(s,a)=>(e.has(s)||e.set(s,new Set),e.get(s).add(a),()=>e.get(s)?.delete(a));return {usePlugin:s=>{let a=new Set,p=(n,M)=>{let f=o(n,M);return a.add(f),f};s.apply({on:p}),g.add(s);let h=()=>{a.forEach(n=>n()),a.clear(),g.delete(s),t.delete(h);};return t.add(h),h},emit:r,destroyPlugin:()=>{t.forEach(s=>s()),t.clear(),e.clear(),g.clear();}}};function nt(){let{on:g,call:e}=Ne();return {onStart:g,callOnStart:e}}var rt=(g={frameQuota:12})=>{let e=performance.now(),t=0,r=false,o=()=>!!navigator?.scheduling?.isInputPending?.({includeContinuous:true});return {getIsFirstFrame:()=>r,reset(){e=performance.now(),t=0,r=true;},shouldYield(){return !r&&(++t&15)!==0?false:!!(performance.now()-e>g.frameQuota||o())},async yieldToMain(){return new Promise(i=>{_e(()=>{e=performance.now(),t=0,r&&(r=false),i();});})}}},_e=g=>{let{port1:e,port2:t}=new MessageChannel;e.onmessage=g,t.postMessage(null);};function st(g,e,t,r,o,i){let l=new Map,s=g.useGreedy,a=null,p=()=>{l.clear();},h={path:null,level:0,targetLevel:0,currentLevel:0,pendingParentsCount:0,active:0,pending:0,blocked:0,nums:0,asyncNums:0},n={path:null,type:0,triggerPath:null,calledBy:0,key:null,value:null,error:null,token:null,duration:null,detail:h};return {TaskRunner:async(f,m)=>{let S=Symbol("token"),R=typeof f=="number"?f:"__NOTIFY_ALL__";l.set(R,S),a=S;let P=false,te=false;i.reset();let _=t.GetMaxUid()+3,Z=new Array(_).fill(0),W=0,y=new Uint8Array(_),L=new Int32Array(_),c=new Int32Array(_),A=new Int32Array(_*2),w=0,E=0,H=new Int32Array(_*2),F=0,O=0,T=new Int32Array(_*2),K=0,U=0;m.forEach(N=>{Z[N]=1,e.GetAllNextDependency(N).forEach(se=>{Z[se]=1;});});let k=new Array(_).fill(null),d=[],u=t.Turnstile,B=new Array(_).fill(null).map(()=>[]),j=new Array(_).fill(null).map(()=>[]),ne=u.volatileLevels.size>0,oe=ne?u.hasObserver:N=>false,re=ne?u.receiveGhosts:()=>[],Se=ne?u.resolveGhosts:()=>[],me=ne?u.getTriggerKeys:()=>[],Re=u?.volatileLevels||new Set,de=-1,J=e.GetUidToLevelMap(),ie=0,Ee=0,Pe=N=>{e.GetAllNextDependency(N).forEach(ae=>{let v=J.get(ae)||0;v>Ee&&(Ee=v);});},Ge=new Set;typeof f=="number"&&(y[f]|=16,Ge.add(f),Pe(f),o.flushPathSet.add(f));let we=typeof f=="number"?[f]:m;i.shouldYield()&&(o.requestUpdate(),await i.yieldToMain());let Ie=we.map(async N=>{if(oe(N)){let se=t.GetNodeByUid(N),ae=me(N);if(ae.length>0){let v=re(se,ae);return v instanceof Promise&&(v=await v),{seed:N,hitTargets:v}}}return {seed:N,hitTargets:[]}});if((await Promise.all(Ie)).forEach(({seed:N,hitTargets:se})=>{if(se&&se.length>0){d.push(...se);let ae=J.get(N)||0;de=Math.max(de,ae);}}),(d.length>0||we.length>1)&&(o.requestUpdate(),await i.yieldToMain(),l.get(R)!==S))return;let Ke=d.length>0;m.forEach(N=>{if(!Ge.has(N))if(Ke){let se=J.get(N)??0;c[N]=se,y[N]&4||(y[N]|=4,T[K++]=N,U++);let ae=t.GetPathByUid(N);n.path=ae,n.type=2,r.emit(14,n);}else y[N]&1||(y[N]|=1,A[w++]=N,E++),Pe(N);}),typeof f=="number"?ie=J.get(f)??0:ie=Math.min(...m.map(N=>J.get(N)??0));let Oe=performance.now(),De=typeof R=="number"?t.GetPathByUid(R):"__NOTIFY_ALL__";n.path=De,n.token=S,r.emit(0,n),r.callOnStart({path:De});let Be=false,Ye=30,je=(N,se)=>{let ae=false,v=false,Y=false,V=t.GetNodeByUid(N),$=t.GetPathByUid(N),q=V.calledBy,I=B[N];I.length=0;let C=oe(N),G=C?me(N):[],D=x=>{C&&(G.length===0||G.includes(x))&&I.push(x);},le=j[N];le.length=0;let ce=false;if(V.calledBy===1){ce=true,ae=true,o.flushPathSet.add(N);let x=k[N];x&&(I.push(...x),k[N]=null);}let ye=(x,X)=>{let ee=J.get(x)??0,pe=t.GetNodeByUid(x),Q=t.GetPathByUid(x),he=(q===1||q===2)&&ee<=de;he&&y[x]&16&&(y[x]&=-17,n.path=Q,n.triggerPath=$,r.emit(11,n));let ue=0;if(!(y[x]&49)){if(y[x]&2)ue=L[x]-1;else {if(ee>ie&&O>Ye){c[x]=ee,y[x]&4||(y[x]|=4,T[K++]=x,U++),n.path=Q,n.type=7,r.emit(12,n);return}let Me=e.GetPrevDependency(x),z=0;for(let ge of Me){if(y[ge]&16)continue;(J.get(ge)??0)>ie&&z++;}ue=z;}if(ue<=0){let Me=(y[x]&1)!==0,z=(y[x]&32)!==0;if(Me||z){n.path=Q,n.type=z?3:3.1,r.emit(12,n);return}y[x]&2&&(y[x]&=-3,O--),he?pe.calledBy=2:pe.calledBy=0,y[x]&1||(y[x]|=1,A[w++]=x,E++),n.path=Q,n.type=X,h.path=$,r.emit(13,n);}else L[x]=ue,y[x]&2||(y[x]|=2,H[F++]=x,O++);}},Te=(x=[])=>{if(l.get(R)!==S)return;if(x.length){let ee={},pe=V.proxy;for(let Q of x){let he=(Q.args||[]).reduce((ue,Me)=>(ue[Me]=pe[Me],ue),{});try{let ue=Q.fn(he);ue&&typeof ue=="object"&&Object.assign(ee,ue);}catch(ue){}}for(let Q in ee)if(Q in V.state)Object.is(V.state[Q],ee[Q])||(V.state[Q]=ee[Q],D(Q),ae=true,(V.notifyKeys.size===0||V.notifyKeys.has(Q))&&(v=true));else throw {error:`wrong effect in ${String(V.path)}`}}ae&&o.flushPathSet.add(N);let X=(ee=[])=>{if(l.get(R)!==S)return;ee&&ee.length>0&&(d.push(...ee),de=Math.max(de,J.get(N)||0)),I.length=0,n.path=$,n.calledBy=V.calledBy,r.emit(7,n),y[N]|=16;let pe=e.GetNextDependency(N);(v||Y)&&(Pe(N),e.GetAllNextDependency(N).forEach(ge=>{Z[ge]=1;}));let Q=t.GetNodeByUid(N),he=J.get(N)??0,ue=Re.has(he)||d.length>0;for(let z of pe){let ge=J.get(z)??0,be=t.GetPathByUid(z);if(ue&&ge>=he){c[z]=ge,y[z]&4||(y[z]|=4,T[K++]=z,U++),n.path=be,n.type=2,r.emit(14,n);continue}if(y[z]&16){n.path=be,n.type=2,r.emit(12,n);continue}if(y[z]&32||(y[z]&1)!==0){n.path=be,n.type=y[z]&32?3:3.1,r.emit(12,n);continue}if(v||Y)ye(z,1);else if(y[z]&2)ye(z,2);else {let lt=J.get(z);c[z]=lt,y[z]&4||(y[z]|=4,T[K++]=z,U++,n.path=be,n.type=1,r.emit(14,n));}}y[N]&32&&(y[N]&=-33,W--),Q.calledBy=0,(()=>{if(!P){P=true;let z=W,ge=E,be=O;n.path=$,n.type=1,h.active=z,h.pending=ge,h.blocked=be,r.emit(5,n),ke();}})();};if(oe(N)&&I.length>0){let ee=re(V,I);ee instanceof Promise?ee.then(X).catch(Fe):X(ee);}else X([]);},Fe=x=>{n.path=$,n.error=x,r.emit(9,n);let X=Symbol("abort");l.set(R,X),w=0,E=0,F=0,O=0,K=0,U=0,y.fill(0),W=0,k.fill(null),r.callOnError(x);},fe=(x,X)=>{x!==V.state[X]&&(V.state[X]=x,ae=true,D(String(X)),n.path=$,n.key=X,n.value=x,n.calledBy=V.calledBy,r.emit(15,n),(V.notifyKeys.size===0||V.notifyKeys.has(X))&&(v=true)),t.GetBucket(V.nodeBucket[X]).isForceNotify()&&(Y=true),(v||Y)&&Pe(N);};n.path=$,n.calledBy=V.calledBy,r.emit(6,n);try{let x=[];for(let X in V.nodeBucket){let ee=t.GetBucket(V.nodeBucket[X]);if(x.push(...ee.getSideEffect()),ce){r.emit(15,{path:$,key:String(X),value:V.state[X],calledBy:V.calledBy}),ee.isForceNotify()&&(Y=!0),(V.notifyKeys.size===0||V.notifyKeys.has(X))&&Pe(N);continue}let pe=ee.evaluate({affectKey:X,triggerUid:se,getProxyByUid:Q=>t.GetNodeByUid(Q).proxy,getStateByUid:Q=>t.GetNodeByUid(Q).state,GetToken:()=>S});if(pe instanceof Promise){let Q=pe.then(he=>{l.get(R)===S&&fe(he,X);});le.push(Q);}else fe(pe,X);}if(le.length>0)return Promise.all(le).then(()=>{Te(x);}).catch(Fe);Te(x);return}catch(x){Fe(x);}},ke=async()=>{if(l.get(R)!==S){P=false;return}P=true;let N=i.getIsFirstFrame(),se=0,ae=()=>30,v=0,Y=ae();try{for(;l.get(R)===S;){let V=v>=Y,$=i.shouldYield();if(V||$){if(v>0&&(se++,(N||se%2===0)&&o.requestUpdate()),await i.yieldToMain(),l.get(R)!==S)break;v=0,N=i.getIsFirstFrame();}if(E>0&&W<40){let q=w,I=0;for(let C=0;C<q;C++){let G=A[C];if((y[G]&1)===0)continue;if(W>=40||v>=Y||i.shouldYield()){for(let fe=C;fe<w;fe++){let x=A[fe];y[x]&1&&(A[I++]=x);}w=I,E=I;break}let D=t.GetNodeByUid(G),le=t.GetPathByUid(G),ce=J.get(G)??0,ye=e.GetPrevDependency(G),Te=ye.length>1;if((!s||Te)&&ce>ie){y[G]&=-2,E--;let fe=ye.filter(x=>Z[x]===1&&(y[x]&16)===0).length;L[G]=fe||0,y[G]&2||(y[G]|=2,H[F++]=G,O++),n.path=le,n.type=fe>0?4:5,h.targetLevel=ce,h.currentLevel=ie,h.pendingParentsCount=fe,r.emit(12,n);continue}y[G]&=-2,E--,(y[G]&32)===0&&(y[G]|=32,W++),n.path=le,n.calledBy=D.calledBy,r.emit(8,n),je(G,f),v++;}if(w>q){for(let C=q;C<w;C++){let G=A[C];y[G]&1&&(A[I++]=G);}w=I,E=w;}else w=I;if(E>0&&W<40)continue}if(v<Y&&s&&O>0&&W<40){let q=!1,I=0,C=0;for(let G=0;G<F;G++){let D=H[G];if((y[D]&2)===0)continue;if(L[D]<=0&&I<Y){let ce=J.get(D)??0,ye=e.GetPrevDependency(D);if(ce<=ie||ye.length<=1){y[D]&=-3,O--,y[D]&1||(y[D]|=1,A[w++]=D,E++),I++,q=!0;let Te=t.GetPathByUid(D);n.path=Te,n.type=4,r.emit(13,n);continue}}H[C++]=D;}if(F=C,I>0)continue;if(q){if(i.shouldYield()&&(await i.yieldToMain(),l.get(R)!==S))break;continue}}if(W===0&&E===0){if(u.inFlightCount>0)break;if(d.length>0){let I=!1,C=ie,G=Array.from(new Set(d));d.length=0;for(let D of G){let le=t.GetNodeByUid(D),ce=Se(le);if(ce&&ce.length>0){I=!0,le.calledBy=1,k[D]=ce,y[D]&=-17,y[D]&2&&(y[D]&=-3,O--),y[D]&1||(y[D]|=1,A[w++]=D,E++);let ye=J.get(le.uid)??0;ye<C&&(C=ye),Pe(le.uid),o.flushPathSet.add(le.uid);}}if(I){if(C<ie&&(ie=C),o.requestUpdate(),i.shouldYield()&&(await i.yieldToMain(),l.get(R)!==S))break;continue}}let q=1/0;for(let I=0;I<K;I++){let C=T[I];if(y[C]&4){let G=c[C];G<q&&(q=G);}}for(let I=0;I<F;I++){let C=H[I];if(y[C]&2){let G=J.get(C)??0;G>ie&&G<q&&(q=G);}}if(q!==1/0&&q<=Ee){ie=q;let I=0;for(let G=0;G<K;G++){let D=T[G];y[D]&4&&(c[D]===q?(y[D]&=-5,U--,y[D]&1||(y[D]|=1,A[w++]=D,E++)):T[I++]=D);}K=I;let C=0;for(let G=0;G<F;G++){let D=H[G];if(y[D]&2)if((J.get(D)??0)===q){y[D]&=-3,O--,y[D]&1||(y[D]|=1,A[w++]=D,E++);let ce=t.GetPathByUid(D);n.path=ce,n.type=3,h.level=q,r.emit(13,n);}else H[C++]=D;}F=C;continue}else {for(let I=0;I<K;I++){let C=T[I];if(y[C]&4){y[C]|=16;let G=t.GetPathByUid(C);n.path=G,n.type=6,r.emit(12,n);}}K=0,U=0;for(let I=0;I<F;I++){let C=H[I];if(y[C]&2){y[C]|=16;let G=t.GetPathByUid(C);n.path=G,n.type=6,r.emit(12,n);}}F=0,O=0;break}}E>0&&W>=40&&(n.type=2,r.emit(4,n));break}}finally{P=false;let V=W+O+E,$=u.inFlightCount||0;if(!(a===S)){n.token=S,r.emit(3,n);return}if(o.requestUpdate(),V===0&&$===0){if(l.get(R)===S&&!Be){Be=true,n.type=1,r.emit(2,n),u.resetCounters(),k.fill(null);let I=performance.now();de=-1,l.delete(R),n.token=S,n.duration=(I-Oe).toFixed(2.1)+"ms",r.emit(1,n),Promise.resolve().then(()=>{r.callOnSuccess();});}}else {let I=V===0&&$>0?3:1;if(n.type=I,h.nums=W,h.asyncNums=$,r.emit(4,n),$>0&&!te){te=true;let C=()=>{a===S&&(u.inFlightCount,u.inFlightCount===0?_e(()=>{u.inFlightCount===0?ke():requestAnimationFrame(C);}):requestAnimationFrame(C));};requestAnimationFrame(C);}}}};ke();},CancelTask:p}}function He(g){let{path:e,uid:t,type:r,meta:o,dirtySignal:i,state:l}=g,s=null,a=["path","uid","type","dependOn","nodeBucket"],h={path:e,uid:t,type:r,meta:o,dirtySignal:i,createView:(n={})=>{if(s&&Object.keys(n).length===0)return s;let M=new Proxy(n,{get(f,m){let b=m;return Reflect.has(f,m)?Reflect.get(f,m):b in g.state?g.state[b]:b in g?g[b]:o&&b in o?o[b]:Reflect.get(f,m)},set(f,m,b){return false},ownKeys(f){let m=new Set([...Reflect.ownKeys(f),...Object.keys(l||{}),...Object.keys(o||{}),...a]);return Array.from(m)},getOwnPropertyDescriptor(f,m){let b=m;return Reflect.has(f,m)||l&&b in l||o&&b in o||a.includes(b)?{enumerable:true,configurable:true}:Reflect.getOwnPropertyDescriptor(f,m)}});return s=M,M}};return "children"in g?{...h,children:g.children}:{...h,state:g.state,nodeBucket:g.nodeBucket,notifyKeys:g.notifyKeys,dependOn:g.dependOn,calledBy:0,get proxy(){return s}}}var at=(g,e,t,r,o,i,l)=>{let s=g.useEntangleStep,a=[],p=[],h=new Set,n=r,m=t,b=0,S=0,R=100,P=()=>{let c={link:null,impactNode:null,impactUid:-1,hitTargetUids:null,isDirty:false,propose:null};return c.propose={set:(A,w,E=1)=>{w!==c.impactNode.state[A]&&(c.link.count++,(!p[c.impactUid]||p[c.impactUid].length===0)&&(p[c.impactUid]=[],S++),p[c.impactUid].push({key:A,value:w,weight:E}),c.isDirty||(c.hitTargetUids.push(c.impactUid),c.isDirty=true));},update:(A,w,E="add")=>{c.link.count++,(!p[c.impactUid]||p[c.impactUid].length===0)&&(p[c.impactUid]=[],S++),p[c.impactUid].push({key:A,delta:w,op:E,weight:1}),c.isDirty||(c.hitTargetUids.push(c.impactUid),c.isDirty=true);},patch:(A,w)=>{c.link.count++,(!p[c.impactUid]||p[c.impactUid].length===0)&&(p[c.impactUid]=[],S++),p[c.impactUid].push({key:A,patch:w,weight:1}),c.isDirty||(c.hitTargetUids.push(c.impactUid),c.isDirty=true);}},c},te=Array.from({length:R},P),_=R-1,Z=(c,A,w)=>{let E=A.path,H=c.impact;if(c.count>=s){l.emit("entangle:blocked",{observer:E,target:H,count:c.count});return}let F=n(H),O=c.isProxy?A.proxy:A,T=c.isProxy?F.proxy:F;if(c.filter&&!c.filter(O,T))return;let K,U=true;_<0?(K=P(),U=false):K=te[_--],K.isDirty=false,K.link=c,K.impactNode=F,K.impactUid=F.uid,K.hitTargetUids=w;let k=c.emit(O,T,K.propose);if(k instanceof Promise||k&&typeof k.then=="function")return b++,(async()=>{try{await k;}catch(d){l.emit("node:error",{path:E,error:d}),l.onError({path:E,error:d});}finally{b--,U&&(te[++_]=K);}})();U&&(te[++_]=K);};return {useEntangle:c=>{let{cause:A,impact:w,via:E,emit:H,filter:F,isProxy:O}=c;if(!E||E.length===0){l.emit("entangle:warn",{path:A,type:"no_keys"});return}let K=n(A).uid;a[K]||(a[K]=new Map);let U=a[K];for(let k=0;k<E.length;k++){let d=E[k];U.has(d)||U.set(d,[]),U.get(d).push({impact:w,emit:H,filter:F,count:0,isProxy:!!O});}},updateEntangleLevel:()=>{let c=m();h.clear();for(let A=0;A<a.length;A++)if(a[A]!==void 0){let w=c.get(A)||0;h.add(w);}},Turnstile:{volatileLevels:h,get inFlightCount(){return b},get hasPendingGhosts(){return S>0},hasObserver:c=>a[c]!==void 0,getTriggerKeys:c=>{let A=a[c];return A?Array.from(A.keys()):[]},receiveGhosts:(c,A=[])=>{let w=c.uid,E=[],H=a[w];if(!H||A.length===0)return E;let F=[];for(let k=0;k<A.length;k++){let d=H.get(A[k]);if(d)for(let u=0;u<d.length;u++)F.push(d[u]);}let O=0,T=false,K=null;for(;O<F.length;O++){if(e.shouldYield()){T=true;break}let k=Z(F[O],c,E);if(k){K=k,T=true,O++;break}}let U=()=>{if(E.length<=1)return E;let k=[],d=Object.create(null);for(let u=0;u<E.length;u++){let B=E[u];d[B]||(d[B]=true,k.push(B));}return k};return T?(async()=>{for(K&&await K,e.shouldYield()&&await e.yieldToMain();O<F.length;){let k=[],d=Math.min(O+R,F.length);for(;O<d;O++){let u=Z(F[O],c,E);u&&k.push(u);}k.length>0&&await Promise.all(k.map(async u=>{await u,e.shouldYield()&&await e.yieldToMain();})),e.shouldYield()&&await e.yieldToMain();}return U()})():U()},resolveGhosts:c=>{let A=c.uid,w=p[A];if(!w||w.length===0)return [];let E=[],H=Object.create(null);for(let F=0;F<w.length;F++){let O=w[F];H[O.key]||(H[O.key]=[]),H[O.key].push(O);}for(let F in H){let O=H[F],T=c.state[F],K,U=-1/0,k=false;for(let d=0;d<O.length;d++){let u=O[d];if(u.patch!==void 0&&(T=u.patch(T)),u.value!==void 0){let B=u.weight??1;B>=U&&(U=B,K=u.value,k=true);}}k&&(T=K);for(let d=0;d<O.length;d++){let u=O[d];if(u.delta!==void 0)switch(u.op||"add"){case "add":T=(typeof T=="number"?T:0)+u.delta;break;case "remove":T=Array.isArray(T)?T.filter(j=>j!==u.delta):T;break;case "intersect":T=Array.isArray(T)?T.filter(j=>u.delta.includes(j)):u.delta;break;case "union":{let j=Array.isArray(T)?T:[],ne=Array.isArray(u.delta)?u.delta:[u.delta];T=[...new Set([...j,...ne])];break}case "merge":{let j=typeof T=="object"&&T!==null&&!Array.isArray(T)?T:{},ne=typeof u.delta=="object"&&u.delta!==null&&!Array.isArray(u.delta)?u.delta:{};T={...j,...ne};break}}}Object.is(c.state[F],T)||(c.state[F]=T,E.push(F));}return p[A]=[],S--,E.length>0?E:[]},resetCounters:()=>{for(let c=0;c<a.length;c++){let A=a[c];if(A)for(let w of A.values())for(let E=0;E<w.length;E++)w[E].count=0;}}}}};function ot(g,e,t,r,o){let i=rt(),l=0,s=new Map,a=[],p=[],h=[],n=[],M=false,f=new Set,b=async()=>{let d=Array.from(f);if(f.clear(),"signalTrigger"in o&&typeof o.signalTrigger=="function")for(let u of d){let B=A(u);o.signalTrigger(B.dirtySignal);}else "emit"in o&&o.emit(d);},S=()=>{M||(M=true,requestAnimationFrame(()=>{try{for(;f.size>0;)b();}finally{M=false;}}));},{useEntangle:R,updateEntangleLevel:P,Turnstile:te}=at({useEntangleStep:g.useEntangleStep},i,e.GetUidToLevelMap,c,A,w,{emit:r.emit,onError:r.callOnError}),{TaskRunner:_,CancelTask:Z}=st({useGreedy:g.useGreedy},e,{GetNodeByPath:c,GetNodeByUid:A,GetPathByUid:w,GetBucket:F,GetMaxUid:O,Turnstile:te},r,{requestUpdate:S,flushPathSet:f},i),W=d=>{throw new Error(`[MeshFlow] Duplicate Path: ${d}`)},y=d=>{s.has(d.path)&&W(String(d.path));let u=++l,B={path:d.path,getNode:oe=>c(oe)},j=(oe,re="value")=>{let Se=oe({...B}),me=c(d.path);if(!Object.is(me.state[re],Se)){if(t.createHistoryAction&&t.pushIntoHistory){let Re=t.createHistoryAction([{path:d.path,value:me.state[re]},{path:d.path,value:Se}],de=>{let J=c(de.path);J.state[re]=de.value,T(de.path);});t.pushIntoHistory(Re);}me.state[re]=Se,T(d.path);}},ne=He({uid:u,type:d.type,path:d.path,state:d.state,meta:d.meta,nodeBucket:{},dirtySignal:"signalCreator"in o?o.signalCreator():void 0,notifyKeys:d.notifyKeys,dependOn:j});return s.set(ne.path,u),h[u]=ne.path,a[u]=ne,ne},L=d=>{s.has(d.path)&&W(String(d.path));let u=++l,B=He({uid:u,type:d.type,path:d.path,state:{},meta:d,nodeBucket:{},children:d.children});return s.set(B.path,u),p[u]=B,B};function c(d){let u=s.get(d),B=a[u];if(!B)throw Error("Wrong id");return B}function A(d){let u=a[d];if(!u)throw Error("Wrong id");return u}function w(d){return h[d]}function E(d){let u=s.get(d);return p[u]}function H(d){return n.push(d)-1}function F(d){let u=n[d];if(!u)throw Error("Wrong id");return u}function O(){return l}let T=d=>{let u=c(d);if(!u)throw Error("Wrong id");f.add(u.uid),S();let B=e.GetNextDependency(u.uid);K(u.uid,B);};function K(d,u){_(d,u);}return {registerNode:y,registerGroupNode:L,GetNodeByPath:c,GetGroupByPath:E,notify:T,notifyAll:async()=>{Promise.resolve().then(async()=>{let d=e.GetDependencyOrder();if(!d||d.length===0)return;let u=d[0];try{_(null,u);}catch(B){throw r.callOnError(B),B}finally{S();}});},batchNotify:d=>{if(!d||d.length===0)return;if(t.createHistoryAction&&t.pushIntoHistory){let B=t.createHistoryAction([d.map(j=>({path:j.path,key:j.key,value:c(j.path).state[j.key]})),d.map(j=>({path:j.path,key:j.key,value:j.value}))],j=>{let ne=new Set;j.forEach(oe=>{let re=c(oe.path);re.state[oe.key]=oe.value,f.add(oe.path),ne.add(oe.uid);}),S(),ne.size>0&&_(null,Array.from(ne));});t.pushIntoHistory(B);}let u=new Set;d.forEach(B=>{let j=c(B.path);j.state[B.key]=B.value,f.add(j.uid),u.add(j.uid);}),S(),u.size>0&&_(null,Array.from(u));},useEntangle:R,updateEntangleLevel:P,SetBucket:H,GetBucket:F,CancelTask:Z,UITrigger:o,UidToNodeMap:a}}function it(g,e){let t=false,r=false,o=false,i=false,l=new Map,s=[],a=[],p=[],h=[],n=[],M=[],f=[],m=new Map,{GetNextDependency:S,GetPrevDependency:R,GetAllPrevDependency:P,GetAllNextDependency:te,rebuildDirectDependencyMaps:_}=Xe(()=>s,()=>p,()=>M,()=>n),Z={},W={};if(e.modules.useHistory){let v=e.modules.useHistory,Y;v.isMeshModuleInited?Y=v:Y=v();let{Undo:V,Redo:$,PushIntoHistory:q,CreateHistoryAction:I,updateUndoSize:C,updateRedoSize:G}=Y();Z.pushIntoHistory=q,Z.createHistoryAction=I,W={Undo:V,Redo:$,updateUndoSize:C,updateRedoSize:G};}let y=!!e.modules.useMeshRenderGate,L={};if(y){let v=e.modules.useMeshRenderGate.isMeshModuleInited,Y=e.modules.useMeshRenderGate;L=(v?Y:Y())(()=>re);}let{onError:c,callOnError:A}=Je(),{onSuccess:w,callOnSuccess:E}=et(),{onStart:H,callOnStart:F}=nt(),{emit:O,usePlugin:T,destroyPlugin:K}=tt(),{SetTrace:U,useTrace:k}=Qe(),d=k();T(d);let u=y?{...L}:{...e.UITrigger},B=ot({useGreedy:e.config.useGreedy,useEntangleStep:e.config.useEntangleStep||100},{GetDependencyOrder:()=>f,GetAllNextDependency:te,GetNextDependency:S,GetPrevDependency:R,GetAllPrevDependency:P,GetUidToLevelMap:()=>m},Z,{callOnError:A,callOnSuccess:E,callOnStart:F,emit:O},u),{SetBucket:j,GetBucket:ne,GetGroupByPath:oe,GetNodeByPath:re,notifyAll:Se,useEntangle:me,updateEntangleLevel:Re,CancelTask:de}=B;y&&L.init();let J={};if(e.modules.useInternalForm){let{uiSchema:v,GetFormData:Y}=e.modules.useInternalForm(B,g);J={uiSchema:v,GetFormData:Y};}let ie={};if(e.modules.useSchemaValidators){let{SetValidators:v}=e.modules.useSchemaValidators(re);ie={SetValidators:v};}let{SetRule:Ee,SetRules:Pe}=ze(re,j,ne,s,p,a,h,l),{SetStrategy:Ge}=qe(re,ne),we=Ze(s,l),Ie=()=>{let v=we();f=v.steps,m=v.levelMap,xe();},xe=()=>{o&&(Re(),o=false);},Ke=()=>{i||(i=true,Promise.resolve().then(xe).finally(()=>{i=false;}));},Oe=()=>{r||(r=true,Promise.resolve().then(()=>{if(Ie(),t){let{directNextMap:v,directPrevMap:Y}=_(f.flat());n=v,M=Y;}}).finally(()=>{r=false,t=false;}));};return {SetRule:(v,Y,V,$)=>{Ee(v,Y,V,$),t=true,Oe();},SetRules:(v,Y,V,$)=>{Pe(v,Y,V,$),t=true,Oe();},SetStrategy:Ge,useEntangle:v=>{me(v),o=true,Ke();},SetTrace:U,usePlugin:T,SetValue:(v,Y,V)=>{xe(),re(v).dependOn(()=>V,Y);},GetValue:(v,Y="value")=>re(v).proxy[Y],SetValues:v=>{xe(),B.batchNotify(v);},GetGroupByPath:oe,notifyAll:async()=>{Ie(),await Se();},GetAllDependency:()=>s,GetDependencyOrder:()=>f,historyExports:W,formExports:J,validatorExports:ie,batchRenderExport:L,hasRenderGate:()=>y,onError:c,onSuccess:w,onStart:H,scheduler:B,destroyPlugin:K,CancelTask:de}}var ve=new Map,ut=(g,e,t)=>{try{if(ve.has(g))throw Error("engineID repeated");let r=it(e,{config:t.config||{useGreedy:!1},UITrigger:t.UITrigger,modules:t.modules??{},plugins:{}}),{SetRule:o,SetRules:i,SetValues:l,SetStrategy:s,SetValue:a,GetValue:p,usePlugin:h,useEntangle:n,GetGroupByPath:M,notifyAll:f,SetTrace:m,GetAllDependency:b,GetDependencyOrder:S,historyExports:R,formExports:P,validatorExports:te,batchRenderExport:_,hasRenderGate:Z,onError:W,onSuccess:y,onStart:L,scheduler:c,destroyPlugin:A,CancelTask:w}=r,E={config:{SetRule:o,SetRules:i,SetStrategy:s,notifyAll:f,SetTrace:m,usePlugin:h,hasRenderGate:Z,useEntangle:n},data:{SetValue:a,GetValue:p,SetValues:l,GetGroupByPath:M},dependency:{GetAllDependency:b,GetDependencyOrder:S},hooks:{onError:W,onSuccess:y,onStart:L}},H=(T,K,U)=>{!K||typeof K!="object"||Object.keys(K).forEach(k=>{let d=K[k];if(typeof d=="object"&&d!==null)T[k]=T[k]||{},H(T[k],d,U);else if(typeof d=="function"){let u=k;if(u==="useMeshRenderGate")u="render";else if(u.startsWith("use")){let B=u.slice(3);u=B.charAt(0).toLowerCase()+B.slice(1);}k==="useHistory"&&U.exports.history&&Object.keys(U.exports.history).length>0?T[u]=U.exports.history:k==="useInternalForm"&&U.exports.form&&Object.keys(U.exports.form).length>0?T[u]=U.exports.form:k==="useSchemaValidators"&&U.exports.validator&&Object.keys(U.exports.validator).length>0?T[u]=U.exports.validator:k==="useMeshRenderGate"&&U.exports.render?T[u]=U.exports.render:T[u]=d(U.scheduler,U.Schema);}});},F={...E,destroyPlugin:A,CancelTask:w,modules:{}},O=t.modules;return O&&H(F.modules,O,{scheduler:c,Schema:e,exports:{history:R,form:P,validator:te,render:_}}),ve.set(g,F),F}catch(r){throw Error(r)}},mn=()=>(g,e,t)=>ut(g,e,t),Pn=g=>{let e=ve.get(g);if(!e)throw Error("Engine not found.");return e},Mn=g=>{let e=ve.get(g);e.destroyPlugin(),e.CancelTask(),ve.delete(g);};exports.DefaultStrategy=Ve;exports.MeshFlowEventsName=Ce;exports.TriggerCause=Ue;exports.deleteEngine=Mn;exports.useEngine=Pn;exports.useMeshFlow=ut;exports.useMeshFlowDefiner=mn;exports.useScheduler=ot;
1
+ 'use strict';var Ce=(M=>(M[M.FlowStart=0]="FlowStart",M[M.FlowSuccess=1]="FlowSuccess",M[M.FlowEnd=2]="FlowEnd",M[M.FlowAbort=3]="FlowAbort",M[M.FlowWait=4]="FlowWait",M[M.FlowFire=5]="FlowFire",M[M.NodeStart=6]="NodeStart",M[M.NodeSuccess=7]="NodeSuccess",M[M.NodeProcessing=8]="NodeProcessing",M[M.NodeError=9]="NodeError",M[M.NodePending=10]="NodePending",M[M.NodeRevive=11]="NodeRevive",M[M.NodeIntercept=12]="NodeIntercept",M[M.NodeRelease=13]="NodeRelease",M[M.NodeStagnate=14]="NodeStagnate",M[M.NodeBucketSuccess=15]="NodeBucketSuccess",M[M.EntangleWarn=16]="EntangleWarn",M[M.EntangleBlocked=17]="EntangleBlocked",M))(Ce||{}),Le=(r=>(r[r.CAUSALITY=0]="CAUSALITY",r[r.INVERSION=1]="INVERSION",r[r.REPERCUSSION=2]="REPERCUSSION",r))(Le||{});var _e=(r=>(r.OR="OR",r.PRIORITY="PRIORITY",r.MERGE="MERGE",r))(_e||{});var He=class{computedRules=[];getRuleResult(e,t,r){if(e.entityId==="__base__")return e.logic(t);if(!(!e._hasRun||r(e.triggerUids)))return e._lastResult;let l=e.logic(t);return l instanceof Promise?l.then(u=>(e._lastResult=u,e._hasRun=true,u)):(e._lastResult=l,e._hasRun=true,l)}store={OR:(e,t,r)=>{let i,l,u=this.computedRules;for(let a=0;a<u.length;a++){let o=u[a],p=this.getRuleResult(o,e,r);if(p instanceof Promise)return (async()=>{let n=await p;if(o.entityId==="__base__"?l=n:n&&(i=n),typeof i>"u")for(let P=a+1;P<u.length;P++){let m=u[P],S=this.getRuleResult(m,e,r),N=S instanceof Promise?await S:S;if(m.entityId==="__base__"){l=N;continue}if(N){i=m.value;break}}return typeof i>"u"&&(i=l),{res:i,version:t}})();let h=p;if(o.entityId==="__base__"){l=h;continue}if(h){i=o.value;break}}return typeof i>"u"&&(i=l),{res:i,version:t}},PRIORITY:(e,t,r)=>{let i,l=this.computedRules;for(let u=0;u<l.length;u++){let a=l[u],o=this.getRuleResult(a,e,r);if(o instanceof Promise)return (async()=>{let p=await o;if(p!==void 0)return {res:a.value!==void 0?a.value:p,version:t};for(let h=u+1;h<l.length;h++){let n=l[h],P=this.getRuleResult(n,e,r),m=P instanceof Promise?await P:P;if(m!==void 0)return {res:m,version:t}}return {res:void 0,version:t}})();if(o!==void 0)return {res:a.value!==void 0?a.value:o,version:t}}return {res:i,version:t}},MERGE:(e,t,r)=>{let i,l,u=this.computedRules,a=(p,h)=>p===void 0?h:h===void 0?p:Array.isArray(p)&&Array.isArray(h)?[...h,...p]:typeof p=="object"&&typeof h=="object"?{...h,...p}:p;for(let p=0;p<u.length;p++){let h=u[p],n=this.getRuleResult(h,e,r);if(n instanceof Promise)return (async()=>{let m=await n,S=(x,b)=>{if(x.entityId==="__base__")l=a(l,b);else if(b){let M=x.value!==void 0?x.value:b;i=a(i,M);}};S(h,m);for(let x=p+1;x<u.length;x++){let b=u[x],M=this.getRuleResult(b,e,r),se=M instanceof Promise?await M:M;S(b,se);}return {res:a(i,l),version:t}})();let P=n;if(h.entityId==="__base__"){l=a(l,P);continue}if(P){let m=h.value!==void 0?h.value:P;i=a(i,m);}}return {res:a(i,l),version:t}}};CurrentStrategy=()=>{};CurrentStrategyType="PRIORITY";getRules=()=>{};constructor(e){this.getRules=e,this.CurrentStrategy=this.store.PRIORITY,this.updateComputedRules();}updateComputedRules(){let e=this.getRules();this.CurrentStrategyType==="PRIORITY"||this.CurrentStrategyType==="MERGE"?this.computedRules=Array.from(e.values()).map(t=>Array.from(t)).flat().sort((t,r)=>r.priority-t.priority):this.computedRules=Array.from(e.values()).map(t=>Array.from(t)).flat();}setStrategy(e){this.CurrentStrategyType=e,this.CurrentStrategy=this.store[e],this.updateComputedRules();}evaluate(e,t,r){return this.CurrentStrategy(e,t,r)}},we=class{path;strategy;contract;rules=new Map;isValue=false;id=0;cache=void 0;pendingPromise=null;version=0;deps=new Map;_forceNotify=false;promiseToken=null;useCache=true;effectArray=[];constructor(e,t,r){let i=()=>this.rules;this.strategy=new He(i),this.path=r,this.isValue=t==="value",this.contract=this.inferType(e),this.cache=e,this.setRule({priority:0,entityId:"__base__",logic:()=>e});}setUseCache(e){this.useCache=e;}forceNotify(){this._forceNotify=true;}isForceNotify(){return this._forceNotify}setStrategy(e){this.strategy.setStrategy(e);}setDefaultRule(e){let t=new Set;t.add(e),this.rules.set(-1,t);}setRules(e,t){t&&this.updateDeps(t);let r=++this.id,i={...e,entityId:r};for(let l of e.triggerUids)this.rules.has(l)||this.rules.set(l,new Set),this.rules.get(l).add(i);return this.strategy.updateComputedRules(),()=>{for(let l of e.triggerUids){let u=this.rules.get(l);u&&(u.delete(i),u.size===0&&(this.rules.delete(l),this.deps.delete(l)));}this.strategy.updateComputedRules();}}updateDeps(e){for(let[t,r,i]of e){if(r.length==0)continue;let l=this.deps.get(t)||Object.create(null);for(let u of r)l[u]=i[u];this.deps.set(t,l);}}setRule(e,t){if(t&&this.updateDeps(t),typeof e.entityId=="string"){this.setDefaultRule(e);return}let r=++this.id,i={...e,entityId:r};if(e)for(let l of e.triggerUids)this.rules.has(l)||this.rules.set(l,new Set),this.rules.get(l).add(i);return this.strategy.updateComputedRules(),()=>{for(let l of e.triggerUids){let u=this.rules.get(l);u&&(u.delete(i),u.size===0&&(this.rules.delete(l),this.deps.delete(l)));}this.strategy.updateComputedRules();}}setSideEffect(e){this.effectArray.push(e);}getSideEffect(){return [...this.effectArray]}evaluate(e){let t=null;if(e.GetToken&&(t=e.GetToken()),this.pendingPromise&&this.promiseToken!==t&&(this.pendingPromise=null,this.promiseToken=null),this.pendingPromise)return this.pendingPromise;let r=false;if(typeof e.triggerUid=="number"){r=true,this.deps.size==0&&(r=false);for(let[a,o]of this.deps.entries()){let p=e.getStateByUid(a);if(!p){r=false;break}for(let h in o){let n=o[h],P=p[h];if(typeof n=="object"&&n!==null){r=false;break}if(n!==P){r=false;break}}if(!r)break}}if(r&&this.useCache)return this.cache;this.promiseToken=t;let i=++this.version,l=a=>{if(!a||a.length===0)return true;for(let o of a){let p=this.deps.get(o);if(!p)return true;let h=e.getProxyByUid(o);if(!h)return true;for(let n in p){let P=p[n],m=h[n];if(typeof P=="object"&&P!==null||P!==m)return true}}return false},u=this.strategy.evaluate(e,i,l);if(!(u instanceof Promise)){let{res:a,version:o}=u;return this.finalizeSync(a,o,e,t)}return this.pendingPromise=(async()=>{try{let{res:a,version:o}=await u;return this.finalizeSync(a,o,e,t)}catch(a){throw {path:this.path,error:a}}finally{this.promiseToken===t&&(this.pendingPromise=null,this.promiseToken=null);}})(),this.pendingPromise}finalizeSync(e,t,r,i){return i!==this.promiseToken||t<this.version?this.cache:(this.cache=e,this.deps.forEach((l,u)=>{let a=r.getProxyByUid(u);if(!a)return;let o=Object.keys(l);for(let p of o)l[p]=a[p];}),e)}inferType(e){return Array.isArray(e)?"array":typeof e}};var Xe=(g,e,t)=>{let i=l=>{let u=t.triggerUids.map(p=>{let h=l.getProxyByUid(p);if(t.triggerKeys.length===0)return h;let n={};return t.triggerKeys.forEach(P=>{n[P]=h[P];}),n}),a=Object.create(null);return Object.defineProperty(a,"triggerTargets",{get:()=>u}),Object.defineProperty(a,"affectedTatget",{get:()=>l.getProxyByUid(g)[e]}),t.logic({slot:a})};return {value:t.value,targetUid:g,triggerUids:t.triggerUids,priority:t.priority??10,logic:i}},Ze=(g,e,t,r,i,l,u,a)=>{if(!g)throw Error();let o=g,p=(P,m)=>{typeof r[P]>"u"&&(r[P]=[],l[P]=new Set),l[P].add(m),l[P].size>r[P].length&&r[P].push(m),typeof i[m]>"u"&&(i[m]=[],u[m]=new Set),u[m].add(P),u[m].size>i[m].length&&i[m].push(P);};return {SetRule:(P,m,S,N)=>{let x=o(P),b=o(m),M=N.triggerKeys||[],se=a.get(b.uid)||0,U=a.get(x.uid)||0;se+=1,U+=1,a.set(b.uid,se),a.set(x.uid,U);let _=Xe(b.uid,S,{...N,triggerUids:[x.uid],triggerKeys:M}),ee=[P].map(C=>{let te=o(C);return [te.uid,M,te.proxy]});if(p(x.uid,b.uid),typeof b.nodeBucket[S]=="number"){let C=t(b.nodeBucket[S]);C.setRule(_,ee),N.effect&&C.setSideEffect({fn:N.effect,args:N.effectArgs?N.effectArgs:[S]});}else {let C=b.meta[S],te=new we(C,S,m);te.setRule(_,ee),N.effect&&te.setSideEffect({fn:N.effect,args:N.effectArgs?N.effectArgs:[S]}),b.nodeBucket[S]=e(te);}b.state[S]=b.meta[S];let z=t(b.nodeBucket[S]);N.forceNotify&&z.forceNotify(),N.cacheStrategy=="none"&&z.setUseCache(false);},SetRules:(P,m,S,N)=>{let x=o(m),b=a.get(x.uid)||0;b+=1,a.set(x.uid,b);let M=[];for(let z of P){let C=o(z);M.push(C.uid);let te=a.get(C.uid)||0;te+=1,a.set(C.uid,te),p(C.uid,x.uid);}let se=N.triggerKeys||[],U=Xe(x.uid,S,{...N,triggerUids:M,triggerKeys:se}),_=P.map(z=>{let C=o(z);return [C.uid,se,C.state]});if(typeof x.nodeBucket[S]=="number"){let z=t(x.nodeBucket[S]);z.setRules(U,_),N.effect&&z.setSideEffect({fn:N.effect,args:N.effectArgs?N.effectArgs:[S]});}else {let z=x.meta[S],C=new we(z,S,m);C.setRules(U,_),N.effect&&C.setSideEffect({fn:N.effect,args:N.effectArgs?N.effectArgs:[S]}),x.nodeBucket[S]=e(C);}x.state[S]=x.meta[S];let ee=t(x.nodeBucket[S]);N.forceNotify&&ee.forceNotify(),N.cacheStrategy=="none"&&ee.setUseCache(false);}}};var Je=(g,e)=>{let t=g||void 0;if(!t)throw Error();return {SetStrategy:(i,l,u)=>{let a=t(i);e(a.nodeBucket[l]).setStrategy(u);}}};function et(){let g=new Map,e=new Map,t=new Set,r=(u,a)=>{g.set(u,a);let o=e.get(u);o&&o(a);};return {SetTrace:(u,a)=>{e.set(u,a);let o=g.get(u)||"idle";return a(o),{cancel:()=>{e.delete(u);}}},useTrace:()=>({apply:a=>{a.on(0,()=>{t.forEach(o=>r(o,"idle")),t.clear(),g.clear();}),a.on(13,({path:o,type:p})=>{(p==1||p==2)&&(t.add(o),r(o,"pending"));}),a.on(10,({path:o})=>{t.add(o),(!g.has(o)||g.get(o)==="idle")&&r(o,"pending");}),a.on(6,({path:o})=>{t.add(o),r(o,"calculating");}),a.on(7,({path:o})=>{r(o,"calculated");}),a.on(12,({path:o,type:p})=>{p==3&&r(o,"calculating"),p==6&&r(o,"idle");}),a.on(14,({path:o})=>{r(o,"pending");}),a.on(9,({path:o})=>r(o,"error"));}})}}function nt(g,e,t,r){return {GetNextDependency:h=>r()[h]||[],GetPrevDependency:h=>t()[h]||[],GetAllPrevDependency:h=>e()[h]||[],GetAllNextDependency:h=>g()[h]||[],rebuildDirectDependencyMaps:h=>{let n=[],P=[],m=g();for(let S of h){let N=m[S]||[];n[S]=N;for(let x=0;x<N.length;x++){let b=N[x];typeof P[b]>"u"&&(P[b]=[]),P[b].push(S);}}return {directNextMap:n,directPrevMap:P}}}}function rt(g,e){let t=i=>{let l=[],u=[],a=new Map,o=i.size,p=0,h=0;for(let[n,P]of i)P===0&&u.push(n);if(u.length===0&&o>0)throw Error("Circular dependency detected");for(;u.length>0;){l.push([...u]);let n=[];for(let P of u){p++,a.set(P,h);let m=g[P];if(m)for(let S of m){let N=i.get(S)-1;i.set(S,N),N===0&&n.push(S);}}u=n,h++;}if(p<o)throw Error("Circular dependency detected");return {steps:l,levelMap:a}};return ()=>{let i=new Map;for(let l of e.keys()){let u=g[l]||[];i.has(l)||i.set(l,0);for(let a of u){let o=i.get(a)||0;i.set(a,++o);}}return t(i)}}var Ge=()=>{let g=[];return {on:e=>(g.push(e),()=>{let t=g.indexOf(e);t>-1&&g.splice(t,1);}),call:e=>g.forEach(t=>{t(e);})}};function st(){let{on:g,call:e}=Ge();return {onError:g,callOnError:e}}function at(){let{on:g,call:e}=Ge();return {onSuccess:g,callOnSuccess:e}}var ot=()=>{let g=new Set,e=new Map,t=new Set,r=(a,o)=>{e.get(a)?.forEach(p=>p(o));},i=(a,o)=>(e.has(a)||e.set(a,new Set),e.get(a).add(o),()=>e.get(a)?.delete(o));return {usePlugin:a=>{let o=new Set,p=(n,P)=>{let m=i(n,P);return o.add(m),m};a.apply({on:p}),g.add(a);let h=()=>{o.forEach(n=>n()),o.clear(),g.delete(a),t.delete(h);};return t.add(h),h},emit:r,destroyPlugin:()=>{t.forEach(a=>a()),t.clear(),e.clear(),g.clear();}}};function it(){let{on:g,call:e}=Ge();return {onStart:g,callOnStart:e}}var lt=(g={frameQuota:12})=>{let e=performance.now(),t=0,r=false,i=()=>!!navigator?.scheduling?.isInputPending?.({includeContinuous:true});return {getIsFirstFrame:()=>r,reset(){e=performance.now(),t=0,r=true;},shouldYield(){return !r&&(++t&15)!==0?false:!!(performance.now()-e>g.frameQuota||i())},async yieldToMain(){return new Promise(l=>{Ye(()=>{e=performance.now(),t=0,r&&(r=false),l();});})}}},Ye=g=>{let{port1:e,port2:t}=new MessageChannel;e.onmessage=g,t.postMessage(null);};function ut(g,e,t,r,i,l){let u=new Map,a=g.useGreedy,o=null,p=()=>{u.clear();},h={path:null,level:0,targetLevel:0,currentLevel:0,pendingParentsCount:0,active:0,pending:0,blocked:0,nums:0,asyncNums:0},n={path:null,type:0,triggerPath:null,calledBy:0,key:null,value:null,error:null,token:null,duration:null,detail:h},P=false,m=[],S=null,N=(b,M,se)=>{m.push({uid:b,key:M,value:se}),!P&&(S||(S=Promise.resolve().then(()=>{S=null,P||x(null,[]);})));},x=async(b,M)=>{let U=Symbol("token"),_=typeof b=="number"?b:"__NOTIFY_ALL__";u.set(_,U),o=U,P=true;let ee=false,z=false;l.reset(),t.Turnstile.nextEpoch();let C=t.GetMaxUid()+3,te=new Array(C).fill(0),d=0,s=new Uint8Array(C),H=new Int32Array(C),k=new Int32Array(C),Y=new Int32Array(C*2),A=0,E=0,T=new Int32Array(C*2),O=0,v=0,G=new Int32Array(C*2),c=0,y=0;M.forEach(f=>{te[f]=1,e.GetAllNextDependency(f).forEach(W=>{te[W]=1;});});let w=new Array(C).fill(null),V=[],q=t.Turnstile,ae=new Array(C).fill(null).map(()=>[]),de=new Array(C).fill(null).map(()=>[]),me=[],Ne=()=>{if(m.length===0)return false;let f=false,W=1/0;for(;m.length>0;){let{uid:D,key:Q,value:le}=m.shift(),L=t.GetNodeByUid(D);if(me.includes(D)||me.push(D),!Object.is(L.state[Q],le)){f=true,L.state[Q]=le,i.flushPathSet.add(D),L.calledBy=1;let ne=w[D]||[];ne.includes(Q)||ne.push(Q),w[D]=ne,s[D]&=-17,s[D]&2&&(s[D]&=-3,v--),s[D]&1||(s[D]|=1,Y[A++]=D,E++);let X=e.GetUidToLevelMap().get(D)??0;X<W&&(W=X),Se(D);}}return f&&(ie===void 0||ie>W)&&(ie=W),f},Te=q.volatileLevels.size>0,Pe=Te?q.hasObserver:f=>false,xe=Te?q.receiveGhosts:()=>[],Oe=Te?q.resolveGhosts:()=>[],ke=Te?q.getTriggerKeys:()=>[],De=q?.volatileLevels||new Set,be=-1,oe=e.GetUidToLevelMap(),ie=0,Re=0,Se=f=>{e.GetAllNextDependency(f).forEach(D=>{let Q=oe.get(D)||0;Q>Re&&(Re=Q);});};Ne();let Ie=new Set;typeof b=="number"&&(s[b]|=16,Ie.add(b),Se(b),i.flushPathSet.add(b));let Be=typeof b=="number"?[b]:[...M,...me];l.shouldYield()&&(i.requestUpdate(),await l.yieldToMain());let We=Be.map(async f=>{if(Pe(f)){let W=t.GetNodeByUid(f),D=ke(f);if(D.length>0){let Q=xe(W,D);return Q instanceof Promise&&(Q=await Q),{seed:f,hitTargets:Q}}}return {seed:f,hitTargets:[]}});if((await Promise.all(We)).forEach(({seed:f,hitTargets:W})=>{if(W&&W.length>0){V.push(...W);let D=oe.get(f)||0;be=Math.max(be,D);}}),(V.length>0||Be.length>1)&&(i.requestUpdate(),await l.yieldToMain(),u.get(_)!==U))return;let ze=V.length>0;M.forEach(f=>{if(!Ie.has(f))if(ze){let W=oe.get(f)??0;k[f]=W,s[f]&4||(s[f]|=4,G[c++]=f,y++);let D=t.GetPathByUid(f);n.path=D,n.type=2,r.emit(14,n);}else s[f]&1||(s[f]|=1,Y[A++]=f,E++),Se(f);}),typeof b=="number"?ie=oe.get(b)??0:ie=Math.min(...M.map(f=>oe.get(f)??0));let qe=performance.now(),Ue=typeof _=="number"?t.GetPathByUid(_):"__NOTIFY_ALL__";n.path=Ue,n.token=U,r.emit(0,n),r.callOnStart({path:Ue});let Ve=false,Qe=30,$e=(f,W)=>{let D=false,Q=false,le=false,L=t.GetNodeByUid(f),ne=t.GetPathByUid(f),X=L.calledBy,K=ae[f];K.length=0;let B=Pe(f),I=B?ke(f):[],F=R=>{B&&(I.length===0||I.includes(R))&&K.push(R);},ue=de[f];ue.length=0;let ye=false;if(L.calledBy===1){ye=true,D=true,i.flushPathSet.add(f);let R=w[f];R&&(K.push(...R),w[f]=null);}let fe=(R,J)=>{let re=oe.get(R)??0,he=t.GetNodeByUid(R),Z=t.GetPathByUid(R),ge=(X===1||X===2)&&re<=be;ge&&s[R]&16&&(s[R]&=-17,n.path=Z,n.triggerPath=ne,r.emit(11,n));let ce=0;if(!(s[R]&49)){if(s[R]&2)ce=H[R]-1;else {if(re>ie&&v>Qe){k[R]=re,s[R]&4||(s[R]|=4,G[c++]=R,y++),n.path=Z,n.type=7,r.emit(12,n);return}let Ee=e.GetPrevDependency(R),$=0;for(let Me of Ee){if(s[Me]&16)continue;(oe.get(Me)??0)>ie&&$++;}ce=$;}if(ce<=0){let Ee=(s[R]&1)!==0,$=(s[R]&32)!==0;if(Ee||$){n.path=Z,n.type=$?3:3.1,r.emit(12,n);return}s[R]&2&&(s[R]&=-3,v--),ge?he.calledBy=2:he.calledBy=0,s[R]&1||(s[R]|=1,Y[A++]=R,E++),n.path=Z,n.type=J,h.path=ne,r.emit(13,n);}else H[R]=ce,s[R]&2||(s[R]|=2,T[O++]=R,v++);}},ve=(R=[])=>{if(u.get(_)!==U)return;if(R.length){let re={},he=L.proxy;for(let Z of R){let ge=(Z.args||[]).reduce((ce,Ee)=>(ce[Ee]=he[Ee],ce),{});try{let ce=Z.fn(ge);ce&&typeof ce=="object"&&Object.assign(re,ce);}catch(ce){}}for(let Z in re)if(Z in L.state)Object.is(L.state[Z],re[Z])||(L.state[Z]=re[Z],F(Z),D=true,(L.notifyKeys.size===0||L.notifyKeys.has(Z))&&(Q=true));else throw {error:`wrong effect in ${String(L.path)}`}}D&&i.flushPathSet.add(f);let J=(re=[])=>{if(u.get(_)!==U)return;re&&re.length>0&&(V.push(...re),be=Math.max(be,oe.get(f)||0)),K.length=0,n.path=ne,n.calledBy=L.calledBy,r.emit(7,n),s[f]|=16;let he=e.GetNextDependency(f);(Q||le)&&(Se(f),e.GetAllNextDependency(f).forEach(Me=>{te[Me]=1;}));let Z=t.GetNodeByUid(f),ge=oe.get(f)??0,ce=De.has(ge)||V.length>0;for(let $ of he){let Me=oe.get($)??0,Ae=t.GetPathByUid($);if(ce&&Me>=ge){k[$]=Me,s[$]&4||(s[$]|=4,G[c++]=$,y++),n.path=Ae,n.type=2,r.emit(14,n);continue}if(s[$]&16){n.path=Ae,n.type=2,r.emit(12,n);continue}if(s[$]&32||(s[$]&1)!==0){n.path=Ae,n.type=s[$]&32?3:3.1,r.emit(12,n);continue}if(Q||le)fe($,1);else if(s[$]&2)fe($,2);else {let pt=oe.get($);k[$]=pt,s[$]&4||(s[$]|=4,G[c++]=$,y++,n.path=Ae,n.type=1,r.emit(14,n));}}s[f]&32&&(s[f]&=-33,d--),Z.calledBy=0,(()=>{if(!ee){ee=true;let $=d,Me=E,Ae=v;n.path=ne,n.type=1,h.active=$,h.pending=Me,h.blocked=Ae,r.emit(5,n),j();}})();};if(Pe(f)&&K.length>0){let re=xe(L,K);re instanceof Promise?re.then(J).catch(Fe):J(re);}else J([]);},Fe=R=>{n.path=ne,n.error=R,r.emit(9,n);let J=Symbol("abort");u.set(_,J),A=0,E=0,O=0,v=0,c=0,y=0,s.fill(0),d=0,w.fill(null),P=false,r.callOnError(R);},pe=(R,J)=>{R!==L.state[J]&&(L.state[J]=R,D=true,F(String(J)),n.path=ne,n.key=J,n.value=R,n.calledBy=L.calledBy,r.emit(15,n),(L.notifyKeys.size===0||L.notifyKeys.has(J))&&(Q=true)),t.GetBucket(L.nodeBucket[J]).isForceNotify()&&(le=true),(Q||le)&&Se(f);};n.path=ne,n.calledBy=L.calledBy,r.emit(6,n);try{let R=[];for(let J in L.nodeBucket){let re=t.GetBucket(L.nodeBucket[J]);if(R.push(...re.getSideEffect()),ye){r.emit(15,{path:ne,key:String(J),value:L.state[J],calledBy:L.calledBy}),re.isForceNotify()&&(le=!0),(L.notifyKeys.size===0||L.notifyKeys.has(J))&&Se(f);continue}let he=re.evaluate({affectKey:J,triggerUid:W,getProxyByUid:Z=>t.GetNodeByUid(Z).proxy,getStateByUid:Z=>t.GetNodeByUid(Z).state,GetToken:()=>U});if(he instanceof Promise){let Z=he.then(ge=>{u.get(_)===U&&pe(ge,J);});ue.push(Z);}else pe(he,J);}if(ue.length>0)return Promise.all(ue).then(()=>{ve(R);}).catch(Fe);ve(R);return}catch(R){Fe(R);}},j=async()=>{if(u.get(_)!==U){ee=false;return}ee=true;let f=l.getIsFirstFrame(),W=0,D=()=>30,Q=0,le=D();try{for(;u.get(_)===U;){let L=Q>=le,ne=l.shouldYield();if(L||ne){if(Q>0&&(W++,(f||W%2===0)&&i.requestUpdate()),await l.yieldToMain(),u.get(_)!==U)break;Q=0,f=l.getIsFirstFrame();}if(E>0&&d<40){let X=A,K=0;for(let B=0;B<X;B++){let I=Y[B];if((s[I]&1)===0)continue;if(d>=40||Q>=le||l.shouldYield()){for(let pe=B;pe<A;pe++){let R=Y[pe];s[R]&1&&(Y[K++]=R);}A=K,E=K;break}let F=t.GetNodeByUid(I),ue=t.GetPathByUid(I),ye=oe.get(I)??0,fe=e.GetPrevDependency(I),ve=fe.length>1;if((!a||ve)&&ye>ie){s[I]&=-2,E--;let pe=fe.filter(R=>te[R]===1&&(s[R]&16)===0).length;H[I]=pe||0,s[I]&2||(s[I]|=2,T[O++]=I,v++),n.path=ue,n.type=pe>0?4:5,h.targetLevel=ye,h.currentLevel=ie,h.pendingParentsCount=pe,r.emit(12,n);continue}s[I]&=-2,E--,(s[I]&32)===0&&(s[I]|=32,d++),n.path=ue,n.calledBy=F.calledBy,r.emit(8,n),$e(I,b),Q++;}if(A>X){for(let B=X;B<A;B++){let I=Y[B];s[I]&1&&(Y[K++]=I);}A=K,E=A;}else A=K;if(E>0&&d<40)continue}if(Q<le&&a&&v>0&&d<40){let X=!1,K=0,B=0;for(let I=0;I<O;I++){let F=T[I];if((s[F]&2)===0)continue;if(H[F]<=0&&K<le){let ye=oe.get(F)??0,fe=e.GetPrevDependency(F);if(ye<=ie||fe.length<=1){s[F]&=-3,v--,s[F]&1||(s[F]|=1,Y[A++]=F,E++),K++,X=!0;let ve=t.GetPathByUid(F);n.path=ve,n.type=4,r.emit(13,n);continue}}T[B++]=F;}if(O=B,K>0)continue;if(X){if(l.shouldYield()&&(await l.yieldToMain(),u.get(_)!==U))break;continue}}if(d===0&&E===0){if(q.inFlightCount>0)break;if(V.length>0){let K=!1,B=ie,I=Array.from(new Set(V));V.length=0;for(let F of I){let ue=t.GetNodeByUid(F),ye=Oe(ue);if(ye&&ye.length>0){K=!0,ue.calledBy=1,w[F]=ye,s[F]&=-17,s[F]&2&&(s[F]&=-3,v--),s[F]&1||(s[F]|=1,Y[A++]=F,E++);let fe=oe.get(ue.uid)??0;fe<B&&(B=fe),Se(ue.uid),i.flushPathSet.add(ue.uid);}}if(K){if(B<ie&&(ie=B),i.requestUpdate(),l.shouldYield()&&(await l.yieldToMain(),u.get(_)!==U))break;continue}}let X=1/0;for(let K=0;K<c;K++){let B=G[K];if(s[B]&4){let I=k[B];I<X&&(X=I);}}for(let K=0;K<O;K++){let B=T[K];if(s[B]&2){let I=oe.get(B)??0;I>ie&&I<X&&(X=I);}}if(X!==1/0&&X<=Re){ie=X;let K=0;for(let I=0;I<c;I++){let F=G[I];s[F]&4&&(k[F]===X?(s[F]&=-5,y--,s[F]&1||(s[F]|=1,Y[A++]=F,E++)):G[K++]=F);}c=K;let B=0;for(let I=0;I<O;I++){let F=T[I];if(s[F]&2)if((oe.get(F)??0)===X){s[F]&=-3,v--,s[F]&1||(s[F]|=1,Y[A++]=F,E++);let ye=t.GetPathByUid(F);n.path=ye,n.type=3,h.level=X,r.emit(13,n);}else T[B++]=F;}O=B;continue}else {for(let K=0;K<c;K++){let B=G[K];if(s[B]&4){s[B]|=16;let I=t.GetPathByUid(B);n.path=I,n.type=6,r.emit(12,n);}}c=0,y=0;for(let K=0;K<O;K++){let B=T[K];if(s[B]&2){s[B]|=16;let I=t.GetPathByUid(B);n.path=I,n.type=6,r.emit(12,n);}}O=0,v=0;break}}E>0&&d>=40&&(n.type=2,r.emit(4,n));break}}finally{ee=false;let L=d+v+E,ne=q.inFlightCount||0;if(!(o===U)){n.token=U,r.emit(3,n);return}if(i.requestUpdate(),L===0&&ne===0){if(u.get(_)===U&&!Ve){Ve=true,n.type=1,r.emit(2,n),q.resetCounters(),w.fill(null),P=false;let K=performance.now();be=-1,u.delete(_),n.token=U,n.duration=(K-qe).toFixed(2.1)+"ms",r.emit(1,n),Promise.resolve().then(()=>{r.callOnSuccess();});}}else {let K=L===0&&ne>0?3:1;if(n.type=K,h.nums=d,h.asyncNums=ne,r.emit(4,n),ne>0&&!z){z=true;let B=()=>{if(o!==U){z=false;return}if(q.inFlightCount===0){z=false,Ne(),Ye(()=>{o===U&&q.inFlightCount===0&&j();});return}else q.inFlightCount,requestAnimationFrame(B);};requestAnimationFrame(B);}}}};j();};return {TaskRunner:x,CancelTask:p,stageValueFn:N}}function je(g){let{path:e,uid:t,type:r,meta:i,dirtySignal:l,state:u}=g,a=null,o=["path","uid","type","dependOn","nodeBucket"],h={path:e,uid:t,type:r,meta:i,dirtySignal:l,createView:(n={})=>{if(a&&Object.keys(n).length===0)return a;let P=new Proxy(n,{get(m,S){let N=S;return Reflect.has(m,S)?Reflect.get(m,S):N in g.state?g.state[N]:N in g?g[N]:i&&N in i?i[N]:Reflect.get(m,S)},set(m,S,N){return false},ownKeys(m){let S=new Set([...Reflect.ownKeys(m),...Object.keys(u||{}),...Object.keys(i||{}),...o]);return Array.from(S)},getOwnPropertyDescriptor(m,S){let N=S;return Reflect.has(m,S)||u&&N in u||i&&N in i||o.includes(N)?{enumerable:true,configurable:true}:Reflect.getOwnPropertyDescriptor(m,S)}});return a=P,P}};return "children"in g?{...h,children:g.children}:{...h,state:g.state,nodeBucket:g.nodeBucket,notifyKeys:g.notifyKeys,dependOn:g.dependOn,calledBy:0,get proxy(){return a}}}var ct=(g,e,t,r,i,l,u)=>{let a=g.useEntangleStep,o=[],p=[],h=new Set,n=r,S=t,N=0,x=0,b=0,M=100,se=()=>{let d={link:null,impactNode:null,impactUid:-1,hitTargetUids:null,isDirty:false,propose:null};return d.propose={set:(s,H,k=1)=>{d.epoch===b&&H!==d.impactNode.state[s]&&(d.link.count++,(!p[d.impactUid]||p[d.impactUid].length===0)&&(p[d.impactUid]=[],x++),p[d.impactUid].push({key:s,value:H,weight:k}),d.isDirty||(d.hitTargetUids.push(d.impactUid),d.isDirty=true));},update:(s,H,k="add")=>{d.epoch===b&&(d.link.count++,(!p[d.impactUid]||p[d.impactUid].length===0)&&(p[d.impactUid]=[],x++),p[d.impactUid].push({key:s,delta:H,op:k,weight:1}),d.isDirty||(d.hitTargetUids.push(d.impactUid),d.isDirty=true));},patch:(s,H)=>{d.epoch===b&&(d.link.count++,(!p[d.impactUid]||p[d.impactUid].length===0)&&(p[d.impactUid]=[],x++),p[d.impactUid].push({key:s,patch:H,weight:1}),d.isDirty||(d.hitTargetUids.push(d.impactUid),d.isDirty=true));}},d},U=Array.from({length:M},se),_=M-1,ee=(d,s,H)=>{let k=s.path,Y=d.impact;if(d.count>=a){u.emit("entangle:blocked",{observer:k,target:Y,count:d.count});return}let A=n(Y),E=d.isProxy?s.proxy:s,T=d.isProxy?A.proxy:A;if(d.filter&&!d.filter(E,T))return;let O,v=true;_<0?(O=se(),v=false):O=U[_--];let G=b;O.epoch=G,O.isDirty=false,O.link=d,O.impactNode=A,O.impactUid=A.uid,O.hitTargetUids=H;let c=d.emit(E,T,O.propose);if(c instanceof Promise||c&&typeof c.then=="function")return N++,(async()=>{try{await c;}catch(y){u.emit("node:error",{path:k,error:y}),u.onError({path:k,error:y});}finally{G===b&&N--,v&&(U[++_]=O);}})();v&&(U[++_]=O);};return {useEntangle:d=>{let{cause:s,impact:H,via:k,emit:Y,filter:A,isProxy:E}=d;if(!k||k.length===0){u.emit("entangle:warn",{path:s,type:"no_keys"});return}let O=n(s).uid;o[O]||(o[O]=new Map);let v=o[O];for(let G=0;G<k.length;G++){let c=k[G];v.has(c)||v.set(c,[]),v.get(c).push({impact:H,emit:Y,filter:A,count:0,isProxy:!!E});}},updateEntangleLevel:()=>{let d=S();h.clear();for(let s=0;s<o.length;s++)if(o[s]!==void 0){let H=d.get(s)||0;h.add(H);}},Turnstile:{volatileLevels:h,get inFlightCount(){return N},get hasPendingGhosts(){return x>0},nextEpoch:()=>{b++,N=0,x=0,p.length=0;},hasObserver:d=>o[d]!==void 0,getTriggerKeys:d=>{let s=o[d];return s?Array.from(s.keys()):[]},receiveGhosts:(d,s=[])=>{let H=d.uid,k=[],Y=o[H];if(!Y||s.length===0)return k;let A=[];for(let G=0;G<s.length;G++){let c=Y.get(s[G]);if(c)for(let y=0;y<c.length;y++)A.push(c[y]);}let E=0,T=false,O=null;for(;E<A.length;E++){if(e.shouldYield()){T=true;break}let G=ee(A[E],d,k);if(G){O=G,T=true,E++;break}}let v=()=>{if(k.length<=1)return k;let G=[],c=Object.create(null);for(let y=0;y<k.length;y++){let w=k[y];c[w]||(c[w]=true,G.push(w));}return G};return T?(async()=>{for(O&&await O,e.shouldYield()&&await e.yieldToMain();E<A.length;){let G=[],c=Math.min(E+M,A.length);for(;E<c;E++){let y=ee(A[E],d,k);y&&G.push(y);}G.length>0&&await Promise.all(G.map(async y=>{await y,e.shouldYield()&&await e.yieldToMain();})),e.shouldYield()&&await e.yieldToMain();}return v()})():v()},resolveGhosts:d=>{let s=d.uid,H=p[s];if(!H||H.length===0)return [];let k=[],Y=Object.create(null);for(let A=0;A<H.length;A++){let E=H[A];Y[E.key]||(Y[E.key]=[]),Y[E.key].push(E);}for(let A in Y){let E=Y[A],T=d.state[A],O,v=-1/0,G=false;for(let c=0;c<E.length;c++){let y=E[c];if(y.patch!==void 0&&(T=y.patch(T)),y.value!==void 0){let w=y.weight??1;w>=v&&(v=w,O=y.value,G=true);}}G&&(T=O);for(let c=0;c<E.length;c++){let y=E[c];if(y.delta!==void 0)switch(y.op||"add"){case "add":T=(typeof T=="number"?T:0)+y.delta;break;case "remove":T=Array.isArray(T)?T.filter(V=>V!==y.delta):T;break;case "intersect":T=Array.isArray(T)?T.filter(V=>y.delta.includes(V)):y.delta;break;case "union":{let V=Array.isArray(T)?T:[],q=Array.isArray(y.delta)?y.delta:[y.delta];T=[...new Set([...V,...q])];break}case "merge":{let V=typeof T=="object"&&T!==null&&!Array.isArray(T)?T:{},q=typeof y.delta=="object"&&y.delta!==null&&!Array.isArray(y.delta)?y.delta:{};T={...V,...q};break}}}Object.is(d.state[A],T)||(d.state[A]=T,k.push(A));}return p[s]=[],x--,k.length>0?k:[]},resetCounters:()=>{for(let d=0;d<o.length;d++){let s=o[d];if(s)for(let H of s.values())for(let k=0;k<H.length;k++)H[k].count=0;}}}}};function yt(g,e,t,r,i){let l=lt(),u=0,a=new Map,o=[],p=[],h=[],n=[],P=false,m=new Set,N=async()=>{let c=Array.from(m);if(m.clear(),"signalTrigger"in i&&typeof i.signalTrigger=="function")for(let y of c){let w=s(y);i.signalTrigger(w.dirtySignal);}else "emit"in i&&i.emit(c);},x=()=>{P||(P=true,requestAnimationFrame(()=>{try{for(;m.size>0;)N();}finally{P=false;}}));},{useEntangle:b,updateEntangleLevel:M,Turnstile:se}=ct({useEntangleStep:g.useEntangleStep},l,e.GetUidToLevelMap,d,s,H,{emit:r.emit,onError:r.callOnError}),{TaskRunner:U,CancelTask:_,stageValueFn:ee}=ut({useGreedy:g.useGreedy},e,{GetNodeByPath:d,GetNodeByUid:s,GetPathByUid:H,GetBucket:A,GetMaxUid:E,Turnstile:se},r,{requestUpdate:x,flushPathSet:m},l),z=c=>{throw new Error(`[MeshFlow] Duplicate Path: ${c}`)},C=c=>{a.has(c.path)&&z(String(c.path));let y=++u,w={path:c.path,getNode:ae=>d(ae)},V=(ae,de="value")=>{let me=ae({...w}),Ne=d(c.path);if(!Object.is(Ne.state[de],me)){if(t.createHistoryAction&&t.pushIntoHistory){let Te=t.createHistoryAction([{path:c.path,value:Ne.state[de]},{path:c.path,value:me}],Pe=>{let xe=d(Pe.path);xe.state[de]=Pe.value,T(Pe.path);});t.pushIntoHistory(Te);}Ne.state[de]=me,T(c.path);}},q=je({uid:y,type:c.type,path:c.path,state:c.state,meta:c.meta,nodeBucket:{},dirtySignal:"signalCreator"in i?i.signalCreator():void 0,notifyKeys:c.notifyKeys,dependOn:V});return a.set(q.path,y),h[y]=q.path,o[y]=q,q},te=c=>{a.has(c.path)&&z(String(c.path));let y=++u,w=je({uid:y,type:c.type,path:c.path,state:{},meta:c,nodeBucket:{},children:c.children});return a.set(w.path,y),p[y]=w,w};function d(c){let y=a.get(c),w=o[y];if(!w)throw Error("Wrong id");return w}function s(c){let y=o[c];if(!y)throw Error("Wrong id");return y}function H(c){return h[c]}function k(c){let y=a.get(c);return p[y]}function Y(c){return n.push(c)-1}function A(c){let y=n[c];if(!y)throw Error("Wrong id");return y}function E(){return u}let T=c=>{let y=d(c);if(!y)throw Error("Wrong id");m.add(y.uid),x();let w=e.GetNextDependency(y.uid);O(y.uid,w);};function O(c,y){U(c,y);}return {registerNode:C,registerGroupNode:te,GetNodeByPath:d,GetGroupByPath:k,notify:T,notifyAll:async()=>{Promise.resolve().then(async()=>{let c=e.GetDependencyOrder();if(!c||c.length===0)return;let y=c[0];try{U(null,y);}catch(w){throw r.callOnError(w),w}finally{x();}});},batchNotify:c=>{if(!c||c.length===0)return;if(t.createHistoryAction&&t.pushIntoHistory){let w=t.createHistoryAction([c.map(V=>({path:V.path,key:V.key,value:d(V.path).state[V.key]})),c.map(V=>({path:V.path,key:V.key,value:V.value}))],V=>{let q=new Set;V.forEach(ae=>{let de=d(ae.path);de.state[ae.key]=ae.value,m.add(ae.path),q.add(ae.uid);}),x(),q.size>0&&U(null,Array.from(q));});t.pushIntoHistory(w);}let y=new Set;c.forEach(w=>{let V=d(w.path);V.state[w.key]=w.value,m.add(V.uid),y.add(V.uid);}),x(),y.size>0&&U(null,Array.from(y));},useEntangle:b,updateEntangleLevel:M,SetBucket:Y,GetBucket:A,CancelTask:_,stageValueFn:ee,UITrigger:i,UidToNodeMap:o}}function dt(g,e){let t=false,r=false,i=false,l=false,u=new Map,a=[],o=[],p=[],h=[],n=[],P=[],m=[],S=new Map,{GetNextDependency:x,GetPrevDependency:b,GetAllPrevDependency:M,GetAllNextDependency:se,rebuildDirectDependencyMaps:U}=nt(()=>a,()=>p,()=>P,()=>n),_={},ee={};if(e.modules.useHistory){let j=e.modules.useHistory,f;j.isMeshModuleInited?f=j:f=j();let{Undo:W,Redo:D,PushIntoHistory:Q,CreateHistoryAction:le,updateUndoSize:L,updateRedoSize:ne}=f();_.pushIntoHistory=Q,_.createHistoryAction=le,ee={Undo:W,Redo:D,updateUndoSize:L,updateRedoSize:ne};}let z=!!e.modules.useMeshRenderGate,C={};if(z){let j=e.modules.useMeshRenderGate.isMeshModuleInited,f=e.modules.useMeshRenderGate;C=(j?f:f())(()=>ae);}let{onError:te,callOnError:d}=st(),{onSuccess:s,callOnSuccess:H}=at(),{onStart:k,callOnStart:Y}=it(),{emit:A,usePlugin:E,destroyPlugin:T}=ot(),{SetTrace:O,useTrace:v}=et(),G=v();E(G);let c=z?{...C}:{...e.UITrigger},y=yt({useGreedy:e.config.useGreedy,useEntangleStep:e.config.useEntangleStep||100},{GetDependencyOrder:()=>m,GetAllNextDependency:se,GetNextDependency:x,GetPrevDependency:b,GetAllPrevDependency:M,GetUidToLevelMap:()=>S},_,{callOnError:d,callOnSuccess:H,callOnStart:Y,emit:A},c),{SetBucket:w,GetBucket:V,GetGroupByPath:q,GetNodeByPath:ae,notifyAll:de,useEntangle:me,updateEntangleLevel:Ne,CancelTask:Te,stageValueFn:Pe}=y;z&&C.init();let xe={};if(e.modules.useInternalForm){let{uiSchema:j,GetFormData:f}=e.modules.useInternalForm(y,g);xe={uiSchema:j,GetFormData:f};}let Oe={};if(e.modules.useSchemaValidators){let{SetValidators:j}=e.modules.useSchemaValidators(ae);Oe={SetValidators:j};}let{SetRule:ke,SetRules:De}=Ze(ae,w,V,a,p,o,h,u),{SetStrategy:be}=Je(ae,V),oe=rt(a,u),ie=()=>{let j=oe();m=j.steps,S=j.levelMap,Re();},Re=()=>{i&&(Ne(),i=false);},Se=()=>{l||(l=true,Promise.resolve().then(Re).finally(()=>{l=false;}));},Ie=()=>{r||(r=true,Promise.resolve().then(()=>{if(ie(),t){let{directNextMap:j,directPrevMap:f}=U(m.flat());n=j,P=f;}}).finally(()=>{r=false,t=false;}));};return {SetRule:(j,f,W,D)=>{ke(j,f,W,D),t=true,Ie();},SetRules:(j,f,W,D)=>{De(j,f,W,D),t=true,Ie();},SetStrategy:be,useEntangle:j=>{me(j),i=true,Se();},SetTrace:O,usePlugin:E,SetValue:(j,f,W)=>{Re(),ae(j).dependOn(()=>W,f);},GetValue:(j,f="value")=>ae(j).proxy[f],SetValues:j=>{Re(),y.batchNotify(j);},GetGroupByPath:q,notifyAll:async()=>{ie(),await de();},GetAllDependency:()=>a,GetDependencyOrder:()=>m,historyExports:ee,formExports:xe,validatorExports:Oe,batchRenderExport:C,hasRenderGate:()=>z,onError:te,onSuccess:s,onStart:k,scheduler:y,destroyPlugin:T,CancelTask:Te,StageValue:(j,f,W)=>{let D=ae(j);Pe(D.uid,f,W);}}}var Ke=new Map,ht=(g,e,t)=>{try{if(Ke.has(g))throw Error("engineID repeated");let r=dt(e,{config:t.config||{useGreedy:!1},UITrigger:t.UITrigger,modules:t.modules??{},plugins:{}}),{SetRule:i,SetRules:l,SetValues:u,SetStrategy:a,SetValue:o,GetValue:p,usePlugin:h,useEntangle:n,GetGroupByPath:P,notifyAll:m,SetTrace:S,GetAllDependency:N,GetDependencyOrder:x,historyExports:b,formExports:M,validatorExports:se,batchRenderExport:U,hasRenderGate:_,onError:ee,onSuccess:z,onStart:C,scheduler:te,destroyPlugin:d,CancelTask:s,StageValue:H}=r,k={config:{SetRule:i,SetRules:l,SetStrategy:a,notifyAll:m,SetTrace:S,usePlugin:h,hasRenderGate:_,useEntangle:n},data:{SetValue:o,GetValue:p,SetValues:u,GetGroupByPath:P,StageValue:H},dependency:{GetAllDependency:N,GetDependencyOrder:x},hooks:{onError:ee,onSuccess:z,onStart:C}},Y=(T,O,v)=>{!O||typeof O!="object"||Object.keys(O).forEach(G=>{let c=O[G];if(typeof c=="object"&&c!==null)T[G]=T[G]||{},Y(T[G],c,v);else if(typeof c=="function"){let y=G;if(y==="useMeshRenderGate")y="render";else if(y.startsWith("use")){let w=y.slice(3);y=w.charAt(0).toLowerCase()+w.slice(1);}G==="useHistory"&&v.exports.history&&Object.keys(v.exports.history).length>0?T[y]=v.exports.history:G==="useInternalForm"&&v.exports.form&&Object.keys(v.exports.form).length>0?T[y]=v.exports.form:G==="useSchemaValidators"&&v.exports.validator&&Object.keys(v.exports.validator).length>0?T[y]=v.exports.validator:G==="useMeshRenderGate"&&v.exports.render?T[y]=v.exports.render:T[y]=c(v.scheduler,v.Schema);}});},A={...k,destroyPlugin:d,CancelTask:s,modules:{}},E=t.modules;return E&&Y(A.modules,E,{scheduler:te,Schema:e,exports:{history:b,form:M,validator:se,render:U}}),Ke.set(g,A),A}catch(r){throw Error(r)}},xn=()=>(g,e,t)=>ht(g,e,t),An=g=>{let e=Ke.get(g);if(!e)throw Error("Engine not found.");return e},vn=g=>{let e=Ke.get(g);e.destroyPlugin(),e.CancelTask(),Ke.delete(g);};exports.DefaultStrategy=_e;exports.MeshFlowEventsName=Ce;exports.TriggerCause=Le;exports.deleteEngine=vn;exports.useEngine=An;exports.useMeshFlow=ht;exports.useMeshFlowDefiner=xn;exports.useScheduler=yt;
package/index.mjs CHANGED
@@ -1 +1 @@
1
- var Ce=(P=>(P[P.FlowStart=0]="FlowStart",P[P.FlowSuccess=1]="FlowSuccess",P[P.FlowEnd=2]="FlowEnd",P[P.FlowAbort=3]="FlowAbort",P[P.FlowWait=4]="FlowWait",P[P.FlowFire=5]="FlowFire",P[P.NodeStart=6]="NodeStart",P[P.NodeSuccess=7]="NodeSuccess",P[P.NodeProcessing=8]="NodeProcessing",P[P.NodeError=9]="NodeError",P[P.NodePending=10]="NodePending",P[P.NodeRevive=11]="NodeRevive",P[P.NodeIntercept=12]="NodeIntercept",P[P.NodeRelease=13]="NodeRelease",P[P.NodeStagnate=14]="NodeStagnate",P[P.NodeBucketSuccess=15]="NodeBucketSuccess",P[P.EntangleWarn=16]="EntangleWarn",P[P.EntangleBlocked=17]="EntangleBlocked",P))(Ce||{}),Ue=(r=>(r[r.CAUSALITY=0]="CAUSALITY",r[r.INVERSION=1]="INVERSION",r[r.REPERCUSSION=2]="REPERCUSSION",r))(Ue||{});var Ve=(r=>(r.OR="OR",r.PRIORITY="PRIORITY",r.MERGE="MERGE",r))(Ve||{});var Le=class{computedRules=[];getRuleResult(e,t,r){if(e.entityId==="__base__")return e.logic(t);if(!(!e._hasRun||r(e.triggerUids)))return e._lastResult;let i=e.logic(t);return i instanceof Promise?i.then(l=>(e._lastResult=l,e._hasRun=true,l)):(e._lastResult=i,e._hasRun=true,i)}store={OR:(e,t,r)=>{let o,i,l=this.computedRules;for(let s=0;s<l.length;s++){let a=l[s],p=this.getRuleResult(a,e,r);if(p instanceof Promise)return (async()=>{let n=await p;if(a.entityId==="__base__"?i=n:n&&(o=n),typeof o>"u")for(let M=s+1;M<l.length;M++){let f=l[M],m=this.getRuleResult(f,e,r),b=m instanceof Promise?await m:m;if(f.entityId==="__base__"){i=b;continue}if(b){o=f.value;break}}return typeof o>"u"&&(o=i),{res:o,version:t}})();let h=p;if(a.entityId==="__base__"){i=h;continue}if(h){o=a.value;break}}return typeof o>"u"&&(o=i),{res:o,version:t}},PRIORITY:(e,t,r)=>{let o,i=this.computedRules;for(let l=0;l<i.length;l++){let s=i[l],a=this.getRuleResult(s,e,r);if(a instanceof Promise)return (async()=>{let p=await a;if(p!==void 0)return {res:s.value!==void 0?s.value:p,version:t};for(let h=l+1;h<i.length;h++){let n=i[h],M=this.getRuleResult(n,e,r),f=M instanceof Promise?await M:M;if(f!==void 0)return {res:f,version:t}}return {res:void 0,version:t}})();if(a!==void 0)return {res:s.value!==void 0?s.value:a,version:t}}return {res:o,version:t}},MERGE:(e,t,r)=>{let o,i,l=this.computedRules,s=(p,h)=>p===void 0?h:h===void 0?p:Array.isArray(p)&&Array.isArray(h)?[...h,...p]:typeof p=="object"&&typeof h=="object"?{...h,...p}:p;for(let p=0;p<l.length;p++){let h=l[p],n=this.getRuleResult(h,e,r);if(n instanceof Promise)return (async()=>{let f=await n,m=(S,R)=>{if(S.entityId==="__base__")i=s(i,R);else if(R){let P=S.value!==void 0?S.value:R;o=s(o,P);}};m(h,f);for(let S=p+1;S<l.length;S++){let R=l[S],P=this.getRuleResult(R,e,r),te=P instanceof Promise?await P:P;m(R,te);}return {res:s(o,i),version:t}})();let M=n;if(h.entityId==="__base__"){i=s(i,M);continue}if(M){let f=h.value!==void 0?h.value:M;o=s(o,f);}}return {res:s(o,i),version:t}}};CurrentStrategy=()=>{};CurrentStrategyType="PRIORITY";getRules=()=>{};constructor(e){this.getRules=e,this.CurrentStrategy=this.store.PRIORITY,this.updateComputedRules();}updateComputedRules(){let e=this.getRules();this.CurrentStrategyType==="PRIORITY"||this.CurrentStrategyType==="MERGE"?this.computedRules=Array.from(e.values()).map(t=>Array.from(t)).flat().sort((t,r)=>r.priority-t.priority):this.computedRules=Array.from(e.values()).map(t=>Array.from(t)).flat();}setStrategy(e){this.CurrentStrategyType=e,this.CurrentStrategy=this.store[e],this.updateComputedRules();}evaluate(e,t,r){return this.CurrentStrategy(e,t,r)}},Ae=class{path;strategy;contract;rules=new Map;isValue=false;id=0;cache=void 0;pendingPromise=null;version=0;deps=new Map;_forceNotify=false;promiseToken=null;useCache=true;effectArray=[];constructor(e,t,r){let o=()=>this.rules;this.strategy=new Le(o),this.path=r,this.isValue=t==="value",this.contract=this.inferType(e),this.cache=e,this.setRule({priority:0,entityId:"__base__",logic:()=>e});}setUseCache(e){this.useCache=e;}forceNotify(){this._forceNotify=true;}isForceNotify(){return this._forceNotify}setStrategy(e){this.strategy.setStrategy(e);}setDefaultRule(e){let t=new Set;t.add(e),this.rules.set(-1,t);}setRules(e,t){t&&this.updateDeps(t);let r=++this.id,o={...e,entityId:r};for(let i of e.triggerUids)this.rules.has(i)||this.rules.set(i,new Set),this.rules.get(i).add(o);return this.strategy.updateComputedRules(),()=>{for(let i of e.triggerUids){let l=this.rules.get(i);l&&(l.delete(o),l.size===0&&(this.rules.delete(i),this.deps.delete(i)));}this.strategy.updateComputedRules();}}updateDeps(e){for(let[t,r,o]of e){if(r.length==0)continue;let i=this.deps.get(t)||Object.create(null);for(let l of r)i[l]=o[l];this.deps.set(t,i);}}setRule(e,t){if(t&&this.updateDeps(t),typeof e.entityId=="string"){this.setDefaultRule(e);return}let r=++this.id,o={...e,entityId:r};if(e)for(let i of e.triggerUids)this.rules.has(i)||this.rules.set(i,new Set),this.rules.get(i).add(o);return this.strategy.updateComputedRules(),()=>{for(let i of e.triggerUids){let l=this.rules.get(i);l&&(l.delete(o),l.size===0&&(this.rules.delete(i),this.deps.delete(i)));}this.strategy.updateComputedRules();}}setSideEffect(e){this.effectArray.push(e);}getSideEffect(){return [...this.effectArray]}evaluate(e){let t=null;if(e.GetToken&&(t=e.GetToken()),this.pendingPromise&&this.promiseToken!==t&&(this.pendingPromise=null,this.promiseToken=null),this.pendingPromise)return this.pendingPromise;let r=false;if(typeof e.triggerUid=="number"){r=true,this.deps.size==0&&(r=false);for(let[s,a]of this.deps.entries()){let p=e.getStateByUid(s);if(!p){r=false;break}for(let h in a){let n=a[h],M=p[h];if(typeof n=="object"&&n!==null){r=false;break}if(n!==M){r=false;break}}if(!r)break}}if(r&&this.useCache)return this.cache;this.promiseToken=t;let o=++this.version,i=s=>{if(!s||s.length===0)return true;for(let a of s){let p=this.deps.get(a);if(!p)return true;let h=e.getProxyByUid(a);if(!h)return true;for(let n in p){let M=p[n],f=h[n];if(typeof M=="object"&&M!==null||M!==f)return true}}return false},l=this.strategy.evaluate(e,o,i);if(!(l instanceof Promise)){let{res:s,version:a}=l;return this.finalizeSync(s,a,e,t)}return this.pendingPromise=(async()=>{try{let{res:s,version:a}=await l;return this.finalizeSync(s,a,e,t)}catch(s){throw {path:this.path,error:s}}finally{this.promiseToken===t&&(this.pendingPromise=null,this.promiseToken=null);}})(),this.pendingPromise}finalizeSync(e,t,r,o){return o!==this.promiseToken||t<this.version?this.cache:(this.cache=e,this.deps.forEach((i,l)=>{let s=r.getProxyByUid(l);if(!s)return;let a=Object.keys(i);for(let p of a)i[p]=s[p];}),e)}inferType(e){return Array.isArray(e)?"array":typeof e}};var We=(g,e,t)=>{let o=i=>{let l=t.triggerUids.map(p=>{let h=i.getProxyByUid(p);if(t.triggerKeys.length===0)return h;let n={};return t.triggerKeys.forEach(M=>{n[M]=h[M];}),n}),s=Object.create(null);return Object.defineProperty(s,"triggerTargets",{get:()=>l}),Object.defineProperty(s,"affectedTatget",{get:()=>i.getProxyByUid(g)[e]}),t.logic({slot:s})};return {value:t.value,targetUid:g,triggerUids:t.triggerUids,priority:t.priority??10,logic:o}},ze=(g,e,t,r,o,i,l,s)=>{if(!g)throw Error();let a=g,p=(M,f)=>{typeof r[M]>"u"&&(r[M]=[],i[M]=new Set),i[M].add(f),i[M].size>r[M].length&&r[M].push(f),typeof o[f]>"u"&&(o[f]=[],l[f]=new Set),l[f].add(M),l[f].size>o[f].length&&o[f].push(M);};return {SetRule:(M,f,m,b)=>{let S=a(M),R=a(f),P=b.triggerKeys||[],te=s.get(R.uid)||0,_=s.get(S.uid)||0;te+=1,_+=1,s.set(R.uid,te),s.set(S.uid,_);let Z=We(R.uid,m,{...b,triggerUids:[S.uid],triggerKeys:P}),W=[M].map(L=>{let c=a(L);return [c.uid,P,c.proxy]});if(p(S.uid,R.uid),typeof R.nodeBucket[m]=="number"){let L=t(R.nodeBucket[m]);L.setRule(Z,W),b.effect&&L.setSideEffect({fn:b.effect,args:b.effectArgs?b.effectArgs:[m]});}else {let L=R.meta[m],c=new Ae(L,m,f);c.setRule(Z,W),b.effect&&c.setSideEffect({fn:b.effect,args:b.effectArgs?b.effectArgs:[m]}),R.nodeBucket[m]=e(c);}R.state[m]=R.meta[m];let y=t(R.nodeBucket[m]);b.forceNotify&&y.forceNotify(),b.cacheStrategy=="none"&&y.setUseCache(false);},SetRules:(M,f,m,b)=>{let S=a(f),R=s.get(S.uid)||0;R+=1,s.set(S.uid,R);let P=[];for(let y of M){let L=a(y);P.push(L.uid);let c=s.get(L.uid)||0;c+=1,s.set(L.uid,c),p(L.uid,S.uid);}let te=b.triggerKeys||[],_=We(S.uid,m,{...b,triggerUids:P,triggerKeys:te}),Z=M.map(y=>{let L=a(y);return [L.uid,te,L.state]});if(typeof S.nodeBucket[m]=="number"){let y=t(S.nodeBucket[m]);y.setRules(_,Z),b.effect&&y.setSideEffect({fn:b.effect,args:b.effectArgs?b.effectArgs:[m]});}else {let y=S.meta[m],L=new Ae(y,m,f);L.setRules(_,Z),b.effect&&L.setSideEffect({fn:b.effect,args:b.effectArgs?b.effectArgs:[m]}),S.nodeBucket[m]=e(L);}S.state[m]=S.meta[m];let W=t(S.nodeBucket[m]);b.forceNotify&&W.forceNotify(),b.cacheStrategy=="none"&&W.setUseCache(false);}}};var qe=(g,e)=>{let t=g||void 0;if(!t)throw Error();return {SetStrategy:(o,i,l)=>{let s=t(o);e(s.nodeBucket[i]).setStrategy(l);}}};function Qe(){let g=new Map,e=new Map,t=new Set,r=(l,s)=>{g.set(l,s);let a=e.get(l);a&&a(s);};return {SetTrace:(l,s)=>{e.set(l,s);let a=g.get(l)||"idle";return s(a),{cancel:()=>{e.delete(l);}}},useTrace:()=>({apply:s=>{s.on(0,()=>{t.forEach(a=>r(a,"idle")),t.clear(),g.clear();}),s.on(13,({path:a,type:p})=>{(p==1||p==2)&&(t.add(a),r(a,"pending"));}),s.on(10,({path:a})=>{t.add(a),(!g.has(a)||g.get(a)==="idle")&&r(a,"pending");}),s.on(6,({path:a})=>{t.add(a),r(a,"calculating");}),s.on(7,({path:a})=>{r(a,"calculated");}),s.on(12,({path:a,type:p})=>{p==3&&r(a,"calculating"),p==6&&r(a,"idle");}),s.on(14,({path:a})=>{r(a,"pending");}),s.on(9,({path:a})=>r(a,"error"));}})}}function Xe(g,e,t,r){return {GetNextDependency:h=>r()[h]||[],GetPrevDependency:h=>t()[h]||[],GetAllPrevDependency:h=>e()[h]||[],GetAllNextDependency:h=>g()[h]||[],rebuildDirectDependencyMaps:h=>{let n=[],M=[],f=g();for(let m of h){let b=f[m]||[];n[m]=b;for(let S=0;S<b.length;S++){let R=b[S];typeof M[R]>"u"&&(M[R]=[]),M[R].push(m);}}return {directNextMap:n,directPrevMap:M}}}}function Ze(g,e){let t=o=>{let i=[],l=[],s=new Map,a=o.size,p=0,h=0;for(let[n,M]of o)M===0&&l.push(n);if(l.length===0&&a>0)throw Error("Circular dependency detected");for(;l.length>0;){i.push([...l]);let n=[];for(let M of l){p++,s.set(M,h);let f=g[M];if(f)for(let m of f){let b=o.get(m)-1;o.set(m,b),b===0&&n.push(m);}}l=n,h++;}if(p<a)throw Error("Circular dependency detected");return {steps:i,levelMap:s}};return ()=>{let o=new Map;for(let i of e.keys()){let l=g[i]||[];o.has(i)||o.set(i,0);for(let s of l){let a=o.get(s)||0;o.set(s,++a);}}return t(o)}}var Ne=()=>{let g=[];return {on:e=>(g.push(e),()=>{let t=g.indexOf(e);t>-1&&g.splice(t,1);}),call:e=>g.forEach(t=>{t(e);})}};function Je(){let{on:g,call:e}=Ne();return {onError:g,callOnError:e}}function et(){let{on:g,call:e}=Ne();return {onSuccess:g,callOnSuccess:e}}var tt=()=>{let g=new Set,e=new Map,t=new Set,r=(s,a)=>{e.get(s)?.forEach(p=>p(a));},o=(s,a)=>(e.has(s)||e.set(s,new Set),e.get(s).add(a),()=>e.get(s)?.delete(a));return {usePlugin:s=>{let a=new Set,p=(n,M)=>{let f=o(n,M);return a.add(f),f};s.apply({on:p}),g.add(s);let h=()=>{a.forEach(n=>n()),a.clear(),g.delete(s),t.delete(h);};return t.add(h),h},emit:r,destroyPlugin:()=>{t.forEach(s=>s()),t.clear(),e.clear(),g.clear();}}};function nt(){let{on:g,call:e}=Ne();return {onStart:g,callOnStart:e}}var rt=(g={frameQuota:12})=>{let e=performance.now(),t=0,r=false,o=()=>!!navigator?.scheduling?.isInputPending?.({includeContinuous:true});return {getIsFirstFrame:()=>r,reset(){e=performance.now(),t=0,r=true;},shouldYield(){return !r&&(++t&15)!==0?false:!!(performance.now()-e>g.frameQuota||o())},async yieldToMain(){return new Promise(i=>{_e(()=>{e=performance.now(),t=0,r&&(r=false),i();});})}}},_e=g=>{let{port1:e,port2:t}=new MessageChannel;e.onmessage=g,t.postMessage(null);};function st(g,e,t,r,o,i){let l=new Map,s=g.useGreedy,a=null,p=()=>{l.clear();},h={path:null,level:0,targetLevel:0,currentLevel:0,pendingParentsCount:0,active:0,pending:0,blocked:0,nums:0,asyncNums:0},n={path:null,type:0,triggerPath:null,calledBy:0,key:null,value:null,error:null,token:null,duration:null,detail:h};return {TaskRunner:async(f,m)=>{let S=Symbol("token"),R=typeof f=="number"?f:"__NOTIFY_ALL__";l.set(R,S),a=S;let P=false,te=false;i.reset();let _=t.GetMaxUid()+3,Z=new Array(_).fill(0),W=0,y=new Uint8Array(_),L=new Int32Array(_),c=new Int32Array(_),A=new Int32Array(_*2),w=0,E=0,H=new Int32Array(_*2),F=0,O=0,T=new Int32Array(_*2),K=0,U=0;m.forEach(N=>{Z[N]=1,e.GetAllNextDependency(N).forEach(se=>{Z[se]=1;});});let k=new Array(_).fill(null),d=[],u=t.Turnstile,B=new Array(_).fill(null).map(()=>[]),j=new Array(_).fill(null).map(()=>[]),ne=u.volatileLevels.size>0,oe=ne?u.hasObserver:N=>false,re=ne?u.receiveGhosts:()=>[],Se=ne?u.resolveGhosts:()=>[],me=ne?u.getTriggerKeys:()=>[],Re=u?.volatileLevels||new Set,de=-1,J=e.GetUidToLevelMap(),ie=0,Ee=0,Pe=N=>{e.GetAllNextDependency(N).forEach(ae=>{let v=J.get(ae)||0;v>Ee&&(Ee=v);});},Ge=new Set;typeof f=="number"&&(y[f]|=16,Ge.add(f),Pe(f),o.flushPathSet.add(f));let we=typeof f=="number"?[f]:m;i.shouldYield()&&(o.requestUpdate(),await i.yieldToMain());let Ie=we.map(async N=>{if(oe(N)){let se=t.GetNodeByUid(N),ae=me(N);if(ae.length>0){let v=re(se,ae);return v instanceof Promise&&(v=await v),{seed:N,hitTargets:v}}}return {seed:N,hitTargets:[]}});if((await Promise.all(Ie)).forEach(({seed:N,hitTargets:se})=>{if(se&&se.length>0){d.push(...se);let ae=J.get(N)||0;de=Math.max(de,ae);}}),(d.length>0||we.length>1)&&(o.requestUpdate(),await i.yieldToMain(),l.get(R)!==S))return;let Ke=d.length>0;m.forEach(N=>{if(!Ge.has(N))if(Ke){let se=J.get(N)??0;c[N]=se,y[N]&4||(y[N]|=4,T[K++]=N,U++);let ae=t.GetPathByUid(N);n.path=ae,n.type=2,r.emit(14,n);}else y[N]&1||(y[N]|=1,A[w++]=N,E++),Pe(N);}),typeof f=="number"?ie=J.get(f)??0:ie=Math.min(...m.map(N=>J.get(N)??0));let Oe=performance.now(),De=typeof R=="number"?t.GetPathByUid(R):"__NOTIFY_ALL__";n.path=De,n.token=S,r.emit(0,n),r.callOnStart({path:De});let Be=false,Ye=30,je=(N,se)=>{let ae=false,v=false,Y=false,V=t.GetNodeByUid(N),$=t.GetPathByUid(N),q=V.calledBy,I=B[N];I.length=0;let C=oe(N),G=C?me(N):[],D=x=>{C&&(G.length===0||G.includes(x))&&I.push(x);},le=j[N];le.length=0;let ce=false;if(V.calledBy===1){ce=true,ae=true,o.flushPathSet.add(N);let x=k[N];x&&(I.push(...x),k[N]=null);}let ye=(x,X)=>{let ee=J.get(x)??0,pe=t.GetNodeByUid(x),Q=t.GetPathByUid(x),he=(q===1||q===2)&&ee<=de;he&&y[x]&16&&(y[x]&=-17,n.path=Q,n.triggerPath=$,r.emit(11,n));let ue=0;if(!(y[x]&49)){if(y[x]&2)ue=L[x]-1;else {if(ee>ie&&O>Ye){c[x]=ee,y[x]&4||(y[x]|=4,T[K++]=x,U++),n.path=Q,n.type=7,r.emit(12,n);return}let Me=e.GetPrevDependency(x),z=0;for(let ge of Me){if(y[ge]&16)continue;(J.get(ge)??0)>ie&&z++;}ue=z;}if(ue<=0){let Me=(y[x]&1)!==0,z=(y[x]&32)!==0;if(Me||z){n.path=Q,n.type=z?3:3.1,r.emit(12,n);return}y[x]&2&&(y[x]&=-3,O--),he?pe.calledBy=2:pe.calledBy=0,y[x]&1||(y[x]|=1,A[w++]=x,E++),n.path=Q,n.type=X,h.path=$,r.emit(13,n);}else L[x]=ue,y[x]&2||(y[x]|=2,H[F++]=x,O++);}},Te=(x=[])=>{if(l.get(R)!==S)return;if(x.length){let ee={},pe=V.proxy;for(let Q of x){let he=(Q.args||[]).reduce((ue,Me)=>(ue[Me]=pe[Me],ue),{});try{let ue=Q.fn(he);ue&&typeof ue=="object"&&Object.assign(ee,ue);}catch(ue){}}for(let Q in ee)if(Q in V.state)Object.is(V.state[Q],ee[Q])||(V.state[Q]=ee[Q],D(Q),ae=true,(V.notifyKeys.size===0||V.notifyKeys.has(Q))&&(v=true));else throw {error:`wrong effect in ${String(V.path)}`}}ae&&o.flushPathSet.add(N);let X=(ee=[])=>{if(l.get(R)!==S)return;ee&&ee.length>0&&(d.push(...ee),de=Math.max(de,J.get(N)||0)),I.length=0,n.path=$,n.calledBy=V.calledBy,r.emit(7,n),y[N]|=16;let pe=e.GetNextDependency(N);(v||Y)&&(Pe(N),e.GetAllNextDependency(N).forEach(ge=>{Z[ge]=1;}));let Q=t.GetNodeByUid(N),he=J.get(N)??0,ue=Re.has(he)||d.length>0;for(let z of pe){let ge=J.get(z)??0,be=t.GetPathByUid(z);if(ue&&ge>=he){c[z]=ge,y[z]&4||(y[z]|=4,T[K++]=z,U++),n.path=be,n.type=2,r.emit(14,n);continue}if(y[z]&16){n.path=be,n.type=2,r.emit(12,n);continue}if(y[z]&32||(y[z]&1)!==0){n.path=be,n.type=y[z]&32?3:3.1,r.emit(12,n);continue}if(v||Y)ye(z,1);else if(y[z]&2)ye(z,2);else {let lt=J.get(z);c[z]=lt,y[z]&4||(y[z]|=4,T[K++]=z,U++,n.path=be,n.type=1,r.emit(14,n));}}y[N]&32&&(y[N]&=-33,W--),Q.calledBy=0,(()=>{if(!P){P=true;let z=W,ge=E,be=O;n.path=$,n.type=1,h.active=z,h.pending=ge,h.blocked=be,r.emit(5,n),ke();}})();};if(oe(N)&&I.length>0){let ee=re(V,I);ee instanceof Promise?ee.then(X).catch(Fe):X(ee);}else X([]);},Fe=x=>{n.path=$,n.error=x,r.emit(9,n);let X=Symbol("abort");l.set(R,X),w=0,E=0,F=0,O=0,K=0,U=0,y.fill(0),W=0,k.fill(null),r.callOnError(x);},fe=(x,X)=>{x!==V.state[X]&&(V.state[X]=x,ae=true,D(String(X)),n.path=$,n.key=X,n.value=x,n.calledBy=V.calledBy,r.emit(15,n),(V.notifyKeys.size===0||V.notifyKeys.has(X))&&(v=true)),t.GetBucket(V.nodeBucket[X]).isForceNotify()&&(Y=true),(v||Y)&&Pe(N);};n.path=$,n.calledBy=V.calledBy,r.emit(6,n);try{let x=[];for(let X in V.nodeBucket){let ee=t.GetBucket(V.nodeBucket[X]);if(x.push(...ee.getSideEffect()),ce){r.emit(15,{path:$,key:String(X),value:V.state[X],calledBy:V.calledBy}),ee.isForceNotify()&&(Y=!0),(V.notifyKeys.size===0||V.notifyKeys.has(X))&&Pe(N);continue}let pe=ee.evaluate({affectKey:X,triggerUid:se,getProxyByUid:Q=>t.GetNodeByUid(Q).proxy,getStateByUid:Q=>t.GetNodeByUid(Q).state,GetToken:()=>S});if(pe instanceof Promise){let Q=pe.then(he=>{l.get(R)===S&&fe(he,X);});le.push(Q);}else fe(pe,X);}if(le.length>0)return Promise.all(le).then(()=>{Te(x);}).catch(Fe);Te(x);return}catch(x){Fe(x);}},ke=async()=>{if(l.get(R)!==S){P=false;return}P=true;let N=i.getIsFirstFrame(),se=0,ae=()=>30,v=0,Y=ae();try{for(;l.get(R)===S;){let V=v>=Y,$=i.shouldYield();if(V||$){if(v>0&&(se++,(N||se%2===0)&&o.requestUpdate()),await i.yieldToMain(),l.get(R)!==S)break;v=0,N=i.getIsFirstFrame();}if(E>0&&W<40){let q=w,I=0;for(let C=0;C<q;C++){let G=A[C];if((y[G]&1)===0)continue;if(W>=40||v>=Y||i.shouldYield()){for(let fe=C;fe<w;fe++){let x=A[fe];y[x]&1&&(A[I++]=x);}w=I,E=I;break}let D=t.GetNodeByUid(G),le=t.GetPathByUid(G),ce=J.get(G)??0,ye=e.GetPrevDependency(G),Te=ye.length>1;if((!s||Te)&&ce>ie){y[G]&=-2,E--;let fe=ye.filter(x=>Z[x]===1&&(y[x]&16)===0).length;L[G]=fe||0,y[G]&2||(y[G]|=2,H[F++]=G,O++),n.path=le,n.type=fe>0?4:5,h.targetLevel=ce,h.currentLevel=ie,h.pendingParentsCount=fe,r.emit(12,n);continue}y[G]&=-2,E--,(y[G]&32)===0&&(y[G]|=32,W++),n.path=le,n.calledBy=D.calledBy,r.emit(8,n),je(G,f),v++;}if(w>q){for(let C=q;C<w;C++){let G=A[C];y[G]&1&&(A[I++]=G);}w=I,E=w;}else w=I;if(E>0&&W<40)continue}if(v<Y&&s&&O>0&&W<40){let q=!1,I=0,C=0;for(let G=0;G<F;G++){let D=H[G];if((y[D]&2)===0)continue;if(L[D]<=0&&I<Y){let ce=J.get(D)??0,ye=e.GetPrevDependency(D);if(ce<=ie||ye.length<=1){y[D]&=-3,O--,y[D]&1||(y[D]|=1,A[w++]=D,E++),I++,q=!0;let Te=t.GetPathByUid(D);n.path=Te,n.type=4,r.emit(13,n);continue}}H[C++]=D;}if(F=C,I>0)continue;if(q){if(i.shouldYield()&&(await i.yieldToMain(),l.get(R)!==S))break;continue}}if(W===0&&E===0){if(u.inFlightCount>0)break;if(d.length>0){let I=!1,C=ie,G=Array.from(new Set(d));d.length=0;for(let D of G){let le=t.GetNodeByUid(D),ce=Se(le);if(ce&&ce.length>0){I=!0,le.calledBy=1,k[D]=ce,y[D]&=-17,y[D]&2&&(y[D]&=-3,O--),y[D]&1||(y[D]|=1,A[w++]=D,E++);let ye=J.get(le.uid)??0;ye<C&&(C=ye),Pe(le.uid),o.flushPathSet.add(le.uid);}}if(I){if(C<ie&&(ie=C),o.requestUpdate(),i.shouldYield()&&(await i.yieldToMain(),l.get(R)!==S))break;continue}}let q=1/0;for(let I=0;I<K;I++){let C=T[I];if(y[C]&4){let G=c[C];G<q&&(q=G);}}for(let I=0;I<F;I++){let C=H[I];if(y[C]&2){let G=J.get(C)??0;G>ie&&G<q&&(q=G);}}if(q!==1/0&&q<=Ee){ie=q;let I=0;for(let G=0;G<K;G++){let D=T[G];y[D]&4&&(c[D]===q?(y[D]&=-5,U--,y[D]&1||(y[D]|=1,A[w++]=D,E++)):T[I++]=D);}K=I;let C=0;for(let G=0;G<F;G++){let D=H[G];if(y[D]&2)if((J.get(D)??0)===q){y[D]&=-3,O--,y[D]&1||(y[D]|=1,A[w++]=D,E++);let ce=t.GetPathByUid(D);n.path=ce,n.type=3,h.level=q,r.emit(13,n);}else H[C++]=D;}F=C;continue}else {for(let I=0;I<K;I++){let C=T[I];if(y[C]&4){y[C]|=16;let G=t.GetPathByUid(C);n.path=G,n.type=6,r.emit(12,n);}}K=0,U=0;for(let I=0;I<F;I++){let C=H[I];if(y[C]&2){y[C]|=16;let G=t.GetPathByUid(C);n.path=G,n.type=6,r.emit(12,n);}}F=0,O=0;break}}E>0&&W>=40&&(n.type=2,r.emit(4,n));break}}finally{P=false;let V=W+O+E,$=u.inFlightCount||0;if(!(a===S)){n.token=S,r.emit(3,n);return}if(o.requestUpdate(),V===0&&$===0){if(l.get(R)===S&&!Be){Be=true,n.type=1,r.emit(2,n),u.resetCounters(),k.fill(null);let I=performance.now();de=-1,l.delete(R),n.token=S,n.duration=(I-Oe).toFixed(2.1)+"ms",r.emit(1,n),Promise.resolve().then(()=>{r.callOnSuccess();});}}else {let I=V===0&&$>0?3:1;if(n.type=I,h.nums=W,h.asyncNums=$,r.emit(4,n),$>0&&!te){te=true;let C=()=>{a===S&&(u.inFlightCount,u.inFlightCount===0?_e(()=>{u.inFlightCount===0?ke():requestAnimationFrame(C);}):requestAnimationFrame(C));};requestAnimationFrame(C);}}}};ke();},CancelTask:p}}function He(g){let{path:e,uid:t,type:r,meta:o,dirtySignal:i,state:l}=g,s=null,a=["path","uid","type","dependOn","nodeBucket"],h={path:e,uid:t,type:r,meta:o,dirtySignal:i,createView:(n={})=>{if(s&&Object.keys(n).length===0)return s;let M=new Proxy(n,{get(f,m){let b=m;return Reflect.has(f,m)?Reflect.get(f,m):b in g.state?g.state[b]:b in g?g[b]:o&&b in o?o[b]:Reflect.get(f,m)},set(f,m,b){return false},ownKeys(f){let m=new Set([...Reflect.ownKeys(f),...Object.keys(l||{}),...Object.keys(o||{}),...a]);return Array.from(m)},getOwnPropertyDescriptor(f,m){let b=m;return Reflect.has(f,m)||l&&b in l||o&&b in o||a.includes(b)?{enumerable:true,configurable:true}:Reflect.getOwnPropertyDescriptor(f,m)}});return s=M,M}};return "children"in g?{...h,children:g.children}:{...h,state:g.state,nodeBucket:g.nodeBucket,notifyKeys:g.notifyKeys,dependOn:g.dependOn,calledBy:0,get proxy(){return s}}}var at=(g,e,t,r,o,i,l)=>{let s=g.useEntangleStep,a=[],p=[],h=new Set,n=r,m=t,b=0,S=0,R=100,P=()=>{let c={link:null,impactNode:null,impactUid:-1,hitTargetUids:null,isDirty:false,propose:null};return c.propose={set:(A,w,E=1)=>{w!==c.impactNode.state[A]&&(c.link.count++,(!p[c.impactUid]||p[c.impactUid].length===0)&&(p[c.impactUid]=[],S++),p[c.impactUid].push({key:A,value:w,weight:E}),c.isDirty||(c.hitTargetUids.push(c.impactUid),c.isDirty=true));},update:(A,w,E="add")=>{c.link.count++,(!p[c.impactUid]||p[c.impactUid].length===0)&&(p[c.impactUid]=[],S++),p[c.impactUid].push({key:A,delta:w,op:E,weight:1}),c.isDirty||(c.hitTargetUids.push(c.impactUid),c.isDirty=true);},patch:(A,w)=>{c.link.count++,(!p[c.impactUid]||p[c.impactUid].length===0)&&(p[c.impactUid]=[],S++),p[c.impactUid].push({key:A,patch:w,weight:1}),c.isDirty||(c.hitTargetUids.push(c.impactUid),c.isDirty=true);}},c},te=Array.from({length:R},P),_=R-1,Z=(c,A,w)=>{let E=A.path,H=c.impact;if(c.count>=s){l.emit("entangle:blocked",{observer:E,target:H,count:c.count});return}let F=n(H),O=c.isProxy?A.proxy:A,T=c.isProxy?F.proxy:F;if(c.filter&&!c.filter(O,T))return;let K,U=true;_<0?(K=P(),U=false):K=te[_--],K.isDirty=false,K.link=c,K.impactNode=F,K.impactUid=F.uid,K.hitTargetUids=w;let k=c.emit(O,T,K.propose);if(k instanceof Promise||k&&typeof k.then=="function")return b++,(async()=>{try{await k;}catch(d){l.emit("node:error",{path:E,error:d}),l.onError({path:E,error:d});}finally{b--,U&&(te[++_]=K);}})();U&&(te[++_]=K);};return {useEntangle:c=>{let{cause:A,impact:w,via:E,emit:H,filter:F,isProxy:O}=c;if(!E||E.length===0){l.emit("entangle:warn",{path:A,type:"no_keys"});return}let K=n(A).uid;a[K]||(a[K]=new Map);let U=a[K];for(let k=0;k<E.length;k++){let d=E[k];U.has(d)||U.set(d,[]),U.get(d).push({impact:w,emit:H,filter:F,count:0,isProxy:!!O});}},updateEntangleLevel:()=>{let c=m();h.clear();for(let A=0;A<a.length;A++)if(a[A]!==void 0){let w=c.get(A)||0;h.add(w);}},Turnstile:{volatileLevels:h,get inFlightCount(){return b},get hasPendingGhosts(){return S>0},hasObserver:c=>a[c]!==void 0,getTriggerKeys:c=>{let A=a[c];return A?Array.from(A.keys()):[]},receiveGhosts:(c,A=[])=>{let w=c.uid,E=[],H=a[w];if(!H||A.length===0)return E;let F=[];for(let k=0;k<A.length;k++){let d=H.get(A[k]);if(d)for(let u=0;u<d.length;u++)F.push(d[u]);}let O=0,T=false,K=null;for(;O<F.length;O++){if(e.shouldYield()){T=true;break}let k=Z(F[O],c,E);if(k){K=k,T=true,O++;break}}let U=()=>{if(E.length<=1)return E;let k=[],d=Object.create(null);for(let u=0;u<E.length;u++){let B=E[u];d[B]||(d[B]=true,k.push(B));}return k};return T?(async()=>{for(K&&await K,e.shouldYield()&&await e.yieldToMain();O<F.length;){let k=[],d=Math.min(O+R,F.length);for(;O<d;O++){let u=Z(F[O],c,E);u&&k.push(u);}k.length>0&&await Promise.all(k.map(async u=>{await u,e.shouldYield()&&await e.yieldToMain();})),e.shouldYield()&&await e.yieldToMain();}return U()})():U()},resolveGhosts:c=>{let A=c.uid,w=p[A];if(!w||w.length===0)return [];let E=[],H=Object.create(null);for(let F=0;F<w.length;F++){let O=w[F];H[O.key]||(H[O.key]=[]),H[O.key].push(O);}for(let F in H){let O=H[F],T=c.state[F],K,U=-1/0,k=false;for(let d=0;d<O.length;d++){let u=O[d];if(u.patch!==void 0&&(T=u.patch(T)),u.value!==void 0){let B=u.weight??1;B>=U&&(U=B,K=u.value,k=true);}}k&&(T=K);for(let d=0;d<O.length;d++){let u=O[d];if(u.delta!==void 0)switch(u.op||"add"){case "add":T=(typeof T=="number"?T:0)+u.delta;break;case "remove":T=Array.isArray(T)?T.filter(j=>j!==u.delta):T;break;case "intersect":T=Array.isArray(T)?T.filter(j=>u.delta.includes(j)):u.delta;break;case "union":{let j=Array.isArray(T)?T:[],ne=Array.isArray(u.delta)?u.delta:[u.delta];T=[...new Set([...j,...ne])];break}case "merge":{let j=typeof T=="object"&&T!==null&&!Array.isArray(T)?T:{},ne=typeof u.delta=="object"&&u.delta!==null&&!Array.isArray(u.delta)?u.delta:{};T={...j,...ne};break}}}Object.is(c.state[F],T)||(c.state[F]=T,E.push(F));}return p[A]=[],S--,E.length>0?E:[]},resetCounters:()=>{for(let c=0;c<a.length;c++){let A=a[c];if(A)for(let w of A.values())for(let E=0;E<w.length;E++)w[E].count=0;}}}}};function ot(g,e,t,r,o){let i=rt(),l=0,s=new Map,a=[],p=[],h=[],n=[],M=false,f=new Set,b=async()=>{let d=Array.from(f);if(f.clear(),"signalTrigger"in o&&typeof o.signalTrigger=="function")for(let u of d){let B=A(u);o.signalTrigger(B.dirtySignal);}else "emit"in o&&o.emit(d);},S=()=>{M||(M=true,requestAnimationFrame(()=>{try{for(;f.size>0;)b();}finally{M=false;}}));},{useEntangle:R,updateEntangleLevel:P,Turnstile:te}=at({useEntangleStep:g.useEntangleStep},i,e.GetUidToLevelMap,c,A,w,{emit:r.emit,onError:r.callOnError}),{TaskRunner:_,CancelTask:Z}=st({useGreedy:g.useGreedy},e,{GetNodeByPath:c,GetNodeByUid:A,GetPathByUid:w,GetBucket:F,GetMaxUid:O,Turnstile:te},r,{requestUpdate:S,flushPathSet:f},i),W=d=>{throw new Error(`[MeshFlow] Duplicate Path: ${d}`)},y=d=>{s.has(d.path)&&W(String(d.path));let u=++l,B={path:d.path,getNode:oe=>c(oe)},j=(oe,re="value")=>{let Se=oe({...B}),me=c(d.path);if(!Object.is(me.state[re],Se)){if(t.createHistoryAction&&t.pushIntoHistory){let Re=t.createHistoryAction([{path:d.path,value:me.state[re]},{path:d.path,value:Se}],de=>{let J=c(de.path);J.state[re]=de.value,T(de.path);});t.pushIntoHistory(Re);}me.state[re]=Se,T(d.path);}},ne=He({uid:u,type:d.type,path:d.path,state:d.state,meta:d.meta,nodeBucket:{},dirtySignal:"signalCreator"in o?o.signalCreator():void 0,notifyKeys:d.notifyKeys,dependOn:j});return s.set(ne.path,u),h[u]=ne.path,a[u]=ne,ne},L=d=>{s.has(d.path)&&W(String(d.path));let u=++l,B=He({uid:u,type:d.type,path:d.path,state:{},meta:d,nodeBucket:{},children:d.children});return s.set(B.path,u),p[u]=B,B};function c(d){let u=s.get(d),B=a[u];if(!B)throw Error("Wrong id");return B}function A(d){let u=a[d];if(!u)throw Error("Wrong id");return u}function w(d){return h[d]}function E(d){let u=s.get(d);return p[u]}function H(d){return n.push(d)-1}function F(d){let u=n[d];if(!u)throw Error("Wrong id");return u}function O(){return l}let T=d=>{let u=c(d);if(!u)throw Error("Wrong id");f.add(u.uid),S();let B=e.GetNextDependency(u.uid);K(u.uid,B);};function K(d,u){_(d,u);}return {registerNode:y,registerGroupNode:L,GetNodeByPath:c,GetGroupByPath:E,notify:T,notifyAll:async()=>{Promise.resolve().then(async()=>{let d=e.GetDependencyOrder();if(!d||d.length===0)return;let u=d[0];try{_(null,u);}catch(B){throw r.callOnError(B),B}finally{S();}});},batchNotify:d=>{if(!d||d.length===0)return;if(t.createHistoryAction&&t.pushIntoHistory){let B=t.createHistoryAction([d.map(j=>({path:j.path,key:j.key,value:c(j.path).state[j.key]})),d.map(j=>({path:j.path,key:j.key,value:j.value}))],j=>{let ne=new Set;j.forEach(oe=>{let re=c(oe.path);re.state[oe.key]=oe.value,f.add(oe.path),ne.add(oe.uid);}),S(),ne.size>0&&_(null,Array.from(ne));});t.pushIntoHistory(B);}let u=new Set;d.forEach(B=>{let j=c(B.path);j.state[B.key]=B.value,f.add(j.uid),u.add(j.uid);}),S(),u.size>0&&_(null,Array.from(u));},useEntangle:R,updateEntangleLevel:P,SetBucket:H,GetBucket:F,CancelTask:Z,UITrigger:o,UidToNodeMap:a}}function it(g,e){let t=false,r=false,o=false,i=false,l=new Map,s=[],a=[],p=[],h=[],n=[],M=[],f=[],m=new Map,{GetNextDependency:S,GetPrevDependency:R,GetAllPrevDependency:P,GetAllNextDependency:te,rebuildDirectDependencyMaps:_}=Xe(()=>s,()=>p,()=>M,()=>n),Z={},W={};if(e.modules.useHistory){let v=e.modules.useHistory,Y;v.isMeshModuleInited?Y=v:Y=v();let{Undo:V,Redo:$,PushIntoHistory:q,CreateHistoryAction:I,updateUndoSize:C,updateRedoSize:G}=Y();Z.pushIntoHistory=q,Z.createHistoryAction=I,W={Undo:V,Redo:$,updateUndoSize:C,updateRedoSize:G};}let y=!!e.modules.useMeshRenderGate,L={};if(y){let v=e.modules.useMeshRenderGate.isMeshModuleInited,Y=e.modules.useMeshRenderGate;L=(v?Y:Y())(()=>re);}let{onError:c,callOnError:A}=Je(),{onSuccess:w,callOnSuccess:E}=et(),{onStart:H,callOnStart:F}=nt(),{emit:O,usePlugin:T,destroyPlugin:K}=tt(),{SetTrace:U,useTrace:k}=Qe(),d=k();T(d);let u=y?{...L}:{...e.UITrigger},B=ot({useGreedy:e.config.useGreedy,useEntangleStep:e.config.useEntangleStep||100},{GetDependencyOrder:()=>f,GetAllNextDependency:te,GetNextDependency:S,GetPrevDependency:R,GetAllPrevDependency:P,GetUidToLevelMap:()=>m},Z,{callOnError:A,callOnSuccess:E,callOnStart:F,emit:O},u),{SetBucket:j,GetBucket:ne,GetGroupByPath:oe,GetNodeByPath:re,notifyAll:Se,useEntangle:me,updateEntangleLevel:Re,CancelTask:de}=B;y&&L.init();let J={};if(e.modules.useInternalForm){let{uiSchema:v,GetFormData:Y}=e.modules.useInternalForm(B,g);J={uiSchema:v,GetFormData:Y};}let ie={};if(e.modules.useSchemaValidators){let{SetValidators:v}=e.modules.useSchemaValidators(re);ie={SetValidators:v};}let{SetRule:Ee,SetRules:Pe}=ze(re,j,ne,s,p,a,h,l),{SetStrategy:Ge}=qe(re,ne),we=Ze(s,l),Ie=()=>{let v=we();f=v.steps,m=v.levelMap,xe();},xe=()=>{o&&(Re(),o=false);},Ke=()=>{i||(i=true,Promise.resolve().then(xe).finally(()=>{i=false;}));},Oe=()=>{r||(r=true,Promise.resolve().then(()=>{if(Ie(),t){let{directNextMap:v,directPrevMap:Y}=_(f.flat());n=v,M=Y;}}).finally(()=>{r=false,t=false;}));};return {SetRule:(v,Y,V,$)=>{Ee(v,Y,V,$),t=true,Oe();},SetRules:(v,Y,V,$)=>{Pe(v,Y,V,$),t=true,Oe();},SetStrategy:Ge,useEntangle:v=>{me(v),o=true,Ke();},SetTrace:U,usePlugin:T,SetValue:(v,Y,V)=>{xe(),re(v).dependOn(()=>V,Y);},GetValue:(v,Y="value")=>re(v).proxy[Y],SetValues:v=>{xe(),B.batchNotify(v);},GetGroupByPath:oe,notifyAll:async()=>{Ie(),await Se();},GetAllDependency:()=>s,GetDependencyOrder:()=>f,historyExports:W,formExports:J,validatorExports:ie,batchRenderExport:L,hasRenderGate:()=>y,onError:c,onSuccess:w,onStart:H,scheduler:B,destroyPlugin:K,CancelTask:de}}var ve=new Map,ut=(g,e,t)=>{try{if(ve.has(g))throw Error("engineID repeated");let r=it(e,{config:t.config||{useGreedy:!1},UITrigger:t.UITrigger,modules:t.modules??{},plugins:{}}),{SetRule:o,SetRules:i,SetValues:l,SetStrategy:s,SetValue:a,GetValue:p,usePlugin:h,useEntangle:n,GetGroupByPath:M,notifyAll:f,SetTrace:m,GetAllDependency:b,GetDependencyOrder:S,historyExports:R,formExports:P,validatorExports:te,batchRenderExport:_,hasRenderGate:Z,onError:W,onSuccess:y,onStart:L,scheduler:c,destroyPlugin:A,CancelTask:w}=r,E={config:{SetRule:o,SetRules:i,SetStrategy:s,notifyAll:f,SetTrace:m,usePlugin:h,hasRenderGate:Z,useEntangle:n},data:{SetValue:a,GetValue:p,SetValues:l,GetGroupByPath:M},dependency:{GetAllDependency:b,GetDependencyOrder:S},hooks:{onError:W,onSuccess:y,onStart:L}},H=(T,K,U)=>{!K||typeof K!="object"||Object.keys(K).forEach(k=>{let d=K[k];if(typeof d=="object"&&d!==null)T[k]=T[k]||{},H(T[k],d,U);else if(typeof d=="function"){let u=k;if(u==="useMeshRenderGate")u="render";else if(u.startsWith("use")){let B=u.slice(3);u=B.charAt(0).toLowerCase()+B.slice(1);}k==="useHistory"&&U.exports.history&&Object.keys(U.exports.history).length>0?T[u]=U.exports.history:k==="useInternalForm"&&U.exports.form&&Object.keys(U.exports.form).length>0?T[u]=U.exports.form:k==="useSchemaValidators"&&U.exports.validator&&Object.keys(U.exports.validator).length>0?T[u]=U.exports.validator:k==="useMeshRenderGate"&&U.exports.render?T[u]=U.exports.render:T[u]=d(U.scheduler,U.Schema);}});},F={...E,destroyPlugin:A,CancelTask:w,modules:{}},O=t.modules;return O&&H(F.modules,O,{scheduler:c,Schema:e,exports:{history:R,form:P,validator:te,render:_}}),ve.set(g,F),F}catch(r){throw Error(r)}},mn=()=>(g,e,t)=>ut(g,e,t),Pn=g=>{let e=ve.get(g);if(!e)throw Error("Engine not found.");return e},Mn=g=>{let e=ve.get(g);e.destroyPlugin(),e.CancelTask(),ve.delete(g);};export{Ve as DefaultStrategy,Ce as MeshFlowEventsName,Ue as TriggerCause,Mn as deleteEngine,Pn as useEngine,ut as useMeshFlow,mn as useMeshFlowDefiner,ot as useScheduler};
1
+ var Ce=(M=>(M[M.FlowStart=0]="FlowStart",M[M.FlowSuccess=1]="FlowSuccess",M[M.FlowEnd=2]="FlowEnd",M[M.FlowAbort=3]="FlowAbort",M[M.FlowWait=4]="FlowWait",M[M.FlowFire=5]="FlowFire",M[M.NodeStart=6]="NodeStart",M[M.NodeSuccess=7]="NodeSuccess",M[M.NodeProcessing=8]="NodeProcessing",M[M.NodeError=9]="NodeError",M[M.NodePending=10]="NodePending",M[M.NodeRevive=11]="NodeRevive",M[M.NodeIntercept=12]="NodeIntercept",M[M.NodeRelease=13]="NodeRelease",M[M.NodeStagnate=14]="NodeStagnate",M[M.NodeBucketSuccess=15]="NodeBucketSuccess",M[M.EntangleWarn=16]="EntangleWarn",M[M.EntangleBlocked=17]="EntangleBlocked",M))(Ce||{}),Le=(r=>(r[r.CAUSALITY=0]="CAUSALITY",r[r.INVERSION=1]="INVERSION",r[r.REPERCUSSION=2]="REPERCUSSION",r))(Le||{});var _e=(r=>(r.OR="OR",r.PRIORITY="PRIORITY",r.MERGE="MERGE",r))(_e||{});var He=class{computedRules=[];getRuleResult(e,t,r){if(e.entityId==="__base__")return e.logic(t);if(!(!e._hasRun||r(e.triggerUids)))return e._lastResult;let l=e.logic(t);return l instanceof Promise?l.then(u=>(e._lastResult=u,e._hasRun=true,u)):(e._lastResult=l,e._hasRun=true,l)}store={OR:(e,t,r)=>{let i,l,u=this.computedRules;for(let a=0;a<u.length;a++){let o=u[a],p=this.getRuleResult(o,e,r);if(p instanceof Promise)return (async()=>{let n=await p;if(o.entityId==="__base__"?l=n:n&&(i=n),typeof i>"u")for(let P=a+1;P<u.length;P++){let m=u[P],S=this.getRuleResult(m,e,r),N=S instanceof Promise?await S:S;if(m.entityId==="__base__"){l=N;continue}if(N){i=m.value;break}}return typeof i>"u"&&(i=l),{res:i,version:t}})();let h=p;if(o.entityId==="__base__"){l=h;continue}if(h){i=o.value;break}}return typeof i>"u"&&(i=l),{res:i,version:t}},PRIORITY:(e,t,r)=>{let i,l=this.computedRules;for(let u=0;u<l.length;u++){let a=l[u],o=this.getRuleResult(a,e,r);if(o instanceof Promise)return (async()=>{let p=await o;if(p!==void 0)return {res:a.value!==void 0?a.value:p,version:t};for(let h=u+1;h<l.length;h++){let n=l[h],P=this.getRuleResult(n,e,r),m=P instanceof Promise?await P:P;if(m!==void 0)return {res:m,version:t}}return {res:void 0,version:t}})();if(o!==void 0)return {res:a.value!==void 0?a.value:o,version:t}}return {res:i,version:t}},MERGE:(e,t,r)=>{let i,l,u=this.computedRules,a=(p,h)=>p===void 0?h:h===void 0?p:Array.isArray(p)&&Array.isArray(h)?[...h,...p]:typeof p=="object"&&typeof h=="object"?{...h,...p}:p;for(let p=0;p<u.length;p++){let h=u[p],n=this.getRuleResult(h,e,r);if(n instanceof Promise)return (async()=>{let m=await n,S=(x,b)=>{if(x.entityId==="__base__")l=a(l,b);else if(b){let M=x.value!==void 0?x.value:b;i=a(i,M);}};S(h,m);for(let x=p+1;x<u.length;x++){let b=u[x],M=this.getRuleResult(b,e,r),se=M instanceof Promise?await M:M;S(b,se);}return {res:a(i,l),version:t}})();let P=n;if(h.entityId==="__base__"){l=a(l,P);continue}if(P){let m=h.value!==void 0?h.value:P;i=a(i,m);}}return {res:a(i,l),version:t}}};CurrentStrategy=()=>{};CurrentStrategyType="PRIORITY";getRules=()=>{};constructor(e){this.getRules=e,this.CurrentStrategy=this.store.PRIORITY,this.updateComputedRules();}updateComputedRules(){let e=this.getRules();this.CurrentStrategyType==="PRIORITY"||this.CurrentStrategyType==="MERGE"?this.computedRules=Array.from(e.values()).map(t=>Array.from(t)).flat().sort((t,r)=>r.priority-t.priority):this.computedRules=Array.from(e.values()).map(t=>Array.from(t)).flat();}setStrategy(e){this.CurrentStrategyType=e,this.CurrentStrategy=this.store[e],this.updateComputedRules();}evaluate(e,t,r){return this.CurrentStrategy(e,t,r)}},we=class{path;strategy;contract;rules=new Map;isValue=false;id=0;cache=void 0;pendingPromise=null;version=0;deps=new Map;_forceNotify=false;promiseToken=null;useCache=true;effectArray=[];constructor(e,t,r){let i=()=>this.rules;this.strategy=new He(i),this.path=r,this.isValue=t==="value",this.contract=this.inferType(e),this.cache=e,this.setRule({priority:0,entityId:"__base__",logic:()=>e});}setUseCache(e){this.useCache=e;}forceNotify(){this._forceNotify=true;}isForceNotify(){return this._forceNotify}setStrategy(e){this.strategy.setStrategy(e);}setDefaultRule(e){let t=new Set;t.add(e),this.rules.set(-1,t);}setRules(e,t){t&&this.updateDeps(t);let r=++this.id,i={...e,entityId:r};for(let l of e.triggerUids)this.rules.has(l)||this.rules.set(l,new Set),this.rules.get(l).add(i);return this.strategy.updateComputedRules(),()=>{for(let l of e.triggerUids){let u=this.rules.get(l);u&&(u.delete(i),u.size===0&&(this.rules.delete(l),this.deps.delete(l)));}this.strategy.updateComputedRules();}}updateDeps(e){for(let[t,r,i]of e){if(r.length==0)continue;let l=this.deps.get(t)||Object.create(null);for(let u of r)l[u]=i[u];this.deps.set(t,l);}}setRule(e,t){if(t&&this.updateDeps(t),typeof e.entityId=="string"){this.setDefaultRule(e);return}let r=++this.id,i={...e,entityId:r};if(e)for(let l of e.triggerUids)this.rules.has(l)||this.rules.set(l,new Set),this.rules.get(l).add(i);return this.strategy.updateComputedRules(),()=>{for(let l of e.triggerUids){let u=this.rules.get(l);u&&(u.delete(i),u.size===0&&(this.rules.delete(l),this.deps.delete(l)));}this.strategy.updateComputedRules();}}setSideEffect(e){this.effectArray.push(e);}getSideEffect(){return [...this.effectArray]}evaluate(e){let t=null;if(e.GetToken&&(t=e.GetToken()),this.pendingPromise&&this.promiseToken!==t&&(this.pendingPromise=null,this.promiseToken=null),this.pendingPromise)return this.pendingPromise;let r=false;if(typeof e.triggerUid=="number"){r=true,this.deps.size==0&&(r=false);for(let[a,o]of this.deps.entries()){let p=e.getStateByUid(a);if(!p){r=false;break}for(let h in o){let n=o[h],P=p[h];if(typeof n=="object"&&n!==null){r=false;break}if(n!==P){r=false;break}}if(!r)break}}if(r&&this.useCache)return this.cache;this.promiseToken=t;let i=++this.version,l=a=>{if(!a||a.length===0)return true;for(let o of a){let p=this.deps.get(o);if(!p)return true;let h=e.getProxyByUid(o);if(!h)return true;for(let n in p){let P=p[n],m=h[n];if(typeof P=="object"&&P!==null||P!==m)return true}}return false},u=this.strategy.evaluate(e,i,l);if(!(u instanceof Promise)){let{res:a,version:o}=u;return this.finalizeSync(a,o,e,t)}return this.pendingPromise=(async()=>{try{let{res:a,version:o}=await u;return this.finalizeSync(a,o,e,t)}catch(a){throw {path:this.path,error:a}}finally{this.promiseToken===t&&(this.pendingPromise=null,this.promiseToken=null);}})(),this.pendingPromise}finalizeSync(e,t,r,i){return i!==this.promiseToken||t<this.version?this.cache:(this.cache=e,this.deps.forEach((l,u)=>{let a=r.getProxyByUid(u);if(!a)return;let o=Object.keys(l);for(let p of o)l[p]=a[p];}),e)}inferType(e){return Array.isArray(e)?"array":typeof e}};var Xe=(g,e,t)=>{let i=l=>{let u=t.triggerUids.map(p=>{let h=l.getProxyByUid(p);if(t.triggerKeys.length===0)return h;let n={};return t.triggerKeys.forEach(P=>{n[P]=h[P];}),n}),a=Object.create(null);return Object.defineProperty(a,"triggerTargets",{get:()=>u}),Object.defineProperty(a,"affectedTatget",{get:()=>l.getProxyByUid(g)[e]}),t.logic({slot:a})};return {value:t.value,targetUid:g,triggerUids:t.triggerUids,priority:t.priority??10,logic:i}},Ze=(g,e,t,r,i,l,u,a)=>{if(!g)throw Error();let o=g,p=(P,m)=>{typeof r[P]>"u"&&(r[P]=[],l[P]=new Set),l[P].add(m),l[P].size>r[P].length&&r[P].push(m),typeof i[m]>"u"&&(i[m]=[],u[m]=new Set),u[m].add(P),u[m].size>i[m].length&&i[m].push(P);};return {SetRule:(P,m,S,N)=>{let x=o(P),b=o(m),M=N.triggerKeys||[],se=a.get(b.uid)||0,U=a.get(x.uid)||0;se+=1,U+=1,a.set(b.uid,se),a.set(x.uid,U);let _=Xe(b.uid,S,{...N,triggerUids:[x.uid],triggerKeys:M}),ee=[P].map(C=>{let te=o(C);return [te.uid,M,te.proxy]});if(p(x.uid,b.uid),typeof b.nodeBucket[S]=="number"){let C=t(b.nodeBucket[S]);C.setRule(_,ee),N.effect&&C.setSideEffect({fn:N.effect,args:N.effectArgs?N.effectArgs:[S]});}else {let C=b.meta[S],te=new we(C,S,m);te.setRule(_,ee),N.effect&&te.setSideEffect({fn:N.effect,args:N.effectArgs?N.effectArgs:[S]}),b.nodeBucket[S]=e(te);}b.state[S]=b.meta[S];let z=t(b.nodeBucket[S]);N.forceNotify&&z.forceNotify(),N.cacheStrategy=="none"&&z.setUseCache(false);},SetRules:(P,m,S,N)=>{let x=o(m),b=a.get(x.uid)||0;b+=1,a.set(x.uid,b);let M=[];for(let z of P){let C=o(z);M.push(C.uid);let te=a.get(C.uid)||0;te+=1,a.set(C.uid,te),p(C.uid,x.uid);}let se=N.triggerKeys||[],U=Xe(x.uid,S,{...N,triggerUids:M,triggerKeys:se}),_=P.map(z=>{let C=o(z);return [C.uid,se,C.state]});if(typeof x.nodeBucket[S]=="number"){let z=t(x.nodeBucket[S]);z.setRules(U,_),N.effect&&z.setSideEffect({fn:N.effect,args:N.effectArgs?N.effectArgs:[S]});}else {let z=x.meta[S],C=new we(z,S,m);C.setRules(U,_),N.effect&&C.setSideEffect({fn:N.effect,args:N.effectArgs?N.effectArgs:[S]}),x.nodeBucket[S]=e(C);}x.state[S]=x.meta[S];let ee=t(x.nodeBucket[S]);N.forceNotify&&ee.forceNotify(),N.cacheStrategy=="none"&&ee.setUseCache(false);}}};var Je=(g,e)=>{let t=g||void 0;if(!t)throw Error();return {SetStrategy:(i,l,u)=>{let a=t(i);e(a.nodeBucket[l]).setStrategy(u);}}};function et(){let g=new Map,e=new Map,t=new Set,r=(u,a)=>{g.set(u,a);let o=e.get(u);o&&o(a);};return {SetTrace:(u,a)=>{e.set(u,a);let o=g.get(u)||"idle";return a(o),{cancel:()=>{e.delete(u);}}},useTrace:()=>({apply:a=>{a.on(0,()=>{t.forEach(o=>r(o,"idle")),t.clear(),g.clear();}),a.on(13,({path:o,type:p})=>{(p==1||p==2)&&(t.add(o),r(o,"pending"));}),a.on(10,({path:o})=>{t.add(o),(!g.has(o)||g.get(o)==="idle")&&r(o,"pending");}),a.on(6,({path:o})=>{t.add(o),r(o,"calculating");}),a.on(7,({path:o})=>{r(o,"calculated");}),a.on(12,({path:o,type:p})=>{p==3&&r(o,"calculating"),p==6&&r(o,"idle");}),a.on(14,({path:o})=>{r(o,"pending");}),a.on(9,({path:o})=>r(o,"error"));}})}}function nt(g,e,t,r){return {GetNextDependency:h=>r()[h]||[],GetPrevDependency:h=>t()[h]||[],GetAllPrevDependency:h=>e()[h]||[],GetAllNextDependency:h=>g()[h]||[],rebuildDirectDependencyMaps:h=>{let n=[],P=[],m=g();for(let S of h){let N=m[S]||[];n[S]=N;for(let x=0;x<N.length;x++){let b=N[x];typeof P[b]>"u"&&(P[b]=[]),P[b].push(S);}}return {directNextMap:n,directPrevMap:P}}}}function rt(g,e){let t=i=>{let l=[],u=[],a=new Map,o=i.size,p=0,h=0;for(let[n,P]of i)P===0&&u.push(n);if(u.length===0&&o>0)throw Error("Circular dependency detected");for(;u.length>0;){l.push([...u]);let n=[];for(let P of u){p++,a.set(P,h);let m=g[P];if(m)for(let S of m){let N=i.get(S)-1;i.set(S,N),N===0&&n.push(S);}}u=n,h++;}if(p<o)throw Error("Circular dependency detected");return {steps:l,levelMap:a}};return ()=>{let i=new Map;for(let l of e.keys()){let u=g[l]||[];i.has(l)||i.set(l,0);for(let a of u){let o=i.get(a)||0;i.set(a,++o);}}return t(i)}}var Ge=()=>{let g=[];return {on:e=>(g.push(e),()=>{let t=g.indexOf(e);t>-1&&g.splice(t,1);}),call:e=>g.forEach(t=>{t(e);})}};function st(){let{on:g,call:e}=Ge();return {onError:g,callOnError:e}}function at(){let{on:g,call:e}=Ge();return {onSuccess:g,callOnSuccess:e}}var ot=()=>{let g=new Set,e=new Map,t=new Set,r=(a,o)=>{e.get(a)?.forEach(p=>p(o));},i=(a,o)=>(e.has(a)||e.set(a,new Set),e.get(a).add(o),()=>e.get(a)?.delete(o));return {usePlugin:a=>{let o=new Set,p=(n,P)=>{let m=i(n,P);return o.add(m),m};a.apply({on:p}),g.add(a);let h=()=>{o.forEach(n=>n()),o.clear(),g.delete(a),t.delete(h);};return t.add(h),h},emit:r,destroyPlugin:()=>{t.forEach(a=>a()),t.clear(),e.clear(),g.clear();}}};function it(){let{on:g,call:e}=Ge();return {onStart:g,callOnStart:e}}var lt=(g={frameQuota:12})=>{let e=performance.now(),t=0,r=false,i=()=>!!navigator?.scheduling?.isInputPending?.({includeContinuous:true});return {getIsFirstFrame:()=>r,reset(){e=performance.now(),t=0,r=true;},shouldYield(){return !r&&(++t&15)!==0?false:!!(performance.now()-e>g.frameQuota||i())},async yieldToMain(){return new Promise(l=>{Ye(()=>{e=performance.now(),t=0,r&&(r=false),l();});})}}},Ye=g=>{let{port1:e,port2:t}=new MessageChannel;e.onmessage=g,t.postMessage(null);};function ut(g,e,t,r,i,l){let u=new Map,a=g.useGreedy,o=null,p=()=>{u.clear();},h={path:null,level:0,targetLevel:0,currentLevel:0,pendingParentsCount:0,active:0,pending:0,blocked:0,nums:0,asyncNums:0},n={path:null,type:0,triggerPath:null,calledBy:0,key:null,value:null,error:null,token:null,duration:null,detail:h},P=false,m=[],S=null,N=(b,M,se)=>{m.push({uid:b,key:M,value:se}),!P&&(S||(S=Promise.resolve().then(()=>{S=null,P||x(null,[]);})));},x=async(b,M)=>{let U=Symbol("token"),_=typeof b=="number"?b:"__NOTIFY_ALL__";u.set(_,U),o=U,P=true;let ee=false,z=false;l.reset(),t.Turnstile.nextEpoch();let C=t.GetMaxUid()+3,te=new Array(C).fill(0),d=0,s=new Uint8Array(C),H=new Int32Array(C),k=new Int32Array(C),Y=new Int32Array(C*2),A=0,E=0,T=new Int32Array(C*2),O=0,v=0,G=new Int32Array(C*2),c=0,y=0;M.forEach(f=>{te[f]=1,e.GetAllNextDependency(f).forEach(W=>{te[W]=1;});});let w=new Array(C).fill(null),V=[],q=t.Turnstile,ae=new Array(C).fill(null).map(()=>[]),de=new Array(C).fill(null).map(()=>[]),me=[],Ne=()=>{if(m.length===0)return false;let f=false,W=1/0;for(;m.length>0;){let{uid:D,key:Q,value:le}=m.shift(),L=t.GetNodeByUid(D);if(me.includes(D)||me.push(D),!Object.is(L.state[Q],le)){f=true,L.state[Q]=le,i.flushPathSet.add(D),L.calledBy=1;let ne=w[D]||[];ne.includes(Q)||ne.push(Q),w[D]=ne,s[D]&=-17,s[D]&2&&(s[D]&=-3,v--),s[D]&1||(s[D]|=1,Y[A++]=D,E++);let X=e.GetUidToLevelMap().get(D)??0;X<W&&(W=X),Se(D);}}return f&&(ie===void 0||ie>W)&&(ie=W),f},Te=q.volatileLevels.size>0,Pe=Te?q.hasObserver:f=>false,xe=Te?q.receiveGhosts:()=>[],Oe=Te?q.resolveGhosts:()=>[],ke=Te?q.getTriggerKeys:()=>[],De=q?.volatileLevels||new Set,be=-1,oe=e.GetUidToLevelMap(),ie=0,Re=0,Se=f=>{e.GetAllNextDependency(f).forEach(D=>{let Q=oe.get(D)||0;Q>Re&&(Re=Q);});};Ne();let Ie=new Set;typeof b=="number"&&(s[b]|=16,Ie.add(b),Se(b),i.flushPathSet.add(b));let Be=typeof b=="number"?[b]:[...M,...me];l.shouldYield()&&(i.requestUpdate(),await l.yieldToMain());let We=Be.map(async f=>{if(Pe(f)){let W=t.GetNodeByUid(f),D=ke(f);if(D.length>0){let Q=xe(W,D);return Q instanceof Promise&&(Q=await Q),{seed:f,hitTargets:Q}}}return {seed:f,hitTargets:[]}});if((await Promise.all(We)).forEach(({seed:f,hitTargets:W})=>{if(W&&W.length>0){V.push(...W);let D=oe.get(f)||0;be=Math.max(be,D);}}),(V.length>0||Be.length>1)&&(i.requestUpdate(),await l.yieldToMain(),u.get(_)!==U))return;let ze=V.length>0;M.forEach(f=>{if(!Ie.has(f))if(ze){let W=oe.get(f)??0;k[f]=W,s[f]&4||(s[f]|=4,G[c++]=f,y++);let D=t.GetPathByUid(f);n.path=D,n.type=2,r.emit(14,n);}else s[f]&1||(s[f]|=1,Y[A++]=f,E++),Se(f);}),typeof b=="number"?ie=oe.get(b)??0:ie=Math.min(...M.map(f=>oe.get(f)??0));let qe=performance.now(),Ue=typeof _=="number"?t.GetPathByUid(_):"__NOTIFY_ALL__";n.path=Ue,n.token=U,r.emit(0,n),r.callOnStart({path:Ue});let Ve=false,Qe=30,$e=(f,W)=>{let D=false,Q=false,le=false,L=t.GetNodeByUid(f),ne=t.GetPathByUid(f),X=L.calledBy,K=ae[f];K.length=0;let B=Pe(f),I=B?ke(f):[],F=R=>{B&&(I.length===0||I.includes(R))&&K.push(R);},ue=de[f];ue.length=0;let ye=false;if(L.calledBy===1){ye=true,D=true,i.flushPathSet.add(f);let R=w[f];R&&(K.push(...R),w[f]=null);}let fe=(R,J)=>{let re=oe.get(R)??0,he=t.GetNodeByUid(R),Z=t.GetPathByUid(R),ge=(X===1||X===2)&&re<=be;ge&&s[R]&16&&(s[R]&=-17,n.path=Z,n.triggerPath=ne,r.emit(11,n));let ce=0;if(!(s[R]&49)){if(s[R]&2)ce=H[R]-1;else {if(re>ie&&v>Qe){k[R]=re,s[R]&4||(s[R]|=4,G[c++]=R,y++),n.path=Z,n.type=7,r.emit(12,n);return}let Ee=e.GetPrevDependency(R),$=0;for(let Me of Ee){if(s[Me]&16)continue;(oe.get(Me)??0)>ie&&$++;}ce=$;}if(ce<=0){let Ee=(s[R]&1)!==0,$=(s[R]&32)!==0;if(Ee||$){n.path=Z,n.type=$?3:3.1,r.emit(12,n);return}s[R]&2&&(s[R]&=-3,v--),ge?he.calledBy=2:he.calledBy=0,s[R]&1||(s[R]|=1,Y[A++]=R,E++),n.path=Z,n.type=J,h.path=ne,r.emit(13,n);}else H[R]=ce,s[R]&2||(s[R]|=2,T[O++]=R,v++);}},ve=(R=[])=>{if(u.get(_)!==U)return;if(R.length){let re={},he=L.proxy;for(let Z of R){let ge=(Z.args||[]).reduce((ce,Ee)=>(ce[Ee]=he[Ee],ce),{});try{let ce=Z.fn(ge);ce&&typeof ce=="object"&&Object.assign(re,ce);}catch(ce){}}for(let Z in re)if(Z in L.state)Object.is(L.state[Z],re[Z])||(L.state[Z]=re[Z],F(Z),D=true,(L.notifyKeys.size===0||L.notifyKeys.has(Z))&&(Q=true));else throw {error:`wrong effect in ${String(L.path)}`}}D&&i.flushPathSet.add(f);let J=(re=[])=>{if(u.get(_)!==U)return;re&&re.length>0&&(V.push(...re),be=Math.max(be,oe.get(f)||0)),K.length=0,n.path=ne,n.calledBy=L.calledBy,r.emit(7,n),s[f]|=16;let he=e.GetNextDependency(f);(Q||le)&&(Se(f),e.GetAllNextDependency(f).forEach(Me=>{te[Me]=1;}));let Z=t.GetNodeByUid(f),ge=oe.get(f)??0,ce=De.has(ge)||V.length>0;for(let $ of he){let Me=oe.get($)??0,Ae=t.GetPathByUid($);if(ce&&Me>=ge){k[$]=Me,s[$]&4||(s[$]|=4,G[c++]=$,y++),n.path=Ae,n.type=2,r.emit(14,n);continue}if(s[$]&16){n.path=Ae,n.type=2,r.emit(12,n);continue}if(s[$]&32||(s[$]&1)!==0){n.path=Ae,n.type=s[$]&32?3:3.1,r.emit(12,n);continue}if(Q||le)fe($,1);else if(s[$]&2)fe($,2);else {let pt=oe.get($);k[$]=pt,s[$]&4||(s[$]|=4,G[c++]=$,y++,n.path=Ae,n.type=1,r.emit(14,n));}}s[f]&32&&(s[f]&=-33,d--),Z.calledBy=0,(()=>{if(!ee){ee=true;let $=d,Me=E,Ae=v;n.path=ne,n.type=1,h.active=$,h.pending=Me,h.blocked=Ae,r.emit(5,n),j();}})();};if(Pe(f)&&K.length>0){let re=xe(L,K);re instanceof Promise?re.then(J).catch(Fe):J(re);}else J([]);},Fe=R=>{n.path=ne,n.error=R,r.emit(9,n);let J=Symbol("abort");u.set(_,J),A=0,E=0,O=0,v=0,c=0,y=0,s.fill(0),d=0,w.fill(null),P=false,r.callOnError(R);},pe=(R,J)=>{R!==L.state[J]&&(L.state[J]=R,D=true,F(String(J)),n.path=ne,n.key=J,n.value=R,n.calledBy=L.calledBy,r.emit(15,n),(L.notifyKeys.size===0||L.notifyKeys.has(J))&&(Q=true)),t.GetBucket(L.nodeBucket[J]).isForceNotify()&&(le=true),(Q||le)&&Se(f);};n.path=ne,n.calledBy=L.calledBy,r.emit(6,n);try{let R=[];for(let J in L.nodeBucket){let re=t.GetBucket(L.nodeBucket[J]);if(R.push(...re.getSideEffect()),ye){r.emit(15,{path:ne,key:String(J),value:L.state[J],calledBy:L.calledBy}),re.isForceNotify()&&(le=!0),(L.notifyKeys.size===0||L.notifyKeys.has(J))&&Se(f);continue}let he=re.evaluate({affectKey:J,triggerUid:W,getProxyByUid:Z=>t.GetNodeByUid(Z).proxy,getStateByUid:Z=>t.GetNodeByUid(Z).state,GetToken:()=>U});if(he instanceof Promise){let Z=he.then(ge=>{u.get(_)===U&&pe(ge,J);});ue.push(Z);}else pe(he,J);}if(ue.length>0)return Promise.all(ue).then(()=>{ve(R);}).catch(Fe);ve(R);return}catch(R){Fe(R);}},j=async()=>{if(u.get(_)!==U){ee=false;return}ee=true;let f=l.getIsFirstFrame(),W=0,D=()=>30,Q=0,le=D();try{for(;u.get(_)===U;){let L=Q>=le,ne=l.shouldYield();if(L||ne){if(Q>0&&(W++,(f||W%2===0)&&i.requestUpdate()),await l.yieldToMain(),u.get(_)!==U)break;Q=0,f=l.getIsFirstFrame();}if(E>0&&d<40){let X=A,K=0;for(let B=0;B<X;B++){let I=Y[B];if((s[I]&1)===0)continue;if(d>=40||Q>=le||l.shouldYield()){for(let pe=B;pe<A;pe++){let R=Y[pe];s[R]&1&&(Y[K++]=R);}A=K,E=K;break}let F=t.GetNodeByUid(I),ue=t.GetPathByUid(I),ye=oe.get(I)??0,fe=e.GetPrevDependency(I),ve=fe.length>1;if((!a||ve)&&ye>ie){s[I]&=-2,E--;let pe=fe.filter(R=>te[R]===1&&(s[R]&16)===0).length;H[I]=pe||0,s[I]&2||(s[I]|=2,T[O++]=I,v++),n.path=ue,n.type=pe>0?4:5,h.targetLevel=ye,h.currentLevel=ie,h.pendingParentsCount=pe,r.emit(12,n);continue}s[I]&=-2,E--,(s[I]&32)===0&&(s[I]|=32,d++),n.path=ue,n.calledBy=F.calledBy,r.emit(8,n),$e(I,b),Q++;}if(A>X){for(let B=X;B<A;B++){let I=Y[B];s[I]&1&&(Y[K++]=I);}A=K,E=A;}else A=K;if(E>0&&d<40)continue}if(Q<le&&a&&v>0&&d<40){let X=!1,K=0,B=0;for(let I=0;I<O;I++){let F=T[I];if((s[F]&2)===0)continue;if(H[F]<=0&&K<le){let ye=oe.get(F)??0,fe=e.GetPrevDependency(F);if(ye<=ie||fe.length<=1){s[F]&=-3,v--,s[F]&1||(s[F]|=1,Y[A++]=F,E++),K++,X=!0;let ve=t.GetPathByUid(F);n.path=ve,n.type=4,r.emit(13,n);continue}}T[B++]=F;}if(O=B,K>0)continue;if(X){if(l.shouldYield()&&(await l.yieldToMain(),u.get(_)!==U))break;continue}}if(d===0&&E===0){if(q.inFlightCount>0)break;if(V.length>0){let K=!1,B=ie,I=Array.from(new Set(V));V.length=0;for(let F of I){let ue=t.GetNodeByUid(F),ye=Oe(ue);if(ye&&ye.length>0){K=!0,ue.calledBy=1,w[F]=ye,s[F]&=-17,s[F]&2&&(s[F]&=-3,v--),s[F]&1||(s[F]|=1,Y[A++]=F,E++);let fe=oe.get(ue.uid)??0;fe<B&&(B=fe),Se(ue.uid),i.flushPathSet.add(ue.uid);}}if(K){if(B<ie&&(ie=B),i.requestUpdate(),l.shouldYield()&&(await l.yieldToMain(),u.get(_)!==U))break;continue}}let X=1/0;for(let K=0;K<c;K++){let B=G[K];if(s[B]&4){let I=k[B];I<X&&(X=I);}}for(let K=0;K<O;K++){let B=T[K];if(s[B]&2){let I=oe.get(B)??0;I>ie&&I<X&&(X=I);}}if(X!==1/0&&X<=Re){ie=X;let K=0;for(let I=0;I<c;I++){let F=G[I];s[F]&4&&(k[F]===X?(s[F]&=-5,y--,s[F]&1||(s[F]|=1,Y[A++]=F,E++)):G[K++]=F);}c=K;let B=0;for(let I=0;I<O;I++){let F=T[I];if(s[F]&2)if((oe.get(F)??0)===X){s[F]&=-3,v--,s[F]&1||(s[F]|=1,Y[A++]=F,E++);let ye=t.GetPathByUid(F);n.path=ye,n.type=3,h.level=X,r.emit(13,n);}else T[B++]=F;}O=B;continue}else {for(let K=0;K<c;K++){let B=G[K];if(s[B]&4){s[B]|=16;let I=t.GetPathByUid(B);n.path=I,n.type=6,r.emit(12,n);}}c=0,y=0;for(let K=0;K<O;K++){let B=T[K];if(s[B]&2){s[B]|=16;let I=t.GetPathByUid(B);n.path=I,n.type=6,r.emit(12,n);}}O=0,v=0;break}}E>0&&d>=40&&(n.type=2,r.emit(4,n));break}}finally{ee=false;let L=d+v+E,ne=q.inFlightCount||0;if(!(o===U)){n.token=U,r.emit(3,n);return}if(i.requestUpdate(),L===0&&ne===0){if(u.get(_)===U&&!Ve){Ve=true,n.type=1,r.emit(2,n),q.resetCounters(),w.fill(null),P=false;let K=performance.now();be=-1,u.delete(_),n.token=U,n.duration=(K-qe).toFixed(2.1)+"ms",r.emit(1,n),Promise.resolve().then(()=>{r.callOnSuccess();});}}else {let K=L===0&&ne>0?3:1;if(n.type=K,h.nums=d,h.asyncNums=ne,r.emit(4,n),ne>0&&!z){z=true;let B=()=>{if(o!==U){z=false;return}if(q.inFlightCount===0){z=false,Ne(),Ye(()=>{o===U&&q.inFlightCount===0&&j();});return}else q.inFlightCount,requestAnimationFrame(B);};requestAnimationFrame(B);}}}};j();};return {TaskRunner:x,CancelTask:p,stageValueFn:N}}function je(g){let{path:e,uid:t,type:r,meta:i,dirtySignal:l,state:u}=g,a=null,o=["path","uid","type","dependOn","nodeBucket"],h={path:e,uid:t,type:r,meta:i,dirtySignal:l,createView:(n={})=>{if(a&&Object.keys(n).length===0)return a;let P=new Proxy(n,{get(m,S){let N=S;return Reflect.has(m,S)?Reflect.get(m,S):N in g.state?g.state[N]:N in g?g[N]:i&&N in i?i[N]:Reflect.get(m,S)},set(m,S,N){return false},ownKeys(m){let S=new Set([...Reflect.ownKeys(m),...Object.keys(u||{}),...Object.keys(i||{}),...o]);return Array.from(S)},getOwnPropertyDescriptor(m,S){let N=S;return Reflect.has(m,S)||u&&N in u||i&&N in i||o.includes(N)?{enumerable:true,configurable:true}:Reflect.getOwnPropertyDescriptor(m,S)}});return a=P,P}};return "children"in g?{...h,children:g.children}:{...h,state:g.state,nodeBucket:g.nodeBucket,notifyKeys:g.notifyKeys,dependOn:g.dependOn,calledBy:0,get proxy(){return a}}}var ct=(g,e,t,r,i,l,u)=>{let a=g.useEntangleStep,o=[],p=[],h=new Set,n=r,S=t,N=0,x=0,b=0,M=100,se=()=>{let d={link:null,impactNode:null,impactUid:-1,hitTargetUids:null,isDirty:false,propose:null};return d.propose={set:(s,H,k=1)=>{d.epoch===b&&H!==d.impactNode.state[s]&&(d.link.count++,(!p[d.impactUid]||p[d.impactUid].length===0)&&(p[d.impactUid]=[],x++),p[d.impactUid].push({key:s,value:H,weight:k}),d.isDirty||(d.hitTargetUids.push(d.impactUid),d.isDirty=true));},update:(s,H,k="add")=>{d.epoch===b&&(d.link.count++,(!p[d.impactUid]||p[d.impactUid].length===0)&&(p[d.impactUid]=[],x++),p[d.impactUid].push({key:s,delta:H,op:k,weight:1}),d.isDirty||(d.hitTargetUids.push(d.impactUid),d.isDirty=true));},patch:(s,H)=>{d.epoch===b&&(d.link.count++,(!p[d.impactUid]||p[d.impactUid].length===0)&&(p[d.impactUid]=[],x++),p[d.impactUid].push({key:s,patch:H,weight:1}),d.isDirty||(d.hitTargetUids.push(d.impactUid),d.isDirty=true));}},d},U=Array.from({length:M},se),_=M-1,ee=(d,s,H)=>{let k=s.path,Y=d.impact;if(d.count>=a){u.emit("entangle:blocked",{observer:k,target:Y,count:d.count});return}let A=n(Y),E=d.isProxy?s.proxy:s,T=d.isProxy?A.proxy:A;if(d.filter&&!d.filter(E,T))return;let O,v=true;_<0?(O=se(),v=false):O=U[_--];let G=b;O.epoch=G,O.isDirty=false,O.link=d,O.impactNode=A,O.impactUid=A.uid,O.hitTargetUids=H;let c=d.emit(E,T,O.propose);if(c instanceof Promise||c&&typeof c.then=="function")return N++,(async()=>{try{await c;}catch(y){u.emit("node:error",{path:k,error:y}),u.onError({path:k,error:y});}finally{G===b&&N--,v&&(U[++_]=O);}})();v&&(U[++_]=O);};return {useEntangle:d=>{let{cause:s,impact:H,via:k,emit:Y,filter:A,isProxy:E}=d;if(!k||k.length===0){u.emit("entangle:warn",{path:s,type:"no_keys"});return}let O=n(s).uid;o[O]||(o[O]=new Map);let v=o[O];for(let G=0;G<k.length;G++){let c=k[G];v.has(c)||v.set(c,[]),v.get(c).push({impact:H,emit:Y,filter:A,count:0,isProxy:!!E});}},updateEntangleLevel:()=>{let d=S();h.clear();for(let s=0;s<o.length;s++)if(o[s]!==void 0){let H=d.get(s)||0;h.add(H);}},Turnstile:{volatileLevels:h,get inFlightCount(){return N},get hasPendingGhosts(){return x>0},nextEpoch:()=>{b++,N=0,x=0,p.length=0;},hasObserver:d=>o[d]!==void 0,getTriggerKeys:d=>{let s=o[d];return s?Array.from(s.keys()):[]},receiveGhosts:(d,s=[])=>{let H=d.uid,k=[],Y=o[H];if(!Y||s.length===0)return k;let A=[];for(let G=0;G<s.length;G++){let c=Y.get(s[G]);if(c)for(let y=0;y<c.length;y++)A.push(c[y]);}let E=0,T=false,O=null;for(;E<A.length;E++){if(e.shouldYield()){T=true;break}let G=ee(A[E],d,k);if(G){O=G,T=true,E++;break}}let v=()=>{if(k.length<=1)return k;let G=[],c=Object.create(null);for(let y=0;y<k.length;y++){let w=k[y];c[w]||(c[w]=true,G.push(w));}return G};return T?(async()=>{for(O&&await O,e.shouldYield()&&await e.yieldToMain();E<A.length;){let G=[],c=Math.min(E+M,A.length);for(;E<c;E++){let y=ee(A[E],d,k);y&&G.push(y);}G.length>0&&await Promise.all(G.map(async y=>{await y,e.shouldYield()&&await e.yieldToMain();})),e.shouldYield()&&await e.yieldToMain();}return v()})():v()},resolveGhosts:d=>{let s=d.uid,H=p[s];if(!H||H.length===0)return [];let k=[],Y=Object.create(null);for(let A=0;A<H.length;A++){let E=H[A];Y[E.key]||(Y[E.key]=[]),Y[E.key].push(E);}for(let A in Y){let E=Y[A],T=d.state[A],O,v=-1/0,G=false;for(let c=0;c<E.length;c++){let y=E[c];if(y.patch!==void 0&&(T=y.patch(T)),y.value!==void 0){let w=y.weight??1;w>=v&&(v=w,O=y.value,G=true);}}G&&(T=O);for(let c=0;c<E.length;c++){let y=E[c];if(y.delta!==void 0)switch(y.op||"add"){case "add":T=(typeof T=="number"?T:0)+y.delta;break;case "remove":T=Array.isArray(T)?T.filter(V=>V!==y.delta):T;break;case "intersect":T=Array.isArray(T)?T.filter(V=>y.delta.includes(V)):y.delta;break;case "union":{let V=Array.isArray(T)?T:[],q=Array.isArray(y.delta)?y.delta:[y.delta];T=[...new Set([...V,...q])];break}case "merge":{let V=typeof T=="object"&&T!==null&&!Array.isArray(T)?T:{},q=typeof y.delta=="object"&&y.delta!==null&&!Array.isArray(y.delta)?y.delta:{};T={...V,...q};break}}}Object.is(d.state[A],T)||(d.state[A]=T,k.push(A));}return p[s]=[],x--,k.length>0?k:[]},resetCounters:()=>{for(let d=0;d<o.length;d++){let s=o[d];if(s)for(let H of s.values())for(let k=0;k<H.length;k++)H[k].count=0;}}}}};function yt(g,e,t,r,i){let l=lt(),u=0,a=new Map,o=[],p=[],h=[],n=[],P=false,m=new Set,N=async()=>{let c=Array.from(m);if(m.clear(),"signalTrigger"in i&&typeof i.signalTrigger=="function")for(let y of c){let w=s(y);i.signalTrigger(w.dirtySignal);}else "emit"in i&&i.emit(c);},x=()=>{P||(P=true,requestAnimationFrame(()=>{try{for(;m.size>0;)N();}finally{P=false;}}));},{useEntangle:b,updateEntangleLevel:M,Turnstile:se}=ct({useEntangleStep:g.useEntangleStep},l,e.GetUidToLevelMap,d,s,H,{emit:r.emit,onError:r.callOnError}),{TaskRunner:U,CancelTask:_,stageValueFn:ee}=ut({useGreedy:g.useGreedy},e,{GetNodeByPath:d,GetNodeByUid:s,GetPathByUid:H,GetBucket:A,GetMaxUid:E,Turnstile:se},r,{requestUpdate:x,flushPathSet:m},l),z=c=>{throw new Error(`[MeshFlow] Duplicate Path: ${c}`)},C=c=>{a.has(c.path)&&z(String(c.path));let y=++u,w={path:c.path,getNode:ae=>d(ae)},V=(ae,de="value")=>{let me=ae({...w}),Ne=d(c.path);if(!Object.is(Ne.state[de],me)){if(t.createHistoryAction&&t.pushIntoHistory){let Te=t.createHistoryAction([{path:c.path,value:Ne.state[de]},{path:c.path,value:me}],Pe=>{let xe=d(Pe.path);xe.state[de]=Pe.value,T(Pe.path);});t.pushIntoHistory(Te);}Ne.state[de]=me,T(c.path);}},q=je({uid:y,type:c.type,path:c.path,state:c.state,meta:c.meta,nodeBucket:{},dirtySignal:"signalCreator"in i?i.signalCreator():void 0,notifyKeys:c.notifyKeys,dependOn:V});return a.set(q.path,y),h[y]=q.path,o[y]=q,q},te=c=>{a.has(c.path)&&z(String(c.path));let y=++u,w=je({uid:y,type:c.type,path:c.path,state:{},meta:c,nodeBucket:{},children:c.children});return a.set(w.path,y),p[y]=w,w};function d(c){let y=a.get(c),w=o[y];if(!w)throw Error("Wrong id");return w}function s(c){let y=o[c];if(!y)throw Error("Wrong id");return y}function H(c){return h[c]}function k(c){let y=a.get(c);return p[y]}function Y(c){return n.push(c)-1}function A(c){let y=n[c];if(!y)throw Error("Wrong id");return y}function E(){return u}let T=c=>{let y=d(c);if(!y)throw Error("Wrong id");m.add(y.uid),x();let w=e.GetNextDependency(y.uid);O(y.uid,w);};function O(c,y){U(c,y);}return {registerNode:C,registerGroupNode:te,GetNodeByPath:d,GetGroupByPath:k,notify:T,notifyAll:async()=>{Promise.resolve().then(async()=>{let c=e.GetDependencyOrder();if(!c||c.length===0)return;let y=c[0];try{U(null,y);}catch(w){throw r.callOnError(w),w}finally{x();}});},batchNotify:c=>{if(!c||c.length===0)return;if(t.createHistoryAction&&t.pushIntoHistory){let w=t.createHistoryAction([c.map(V=>({path:V.path,key:V.key,value:d(V.path).state[V.key]})),c.map(V=>({path:V.path,key:V.key,value:V.value}))],V=>{let q=new Set;V.forEach(ae=>{let de=d(ae.path);de.state[ae.key]=ae.value,m.add(ae.path),q.add(ae.uid);}),x(),q.size>0&&U(null,Array.from(q));});t.pushIntoHistory(w);}let y=new Set;c.forEach(w=>{let V=d(w.path);V.state[w.key]=w.value,m.add(V.uid),y.add(V.uid);}),x(),y.size>0&&U(null,Array.from(y));},useEntangle:b,updateEntangleLevel:M,SetBucket:Y,GetBucket:A,CancelTask:_,stageValueFn:ee,UITrigger:i,UidToNodeMap:o}}function dt(g,e){let t=false,r=false,i=false,l=false,u=new Map,a=[],o=[],p=[],h=[],n=[],P=[],m=[],S=new Map,{GetNextDependency:x,GetPrevDependency:b,GetAllPrevDependency:M,GetAllNextDependency:se,rebuildDirectDependencyMaps:U}=nt(()=>a,()=>p,()=>P,()=>n),_={},ee={};if(e.modules.useHistory){let j=e.modules.useHistory,f;j.isMeshModuleInited?f=j:f=j();let{Undo:W,Redo:D,PushIntoHistory:Q,CreateHistoryAction:le,updateUndoSize:L,updateRedoSize:ne}=f();_.pushIntoHistory=Q,_.createHistoryAction=le,ee={Undo:W,Redo:D,updateUndoSize:L,updateRedoSize:ne};}let z=!!e.modules.useMeshRenderGate,C={};if(z){let j=e.modules.useMeshRenderGate.isMeshModuleInited,f=e.modules.useMeshRenderGate;C=(j?f:f())(()=>ae);}let{onError:te,callOnError:d}=st(),{onSuccess:s,callOnSuccess:H}=at(),{onStart:k,callOnStart:Y}=it(),{emit:A,usePlugin:E,destroyPlugin:T}=ot(),{SetTrace:O,useTrace:v}=et(),G=v();E(G);let c=z?{...C}:{...e.UITrigger},y=yt({useGreedy:e.config.useGreedy,useEntangleStep:e.config.useEntangleStep||100},{GetDependencyOrder:()=>m,GetAllNextDependency:se,GetNextDependency:x,GetPrevDependency:b,GetAllPrevDependency:M,GetUidToLevelMap:()=>S},_,{callOnError:d,callOnSuccess:H,callOnStart:Y,emit:A},c),{SetBucket:w,GetBucket:V,GetGroupByPath:q,GetNodeByPath:ae,notifyAll:de,useEntangle:me,updateEntangleLevel:Ne,CancelTask:Te,stageValueFn:Pe}=y;z&&C.init();let xe={};if(e.modules.useInternalForm){let{uiSchema:j,GetFormData:f}=e.modules.useInternalForm(y,g);xe={uiSchema:j,GetFormData:f};}let Oe={};if(e.modules.useSchemaValidators){let{SetValidators:j}=e.modules.useSchemaValidators(ae);Oe={SetValidators:j};}let{SetRule:ke,SetRules:De}=Ze(ae,w,V,a,p,o,h,u),{SetStrategy:be}=Je(ae,V),oe=rt(a,u),ie=()=>{let j=oe();m=j.steps,S=j.levelMap,Re();},Re=()=>{i&&(Ne(),i=false);},Se=()=>{l||(l=true,Promise.resolve().then(Re).finally(()=>{l=false;}));},Ie=()=>{r||(r=true,Promise.resolve().then(()=>{if(ie(),t){let{directNextMap:j,directPrevMap:f}=U(m.flat());n=j,P=f;}}).finally(()=>{r=false,t=false;}));};return {SetRule:(j,f,W,D)=>{ke(j,f,W,D),t=true,Ie();},SetRules:(j,f,W,D)=>{De(j,f,W,D),t=true,Ie();},SetStrategy:be,useEntangle:j=>{me(j),i=true,Se();},SetTrace:O,usePlugin:E,SetValue:(j,f,W)=>{Re(),ae(j).dependOn(()=>W,f);},GetValue:(j,f="value")=>ae(j).proxy[f],SetValues:j=>{Re(),y.batchNotify(j);},GetGroupByPath:q,notifyAll:async()=>{ie(),await de();},GetAllDependency:()=>a,GetDependencyOrder:()=>m,historyExports:ee,formExports:xe,validatorExports:Oe,batchRenderExport:C,hasRenderGate:()=>z,onError:te,onSuccess:s,onStart:k,scheduler:y,destroyPlugin:T,CancelTask:Te,StageValue:(j,f,W)=>{let D=ae(j);Pe(D.uid,f,W);}}}var Ke=new Map,ht=(g,e,t)=>{try{if(Ke.has(g))throw Error("engineID repeated");let r=dt(e,{config:t.config||{useGreedy:!1},UITrigger:t.UITrigger,modules:t.modules??{},plugins:{}}),{SetRule:i,SetRules:l,SetValues:u,SetStrategy:a,SetValue:o,GetValue:p,usePlugin:h,useEntangle:n,GetGroupByPath:P,notifyAll:m,SetTrace:S,GetAllDependency:N,GetDependencyOrder:x,historyExports:b,formExports:M,validatorExports:se,batchRenderExport:U,hasRenderGate:_,onError:ee,onSuccess:z,onStart:C,scheduler:te,destroyPlugin:d,CancelTask:s,StageValue:H}=r,k={config:{SetRule:i,SetRules:l,SetStrategy:a,notifyAll:m,SetTrace:S,usePlugin:h,hasRenderGate:_,useEntangle:n},data:{SetValue:o,GetValue:p,SetValues:u,GetGroupByPath:P,StageValue:H},dependency:{GetAllDependency:N,GetDependencyOrder:x},hooks:{onError:ee,onSuccess:z,onStart:C}},Y=(T,O,v)=>{!O||typeof O!="object"||Object.keys(O).forEach(G=>{let c=O[G];if(typeof c=="object"&&c!==null)T[G]=T[G]||{},Y(T[G],c,v);else if(typeof c=="function"){let y=G;if(y==="useMeshRenderGate")y="render";else if(y.startsWith("use")){let w=y.slice(3);y=w.charAt(0).toLowerCase()+w.slice(1);}G==="useHistory"&&v.exports.history&&Object.keys(v.exports.history).length>0?T[y]=v.exports.history:G==="useInternalForm"&&v.exports.form&&Object.keys(v.exports.form).length>0?T[y]=v.exports.form:G==="useSchemaValidators"&&v.exports.validator&&Object.keys(v.exports.validator).length>0?T[y]=v.exports.validator:G==="useMeshRenderGate"&&v.exports.render?T[y]=v.exports.render:T[y]=c(v.scheduler,v.Schema);}});},A={...k,destroyPlugin:d,CancelTask:s,modules:{}},E=t.modules;return E&&Y(A.modules,E,{scheduler:te,Schema:e,exports:{history:b,form:M,validator:se,render:U}}),Ke.set(g,A),A}catch(r){throw Error(r)}},xn=()=>(g,e,t)=>ht(g,e,t),An=g=>{let e=Ke.get(g);if(!e)throw Error("Engine not found.");return e},vn=g=>{let e=Ke.get(g);e.destroyPlugin(),e.CancelTask(),Ke.delete(g);};export{_e as DefaultStrategy,Ce as MeshFlowEventsName,Le as TriggerCause,vn as deleteEngine,An as useEngine,ht as useMeshFlow,xn as useMeshFlowDefiner,yt as useScheduler};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@meshflow/core",
3
- "version": "0.5.0",
3
+ "version": "0.5.2",
4
4
  "description": "A logic orchestration engine utilizing topological scheduling and watermark control to resolve asynchronous race conditions in complex dependency linkages.",
5
5
  "main": "./index.cjs",
6
6
  "module": "./index.js",