@meshflow/core 0.5.0 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/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,8 +212,8 @@ 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;
@@ -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
  };
@@ -837,6 +846,12 @@ type EngineModules<M extends Record<string, any>, P extends MeshPath> = {
837
846
  type Engine<T, M extends Record<string, any>, P extends MeshPath> = BaseEngine<T> & {
838
847
  modules: EngineModules<M, P>;
839
848
  };
849
+ type StripReadonly<T> = T extends Function ? T : T extends readonly any[] ? {
850
+ -readonly [K in keyof T]: StripReadonly<T[K]>;
851
+ } : T extends object ? {
852
+ -readonly [K in keyof T]: StripReadonly<T[K]>;
853
+ } : T;
854
+ type NormalizeSchema<T> = T extends readonly any[] ? (T["length"] extends 0 ? Record<string, any> : StripReadonly<T[0]>) : StripReadonly<T>;
840
855
  /**
841
856
  * 初始化并获取 MeshFlow 引擎实例
842
857
  * * @description
@@ -848,8 +863,8 @@ type Engine<T, M extends Record<string, any>, P extends MeshPath> = BaseEngine<T
848
863
  * @param Schema 类型定义模板(仅用于 TS 类型约束,不参与运行逻辑),注册节点通过模块的方式进行
849
864
  * @param options 引擎配置项与扩展模块 {@link MeshFlowOptions}
850
865
  */
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: {
866
+ declare const useMeshFlow: <const S extends Record<string, any> | readonly Record<string, any>[], T, //UITrigger的类型
867
+ 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
868
  metaType?: NM;
854
869
  config?: {
855
870
  useGreedy: boolean;
@@ -861,10 +876,10 @@ M extends Record<string, any>, NM extends Record<string, any> = InferLeafType<S>
861
876
  signalTrigger: (signal: T) => void;
862
877
  };
863
878
  }) => 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;
879
+ SetRule: <K extends SuggestKey<NM>, TKeys extends SuggestKey<NM> = SuggestKey<NM>>(outDegreePath: P, inDegreePath: P, key: K, options: SetRuleOptions<NM, TKeys>) => void;
880
+ SetRules: <TKeys_1 extends KeysOfUnion<NM>>(outDegreePaths: P[], inDegreePath: P, key: (string & {}) | KeysOfUnion<NM>, options: SetRuleOptions<NM, TKeys_1>) => void;
866
881
  SetStrategy: (path: P, key: KeysOfUnion<NM>, strategy: DefaultStrategy) => void;
867
- useEntangle: (config: EntangleArgType<P>) => void;
882
+ useEntangle: <State = any>(config: EntangleArgType<P, State, NM>) => void;
868
883
  SetTrace: (myPath: P, onUpdate: (newStatus: "idle" | "pending" | "calculating" | "calculated" | "error" | "canceled") => void) => {
869
884
  cancel: () => void;
870
885
  };
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,8 +212,8 @@ 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;
@@ -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
  };
@@ -837,6 +846,12 @@ type EngineModules<M extends Record<string, any>, P extends MeshPath> = {
837
846
  type Engine<T, M extends Record<string, any>, P extends MeshPath> = BaseEngine<T> & {
838
847
  modules: EngineModules<M, P>;
839
848
  };
849
+ type StripReadonly<T> = T extends Function ? T : T extends readonly any[] ? {
850
+ -readonly [K in keyof T]: StripReadonly<T[K]>;
851
+ } : T extends object ? {
852
+ -readonly [K in keyof T]: StripReadonly<T[K]>;
853
+ } : T;
854
+ type NormalizeSchema<T> = T extends readonly any[] ? (T["length"] extends 0 ? Record<string, any> : StripReadonly<T[0]>) : StripReadonly<T>;
840
855
  /**
841
856
  * 初始化并获取 MeshFlow 引擎实例
842
857
  * * @description
@@ -848,8 +863,8 @@ type Engine<T, M extends Record<string, any>, P extends MeshPath> = BaseEngine<T
848
863
  * @param Schema 类型定义模板(仅用于 TS 类型约束,不参与运行逻辑),注册节点通过模块的方式进行
849
864
  * @param options 引擎配置项与扩展模块 {@link MeshFlowOptions}
850
865
  */
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: {
866
+ declare const useMeshFlow: <const S extends Record<string, any> | readonly Record<string, any>[], T, //UITrigger的类型
867
+ 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
868
  metaType?: NM;
854
869
  config?: {
855
870
  useGreedy: boolean;
@@ -861,10 +876,10 @@ M extends Record<string, any>, NM extends Record<string, any> = InferLeafType<S>
861
876
  signalTrigger: (signal: T) => void;
862
877
  };
863
878
  }) => 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;
879
+ SetRule: <K extends SuggestKey<NM>, TKeys extends SuggestKey<NM> = SuggestKey<NM>>(outDegreePath: P, inDegreePath: P, key: K, options: SetRuleOptions<NM, TKeys>) => void;
880
+ SetRules: <TKeys_1 extends KeysOfUnion<NM>>(outDegreePaths: P[], inDegreePath: P, key: (string & {}) | KeysOfUnion<NM>, options: SetRuleOptions<NM, TKeys_1>) => void;
866
881
  SetStrategy: (path: P, key: KeysOfUnion<NM>, strategy: DefaultStrategy) => void;
867
- useEntangle: (config: EntangleArgType<P>) => void;
882
+ useEntangle: <State = any>(config: EntangleArgType<P, State, NM>) => void;
868
883
  SetTrace: (myPath: P, onUpdate: (newStatus: "idle" | "pending" | "calculating" | "calculated" | "error" | "canceled") => void) => {
869
884
  cancel: () => void;
870
885
  };
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 Fe=(S=>(S[S.FlowStart=0]="FlowStart",S[S.FlowSuccess=1]="FlowSuccess",S[S.FlowEnd=2]="FlowEnd",S[S.FlowAbort=3]="FlowAbort",S[S.FlowWait=4]="FlowWait",S[S.FlowFire=5]="FlowFire",S[S.NodeStart=6]="NodeStart",S[S.NodeSuccess=7]="NodeSuccess",S[S.NodeProcessing=8]="NodeProcessing",S[S.NodeError=9]="NodeError",S[S.NodePending=10]="NodePending",S[S.NodeRevive=11]="NodeRevive",S[S.NodeIntercept=12]="NodeIntercept",S[S.NodeRelease=13]="NodeRelease",S[S.NodeStagnate=14]="NodeStagnate",S[S.NodeBucketSuccess=15]="NodeBucketSuccess",S[S.EntangleWarn=16]="EntangleWarn",S[S.EntangleBlocked=17]="EntangleBlocked",S))(Fe||{}),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 T=s+1;T<l.length;T++){let f=l[T],m=this.getRuleResult(f,e,r),N=m instanceof Promise?await m:m;if(f.entityId==="__base__"){i=N;continue}if(N){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],T=this.getRuleResult(n,e,r),f=T instanceof Promise?await T:T;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=(M,b)=>{if(M.entityId==="__base__")i=s(i,b);else if(b){let S=M.value!==void 0?M.value:b;o=s(o,S);}};m(h,f);for(let M=p+1;M<l.length;M++){let b=l[M],S=this.getRuleResult(b,e,r),ne=S instanceof Promise?await S:S;m(b,ne);}return {res:s(o,i),version:t}})();let T=n;if(h.entityId==="__base__"){i=s(i,T);continue}if(T){let f=h.value!==void 0?h.value:T;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],T=p[h];if(typeof n=="object"&&n!==null){r=false;break}if(n!==T){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 T=p[n],f=h[n];if(typeof T=="object"&&T!==null||T!==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(T=>{n[T]=h[T];}),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=(T,f)=>{typeof r[T]>"u"&&(r[T]=[],i[T]=new Set),i[T].add(f),i[T].size>r[T].length&&r[T].push(f),typeof o[f]>"u"&&(o[f]=[],l[f]=new Set),l[f].add(T),l[f].size>o[f].length&&o[f].push(T);};return {SetRule:(T,f,m,N)=>{let M=a(T),b=a(f),S=N.triggerKeys||[],ne=s.get(b.uid)||0,H=s.get(M.uid)||0;ne+=1,H+=1,s.set(b.uid,ne),s.set(M.uid,H);let $=We(b.uid,m,{...N,triggerUids:[M.uid],triggerKeys:S}),Y=[T].map(U=>{let L=a(U);return [L.uid,S,L.proxy]});if(p(M.uid,b.uid),typeof b.nodeBucket[m]=="number"){let U=t(b.nodeBucket[m]);U.setRule($,Y),N.effect&&U.setSideEffect({fn:N.effect,args:N.effectArgs?N.effectArgs:[m]});}else {let U=b.meta[m],L=new Ae(U,m,f);L.setRule($,Y),N.effect&&L.setSideEffect({fn:N.effect,args:N.effectArgs?N.effectArgs:[m]}),b.nodeBucket[m]=e(L);}b.state[m]=b.meta[m];let c=t(b.nodeBucket[m]);N.forceNotify&&c.forceNotify(),N.cacheStrategy=="none"&&c.setUseCache(false);},SetRules:(T,f,m,N)=>{let M=a(f),b=s.get(M.uid)||0;b+=1,s.set(M.uid,b);let S=[];for(let c of T){let U=a(c);S.push(U.uid);let L=s.get(U.uid)||0;L+=1,s.set(U.uid,L),p(U.uid,M.uid);}let ne=N.triggerKeys||[],H=We(M.uid,m,{...N,triggerUids:S,triggerKeys:ne}),$=T.map(c=>{let U=a(c);return [U.uid,ne,U.state]});if(typeof M.nodeBucket[m]=="number"){let c=t(M.nodeBucket[m]);c.setRules(H,$),N.effect&&c.setSideEffect({fn:N.effect,args:N.effectArgs?N.effectArgs:[m]});}else {let c=M.meta[m],U=new Ae(c,m,f);U.setRules(H,$),N.effect&&U.setSideEffect({fn:N.effect,args:N.effectArgs?N.effectArgs:[m]}),M.nodeBucket[m]=e(U);}M.state[m]=M.meta[m];let Y=t(M.nodeBucket[m]);N.forceNotify&&Y.forceNotify(),N.cacheStrategy=="none"&&Y.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=[],T=[],f=g();for(let m of h){let N=f[m]||[];n[m]=N;for(let M=0;M<N.length;M++){let b=N[M];typeof T[b]>"u"&&(T[b]=[]),T[b].push(m);}}return {directNextMap:n,directPrevMap:T}}}}function Ze(g,e){let t=o=>{let i=[],l=[],s=new Map,a=o.size,p=0,h=0;for(let[n,T]of o)T===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 T of l){p++,s.set(T,h);let f=g[T];if(f)for(let m of f){let N=o.get(m)-1;o.set(m,N),N===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 be=()=>{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}=be();return {onError:g,callOnError:e}}function et(){let{on:g,call:e}=be();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,T)=>{let f=o(n,T);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}=be();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 M=Symbol("token"),b=typeof f=="number"?f:"__NOTIFY_ALL__";l.set(b,M),a=M;let S=false,ne=false;i.reset(),t.Turnstile.nextEpoch();let H=t.GetMaxUid()+3,$=new Array(H).fill(0),Y=0,c=new Uint8Array(H),U=new Int32Array(H),L=new Int32Array(H),d=new Int32Array(H*2),x=0,O=0,k=new Int32Array(H*2),V=0,F=0,v=new Int32Array(H*2),A=0,G=0;m.forEach(R=>{$[R]=1,e.GetAllNextDependency(R).forEach(ae=>{$[ae]=1;});});let _=new Array(H).fill(null),u=[],y=t.Turnstile,P=new Array(H).fill(null).map(()=>[]),W=new Array(H).fill(null).map(()=>[]),q=y.volatileLevels.size>0,re=q?y.hasObserver:R=>false,se=q?y.receiveGhosts:()=>[],Me=q?y.resolveGhosts:()=>[],me=q?y.getTriggerKeys:()=>[],Re=y?.volatileLevels||new Set,ye=-1,ee=e.GetUidToLevelMap(),ie=0,xe=0,Pe=R=>{e.GetAllNextDependency(R).forEach(oe=>{let w=ee.get(oe)||0;w>xe&&(xe=w);});},Ge=new Set;typeof f=="number"&&(c[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 R=>{if(re(R)){let ae=t.GetNodeByUid(R),oe=me(R);if(oe.length>0){let w=se(ae,oe);return w instanceof Promise&&(w=await w),{seed:R,hitTargets:w}}}return {seed:R,hitTargets:[]}});if((await Promise.all(Ie)).forEach(({seed:R,hitTargets:ae})=>{if(ae&&ae.length>0){u.push(...ae);let oe=ee.get(R)||0;ye=Math.max(ye,oe);}}),(u.length>0||we.length>1)&&(o.requestUpdate(),await i.yieldToMain(),l.get(b)!==M))return;let Ce=u.length>0;m.forEach(R=>{if(!Ge.has(R))if(Ce){let ae=ee.get(R)??0;L[R]=ae,c[R]&4||(c[R]|=4,v[A++]=R,G++);let oe=t.GetPathByUid(R);n.path=oe,n.type=2,r.emit(14,n);}else c[R]&1||(c[R]|=1,d[x++]=R,O++),Pe(R);}),typeof f=="number"?ie=ee.get(f)??0:ie=Math.min(...m.map(R=>ee.get(R)??0));let Oe=performance.now(),De=typeof b=="number"?t.GetPathByUid(b):"__NOTIFY_ALL__";n.path=De,n.token=M,r.emit(0,n),r.callOnStart({path:De});let Be=false,Ye=30,je=(R,ae)=>{let oe=false,w=false,j=false,B=t.GetNodeByUid(R),Z=t.GetPathByUid(R),Q=B.calledBy,K=P[R];K.length=0;let C=re(R),I=C?me(R):[],D=E=>{C&&(I.length===0||I.includes(E))&&K.push(E);},le=W[R];le.length=0;let ce=false;if(B.calledBy===1){ce=true,oe=true,o.flushPathSet.add(R);let E=_[R];E&&(K.push(...E),_[R]=null);}let de=(E,J)=>{let te=ee.get(E)??0,pe=t.GetNodeByUid(E),X=t.GetPathByUid(E),he=(Q===1||Q===2)&&te<=ye;he&&c[E]&16&&(c[E]&=-17,n.path=X,n.triggerPath=Z,r.emit(11,n));let ue=0;if(!(c[E]&49)){if(c[E]&2)ue=U[E]-1;else {if(te>ie&&F>Ye){L[E]=te,c[E]&4||(c[E]|=4,v[A++]=E,G++),n.path=X,n.type=7,r.emit(12,n);return}let Se=e.GetPrevDependency(E),z=0;for(let ge of Se){if(c[ge]&16)continue;(ee.get(ge)??0)>ie&&z++;}ue=z;}if(ue<=0){let Se=(c[E]&1)!==0,z=(c[E]&32)!==0;if(Se||z){n.path=X,n.type=z?3:3.1,r.emit(12,n);return}c[E]&2&&(c[E]&=-3,F--),he?pe.calledBy=2:pe.calledBy=0,c[E]&1||(c[E]|=1,d[x++]=E,O++),n.path=X,n.type=J,h.path=Z,r.emit(13,n);}else U[E]=ue,c[E]&2||(c[E]|=2,k[V++]=E,F++);}},Ne=(E=[])=>{if(l.get(b)!==M)return;if(E.length){let te={},pe=B.proxy;for(let X of E){let he=(X.args||[]).reduce((ue,Se)=>(ue[Se]=pe[Se],ue),{});try{let ue=X.fn(he);ue&&typeof ue=="object"&&Object.assign(te,ue);}catch(ue){}}for(let X in te)if(X in B.state)Object.is(B.state[X],te[X])||(B.state[X]=te[X],D(X),oe=true,(B.notifyKeys.size===0||B.notifyKeys.has(X))&&(w=true));else throw {error:`wrong effect in ${String(B.path)}`}}oe&&o.flushPathSet.add(R);let J=(te=[])=>{if(l.get(b)!==M)return;te&&te.length>0&&(u.push(...te),ye=Math.max(ye,ee.get(R)||0)),K.length=0,n.path=Z,n.calledBy=B.calledBy,r.emit(7,n),c[R]|=16;let pe=e.GetNextDependency(R);(w||j)&&(Pe(R),e.GetAllNextDependency(R).forEach(ge=>{$[ge]=1;}));let X=t.GetNodeByUid(R),he=ee.get(R)??0,ue=Re.has(he)||u.length>0;for(let z of pe){let ge=ee.get(z)??0,Te=t.GetPathByUid(z);if(ue&&ge>=he){L[z]=ge,c[z]&4||(c[z]|=4,v[A++]=z,G++),n.path=Te,n.type=2,r.emit(14,n);continue}if(c[z]&16){n.path=Te,n.type=2,r.emit(12,n);continue}if(c[z]&32||(c[z]&1)!==0){n.path=Te,n.type=c[z]&32?3:3.1,r.emit(12,n);continue}if(w||j)de(z,1);else if(c[z]&2)de(z,2);else {let lt=ee.get(z);L[z]=lt,c[z]&4||(c[z]|=4,v[A++]=z,G++,n.path=Te,n.type=1,r.emit(14,n));}}c[R]&32&&(c[R]&=-33,Y--),X.calledBy=0,(()=>{if(!S){S=true;let z=Y,ge=O,Te=F;n.path=Z,n.type=1,h.active=z,h.pending=ge,h.blocked=Te,r.emit(5,n),Ke();}})();};if(re(R)&&K.length>0){let te=se(B,K);te instanceof Promise?te.then(J).catch(ke):J(te);}else J([]);},ke=E=>{n.path=Z,n.error=E,r.emit(9,n);let J=Symbol("abort");l.set(b,J),x=0,O=0,V=0,F=0,A=0,G=0,c.fill(0),Y=0,_.fill(null),r.callOnError(E);},fe=(E,J)=>{E!==B.state[J]&&(B.state[J]=E,oe=true,D(String(J)),n.path=Z,n.key=J,n.value=E,n.calledBy=B.calledBy,r.emit(15,n),(B.notifyKeys.size===0||B.notifyKeys.has(J))&&(w=true)),t.GetBucket(B.nodeBucket[J]).isForceNotify()&&(j=true),(w||j)&&Pe(R);};n.path=Z,n.calledBy=B.calledBy,r.emit(6,n);try{let E=[];for(let J in B.nodeBucket){let te=t.GetBucket(B.nodeBucket[J]);if(E.push(...te.getSideEffect()),ce){r.emit(15,{path:Z,key:String(J),value:B.state[J],calledBy:B.calledBy}),te.isForceNotify()&&(j=!0),(B.notifyKeys.size===0||B.notifyKeys.has(J))&&Pe(R);continue}let pe=te.evaluate({affectKey:J,triggerUid:ae,getProxyByUid:X=>t.GetNodeByUid(X).proxy,getStateByUid:X=>t.GetNodeByUid(X).state,GetToken:()=>M});if(pe instanceof Promise){let X=pe.then(he=>{l.get(b)===M&&fe(he,J);});le.push(X);}else fe(pe,J);}if(le.length>0)return Promise.all(le).then(()=>{Ne(E);}).catch(ke);Ne(E);return}catch(E){ke(E);}},Ke=async()=>{if(l.get(b)!==M){S=false;return}S=true;let R=i.getIsFirstFrame(),ae=0,oe=()=>30,w=0,j=oe();try{for(;l.get(b)===M;){let B=w>=j,Z=i.shouldYield();if(B||Z){if(w>0&&(ae++,(R||ae%2===0)&&o.requestUpdate()),await i.yieldToMain(),l.get(b)!==M)break;w=0,R=i.getIsFirstFrame();}if(O>0&&Y<40){let Q=x,K=0;for(let C=0;C<Q;C++){let I=d[C];if((c[I]&1)===0)continue;if(Y>=40||w>=j||i.shouldYield()){for(let fe=C;fe<x;fe++){let E=d[fe];c[E]&1&&(d[K++]=E);}x=K,O=K;break}let D=t.GetNodeByUid(I),le=t.GetPathByUid(I),ce=ee.get(I)??0,de=e.GetPrevDependency(I),Ne=de.length>1;if((!s||Ne)&&ce>ie){c[I]&=-2,O--;let fe=de.filter(E=>$[E]===1&&(c[E]&16)===0).length;U[I]=fe||0,c[I]&2||(c[I]|=2,k[V++]=I,F++),n.path=le,n.type=fe>0?4:5,h.targetLevel=ce,h.currentLevel=ie,h.pendingParentsCount=fe,r.emit(12,n);continue}c[I]&=-2,O--,(c[I]&32)===0&&(c[I]|=32,Y++),n.path=le,n.calledBy=D.calledBy,r.emit(8,n),je(I,f),w++;}if(x>Q){for(let C=Q;C<x;C++){let I=d[C];c[I]&1&&(d[K++]=I);}x=K,O=x;}else x=K;if(O>0&&Y<40)continue}if(w<j&&s&&F>0&&Y<40){let Q=!1,K=0,C=0;for(let I=0;I<V;I++){let D=k[I];if((c[D]&2)===0)continue;if(U[D]<=0&&K<j){let ce=ee.get(D)??0,de=e.GetPrevDependency(D);if(ce<=ie||de.length<=1){c[D]&=-3,F--,c[D]&1||(c[D]|=1,d[x++]=D,O++),K++,Q=!0;let Ne=t.GetPathByUid(D);n.path=Ne,n.type=4,r.emit(13,n);continue}}k[C++]=D;}if(V=C,K>0)continue;if(Q){if(i.shouldYield()&&(await i.yieldToMain(),l.get(b)!==M))break;continue}}if(Y===0&&O===0){if(y.inFlightCount>0)break;if(u.length>0){let K=!1,C=ie,I=Array.from(new Set(u));u.length=0;for(let D of I){let le=t.GetNodeByUid(D),ce=Me(le);if(ce&&ce.length>0){K=!0,le.calledBy=1,_[D]=ce,c[D]&=-17,c[D]&2&&(c[D]&=-3,F--),c[D]&1||(c[D]|=1,d[x++]=D,O++);let de=ee.get(le.uid)??0;de<C&&(C=de),Pe(le.uid),o.flushPathSet.add(le.uid);}}if(K){if(C<ie&&(ie=C),o.requestUpdate(),i.shouldYield()&&(await i.yieldToMain(),l.get(b)!==M))break;continue}}let Q=1/0;for(let K=0;K<A;K++){let C=v[K];if(c[C]&4){let I=L[C];I<Q&&(Q=I);}}for(let K=0;K<V;K++){let C=k[K];if(c[C]&2){let I=ee.get(C)??0;I>ie&&I<Q&&(Q=I);}}if(Q!==1/0&&Q<=xe){ie=Q;let K=0;for(let I=0;I<A;I++){let D=v[I];c[D]&4&&(L[D]===Q?(c[D]&=-5,G--,c[D]&1||(c[D]|=1,d[x++]=D,O++)):v[K++]=D);}A=K;let C=0;for(let I=0;I<V;I++){let D=k[I];if(c[D]&2)if((ee.get(D)??0)===Q){c[D]&=-3,F--,c[D]&1||(c[D]|=1,d[x++]=D,O++);let ce=t.GetPathByUid(D);n.path=ce,n.type=3,h.level=Q,r.emit(13,n);}else k[C++]=D;}V=C;continue}else {for(let K=0;K<A;K++){let C=v[K];if(c[C]&4){c[C]|=16;let I=t.GetPathByUid(C);n.path=I,n.type=6,r.emit(12,n);}}A=0,G=0;for(let K=0;K<V;K++){let C=k[K];if(c[C]&2){c[C]|=16;let I=t.GetPathByUid(C);n.path=I,n.type=6,r.emit(12,n);}}V=0,F=0;break}}O>0&&Y>=40&&(n.type=2,r.emit(4,n));break}}finally{S=false;let B=Y+F+O,Z=y.inFlightCount||0;if(!(a===M)){n.token=M,r.emit(3,n);return}if(o.requestUpdate(),B===0&&Z===0){if(l.get(b)===M&&!Be){Be=true,n.type=1,r.emit(2,n),y.resetCounters(),_.fill(null);let K=performance.now();ye=-1,l.delete(b),n.token=M,n.duration=(K-Oe).toFixed(2.1)+"ms",r.emit(1,n),Promise.resolve().then(()=>{r.callOnSuccess();});}}else {let K=B===0&&Z>0?3:1;if(n.type=K,h.nums=Y,h.asyncNums=Z,r.emit(4,n),Z>0&&!ne){ne=true;let C=()=>{a===M&&(y.inFlightCount,y.inFlightCount===0?_e(()=>{y.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 T=new Proxy(n,{get(f,m){let N=m;return Reflect.has(f,m)?Reflect.get(f,m):N in g.state?g.state[N]:N in g?g[N]:o&&N in o?o[N]:Reflect.get(f,m)},set(f,m,N){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 N=m;return Reflect.has(f,m)||l&&N in l||o&&N in o||a.includes(N)?{enumerable:true,configurable:true}:Reflect.getOwnPropertyDescriptor(f,m)}});return s=T,T}};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,N=0,M=0,b=0,S=100,ne=()=>{let d={link:null,impactNode:null,impactUid:-1,hitTargetUids:null,isDirty:false,propose:null};return d.propose={set:(x,O,k=1)=>{d.epoch===b&&O!==d.impactNode.state[x]&&(d.link.count++,(!p[d.impactUid]||p[d.impactUid].length===0)&&(p[d.impactUid]=[],M++),p[d.impactUid].push({key:x,value:O,weight:k}),d.isDirty||(d.hitTargetUids.push(d.impactUid),d.isDirty=true));},update:(x,O,k="add")=>{d.epoch===b&&(d.link.count++,(!p[d.impactUid]||p[d.impactUid].length===0)&&(p[d.impactUid]=[],M++),p[d.impactUid].push({key:x,delta:O,op:k,weight:1}),d.isDirty||(d.hitTargetUids.push(d.impactUid),d.isDirty=true));},patch:(x,O)=>{d.epoch===b&&(d.link.count++,(!p[d.impactUid]||p[d.impactUid].length===0)&&(p[d.impactUid]=[],M++),p[d.impactUid].push({key:x,patch:O,weight:1}),d.isDirty||(d.hitTargetUids.push(d.impactUid),d.isDirty=true));}},d},H=Array.from({length:S},ne),$=S-1,Y=(d,x,O)=>{let k=x.path,V=d.impact;if(d.count>=s){l.emit("entangle:blocked",{observer:k,target:V,count:d.count});return}let F=n(V),v=d.isProxy?x.proxy:x,A=d.isProxy?F.proxy:F;if(d.filter&&!d.filter(v,A))return;let G,_=true;$<0?(G=ne(),_=false):G=H[$--];let u=b;G.epoch=u,G.isDirty=false,G.link=d,G.impactNode=F,G.impactUid=F.uid,G.hitTargetUids=O;let y=d.emit(v,A,G.propose);if(y instanceof Promise||y&&typeof y.then=="function")return N++,(async()=>{try{await y;}catch(P){l.emit("node:error",{path:k,error:P}),l.onError({path:k,error:P});}finally{u===b&&N--,_&&(H[++$]=G);}})();_&&(H[++$]=G);};return {useEntangle:d=>{let{cause:x,impact:O,via:k,emit:V,filter:F,isProxy:v}=d;if(!k||k.length===0){l.emit("entangle:warn",{path:x,type:"no_keys"});return}let G=n(x).uid;a[G]||(a[G]=new Map);let _=a[G];for(let u=0;u<k.length;u++){let y=k[u];_.has(y)||_.set(y,[]),_.get(y).push({impact:O,emit:V,filter:F,count:0,isProxy:!!v});}},updateEntangleLevel:()=>{let d=m();h.clear();for(let x=0;x<a.length;x++)if(a[x]!==void 0){let O=d.get(x)||0;h.add(O);}},Turnstile:{volatileLevels:h,get inFlightCount(){return N},get hasPendingGhosts(){return M>0},nextEpoch:()=>{b++,N=0,M=0,p.length=0;},hasObserver:d=>a[d]!==void 0,getTriggerKeys:d=>{let x=a[d];return x?Array.from(x.keys()):[]},receiveGhosts:(d,x=[])=>{let O=d.uid,k=[],V=a[O];if(!V||x.length===0)return k;let F=[];for(let u=0;u<x.length;u++){let y=V.get(x[u]);if(y)for(let P=0;P<y.length;P++)F.push(y[P]);}let v=0,A=false,G=null;for(;v<F.length;v++){if(e.shouldYield()){A=true;break}let u=Y(F[v],d,k);if(u){G=u,A=true,v++;break}}let _=()=>{if(k.length<=1)return k;let u=[],y=Object.create(null);for(let P=0;P<k.length;P++){let W=k[P];y[W]||(y[W]=true,u.push(W));}return u};return A?(async()=>{for(G&&await G,e.shouldYield()&&await e.yieldToMain();v<F.length;){let u=[],y=Math.min(v+S,F.length);for(;v<y;v++){let P=Y(F[v],d,k);P&&u.push(P);}u.length>0&&await Promise.all(u.map(async P=>{await P,e.shouldYield()&&await e.yieldToMain();})),e.shouldYield()&&await e.yieldToMain();}return _()})():_()},resolveGhosts:d=>{let x=d.uid,O=p[x];if(!O||O.length===0)return [];let k=[],V=Object.create(null);for(let F=0;F<O.length;F++){let v=O[F];V[v.key]||(V[v.key]=[]),V[v.key].push(v);}for(let F in V){let v=V[F],A=d.state[F],G,_=-1/0,u=false;for(let y=0;y<v.length;y++){let P=v[y];if(P.patch!==void 0&&(A=P.patch(A)),P.value!==void 0){let W=P.weight??1;W>=_&&(_=W,G=P.value,u=true);}}u&&(A=G);for(let y=0;y<v.length;y++){let P=v[y];if(P.delta!==void 0)switch(P.op||"add"){case "add":A=(typeof A=="number"?A:0)+P.delta;break;case "remove":A=Array.isArray(A)?A.filter(q=>q!==P.delta):A;break;case "intersect":A=Array.isArray(A)?A.filter(q=>P.delta.includes(q)):P.delta;break;case "union":{let q=Array.isArray(A)?A:[],re=Array.isArray(P.delta)?P.delta:[P.delta];A=[...new Set([...q,...re])];break}case "merge":{let q=typeof A=="object"&&A!==null&&!Array.isArray(A)?A:{},re=typeof P.delta=="object"&&P.delta!==null&&!Array.isArray(P.delta)?P.delta:{};A={...q,...re};break}}}Object.is(d.state[F],A)||(d.state[F]=A,k.push(F));}return p[x]=[],M--,k.length>0?k:[]},resetCounters:()=>{for(let d=0;d<a.length;d++){let x=a[d];if(x)for(let O of x.values())for(let k=0;k<O.length;k++)O[k].count=0;}}}}};function ot(g,e,t,r,o){let i=rt(),l=0,s=new Map,a=[],p=[],h=[],n=[],T=false,f=new Set,N=async()=>{let u=Array.from(f);if(f.clear(),"signalTrigger"in o&&typeof o.signalTrigger=="function")for(let y of u){let P=d(y);o.signalTrigger(P.dirtySignal);}else "emit"in o&&o.emit(u);},M=()=>{T||(T=true,requestAnimationFrame(()=>{try{for(;f.size>0;)N();}finally{T=false;}}));},{useEntangle:b,updateEntangleLevel:S,Turnstile:ne}=at({useEntangleStep:g.useEntangleStep},i,e.GetUidToLevelMap,L,d,x,{emit:r.emit,onError:r.callOnError}),{TaskRunner:H,CancelTask:$}=st({useGreedy:g.useGreedy},e,{GetNodeByPath:L,GetNodeByUid:d,GetPathByUid:x,GetBucket:V,GetMaxUid:F,Turnstile:ne},r,{requestUpdate:M,flushPathSet:f},i),Y=u=>{throw new Error(`[MeshFlow] Duplicate Path: ${u}`)},c=u=>{s.has(u.path)&&Y(String(u.path));let y=++l,P={path:u.path,getNode:re=>L(re)},W=(re,se="value")=>{let Me=re({...P}),me=L(u.path);if(!Object.is(me.state[se],Me)){if(t.createHistoryAction&&t.pushIntoHistory){let Re=t.createHistoryAction([{path:u.path,value:me.state[se]},{path:u.path,value:Me}],ye=>{let ee=L(ye.path);ee.state[se]=ye.value,v(ye.path);});t.pushIntoHistory(Re);}me.state[se]=Me,v(u.path);}},q=He({uid:y,type:u.type,path:u.path,state:u.state,meta:u.meta,nodeBucket:{},dirtySignal:"signalCreator"in o?o.signalCreator():void 0,notifyKeys:u.notifyKeys,dependOn:W});return s.set(q.path,y),h[y]=q.path,a[y]=q,q},U=u=>{s.has(u.path)&&Y(String(u.path));let y=++l,P=He({uid:y,type:u.type,path:u.path,state:{},meta:u,nodeBucket:{},children:u.children});return s.set(P.path,y),p[y]=P,P};function L(u){let y=s.get(u),P=a[y];if(!P)throw Error("Wrong id");return P}function d(u){let y=a[u];if(!y)throw Error("Wrong id");return y}function x(u){return h[u]}function O(u){let y=s.get(u);return p[y]}function k(u){return n.push(u)-1}function V(u){let y=n[u];if(!y)throw Error("Wrong id");return y}function F(){return l}let v=u=>{let y=L(u);if(!y)throw Error("Wrong id");f.add(y.uid),M();let P=e.GetNextDependency(y.uid);A(y.uid,P);};function A(u,y){H(u,y);}return {registerNode:c,registerGroupNode:U,GetNodeByPath:L,GetGroupByPath:O,notify:v,notifyAll:async()=>{Promise.resolve().then(async()=>{let u=e.GetDependencyOrder();if(!u||u.length===0)return;let y=u[0];try{H(null,y);}catch(P){throw r.callOnError(P),P}finally{M();}});},batchNotify:u=>{if(!u||u.length===0)return;if(t.createHistoryAction&&t.pushIntoHistory){let P=t.createHistoryAction([u.map(W=>({path:W.path,key:W.key,value:L(W.path).state[W.key]})),u.map(W=>({path:W.path,key:W.key,value:W.value}))],W=>{let q=new Set;W.forEach(re=>{let se=L(re.path);se.state[re.key]=re.value,f.add(re.path),q.add(re.uid);}),M(),q.size>0&&H(null,Array.from(q));});t.pushIntoHistory(P);}let y=new Set;u.forEach(P=>{let W=L(P.path);W.state[P.key]=P.value,f.add(W.uid),y.add(W.uid);}),M(),y.size>0&&H(null,Array.from(y));},useEntangle:b,updateEntangleLevel:S,SetBucket:k,GetBucket:V,CancelTask:$,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=[],T=[],f=[],m=new Map,{GetNextDependency:M,GetPrevDependency:b,GetAllPrevDependency:S,GetAllNextDependency:ne,rebuildDirectDependencyMaps:H}=Xe(()=>s,()=>p,()=>T,()=>n),$={},Y={};if(e.modules.useHistory){let w=e.modules.useHistory,j;w.isMeshModuleInited?j=w:j=w();let{Undo:B,Redo:Z,PushIntoHistory:Q,CreateHistoryAction:K,updateUndoSize:C,updateRedoSize:I}=j();$.pushIntoHistory=Q,$.createHistoryAction=K,Y={Undo:B,Redo:Z,updateUndoSize:C,updateRedoSize:I};}let c=!!e.modules.useMeshRenderGate,U={};if(c){let w=e.modules.useMeshRenderGate.isMeshModuleInited,j=e.modules.useMeshRenderGate;U=(w?j:j())(()=>se);}let{onError:L,callOnError:d}=Je(),{onSuccess:x,callOnSuccess:O}=et(),{onStart:k,callOnStart:V}=nt(),{emit:F,usePlugin:v,destroyPlugin:A}=tt(),{SetTrace:G,useTrace:_}=Qe(),u=_();v(u);let y=c?{...U}:{...e.UITrigger},P=ot({useGreedy:e.config.useGreedy,useEntangleStep:e.config.useEntangleStep||100},{GetDependencyOrder:()=>f,GetAllNextDependency:ne,GetNextDependency:M,GetPrevDependency:b,GetAllPrevDependency:S,GetUidToLevelMap:()=>m},$,{callOnError:d,callOnSuccess:O,callOnStart:V,emit:F},y),{SetBucket:W,GetBucket:q,GetGroupByPath:re,GetNodeByPath:se,notifyAll:Me,useEntangle:me,updateEntangleLevel:Re,CancelTask:ye}=P;c&&U.init();let ee={};if(e.modules.useInternalForm){let{uiSchema:w,GetFormData:j}=e.modules.useInternalForm(P,g);ee={uiSchema:w,GetFormData:j};}let ie={};if(e.modules.useSchemaValidators){let{SetValidators:w}=e.modules.useSchemaValidators(se);ie={SetValidators:w};}let{SetRule:xe,SetRules:Pe}=ze(se,W,q,s,p,a,h,l),{SetStrategy:Ge}=qe(se,q),we=Ze(s,l),Ie=()=>{let w=we();f=w.steps,m=w.levelMap,Ee();},Ee=()=>{o&&(Re(),o=false);},Ce=()=>{i||(i=true,Promise.resolve().then(Ee).finally(()=>{i=false;}));},Oe=()=>{r||(r=true,Promise.resolve().then(()=>{if(Ie(),t){let{directNextMap:w,directPrevMap:j}=H(f.flat());n=w,T=j;}}).finally(()=>{r=false,t=false;}));};return {SetRule:(w,j,B,Z)=>{xe(w,j,B,Z),t=true,Oe();},SetRules:(w,j,B,Z)=>{Pe(w,j,B,Z),t=true,Oe();},SetStrategy:Ge,useEntangle:w=>{me(w),o=true,Ce();},SetTrace:G,usePlugin:v,SetValue:(w,j,B)=>{Ee(),se(w).dependOn(()=>B,j);},GetValue:(w,j="value")=>se(w).proxy[j],SetValues:w=>{Ee(),P.batchNotify(w);},GetGroupByPath:re,notifyAll:async()=>{Ie(),await Me();},GetAllDependency:()=>s,GetDependencyOrder:()=>f,historyExports:Y,formExports:ee,validatorExports:ie,batchRenderExport:U,hasRenderGate:()=>c,onError:L,onSuccess:x,onStart:k,scheduler:P,destroyPlugin:A,CancelTask:ye}}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:T,notifyAll:f,SetTrace:m,GetAllDependency:N,GetDependencyOrder:M,historyExports:b,formExports:S,validatorExports:ne,batchRenderExport:H,hasRenderGate:$,onError:Y,onSuccess:c,onStart:U,scheduler:L,destroyPlugin:d,CancelTask:x}=r,O={config:{SetRule:o,SetRules:i,SetStrategy:s,notifyAll:f,SetTrace:m,usePlugin:h,hasRenderGate:$,useEntangle:n},data:{SetValue:a,GetValue:p,SetValues:l,GetGroupByPath:T},dependency:{GetAllDependency:N,GetDependencyOrder:M},hooks:{onError:Y,onSuccess:c,onStart:U}},k=(v,A,G)=>{!A||typeof A!="object"||Object.keys(A).forEach(_=>{let u=A[_];if(typeof u=="object"&&u!==null)v[_]=v[_]||{},k(v[_],u,G);else if(typeof u=="function"){let y=_;if(y==="useMeshRenderGate")y="render";else if(y.startsWith("use")){let P=y.slice(3);y=P.charAt(0).toLowerCase()+P.slice(1);}_==="useHistory"&&G.exports.history&&Object.keys(G.exports.history).length>0?v[y]=G.exports.history:_==="useInternalForm"&&G.exports.form&&Object.keys(G.exports.form).length>0?v[y]=G.exports.form:_==="useSchemaValidators"&&G.exports.validator&&Object.keys(G.exports.validator).length>0?v[y]=G.exports.validator:_==="useMeshRenderGate"&&G.exports.render?v[y]=G.exports.render:v[y]=u(G.scheduler,G.Schema);}});},V={...O,destroyPlugin:d,CancelTask:x,modules:{}},F=t.modules;return F&&k(V.modules,F,{scheduler:L,Schema:e,exports:{history:b,form:S,validator:ne,render:H}}),ve.set(g,V),V}catch(r){throw Error(r)}},Sn=()=>(g,e,t)=>ut(g,e,t),Mn=g=>{let e=ve.get(g);if(!e)throw Error("Engine not found.");return e},Tn=g=>{let e=ve.get(g);e.destroyPlugin(),e.CancelTask(),ve.delete(g);};exports.DefaultStrategy=Ve;exports.MeshFlowEventsName=Fe;exports.TriggerCause=Ue;exports.deleteEngine=Tn;exports.useEngine=Mn;exports.useMeshFlow=ut;exports.useMeshFlowDefiner=Sn;exports.useScheduler=ot;
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 Fe=(S=>(S[S.FlowStart=0]="FlowStart",S[S.FlowSuccess=1]="FlowSuccess",S[S.FlowEnd=2]="FlowEnd",S[S.FlowAbort=3]="FlowAbort",S[S.FlowWait=4]="FlowWait",S[S.FlowFire=5]="FlowFire",S[S.NodeStart=6]="NodeStart",S[S.NodeSuccess=7]="NodeSuccess",S[S.NodeProcessing=8]="NodeProcessing",S[S.NodeError=9]="NodeError",S[S.NodePending=10]="NodePending",S[S.NodeRevive=11]="NodeRevive",S[S.NodeIntercept=12]="NodeIntercept",S[S.NodeRelease=13]="NodeRelease",S[S.NodeStagnate=14]="NodeStagnate",S[S.NodeBucketSuccess=15]="NodeBucketSuccess",S[S.EntangleWarn=16]="EntangleWarn",S[S.EntangleBlocked=17]="EntangleBlocked",S))(Fe||{}),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 T=s+1;T<l.length;T++){let f=l[T],m=this.getRuleResult(f,e,r),N=m instanceof Promise?await m:m;if(f.entityId==="__base__"){i=N;continue}if(N){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],T=this.getRuleResult(n,e,r),f=T instanceof Promise?await T:T;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=(M,b)=>{if(M.entityId==="__base__")i=s(i,b);else if(b){let S=M.value!==void 0?M.value:b;o=s(o,S);}};m(h,f);for(let M=p+1;M<l.length;M++){let b=l[M],S=this.getRuleResult(b,e,r),ne=S instanceof Promise?await S:S;m(b,ne);}return {res:s(o,i),version:t}})();let T=n;if(h.entityId==="__base__"){i=s(i,T);continue}if(T){let f=h.value!==void 0?h.value:T;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],T=p[h];if(typeof n=="object"&&n!==null){r=false;break}if(n!==T){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 T=p[n],f=h[n];if(typeof T=="object"&&T!==null||T!==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(T=>{n[T]=h[T];}),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=(T,f)=>{typeof r[T]>"u"&&(r[T]=[],i[T]=new Set),i[T].add(f),i[T].size>r[T].length&&r[T].push(f),typeof o[f]>"u"&&(o[f]=[],l[f]=new Set),l[f].add(T),l[f].size>o[f].length&&o[f].push(T);};return {SetRule:(T,f,m,N)=>{let M=a(T),b=a(f),S=N.triggerKeys||[],ne=s.get(b.uid)||0,H=s.get(M.uid)||0;ne+=1,H+=1,s.set(b.uid,ne),s.set(M.uid,H);let $=We(b.uid,m,{...N,triggerUids:[M.uid],triggerKeys:S}),Y=[T].map(U=>{let L=a(U);return [L.uid,S,L.proxy]});if(p(M.uid,b.uid),typeof b.nodeBucket[m]=="number"){let U=t(b.nodeBucket[m]);U.setRule($,Y),N.effect&&U.setSideEffect({fn:N.effect,args:N.effectArgs?N.effectArgs:[m]});}else {let U=b.meta[m],L=new Ae(U,m,f);L.setRule($,Y),N.effect&&L.setSideEffect({fn:N.effect,args:N.effectArgs?N.effectArgs:[m]}),b.nodeBucket[m]=e(L);}b.state[m]=b.meta[m];let c=t(b.nodeBucket[m]);N.forceNotify&&c.forceNotify(),N.cacheStrategy=="none"&&c.setUseCache(false);},SetRules:(T,f,m,N)=>{let M=a(f),b=s.get(M.uid)||0;b+=1,s.set(M.uid,b);let S=[];for(let c of T){let U=a(c);S.push(U.uid);let L=s.get(U.uid)||0;L+=1,s.set(U.uid,L),p(U.uid,M.uid);}let ne=N.triggerKeys||[],H=We(M.uid,m,{...N,triggerUids:S,triggerKeys:ne}),$=T.map(c=>{let U=a(c);return [U.uid,ne,U.state]});if(typeof M.nodeBucket[m]=="number"){let c=t(M.nodeBucket[m]);c.setRules(H,$),N.effect&&c.setSideEffect({fn:N.effect,args:N.effectArgs?N.effectArgs:[m]});}else {let c=M.meta[m],U=new Ae(c,m,f);U.setRules(H,$),N.effect&&U.setSideEffect({fn:N.effect,args:N.effectArgs?N.effectArgs:[m]}),M.nodeBucket[m]=e(U);}M.state[m]=M.meta[m];let Y=t(M.nodeBucket[m]);N.forceNotify&&Y.forceNotify(),N.cacheStrategy=="none"&&Y.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=[],T=[],f=g();for(let m of h){let N=f[m]||[];n[m]=N;for(let M=0;M<N.length;M++){let b=N[M];typeof T[b]>"u"&&(T[b]=[]),T[b].push(m);}}return {directNextMap:n,directPrevMap:T}}}}function Ze(g,e){let t=o=>{let i=[],l=[],s=new Map,a=o.size,p=0,h=0;for(let[n,T]of o)T===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 T of l){p++,s.set(T,h);let f=g[T];if(f)for(let m of f){let N=o.get(m)-1;o.set(m,N),N===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 be=()=>{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}=be();return {onError:g,callOnError:e}}function et(){let{on:g,call:e}=be();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,T)=>{let f=o(n,T);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}=be();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 M=Symbol("token"),b=typeof f=="number"?f:"__NOTIFY_ALL__";l.set(b,M),a=M;let S=false,ne=false;i.reset(),t.Turnstile.nextEpoch();let H=t.GetMaxUid()+3,$=new Array(H).fill(0),Y=0,c=new Uint8Array(H),U=new Int32Array(H),L=new Int32Array(H),d=new Int32Array(H*2),x=0,O=0,k=new Int32Array(H*2),V=0,F=0,v=new Int32Array(H*2),A=0,G=0;m.forEach(R=>{$[R]=1,e.GetAllNextDependency(R).forEach(ae=>{$[ae]=1;});});let _=new Array(H).fill(null),u=[],y=t.Turnstile,P=new Array(H).fill(null).map(()=>[]),W=new Array(H).fill(null).map(()=>[]),q=y.volatileLevels.size>0,re=q?y.hasObserver:R=>false,se=q?y.receiveGhosts:()=>[],Me=q?y.resolveGhosts:()=>[],me=q?y.getTriggerKeys:()=>[],Re=y?.volatileLevels||new Set,ye=-1,ee=e.GetUidToLevelMap(),ie=0,xe=0,Pe=R=>{e.GetAllNextDependency(R).forEach(oe=>{let w=ee.get(oe)||0;w>xe&&(xe=w);});},Ge=new Set;typeof f=="number"&&(c[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 R=>{if(re(R)){let ae=t.GetNodeByUid(R),oe=me(R);if(oe.length>0){let w=se(ae,oe);return w instanceof Promise&&(w=await w),{seed:R,hitTargets:w}}}return {seed:R,hitTargets:[]}});if((await Promise.all(Ie)).forEach(({seed:R,hitTargets:ae})=>{if(ae&&ae.length>0){u.push(...ae);let oe=ee.get(R)||0;ye=Math.max(ye,oe);}}),(u.length>0||we.length>1)&&(o.requestUpdate(),await i.yieldToMain(),l.get(b)!==M))return;let Ce=u.length>0;m.forEach(R=>{if(!Ge.has(R))if(Ce){let ae=ee.get(R)??0;L[R]=ae,c[R]&4||(c[R]|=4,v[A++]=R,G++);let oe=t.GetPathByUid(R);n.path=oe,n.type=2,r.emit(14,n);}else c[R]&1||(c[R]|=1,d[x++]=R,O++),Pe(R);}),typeof f=="number"?ie=ee.get(f)??0:ie=Math.min(...m.map(R=>ee.get(R)??0));let Oe=performance.now(),De=typeof b=="number"?t.GetPathByUid(b):"__NOTIFY_ALL__";n.path=De,n.token=M,r.emit(0,n),r.callOnStart({path:De});let Be=false,Ye=30,je=(R,ae)=>{let oe=false,w=false,j=false,B=t.GetNodeByUid(R),Z=t.GetPathByUid(R),Q=B.calledBy,K=P[R];K.length=0;let C=re(R),I=C?me(R):[],D=E=>{C&&(I.length===0||I.includes(E))&&K.push(E);},le=W[R];le.length=0;let ce=false;if(B.calledBy===1){ce=true,oe=true,o.flushPathSet.add(R);let E=_[R];E&&(K.push(...E),_[R]=null);}let de=(E,J)=>{let te=ee.get(E)??0,pe=t.GetNodeByUid(E),X=t.GetPathByUid(E),he=(Q===1||Q===2)&&te<=ye;he&&c[E]&16&&(c[E]&=-17,n.path=X,n.triggerPath=Z,r.emit(11,n));let ue=0;if(!(c[E]&49)){if(c[E]&2)ue=U[E]-1;else {if(te>ie&&F>Ye){L[E]=te,c[E]&4||(c[E]|=4,v[A++]=E,G++),n.path=X,n.type=7,r.emit(12,n);return}let Se=e.GetPrevDependency(E),z=0;for(let ge of Se){if(c[ge]&16)continue;(ee.get(ge)??0)>ie&&z++;}ue=z;}if(ue<=0){let Se=(c[E]&1)!==0,z=(c[E]&32)!==0;if(Se||z){n.path=X,n.type=z?3:3.1,r.emit(12,n);return}c[E]&2&&(c[E]&=-3,F--),he?pe.calledBy=2:pe.calledBy=0,c[E]&1||(c[E]|=1,d[x++]=E,O++),n.path=X,n.type=J,h.path=Z,r.emit(13,n);}else U[E]=ue,c[E]&2||(c[E]|=2,k[V++]=E,F++);}},Ne=(E=[])=>{if(l.get(b)!==M)return;if(E.length){let te={},pe=B.proxy;for(let X of E){let he=(X.args||[]).reduce((ue,Se)=>(ue[Se]=pe[Se],ue),{});try{let ue=X.fn(he);ue&&typeof ue=="object"&&Object.assign(te,ue);}catch(ue){}}for(let X in te)if(X in B.state)Object.is(B.state[X],te[X])||(B.state[X]=te[X],D(X),oe=true,(B.notifyKeys.size===0||B.notifyKeys.has(X))&&(w=true));else throw {error:`wrong effect in ${String(B.path)}`}}oe&&o.flushPathSet.add(R);let J=(te=[])=>{if(l.get(b)!==M)return;te&&te.length>0&&(u.push(...te),ye=Math.max(ye,ee.get(R)||0)),K.length=0,n.path=Z,n.calledBy=B.calledBy,r.emit(7,n),c[R]|=16;let pe=e.GetNextDependency(R);(w||j)&&(Pe(R),e.GetAllNextDependency(R).forEach(ge=>{$[ge]=1;}));let X=t.GetNodeByUid(R),he=ee.get(R)??0,ue=Re.has(he)||u.length>0;for(let z of pe){let ge=ee.get(z)??0,Te=t.GetPathByUid(z);if(ue&&ge>=he){L[z]=ge,c[z]&4||(c[z]|=4,v[A++]=z,G++),n.path=Te,n.type=2,r.emit(14,n);continue}if(c[z]&16){n.path=Te,n.type=2,r.emit(12,n);continue}if(c[z]&32||(c[z]&1)!==0){n.path=Te,n.type=c[z]&32?3:3.1,r.emit(12,n);continue}if(w||j)de(z,1);else if(c[z]&2)de(z,2);else {let lt=ee.get(z);L[z]=lt,c[z]&4||(c[z]|=4,v[A++]=z,G++,n.path=Te,n.type=1,r.emit(14,n));}}c[R]&32&&(c[R]&=-33,Y--),X.calledBy=0,(()=>{if(!S){S=true;let z=Y,ge=O,Te=F;n.path=Z,n.type=1,h.active=z,h.pending=ge,h.blocked=Te,r.emit(5,n),Ke();}})();};if(re(R)&&K.length>0){let te=se(B,K);te instanceof Promise?te.then(J).catch(ke):J(te);}else J([]);},ke=E=>{n.path=Z,n.error=E,r.emit(9,n);let J=Symbol("abort");l.set(b,J),x=0,O=0,V=0,F=0,A=0,G=0,c.fill(0),Y=0,_.fill(null),r.callOnError(E);},fe=(E,J)=>{E!==B.state[J]&&(B.state[J]=E,oe=true,D(String(J)),n.path=Z,n.key=J,n.value=E,n.calledBy=B.calledBy,r.emit(15,n),(B.notifyKeys.size===0||B.notifyKeys.has(J))&&(w=true)),t.GetBucket(B.nodeBucket[J]).isForceNotify()&&(j=true),(w||j)&&Pe(R);};n.path=Z,n.calledBy=B.calledBy,r.emit(6,n);try{let E=[];for(let J in B.nodeBucket){let te=t.GetBucket(B.nodeBucket[J]);if(E.push(...te.getSideEffect()),ce){r.emit(15,{path:Z,key:String(J),value:B.state[J],calledBy:B.calledBy}),te.isForceNotify()&&(j=!0),(B.notifyKeys.size===0||B.notifyKeys.has(J))&&Pe(R);continue}let pe=te.evaluate({affectKey:J,triggerUid:ae,getProxyByUid:X=>t.GetNodeByUid(X).proxy,getStateByUid:X=>t.GetNodeByUid(X).state,GetToken:()=>M});if(pe instanceof Promise){let X=pe.then(he=>{l.get(b)===M&&fe(he,J);});le.push(X);}else fe(pe,J);}if(le.length>0)return Promise.all(le).then(()=>{Ne(E);}).catch(ke);Ne(E);return}catch(E){ke(E);}},Ke=async()=>{if(l.get(b)!==M){S=false;return}S=true;let R=i.getIsFirstFrame(),ae=0,oe=()=>30,w=0,j=oe();try{for(;l.get(b)===M;){let B=w>=j,Z=i.shouldYield();if(B||Z){if(w>0&&(ae++,(R||ae%2===0)&&o.requestUpdate()),await i.yieldToMain(),l.get(b)!==M)break;w=0,R=i.getIsFirstFrame();}if(O>0&&Y<40){let Q=x,K=0;for(let C=0;C<Q;C++){let I=d[C];if((c[I]&1)===0)continue;if(Y>=40||w>=j||i.shouldYield()){for(let fe=C;fe<x;fe++){let E=d[fe];c[E]&1&&(d[K++]=E);}x=K,O=K;break}let D=t.GetNodeByUid(I),le=t.GetPathByUid(I),ce=ee.get(I)??0,de=e.GetPrevDependency(I),Ne=de.length>1;if((!s||Ne)&&ce>ie){c[I]&=-2,O--;let fe=de.filter(E=>$[E]===1&&(c[E]&16)===0).length;U[I]=fe||0,c[I]&2||(c[I]|=2,k[V++]=I,F++),n.path=le,n.type=fe>0?4:5,h.targetLevel=ce,h.currentLevel=ie,h.pendingParentsCount=fe,r.emit(12,n);continue}c[I]&=-2,O--,(c[I]&32)===0&&(c[I]|=32,Y++),n.path=le,n.calledBy=D.calledBy,r.emit(8,n),je(I,f),w++;}if(x>Q){for(let C=Q;C<x;C++){let I=d[C];c[I]&1&&(d[K++]=I);}x=K,O=x;}else x=K;if(O>0&&Y<40)continue}if(w<j&&s&&F>0&&Y<40){let Q=!1,K=0,C=0;for(let I=0;I<V;I++){let D=k[I];if((c[D]&2)===0)continue;if(U[D]<=0&&K<j){let ce=ee.get(D)??0,de=e.GetPrevDependency(D);if(ce<=ie||de.length<=1){c[D]&=-3,F--,c[D]&1||(c[D]|=1,d[x++]=D,O++),K++,Q=!0;let Ne=t.GetPathByUid(D);n.path=Ne,n.type=4,r.emit(13,n);continue}}k[C++]=D;}if(V=C,K>0)continue;if(Q){if(i.shouldYield()&&(await i.yieldToMain(),l.get(b)!==M))break;continue}}if(Y===0&&O===0){if(y.inFlightCount>0)break;if(u.length>0){let K=!1,C=ie,I=Array.from(new Set(u));u.length=0;for(let D of I){let le=t.GetNodeByUid(D),ce=Me(le);if(ce&&ce.length>0){K=!0,le.calledBy=1,_[D]=ce,c[D]&=-17,c[D]&2&&(c[D]&=-3,F--),c[D]&1||(c[D]|=1,d[x++]=D,O++);let de=ee.get(le.uid)??0;de<C&&(C=de),Pe(le.uid),o.flushPathSet.add(le.uid);}}if(K){if(C<ie&&(ie=C),o.requestUpdate(),i.shouldYield()&&(await i.yieldToMain(),l.get(b)!==M))break;continue}}let Q=1/0;for(let K=0;K<A;K++){let C=v[K];if(c[C]&4){let I=L[C];I<Q&&(Q=I);}}for(let K=0;K<V;K++){let C=k[K];if(c[C]&2){let I=ee.get(C)??0;I>ie&&I<Q&&(Q=I);}}if(Q!==1/0&&Q<=xe){ie=Q;let K=0;for(let I=0;I<A;I++){let D=v[I];c[D]&4&&(L[D]===Q?(c[D]&=-5,G--,c[D]&1||(c[D]|=1,d[x++]=D,O++)):v[K++]=D);}A=K;let C=0;for(let I=0;I<V;I++){let D=k[I];if(c[D]&2)if((ee.get(D)??0)===Q){c[D]&=-3,F--,c[D]&1||(c[D]|=1,d[x++]=D,O++);let ce=t.GetPathByUid(D);n.path=ce,n.type=3,h.level=Q,r.emit(13,n);}else k[C++]=D;}V=C;continue}else {for(let K=0;K<A;K++){let C=v[K];if(c[C]&4){c[C]|=16;let I=t.GetPathByUid(C);n.path=I,n.type=6,r.emit(12,n);}}A=0,G=0;for(let K=0;K<V;K++){let C=k[K];if(c[C]&2){c[C]|=16;let I=t.GetPathByUid(C);n.path=I,n.type=6,r.emit(12,n);}}V=0,F=0;break}}O>0&&Y>=40&&(n.type=2,r.emit(4,n));break}}finally{S=false;let B=Y+F+O,Z=y.inFlightCount||0;if(!(a===M)){n.token=M,r.emit(3,n);return}if(o.requestUpdate(),B===0&&Z===0){if(l.get(b)===M&&!Be){Be=true,n.type=1,r.emit(2,n),y.resetCounters(),_.fill(null);let K=performance.now();ye=-1,l.delete(b),n.token=M,n.duration=(K-Oe).toFixed(2.1)+"ms",r.emit(1,n),Promise.resolve().then(()=>{r.callOnSuccess();});}}else {let K=B===0&&Z>0?3:1;if(n.type=K,h.nums=Y,h.asyncNums=Z,r.emit(4,n),Z>0&&!ne){ne=true;let C=()=>{a===M&&(y.inFlightCount,y.inFlightCount===0?_e(()=>{y.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 T=new Proxy(n,{get(f,m){let N=m;return Reflect.has(f,m)?Reflect.get(f,m):N in g.state?g.state[N]:N in g?g[N]:o&&N in o?o[N]:Reflect.get(f,m)},set(f,m,N){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 N=m;return Reflect.has(f,m)||l&&N in l||o&&N in o||a.includes(N)?{enumerable:true,configurable:true}:Reflect.getOwnPropertyDescriptor(f,m)}});return s=T,T}};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,N=0,M=0,b=0,S=100,ne=()=>{let d={link:null,impactNode:null,impactUid:-1,hitTargetUids:null,isDirty:false,propose:null};return d.propose={set:(x,O,k=1)=>{d.epoch===b&&O!==d.impactNode.state[x]&&(d.link.count++,(!p[d.impactUid]||p[d.impactUid].length===0)&&(p[d.impactUid]=[],M++),p[d.impactUid].push({key:x,value:O,weight:k}),d.isDirty||(d.hitTargetUids.push(d.impactUid),d.isDirty=true));},update:(x,O,k="add")=>{d.epoch===b&&(d.link.count++,(!p[d.impactUid]||p[d.impactUid].length===0)&&(p[d.impactUid]=[],M++),p[d.impactUid].push({key:x,delta:O,op:k,weight:1}),d.isDirty||(d.hitTargetUids.push(d.impactUid),d.isDirty=true));},patch:(x,O)=>{d.epoch===b&&(d.link.count++,(!p[d.impactUid]||p[d.impactUid].length===0)&&(p[d.impactUid]=[],M++),p[d.impactUid].push({key:x,patch:O,weight:1}),d.isDirty||(d.hitTargetUids.push(d.impactUid),d.isDirty=true));}},d},H=Array.from({length:S},ne),$=S-1,Y=(d,x,O)=>{let k=x.path,V=d.impact;if(d.count>=s){l.emit("entangle:blocked",{observer:k,target:V,count:d.count});return}let F=n(V),v=d.isProxy?x.proxy:x,A=d.isProxy?F.proxy:F;if(d.filter&&!d.filter(v,A))return;let G,_=true;$<0?(G=ne(),_=false):G=H[$--];let u=b;G.epoch=u,G.isDirty=false,G.link=d,G.impactNode=F,G.impactUid=F.uid,G.hitTargetUids=O;let y=d.emit(v,A,G.propose);if(y instanceof Promise||y&&typeof y.then=="function")return N++,(async()=>{try{await y;}catch(P){l.emit("node:error",{path:k,error:P}),l.onError({path:k,error:P});}finally{u===b&&N--,_&&(H[++$]=G);}})();_&&(H[++$]=G);};return {useEntangle:d=>{let{cause:x,impact:O,via:k,emit:V,filter:F,isProxy:v}=d;if(!k||k.length===0){l.emit("entangle:warn",{path:x,type:"no_keys"});return}let G=n(x).uid;a[G]||(a[G]=new Map);let _=a[G];for(let u=0;u<k.length;u++){let y=k[u];_.has(y)||_.set(y,[]),_.get(y).push({impact:O,emit:V,filter:F,count:0,isProxy:!!v});}},updateEntangleLevel:()=>{let d=m();h.clear();for(let x=0;x<a.length;x++)if(a[x]!==void 0){let O=d.get(x)||0;h.add(O);}},Turnstile:{volatileLevels:h,get inFlightCount(){return N},get hasPendingGhosts(){return M>0},nextEpoch:()=>{b++,N=0,M=0,p.length=0;},hasObserver:d=>a[d]!==void 0,getTriggerKeys:d=>{let x=a[d];return x?Array.from(x.keys()):[]},receiveGhosts:(d,x=[])=>{let O=d.uid,k=[],V=a[O];if(!V||x.length===0)return k;let F=[];for(let u=0;u<x.length;u++){let y=V.get(x[u]);if(y)for(let P=0;P<y.length;P++)F.push(y[P]);}let v=0,A=false,G=null;for(;v<F.length;v++){if(e.shouldYield()){A=true;break}let u=Y(F[v],d,k);if(u){G=u,A=true,v++;break}}let _=()=>{if(k.length<=1)return k;let u=[],y=Object.create(null);for(let P=0;P<k.length;P++){let W=k[P];y[W]||(y[W]=true,u.push(W));}return u};return A?(async()=>{for(G&&await G,e.shouldYield()&&await e.yieldToMain();v<F.length;){let u=[],y=Math.min(v+S,F.length);for(;v<y;v++){let P=Y(F[v],d,k);P&&u.push(P);}u.length>0&&await Promise.all(u.map(async P=>{await P,e.shouldYield()&&await e.yieldToMain();})),e.shouldYield()&&await e.yieldToMain();}return _()})():_()},resolveGhosts:d=>{let x=d.uid,O=p[x];if(!O||O.length===0)return [];let k=[],V=Object.create(null);for(let F=0;F<O.length;F++){let v=O[F];V[v.key]||(V[v.key]=[]),V[v.key].push(v);}for(let F in V){let v=V[F],A=d.state[F],G,_=-1/0,u=false;for(let y=0;y<v.length;y++){let P=v[y];if(P.patch!==void 0&&(A=P.patch(A)),P.value!==void 0){let W=P.weight??1;W>=_&&(_=W,G=P.value,u=true);}}u&&(A=G);for(let y=0;y<v.length;y++){let P=v[y];if(P.delta!==void 0)switch(P.op||"add"){case "add":A=(typeof A=="number"?A:0)+P.delta;break;case "remove":A=Array.isArray(A)?A.filter(q=>q!==P.delta):A;break;case "intersect":A=Array.isArray(A)?A.filter(q=>P.delta.includes(q)):P.delta;break;case "union":{let q=Array.isArray(A)?A:[],re=Array.isArray(P.delta)?P.delta:[P.delta];A=[...new Set([...q,...re])];break}case "merge":{let q=typeof A=="object"&&A!==null&&!Array.isArray(A)?A:{},re=typeof P.delta=="object"&&P.delta!==null&&!Array.isArray(P.delta)?P.delta:{};A={...q,...re};break}}}Object.is(d.state[F],A)||(d.state[F]=A,k.push(F));}return p[x]=[],M--,k.length>0?k:[]},resetCounters:()=>{for(let d=0;d<a.length;d++){let x=a[d];if(x)for(let O of x.values())for(let k=0;k<O.length;k++)O[k].count=0;}}}}};function ot(g,e,t,r,o){let i=rt(),l=0,s=new Map,a=[],p=[],h=[],n=[],T=false,f=new Set,N=async()=>{let u=Array.from(f);if(f.clear(),"signalTrigger"in o&&typeof o.signalTrigger=="function")for(let y of u){let P=d(y);o.signalTrigger(P.dirtySignal);}else "emit"in o&&o.emit(u);},M=()=>{T||(T=true,requestAnimationFrame(()=>{try{for(;f.size>0;)N();}finally{T=false;}}));},{useEntangle:b,updateEntangleLevel:S,Turnstile:ne}=at({useEntangleStep:g.useEntangleStep},i,e.GetUidToLevelMap,L,d,x,{emit:r.emit,onError:r.callOnError}),{TaskRunner:H,CancelTask:$}=st({useGreedy:g.useGreedy},e,{GetNodeByPath:L,GetNodeByUid:d,GetPathByUid:x,GetBucket:V,GetMaxUid:F,Turnstile:ne},r,{requestUpdate:M,flushPathSet:f},i),Y=u=>{throw new Error(`[MeshFlow] Duplicate Path: ${u}`)},c=u=>{s.has(u.path)&&Y(String(u.path));let y=++l,P={path:u.path,getNode:re=>L(re)},W=(re,se="value")=>{let Me=re({...P}),me=L(u.path);if(!Object.is(me.state[se],Me)){if(t.createHistoryAction&&t.pushIntoHistory){let Re=t.createHistoryAction([{path:u.path,value:me.state[se]},{path:u.path,value:Me}],ye=>{let ee=L(ye.path);ee.state[se]=ye.value,v(ye.path);});t.pushIntoHistory(Re);}me.state[se]=Me,v(u.path);}},q=He({uid:y,type:u.type,path:u.path,state:u.state,meta:u.meta,nodeBucket:{},dirtySignal:"signalCreator"in o?o.signalCreator():void 0,notifyKeys:u.notifyKeys,dependOn:W});return s.set(q.path,y),h[y]=q.path,a[y]=q,q},U=u=>{s.has(u.path)&&Y(String(u.path));let y=++l,P=He({uid:y,type:u.type,path:u.path,state:{},meta:u,nodeBucket:{},children:u.children});return s.set(P.path,y),p[y]=P,P};function L(u){let y=s.get(u),P=a[y];if(!P)throw Error("Wrong id");return P}function d(u){let y=a[u];if(!y)throw Error("Wrong id");return y}function x(u){return h[u]}function O(u){let y=s.get(u);return p[y]}function k(u){return n.push(u)-1}function V(u){let y=n[u];if(!y)throw Error("Wrong id");return y}function F(){return l}let v=u=>{let y=L(u);if(!y)throw Error("Wrong id");f.add(y.uid),M();let P=e.GetNextDependency(y.uid);A(y.uid,P);};function A(u,y){H(u,y);}return {registerNode:c,registerGroupNode:U,GetNodeByPath:L,GetGroupByPath:O,notify:v,notifyAll:async()=>{Promise.resolve().then(async()=>{let u=e.GetDependencyOrder();if(!u||u.length===0)return;let y=u[0];try{H(null,y);}catch(P){throw r.callOnError(P),P}finally{M();}});},batchNotify:u=>{if(!u||u.length===0)return;if(t.createHistoryAction&&t.pushIntoHistory){let P=t.createHistoryAction([u.map(W=>({path:W.path,key:W.key,value:L(W.path).state[W.key]})),u.map(W=>({path:W.path,key:W.key,value:W.value}))],W=>{let q=new Set;W.forEach(re=>{let se=L(re.path);se.state[re.key]=re.value,f.add(re.path),q.add(re.uid);}),M(),q.size>0&&H(null,Array.from(q));});t.pushIntoHistory(P);}let y=new Set;u.forEach(P=>{let W=L(P.path);W.state[P.key]=P.value,f.add(W.uid),y.add(W.uid);}),M(),y.size>0&&H(null,Array.from(y));},useEntangle:b,updateEntangleLevel:S,SetBucket:k,GetBucket:V,CancelTask:$,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=[],T=[],f=[],m=new Map,{GetNextDependency:M,GetPrevDependency:b,GetAllPrevDependency:S,GetAllNextDependency:ne,rebuildDirectDependencyMaps:H}=Xe(()=>s,()=>p,()=>T,()=>n),$={},Y={};if(e.modules.useHistory){let w=e.modules.useHistory,j;w.isMeshModuleInited?j=w:j=w();let{Undo:B,Redo:Z,PushIntoHistory:Q,CreateHistoryAction:K,updateUndoSize:C,updateRedoSize:I}=j();$.pushIntoHistory=Q,$.createHistoryAction=K,Y={Undo:B,Redo:Z,updateUndoSize:C,updateRedoSize:I};}let c=!!e.modules.useMeshRenderGate,U={};if(c){let w=e.modules.useMeshRenderGate.isMeshModuleInited,j=e.modules.useMeshRenderGate;U=(w?j:j())(()=>se);}let{onError:L,callOnError:d}=Je(),{onSuccess:x,callOnSuccess:O}=et(),{onStart:k,callOnStart:V}=nt(),{emit:F,usePlugin:v,destroyPlugin:A}=tt(),{SetTrace:G,useTrace:_}=Qe(),u=_();v(u);let y=c?{...U}:{...e.UITrigger},P=ot({useGreedy:e.config.useGreedy,useEntangleStep:e.config.useEntangleStep||100},{GetDependencyOrder:()=>f,GetAllNextDependency:ne,GetNextDependency:M,GetPrevDependency:b,GetAllPrevDependency:S,GetUidToLevelMap:()=>m},$,{callOnError:d,callOnSuccess:O,callOnStart:V,emit:F},y),{SetBucket:W,GetBucket:q,GetGroupByPath:re,GetNodeByPath:se,notifyAll:Me,useEntangle:me,updateEntangleLevel:Re,CancelTask:ye}=P;c&&U.init();let ee={};if(e.modules.useInternalForm){let{uiSchema:w,GetFormData:j}=e.modules.useInternalForm(P,g);ee={uiSchema:w,GetFormData:j};}let ie={};if(e.modules.useSchemaValidators){let{SetValidators:w}=e.modules.useSchemaValidators(se);ie={SetValidators:w};}let{SetRule:xe,SetRules:Pe}=ze(se,W,q,s,p,a,h,l),{SetStrategy:Ge}=qe(se,q),we=Ze(s,l),Ie=()=>{let w=we();f=w.steps,m=w.levelMap,Ee();},Ee=()=>{o&&(Re(),o=false);},Ce=()=>{i||(i=true,Promise.resolve().then(Ee).finally(()=>{i=false;}));},Oe=()=>{r||(r=true,Promise.resolve().then(()=>{if(Ie(),t){let{directNextMap:w,directPrevMap:j}=H(f.flat());n=w,T=j;}}).finally(()=>{r=false,t=false;}));};return {SetRule:(w,j,B,Z)=>{xe(w,j,B,Z),t=true,Oe();},SetRules:(w,j,B,Z)=>{Pe(w,j,B,Z),t=true,Oe();},SetStrategy:Ge,useEntangle:w=>{me(w),o=true,Ce();},SetTrace:G,usePlugin:v,SetValue:(w,j,B)=>{Ee(),se(w).dependOn(()=>B,j);},GetValue:(w,j="value")=>se(w).proxy[j],SetValues:w=>{Ee(),P.batchNotify(w);},GetGroupByPath:re,notifyAll:async()=>{Ie(),await Me();},GetAllDependency:()=>s,GetDependencyOrder:()=>f,historyExports:Y,formExports:ee,validatorExports:ie,batchRenderExport:U,hasRenderGate:()=>c,onError:L,onSuccess:x,onStart:k,scheduler:P,destroyPlugin:A,CancelTask:ye}}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:T,notifyAll:f,SetTrace:m,GetAllDependency:N,GetDependencyOrder:M,historyExports:b,formExports:S,validatorExports:ne,batchRenderExport:H,hasRenderGate:$,onError:Y,onSuccess:c,onStart:U,scheduler:L,destroyPlugin:d,CancelTask:x}=r,O={config:{SetRule:o,SetRules:i,SetStrategy:s,notifyAll:f,SetTrace:m,usePlugin:h,hasRenderGate:$,useEntangle:n},data:{SetValue:a,GetValue:p,SetValues:l,GetGroupByPath:T},dependency:{GetAllDependency:N,GetDependencyOrder:M},hooks:{onError:Y,onSuccess:c,onStart:U}},k=(v,A,G)=>{!A||typeof A!="object"||Object.keys(A).forEach(_=>{let u=A[_];if(typeof u=="object"&&u!==null)v[_]=v[_]||{},k(v[_],u,G);else if(typeof u=="function"){let y=_;if(y==="useMeshRenderGate")y="render";else if(y.startsWith("use")){let P=y.slice(3);y=P.charAt(0).toLowerCase()+P.slice(1);}_==="useHistory"&&G.exports.history&&Object.keys(G.exports.history).length>0?v[y]=G.exports.history:_==="useInternalForm"&&G.exports.form&&Object.keys(G.exports.form).length>0?v[y]=G.exports.form:_==="useSchemaValidators"&&G.exports.validator&&Object.keys(G.exports.validator).length>0?v[y]=G.exports.validator:_==="useMeshRenderGate"&&G.exports.render?v[y]=G.exports.render:v[y]=u(G.scheduler,G.Schema);}});},V={...O,destroyPlugin:d,CancelTask:x,modules:{}},F=t.modules;return F&&k(V.modules,F,{scheduler:L,Schema:e,exports:{history:b,form:S,validator:ne,render:H}}),ve.set(g,V),V}catch(r){throw Error(r)}},Sn=()=>(g,e,t)=>ut(g,e,t),Mn=g=>{let e=ve.get(g);if(!e)throw Error("Engine not found.");return e},Tn=g=>{let e=ve.get(g);e.destroyPlugin(),e.CancelTask(),ve.delete(g);};export{Ve as DefaultStrategy,Fe as MeshFlowEventsName,Ue as TriggerCause,Tn as deleteEngine,Mn as useEngine,ut as useMeshFlow,Sn as useMeshFlowDefiner,ot 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.1",
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",