@meshflow/core 0.5.0 → 0.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.d.mts +50 -27
- package/index.d.ts +50 -27
- package/index.js +1 -1
- package/index.mjs +1 -1
- package/package.json +1 -1
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
|
|
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
|
|
17
|
+
readonly path: infer N;
|
|
18
18
|
} ? N extends string ? N extends "" ? Node extends {
|
|
19
19
|
readonly children: infer C;
|
|
20
20
|
} ? InferLeafPath<C, Prefix> : never : (Node extends {
|
|
@@ -212,13 +212,13 @@ interface MeshFlowTaskNode<P extends MeshPath = MeshPath, V = any, NM = any> {
|
|
|
212
212
|
uid: number;
|
|
213
213
|
type: string;
|
|
214
214
|
state: V;
|
|
215
|
-
nodeBucket: Record<
|
|
216
|
-
notifyKeys: Set<
|
|
215
|
+
nodeBucket: Record<SuggestKey<NM>, number>;
|
|
216
|
+
notifyKeys: Set<SuggestKey<NM>>;
|
|
217
217
|
dirtySignal: any;
|
|
218
218
|
proxy: MeshNodeProxy<MeshFlowTaskNode<P, V, NM>, V, NM>;
|
|
219
219
|
calledBy: TriggerCause;
|
|
220
220
|
meta: NM;
|
|
221
|
-
dependOn: (cb: (val: V) => V, key?:
|
|
221
|
+
dependOn: (cb: (val: V) => V, key?: SuggestKey<NM>) => void;
|
|
222
222
|
createView: <E extends Record<string, any> = {}>(extraProps?: E) => MeshNodeProxy<MeshFlowTaskNode<P, V, NM>, V, NM, E>;
|
|
223
223
|
}
|
|
224
224
|
/**
|
|
@@ -269,7 +269,7 @@ type InternalKeys = 'path' | 'uid' | 'type' | 'meta' | 'state';
|
|
|
269
269
|
* @typeParam TKeys - 当前节点关联的键集合
|
|
270
270
|
* @params logic - 桶计算的逻辑块,一个桶里面可以装多个逻辑块,根据策略进行计算,逻辑块入参参考{}
|
|
271
271
|
*/
|
|
272
|
-
interface SetRuleOptions<NM, TKeys extends
|
|
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<
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
|
646
|
+
SetRule: <K extends SuggestKey<NM>, TKeys extends SuggestKey<NM> = SuggestKey<NM>>(outDegreePath: P, inDegreePath: P, key: K, options: SetRuleOptions<NM, TKeys>) => void;
|
|
638
647
|
SetRules: <TKeys extends KeysOfUnion<NM>>(outDegreePaths: P[], inDegreePath: P, key: KeysOfUnion<NM> | (string & {}), options: SetRuleOptions<NM, TKeys>) => void;
|
|
639
648
|
SetStrategy: (path: P, key: KeysOfUnion<NM>, strategy: DefaultStrategy) => void;
|
|
640
|
-
useEntangle: (config: EntangleArgType<P>) => void;
|
|
649
|
+
useEntangle: <State = any>(config: EntangleArgType<P, State, NM>) => void;
|
|
641
650
|
SetTrace: (myPath: P, onUpdate: (newStatus: "idle" | "pending" | "calculating" | "calculated" | "error" | "canceled") => void) => {
|
|
642
651
|
cancel: () => void;
|
|
643
652
|
};
|
|
@@ -646,11 +655,11 @@ declare function useEngineInstance<T, P extends MeshPath, S = any, M extends Rec
|
|
|
646
655
|
on: (event: MeshEventName, cb: Function) => () => boolean | undefined;
|
|
647
656
|
}) => void;
|
|
648
657
|
}) => () => void;
|
|
649
|
-
SetValue: (path: P, key:
|
|
658
|
+
SetValue: (path: P, key: SuggestKey<NM>, value: any) => void;
|
|
650
659
|
GetValue: (path: P, key?: string) => any;
|
|
651
660
|
SetValues: (updates: {
|
|
652
661
|
path: P;
|
|
653
|
-
key:
|
|
662
|
+
key: SuggestKey<NM>;
|
|
654
663
|
value: any;
|
|
655
664
|
}[]) => void;
|
|
656
665
|
GetGroupByPath: (path: MeshPath) => MeshFlowGroupNode<MeshPath>;
|
|
@@ -683,7 +692,7 @@ declare function useEngineInstance<T, P extends MeshPath, S = any, M extends Rec
|
|
|
683
692
|
notifyAll: () => Promise<void>;
|
|
684
693
|
batchNotify: (updates: {
|
|
685
694
|
path: P;
|
|
686
|
-
key:
|
|
695
|
+
key: SuggestKey<NM>;
|
|
687
696
|
value: any;
|
|
688
697
|
}[]) => void;
|
|
689
698
|
useEntangle: (config: EntangleArgType<P>) => void;
|
|
@@ -691,11 +700,13 @@ declare function useEngineInstance<T, P extends MeshPath, S = any, M extends Rec
|
|
|
691
700
|
SetBucket: (newBucket: SchemaBucket<P>) => number;
|
|
692
701
|
GetBucket: (bucketId: number) => SchemaBucket<P>;
|
|
693
702
|
CancelTask: () => void;
|
|
703
|
+
stageValueFn: (uid: number, key: SuggestKey<NM>, value: any) => void;
|
|
694
704
|
UITrigger: any;
|
|
695
705
|
UidToNodeMap: MeshFlowTaskNode<P, any, NM>[];
|
|
696
706
|
};
|
|
697
707
|
destroyPlugin: () => void;
|
|
698
708
|
CancelTask: () => void;
|
|
709
|
+
StageValue: (path: P, key: SuggestKey<NM>, value: any) => void;
|
|
699
710
|
};
|
|
700
711
|
|
|
701
712
|
/**
|
|
@@ -732,7 +743,7 @@ B extends Record<string, any> = StandardUITrigger<T>, NM = any>(config: {
|
|
|
732
743
|
notifyAll: () => Promise<void>;
|
|
733
744
|
batchNotify: (updates: {
|
|
734
745
|
path: P;
|
|
735
|
-
key:
|
|
746
|
+
key: SuggestKey<NM>;
|
|
736
747
|
value: any;
|
|
737
748
|
}[]) => void;
|
|
738
749
|
useEntangle: (config: EntangleArgType<P>) => void;
|
|
@@ -740,6 +751,7 @@ B extends Record<string, any> = StandardUITrigger<T>, NM = any>(config: {
|
|
|
740
751
|
SetBucket: (newBucket: SchemaBucket<P>) => number;
|
|
741
752
|
GetBucket: (bucketId: number) => SchemaBucket<P>;
|
|
742
753
|
CancelTask: () => void;
|
|
754
|
+
stageValueFn: (uid: number, key: SuggestKey<NM>, value: any) => void;
|
|
743
755
|
UITrigger: B;
|
|
744
756
|
UidToNodeMap: MeshFlowTaskNode<P, any, NM>[];
|
|
745
757
|
};
|
|
@@ -765,6 +777,9 @@ type BaseEngine<T> = {
|
|
|
765
777
|
GetGroupByPath: T extends {
|
|
766
778
|
GetGroupByPath: infer F;
|
|
767
779
|
} ? F : never;
|
|
780
|
+
StageValue: T extends {
|
|
781
|
+
StageValue: infer F;
|
|
782
|
+
} ? F : never;
|
|
768
783
|
};
|
|
769
784
|
config: {
|
|
770
785
|
SetRule: T extends {
|
|
@@ -837,6 +852,12 @@ type EngineModules<M extends Record<string, any>, P extends MeshPath> = {
|
|
|
837
852
|
type Engine<T, M extends Record<string, any>, P extends MeshPath> = BaseEngine<T> & {
|
|
838
853
|
modules: EngineModules<M, P>;
|
|
839
854
|
};
|
|
855
|
+
type StripReadonly<T> = T extends Function ? T : T extends readonly any[] ? {
|
|
856
|
+
-readonly [K in keyof T]: StripReadonly<T[K]>;
|
|
857
|
+
} : T extends object ? {
|
|
858
|
+
-readonly [K in keyof T]: StripReadonly<T[K]>;
|
|
859
|
+
} : T;
|
|
860
|
+
type NormalizeSchema<T> = T extends readonly any[] ? (T["length"] extends 0 ? Record<string, any> : StripReadonly<T[0]>) : StripReadonly<T>;
|
|
840
861
|
/**
|
|
841
862
|
* 初始化并获取 MeshFlow 引擎实例
|
|
842
863
|
* * @description
|
|
@@ -848,8 +869,8 @@ type Engine<T, M extends Record<string, any>, P extends MeshPath> = BaseEngine<T
|
|
|
848
869
|
* @param Schema 类型定义模板(仅用于 TS 类型约束,不参与运行逻辑),注册节点通过模块的方式进行
|
|
849
870
|
* @param options 引擎配置项与扩展模块 {@link MeshFlowOptions}
|
|
850
871
|
*/
|
|
851
|
-
declare const useMeshFlow: <const S extends Record<string, any> | any[], T, //UITrigger的类型
|
|
852
|
-
M extends Record<string, any>, NM extends Record<string, any> = InferLeafType<S>, P extends MeshPath = [InferLeafPath<S>] extends [never] ? MeshPath : InferLeafPath<S> | (string & {})>(id: MeshPath, Schema: S, options: {
|
|
872
|
+
declare const useMeshFlow: <const S extends Record<string, any> | readonly Record<string, any>[], T, //UITrigger的类型
|
|
873
|
+
M extends Record<string, any>, NM extends Record<string, any> = IsNever<NormalizeSchema<S>> extends true ? Record<KeysOfUnion<NormalizeSchema<S>>, any> : InferLeafType<S>, P extends MeshPath = [InferLeafPath<S>] extends [never] ? MeshPath : InferLeafPath<S> | (string & {})>(id: MeshPath, Schema: S, options: {
|
|
853
874
|
metaType?: NM;
|
|
854
875
|
config?: {
|
|
855
876
|
useGreedy: boolean;
|
|
@@ -861,10 +882,10 @@ M extends Record<string, any>, NM extends Record<string, any> = InferLeafType<S>
|
|
|
861
882
|
signalTrigger: (signal: T) => void;
|
|
862
883
|
};
|
|
863
884
|
}) => Engine<{
|
|
864
|
-
SetRule: <TKeys extends
|
|
865
|
-
SetRules: <
|
|
885
|
+
SetRule: <K extends SuggestKey<NM>, TKeys extends SuggestKey<NM> = SuggestKey<NM>>(outDegreePath: P, inDegreePath: P, key: K, options: SetRuleOptions<NM, TKeys>) => void;
|
|
886
|
+
SetRules: <TKeys_1 extends KeysOfUnion<NM>>(outDegreePaths: P[], inDegreePath: P, key: (string & {}) | KeysOfUnion<NM>, options: SetRuleOptions<NM, TKeys_1>) => void;
|
|
866
887
|
SetStrategy: (path: P, key: KeysOfUnion<NM>, strategy: DefaultStrategy) => void;
|
|
867
|
-
useEntangle: (config: EntangleArgType<P>) => void;
|
|
888
|
+
useEntangle: <State = any>(config: EntangleArgType<P, State, NM>) => void;
|
|
868
889
|
SetTrace: (myPath: P, onUpdate: (newStatus: "idle" | "pending" | "calculating" | "calculated" | "error" | "canceled") => void) => {
|
|
869
890
|
cancel: () => void;
|
|
870
891
|
};
|
|
@@ -873,11 +894,11 @@ M extends Record<string, any>, NM extends Record<string, any> = InferLeafType<S>
|
|
|
873
894
|
on: (event: MeshEventName, cb: Function) => () => boolean | undefined;
|
|
874
895
|
}) => void;
|
|
875
896
|
}) => () => void;
|
|
876
|
-
SetValue: (path: P, key:
|
|
897
|
+
SetValue: (path: P, key: SuggestKey<NM>, value: any) => void;
|
|
877
898
|
GetValue: (path: P, key?: string) => any;
|
|
878
899
|
SetValues: (updates: {
|
|
879
900
|
path: P;
|
|
880
|
-
key:
|
|
901
|
+
key: SuggestKey<NM>;
|
|
881
902
|
value: any;
|
|
882
903
|
}[]) => void;
|
|
883
904
|
GetGroupByPath: (path: MeshPath) => MeshFlowGroupNode<MeshPath>;
|
|
@@ -910,7 +931,7 @@ M extends Record<string, any>, NM extends Record<string, any> = InferLeafType<S>
|
|
|
910
931
|
notifyAll: () => Promise<void>;
|
|
911
932
|
batchNotify: (updates: {
|
|
912
933
|
path: P;
|
|
913
|
-
key:
|
|
934
|
+
key: SuggestKey<NM>;
|
|
914
935
|
value: any;
|
|
915
936
|
}[]) => void;
|
|
916
937
|
useEntangle: (config: EntangleArgType<P>) => void;
|
|
@@ -918,11 +939,13 @@ M extends Record<string, any>, NM extends Record<string, any> = InferLeafType<S>
|
|
|
918
939
|
SetBucket: (newBucket: SchemaBucket<P>) => number;
|
|
919
940
|
GetBucket: (bucketId: number) => SchemaBucket<P>;
|
|
920
941
|
CancelTask: () => void;
|
|
942
|
+
stageValueFn: (uid: number, key: SuggestKey<NM>, value: any) => void;
|
|
921
943
|
UITrigger: any;
|
|
922
944
|
UidToNodeMap: MeshFlowTaskNode<P, any, NM>[];
|
|
923
945
|
};
|
|
924
946
|
destroyPlugin: () => void;
|
|
925
947
|
CancelTask: () => void;
|
|
948
|
+
StageValue: (path: P, key: SuggestKey<NM>, value: any) => void;
|
|
926
949
|
}, M, P>;
|
|
927
950
|
/**
|
|
928
951
|
* 类型工厂:锁定全局路径与元数据类型,生成定制化的实例化函数。
|
package/index.d.ts
CHANGED
|
@@ -6,7 +6,7 @@ type Unwrap<T> = T extends ReadonlyArray<infer U> ? U : T;
|
|
|
6
6
|
* @internal
|
|
7
7
|
* */
|
|
8
8
|
type InferLeafType<T> = Unwrap<T> extends infer Node ? Node extends {
|
|
9
|
-
readonly
|
|
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
|
|
17
|
+
readonly path: infer N;
|
|
18
18
|
} ? N extends string ? N extends "" ? Node extends {
|
|
19
19
|
readonly children: infer C;
|
|
20
20
|
} ? InferLeafPath<C, Prefix> : never : (Node extends {
|
|
@@ -212,13 +212,13 @@ interface MeshFlowTaskNode<P extends MeshPath = MeshPath, V = any, NM = any> {
|
|
|
212
212
|
uid: number;
|
|
213
213
|
type: string;
|
|
214
214
|
state: V;
|
|
215
|
-
nodeBucket: Record<
|
|
216
|
-
notifyKeys: Set<
|
|
215
|
+
nodeBucket: Record<SuggestKey<NM>, number>;
|
|
216
|
+
notifyKeys: Set<SuggestKey<NM>>;
|
|
217
217
|
dirtySignal: any;
|
|
218
218
|
proxy: MeshNodeProxy<MeshFlowTaskNode<P, V, NM>, V, NM>;
|
|
219
219
|
calledBy: TriggerCause;
|
|
220
220
|
meta: NM;
|
|
221
|
-
dependOn: (cb: (val: V) => V, key?:
|
|
221
|
+
dependOn: (cb: (val: V) => V, key?: SuggestKey<NM>) => void;
|
|
222
222
|
createView: <E extends Record<string, any> = {}>(extraProps?: E) => MeshNodeProxy<MeshFlowTaskNode<P, V, NM>, V, NM, E>;
|
|
223
223
|
}
|
|
224
224
|
/**
|
|
@@ -269,7 +269,7 @@ type InternalKeys = 'path' | 'uid' | 'type' | 'meta' | 'state';
|
|
|
269
269
|
* @typeParam TKeys - 当前节点关联的键集合
|
|
270
270
|
* @params logic - 桶计算的逻辑块,一个桶里面可以装多个逻辑块,根据策略进行计算,逻辑块入参参考{}
|
|
271
271
|
*/
|
|
272
|
-
interface SetRuleOptions<NM, TKeys extends
|
|
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<
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
|
646
|
+
SetRule: <K extends SuggestKey<NM>, TKeys extends SuggestKey<NM> = SuggestKey<NM>>(outDegreePath: P, inDegreePath: P, key: K, options: SetRuleOptions<NM, TKeys>) => void;
|
|
638
647
|
SetRules: <TKeys extends KeysOfUnion<NM>>(outDegreePaths: P[], inDegreePath: P, key: KeysOfUnion<NM> | (string & {}), options: SetRuleOptions<NM, TKeys>) => void;
|
|
639
648
|
SetStrategy: (path: P, key: KeysOfUnion<NM>, strategy: DefaultStrategy) => void;
|
|
640
|
-
useEntangle: (config: EntangleArgType<P>) => void;
|
|
649
|
+
useEntangle: <State = any>(config: EntangleArgType<P, State, NM>) => void;
|
|
641
650
|
SetTrace: (myPath: P, onUpdate: (newStatus: "idle" | "pending" | "calculating" | "calculated" | "error" | "canceled") => void) => {
|
|
642
651
|
cancel: () => void;
|
|
643
652
|
};
|
|
@@ -646,11 +655,11 @@ declare function useEngineInstance<T, P extends MeshPath, S = any, M extends Rec
|
|
|
646
655
|
on: (event: MeshEventName, cb: Function) => () => boolean | undefined;
|
|
647
656
|
}) => void;
|
|
648
657
|
}) => () => void;
|
|
649
|
-
SetValue: (path: P, key:
|
|
658
|
+
SetValue: (path: P, key: SuggestKey<NM>, value: any) => void;
|
|
650
659
|
GetValue: (path: P, key?: string) => any;
|
|
651
660
|
SetValues: (updates: {
|
|
652
661
|
path: P;
|
|
653
|
-
key:
|
|
662
|
+
key: SuggestKey<NM>;
|
|
654
663
|
value: any;
|
|
655
664
|
}[]) => void;
|
|
656
665
|
GetGroupByPath: (path: MeshPath) => MeshFlowGroupNode<MeshPath>;
|
|
@@ -683,7 +692,7 @@ declare function useEngineInstance<T, P extends MeshPath, S = any, M extends Rec
|
|
|
683
692
|
notifyAll: () => Promise<void>;
|
|
684
693
|
batchNotify: (updates: {
|
|
685
694
|
path: P;
|
|
686
|
-
key:
|
|
695
|
+
key: SuggestKey<NM>;
|
|
687
696
|
value: any;
|
|
688
697
|
}[]) => void;
|
|
689
698
|
useEntangle: (config: EntangleArgType<P>) => void;
|
|
@@ -691,11 +700,13 @@ declare function useEngineInstance<T, P extends MeshPath, S = any, M extends Rec
|
|
|
691
700
|
SetBucket: (newBucket: SchemaBucket<P>) => number;
|
|
692
701
|
GetBucket: (bucketId: number) => SchemaBucket<P>;
|
|
693
702
|
CancelTask: () => void;
|
|
703
|
+
stageValueFn: (uid: number, key: SuggestKey<NM>, value: any) => void;
|
|
694
704
|
UITrigger: any;
|
|
695
705
|
UidToNodeMap: MeshFlowTaskNode<P, any, NM>[];
|
|
696
706
|
};
|
|
697
707
|
destroyPlugin: () => void;
|
|
698
708
|
CancelTask: () => void;
|
|
709
|
+
StageValue: (path: P, key: SuggestKey<NM>, value: any) => void;
|
|
699
710
|
};
|
|
700
711
|
|
|
701
712
|
/**
|
|
@@ -732,7 +743,7 @@ B extends Record<string, any> = StandardUITrigger<T>, NM = any>(config: {
|
|
|
732
743
|
notifyAll: () => Promise<void>;
|
|
733
744
|
batchNotify: (updates: {
|
|
734
745
|
path: P;
|
|
735
|
-
key:
|
|
746
|
+
key: SuggestKey<NM>;
|
|
736
747
|
value: any;
|
|
737
748
|
}[]) => void;
|
|
738
749
|
useEntangle: (config: EntangleArgType<P>) => void;
|
|
@@ -740,6 +751,7 @@ B extends Record<string, any> = StandardUITrigger<T>, NM = any>(config: {
|
|
|
740
751
|
SetBucket: (newBucket: SchemaBucket<P>) => number;
|
|
741
752
|
GetBucket: (bucketId: number) => SchemaBucket<P>;
|
|
742
753
|
CancelTask: () => void;
|
|
754
|
+
stageValueFn: (uid: number, key: SuggestKey<NM>, value: any) => void;
|
|
743
755
|
UITrigger: B;
|
|
744
756
|
UidToNodeMap: MeshFlowTaskNode<P, any, NM>[];
|
|
745
757
|
};
|
|
@@ -765,6 +777,9 @@ type BaseEngine<T> = {
|
|
|
765
777
|
GetGroupByPath: T extends {
|
|
766
778
|
GetGroupByPath: infer F;
|
|
767
779
|
} ? F : never;
|
|
780
|
+
StageValue: T extends {
|
|
781
|
+
StageValue: infer F;
|
|
782
|
+
} ? F : never;
|
|
768
783
|
};
|
|
769
784
|
config: {
|
|
770
785
|
SetRule: T extends {
|
|
@@ -837,6 +852,12 @@ type EngineModules<M extends Record<string, any>, P extends MeshPath> = {
|
|
|
837
852
|
type Engine<T, M extends Record<string, any>, P extends MeshPath> = BaseEngine<T> & {
|
|
838
853
|
modules: EngineModules<M, P>;
|
|
839
854
|
};
|
|
855
|
+
type StripReadonly<T> = T extends Function ? T : T extends readonly any[] ? {
|
|
856
|
+
-readonly [K in keyof T]: StripReadonly<T[K]>;
|
|
857
|
+
} : T extends object ? {
|
|
858
|
+
-readonly [K in keyof T]: StripReadonly<T[K]>;
|
|
859
|
+
} : T;
|
|
860
|
+
type NormalizeSchema<T> = T extends readonly any[] ? (T["length"] extends 0 ? Record<string, any> : StripReadonly<T[0]>) : StripReadonly<T>;
|
|
840
861
|
/**
|
|
841
862
|
* 初始化并获取 MeshFlow 引擎实例
|
|
842
863
|
* * @description
|
|
@@ -848,8 +869,8 @@ type Engine<T, M extends Record<string, any>, P extends MeshPath> = BaseEngine<T
|
|
|
848
869
|
* @param Schema 类型定义模板(仅用于 TS 类型约束,不参与运行逻辑),注册节点通过模块的方式进行
|
|
849
870
|
* @param options 引擎配置项与扩展模块 {@link MeshFlowOptions}
|
|
850
871
|
*/
|
|
851
|
-
declare const useMeshFlow: <const S extends Record<string, any> | any[], T, //UITrigger的类型
|
|
852
|
-
M extends Record<string, any>, NM extends Record<string, any> = InferLeafType<S>, P extends MeshPath = [InferLeafPath<S>] extends [never] ? MeshPath : InferLeafPath<S> | (string & {})>(id: MeshPath, Schema: S, options: {
|
|
872
|
+
declare const useMeshFlow: <const S extends Record<string, any> | readonly Record<string, any>[], T, //UITrigger的类型
|
|
873
|
+
M extends Record<string, any>, NM extends Record<string, any> = IsNever<NormalizeSchema<S>> extends true ? Record<KeysOfUnion<NormalizeSchema<S>>, any> : InferLeafType<S>, P extends MeshPath = [InferLeafPath<S>] extends [never] ? MeshPath : InferLeafPath<S> | (string & {})>(id: MeshPath, Schema: S, options: {
|
|
853
874
|
metaType?: NM;
|
|
854
875
|
config?: {
|
|
855
876
|
useGreedy: boolean;
|
|
@@ -861,10 +882,10 @@ M extends Record<string, any>, NM extends Record<string, any> = InferLeafType<S>
|
|
|
861
882
|
signalTrigger: (signal: T) => void;
|
|
862
883
|
};
|
|
863
884
|
}) => Engine<{
|
|
864
|
-
SetRule: <TKeys extends
|
|
865
|
-
SetRules: <
|
|
885
|
+
SetRule: <K extends SuggestKey<NM>, TKeys extends SuggestKey<NM> = SuggestKey<NM>>(outDegreePath: P, inDegreePath: P, key: K, options: SetRuleOptions<NM, TKeys>) => void;
|
|
886
|
+
SetRules: <TKeys_1 extends KeysOfUnion<NM>>(outDegreePaths: P[], inDegreePath: P, key: (string & {}) | KeysOfUnion<NM>, options: SetRuleOptions<NM, TKeys_1>) => void;
|
|
866
887
|
SetStrategy: (path: P, key: KeysOfUnion<NM>, strategy: DefaultStrategy) => void;
|
|
867
|
-
useEntangle: (config: EntangleArgType<P>) => void;
|
|
888
|
+
useEntangle: <State = any>(config: EntangleArgType<P, State, NM>) => void;
|
|
868
889
|
SetTrace: (myPath: P, onUpdate: (newStatus: "idle" | "pending" | "calculating" | "calculated" | "error" | "canceled") => void) => {
|
|
869
890
|
cancel: () => void;
|
|
870
891
|
};
|
|
@@ -873,11 +894,11 @@ M extends Record<string, any>, NM extends Record<string, any> = InferLeafType<S>
|
|
|
873
894
|
on: (event: MeshEventName, cb: Function) => () => boolean | undefined;
|
|
874
895
|
}) => void;
|
|
875
896
|
}) => () => void;
|
|
876
|
-
SetValue: (path: P, key:
|
|
897
|
+
SetValue: (path: P, key: SuggestKey<NM>, value: any) => void;
|
|
877
898
|
GetValue: (path: P, key?: string) => any;
|
|
878
899
|
SetValues: (updates: {
|
|
879
900
|
path: P;
|
|
880
|
-
key:
|
|
901
|
+
key: SuggestKey<NM>;
|
|
881
902
|
value: any;
|
|
882
903
|
}[]) => void;
|
|
883
904
|
GetGroupByPath: (path: MeshPath) => MeshFlowGroupNode<MeshPath>;
|
|
@@ -910,7 +931,7 @@ M extends Record<string, any>, NM extends Record<string, any> = InferLeafType<S>
|
|
|
910
931
|
notifyAll: () => Promise<void>;
|
|
911
932
|
batchNotify: (updates: {
|
|
912
933
|
path: P;
|
|
913
|
-
key:
|
|
934
|
+
key: SuggestKey<NM>;
|
|
914
935
|
value: any;
|
|
915
936
|
}[]) => void;
|
|
916
937
|
useEntangle: (config: EntangleArgType<P>) => void;
|
|
@@ -918,11 +939,13 @@ M extends Record<string, any>, NM extends Record<string, any> = InferLeafType<S>
|
|
|
918
939
|
SetBucket: (newBucket: SchemaBucket<P>) => number;
|
|
919
940
|
GetBucket: (bucketId: number) => SchemaBucket<P>;
|
|
920
941
|
CancelTask: () => void;
|
|
942
|
+
stageValueFn: (uid: number, key: SuggestKey<NM>, value: any) => void;
|
|
921
943
|
UITrigger: any;
|
|
922
944
|
UidToNodeMap: MeshFlowTaskNode<P, any, NM>[];
|
|
923
945
|
};
|
|
924
946
|
destroyPlugin: () => void;
|
|
925
947
|
CancelTask: () => void;
|
|
948
|
+
StageValue: (path: P, key: SuggestKey<NM>, value: any) => void;
|
|
926
949
|
}, M, P>;
|
|
927
950
|
/**
|
|
928
951
|
* 类型工厂:锁定全局路径与元数据类型,生成定制化的实例化函数。
|
package/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
'use strict';var Ce=(P=>(P[P.FlowStart=0]="FlowStart",P[P.FlowSuccess=1]="FlowSuccess",P[P.FlowEnd=2]="FlowEnd",P[P.FlowAbort=3]="FlowAbort",P[P.FlowWait=4]="FlowWait",P[P.FlowFire=5]="FlowFire",P[P.NodeStart=6]="NodeStart",P[P.NodeSuccess=7]="NodeSuccess",P[P.NodeProcessing=8]="NodeProcessing",P[P.NodeError=9]="NodeError",P[P.NodePending=10]="NodePending",P[P.NodeRevive=11]="NodeRevive",P[P.NodeIntercept=12]="NodeIntercept",P[P.NodeRelease=13]="NodeRelease",P[P.NodeStagnate=14]="NodeStagnate",P[P.NodeBucketSuccess=15]="NodeBucketSuccess",P[P.EntangleWarn=16]="EntangleWarn",P[P.EntangleBlocked=17]="EntangleBlocked",P))(Ce||{}),Ue=(r=>(r[r.CAUSALITY=0]="CAUSALITY",r[r.INVERSION=1]="INVERSION",r[r.REPERCUSSION=2]="REPERCUSSION",r))(Ue||{});var Ve=(r=>(r.OR="OR",r.PRIORITY="PRIORITY",r.MERGE="MERGE",r))(Ve||{});var Le=class{computedRules=[];getRuleResult(e,t,r){if(e.entityId==="__base__")return e.logic(t);if(!(!e._hasRun||r(e.triggerUids)))return e._lastResult;let i=e.logic(t);return i instanceof Promise?i.then(l=>(e._lastResult=l,e._hasRun=true,l)):(e._lastResult=i,e._hasRun=true,i)}store={OR:(e,t,r)=>{let o,i,l=this.computedRules;for(let s=0;s<l.length;s++){let a=l[s],p=this.getRuleResult(a,e,r);if(p instanceof Promise)return (async()=>{let n=await p;if(a.entityId==="__base__"?i=n:n&&(o=n),typeof o>"u")for(let M=s+1;M<l.length;M++){let f=l[M],m=this.getRuleResult(f,e,r),b=m instanceof Promise?await m:m;if(f.entityId==="__base__"){i=b;continue}if(b){o=f.value;break}}return typeof o>"u"&&(o=i),{res:o,version:t}})();let h=p;if(a.entityId==="__base__"){i=h;continue}if(h){o=a.value;break}}return typeof o>"u"&&(o=i),{res:o,version:t}},PRIORITY:(e,t,r)=>{let o,i=this.computedRules;for(let l=0;l<i.length;l++){let s=i[l],a=this.getRuleResult(s,e,r);if(a instanceof Promise)return (async()=>{let p=await a;if(p!==void 0)return {res:s.value!==void 0?s.value:p,version:t};for(let h=l+1;h<i.length;h++){let n=i[h],M=this.getRuleResult(n,e,r),f=M instanceof Promise?await M:M;if(f!==void 0)return {res:f,version:t}}return {res:void 0,version:t}})();if(a!==void 0)return {res:s.value!==void 0?s.value:a,version:t}}return {res:o,version:t}},MERGE:(e,t,r)=>{let o,i,l=this.computedRules,s=(p,h)=>p===void 0?h:h===void 0?p:Array.isArray(p)&&Array.isArray(h)?[...h,...p]:typeof p=="object"&&typeof h=="object"?{...h,...p}:p;for(let p=0;p<l.length;p++){let h=l[p],n=this.getRuleResult(h,e,r);if(n instanceof Promise)return (async()=>{let f=await n,m=(S,R)=>{if(S.entityId==="__base__")i=s(i,R);else if(R){let P=S.value!==void 0?S.value:R;o=s(o,P);}};m(h,f);for(let S=p+1;S<l.length;S++){let R=l[S],P=this.getRuleResult(R,e,r),te=P instanceof Promise?await P:P;m(R,te);}return {res:s(o,i),version:t}})();let M=n;if(h.entityId==="__base__"){i=s(i,M);continue}if(M){let f=h.value!==void 0?h.value:M;o=s(o,f);}}return {res:s(o,i),version:t}}};CurrentStrategy=()=>{};CurrentStrategyType="PRIORITY";getRules=()=>{};constructor(e){this.getRules=e,this.CurrentStrategy=this.store.PRIORITY,this.updateComputedRules();}updateComputedRules(){let e=this.getRules();this.CurrentStrategyType==="PRIORITY"||this.CurrentStrategyType==="MERGE"?this.computedRules=Array.from(e.values()).map(t=>Array.from(t)).flat().sort((t,r)=>r.priority-t.priority):this.computedRules=Array.from(e.values()).map(t=>Array.from(t)).flat();}setStrategy(e){this.CurrentStrategyType=e,this.CurrentStrategy=this.store[e],this.updateComputedRules();}evaluate(e,t,r){return this.CurrentStrategy(e,t,r)}},Ae=class{path;strategy;contract;rules=new Map;isValue=false;id=0;cache=void 0;pendingPromise=null;version=0;deps=new Map;_forceNotify=false;promiseToken=null;useCache=true;effectArray=[];constructor(e,t,r){let o=()=>this.rules;this.strategy=new Le(o),this.path=r,this.isValue=t==="value",this.contract=this.inferType(e),this.cache=e,this.setRule({priority:0,entityId:"__base__",logic:()=>e});}setUseCache(e){this.useCache=e;}forceNotify(){this._forceNotify=true;}isForceNotify(){return this._forceNotify}setStrategy(e){this.strategy.setStrategy(e);}setDefaultRule(e){let t=new Set;t.add(e),this.rules.set(-1,t);}setRules(e,t){t&&this.updateDeps(t);let r=++this.id,o={...e,entityId:r};for(let i of e.triggerUids)this.rules.has(i)||this.rules.set(i,new Set),this.rules.get(i).add(o);return this.strategy.updateComputedRules(),()=>{for(let i of e.triggerUids){let l=this.rules.get(i);l&&(l.delete(o),l.size===0&&(this.rules.delete(i),this.deps.delete(i)));}this.strategy.updateComputedRules();}}updateDeps(e){for(let[t,r,o]of e){if(r.length==0)continue;let i=this.deps.get(t)||Object.create(null);for(let l of r)i[l]=o[l];this.deps.set(t,i);}}setRule(e,t){if(t&&this.updateDeps(t),typeof e.entityId=="string"){this.setDefaultRule(e);return}let r=++this.id,o={...e,entityId:r};if(e)for(let i of e.triggerUids)this.rules.has(i)||this.rules.set(i,new Set),this.rules.get(i).add(o);return this.strategy.updateComputedRules(),()=>{for(let i of e.triggerUids){let l=this.rules.get(i);l&&(l.delete(o),l.size===0&&(this.rules.delete(i),this.deps.delete(i)));}this.strategy.updateComputedRules();}}setSideEffect(e){this.effectArray.push(e);}getSideEffect(){return [...this.effectArray]}evaluate(e){let t=null;if(e.GetToken&&(t=e.GetToken()),this.pendingPromise&&this.promiseToken!==t&&(this.pendingPromise=null,this.promiseToken=null),this.pendingPromise)return this.pendingPromise;let r=false;if(typeof e.triggerUid=="number"){r=true,this.deps.size==0&&(r=false);for(let[s,a]of this.deps.entries()){let p=e.getStateByUid(s);if(!p){r=false;break}for(let h in a){let n=a[h],M=p[h];if(typeof n=="object"&&n!==null){r=false;break}if(n!==M){r=false;break}}if(!r)break}}if(r&&this.useCache)return this.cache;this.promiseToken=t;let o=++this.version,i=s=>{if(!s||s.length===0)return true;for(let a of s){let p=this.deps.get(a);if(!p)return true;let h=e.getProxyByUid(a);if(!h)return true;for(let n in p){let M=p[n],f=h[n];if(typeof M=="object"&&M!==null||M!==f)return true}}return false},l=this.strategy.evaluate(e,o,i);if(!(l instanceof Promise)){let{res:s,version:a}=l;return this.finalizeSync(s,a,e,t)}return this.pendingPromise=(async()=>{try{let{res:s,version:a}=await l;return this.finalizeSync(s,a,e,t)}catch(s){throw {path:this.path,error:s}}finally{this.promiseToken===t&&(this.pendingPromise=null,this.promiseToken=null);}})(),this.pendingPromise}finalizeSync(e,t,r,o){return o!==this.promiseToken||t<this.version?this.cache:(this.cache=e,this.deps.forEach((i,l)=>{let s=r.getProxyByUid(l);if(!s)return;let a=Object.keys(i);for(let p of a)i[p]=s[p];}),e)}inferType(e){return Array.isArray(e)?"array":typeof e}};var We=(g,e,t)=>{let o=i=>{let l=t.triggerUids.map(p=>{let h=i.getProxyByUid(p);if(t.triggerKeys.length===0)return h;let n={};return t.triggerKeys.forEach(M=>{n[M]=h[M];}),n}),s=Object.create(null);return Object.defineProperty(s,"triggerTargets",{get:()=>l}),Object.defineProperty(s,"affectedTatget",{get:()=>i.getProxyByUid(g)[e]}),t.logic({slot:s})};return {value:t.value,targetUid:g,triggerUids:t.triggerUids,priority:t.priority??10,logic:o}},ze=(g,e,t,r,o,i,l,s)=>{if(!g)throw Error();let a=g,p=(M,f)=>{typeof r[M]>"u"&&(r[M]=[],i[M]=new Set),i[M].add(f),i[M].size>r[M].length&&r[M].push(f),typeof o[f]>"u"&&(o[f]=[],l[f]=new Set),l[f].add(M),l[f].size>o[f].length&&o[f].push(M);};return {SetRule:(M,f,m,b)=>{let S=a(M),R=a(f),P=b.triggerKeys||[],te=s.get(R.uid)||0,_=s.get(S.uid)||0;te+=1,_+=1,s.set(R.uid,te),s.set(S.uid,_);let Z=We(R.uid,m,{...b,triggerUids:[S.uid],triggerKeys:P}),W=[M].map(L=>{let c=a(L);return [c.uid,P,c.proxy]});if(p(S.uid,R.uid),typeof R.nodeBucket[m]=="number"){let L=t(R.nodeBucket[m]);L.setRule(Z,W),b.effect&&L.setSideEffect({fn:b.effect,args:b.effectArgs?b.effectArgs:[m]});}else {let L=R.meta[m],c=new Ae(L,m,f);c.setRule(Z,W),b.effect&&c.setSideEffect({fn:b.effect,args:b.effectArgs?b.effectArgs:[m]}),R.nodeBucket[m]=e(c);}R.state[m]=R.meta[m];let y=t(R.nodeBucket[m]);b.forceNotify&&y.forceNotify(),b.cacheStrategy=="none"&&y.setUseCache(false);},SetRules:(M,f,m,b)=>{let S=a(f),R=s.get(S.uid)||0;R+=1,s.set(S.uid,R);let P=[];for(let y of M){let L=a(y);P.push(L.uid);let c=s.get(L.uid)||0;c+=1,s.set(L.uid,c),p(L.uid,S.uid);}let te=b.triggerKeys||[],_=We(S.uid,m,{...b,triggerUids:P,triggerKeys:te}),Z=M.map(y=>{let L=a(y);return [L.uid,te,L.state]});if(typeof S.nodeBucket[m]=="number"){let y=t(S.nodeBucket[m]);y.setRules(_,Z),b.effect&&y.setSideEffect({fn:b.effect,args:b.effectArgs?b.effectArgs:[m]});}else {let y=S.meta[m],L=new Ae(y,m,f);L.setRules(_,Z),b.effect&&L.setSideEffect({fn:b.effect,args:b.effectArgs?b.effectArgs:[m]}),S.nodeBucket[m]=e(L);}S.state[m]=S.meta[m];let W=t(S.nodeBucket[m]);b.forceNotify&&W.forceNotify(),b.cacheStrategy=="none"&&W.setUseCache(false);}}};var qe=(g,e)=>{let t=g||void 0;if(!t)throw Error();return {SetStrategy:(o,i,l)=>{let s=t(o);e(s.nodeBucket[i]).setStrategy(l);}}};function Qe(){let g=new Map,e=new Map,t=new Set,r=(l,s)=>{g.set(l,s);let a=e.get(l);a&&a(s);};return {SetTrace:(l,s)=>{e.set(l,s);let a=g.get(l)||"idle";return s(a),{cancel:()=>{e.delete(l);}}},useTrace:()=>({apply:s=>{s.on(0,()=>{t.forEach(a=>r(a,"idle")),t.clear(),g.clear();}),s.on(13,({path:a,type:p})=>{(p==1||p==2)&&(t.add(a),r(a,"pending"));}),s.on(10,({path:a})=>{t.add(a),(!g.has(a)||g.get(a)==="idle")&&r(a,"pending");}),s.on(6,({path:a})=>{t.add(a),r(a,"calculating");}),s.on(7,({path:a})=>{r(a,"calculated");}),s.on(12,({path:a,type:p})=>{p==3&&r(a,"calculating"),p==6&&r(a,"idle");}),s.on(14,({path:a})=>{r(a,"pending");}),s.on(9,({path:a})=>r(a,"error"));}})}}function Xe(g,e,t,r){return {GetNextDependency:h=>r()[h]||[],GetPrevDependency:h=>t()[h]||[],GetAllPrevDependency:h=>e()[h]||[],GetAllNextDependency:h=>g()[h]||[],rebuildDirectDependencyMaps:h=>{let n=[],M=[],f=g();for(let m of h){let b=f[m]||[];n[m]=b;for(let S=0;S<b.length;S++){let R=b[S];typeof M[R]>"u"&&(M[R]=[]),M[R].push(m);}}return {directNextMap:n,directPrevMap:M}}}}function Ze(g,e){let t=o=>{let i=[],l=[],s=new Map,a=o.size,p=0,h=0;for(let[n,M]of o)M===0&&l.push(n);if(l.length===0&&a>0)throw Error("Circular dependency detected");for(;l.length>0;){i.push([...l]);let n=[];for(let M of l){p++,s.set(M,h);let f=g[M];if(f)for(let m of f){let b=o.get(m)-1;o.set(m,b),b===0&&n.push(m);}}l=n,h++;}if(p<a)throw Error("Circular dependency detected");return {steps:i,levelMap:s}};return ()=>{let o=new Map;for(let i of e.keys()){let l=g[i]||[];o.has(i)||o.set(i,0);for(let s of l){let a=o.get(s)||0;o.set(s,++a);}}return t(o)}}var Ne=()=>{let g=[];return {on:e=>(g.push(e),()=>{let t=g.indexOf(e);t>-1&&g.splice(t,1);}),call:e=>g.forEach(t=>{t(e);})}};function Je(){let{on:g,call:e}=Ne();return {onError:g,callOnError:e}}function et(){let{on:g,call:e}=Ne();return {onSuccess:g,callOnSuccess:e}}var tt=()=>{let g=new Set,e=new Map,t=new Set,r=(s,a)=>{e.get(s)?.forEach(p=>p(a));},o=(s,a)=>(e.has(s)||e.set(s,new Set),e.get(s).add(a),()=>e.get(s)?.delete(a));return {usePlugin:s=>{let a=new Set,p=(n,M)=>{let f=o(n,M);return a.add(f),f};s.apply({on:p}),g.add(s);let h=()=>{a.forEach(n=>n()),a.clear(),g.delete(s),t.delete(h);};return t.add(h),h},emit:r,destroyPlugin:()=>{t.forEach(s=>s()),t.clear(),e.clear(),g.clear();}}};function nt(){let{on:g,call:e}=Ne();return {onStart:g,callOnStart:e}}var rt=(g={frameQuota:12})=>{let e=performance.now(),t=0,r=false,o=()=>!!navigator?.scheduling?.isInputPending?.({includeContinuous:true});return {getIsFirstFrame:()=>r,reset(){e=performance.now(),t=0,r=true;},shouldYield(){return !r&&(++t&15)!==0?false:!!(performance.now()-e>g.frameQuota||o())},async yieldToMain(){return new Promise(i=>{_e(()=>{e=performance.now(),t=0,r&&(r=false),i();});})}}},_e=g=>{let{port1:e,port2:t}=new MessageChannel;e.onmessage=g,t.postMessage(null);};function st(g,e,t,r,o,i){let l=new Map,s=g.useGreedy,a=null,p=()=>{l.clear();},h={path:null,level:0,targetLevel:0,currentLevel:0,pendingParentsCount:0,active:0,pending:0,blocked:0,nums:0,asyncNums:0},n={path:null,type:0,triggerPath:null,calledBy:0,key:null,value:null,error:null,token:null,duration:null,detail:h};return {TaskRunner:async(f,m)=>{let S=Symbol("token"),R=typeof f=="number"?f:"__NOTIFY_ALL__";l.set(R,S),a=S;let P=false,te=false;i.reset();let _=t.GetMaxUid()+3,Z=new Array(_).fill(0),W=0,y=new Uint8Array(_),L=new Int32Array(_),c=new Int32Array(_),A=new Int32Array(_*2),w=0,E=0,H=new Int32Array(_*2),F=0,O=0,T=new Int32Array(_*2),K=0,U=0;m.forEach(N=>{Z[N]=1,e.GetAllNextDependency(N).forEach(se=>{Z[se]=1;});});let k=new Array(_).fill(null),d=[],u=t.Turnstile,B=new Array(_).fill(null).map(()=>[]),j=new Array(_).fill(null).map(()=>[]),ne=u.volatileLevels.size>0,oe=ne?u.hasObserver:N=>false,re=ne?u.receiveGhosts:()=>[],Se=ne?u.resolveGhosts:()=>[],me=ne?u.getTriggerKeys:()=>[],Re=u?.volatileLevels||new Set,de=-1,J=e.GetUidToLevelMap(),ie=0,Ee=0,Pe=N=>{e.GetAllNextDependency(N).forEach(ae=>{let v=J.get(ae)||0;v>Ee&&(Ee=v);});},Ge=new Set;typeof f=="number"&&(y[f]|=16,Ge.add(f),Pe(f),o.flushPathSet.add(f));let we=typeof f=="number"?[f]:m;i.shouldYield()&&(o.requestUpdate(),await i.yieldToMain());let Ie=we.map(async N=>{if(oe(N)){let se=t.GetNodeByUid(N),ae=me(N);if(ae.length>0){let v=re(se,ae);return v instanceof Promise&&(v=await v),{seed:N,hitTargets:v}}}return {seed:N,hitTargets:[]}});if((await Promise.all(Ie)).forEach(({seed:N,hitTargets:se})=>{if(se&&se.length>0){d.push(...se);let ae=J.get(N)||0;de=Math.max(de,ae);}}),(d.length>0||we.length>1)&&(o.requestUpdate(),await i.yieldToMain(),l.get(R)!==S))return;let Ke=d.length>0;m.forEach(N=>{if(!Ge.has(N))if(Ke){let se=J.get(N)??0;c[N]=se,y[N]&4||(y[N]|=4,T[K++]=N,U++);let ae=t.GetPathByUid(N);n.path=ae,n.type=2,r.emit(14,n);}else y[N]&1||(y[N]|=1,A[w++]=N,E++),Pe(N);}),typeof f=="number"?ie=J.get(f)??0:ie=Math.min(...m.map(N=>J.get(N)??0));let Oe=performance.now(),De=typeof R=="number"?t.GetPathByUid(R):"__NOTIFY_ALL__";n.path=De,n.token=S,r.emit(0,n),r.callOnStart({path:De});let Be=false,Ye=30,je=(N,se)=>{let ae=false,v=false,Y=false,V=t.GetNodeByUid(N),$=t.GetPathByUid(N),q=V.calledBy,I=B[N];I.length=0;let C=oe(N),G=C?me(N):[],D=x=>{C&&(G.length===0||G.includes(x))&&I.push(x);},le=j[N];le.length=0;let ce=false;if(V.calledBy===1){ce=true,ae=true,o.flushPathSet.add(N);let x=k[N];x&&(I.push(...x),k[N]=null);}let ye=(x,X)=>{let ee=J.get(x)??0,pe=t.GetNodeByUid(x),Q=t.GetPathByUid(x),he=(q===1||q===2)&&ee<=de;he&&y[x]&16&&(y[x]&=-17,n.path=Q,n.triggerPath=$,r.emit(11,n));let ue=0;if(!(y[x]&49)){if(y[x]&2)ue=L[x]-1;else {if(ee>ie&&O>Ye){c[x]=ee,y[x]&4||(y[x]|=4,T[K++]=x,U++),n.path=Q,n.type=7,r.emit(12,n);return}let Me=e.GetPrevDependency(x),z=0;for(let ge of Me){if(y[ge]&16)continue;(J.get(ge)??0)>ie&&z++;}ue=z;}if(ue<=0){let Me=(y[x]&1)!==0,z=(y[x]&32)!==0;if(Me||z){n.path=Q,n.type=z?3:3.1,r.emit(12,n);return}y[x]&2&&(y[x]&=-3,O--),he?pe.calledBy=2:pe.calledBy=0,y[x]&1||(y[x]|=1,A[w++]=x,E++),n.path=Q,n.type=X,h.path=$,r.emit(13,n);}else L[x]=ue,y[x]&2||(y[x]|=2,H[F++]=x,O++);}},Te=(x=[])=>{if(l.get(R)!==S)return;if(x.length){let ee={},pe=V.proxy;for(let Q of x){let he=(Q.args||[]).reduce((ue,Me)=>(ue[Me]=pe[Me],ue),{});try{let ue=Q.fn(he);ue&&typeof ue=="object"&&Object.assign(ee,ue);}catch(ue){}}for(let Q in ee)if(Q in V.state)Object.is(V.state[Q],ee[Q])||(V.state[Q]=ee[Q],D(Q),ae=true,(V.notifyKeys.size===0||V.notifyKeys.has(Q))&&(v=true));else throw {error:`wrong effect in ${String(V.path)}`}}ae&&o.flushPathSet.add(N);let X=(ee=[])=>{if(l.get(R)!==S)return;ee&&ee.length>0&&(d.push(...ee),de=Math.max(de,J.get(N)||0)),I.length=0,n.path=$,n.calledBy=V.calledBy,r.emit(7,n),y[N]|=16;let pe=e.GetNextDependency(N);(v||Y)&&(Pe(N),e.GetAllNextDependency(N).forEach(ge=>{Z[ge]=1;}));let Q=t.GetNodeByUid(N),he=J.get(N)??0,ue=Re.has(he)||d.length>0;for(let z of pe){let ge=J.get(z)??0,be=t.GetPathByUid(z);if(ue&&ge>=he){c[z]=ge,y[z]&4||(y[z]|=4,T[K++]=z,U++),n.path=be,n.type=2,r.emit(14,n);continue}if(y[z]&16){n.path=be,n.type=2,r.emit(12,n);continue}if(y[z]&32||(y[z]&1)!==0){n.path=be,n.type=y[z]&32?3:3.1,r.emit(12,n);continue}if(v||Y)ye(z,1);else if(y[z]&2)ye(z,2);else {let lt=J.get(z);c[z]=lt,y[z]&4||(y[z]|=4,T[K++]=z,U++,n.path=be,n.type=1,r.emit(14,n));}}y[N]&32&&(y[N]&=-33,W--),Q.calledBy=0,(()=>{if(!P){P=true;let z=W,ge=E,be=O;n.path=$,n.type=1,h.active=z,h.pending=ge,h.blocked=be,r.emit(5,n),ke();}})();};if(oe(N)&&I.length>0){let ee=re(V,I);ee instanceof Promise?ee.then(X).catch(Fe):X(ee);}else X([]);},Fe=x=>{n.path=$,n.error=x,r.emit(9,n);let X=Symbol("abort");l.set(R,X),w=0,E=0,F=0,O=0,K=0,U=0,y.fill(0),W=0,k.fill(null),r.callOnError(x);},fe=(x,X)=>{x!==V.state[X]&&(V.state[X]=x,ae=true,D(String(X)),n.path=$,n.key=X,n.value=x,n.calledBy=V.calledBy,r.emit(15,n),(V.notifyKeys.size===0||V.notifyKeys.has(X))&&(v=true)),t.GetBucket(V.nodeBucket[X]).isForceNotify()&&(Y=true),(v||Y)&&Pe(N);};n.path=$,n.calledBy=V.calledBy,r.emit(6,n);try{let x=[];for(let X in V.nodeBucket){let ee=t.GetBucket(V.nodeBucket[X]);if(x.push(...ee.getSideEffect()),ce){r.emit(15,{path:$,key:String(X),value:V.state[X],calledBy:V.calledBy}),ee.isForceNotify()&&(Y=!0),(V.notifyKeys.size===0||V.notifyKeys.has(X))&&Pe(N);continue}let pe=ee.evaluate({affectKey:X,triggerUid:se,getProxyByUid:Q=>t.GetNodeByUid(Q).proxy,getStateByUid:Q=>t.GetNodeByUid(Q).state,GetToken:()=>S});if(pe instanceof Promise){let Q=pe.then(he=>{l.get(R)===S&&fe(he,X);});le.push(Q);}else fe(pe,X);}if(le.length>0)return Promise.all(le).then(()=>{Te(x);}).catch(Fe);Te(x);return}catch(x){Fe(x);}},ke=async()=>{if(l.get(R)!==S){P=false;return}P=true;let N=i.getIsFirstFrame(),se=0,ae=()=>30,v=0,Y=ae();try{for(;l.get(R)===S;){let V=v>=Y,$=i.shouldYield();if(V||$){if(v>0&&(se++,(N||se%2===0)&&o.requestUpdate()),await i.yieldToMain(),l.get(R)!==S)break;v=0,N=i.getIsFirstFrame();}if(E>0&&W<40){let q=w,I=0;for(let C=0;C<q;C++){let G=A[C];if((y[G]&1)===0)continue;if(W>=40||v>=Y||i.shouldYield()){for(let fe=C;fe<w;fe++){let x=A[fe];y[x]&1&&(A[I++]=x);}w=I,E=I;break}let D=t.GetNodeByUid(G),le=t.GetPathByUid(G),ce=J.get(G)??0,ye=e.GetPrevDependency(G),Te=ye.length>1;if((!s||Te)&&ce>ie){y[G]&=-2,E--;let fe=ye.filter(x=>Z[x]===1&&(y[x]&16)===0).length;L[G]=fe||0,y[G]&2||(y[G]|=2,H[F++]=G,O++),n.path=le,n.type=fe>0?4:5,h.targetLevel=ce,h.currentLevel=ie,h.pendingParentsCount=fe,r.emit(12,n);continue}y[G]&=-2,E--,(y[G]&32)===0&&(y[G]|=32,W++),n.path=le,n.calledBy=D.calledBy,r.emit(8,n),je(G,f),v++;}if(w>q){for(let C=q;C<w;C++){let G=A[C];y[G]&1&&(A[I++]=G);}w=I,E=w;}else w=I;if(E>0&&W<40)continue}if(v<Y&&s&&O>0&&W<40){let q=!1,I=0,C=0;for(let G=0;G<F;G++){let D=H[G];if((y[D]&2)===0)continue;if(L[D]<=0&&I<Y){let ce=J.get(D)??0,ye=e.GetPrevDependency(D);if(ce<=ie||ye.length<=1){y[D]&=-3,O--,y[D]&1||(y[D]|=1,A[w++]=D,E++),I++,q=!0;let Te=t.GetPathByUid(D);n.path=Te,n.type=4,r.emit(13,n);continue}}H[C++]=D;}if(F=C,I>0)continue;if(q){if(i.shouldYield()&&(await i.yieldToMain(),l.get(R)!==S))break;continue}}if(W===0&&E===0){if(u.inFlightCount>0)break;if(d.length>0){let I=!1,C=ie,G=Array.from(new Set(d));d.length=0;for(let D of G){let le=t.GetNodeByUid(D),ce=Se(le);if(ce&&ce.length>0){I=!0,le.calledBy=1,k[D]=ce,y[D]&=-17,y[D]&2&&(y[D]&=-3,O--),y[D]&1||(y[D]|=1,A[w++]=D,E++);let ye=J.get(le.uid)??0;ye<C&&(C=ye),Pe(le.uid),o.flushPathSet.add(le.uid);}}if(I){if(C<ie&&(ie=C),o.requestUpdate(),i.shouldYield()&&(await i.yieldToMain(),l.get(R)!==S))break;continue}}let q=1/0;for(let I=0;I<K;I++){let C=T[I];if(y[C]&4){let G=c[C];G<q&&(q=G);}}for(let I=0;I<F;I++){let C=H[I];if(y[C]&2){let G=J.get(C)??0;G>ie&&G<q&&(q=G);}}if(q!==1/0&&q<=Ee){ie=q;let I=0;for(let G=0;G<K;G++){let D=T[G];y[D]&4&&(c[D]===q?(y[D]&=-5,U--,y[D]&1||(y[D]|=1,A[w++]=D,E++)):T[I++]=D);}K=I;let C=0;for(let G=0;G<F;G++){let D=H[G];if(y[D]&2)if((J.get(D)??0)===q){y[D]&=-3,O--,y[D]&1||(y[D]|=1,A[w++]=D,E++);let ce=t.GetPathByUid(D);n.path=ce,n.type=3,h.level=q,r.emit(13,n);}else H[C++]=D;}F=C;continue}else {for(let I=0;I<K;I++){let C=T[I];if(y[C]&4){y[C]|=16;let G=t.GetPathByUid(C);n.path=G,n.type=6,r.emit(12,n);}}K=0,U=0;for(let I=0;I<F;I++){let C=H[I];if(y[C]&2){y[C]|=16;let G=t.GetPathByUid(C);n.path=G,n.type=6,r.emit(12,n);}}F=0,O=0;break}}E>0&&W>=40&&(n.type=2,r.emit(4,n));break}}finally{P=false;let V=W+O+E,$=u.inFlightCount||0;if(!(a===S)){n.token=S,r.emit(3,n);return}if(o.requestUpdate(),V===0&&$===0){if(l.get(R)===S&&!Be){Be=true,n.type=1,r.emit(2,n),u.resetCounters(),k.fill(null);let I=performance.now();de=-1,l.delete(R),n.token=S,n.duration=(I-Oe).toFixed(2.1)+"ms",r.emit(1,n),Promise.resolve().then(()=>{r.callOnSuccess();});}}else {let I=V===0&&$>0?3:1;if(n.type=I,h.nums=W,h.asyncNums=$,r.emit(4,n),$>0&&!te){te=true;let C=()=>{a===S&&(u.inFlightCount,u.inFlightCount===0?_e(()=>{u.inFlightCount===0?ke():requestAnimationFrame(C);}):requestAnimationFrame(C));};requestAnimationFrame(C);}}}};ke();},CancelTask:p}}function He(g){let{path:e,uid:t,type:r,meta:o,dirtySignal:i,state:l}=g,s=null,a=["path","uid","type","dependOn","nodeBucket"],h={path:e,uid:t,type:r,meta:o,dirtySignal:i,createView:(n={})=>{if(s&&Object.keys(n).length===0)return s;let M=new Proxy(n,{get(f,m){let b=m;return Reflect.has(f,m)?Reflect.get(f,m):b in g.state?g.state[b]:b in g?g[b]:o&&b in o?o[b]:Reflect.get(f,m)},set(f,m,b){return false},ownKeys(f){let m=new Set([...Reflect.ownKeys(f),...Object.keys(l||{}),...Object.keys(o||{}),...a]);return Array.from(m)},getOwnPropertyDescriptor(f,m){let b=m;return Reflect.has(f,m)||l&&b in l||o&&b in o||a.includes(b)?{enumerable:true,configurable:true}:Reflect.getOwnPropertyDescriptor(f,m)}});return s=M,M}};return "children"in g?{...h,children:g.children}:{...h,state:g.state,nodeBucket:g.nodeBucket,notifyKeys:g.notifyKeys,dependOn:g.dependOn,calledBy:0,get proxy(){return s}}}var at=(g,e,t,r,o,i,l)=>{let s=g.useEntangleStep,a=[],p=[],h=new Set,n=r,m=t,b=0,S=0,R=100,P=()=>{let c={link:null,impactNode:null,impactUid:-1,hitTargetUids:null,isDirty:false,propose:null};return c.propose={set:(A,w,E=1)=>{w!==c.impactNode.state[A]&&(c.link.count++,(!p[c.impactUid]||p[c.impactUid].length===0)&&(p[c.impactUid]=[],S++),p[c.impactUid].push({key:A,value:w,weight:E}),c.isDirty||(c.hitTargetUids.push(c.impactUid),c.isDirty=true));},update:(A,w,E="add")=>{c.link.count++,(!p[c.impactUid]||p[c.impactUid].length===0)&&(p[c.impactUid]=[],S++),p[c.impactUid].push({key:A,delta:w,op:E,weight:1}),c.isDirty||(c.hitTargetUids.push(c.impactUid),c.isDirty=true);},patch:(A,w)=>{c.link.count++,(!p[c.impactUid]||p[c.impactUid].length===0)&&(p[c.impactUid]=[],S++),p[c.impactUid].push({key:A,patch:w,weight:1}),c.isDirty||(c.hitTargetUids.push(c.impactUid),c.isDirty=true);}},c},te=Array.from({length:R},P),_=R-1,Z=(c,A,w)=>{let E=A.path,H=c.impact;if(c.count>=s){l.emit("entangle:blocked",{observer:E,target:H,count:c.count});return}let F=n(H),O=c.isProxy?A.proxy:A,T=c.isProxy?F.proxy:F;if(c.filter&&!c.filter(O,T))return;let K,U=true;_<0?(K=P(),U=false):K=te[_--],K.isDirty=false,K.link=c,K.impactNode=F,K.impactUid=F.uid,K.hitTargetUids=w;let k=c.emit(O,T,K.propose);if(k instanceof Promise||k&&typeof k.then=="function")return b++,(async()=>{try{await k;}catch(d){l.emit("node:error",{path:E,error:d}),l.onError({path:E,error:d});}finally{b--,U&&(te[++_]=K);}})();U&&(te[++_]=K);};return {useEntangle:c=>{let{cause:A,impact:w,via:E,emit:H,filter:F,isProxy:O}=c;if(!E||E.length===0){l.emit("entangle:warn",{path:A,type:"no_keys"});return}let K=n(A).uid;a[K]||(a[K]=new Map);let U=a[K];for(let k=0;k<E.length;k++){let d=E[k];U.has(d)||U.set(d,[]),U.get(d).push({impact:w,emit:H,filter:F,count:0,isProxy:!!O});}},updateEntangleLevel:()=>{let c=m();h.clear();for(let A=0;A<a.length;A++)if(a[A]!==void 0){let w=c.get(A)||0;h.add(w);}},Turnstile:{volatileLevels:h,get inFlightCount(){return b},get hasPendingGhosts(){return S>0},hasObserver:c=>a[c]!==void 0,getTriggerKeys:c=>{let A=a[c];return A?Array.from(A.keys()):[]},receiveGhosts:(c,A=[])=>{let w=c.uid,E=[],H=a[w];if(!H||A.length===0)return E;let F=[];for(let k=0;k<A.length;k++){let d=H.get(A[k]);if(d)for(let u=0;u<d.length;u++)F.push(d[u]);}let O=0,T=false,K=null;for(;O<F.length;O++){if(e.shouldYield()){T=true;break}let k=Z(F[O],c,E);if(k){K=k,T=true,O++;break}}let U=()=>{if(E.length<=1)return E;let k=[],d=Object.create(null);for(let u=0;u<E.length;u++){let B=E[u];d[B]||(d[B]=true,k.push(B));}return k};return T?(async()=>{for(K&&await K,e.shouldYield()&&await e.yieldToMain();O<F.length;){let k=[],d=Math.min(O+R,F.length);for(;O<d;O++){let u=Z(F[O],c,E);u&&k.push(u);}k.length>0&&await Promise.all(k.map(async u=>{await u,e.shouldYield()&&await e.yieldToMain();})),e.shouldYield()&&await e.yieldToMain();}return U()})():U()},resolveGhosts:c=>{let A=c.uid,w=p[A];if(!w||w.length===0)return [];let E=[],H=Object.create(null);for(let F=0;F<w.length;F++){let O=w[F];H[O.key]||(H[O.key]=[]),H[O.key].push(O);}for(let F in H){let O=H[F],T=c.state[F],K,U=-1/0,k=false;for(let d=0;d<O.length;d++){let u=O[d];if(u.patch!==void 0&&(T=u.patch(T)),u.value!==void 0){let B=u.weight??1;B>=U&&(U=B,K=u.value,k=true);}}k&&(T=K);for(let d=0;d<O.length;d++){let u=O[d];if(u.delta!==void 0)switch(u.op||"add"){case "add":T=(typeof T=="number"?T:0)+u.delta;break;case "remove":T=Array.isArray(T)?T.filter(j=>j!==u.delta):T;break;case "intersect":T=Array.isArray(T)?T.filter(j=>u.delta.includes(j)):u.delta;break;case "union":{let j=Array.isArray(T)?T:[],ne=Array.isArray(u.delta)?u.delta:[u.delta];T=[...new Set([...j,...ne])];break}case "merge":{let j=typeof T=="object"&&T!==null&&!Array.isArray(T)?T:{},ne=typeof u.delta=="object"&&u.delta!==null&&!Array.isArray(u.delta)?u.delta:{};T={...j,...ne};break}}}Object.is(c.state[F],T)||(c.state[F]=T,E.push(F));}return p[A]=[],S--,E.length>0?E:[]},resetCounters:()=>{for(let c=0;c<a.length;c++){let A=a[c];if(A)for(let w of A.values())for(let E=0;E<w.length;E++)w[E].count=0;}}}}};function ot(g,e,t,r,o){let i=rt(),l=0,s=new Map,a=[],p=[],h=[],n=[],M=false,f=new Set,b=async()=>{let d=Array.from(f);if(f.clear(),"signalTrigger"in o&&typeof o.signalTrigger=="function")for(let u of d){let B=A(u);o.signalTrigger(B.dirtySignal);}else "emit"in o&&o.emit(d);},S=()=>{M||(M=true,requestAnimationFrame(()=>{try{for(;f.size>0;)b();}finally{M=false;}}));},{useEntangle:R,updateEntangleLevel:P,Turnstile:te}=at({useEntangleStep:g.useEntangleStep},i,e.GetUidToLevelMap,c,A,w,{emit:r.emit,onError:r.callOnError}),{TaskRunner:_,CancelTask:Z}=st({useGreedy:g.useGreedy},e,{GetNodeByPath:c,GetNodeByUid:A,GetPathByUid:w,GetBucket:F,GetMaxUid:O,Turnstile:te},r,{requestUpdate:S,flushPathSet:f},i),W=d=>{throw new Error(`[MeshFlow] Duplicate Path: ${d}`)},y=d=>{s.has(d.path)&&W(String(d.path));let u=++l,B={path:d.path,getNode:oe=>c(oe)},j=(oe,re="value")=>{let Se=oe({...B}),me=c(d.path);if(!Object.is(me.state[re],Se)){if(t.createHistoryAction&&t.pushIntoHistory){let Re=t.createHistoryAction([{path:d.path,value:me.state[re]},{path:d.path,value:Se}],de=>{let J=c(de.path);J.state[re]=de.value,T(de.path);});t.pushIntoHistory(Re);}me.state[re]=Se,T(d.path);}},ne=He({uid:u,type:d.type,path:d.path,state:d.state,meta:d.meta,nodeBucket:{},dirtySignal:"signalCreator"in o?o.signalCreator():void 0,notifyKeys:d.notifyKeys,dependOn:j});return s.set(ne.path,u),h[u]=ne.path,a[u]=ne,ne},L=d=>{s.has(d.path)&&W(String(d.path));let u=++l,B=He({uid:u,type:d.type,path:d.path,state:{},meta:d,nodeBucket:{},children:d.children});return s.set(B.path,u),p[u]=B,B};function c(d){let u=s.get(d),B=a[u];if(!B)throw Error("Wrong id");return B}function A(d){let u=a[d];if(!u)throw Error("Wrong id");return u}function w(d){return h[d]}function E(d){let u=s.get(d);return p[u]}function H(d){return n.push(d)-1}function F(d){let u=n[d];if(!u)throw Error("Wrong id");return u}function O(){return l}let T=d=>{let u=c(d);if(!u)throw Error("Wrong id");f.add(u.uid),S();let B=e.GetNextDependency(u.uid);K(u.uid,B);};function K(d,u){_(d,u);}return {registerNode:y,registerGroupNode:L,GetNodeByPath:c,GetGroupByPath:E,notify:T,notifyAll:async()=>{Promise.resolve().then(async()=>{let d=e.GetDependencyOrder();if(!d||d.length===0)return;let u=d[0];try{_(null,u);}catch(B){throw r.callOnError(B),B}finally{S();}});},batchNotify:d=>{if(!d||d.length===0)return;if(t.createHistoryAction&&t.pushIntoHistory){let B=t.createHistoryAction([d.map(j=>({path:j.path,key:j.key,value:c(j.path).state[j.key]})),d.map(j=>({path:j.path,key:j.key,value:j.value}))],j=>{let ne=new Set;j.forEach(oe=>{let re=c(oe.path);re.state[oe.key]=oe.value,f.add(oe.path),ne.add(oe.uid);}),S(),ne.size>0&&_(null,Array.from(ne));});t.pushIntoHistory(B);}let u=new Set;d.forEach(B=>{let j=c(B.path);j.state[B.key]=B.value,f.add(j.uid),u.add(j.uid);}),S(),u.size>0&&_(null,Array.from(u));},useEntangle:R,updateEntangleLevel:P,SetBucket:H,GetBucket:F,CancelTask:Z,UITrigger:o,UidToNodeMap:a}}function it(g,e){let t=false,r=false,o=false,i=false,l=new Map,s=[],a=[],p=[],h=[],n=[],M=[],f=[],m=new Map,{GetNextDependency:S,GetPrevDependency:R,GetAllPrevDependency:P,GetAllNextDependency:te,rebuildDirectDependencyMaps:_}=Xe(()=>s,()=>p,()=>M,()=>n),Z={},W={};if(e.modules.useHistory){let v=e.modules.useHistory,Y;v.isMeshModuleInited?Y=v:Y=v();let{Undo:V,Redo:$,PushIntoHistory:q,CreateHistoryAction:I,updateUndoSize:C,updateRedoSize:G}=Y();Z.pushIntoHistory=q,Z.createHistoryAction=I,W={Undo:V,Redo:$,updateUndoSize:C,updateRedoSize:G};}let y=!!e.modules.useMeshRenderGate,L={};if(y){let v=e.modules.useMeshRenderGate.isMeshModuleInited,Y=e.modules.useMeshRenderGate;L=(v?Y:Y())(()=>re);}let{onError:c,callOnError:A}=Je(),{onSuccess:w,callOnSuccess:E}=et(),{onStart:H,callOnStart:F}=nt(),{emit:O,usePlugin:T,destroyPlugin:K}=tt(),{SetTrace:U,useTrace:k}=Qe(),d=k();T(d);let u=y?{...L}:{...e.UITrigger},B=ot({useGreedy:e.config.useGreedy,useEntangleStep:e.config.useEntangleStep||100},{GetDependencyOrder:()=>f,GetAllNextDependency:te,GetNextDependency:S,GetPrevDependency:R,GetAllPrevDependency:P,GetUidToLevelMap:()=>m},Z,{callOnError:A,callOnSuccess:E,callOnStart:F,emit:O},u),{SetBucket:j,GetBucket:ne,GetGroupByPath:oe,GetNodeByPath:re,notifyAll:Se,useEntangle:me,updateEntangleLevel:Re,CancelTask:de}=B;y&&L.init();let J={};if(e.modules.useInternalForm){let{uiSchema:v,GetFormData:Y}=e.modules.useInternalForm(B,g);J={uiSchema:v,GetFormData:Y};}let ie={};if(e.modules.useSchemaValidators){let{SetValidators:v}=e.modules.useSchemaValidators(re);ie={SetValidators:v};}let{SetRule:Ee,SetRules:Pe}=ze(re,j,ne,s,p,a,h,l),{SetStrategy:Ge}=qe(re,ne),we=Ze(s,l),Ie=()=>{let v=we();f=v.steps,m=v.levelMap,xe();},xe=()=>{o&&(Re(),o=false);},Ke=()=>{i||(i=true,Promise.resolve().then(xe).finally(()=>{i=false;}));},Oe=()=>{r||(r=true,Promise.resolve().then(()=>{if(Ie(),t){let{directNextMap:v,directPrevMap:Y}=_(f.flat());n=v,M=Y;}}).finally(()=>{r=false,t=false;}));};return {SetRule:(v,Y,V,$)=>{Ee(v,Y,V,$),t=true,Oe();},SetRules:(v,Y,V,$)=>{Pe(v,Y,V,$),t=true,Oe();},SetStrategy:Ge,useEntangle:v=>{me(v),o=true,Ke();},SetTrace:U,usePlugin:T,SetValue:(v,Y,V)=>{xe(),re(v).dependOn(()=>V,Y);},GetValue:(v,Y="value")=>re(v).proxy[Y],SetValues:v=>{xe(),B.batchNotify(v);},GetGroupByPath:oe,notifyAll:async()=>{Ie(),await Se();},GetAllDependency:()=>s,GetDependencyOrder:()=>f,historyExports:W,formExports:J,validatorExports:ie,batchRenderExport:L,hasRenderGate:()=>y,onError:c,onSuccess:w,onStart:H,scheduler:B,destroyPlugin:K,CancelTask:de}}var ve=new Map,ut=(g,e,t)=>{try{if(ve.has(g))throw Error("engineID repeated");let r=it(e,{config:t.config||{useGreedy:!1},UITrigger:t.UITrigger,modules:t.modules??{},plugins:{}}),{SetRule:o,SetRules:i,SetValues:l,SetStrategy:s,SetValue:a,GetValue:p,usePlugin:h,useEntangle:n,GetGroupByPath:M,notifyAll:f,SetTrace:m,GetAllDependency:b,GetDependencyOrder:S,historyExports:R,formExports:P,validatorExports:te,batchRenderExport:_,hasRenderGate:Z,onError:W,onSuccess:y,onStart:L,scheduler:c,destroyPlugin:A,CancelTask:w}=r,E={config:{SetRule:o,SetRules:i,SetStrategy:s,notifyAll:f,SetTrace:m,usePlugin:h,hasRenderGate:Z,useEntangle:n},data:{SetValue:a,GetValue:p,SetValues:l,GetGroupByPath:M},dependency:{GetAllDependency:b,GetDependencyOrder:S},hooks:{onError:W,onSuccess:y,onStart:L}},H=(T,K,U)=>{!K||typeof K!="object"||Object.keys(K).forEach(k=>{let d=K[k];if(typeof d=="object"&&d!==null)T[k]=T[k]||{},H(T[k],d,U);else if(typeof d=="function"){let u=k;if(u==="useMeshRenderGate")u="render";else if(u.startsWith("use")){let B=u.slice(3);u=B.charAt(0).toLowerCase()+B.slice(1);}k==="useHistory"&&U.exports.history&&Object.keys(U.exports.history).length>0?T[u]=U.exports.history:k==="useInternalForm"&&U.exports.form&&Object.keys(U.exports.form).length>0?T[u]=U.exports.form:k==="useSchemaValidators"&&U.exports.validator&&Object.keys(U.exports.validator).length>0?T[u]=U.exports.validator:k==="useMeshRenderGate"&&U.exports.render?T[u]=U.exports.render:T[u]=d(U.scheduler,U.Schema);}});},F={...E,destroyPlugin:A,CancelTask:w,modules:{}},O=t.modules;return O&&H(F.modules,O,{scheduler:c,Schema:e,exports:{history:R,form:P,validator:te,render:_}}),ve.set(g,F),F}catch(r){throw Error(r)}},mn=()=>(g,e,t)=>ut(g,e,t),Pn=g=>{let e=ve.get(g);if(!e)throw Error("Engine not found.");return e},Mn=g=>{let e=ve.get(g);e.destroyPlugin(),e.CancelTask(),ve.delete(g);};exports.DefaultStrategy=Ve;exports.MeshFlowEventsName=Ce;exports.TriggerCause=Ue;exports.deleteEngine=Mn;exports.useEngine=Pn;exports.useMeshFlow=ut;exports.useMeshFlowDefiner=mn;exports.useScheduler=ot;
|
|
1
|
+
'use strict';var Ce=(M=>(M[M.FlowStart=0]="FlowStart",M[M.FlowSuccess=1]="FlowSuccess",M[M.FlowEnd=2]="FlowEnd",M[M.FlowAbort=3]="FlowAbort",M[M.FlowWait=4]="FlowWait",M[M.FlowFire=5]="FlowFire",M[M.NodeStart=6]="NodeStart",M[M.NodeSuccess=7]="NodeSuccess",M[M.NodeProcessing=8]="NodeProcessing",M[M.NodeError=9]="NodeError",M[M.NodePending=10]="NodePending",M[M.NodeRevive=11]="NodeRevive",M[M.NodeIntercept=12]="NodeIntercept",M[M.NodeRelease=13]="NodeRelease",M[M.NodeStagnate=14]="NodeStagnate",M[M.NodeBucketSuccess=15]="NodeBucketSuccess",M[M.EntangleWarn=16]="EntangleWarn",M[M.EntangleBlocked=17]="EntangleBlocked",M))(Ce||{}),Le=(r=>(r[r.CAUSALITY=0]="CAUSALITY",r[r.INVERSION=1]="INVERSION",r[r.REPERCUSSION=2]="REPERCUSSION",r))(Le||{});var _e=(r=>(r.OR="OR",r.PRIORITY="PRIORITY",r.MERGE="MERGE",r))(_e||{});var He=class{computedRules=[];getRuleResult(e,t,r){if(e.entityId==="__base__")return e.logic(t);if(!(!e._hasRun||r(e.triggerUids)))return e._lastResult;let l=e.logic(t);return l instanceof Promise?l.then(u=>(e._lastResult=u,e._hasRun=true,u)):(e._lastResult=l,e._hasRun=true,l)}store={OR:(e,t,r)=>{let i,l,u=this.computedRules;for(let a=0;a<u.length;a++){let o=u[a],p=this.getRuleResult(o,e,r);if(p instanceof Promise)return (async()=>{let n=await p;if(o.entityId==="__base__"?l=n:n&&(i=n),typeof i>"u")for(let P=a+1;P<u.length;P++){let m=u[P],S=this.getRuleResult(m,e,r),N=S instanceof Promise?await S:S;if(m.entityId==="__base__"){l=N;continue}if(N){i=m.value;break}}return typeof i>"u"&&(i=l),{res:i,version:t}})();let h=p;if(o.entityId==="__base__"){l=h;continue}if(h){i=o.value;break}}return typeof i>"u"&&(i=l),{res:i,version:t}},PRIORITY:(e,t,r)=>{let i,l=this.computedRules;for(let u=0;u<l.length;u++){let a=l[u],o=this.getRuleResult(a,e,r);if(o instanceof Promise)return (async()=>{let p=await o;if(p!==void 0)return {res:a.value!==void 0?a.value:p,version:t};for(let h=u+1;h<l.length;h++){let n=l[h],P=this.getRuleResult(n,e,r),m=P instanceof Promise?await P:P;if(m!==void 0)return {res:m,version:t}}return {res:void 0,version:t}})();if(o!==void 0)return {res:a.value!==void 0?a.value:o,version:t}}return {res:i,version:t}},MERGE:(e,t,r)=>{let i,l,u=this.computedRules,a=(p,h)=>p===void 0?h:h===void 0?p:Array.isArray(p)&&Array.isArray(h)?[...h,...p]:typeof p=="object"&&typeof h=="object"?{...h,...p}:p;for(let p=0;p<u.length;p++){let h=u[p],n=this.getRuleResult(h,e,r);if(n instanceof Promise)return (async()=>{let m=await n,S=(x,b)=>{if(x.entityId==="__base__")l=a(l,b);else if(b){let M=x.value!==void 0?x.value:b;i=a(i,M);}};S(h,m);for(let x=p+1;x<u.length;x++){let b=u[x],M=this.getRuleResult(b,e,r),se=M instanceof Promise?await M:M;S(b,se);}return {res:a(i,l),version:t}})();let P=n;if(h.entityId==="__base__"){l=a(l,P);continue}if(P){let m=h.value!==void 0?h.value:P;i=a(i,m);}}return {res:a(i,l),version:t}}};CurrentStrategy=()=>{};CurrentStrategyType="PRIORITY";getRules=()=>{};constructor(e){this.getRules=e,this.CurrentStrategy=this.store.PRIORITY,this.updateComputedRules();}updateComputedRules(){let e=this.getRules();this.CurrentStrategyType==="PRIORITY"||this.CurrentStrategyType==="MERGE"?this.computedRules=Array.from(e.values()).map(t=>Array.from(t)).flat().sort((t,r)=>r.priority-t.priority):this.computedRules=Array.from(e.values()).map(t=>Array.from(t)).flat();}setStrategy(e){this.CurrentStrategyType=e,this.CurrentStrategy=this.store[e],this.updateComputedRules();}evaluate(e,t,r){return this.CurrentStrategy(e,t,r)}},we=class{path;strategy;contract;rules=new Map;isValue=false;id=0;cache=void 0;pendingPromise=null;version=0;deps=new Map;_forceNotify=false;promiseToken=null;useCache=true;effectArray=[];constructor(e,t,r){let i=()=>this.rules;this.strategy=new He(i),this.path=r,this.isValue=t==="value",this.contract=this.inferType(e),this.cache=e,this.setRule({priority:0,entityId:"__base__",logic:()=>e});}setUseCache(e){this.useCache=e;}forceNotify(){this._forceNotify=true;}isForceNotify(){return this._forceNotify}setStrategy(e){this.strategy.setStrategy(e);}setDefaultRule(e){let t=new Set;t.add(e),this.rules.set(-1,t);}setRules(e,t){t&&this.updateDeps(t);let r=++this.id,i={...e,entityId:r};for(let l of e.triggerUids)this.rules.has(l)||this.rules.set(l,new Set),this.rules.get(l).add(i);return this.strategy.updateComputedRules(),()=>{for(let l of e.triggerUids){let u=this.rules.get(l);u&&(u.delete(i),u.size===0&&(this.rules.delete(l),this.deps.delete(l)));}this.strategy.updateComputedRules();}}updateDeps(e){for(let[t,r,i]of e){if(r.length==0)continue;let l=this.deps.get(t)||Object.create(null);for(let u of r)l[u]=i[u];this.deps.set(t,l);}}setRule(e,t){if(t&&this.updateDeps(t),typeof e.entityId=="string"){this.setDefaultRule(e);return}let r=++this.id,i={...e,entityId:r};if(e)for(let l of e.triggerUids)this.rules.has(l)||this.rules.set(l,new Set),this.rules.get(l).add(i);return this.strategy.updateComputedRules(),()=>{for(let l of e.triggerUids){let u=this.rules.get(l);u&&(u.delete(i),u.size===0&&(this.rules.delete(l),this.deps.delete(l)));}this.strategy.updateComputedRules();}}setSideEffect(e){this.effectArray.push(e);}getSideEffect(){return [...this.effectArray]}evaluate(e){let t=null;if(e.GetToken&&(t=e.GetToken()),this.pendingPromise&&this.promiseToken!==t&&(this.pendingPromise=null,this.promiseToken=null),this.pendingPromise)return this.pendingPromise;let r=false;if(typeof e.triggerUid=="number"){r=true,this.deps.size==0&&(r=false);for(let[a,o]of this.deps.entries()){let p=e.getStateByUid(a);if(!p){r=false;break}for(let h in o){let n=o[h],P=p[h];if(typeof n=="object"&&n!==null){r=false;break}if(n!==P){r=false;break}}if(!r)break}}if(r&&this.useCache)return this.cache;this.promiseToken=t;let i=++this.version,l=a=>{if(!a||a.length===0)return true;for(let o of a){let p=this.deps.get(o);if(!p)return true;let h=e.getProxyByUid(o);if(!h)return true;for(let n in p){let P=p[n],m=h[n];if(typeof P=="object"&&P!==null||P!==m)return true}}return false},u=this.strategy.evaluate(e,i,l);if(!(u instanceof Promise)){let{res:a,version:o}=u;return this.finalizeSync(a,o,e,t)}return this.pendingPromise=(async()=>{try{let{res:a,version:o}=await u;return this.finalizeSync(a,o,e,t)}catch(a){throw {path:this.path,error:a}}finally{this.promiseToken===t&&(this.pendingPromise=null,this.promiseToken=null);}})(),this.pendingPromise}finalizeSync(e,t,r,i){return i!==this.promiseToken||t<this.version?this.cache:(this.cache=e,this.deps.forEach((l,u)=>{let a=r.getProxyByUid(u);if(!a)return;let o=Object.keys(l);for(let p of o)l[p]=a[p];}),e)}inferType(e){return Array.isArray(e)?"array":typeof e}};var Xe=(g,e,t)=>{let i=l=>{let u=t.triggerUids.map(p=>{let h=l.getProxyByUid(p);if(t.triggerKeys.length===0)return h;let n={};return t.triggerKeys.forEach(P=>{n[P]=h[P];}),n}),a=Object.create(null);return Object.defineProperty(a,"triggerTargets",{get:()=>u}),Object.defineProperty(a,"affectedTatget",{get:()=>l.getProxyByUid(g)[e]}),t.logic({slot:a})};return {value:t.value,targetUid:g,triggerUids:t.triggerUids,priority:t.priority??10,logic:i}},Ze=(g,e,t,r,i,l,u,a)=>{if(!g)throw Error();let o=g,p=(P,m)=>{typeof r[P]>"u"&&(r[P]=[],l[P]=new Set),l[P].add(m),l[P].size>r[P].length&&r[P].push(m),typeof i[m]>"u"&&(i[m]=[],u[m]=new Set),u[m].add(P),u[m].size>i[m].length&&i[m].push(P);};return {SetRule:(P,m,S,N)=>{let x=o(P),b=o(m),M=N.triggerKeys||[],se=a.get(b.uid)||0,U=a.get(x.uid)||0;se+=1,U+=1,a.set(b.uid,se),a.set(x.uid,U);let _=Xe(b.uid,S,{...N,triggerUids:[x.uid],triggerKeys:M}),ee=[P].map(C=>{let te=o(C);return [te.uid,M,te.proxy]});if(p(x.uid,b.uid),typeof b.nodeBucket[S]=="number"){let C=t(b.nodeBucket[S]);C.setRule(_,ee),N.effect&&C.setSideEffect({fn:N.effect,args:N.effectArgs?N.effectArgs:[S]});}else {let C=b.meta[S],te=new we(C,S,m);te.setRule(_,ee),N.effect&&te.setSideEffect({fn:N.effect,args:N.effectArgs?N.effectArgs:[S]}),b.nodeBucket[S]=e(te);}b.state[S]=b.meta[S];let z=t(b.nodeBucket[S]);N.forceNotify&&z.forceNotify(),N.cacheStrategy=="none"&&z.setUseCache(false);},SetRules:(P,m,S,N)=>{let x=o(m),b=a.get(x.uid)||0;b+=1,a.set(x.uid,b);let M=[];for(let z of P){let C=o(z);M.push(C.uid);let te=a.get(C.uid)||0;te+=1,a.set(C.uid,te),p(C.uid,x.uid);}let se=N.triggerKeys||[],U=Xe(x.uid,S,{...N,triggerUids:M,triggerKeys:se}),_=P.map(z=>{let C=o(z);return [C.uid,se,C.state]});if(typeof x.nodeBucket[S]=="number"){let z=t(x.nodeBucket[S]);z.setRules(U,_),N.effect&&z.setSideEffect({fn:N.effect,args:N.effectArgs?N.effectArgs:[S]});}else {let z=x.meta[S],C=new we(z,S,m);C.setRules(U,_),N.effect&&C.setSideEffect({fn:N.effect,args:N.effectArgs?N.effectArgs:[S]}),x.nodeBucket[S]=e(C);}x.state[S]=x.meta[S];let ee=t(x.nodeBucket[S]);N.forceNotify&&ee.forceNotify(),N.cacheStrategy=="none"&&ee.setUseCache(false);}}};var Je=(g,e)=>{let t=g||void 0;if(!t)throw Error();return {SetStrategy:(i,l,u)=>{let a=t(i);e(a.nodeBucket[l]).setStrategy(u);}}};function et(){let g=new Map,e=new Map,t=new Set,r=(u,a)=>{g.set(u,a);let o=e.get(u);o&&o(a);};return {SetTrace:(u,a)=>{e.set(u,a);let o=g.get(u)||"idle";return a(o),{cancel:()=>{e.delete(u);}}},useTrace:()=>({apply:a=>{a.on(0,()=>{t.forEach(o=>r(o,"idle")),t.clear(),g.clear();}),a.on(13,({path:o,type:p})=>{(p==1||p==2)&&(t.add(o),r(o,"pending"));}),a.on(10,({path:o})=>{t.add(o),(!g.has(o)||g.get(o)==="idle")&&r(o,"pending");}),a.on(6,({path:o})=>{t.add(o),r(o,"calculating");}),a.on(7,({path:o})=>{r(o,"calculated");}),a.on(12,({path:o,type:p})=>{p==3&&r(o,"calculating"),p==6&&r(o,"idle");}),a.on(14,({path:o})=>{r(o,"pending");}),a.on(9,({path:o})=>r(o,"error"));}})}}function nt(g,e,t,r){return {GetNextDependency:h=>r()[h]||[],GetPrevDependency:h=>t()[h]||[],GetAllPrevDependency:h=>e()[h]||[],GetAllNextDependency:h=>g()[h]||[],rebuildDirectDependencyMaps:h=>{let n=[],P=[],m=g();for(let S of h){let N=m[S]||[];n[S]=N;for(let x=0;x<N.length;x++){let b=N[x];typeof P[b]>"u"&&(P[b]=[]),P[b].push(S);}}return {directNextMap:n,directPrevMap:P}}}}function rt(g,e){let t=i=>{let l=[],u=[],a=new Map,o=i.size,p=0,h=0;for(let[n,P]of i)P===0&&u.push(n);if(u.length===0&&o>0)throw Error("Circular dependency detected");for(;u.length>0;){l.push([...u]);let n=[];for(let P of u){p++,a.set(P,h);let m=g[P];if(m)for(let S of m){let N=i.get(S)-1;i.set(S,N),N===0&&n.push(S);}}u=n,h++;}if(p<o)throw Error("Circular dependency detected");return {steps:l,levelMap:a}};return ()=>{let i=new Map;for(let l of e.keys()){let u=g[l]||[];i.has(l)||i.set(l,0);for(let a of u){let o=i.get(a)||0;i.set(a,++o);}}return t(i)}}var Ge=()=>{let g=[];return {on:e=>(g.push(e),()=>{let t=g.indexOf(e);t>-1&&g.splice(t,1);}),call:e=>g.forEach(t=>{t(e);})}};function st(){let{on:g,call:e}=Ge();return {onError:g,callOnError:e}}function at(){let{on:g,call:e}=Ge();return {onSuccess:g,callOnSuccess:e}}var ot=()=>{let g=new Set,e=new Map,t=new Set,r=(a,o)=>{e.get(a)?.forEach(p=>p(o));},i=(a,o)=>(e.has(a)||e.set(a,new Set),e.get(a).add(o),()=>e.get(a)?.delete(o));return {usePlugin:a=>{let o=new Set,p=(n,P)=>{let m=i(n,P);return o.add(m),m};a.apply({on:p}),g.add(a);let h=()=>{o.forEach(n=>n()),o.clear(),g.delete(a),t.delete(h);};return t.add(h),h},emit:r,destroyPlugin:()=>{t.forEach(a=>a()),t.clear(),e.clear(),g.clear();}}};function it(){let{on:g,call:e}=Ge();return {onStart:g,callOnStart:e}}var lt=(g={frameQuota:12})=>{let e=performance.now(),t=0,r=false,i=()=>!!navigator?.scheduling?.isInputPending?.({includeContinuous:true});return {getIsFirstFrame:()=>r,reset(){e=performance.now(),t=0,r=true;},shouldYield(){return !r&&(++t&15)!==0?false:!!(performance.now()-e>g.frameQuota||i())},async yieldToMain(){return new Promise(l=>{Ye(()=>{e=performance.now(),t=0,r&&(r=false),l();});})}}},Ye=g=>{let{port1:e,port2:t}=new MessageChannel;e.onmessage=g,t.postMessage(null);};function ut(g,e,t,r,i,l){let u=new Map,a=g.useGreedy,o=null,p=()=>{u.clear();},h={path:null,level:0,targetLevel:0,currentLevel:0,pendingParentsCount:0,active:0,pending:0,blocked:0,nums:0,asyncNums:0},n={path:null,type:0,triggerPath:null,calledBy:0,key:null,value:null,error:null,token:null,duration:null,detail:h},P=false,m=[],S=null,N=(b,M,se)=>{m.push({uid:b,key:M,value:se}),!P&&(S||(S=Promise.resolve().then(()=>{S=null,P||x(null,[]);})));},x=async(b,M)=>{let U=Symbol("token"),_=typeof b=="number"?b:"__NOTIFY_ALL__";u.set(_,U),o=U,P=true;let ee=false,z=false;l.reset(),t.Turnstile.nextEpoch();let C=t.GetMaxUid()+3,te=new Array(C).fill(0),d=0,s=new Uint8Array(C),H=new Int32Array(C),k=new Int32Array(C),Y=new Int32Array(C*2),A=0,E=0,T=new Int32Array(C*2),O=0,v=0,G=new Int32Array(C*2),c=0,y=0;M.forEach(f=>{te[f]=1,e.GetAllNextDependency(f).forEach(W=>{te[W]=1;});});let w=new Array(C).fill(null),V=[],q=t.Turnstile,ae=new Array(C).fill(null).map(()=>[]),de=new Array(C).fill(null).map(()=>[]),me=[],Ne=()=>{if(m.length===0)return false;let f=false,W=1/0;for(;m.length>0;){let{uid:D,key:Q,value:le}=m.shift(),L=t.GetNodeByUid(D);if(me.includes(D)||me.push(D),!Object.is(L.state[Q],le)){f=true,L.state[Q]=le,i.flushPathSet.add(D),L.calledBy=1;let ne=w[D]||[];ne.includes(Q)||ne.push(Q),w[D]=ne,s[D]&=-17,s[D]&2&&(s[D]&=-3,v--),s[D]&1||(s[D]|=1,Y[A++]=D,E++);let X=e.GetUidToLevelMap().get(D)??0;X<W&&(W=X),Se(D);}}return f&&(ie===void 0||ie>W)&&(ie=W),f},Te=q.volatileLevels.size>0,Pe=Te?q.hasObserver:f=>false,xe=Te?q.receiveGhosts:()=>[],Oe=Te?q.resolveGhosts:()=>[],ke=Te?q.getTriggerKeys:()=>[],De=q?.volatileLevels||new Set,be=-1,oe=e.GetUidToLevelMap(),ie=0,Re=0,Se=f=>{e.GetAllNextDependency(f).forEach(D=>{let Q=oe.get(D)||0;Q>Re&&(Re=Q);});};Ne();let Ie=new Set;typeof b=="number"&&(s[b]|=16,Ie.add(b),Se(b),i.flushPathSet.add(b));let Be=typeof b=="number"?[b]:[...M,...me];l.shouldYield()&&(i.requestUpdate(),await l.yieldToMain());let We=Be.map(async f=>{if(Pe(f)){let W=t.GetNodeByUid(f),D=ke(f);if(D.length>0){let Q=xe(W,D);return Q instanceof Promise&&(Q=await Q),{seed:f,hitTargets:Q}}}return {seed:f,hitTargets:[]}});if((await Promise.all(We)).forEach(({seed:f,hitTargets:W})=>{if(W&&W.length>0){V.push(...W);let D=oe.get(f)||0;be=Math.max(be,D);}}),(V.length>0||Be.length>1)&&(i.requestUpdate(),await l.yieldToMain(),u.get(_)!==U))return;let ze=V.length>0;M.forEach(f=>{if(!Ie.has(f))if(ze){let W=oe.get(f)??0;k[f]=W,s[f]&4||(s[f]|=4,G[c++]=f,y++);let D=t.GetPathByUid(f);n.path=D,n.type=2,r.emit(14,n);}else s[f]&1||(s[f]|=1,Y[A++]=f,E++),Se(f);}),typeof b=="number"?ie=oe.get(b)??0:ie=Math.min(...M.map(f=>oe.get(f)??0));let qe=performance.now(),Ue=typeof _=="number"?t.GetPathByUid(_):"__NOTIFY_ALL__";n.path=Ue,n.token=U,r.emit(0,n),r.callOnStart({path:Ue});let Ve=false,Qe=30,$e=(f,W)=>{let D=false,Q=false,le=false,L=t.GetNodeByUid(f),ne=t.GetPathByUid(f),X=L.calledBy,K=ae[f];K.length=0;let B=Pe(f),I=B?ke(f):[],F=R=>{B&&(I.length===0||I.includes(R))&&K.push(R);},ue=de[f];ue.length=0;let ye=false;if(L.calledBy===1){ye=true,D=true,i.flushPathSet.add(f);let R=w[f];R&&(K.push(...R),w[f]=null);}let fe=(R,J)=>{let re=oe.get(R)??0,he=t.GetNodeByUid(R),Z=t.GetPathByUid(R),ge=(X===1||X===2)&&re<=be;ge&&s[R]&16&&(s[R]&=-17,n.path=Z,n.triggerPath=ne,r.emit(11,n));let ce=0;if(!(s[R]&49)){if(s[R]&2)ce=H[R]-1;else {if(re>ie&&v>Qe){k[R]=re,s[R]&4||(s[R]|=4,G[c++]=R,y++),n.path=Z,n.type=7,r.emit(12,n);return}let Ee=e.GetPrevDependency(R),$=0;for(let Me of Ee){if(s[Me]&16)continue;(oe.get(Me)??0)>ie&&$++;}ce=$;}if(ce<=0){let Ee=(s[R]&1)!==0,$=(s[R]&32)!==0;if(Ee||$){n.path=Z,n.type=$?3:3.1,r.emit(12,n);return}s[R]&2&&(s[R]&=-3,v--),ge?he.calledBy=2:he.calledBy=0,s[R]&1||(s[R]|=1,Y[A++]=R,E++),n.path=Z,n.type=J,h.path=ne,r.emit(13,n);}else H[R]=ce,s[R]&2||(s[R]|=2,T[O++]=R,v++);}},ve=(R=[])=>{if(u.get(_)!==U)return;if(R.length){let re={},he=L.proxy;for(let Z of R){let ge=(Z.args||[]).reduce((ce,Ee)=>(ce[Ee]=he[Ee],ce),{});try{let ce=Z.fn(ge);ce&&typeof ce=="object"&&Object.assign(re,ce);}catch(ce){}}for(let Z in re)if(Z in L.state)Object.is(L.state[Z],re[Z])||(L.state[Z]=re[Z],F(Z),D=true,(L.notifyKeys.size===0||L.notifyKeys.has(Z))&&(Q=true));else throw {error:`wrong effect in ${String(L.path)}`}}D&&i.flushPathSet.add(f);let J=(re=[])=>{if(u.get(_)!==U)return;re&&re.length>0&&(V.push(...re),be=Math.max(be,oe.get(f)||0)),K.length=0,n.path=ne,n.calledBy=L.calledBy,r.emit(7,n),s[f]|=16;let he=e.GetNextDependency(f);(Q||le)&&(Se(f),e.GetAllNextDependency(f).forEach(Me=>{te[Me]=1;}));let Z=t.GetNodeByUid(f),ge=oe.get(f)??0,ce=De.has(ge)||V.length>0;for(let $ of he){let Me=oe.get($)??0,Ae=t.GetPathByUid($);if(ce&&Me>=ge){k[$]=Me,s[$]&4||(s[$]|=4,G[c++]=$,y++),n.path=Ae,n.type=2,r.emit(14,n);continue}if(s[$]&16){n.path=Ae,n.type=2,r.emit(12,n);continue}if(s[$]&32||(s[$]&1)!==0){n.path=Ae,n.type=s[$]&32?3:3.1,r.emit(12,n);continue}if(Q||le)fe($,1);else if(s[$]&2)fe($,2);else {let pt=oe.get($);k[$]=pt,s[$]&4||(s[$]|=4,G[c++]=$,y++,n.path=Ae,n.type=1,r.emit(14,n));}}s[f]&32&&(s[f]&=-33,d--),Z.calledBy=0,(()=>{if(!ee){ee=true;let $=d,Me=E,Ae=v;n.path=ne,n.type=1,h.active=$,h.pending=Me,h.blocked=Ae,r.emit(5,n),j();}})();};if(Pe(f)&&K.length>0){let re=xe(L,K);re instanceof Promise?re.then(J).catch(Fe):J(re);}else J([]);},Fe=R=>{n.path=ne,n.error=R,r.emit(9,n);let J=Symbol("abort");u.set(_,J),A=0,E=0,O=0,v=0,c=0,y=0,s.fill(0),d=0,w.fill(null),P=false,r.callOnError(R);},pe=(R,J)=>{R!==L.state[J]&&(L.state[J]=R,D=true,F(String(J)),n.path=ne,n.key=J,n.value=R,n.calledBy=L.calledBy,r.emit(15,n),(L.notifyKeys.size===0||L.notifyKeys.has(J))&&(Q=true)),t.GetBucket(L.nodeBucket[J]).isForceNotify()&&(le=true),(Q||le)&&Se(f);};n.path=ne,n.calledBy=L.calledBy,r.emit(6,n);try{let R=[];for(let J in L.nodeBucket){let re=t.GetBucket(L.nodeBucket[J]);if(R.push(...re.getSideEffect()),ye){r.emit(15,{path:ne,key:String(J),value:L.state[J],calledBy:L.calledBy}),re.isForceNotify()&&(le=!0),(L.notifyKeys.size===0||L.notifyKeys.has(J))&&Se(f);continue}let he=re.evaluate({affectKey:J,triggerUid:W,getProxyByUid:Z=>t.GetNodeByUid(Z).proxy,getStateByUid:Z=>t.GetNodeByUid(Z).state,GetToken:()=>U});if(he instanceof Promise){let Z=he.then(ge=>{u.get(_)===U&&pe(ge,J);});ue.push(Z);}else pe(he,J);}if(ue.length>0)return Promise.all(ue).then(()=>{ve(R);}).catch(Fe);ve(R);return}catch(R){Fe(R);}},j=async()=>{if(u.get(_)!==U){ee=false;return}ee=true;let f=l.getIsFirstFrame(),W=0,D=()=>30,Q=0,le=D();try{for(;u.get(_)===U;){let L=Q>=le,ne=l.shouldYield();if(L||ne){if(Q>0&&(W++,(f||W%2===0)&&i.requestUpdate()),await l.yieldToMain(),u.get(_)!==U)break;Q=0,f=l.getIsFirstFrame();}if(E>0&&d<40){let X=A,K=0;for(let B=0;B<X;B++){let I=Y[B];if((s[I]&1)===0)continue;if(d>=40||Q>=le||l.shouldYield()){for(let pe=B;pe<A;pe++){let R=Y[pe];s[R]&1&&(Y[K++]=R);}A=K,E=K;break}let F=t.GetNodeByUid(I),ue=t.GetPathByUid(I),ye=oe.get(I)??0,fe=e.GetPrevDependency(I),ve=fe.length>1;if((!a||ve)&&ye>ie){s[I]&=-2,E--;let pe=fe.filter(R=>te[R]===1&&(s[R]&16)===0).length;H[I]=pe||0,s[I]&2||(s[I]|=2,T[O++]=I,v++),n.path=ue,n.type=pe>0?4:5,h.targetLevel=ye,h.currentLevel=ie,h.pendingParentsCount=pe,r.emit(12,n);continue}s[I]&=-2,E--,(s[I]&32)===0&&(s[I]|=32,d++),n.path=ue,n.calledBy=F.calledBy,r.emit(8,n),$e(I,b),Q++;}if(A>X){for(let B=X;B<A;B++){let I=Y[B];s[I]&1&&(Y[K++]=I);}A=K,E=A;}else A=K;if(E>0&&d<40)continue}if(Q<le&&a&&v>0&&d<40){let X=!1,K=0,B=0;for(let I=0;I<O;I++){let F=T[I];if((s[F]&2)===0)continue;if(H[F]<=0&&K<le){let ye=oe.get(F)??0,fe=e.GetPrevDependency(F);if(ye<=ie||fe.length<=1){s[F]&=-3,v--,s[F]&1||(s[F]|=1,Y[A++]=F,E++),K++,X=!0;let ve=t.GetPathByUid(F);n.path=ve,n.type=4,r.emit(13,n);continue}}T[B++]=F;}if(O=B,K>0)continue;if(X){if(l.shouldYield()&&(await l.yieldToMain(),u.get(_)!==U))break;continue}}if(d===0&&E===0){if(q.inFlightCount>0)break;if(V.length>0){let K=!1,B=ie,I=Array.from(new Set(V));V.length=0;for(let F of I){let ue=t.GetNodeByUid(F),ye=Oe(ue);if(ye&&ye.length>0){K=!0,ue.calledBy=1,w[F]=ye,s[F]&=-17,s[F]&2&&(s[F]&=-3,v--),s[F]&1||(s[F]|=1,Y[A++]=F,E++);let fe=oe.get(ue.uid)??0;fe<B&&(B=fe),Se(ue.uid),i.flushPathSet.add(ue.uid);}}if(K){if(B<ie&&(ie=B),i.requestUpdate(),l.shouldYield()&&(await l.yieldToMain(),u.get(_)!==U))break;continue}}let X=1/0;for(let K=0;K<c;K++){let B=G[K];if(s[B]&4){let I=k[B];I<X&&(X=I);}}for(let K=0;K<O;K++){let B=T[K];if(s[B]&2){let I=oe.get(B)??0;I>ie&&I<X&&(X=I);}}if(X!==1/0&&X<=Re){ie=X;let K=0;for(let I=0;I<c;I++){let F=G[I];s[F]&4&&(k[F]===X?(s[F]&=-5,y--,s[F]&1||(s[F]|=1,Y[A++]=F,E++)):G[K++]=F);}c=K;let B=0;for(let I=0;I<O;I++){let F=T[I];if(s[F]&2)if((oe.get(F)??0)===X){s[F]&=-3,v--,s[F]&1||(s[F]|=1,Y[A++]=F,E++);let ye=t.GetPathByUid(F);n.path=ye,n.type=3,h.level=X,r.emit(13,n);}else T[B++]=F;}O=B;continue}else {for(let K=0;K<c;K++){let B=G[K];if(s[B]&4){s[B]|=16;let I=t.GetPathByUid(B);n.path=I,n.type=6,r.emit(12,n);}}c=0,y=0;for(let K=0;K<O;K++){let B=T[K];if(s[B]&2){s[B]|=16;let I=t.GetPathByUid(B);n.path=I,n.type=6,r.emit(12,n);}}O=0,v=0;break}}E>0&&d>=40&&(n.type=2,r.emit(4,n));break}}finally{ee=false;let L=d+v+E,ne=q.inFlightCount||0;if(!(o===U)){n.token=U,r.emit(3,n);return}if(i.requestUpdate(),L===0&&ne===0){if(u.get(_)===U&&!Ve){Ve=true,n.type=1,r.emit(2,n),q.resetCounters(),w.fill(null),P=false;let K=performance.now();be=-1,u.delete(_),n.token=U,n.duration=(K-qe).toFixed(2.1)+"ms",r.emit(1,n),Promise.resolve().then(()=>{r.callOnSuccess();});}}else {let K=L===0&&ne>0?3:1;if(n.type=K,h.nums=d,h.asyncNums=ne,r.emit(4,n),ne>0&&!z){z=true;let B=()=>{if(o!==U){z=false;return}if(q.inFlightCount===0){z=false,Ne(),Ye(()=>{o===U&&q.inFlightCount===0&&j();});return}else q.inFlightCount,requestAnimationFrame(B);};requestAnimationFrame(B);}}}};j();};return {TaskRunner:x,CancelTask:p,stageValueFn:N}}function je(g){let{path:e,uid:t,type:r,meta:i,dirtySignal:l,state:u}=g,a=null,o=["path","uid","type","dependOn","nodeBucket"],h={path:e,uid:t,type:r,meta:i,dirtySignal:l,createView:(n={})=>{if(a&&Object.keys(n).length===0)return a;let P=new Proxy(n,{get(m,S){let N=S;return Reflect.has(m,S)?Reflect.get(m,S):N in g.state?g.state[N]:N in g?g[N]:i&&N in i?i[N]:Reflect.get(m,S)},set(m,S,N){return false},ownKeys(m){let S=new Set([...Reflect.ownKeys(m),...Object.keys(u||{}),...Object.keys(i||{}),...o]);return Array.from(S)},getOwnPropertyDescriptor(m,S){let N=S;return Reflect.has(m,S)||u&&N in u||i&&N in i||o.includes(N)?{enumerable:true,configurable:true}:Reflect.getOwnPropertyDescriptor(m,S)}});return a=P,P}};return "children"in g?{...h,children:g.children}:{...h,state:g.state,nodeBucket:g.nodeBucket,notifyKeys:g.notifyKeys,dependOn:g.dependOn,calledBy:0,get proxy(){return a}}}var ct=(g,e,t,r,i,l,u)=>{let a=g.useEntangleStep,o=[],p=[],h=new Set,n=r,S=t,N=0,x=0,b=0,M=100,se=()=>{let d={link:null,impactNode:null,impactUid:-1,hitTargetUids:null,isDirty:false,propose:null};return d.propose={set:(s,H,k=1)=>{d.epoch===b&&H!==d.impactNode.state[s]&&(d.link.count++,(!p[d.impactUid]||p[d.impactUid].length===0)&&(p[d.impactUid]=[],x++),p[d.impactUid].push({key:s,value:H,weight:k}),d.isDirty||(d.hitTargetUids.push(d.impactUid),d.isDirty=true));},update:(s,H,k="add")=>{d.epoch===b&&(d.link.count++,(!p[d.impactUid]||p[d.impactUid].length===0)&&(p[d.impactUid]=[],x++),p[d.impactUid].push({key:s,delta:H,op:k,weight:1}),d.isDirty||(d.hitTargetUids.push(d.impactUid),d.isDirty=true));},patch:(s,H)=>{d.epoch===b&&(d.link.count++,(!p[d.impactUid]||p[d.impactUid].length===0)&&(p[d.impactUid]=[],x++),p[d.impactUid].push({key:s,patch:H,weight:1}),d.isDirty||(d.hitTargetUids.push(d.impactUid),d.isDirty=true));}},d},U=Array.from({length:M},se),_=M-1,ee=(d,s,H)=>{let k=s.path,Y=d.impact;if(d.count>=a){u.emit("entangle:blocked",{observer:k,target:Y,count:d.count});return}let A=n(Y),E=d.isProxy?s.proxy:s,T=d.isProxy?A.proxy:A;if(d.filter&&!d.filter(E,T))return;let O,v=true;_<0?(O=se(),v=false):O=U[_--];let G=b;O.epoch=G,O.isDirty=false,O.link=d,O.impactNode=A,O.impactUid=A.uid,O.hitTargetUids=H;let c=d.emit(E,T,O.propose);if(c instanceof Promise||c&&typeof c.then=="function")return N++,(async()=>{try{await c;}catch(y){u.emit("node:error",{path:k,error:y}),u.onError({path:k,error:y});}finally{G===b&&N--,v&&(U[++_]=O);}})();v&&(U[++_]=O);};return {useEntangle:d=>{let{cause:s,impact:H,via:k,emit:Y,filter:A,isProxy:E}=d;if(!k||k.length===0){u.emit("entangle:warn",{path:s,type:"no_keys"});return}let O=n(s).uid;o[O]||(o[O]=new Map);let v=o[O];for(let G=0;G<k.length;G++){let c=k[G];v.has(c)||v.set(c,[]),v.get(c).push({impact:H,emit:Y,filter:A,count:0,isProxy:!!E});}},updateEntangleLevel:()=>{let d=S();h.clear();for(let s=0;s<o.length;s++)if(o[s]!==void 0){let H=d.get(s)||0;h.add(H);}},Turnstile:{volatileLevels:h,get inFlightCount(){return N},get hasPendingGhosts(){return x>0},nextEpoch:()=>{b++,N=0,x=0,p.length=0;},hasObserver:d=>o[d]!==void 0,getTriggerKeys:d=>{let s=o[d];return s?Array.from(s.keys()):[]},receiveGhosts:(d,s=[])=>{let H=d.uid,k=[],Y=o[H];if(!Y||s.length===0)return k;let A=[];for(let G=0;G<s.length;G++){let c=Y.get(s[G]);if(c)for(let y=0;y<c.length;y++)A.push(c[y]);}let E=0,T=false,O=null;for(;E<A.length;E++){if(e.shouldYield()){T=true;break}let G=ee(A[E],d,k);if(G){O=G,T=true,E++;break}}let v=()=>{if(k.length<=1)return k;let G=[],c=Object.create(null);for(let y=0;y<k.length;y++){let w=k[y];c[w]||(c[w]=true,G.push(w));}return G};return T?(async()=>{for(O&&await O,e.shouldYield()&&await e.yieldToMain();E<A.length;){let G=[],c=Math.min(E+M,A.length);for(;E<c;E++){let y=ee(A[E],d,k);y&&G.push(y);}G.length>0&&await Promise.all(G.map(async y=>{await y,e.shouldYield()&&await e.yieldToMain();})),e.shouldYield()&&await e.yieldToMain();}return v()})():v()},resolveGhosts:d=>{let s=d.uid,H=p[s];if(!H||H.length===0)return [];let k=[],Y=Object.create(null);for(let A=0;A<H.length;A++){let E=H[A];Y[E.key]||(Y[E.key]=[]),Y[E.key].push(E);}for(let A in Y){let E=Y[A],T=d.state[A],O,v=-1/0,G=false;for(let c=0;c<E.length;c++){let y=E[c];if(y.patch!==void 0&&(T=y.patch(T)),y.value!==void 0){let w=y.weight??1;w>=v&&(v=w,O=y.value,G=true);}}G&&(T=O);for(let c=0;c<E.length;c++){let y=E[c];if(y.delta!==void 0)switch(y.op||"add"){case "add":T=(typeof T=="number"?T:0)+y.delta;break;case "remove":T=Array.isArray(T)?T.filter(V=>V!==y.delta):T;break;case "intersect":T=Array.isArray(T)?T.filter(V=>y.delta.includes(V)):y.delta;break;case "union":{let V=Array.isArray(T)?T:[],q=Array.isArray(y.delta)?y.delta:[y.delta];T=[...new Set([...V,...q])];break}case "merge":{let V=typeof T=="object"&&T!==null&&!Array.isArray(T)?T:{},q=typeof y.delta=="object"&&y.delta!==null&&!Array.isArray(y.delta)?y.delta:{};T={...V,...q};break}}}Object.is(d.state[A],T)||(d.state[A]=T,k.push(A));}return p[s]=[],x--,k.length>0?k:[]},resetCounters:()=>{for(let d=0;d<o.length;d++){let s=o[d];if(s)for(let H of s.values())for(let k=0;k<H.length;k++)H[k].count=0;}}}}};function yt(g,e,t,r,i){let l=lt(),u=0,a=new Map,o=[],p=[],h=[],n=[],P=false,m=new Set,N=async()=>{let c=Array.from(m);if(m.clear(),"signalTrigger"in i&&typeof i.signalTrigger=="function")for(let y of c){let w=s(y);i.signalTrigger(w.dirtySignal);}else "emit"in i&&i.emit(c);},x=()=>{P||(P=true,requestAnimationFrame(()=>{try{for(;m.size>0;)N();}finally{P=false;}}));},{useEntangle:b,updateEntangleLevel:M,Turnstile:se}=ct({useEntangleStep:g.useEntangleStep},l,e.GetUidToLevelMap,d,s,H,{emit:r.emit,onError:r.callOnError}),{TaskRunner:U,CancelTask:_,stageValueFn:ee}=ut({useGreedy:g.useGreedy},e,{GetNodeByPath:d,GetNodeByUid:s,GetPathByUid:H,GetBucket:A,GetMaxUid:E,Turnstile:se},r,{requestUpdate:x,flushPathSet:m},l),z=c=>{throw new Error(`[MeshFlow] Duplicate Path: ${c}`)},C=c=>{a.has(c.path)&&z(String(c.path));let y=++u,w={path:c.path,getNode:ae=>d(ae)},V=(ae,de="value")=>{let me=ae({...w}),Ne=d(c.path);if(!Object.is(Ne.state[de],me)){if(t.createHistoryAction&&t.pushIntoHistory){let Te=t.createHistoryAction([{path:c.path,value:Ne.state[de]},{path:c.path,value:me}],Pe=>{let xe=d(Pe.path);xe.state[de]=Pe.value,T(Pe.path);});t.pushIntoHistory(Te);}Ne.state[de]=me,T(c.path);}},q=je({uid:y,type:c.type,path:c.path,state:c.state,meta:c.meta,nodeBucket:{},dirtySignal:"signalCreator"in i?i.signalCreator():void 0,notifyKeys:c.notifyKeys,dependOn:V});return a.set(q.path,y),h[y]=q.path,o[y]=q,q},te=c=>{a.has(c.path)&&z(String(c.path));let y=++u,w=je({uid:y,type:c.type,path:c.path,state:{},meta:c,nodeBucket:{},children:c.children});return a.set(w.path,y),p[y]=w,w};function d(c){let y=a.get(c),w=o[y];if(!w)throw Error("Wrong id");return w}function s(c){let y=o[c];if(!y)throw Error("Wrong id");return y}function H(c){return h[c]}function k(c){let y=a.get(c);return p[y]}function Y(c){return n.push(c)-1}function A(c){let y=n[c];if(!y)throw Error("Wrong id");return y}function E(){return u}let T=c=>{let y=d(c);if(!y)throw Error("Wrong id");m.add(y.uid),x();let w=e.GetNextDependency(y.uid);O(y.uid,w);};function O(c,y){U(c,y);}return {registerNode:C,registerGroupNode:te,GetNodeByPath:d,GetGroupByPath:k,notify:T,notifyAll:async()=>{Promise.resolve().then(async()=>{let c=e.GetDependencyOrder();if(!c||c.length===0)return;let y=c[0];try{U(null,y);}catch(w){throw r.callOnError(w),w}finally{x();}});},batchNotify:c=>{if(!c||c.length===0)return;if(t.createHistoryAction&&t.pushIntoHistory){let w=t.createHistoryAction([c.map(V=>({path:V.path,key:V.key,value:d(V.path).state[V.key]})),c.map(V=>({path:V.path,key:V.key,value:V.value}))],V=>{let q=new Set;V.forEach(ae=>{let de=d(ae.path);de.state[ae.key]=ae.value,m.add(ae.path),q.add(ae.uid);}),x(),q.size>0&&U(null,Array.from(q));});t.pushIntoHistory(w);}let y=new Set;c.forEach(w=>{let V=d(w.path);V.state[w.key]=w.value,m.add(V.uid),y.add(V.uid);}),x(),y.size>0&&U(null,Array.from(y));},useEntangle:b,updateEntangleLevel:M,SetBucket:Y,GetBucket:A,CancelTask:_,stageValueFn:ee,UITrigger:i,UidToNodeMap:o}}function dt(g,e){let t=false,r=false,i=false,l=false,u=new Map,a=[],o=[],p=[],h=[],n=[],P=[],m=[],S=new Map,{GetNextDependency:x,GetPrevDependency:b,GetAllPrevDependency:M,GetAllNextDependency:se,rebuildDirectDependencyMaps:U}=nt(()=>a,()=>p,()=>P,()=>n),_={},ee={};if(e.modules.useHistory){let j=e.modules.useHistory,f;j.isMeshModuleInited?f=j:f=j();let{Undo:W,Redo:D,PushIntoHistory:Q,CreateHistoryAction:le,updateUndoSize:L,updateRedoSize:ne}=f();_.pushIntoHistory=Q,_.createHistoryAction=le,ee={Undo:W,Redo:D,updateUndoSize:L,updateRedoSize:ne};}let z=!!e.modules.useMeshRenderGate,C={};if(z){let j=e.modules.useMeshRenderGate.isMeshModuleInited,f=e.modules.useMeshRenderGate;C=(j?f:f())(()=>ae);}let{onError:te,callOnError:d}=st(),{onSuccess:s,callOnSuccess:H}=at(),{onStart:k,callOnStart:Y}=it(),{emit:A,usePlugin:E,destroyPlugin:T}=ot(),{SetTrace:O,useTrace:v}=et(),G=v();E(G);let c=z?{...C}:{...e.UITrigger},y=yt({useGreedy:e.config.useGreedy,useEntangleStep:e.config.useEntangleStep||100},{GetDependencyOrder:()=>m,GetAllNextDependency:se,GetNextDependency:x,GetPrevDependency:b,GetAllPrevDependency:M,GetUidToLevelMap:()=>S},_,{callOnError:d,callOnSuccess:H,callOnStart:Y,emit:A},c),{SetBucket:w,GetBucket:V,GetGroupByPath:q,GetNodeByPath:ae,notifyAll:de,useEntangle:me,updateEntangleLevel:Ne,CancelTask:Te,stageValueFn:Pe}=y;z&&C.init();let xe={};if(e.modules.useInternalForm){let{uiSchema:j,GetFormData:f}=e.modules.useInternalForm(y,g);xe={uiSchema:j,GetFormData:f};}let Oe={};if(e.modules.useSchemaValidators){let{SetValidators:j}=e.modules.useSchemaValidators(ae);Oe={SetValidators:j};}let{SetRule:ke,SetRules:De}=Ze(ae,w,V,a,p,o,h,u),{SetStrategy:be}=Je(ae,V),oe=rt(a,u),ie=()=>{let j=oe();m=j.steps,S=j.levelMap,Re();},Re=()=>{i&&(Ne(),i=false);},Se=()=>{l||(l=true,Promise.resolve().then(Re).finally(()=>{l=false;}));},Ie=()=>{r||(r=true,Promise.resolve().then(()=>{if(ie(),t){let{directNextMap:j,directPrevMap:f}=U(m.flat());n=j,P=f;}}).finally(()=>{r=false,t=false;}));};return {SetRule:(j,f,W,D)=>{ke(j,f,W,D),t=true,Ie();},SetRules:(j,f,W,D)=>{De(j,f,W,D),t=true,Ie();},SetStrategy:be,useEntangle:j=>{me(j),i=true,Se();},SetTrace:O,usePlugin:E,SetValue:(j,f,W)=>{Re(),ae(j).dependOn(()=>W,f);},GetValue:(j,f="value")=>ae(j).proxy[f],SetValues:j=>{Re(),y.batchNotify(j);},GetGroupByPath:q,notifyAll:async()=>{ie(),await de();},GetAllDependency:()=>a,GetDependencyOrder:()=>m,historyExports:ee,formExports:xe,validatorExports:Oe,batchRenderExport:C,hasRenderGate:()=>z,onError:te,onSuccess:s,onStart:k,scheduler:y,destroyPlugin:T,CancelTask:Te,StageValue:(j,f,W)=>{let D=ae(j);Pe(D.uid,f,W);}}}var Ke=new Map,ht=(g,e,t)=>{try{if(Ke.has(g))throw Error("engineID repeated");let r=dt(e,{config:t.config||{useGreedy:!1},UITrigger:t.UITrigger,modules:t.modules??{},plugins:{}}),{SetRule:i,SetRules:l,SetValues:u,SetStrategy:a,SetValue:o,GetValue:p,usePlugin:h,useEntangle:n,GetGroupByPath:P,notifyAll:m,SetTrace:S,GetAllDependency:N,GetDependencyOrder:x,historyExports:b,formExports:M,validatorExports:se,batchRenderExport:U,hasRenderGate:_,onError:ee,onSuccess:z,onStart:C,scheduler:te,destroyPlugin:d,CancelTask:s,StageValue:H}=r,k={config:{SetRule:i,SetRules:l,SetStrategy:a,notifyAll:m,SetTrace:S,usePlugin:h,hasRenderGate:_,useEntangle:n},data:{SetValue:o,GetValue:p,SetValues:u,GetGroupByPath:P,StageValue:H},dependency:{GetAllDependency:N,GetDependencyOrder:x},hooks:{onError:ee,onSuccess:z,onStart:C}},Y=(T,O,v)=>{!O||typeof O!="object"||Object.keys(O).forEach(G=>{let c=O[G];if(typeof c=="object"&&c!==null)T[G]=T[G]||{},Y(T[G],c,v);else if(typeof c=="function"){let y=G;if(y==="useMeshRenderGate")y="render";else if(y.startsWith("use")){let w=y.slice(3);y=w.charAt(0).toLowerCase()+w.slice(1);}G==="useHistory"&&v.exports.history&&Object.keys(v.exports.history).length>0?T[y]=v.exports.history:G==="useInternalForm"&&v.exports.form&&Object.keys(v.exports.form).length>0?T[y]=v.exports.form:G==="useSchemaValidators"&&v.exports.validator&&Object.keys(v.exports.validator).length>0?T[y]=v.exports.validator:G==="useMeshRenderGate"&&v.exports.render?T[y]=v.exports.render:T[y]=c(v.scheduler,v.Schema);}});},A={...k,destroyPlugin:d,CancelTask:s,modules:{}},E=t.modules;return E&&Y(A.modules,E,{scheduler:te,Schema:e,exports:{history:b,form:M,validator:se,render:U}}),Ke.set(g,A),A}catch(r){throw Error(r)}},xn=()=>(g,e,t)=>ht(g,e,t),An=g=>{let e=Ke.get(g);if(!e)throw Error("Engine not found.");return e},vn=g=>{let e=Ke.get(g);e.destroyPlugin(),e.CancelTask(),Ke.delete(g);};exports.DefaultStrategy=_e;exports.MeshFlowEventsName=Ce;exports.TriggerCause=Le;exports.deleteEngine=vn;exports.useEngine=An;exports.useMeshFlow=ht;exports.useMeshFlowDefiner=xn;exports.useScheduler=yt;
|
package/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var Ce=(P=>(P[P.FlowStart=0]="FlowStart",P[P.FlowSuccess=1]="FlowSuccess",P[P.FlowEnd=2]="FlowEnd",P[P.FlowAbort=3]="FlowAbort",P[P.FlowWait=4]="FlowWait",P[P.FlowFire=5]="FlowFire",P[P.NodeStart=6]="NodeStart",P[P.NodeSuccess=7]="NodeSuccess",P[P.NodeProcessing=8]="NodeProcessing",P[P.NodeError=9]="NodeError",P[P.NodePending=10]="NodePending",P[P.NodeRevive=11]="NodeRevive",P[P.NodeIntercept=12]="NodeIntercept",P[P.NodeRelease=13]="NodeRelease",P[P.NodeStagnate=14]="NodeStagnate",P[P.NodeBucketSuccess=15]="NodeBucketSuccess",P[P.EntangleWarn=16]="EntangleWarn",P[P.EntangleBlocked=17]="EntangleBlocked",P))(Ce||{}),Ue=(r=>(r[r.CAUSALITY=0]="CAUSALITY",r[r.INVERSION=1]="INVERSION",r[r.REPERCUSSION=2]="REPERCUSSION",r))(Ue||{});var Ve=(r=>(r.OR="OR",r.PRIORITY="PRIORITY",r.MERGE="MERGE",r))(Ve||{});var Le=class{computedRules=[];getRuleResult(e,t,r){if(e.entityId==="__base__")return e.logic(t);if(!(!e._hasRun||r(e.triggerUids)))return e._lastResult;let i=e.logic(t);return i instanceof Promise?i.then(l=>(e._lastResult=l,e._hasRun=true,l)):(e._lastResult=i,e._hasRun=true,i)}store={OR:(e,t,r)=>{let o,i,l=this.computedRules;for(let s=0;s<l.length;s++){let a=l[s],p=this.getRuleResult(a,e,r);if(p instanceof Promise)return (async()=>{let n=await p;if(a.entityId==="__base__"?i=n:n&&(o=n),typeof o>"u")for(let M=s+1;M<l.length;M++){let f=l[M],m=this.getRuleResult(f,e,r),b=m instanceof Promise?await m:m;if(f.entityId==="__base__"){i=b;continue}if(b){o=f.value;break}}return typeof o>"u"&&(o=i),{res:o,version:t}})();let h=p;if(a.entityId==="__base__"){i=h;continue}if(h){o=a.value;break}}return typeof o>"u"&&(o=i),{res:o,version:t}},PRIORITY:(e,t,r)=>{let o,i=this.computedRules;for(let l=0;l<i.length;l++){let s=i[l],a=this.getRuleResult(s,e,r);if(a instanceof Promise)return (async()=>{let p=await a;if(p!==void 0)return {res:s.value!==void 0?s.value:p,version:t};for(let h=l+1;h<i.length;h++){let n=i[h],M=this.getRuleResult(n,e,r),f=M instanceof Promise?await M:M;if(f!==void 0)return {res:f,version:t}}return {res:void 0,version:t}})();if(a!==void 0)return {res:s.value!==void 0?s.value:a,version:t}}return {res:o,version:t}},MERGE:(e,t,r)=>{let o,i,l=this.computedRules,s=(p,h)=>p===void 0?h:h===void 0?p:Array.isArray(p)&&Array.isArray(h)?[...h,...p]:typeof p=="object"&&typeof h=="object"?{...h,...p}:p;for(let p=0;p<l.length;p++){let h=l[p],n=this.getRuleResult(h,e,r);if(n instanceof Promise)return (async()=>{let f=await n,m=(S,R)=>{if(S.entityId==="__base__")i=s(i,R);else if(R){let P=S.value!==void 0?S.value:R;o=s(o,P);}};m(h,f);for(let S=p+1;S<l.length;S++){let R=l[S],P=this.getRuleResult(R,e,r),te=P instanceof Promise?await P:P;m(R,te);}return {res:s(o,i),version:t}})();let M=n;if(h.entityId==="__base__"){i=s(i,M);continue}if(M){let f=h.value!==void 0?h.value:M;o=s(o,f);}}return {res:s(o,i),version:t}}};CurrentStrategy=()=>{};CurrentStrategyType="PRIORITY";getRules=()=>{};constructor(e){this.getRules=e,this.CurrentStrategy=this.store.PRIORITY,this.updateComputedRules();}updateComputedRules(){let e=this.getRules();this.CurrentStrategyType==="PRIORITY"||this.CurrentStrategyType==="MERGE"?this.computedRules=Array.from(e.values()).map(t=>Array.from(t)).flat().sort((t,r)=>r.priority-t.priority):this.computedRules=Array.from(e.values()).map(t=>Array.from(t)).flat();}setStrategy(e){this.CurrentStrategyType=e,this.CurrentStrategy=this.store[e],this.updateComputedRules();}evaluate(e,t,r){return this.CurrentStrategy(e,t,r)}},Ae=class{path;strategy;contract;rules=new Map;isValue=false;id=0;cache=void 0;pendingPromise=null;version=0;deps=new Map;_forceNotify=false;promiseToken=null;useCache=true;effectArray=[];constructor(e,t,r){let o=()=>this.rules;this.strategy=new Le(o),this.path=r,this.isValue=t==="value",this.contract=this.inferType(e),this.cache=e,this.setRule({priority:0,entityId:"__base__",logic:()=>e});}setUseCache(e){this.useCache=e;}forceNotify(){this._forceNotify=true;}isForceNotify(){return this._forceNotify}setStrategy(e){this.strategy.setStrategy(e);}setDefaultRule(e){let t=new Set;t.add(e),this.rules.set(-1,t);}setRules(e,t){t&&this.updateDeps(t);let r=++this.id,o={...e,entityId:r};for(let i of e.triggerUids)this.rules.has(i)||this.rules.set(i,new Set),this.rules.get(i).add(o);return this.strategy.updateComputedRules(),()=>{for(let i of e.triggerUids){let l=this.rules.get(i);l&&(l.delete(o),l.size===0&&(this.rules.delete(i),this.deps.delete(i)));}this.strategy.updateComputedRules();}}updateDeps(e){for(let[t,r,o]of e){if(r.length==0)continue;let i=this.deps.get(t)||Object.create(null);for(let l of r)i[l]=o[l];this.deps.set(t,i);}}setRule(e,t){if(t&&this.updateDeps(t),typeof e.entityId=="string"){this.setDefaultRule(e);return}let r=++this.id,o={...e,entityId:r};if(e)for(let i of e.triggerUids)this.rules.has(i)||this.rules.set(i,new Set),this.rules.get(i).add(o);return this.strategy.updateComputedRules(),()=>{for(let i of e.triggerUids){let l=this.rules.get(i);l&&(l.delete(o),l.size===0&&(this.rules.delete(i),this.deps.delete(i)));}this.strategy.updateComputedRules();}}setSideEffect(e){this.effectArray.push(e);}getSideEffect(){return [...this.effectArray]}evaluate(e){let t=null;if(e.GetToken&&(t=e.GetToken()),this.pendingPromise&&this.promiseToken!==t&&(this.pendingPromise=null,this.promiseToken=null),this.pendingPromise)return this.pendingPromise;let r=false;if(typeof e.triggerUid=="number"){r=true,this.deps.size==0&&(r=false);for(let[s,a]of this.deps.entries()){let p=e.getStateByUid(s);if(!p){r=false;break}for(let h in a){let n=a[h],M=p[h];if(typeof n=="object"&&n!==null){r=false;break}if(n!==M){r=false;break}}if(!r)break}}if(r&&this.useCache)return this.cache;this.promiseToken=t;let o=++this.version,i=s=>{if(!s||s.length===0)return true;for(let a of s){let p=this.deps.get(a);if(!p)return true;let h=e.getProxyByUid(a);if(!h)return true;for(let n in p){let M=p[n],f=h[n];if(typeof M=="object"&&M!==null||M!==f)return true}}return false},l=this.strategy.evaluate(e,o,i);if(!(l instanceof Promise)){let{res:s,version:a}=l;return this.finalizeSync(s,a,e,t)}return this.pendingPromise=(async()=>{try{let{res:s,version:a}=await l;return this.finalizeSync(s,a,e,t)}catch(s){throw {path:this.path,error:s}}finally{this.promiseToken===t&&(this.pendingPromise=null,this.promiseToken=null);}})(),this.pendingPromise}finalizeSync(e,t,r,o){return o!==this.promiseToken||t<this.version?this.cache:(this.cache=e,this.deps.forEach((i,l)=>{let s=r.getProxyByUid(l);if(!s)return;let a=Object.keys(i);for(let p of a)i[p]=s[p];}),e)}inferType(e){return Array.isArray(e)?"array":typeof e}};var We=(g,e,t)=>{let o=i=>{let l=t.triggerUids.map(p=>{let h=i.getProxyByUid(p);if(t.triggerKeys.length===0)return h;let n={};return t.triggerKeys.forEach(M=>{n[M]=h[M];}),n}),s=Object.create(null);return Object.defineProperty(s,"triggerTargets",{get:()=>l}),Object.defineProperty(s,"affectedTatget",{get:()=>i.getProxyByUid(g)[e]}),t.logic({slot:s})};return {value:t.value,targetUid:g,triggerUids:t.triggerUids,priority:t.priority??10,logic:o}},ze=(g,e,t,r,o,i,l,s)=>{if(!g)throw Error();let a=g,p=(M,f)=>{typeof r[M]>"u"&&(r[M]=[],i[M]=new Set),i[M].add(f),i[M].size>r[M].length&&r[M].push(f),typeof o[f]>"u"&&(o[f]=[],l[f]=new Set),l[f].add(M),l[f].size>o[f].length&&o[f].push(M);};return {SetRule:(M,f,m,b)=>{let S=a(M),R=a(f),P=b.triggerKeys||[],te=s.get(R.uid)||0,_=s.get(S.uid)||0;te+=1,_+=1,s.set(R.uid,te),s.set(S.uid,_);let Z=We(R.uid,m,{...b,triggerUids:[S.uid],triggerKeys:P}),W=[M].map(L=>{let c=a(L);return [c.uid,P,c.proxy]});if(p(S.uid,R.uid),typeof R.nodeBucket[m]=="number"){let L=t(R.nodeBucket[m]);L.setRule(Z,W),b.effect&&L.setSideEffect({fn:b.effect,args:b.effectArgs?b.effectArgs:[m]});}else {let L=R.meta[m],c=new Ae(L,m,f);c.setRule(Z,W),b.effect&&c.setSideEffect({fn:b.effect,args:b.effectArgs?b.effectArgs:[m]}),R.nodeBucket[m]=e(c);}R.state[m]=R.meta[m];let y=t(R.nodeBucket[m]);b.forceNotify&&y.forceNotify(),b.cacheStrategy=="none"&&y.setUseCache(false);},SetRules:(M,f,m,b)=>{let S=a(f),R=s.get(S.uid)||0;R+=1,s.set(S.uid,R);let P=[];for(let y of M){let L=a(y);P.push(L.uid);let c=s.get(L.uid)||0;c+=1,s.set(L.uid,c),p(L.uid,S.uid);}let te=b.triggerKeys||[],_=We(S.uid,m,{...b,triggerUids:P,triggerKeys:te}),Z=M.map(y=>{let L=a(y);return [L.uid,te,L.state]});if(typeof S.nodeBucket[m]=="number"){let y=t(S.nodeBucket[m]);y.setRules(_,Z),b.effect&&y.setSideEffect({fn:b.effect,args:b.effectArgs?b.effectArgs:[m]});}else {let y=S.meta[m],L=new Ae(y,m,f);L.setRules(_,Z),b.effect&&L.setSideEffect({fn:b.effect,args:b.effectArgs?b.effectArgs:[m]}),S.nodeBucket[m]=e(L);}S.state[m]=S.meta[m];let W=t(S.nodeBucket[m]);b.forceNotify&&W.forceNotify(),b.cacheStrategy=="none"&&W.setUseCache(false);}}};var qe=(g,e)=>{let t=g||void 0;if(!t)throw Error();return {SetStrategy:(o,i,l)=>{let s=t(o);e(s.nodeBucket[i]).setStrategy(l);}}};function Qe(){let g=new Map,e=new Map,t=new Set,r=(l,s)=>{g.set(l,s);let a=e.get(l);a&&a(s);};return {SetTrace:(l,s)=>{e.set(l,s);let a=g.get(l)||"idle";return s(a),{cancel:()=>{e.delete(l);}}},useTrace:()=>({apply:s=>{s.on(0,()=>{t.forEach(a=>r(a,"idle")),t.clear(),g.clear();}),s.on(13,({path:a,type:p})=>{(p==1||p==2)&&(t.add(a),r(a,"pending"));}),s.on(10,({path:a})=>{t.add(a),(!g.has(a)||g.get(a)==="idle")&&r(a,"pending");}),s.on(6,({path:a})=>{t.add(a),r(a,"calculating");}),s.on(7,({path:a})=>{r(a,"calculated");}),s.on(12,({path:a,type:p})=>{p==3&&r(a,"calculating"),p==6&&r(a,"idle");}),s.on(14,({path:a})=>{r(a,"pending");}),s.on(9,({path:a})=>r(a,"error"));}})}}function Xe(g,e,t,r){return {GetNextDependency:h=>r()[h]||[],GetPrevDependency:h=>t()[h]||[],GetAllPrevDependency:h=>e()[h]||[],GetAllNextDependency:h=>g()[h]||[],rebuildDirectDependencyMaps:h=>{let n=[],M=[],f=g();for(let m of h){let b=f[m]||[];n[m]=b;for(let S=0;S<b.length;S++){let R=b[S];typeof M[R]>"u"&&(M[R]=[]),M[R].push(m);}}return {directNextMap:n,directPrevMap:M}}}}function Ze(g,e){let t=o=>{let i=[],l=[],s=new Map,a=o.size,p=0,h=0;for(let[n,M]of o)M===0&&l.push(n);if(l.length===0&&a>0)throw Error("Circular dependency detected");for(;l.length>0;){i.push([...l]);let n=[];for(let M of l){p++,s.set(M,h);let f=g[M];if(f)for(let m of f){let b=o.get(m)-1;o.set(m,b),b===0&&n.push(m);}}l=n,h++;}if(p<a)throw Error("Circular dependency detected");return {steps:i,levelMap:s}};return ()=>{let o=new Map;for(let i of e.keys()){let l=g[i]||[];o.has(i)||o.set(i,0);for(let s of l){let a=o.get(s)||0;o.set(s,++a);}}return t(o)}}var Ne=()=>{let g=[];return {on:e=>(g.push(e),()=>{let t=g.indexOf(e);t>-1&&g.splice(t,1);}),call:e=>g.forEach(t=>{t(e);})}};function Je(){let{on:g,call:e}=Ne();return {onError:g,callOnError:e}}function et(){let{on:g,call:e}=Ne();return {onSuccess:g,callOnSuccess:e}}var tt=()=>{let g=new Set,e=new Map,t=new Set,r=(s,a)=>{e.get(s)?.forEach(p=>p(a));},o=(s,a)=>(e.has(s)||e.set(s,new Set),e.get(s).add(a),()=>e.get(s)?.delete(a));return {usePlugin:s=>{let a=new Set,p=(n,M)=>{let f=o(n,M);return a.add(f),f};s.apply({on:p}),g.add(s);let h=()=>{a.forEach(n=>n()),a.clear(),g.delete(s),t.delete(h);};return t.add(h),h},emit:r,destroyPlugin:()=>{t.forEach(s=>s()),t.clear(),e.clear(),g.clear();}}};function nt(){let{on:g,call:e}=Ne();return {onStart:g,callOnStart:e}}var rt=(g={frameQuota:12})=>{let e=performance.now(),t=0,r=false,o=()=>!!navigator?.scheduling?.isInputPending?.({includeContinuous:true});return {getIsFirstFrame:()=>r,reset(){e=performance.now(),t=0,r=true;},shouldYield(){return !r&&(++t&15)!==0?false:!!(performance.now()-e>g.frameQuota||o())},async yieldToMain(){return new Promise(i=>{_e(()=>{e=performance.now(),t=0,r&&(r=false),i();});})}}},_e=g=>{let{port1:e,port2:t}=new MessageChannel;e.onmessage=g,t.postMessage(null);};function st(g,e,t,r,o,i){let l=new Map,s=g.useGreedy,a=null,p=()=>{l.clear();},h={path:null,level:0,targetLevel:0,currentLevel:0,pendingParentsCount:0,active:0,pending:0,blocked:0,nums:0,asyncNums:0},n={path:null,type:0,triggerPath:null,calledBy:0,key:null,value:null,error:null,token:null,duration:null,detail:h};return {TaskRunner:async(f,m)=>{let S=Symbol("token"),R=typeof f=="number"?f:"__NOTIFY_ALL__";l.set(R,S),a=S;let P=false,te=false;i.reset();let _=t.GetMaxUid()+3,Z=new Array(_).fill(0),W=0,y=new Uint8Array(_),L=new Int32Array(_),c=new Int32Array(_),A=new Int32Array(_*2),w=0,E=0,H=new Int32Array(_*2),F=0,O=0,T=new Int32Array(_*2),K=0,U=0;m.forEach(N=>{Z[N]=1,e.GetAllNextDependency(N).forEach(se=>{Z[se]=1;});});let k=new Array(_).fill(null),d=[],u=t.Turnstile,B=new Array(_).fill(null).map(()=>[]),j=new Array(_).fill(null).map(()=>[]),ne=u.volatileLevels.size>0,oe=ne?u.hasObserver:N=>false,re=ne?u.receiveGhosts:()=>[],Se=ne?u.resolveGhosts:()=>[],me=ne?u.getTriggerKeys:()=>[],Re=u?.volatileLevels||new Set,de=-1,J=e.GetUidToLevelMap(),ie=0,Ee=0,Pe=N=>{e.GetAllNextDependency(N).forEach(ae=>{let v=J.get(ae)||0;v>Ee&&(Ee=v);});},Ge=new Set;typeof f=="number"&&(y[f]|=16,Ge.add(f),Pe(f),o.flushPathSet.add(f));let we=typeof f=="number"?[f]:m;i.shouldYield()&&(o.requestUpdate(),await i.yieldToMain());let Ie=we.map(async N=>{if(oe(N)){let se=t.GetNodeByUid(N),ae=me(N);if(ae.length>0){let v=re(se,ae);return v instanceof Promise&&(v=await v),{seed:N,hitTargets:v}}}return {seed:N,hitTargets:[]}});if((await Promise.all(Ie)).forEach(({seed:N,hitTargets:se})=>{if(se&&se.length>0){d.push(...se);let ae=J.get(N)||0;de=Math.max(de,ae);}}),(d.length>0||we.length>1)&&(o.requestUpdate(),await i.yieldToMain(),l.get(R)!==S))return;let Ke=d.length>0;m.forEach(N=>{if(!Ge.has(N))if(Ke){let se=J.get(N)??0;c[N]=se,y[N]&4||(y[N]|=4,T[K++]=N,U++);let ae=t.GetPathByUid(N);n.path=ae,n.type=2,r.emit(14,n);}else y[N]&1||(y[N]|=1,A[w++]=N,E++),Pe(N);}),typeof f=="number"?ie=J.get(f)??0:ie=Math.min(...m.map(N=>J.get(N)??0));let Oe=performance.now(),De=typeof R=="number"?t.GetPathByUid(R):"__NOTIFY_ALL__";n.path=De,n.token=S,r.emit(0,n),r.callOnStart({path:De});let Be=false,Ye=30,je=(N,se)=>{let ae=false,v=false,Y=false,V=t.GetNodeByUid(N),$=t.GetPathByUid(N),q=V.calledBy,I=B[N];I.length=0;let C=oe(N),G=C?me(N):[],D=x=>{C&&(G.length===0||G.includes(x))&&I.push(x);},le=j[N];le.length=0;let ce=false;if(V.calledBy===1){ce=true,ae=true,o.flushPathSet.add(N);let x=k[N];x&&(I.push(...x),k[N]=null);}let ye=(x,X)=>{let ee=J.get(x)??0,pe=t.GetNodeByUid(x),Q=t.GetPathByUid(x),he=(q===1||q===2)&&ee<=de;he&&y[x]&16&&(y[x]&=-17,n.path=Q,n.triggerPath=$,r.emit(11,n));let ue=0;if(!(y[x]&49)){if(y[x]&2)ue=L[x]-1;else {if(ee>ie&&O>Ye){c[x]=ee,y[x]&4||(y[x]|=4,T[K++]=x,U++),n.path=Q,n.type=7,r.emit(12,n);return}let Me=e.GetPrevDependency(x),z=0;for(let ge of Me){if(y[ge]&16)continue;(J.get(ge)??0)>ie&&z++;}ue=z;}if(ue<=0){let Me=(y[x]&1)!==0,z=(y[x]&32)!==0;if(Me||z){n.path=Q,n.type=z?3:3.1,r.emit(12,n);return}y[x]&2&&(y[x]&=-3,O--),he?pe.calledBy=2:pe.calledBy=0,y[x]&1||(y[x]|=1,A[w++]=x,E++),n.path=Q,n.type=X,h.path=$,r.emit(13,n);}else L[x]=ue,y[x]&2||(y[x]|=2,H[F++]=x,O++);}},Te=(x=[])=>{if(l.get(R)!==S)return;if(x.length){let ee={},pe=V.proxy;for(let Q of x){let he=(Q.args||[]).reduce((ue,Me)=>(ue[Me]=pe[Me],ue),{});try{let ue=Q.fn(he);ue&&typeof ue=="object"&&Object.assign(ee,ue);}catch(ue){}}for(let Q in ee)if(Q in V.state)Object.is(V.state[Q],ee[Q])||(V.state[Q]=ee[Q],D(Q),ae=true,(V.notifyKeys.size===0||V.notifyKeys.has(Q))&&(v=true));else throw {error:`wrong effect in ${String(V.path)}`}}ae&&o.flushPathSet.add(N);let X=(ee=[])=>{if(l.get(R)!==S)return;ee&&ee.length>0&&(d.push(...ee),de=Math.max(de,J.get(N)||0)),I.length=0,n.path=$,n.calledBy=V.calledBy,r.emit(7,n),y[N]|=16;let pe=e.GetNextDependency(N);(v||Y)&&(Pe(N),e.GetAllNextDependency(N).forEach(ge=>{Z[ge]=1;}));let Q=t.GetNodeByUid(N),he=J.get(N)??0,ue=Re.has(he)||d.length>0;for(let z of pe){let ge=J.get(z)??0,be=t.GetPathByUid(z);if(ue&&ge>=he){c[z]=ge,y[z]&4||(y[z]|=4,T[K++]=z,U++),n.path=be,n.type=2,r.emit(14,n);continue}if(y[z]&16){n.path=be,n.type=2,r.emit(12,n);continue}if(y[z]&32||(y[z]&1)!==0){n.path=be,n.type=y[z]&32?3:3.1,r.emit(12,n);continue}if(v||Y)ye(z,1);else if(y[z]&2)ye(z,2);else {let lt=J.get(z);c[z]=lt,y[z]&4||(y[z]|=4,T[K++]=z,U++,n.path=be,n.type=1,r.emit(14,n));}}y[N]&32&&(y[N]&=-33,W--),Q.calledBy=0,(()=>{if(!P){P=true;let z=W,ge=E,be=O;n.path=$,n.type=1,h.active=z,h.pending=ge,h.blocked=be,r.emit(5,n),ke();}})();};if(oe(N)&&I.length>0){let ee=re(V,I);ee instanceof Promise?ee.then(X).catch(Fe):X(ee);}else X([]);},Fe=x=>{n.path=$,n.error=x,r.emit(9,n);let X=Symbol("abort");l.set(R,X),w=0,E=0,F=0,O=0,K=0,U=0,y.fill(0),W=0,k.fill(null),r.callOnError(x);},fe=(x,X)=>{x!==V.state[X]&&(V.state[X]=x,ae=true,D(String(X)),n.path=$,n.key=X,n.value=x,n.calledBy=V.calledBy,r.emit(15,n),(V.notifyKeys.size===0||V.notifyKeys.has(X))&&(v=true)),t.GetBucket(V.nodeBucket[X]).isForceNotify()&&(Y=true),(v||Y)&&Pe(N);};n.path=$,n.calledBy=V.calledBy,r.emit(6,n);try{let x=[];for(let X in V.nodeBucket){let ee=t.GetBucket(V.nodeBucket[X]);if(x.push(...ee.getSideEffect()),ce){r.emit(15,{path:$,key:String(X),value:V.state[X],calledBy:V.calledBy}),ee.isForceNotify()&&(Y=!0),(V.notifyKeys.size===0||V.notifyKeys.has(X))&&Pe(N);continue}let pe=ee.evaluate({affectKey:X,triggerUid:se,getProxyByUid:Q=>t.GetNodeByUid(Q).proxy,getStateByUid:Q=>t.GetNodeByUid(Q).state,GetToken:()=>S});if(pe instanceof Promise){let Q=pe.then(he=>{l.get(R)===S&&fe(he,X);});le.push(Q);}else fe(pe,X);}if(le.length>0)return Promise.all(le).then(()=>{Te(x);}).catch(Fe);Te(x);return}catch(x){Fe(x);}},ke=async()=>{if(l.get(R)!==S){P=false;return}P=true;let N=i.getIsFirstFrame(),se=0,ae=()=>30,v=0,Y=ae();try{for(;l.get(R)===S;){let V=v>=Y,$=i.shouldYield();if(V||$){if(v>0&&(se++,(N||se%2===0)&&o.requestUpdate()),await i.yieldToMain(),l.get(R)!==S)break;v=0,N=i.getIsFirstFrame();}if(E>0&&W<40){let q=w,I=0;for(let C=0;C<q;C++){let G=A[C];if((y[G]&1)===0)continue;if(W>=40||v>=Y||i.shouldYield()){for(let fe=C;fe<w;fe++){let x=A[fe];y[x]&1&&(A[I++]=x);}w=I,E=I;break}let D=t.GetNodeByUid(G),le=t.GetPathByUid(G),ce=J.get(G)??0,ye=e.GetPrevDependency(G),Te=ye.length>1;if((!s||Te)&&ce>ie){y[G]&=-2,E--;let fe=ye.filter(x=>Z[x]===1&&(y[x]&16)===0).length;L[G]=fe||0,y[G]&2||(y[G]|=2,H[F++]=G,O++),n.path=le,n.type=fe>0?4:5,h.targetLevel=ce,h.currentLevel=ie,h.pendingParentsCount=fe,r.emit(12,n);continue}y[G]&=-2,E--,(y[G]&32)===0&&(y[G]|=32,W++),n.path=le,n.calledBy=D.calledBy,r.emit(8,n),je(G,f),v++;}if(w>q){for(let C=q;C<w;C++){let G=A[C];y[G]&1&&(A[I++]=G);}w=I,E=w;}else w=I;if(E>0&&W<40)continue}if(v<Y&&s&&O>0&&W<40){let q=!1,I=0,C=0;for(let G=0;G<F;G++){let D=H[G];if((y[D]&2)===0)continue;if(L[D]<=0&&I<Y){let ce=J.get(D)??0,ye=e.GetPrevDependency(D);if(ce<=ie||ye.length<=1){y[D]&=-3,O--,y[D]&1||(y[D]|=1,A[w++]=D,E++),I++,q=!0;let Te=t.GetPathByUid(D);n.path=Te,n.type=4,r.emit(13,n);continue}}H[C++]=D;}if(F=C,I>0)continue;if(q){if(i.shouldYield()&&(await i.yieldToMain(),l.get(R)!==S))break;continue}}if(W===0&&E===0){if(u.inFlightCount>0)break;if(d.length>0){let I=!1,C=ie,G=Array.from(new Set(d));d.length=0;for(let D of G){let le=t.GetNodeByUid(D),ce=Se(le);if(ce&&ce.length>0){I=!0,le.calledBy=1,k[D]=ce,y[D]&=-17,y[D]&2&&(y[D]&=-3,O--),y[D]&1||(y[D]|=1,A[w++]=D,E++);let ye=J.get(le.uid)??0;ye<C&&(C=ye),Pe(le.uid),o.flushPathSet.add(le.uid);}}if(I){if(C<ie&&(ie=C),o.requestUpdate(),i.shouldYield()&&(await i.yieldToMain(),l.get(R)!==S))break;continue}}let q=1/0;for(let I=0;I<K;I++){let C=T[I];if(y[C]&4){let G=c[C];G<q&&(q=G);}}for(let I=0;I<F;I++){let C=H[I];if(y[C]&2){let G=J.get(C)??0;G>ie&&G<q&&(q=G);}}if(q!==1/0&&q<=Ee){ie=q;let I=0;for(let G=0;G<K;G++){let D=T[G];y[D]&4&&(c[D]===q?(y[D]&=-5,U--,y[D]&1||(y[D]|=1,A[w++]=D,E++)):T[I++]=D);}K=I;let C=0;for(let G=0;G<F;G++){let D=H[G];if(y[D]&2)if((J.get(D)??0)===q){y[D]&=-3,O--,y[D]&1||(y[D]|=1,A[w++]=D,E++);let ce=t.GetPathByUid(D);n.path=ce,n.type=3,h.level=q,r.emit(13,n);}else H[C++]=D;}F=C;continue}else {for(let I=0;I<K;I++){let C=T[I];if(y[C]&4){y[C]|=16;let G=t.GetPathByUid(C);n.path=G,n.type=6,r.emit(12,n);}}K=0,U=0;for(let I=0;I<F;I++){let C=H[I];if(y[C]&2){y[C]|=16;let G=t.GetPathByUid(C);n.path=G,n.type=6,r.emit(12,n);}}F=0,O=0;break}}E>0&&W>=40&&(n.type=2,r.emit(4,n));break}}finally{P=false;let V=W+O+E,$=u.inFlightCount||0;if(!(a===S)){n.token=S,r.emit(3,n);return}if(o.requestUpdate(),V===0&&$===0){if(l.get(R)===S&&!Be){Be=true,n.type=1,r.emit(2,n),u.resetCounters(),k.fill(null);let I=performance.now();de=-1,l.delete(R),n.token=S,n.duration=(I-Oe).toFixed(2.1)+"ms",r.emit(1,n),Promise.resolve().then(()=>{r.callOnSuccess();});}}else {let I=V===0&&$>0?3:1;if(n.type=I,h.nums=W,h.asyncNums=$,r.emit(4,n),$>0&&!te){te=true;let C=()=>{a===S&&(u.inFlightCount,u.inFlightCount===0?_e(()=>{u.inFlightCount===0?ke():requestAnimationFrame(C);}):requestAnimationFrame(C));};requestAnimationFrame(C);}}}};ke();},CancelTask:p}}function He(g){let{path:e,uid:t,type:r,meta:o,dirtySignal:i,state:l}=g,s=null,a=["path","uid","type","dependOn","nodeBucket"],h={path:e,uid:t,type:r,meta:o,dirtySignal:i,createView:(n={})=>{if(s&&Object.keys(n).length===0)return s;let M=new Proxy(n,{get(f,m){let b=m;return Reflect.has(f,m)?Reflect.get(f,m):b in g.state?g.state[b]:b in g?g[b]:o&&b in o?o[b]:Reflect.get(f,m)},set(f,m,b){return false},ownKeys(f){let m=new Set([...Reflect.ownKeys(f),...Object.keys(l||{}),...Object.keys(o||{}),...a]);return Array.from(m)},getOwnPropertyDescriptor(f,m){let b=m;return Reflect.has(f,m)||l&&b in l||o&&b in o||a.includes(b)?{enumerable:true,configurable:true}:Reflect.getOwnPropertyDescriptor(f,m)}});return s=M,M}};return "children"in g?{...h,children:g.children}:{...h,state:g.state,nodeBucket:g.nodeBucket,notifyKeys:g.notifyKeys,dependOn:g.dependOn,calledBy:0,get proxy(){return s}}}var at=(g,e,t,r,o,i,l)=>{let s=g.useEntangleStep,a=[],p=[],h=new Set,n=r,m=t,b=0,S=0,R=100,P=()=>{let c={link:null,impactNode:null,impactUid:-1,hitTargetUids:null,isDirty:false,propose:null};return c.propose={set:(A,w,E=1)=>{w!==c.impactNode.state[A]&&(c.link.count++,(!p[c.impactUid]||p[c.impactUid].length===0)&&(p[c.impactUid]=[],S++),p[c.impactUid].push({key:A,value:w,weight:E}),c.isDirty||(c.hitTargetUids.push(c.impactUid),c.isDirty=true));},update:(A,w,E="add")=>{c.link.count++,(!p[c.impactUid]||p[c.impactUid].length===0)&&(p[c.impactUid]=[],S++),p[c.impactUid].push({key:A,delta:w,op:E,weight:1}),c.isDirty||(c.hitTargetUids.push(c.impactUid),c.isDirty=true);},patch:(A,w)=>{c.link.count++,(!p[c.impactUid]||p[c.impactUid].length===0)&&(p[c.impactUid]=[],S++),p[c.impactUid].push({key:A,patch:w,weight:1}),c.isDirty||(c.hitTargetUids.push(c.impactUid),c.isDirty=true);}},c},te=Array.from({length:R},P),_=R-1,Z=(c,A,w)=>{let E=A.path,H=c.impact;if(c.count>=s){l.emit("entangle:blocked",{observer:E,target:H,count:c.count});return}let F=n(H),O=c.isProxy?A.proxy:A,T=c.isProxy?F.proxy:F;if(c.filter&&!c.filter(O,T))return;let K,U=true;_<0?(K=P(),U=false):K=te[_--],K.isDirty=false,K.link=c,K.impactNode=F,K.impactUid=F.uid,K.hitTargetUids=w;let k=c.emit(O,T,K.propose);if(k instanceof Promise||k&&typeof k.then=="function")return b++,(async()=>{try{await k;}catch(d){l.emit("node:error",{path:E,error:d}),l.onError({path:E,error:d});}finally{b--,U&&(te[++_]=K);}})();U&&(te[++_]=K);};return {useEntangle:c=>{let{cause:A,impact:w,via:E,emit:H,filter:F,isProxy:O}=c;if(!E||E.length===0){l.emit("entangle:warn",{path:A,type:"no_keys"});return}let K=n(A).uid;a[K]||(a[K]=new Map);let U=a[K];for(let k=0;k<E.length;k++){let d=E[k];U.has(d)||U.set(d,[]),U.get(d).push({impact:w,emit:H,filter:F,count:0,isProxy:!!O});}},updateEntangleLevel:()=>{let c=m();h.clear();for(let A=0;A<a.length;A++)if(a[A]!==void 0){let w=c.get(A)||0;h.add(w);}},Turnstile:{volatileLevels:h,get inFlightCount(){return b},get hasPendingGhosts(){return S>0},hasObserver:c=>a[c]!==void 0,getTriggerKeys:c=>{let A=a[c];return A?Array.from(A.keys()):[]},receiveGhosts:(c,A=[])=>{let w=c.uid,E=[],H=a[w];if(!H||A.length===0)return E;let F=[];for(let k=0;k<A.length;k++){let d=H.get(A[k]);if(d)for(let u=0;u<d.length;u++)F.push(d[u]);}let O=0,T=false,K=null;for(;O<F.length;O++){if(e.shouldYield()){T=true;break}let k=Z(F[O],c,E);if(k){K=k,T=true,O++;break}}let U=()=>{if(E.length<=1)return E;let k=[],d=Object.create(null);for(let u=0;u<E.length;u++){let B=E[u];d[B]||(d[B]=true,k.push(B));}return k};return T?(async()=>{for(K&&await K,e.shouldYield()&&await e.yieldToMain();O<F.length;){let k=[],d=Math.min(O+R,F.length);for(;O<d;O++){let u=Z(F[O],c,E);u&&k.push(u);}k.length>0&&await Promise.all(k.map(async u=>{await u,e.shouldYield()&&await e.yieldToMain();})),e.shouldYield()&&await e.yieldToMain();}return U()})():U()},resolveGhosts:c=>{let A=c.uid,w=p[A];if(!w||w.length===0)return [];let E=[],H=Object.create(null);for(let F=0;F<w.length;F++){let O=w[F];H[O.key]||(H[O.key]=[]),H[O.key].push(O);}for(let F in H){let O=H[F],T=c.state[F],K,U=-1/0,k=false;for(let d=0;d<O.length;d++){let u=O[d];if(u.patch!==void 0&&(T=u.patch(T)),u.value!==void 0){let B=u.weight??1;B>=U&&(U=B,K=u.value,k=true);}}k&&(T=K);for(let d=0;d<O.length;d++){let u=O[d];if(u.delta!==void 0)switch(u.op||"add"){case "add":T=(typeof T=="number"?T:0)+u.delta;break;case "remove":T=Array.isArray(T)?T.filter(j=>j!==u.delta):T;break;case "intersect":T=Array.isArray(T)?T.filter(j=>u.delta.includes(j)):u.delta;break;case "union":{let j=Array.isArray(T)?T:[],ne=Array.isArray(u.delta)?u.delta:[u.delta];T=[...new Set([...j,...ne])];break}case "merge":{let j=typeof T=="object"&&T!==null&&!Array.isArray(T)?T:{},ne=typeof u.delta=="object"&&u.delta!==null&&!Array.isArray(u.delta)?u.delta:{};T={...j,...ne};break}}}Object.is(c.state[F],T)||(c.state[F]=T,E.push(F));}return p[A]=[],S--,E.length>0?E:[]},resetCounters:()=>{for(let c=0;c<a.length;c++){let A=a[c];if(A)for(let w of A.values())for(let E=0;E<w.length;E++)w[E].count=0;}}}}};function ot(g,e,t,r,o){let i=rt(),l=0,s=new Map,a=[],p=[],h=[],n=[],M=false,f=new Set,b=async()=>{let d=Array.from(f);if(f.clear(),"signalTrigger"in o&&typeof o.signalTrigger=="function")for(let u of d){let B=A(u);o.signalTrigger(B.dirtySignal);}else "emit"in o&&o.emit(d);},S=()=>{M||(M=true,requestAnimationFrame(()=>{try{for(;f.size>0;)b();}finally{M=false;}}));},{useEntangle:R,updateEntangleLevel:P,Turnstile:te}=at({useEntangleStep:g.useEntangleStep},i,e.GetUidToLevelMap,c,A,w,{emit:r.emit,onError:r.callOnError}),{TaskRunner:_,CancelTask:Z}=st({useGreedy:g.useGreedy},e,{GetNodeByPath:c,GetNodeByUid:A,GetPathByUid:w,GetBucket:F,GetMaxUid:O,Turnstile:te},r,{requestUpdate:S,flushPathSet:f},i),W=d=>{throw new Error(`[MeshFlow] Duplicate Path: ${d}`)},y=d=>{s.has(d.path)&&W(String(d.path));let u=++l,B={path:d.path,getNode:oe=>c(oe)},j=(oe,re="value")=>{let Se=oe({...B}),me=c(d.path);if(!Object.is(me.state[re],Se)){if(t.createHistoryAction&&t.pushIntoHistory){let Re=t.createHistoryAction([{path:d.path,value:me.state[re]},{path:d.path,value:Se}],de=>{let J=c(de.path);J.state[re]=de.value,T(de.path);});t.pushIntoHistory(Re);}me.state[re]=Se,T(d.path);}},ne=He({uid:u,type:d.type,path:d.path,state:d.state,meta:d.meta,nodeBucket:{},dirtySignal:"signalCreator"in o?o.signalCreator():void 0,notifyKeys:d.notifyKeys,dependOn:j});return s.set(ne.path,u),h[u]=ne.path,a[u]=ne,ne},L=d=>{s.has(d.path)&&W(String(d.path));let u=++l,B=He({uid:u,type:d.type,path:d.path,state:{},meta:d,nodeBucket:{},children:d.children});return s.set(B.path,u),p[u]=B,B};function c(d){let u=s.get(d),B=a[u];if(!B)throw Error("Wrong id");return B}function A(d){let u=a[d];if(!u)throw Error("Wrong id");return u}function w(d){return h[d]}function E(d){let u=s.get(d);return p[u]}function H(d){return n.push(d)-1}function F(d){let u=n[d];if(!u)throw Error("Wrong id");return u}function O(){return l}let T=d=>{let u=c(d);if(!u)throw Error("Wrong id");f.add(u.uid),S();let B=e.GetNextDependency(u.uid);K(u.uid,B);};function K(d,u){_(d,u);}return {registerNode:y,registerGroupNode:L,GetNodeByPath:c,GetGroupByPath:E,notify:T,notifyAll:async()=>{Promise.resolve().then(async()=>{let d=e.GetDependencyOrder();if(!d||d.length===0)return;let u=d[0];try{_(null,u);}catch(B){throw r.callOnError(B),B}finally{S();}});},batchNotify:d=>{if(!d||d.length===0)return;if(t.createHistoryAction&&t.pushIntoHistory){let B=t.createHistoryAction([d.map(j=>({path:j.path,key:j.key,value:c(j.path).state[j.key]})),d.map(j=>({path:j.path,key:j.key,value:j.value}))],j=>{let ne=new Set;j.forEach(oe=>{let re=c(oe.path);re.state[oe.key]=oe.value,f.add(oe.path),ne.add(oe.uid);}),S(),ne.size>0&&_(null,Array.from(ne));});t.pushIntoHistory(B);}let u=new Set;d.forEach(B=>{let j=c(B.path);j.state[B.key]=B.value,f.add(j.uid),u.add(j.uid);}),S(),u.size>0&&_(null,Array.from(u));},useEntangle:R,updateEntangleLevel:P,SetBucket:H,GetBucket:F,CancelTask:Z,UITrigger:o,UidToNodeMap:a}}function it(g,e){let t=false,r=false,o=false,i=false,l=new Map,s=[],a=[],p=[],h=[],n=[],M=[],f=[],m=new Map,{GetNextDependency:S,GetPrevDependency:R,GetAllPrevDependency:P,GetAllNextDependency:te,rebuildDirectDependencyMaps:_}=Xe(()=>s,()=>p,()=>M,()=>n),Z={},W={};if(e.modules.useHistory){let v=e.modules.useHistory,Y;v.isMeshModuleInited?Y=v:Y=v();let{Undo:V,Redo:$,PushIntoHistory:q,CreateHistoryAction:I,updateUndoSize:C,updateRedoSize:G}=Y();Z.pushIntoHistory=q,Z.createHistoryAction=I,W={Undo:V,Redo:$,updateUndoSize:C,updateRedoSize:G};}let y=!!e.modules.useMeshRenderGate,L={};if(y){let v=e.modules.useMeshRenderGate.isMeshModuleInited,Y=e.modules.useMeshRenderGate;L=(v?Y:Y())(()=>re);}let{onError:c,callOnError:A}=Je(),{onSuccess:w,callOnSuccess:E}=et(),{onStart:H,callOnStart:F}=nt(),{emit:O,usePlugin:T,destroyPlugin:K}=tt(),{SetTrace:U,useTrace:k}=Qe(),d=k();T(d);let u=y?{...L}:{...e.UITrigger},B=ot({useGreedy:e.config.useGreedy,useEntangleStep:e.config.useEntangleStep||100},{GetDependencyOrder:()=>f,GetAllNextDependency:te,GetNextDependency:S,GetPrevDependency:R,GetAllPrevDependency:P,GetUidToLevelMap:()=>m},Z,{callOnError:A,callOnSuccess:E,callOnStart:F,emit:O},u),{SetBucket:j,GetBucket:ne,GetGroupByPath:oe,GetNodeByPath:re,notifyAll:Se,useEntangle:me,updateEntangleLevel:Re,CancelTask:de}=B;y&&L.init();let J={};if(e.modules.useInternalForm){let{uiSchema:v,GetFormData:Y}=e.modules.useInternalForm(B,g);J={uiSchema:v,GetFormData:Y};}let ie={};if(e.modules.useSchemaValidators){let{SetValidators:v}=e.modules.useSchemaValidators(re);ie={SetValidators:v};}let{SetRule:Ee,SetRules:Pe}=ze(re,j,ne,s,p,a,h,l),{SetStrategy:Ge}=qe(re,ne),we=Ze(s,l),Ie=()=>{let v=we();f=v.steps,m=v.levelMap,xe();},xe=()=>{o&&(Re(),o=false);},Ke=()=>{i||(i=true,Promise.resolve().then(xe).finally(()=>{i=false;}));},Oe=()=>{r||(r=true,Promise.resolve().then(()=>{if(Ie(),t){let{directNextMap:v,directPrevMap:Y}=_(f.flat());n=v,M=Y;}}).finally(()=>{r=false,t=false;}));};return {SetRule:(v,Y,V,$)=>{Ee(v,Y,V,$),t=true,Oe();},SetRules:(v,Y,V,$)=>{Pe(v,Y,V,$),t=true,Oe();},SetStrategy:Ge,useEntangle:v=>{me(v),o=true,Ke();},SetTrace:U,usePlugin:T,SetValue:(v,Y,V)=>{xe(),re(v).dependOn(()=>V,Y);},GetValue:(v,Y="value")=>re(v).proxy[Y],SetValues:v=>{xe(),B.batchNotify(v);},GetGroupByPath:oe,notifyAll:async()=>{Ie(),await Se();},GetAllDependency:()=>s,GetDependencyOrder:()=>f,historyExports:W,formExports:J,validatorExports:ie,batchRenderExport:L,hasRenderGate:()=>y,onError:c,onSuccess:w,onStart:H,scheduler:B,destroyPlugin:K,CancelTask:de}}var ve=new Map,ut=(g,e,t)=>{try{if(ve.has(g))throw Error("engineID repeated");let r=it(e,{config:t.config||{useGreedy:!1},UITrigger:t.UITrigger,modules:t.modules??{},plugins:{}}),{SetRule:o,SetRules:i,SetValues:l,SetStrategy:s,SetValue:a,GetValue:p,usePlugin:h,useEntangle:n,GetGroupByPath:M,notifyAll:f,SetTrace:m,GetAllDependency:b,GetDependencyOrder:S,historyExports:R,formExports:P,validatorExports:te,batchRenderExport:_,hasRenderGate:Z,onError:W,onSuccess:y,onStart:L,scheduler:c,destroyPlugin:A,CancelTask:w}=r,E={config:{SetRule:o,SetRules:i,SetStrategy:s,notifyAll:f,SetTrace:m,usePlugin:h,hasRenderGate:Z,useEntangle:n},data:{SetValue:a,GetValue:p,SetValues:l,GetGroupByPath:M},dependency:{GetAllDependency:b,GetDependencyOrder:S},hooks:{onError:W,onSuccess:y,onStart:L}},H=(T,K,U)=>{!K||typeof K!="object"||Object.keys(K).forEach(k=>{let d=K[k];if(typeof d=="object"&&d!==null)T[k]=T[k]||{},H(T[k],d,U);else if(typeof d=="function"){let u=k;if(u==="useMeshRenderGate")u="render";else if(u.startsWith("use")){let B=u.slice(3);u=B.charAt(0).toLowerCase()+B.slice(1);}k==="useHistory"&&U.exports.history&&Object.keys(U.exports.history).length>0?T[u]=U.exports.history:k==="useInternalForm"&&U.exports.form&&Object.keys(U.exports.form).length>0?T[u]=U.exports.form:k==="useSchemaValidators"&&U.exports.validator&&Object.keys(U.exports.validator).length>0?T[u]=U.exports.validator:k==="useMeshRenderGate"&&U.exports.render?T[u]=U.exports.render:T[u]=d(U.scheduler,U.Schema);}});},F={...E,destroyPlugin:A,CancelTask:w,modules:{}},O=t.modules;return O&&H(F.modules,O,{scheduler:c,Schema:e,exports:{history:R,form:P,validator:te,render:_}}),ve.set(g,F),F}catch(r){throw Error(r)}},mn=()=>(g,e,t)=>ut(g,e,t),Pn=g=>{let e=ve.get(g);if(!e)throw Error("Engine not found.");return e},Mn=g=>{let e=ve.get(g);e.destroyPlugin(),e.CancelTask(),ve.delete(g);};export{Ve as DefaultStrategy,Ce as MeshFlowEventsName,Ue as TriggerCause,Mn as deleteEngine,Pn as useEngine,ut as useMeshFlow,mn as useMeshFlowDefiner,ot as useScheduler};
|
|
1
|
+
var Ce=(M=>(M[M.FlowStart=0]="FlowStart",M[M.FlowSuccess=1]="FlowSuccess",M[M.FlowEnd=2]="FlowEnd",M[M.FlowAbort=3]="FlowAbort",M[M.FlowWait=4]="FlowWait",M[M.FlowFire=5]="FlowFire",M[M.NodeStart=6]="NodeStart",M[M.NodeSuccess=7]="NodeSuccess",M[M.NodeProcessing=8]="NodeProcessing",M[M.NodeError=9]="NodeError",M[M.NodePending=10]="NodePending",M[M.NodeRevive=11]="NodeRevive",M[M.NodeIntercept=12]="NodeIntercept",M[M.NodeRelease=13]="NodeRelease",M[M.NodeStagnate=14]="NodeStagnate",M[M.NodeBucketSuccess=15]="NodeBucketSuccess",M[M.EntangleWarn=16]="EntangleWarn",M[M.EntangleBlocked=17]="EntangleBlocked",M))(Ce||{}),Le=(r=>(r[r.CAUSALITY=0]="CAUSALITY",r[r.INVERSION=1]="INVERSION",r[r.REPERCUSSION=2]="REPERCUSSION",r))(Le||{});var _e=(r=>(r.OR="OR",r.PRIORITY="PRIORITY",r.MERGE="MERGE",r))(_e||{});var He=class{computedRules=[];getRuleResult(e,t,r){if(e.entityId==="__base__")return e.logic(t);if(!(!e._hasRun||r(e.triggerUids)))return e._lastResult;let l=e.logic(t);return l instanceof Promise?l.then(u=>(e._lastResult=u,e._hasRun=true,u)):(e._lastResult=l,e._hasRun=true,l)}store={OR:(e,t,r)=>{let i,l,u=this.computedRules;for(let a=0;a<u.length;a++){let o=u[a],p=this.getRuleResult(o,e,r);if(p instanceof Promise)return (async()=>{let n=await p;if(o.entityId==="__base__"?l=n:n&&(i=n),typeof i>"u")for(let P=a+1;P<u.length;P++){let m=u[P],S=this.getRuleResult(m,e,r),N=S instanceof Promise?await S:S;if(m.entityId==="__base__"){l=N;continue}if(N){i=m.value;break}}return typeof i>"u"&&(i=l),{res:i,version:t}})();let h=p;if(o.entityId==="__base__"){l=h;continue}if(h){i=o.value;break}}return typeof i>"u"&&(i=l),{res:i,version:t}},PRIORITY:(e,t,r)=>{let i,l=this.computedRules;for(let u=0;u<l.length;u++){let a=l[u],o=this.getRuleResult(a,e,r);if(o instanceof Promise)return (async()=>{let p=await o;if(p!==void 0)return {res:a.value!==void 0?a.value:p,version:t};for(let h=u+1;h<l.length;h++){let n=l[h],P=this.getRuleResult(n,e,r),m=P instanceof Promise?await P:P;if(m!==void 0)return {res:m,version:t}}return {res:void 0,version:t}})();if(o!==void 0)return {res:a.value!==void 0?a.value:o,version:t}}return {res:i,version:t}},MERGE:(e,t,r)=>{let i,l,u=this.computedRules,a=(p,h)=>p===void 0?h:h===void 0?p:Array.isArray(p)&&Array.isArray(h)?[...h,...p]:typeof p=="object"&&typeof h=="object"?{...h,...p}:p;for(let p=0;p<u.length;p++){let h=u[p],n=this.getRuleResult(h,e,r);if(n instanceof Promise)return (async()=>{let m=await n,S=(x,b)=>{if(x.entityId==="__base__")l=a(l,b);else if(b){let M=x.value!==void 0?x.value:b;i=a(i,M);}};S(h,m);for(let x=p+1;x<u.length;x++){let b=u[x],M=this.getRuleResult(b,e,r),se=M instanceof Promise?await M:M;S(b,se);}return {res:a(i,l),version:t}})();let P=n;if(h.entityId==="__base__"){l=a(l,P);continue}if(P){let m=h.value!==void 0?h.value:P;i=a(i,m);}}return {res:a(i,l),version:t}}};CurrentStrategy=()=>{};CurrentStrategyType="PRIORITY";getRules=()=>{};constructor(e){this.getRules=e,this.CurrentStrategy=this.store.PRIORITY,this.updateComputedRules();}updateComputedRules(){let e=this.getRules();this.CurrentStrategyType==="PRIORITY"||this.CurrentStrategyType==="MERGE"?this.computedRules=Array.from(e.values()).map(t=>Array.from(t)).flat().sort((t,r)=>r.priority-t.priority):this.computedRules=Array.from(e.values()).map(t=>Array.from(t)).flat();}setStrategy(e){this.CurrentStrategyType=e,this.CurrentStrategy=this.store[e],this.updateComputedRules();}evaluate(e,t,r){return this.CurrentStrategy(e,t,r)}},we=class{path;strategy;contract;rules=new Map;isValue=false;id=0;cache=void 0;pendingPromise=null;version=0;deps=new Map;_forceNotify=false;promiseToken=null;useCache=true;effectArray=[];constructor(e,t,r){let i=()=>this.rules;this.strategy=new He(i),this.path=r,this.isValue=t==="value",this.contract=this.inferType(e),this.cache=e,this.setRule({priority:0,entityId:"__base__",logic:()=>e});}setUseCache(e){this.useCache=e;}forceNotify(){this._forceNotify=true;}isForceNotify(){return this._forceNotify}setStrategy(e){this.strategy.setStrategy(e);}setDefaultRule(e){let t=new Set;t.add(e),this.rules.set(-1,t);}setRules(e,t){t&&this.updateDeps(t);let r=++this.id,i={...e,entityId:r};for(let l of e.triggerUids)this.rules.has(l)||this.rules.set(l,new Set),this.rules.get(l).add(i);return this.strategy.updateComputedRules(),()=>{for(let l of e.triggerUids){let u=this.rules.get(l);u&&(u.delete(i),u.size===0&&(this.rules.delete(l),this.deps.delete(l)));}this.strategy.updateComputedRules();}}updateDeps(e){for(let[t,r,i]of e){if(r.length==0)continue;let l=this.deps.get(t)||Object.create(null);for(let u of r)l[u]=i[u];this.deps.set(t,l);}}setRule(e,t){if(t&&this.updateDeps(t),typeof e.entityId=="string"){this.setDefaultRule(e);return}let r=++this.id,i={...e,entityId:r};if(e)for(let l of e.triggerUids)this.rules.has(l)||this.rules.set(l,new Set),this.rules.get(l).add(i);return this.strategy.updateComputedRules(),()=>{for(let l of e.triggerUids){let u=this.rules.get(l);u&&(u.delete(i),u.size===0&&(this.rules.delete(l),this.deps.delete(l)));}this.strategy.updateComputedRules();}}setSideEffect(e){this.effectArray.push(e);}getSideEffect(){return [...this.effectArray]}evaluate(e){let t=null;if(e.GetToken&&(t=e.GetToken()),this.pendingPromise&&this.promiseToken!==t&&(this.pendingPromise=null,this.promiseToken=null),this.pendingPromise)return this.pendingPromise;let r=false;if(typeof e.triggerUid=="number"){r=true,this.deps.size==0&&(r=false);for(let[a,o]of this.deps.entries()){let p=e.getStateByUid(a);if(!p){r=false;break}for(let h in o){let n=o[h],P=p[h];if(typeof n=="object"&&n!==null){r=false;break}if(n!==P){r=false;break}}if(!r)break}}if(r&&this.useCache)return this.cache;this.promiseToken=t;let i=++this.version,l=a=>{if(!a||a.length===0)return true;for(let o of a){let p=this.deps.get(o);if(!p)return true;let h=e.getProxyByUid(o);if(!h)return true;for(let n in p){let P=p[n],m=h[n];if(typeof P=="object"&&P!==null||P!==m)return true}}return false},u=this.strategy.evaluate(e,i,l);if(!(u instanceof Promise)){let{res:a,version:o}=u;return this.finalizeSync(a,o,e,t)}return this.pendingPromise=(async()=>{try{let{res:a,version:o}=await u;return this.finalizeSync(a,o,e,t)}catch(a){throw {path:this.path,error:a}}finally{this.promiseToken===t&&(this.pendingPromise=null,this.promiseToken=null);}})(),this.pendingPromise}finalizeSync(e,t,r,i){return i!==this.promiseToken||t<this.version?this.cache:(this.cache=e,this.deps.forEach((l,u)=>{let a=r.getProxyByUid(u);if(!a)return;let o=Object.keys(l);for(let p of o)l[p]=a[p];}),e)}inferType(e){return Array.isArray(e)?"array":typeof e}};var Xe=(g,e,t)=>{let i=l=>{let u=t.triggerUids.map(p=>{let h=l.getProxyByUid(p);if(t.triggerKeys.length===0)return h;let n={};return t.triggerKeys.forEach(P=>{n[P]=h[P];}),n}),a=Object.create(null);return Object.defineProperty(a,"triggerTargets",{get:()=>u}),Object.defineProperty(a,"affectedTatget",{get:()=>l.getProxyByUid(g)[e]}),t.logic({slot:a})};return {value:t.value,targetUid:g,triggerUids:t.triggerUids,priority:t.priority??10,logic:i}},Ze=(g,e,t,r,i,l,u,a)=>{if(!g)throw Error();let o=g,p=(P,m)=>{typeof r[P]>"u"&&(r[P]=[],l[P]=new Set),l[P].add(m),l[P].size>r[P].length&&r[P].push(m),typeof i[m]>"u"&&(i[m]=[],u[m]=new Set),u[m].add(P),u[m].size>i[m].length&&i[m].push(P);};return {SetRule:(P,m,S,N)=>{let x=o(P),b=o(m),M=N.triggerKeys||[],se=a.get(b.uid)||0,U=a.get(x.uid)||0;se+=1,U+=1,a.set(b.uid,se),a.set(x.uid,U);let _=Xe(b.uid,S,{...N,triggerUids:[x.uid],triggerKeys:M}),ee=[P].map(C=>{let te=o(C);return [te.uid,M,te.proxy]});if(p(x.uid,b.uid),typeof b.nodeBucket[S]=="number"){let C=t(b.nodeBucket[S]);C.setRule(_,ee),N.effect&&C.setSideEffect({fn:N.effect,args:N.effectArgs?N.effectArgs:[S]});}else {let C=b.meta[S],te=new we(C,S,m);te.setRule(_,ee),N.effect&&te.setSideEffect({fn:N.effect,args:N.effectArgs?N.effectArgs:[S]}),b.nodeBucket[S]=e(te);}b.state[S]=b.meta[S];let z=t(b.nodeBucket[S]);N.forceNotify&&z.forceNotify(),N.cacheStrategy=="none"&&z.setUseCache(false);},SetRules:(P,m,S,N)=>{let x=o(m),b=a.get(x.uid)||0;b+=1,a.set(x.uid,b);let M=[];for(let z of P){let C=o(z);M.push(C.uid);let te=a.get(C.uid)||0;te+=1,a.set(C.uid,te),p(C.uid,x.uid);}let se=N.triggerKeys||[],U=Xe(x.uid,S,{...N,triggerUids:M,triggerKeys:se}),_=P.map(z=>{let C=o(z);return [C.uid,se,C.state]});if(typeof x.nodeBucket[S]=="number"){let z=t(x.nodeBucket[S]);z.setRules(U,_),N.effect&&z.setSideEffect({fn:N.effect,args:N.effectArgs?N.effectArgs:[S]});}else {let z=x.meta[S],C=new we(z,S,m);C.setRules(U,_),N.effect&&C.setSideEffect({fn:N.effect,args:N.effectArgs?N.effectArgs:[S]}),x.nodeBucket[S]=e(C);}x.state[S]=x.meta[S];let ee=t(x.nodeBucket[S]);N.forceNotify&&ee.forceNotify(),N.cacheStrategy=="none"&&ee.setUseCache(false);}}};var Je=(g,e)=>{let t=g||void 0;if(!t)throw Error();return {SetStrategy:(i,l,u)=>{let a=t(i);e(a.nodeBucket[l]).setStrategy(u);}}};function et(){let g=new Map,e=new Map,t=new Set,r=(u,a)=>{g.set(u,a);let o=e.get(u);o&&o(a);};return {SetTrace:(u,a)=>{e.set(u,a);let o=g.get(u)||"idle";return a(o),{cancel:()=>{e.delete(u);}}},useTrace:()=>({apply:a=>{a.on(0,()=>{t.forEach(o=>r(o,"idle")),t.clear(),g.clear();}),a.on(13,({path:o,type:p})=>{(p==1||p==2)&&(t.add(o),r(o,"pending"));}),a.on(10,({path:o})=>{t.add(o),(!g.has(o)||g.get(o)==="idle")&&r(o,"pending");}),a.on(6,({path:o})=>{t.add(o),r(o,"calculating");}),a.on(7,({path:o})=>{r(o,"calculated");}),a.on(12,({path:o,type:p})=>{p==3&&r(o,"calculating"),p==6&&r(o,"idle");}),a.on(14,({path:o})=>{r(o,"pending");}),a.on(9,({path:o})=>r(o,"error"));}})}}function nt(g,e,t,r){return {GetNextDependency:h=>r()[h]||[],GetPrevDependency:h=>t()[h]||[],GetAllPrevDependency:h=>e()[h]||[],GetAllNextDependency:h=>g()[h]||[],rebuildDirectDependencyMaps:h=>{let n=[],P=[],m=g();for(let S of h){let N=m[S]||[];n[S]=N;for(let x=0;x<N.length;x++){let b=N[x];typeof P[b]>"u"&&(P[b]=[]),P[b].push(S);}}return {directNextMap:n,directPrevMap:P}}}}function rt(g,e){let t=i=>{let l=[],u=[],a=new Map,o=i.size,p=0,h=0;for(let[n,P]of i)P===0&&u.push(n);if(u.length===0&&o>0)throw Error("Circular dependency detected");for(;u.length>0;){l.push([...u]);let n=[];for(let P of u){p++,a.set(P,h);let m=g[P];if(m)for(let S of m){let N=i.get(S)-1;i.set(S,N),N===0&&n.push(S);}}u=n,h++;}if(p<o)throw Error("Circular dependency detected");return {steps:l,levelMap:a}};return ()=>{let i=new Map;for(let l of e.keys()){let u=g[l]||[];i.has(l)||i.set(l,0);for(let a of u){let o=i.get(a)||0;i.set(a,++o);}}return t(i)}}var Ge=()=>{let g=[];return {on:e=>(g.push(e),()=>{let t=g.indexOf(e);t>-1&&g.splice(t,1);}),call:e=>g.forEach(t=>{t(e);})}};function st(){let{on:g,call:e}=Ge();return {onError:g,callOnError:e}}function at(){let{on:g,call:e}=Ge();return {onSuccess:g,callOnSuccess:e}}var ot=()=>{let g=new Set,e=new Map,t=new Set,r=(a,o)=>{e.get(a)?.forEach(p=>p(o));},i=(a,o)=>(e.has(a)||e.set(a,new Set),e.get(a).add(o),()=>e.get(a)?.delete(o));return {usePlugin:a=>{let o=new Set,p=(n,P)=>{let m=i(n,P);return o.add(m),m};a.apply({on:p}),g.add(a);let h=()=>{o.forEach(n=>n()),o.clear(),g.delete(a),t.delete(h);};return t.add(h),h},emit:r,destroyPlugin:()=>{t.forEach(a=>a()),t.clear(),e.clear(),g.clear();}}};function it(){let{on:g,call:e}=Ge();return {onStart:g,callOnStart:e}}var lt=(g={frameQuota:12})=>{let e=performance.now(),t=0,r=false,i=()=>!!navigator?.scheduling?.isInputPending?.({includeContinuous:true});return {getIsFirstFrame:()=>r,reset(){e=performance.now(),t=0,r=true;},shouldYield(){return !r&&(++t&15)!==0?false:!!(performance.now()-e>g.frameQuota||i())},async yieldToMain(){return new Promise(l=>{Ye(()=>{e=performance.now(),t=0,r&&(r=false),l();});})}}},Ye=g=>{let{port1:e,port2:t}=new MessageChannel;e.onmessage=g,t.postMessage(null);};function ut(g,e,t,r,i,l){let u=new Map,a=g.useGreedy,o=null,p=()=>{u.clear();},h={path:null,level:0,targetLevel:0,currentLevel:0,pendingParentsCount:0,active:0,pending:0,blocked:0,nums:0,asyncNums:0},n={path:null,type:0,triggerPath:null,calledBy:0,key:null,value:null,error:null,token:null,duration:null,detail:h},P=false,m=[],S=null,N=(b,M,se)=>{m.push({uid:b,key:M,value:se}),!P&&(S||(S=Promise.resolve().then(()=>{S=null,P||x(null,[]);})));},x=async(b,M)=>{let U=Symbol("token"),_=typeof b=="number"?b:"__NOTIFY_ALL__";u.set(_,U),o=U,P=true;let ee=false,z=false;l.reset(),t.Turnstile.nextEpoch();let C=t.GetMaxUid()+3,te=new Array(C).fill(0),d=0,s=new Uint8Array(C),H=new Int32Array(C),k=new Int32Array(C),Y=new Int32Array(C*2),A=0,E=0,T=new Int32Array(C*2),O=0,v=0,G=new Int32Array(C*2),c=0,y=0;M.forEach(f=>{te[f]=1,e.GetAllNextDependency(f).forEach(W=>{te[W]=1;});});let w=new Array(C).fill(null),V=[],q=t.Turnstile,ae=new Array(C).fill(null).map(()=>[]),de=new Array(C).fill(null).map(()=>[]),me=[],Ne=()=>{if(m.length===0)return false;let f=false,W=1/0;for(;m.length>0;){let{uid:D,key:Q,value:le}=m.shift(),L=t.GetNodeByUid(D);if(me.includes(D)||me.push(D),!Object.is(L.state[Q],le)){f=true,L.state[Q]=le,i.flushPathSet.add(D),L.calledBy=1;let ne=w[D]||[];ne.includes(Q)||ne.push(Q),w[D]=ne,s[D]&=-17,s[D]&2&&(s[D]&=-3,v--),s[D]&1||(s[D]|=1,Y[A++]=D,E++);let X=e.GetUidToLevelMap().get(D)??0;X<W&&(W=X),Se(D);}}return f&&(ie===void 0||ie>W)&&(ie=W),f},Te=q.volatileLevels.size>0,Pe=Te?q.hasObserver:f=>false,xe=Te?q.receiveGhosts:()=>[],Oe=Te?q.resolveGhosts:()=>[],ke=Te?q.getTriggerKeys:()=>[],De=q?.volatileLevels||new Set,be=-1,oe=e.GetUidToLevelMap(),ie=0,Re=0,Se=f=>{e.GetAllNextDependency(f).forEach(D=>{let Q=oe.get(D)||0;Q>Re&&(Re=Q);});};Ne();let Ie=new Set;typeof b=="number"&&(s[b]|=16,Ie.add(b),Se(b),i.flushPathSet.add(b));let Be=typeof b=="number"?[b]:[...M,...me];l.shouldYield()&&(i.requestUpdate(),await l.yieldToMain());let We=Be.map(async f=>{if(Pe(f)){let W=t.GetNodeByUid(f),D=ke(f);if(D.length>0){let Q=xe(W,D);return Q instanceof Promise&&(Q=await Q),{seed:f,hitTargets:Q}}}return {seed:f,hitTargets:[]}});if((await Promise.all(We)).forEach(({seed:f,hitTargets:W})=>{if(W&&W.length>0){V.push(...W);let D=oe.get(f)||0;be=Math.max(be,D);}}),(V.length>0||Be.length>1)&&(i.requestUpdate(),await l.yieldToMain(),u.get(_)!==U))return;let ze=V.length>0;M.forEach(f=>{if(!Ie.has(f))if(ze){let W=oe.get(f)??0;k[f]=W,s[f]&4||(s[f]|=4,G[c++]=f,y++);let D=t.GetPathByUid(f);n.path=D,n.type=2,r.emit(14,n);}else s[f]&1||(s[f]|=1,Y[A++]=f,E++),Se(f);}),typeof b=="number"?ie=oe.get(b)??0:ie=Math.min(...M.map(f=>oe.get(f)??0));let qe=performance.now(),Ue=typeof _=="number"?t.GetPathByUid(_):"__NOTIFY_ALL__";n.path=Ue,n.token=U,r.emit(0,n),r.callOnStart({path:Ue});let Ve=false,Qe=30,$e=(f,W)=>{let D=false,Q=false,le=false,L=t.GetNodeByUid(f),ne=t.GetPathByUid(f),X=L.calledBy,K=ae[f];K.length=0;let B=Pe(f),I=B?ke(f):[],F=R=>{B&&(I.length===0||I.includes(R))&&K.push(R);},ue=de[f];ue.length=0;let ye=false;if(L.calledBy===1){ye=true,D=true,i.flushPathSet.add(f);let R=w[f];R&&(K.push(...R),w[f]=null);}let fe=(R,J)=>{let re=oe.get(R)??0,he=t.GetNodeByUid(R),Z=t.GetPathByUid(R),ge=(X===1||X===2)&&re<=be;ge&&s[R]&16&&(s[R]&=-17,n.path=Z,n.triggerPath=ne,r.emit(11,n));let ce=0;if(!(s[R]&49)){if(s[R]&2)ce=H[R]-1;else {if(re>ie&&v>Qe){k[R]=re,s[R]&4||(s[R]|=4,G[c++]=R,y++),n.path=Z,n.type=7,r.emit(12,n);return}let Ee=e.GetPrevDependency(R),$=0;for(let Me of Ee){if(s[Me]&16)continue;(oe.get(Me)??0)>ie&&$++;}ce=$;}if(ce<=0){let Ee=(s[R]&1)!==0,$=(s[R]&32)!==0;if(Ee||$){n.path=Z,n.type=$?3:3.1,r.emit(12,n);return}s[R]&2&&(s[R]&=-3,v--),ge?he.calledBy=2:he.calledBy=0,s[R]&1||(s[R]|=1,Y[A++]=R,E++),n.path=Z,n.type=J,h.path=ne,r.emit(13,n);}else H[R]=ce,s[R]&2||(s[R]|=2,T[O++]=R,v++);}},ve=(R=[])=>{if(u.get(_)!==U)return;if(R.length){let re={},he=L.proxy;for(let Z of R){let ge=(Z.args||[]).reduce((ce,Ee)=>(ce[Ee]=he[Ee],ce),{});try{let ce=Z.fn(ge);ce&&typeof ce=="object"&&Object.assign(re,ce);}catch(ce){}}for(let Z in re)if(Z in L.state)Object.is(L.state[Z],re[Z])||(L.state[Z]=re[Z],F(Z),D=true,(L.notifyKeys.size===0||L.notifyKeys.has(Z))&&(Q=true));else throw {error:`wrong effect in ${String(L.path)}`}}D&&i.flushPathSet.add(f);let J=(re=[])=>{if(u.get(_)!==U)return;re&&re.length>0&&(V.push(...re),be=Math.max(be,oe.get(f)||0)),K.length=0,n.path=ne,n.calledBy=L.calledBy,r.emit(7,n),s[f]|=16;let he=e.GetNextDependency(f);(Q||le)&&(Se(f),e.GetAllNextDependency(f).forEach(Me=>{te[Me]=1;}));let Z=t.GetNodeByUid(f),ge=oe.get(f)??0,ce=De.has(ge)||V.length>0;for(let $ of he){let Me=oe.get($)??0,Ae=t.GetPathByUid($);if(ce&&Me>=ge){k[$]=Me,s[$]&4||(s[$]|=4,G[c++]=$,y++),n.path=Ae,n.type=2,r.emit(14,n);continue}if(s[$]&16){n.path=Ae,n.type=2,r.emit(12,n);continue}if(s[$]&32||(s[$]&1)!==0){n.path=Ae,n.type=s[$]&32?3:3.1,r.emit(12,n);continue}if(Q||le)fe($,1);else if(s[$]&2)fe($,2);else {let pt=oe.get($);k[$]=pt,s[$]&4||(s[$]|=4,G[c++]=$,y++,n.path=Ae,n.type=1,r.emit(14,n));}}s[f]&32&&(s[f]&=-33,d--),Z.calledBy=0,(()=>{if(!ee){ee=true;let $=d,Me=E,Ae=v;n.path=ne,n.type=1,h.active=$,h.pending=Me,h.blocked=Ae,r.emit(5,n),j();}})();};if(Pe(f)&&K.length>0){let re=xe(L,K);re instanceof Promise?re.then(J).catch(Fe):J(re);}else J([]);},Fe=R=>{n.path=ne,n.error=R,r.emit(9,n);let J=Symbol("abort");u.set(_,J),A=0,E=0,O=0,v=0,c=0,y=0,s.fill(0),d=0,w.fill(null),P=false,r.callOnError(R);},pe=(R,J)=>{R!==L.state[J]&&(L.state[J]=R,D=true,F(String(J)),n.path=ne,n.key=J,n.value=R,n.calledBy=L.calledBy,r.emit(15,n),(L.notifyKeys.size===0||L.notifyKeys.has(J))&&(Q=true)),t.GetBucket(L.nodeBucket[J]).isForceNotify()&&(le=true),(Q||le)&&Se(f);};n.path=ne,n.calledBy=L.calledBy,r.emit(6,n);try{let R=[];for(let J in L.nodeBucket){let re=t.GetBucket(L.nodeBucket[J]);if(R.push(...re.getSideEffect()),ye){r.emit(15,{path:ne,key:String(J),value:L.state[J],calledBy:L.calledBy}),re.isForceNotify()&&(le=!0),(L.notifyKeys.size===0||L.notifyKeys.has(J))&&Se(f);continue}let he=re.evaluate({affectKey:J,triggerUid:W,getProxyByUid:Z=>t.GetNodeByUid(Z).proxy,getStateByUid:Z=>t.GetNodeByUid(Z).state,GetToken:()=>U});if(he instanceof Promise){let Z=he.then(ge=>{u.get(_)===U&&pe(ge,J);});ue.push(Z);}else pe(he,J);}if(ue.length>0)return Promise.all(ue).then(()=>{ve(R);}).catch(Fe);ve(R);return}catch(R){Fe(R);}},j=async()=>{if(u.get(_)!==U){ee=false;return}ee=true;let f=l.getIsFirstFrame(),W=0,D=()=>30,Q=0,le=D();try{for(;u.get(_)===U;){let L=Q>=le,ne=l.shouldYield();if(L||ne){if(Q>0&&(W++,(f||W%2===0)&&i.requestUpdate()),await l.yieldToMain(),u.get(_)!==U)break;Q=0,f=l.getIsFirstFrame();}if(E>0&&d<40){let X=A,K=0;for(let B=0;B<X;B++){let I=Y[B];if((s[I]&1)===0)continue;if(d>=40||Q>=le||l.shouldYield()){for(let pe=B;pe<A;pe++){let R=Y[pe];s[R]&1&&(Y[K++]=R);}A=K,E=K;break}let F=t.GetNodeByUid(I),ue=t.GetPathByUid(I),ye=oe.get(I)??0,fe=e.GetPrevDependency(I),ve=fe.length>1;if((!a||ve)&&ye>ie){s[I]&=-2,E--;let pe=fe.filter(R=>te[R]===1&&(s[R]&16)===0).length;H[I]=pe||0,s[I]&2||(s[I]|=2,T[O++]=I,v++),n.path=ue,n.type=pe>0?4:5,h.targetLevel=ye,h.currentLevel=ie,h.pendingParentsCount=pe,r.emit(12,n);continue}s[I]&=-2,E--,(s[I]&32)===0&&(s[I]|=32,d++),n.path=ue,n.calledBy=F.calledBy,r.emit(8,n),$e(I,b),Q++;}if(A>X){for(let B=X;B<A;B++){let I=Y[B];s[I]&1&&(Y[K++]=I);}A=K,E=A;}else A=K;if(E>0&&d<40)continue}if(Q<le&&a&&v>0&&d<40){let X=!1,K=0,B=0;for(let I=0;I<O;I++){let F=T[I];if((s[F]&2)===0)continue;if(H[F]<=0&&K<le){let ye=oe.get(F)??0,fe=e.GetPrevDependency(F);if(ye<=ie||fe.length<=1){s[F]&=-3,v--,s[F]&1||(s[F]|=1,Y[A++]=F,E++),K++,X=!0;let ve=t.GetPathByUid(F);n.path=ve,n.type=4,r.emit(13,n);continue}}T[B++]=F;}if(O=B,K>0)continue;if(X){if(l.shouldYield()&&(await l.yieldToMain(),u.get(_)!==U))break;continue}}if(d===0&&E===0){if(q.inFlightCount>0)break;if(V.length>0){let K=!1,B=ie,I=Array.from(new Set(V));V.length=0;for(let F of I){let ue=t.GetNodeByUid(F),ye=Oe(ue);if(ye&&ye.length>0){K=!0,ue.calledBy=1,w[F]=ye,s[F]&=-17,s[F]&2&&(s[F]&=-3,v--),s[F]&1||(s[F]|=1,Y[A++]=F,E++);let fe=oe.get(ue.uid)??0;fe<B&&(B=fe),Se(ue.uid),i.flushPathSet.add(ue.uid);}}if(K){if(B<ie&&(ie=B),i.requestUpdate(),l.shouldYield()&&(await l.yieldToMain(),u.get(_)!==U))break;continue}}let X=1/0;for(let K=0;K<c;K++){let B=G[K];if(s[B]&4){let I=k[B];I<X&&(X=I);}}for(let K=0;K<O;K++){let B=T[K];if(s[B]&2){let I=oe.get(B)??0;I>ie&&I<X&&(X=I);}}if(X!==1/0&&X<=Re){ie=X;let K=0;for(let I=0;I<c;I++){let F=G[I];s[F]&4&&(k[F]===X?(s[F]&=-5,y--,s[F]&1||(s[F]|=1,Y[A++]=F,E++)):G[K++]=F);}c=K;let B=0;for(let I=0;I<O;I++){let F=T[I];if(s[F]&2)if((oe.get(F)??0)===X){s[F]&=-3,v--,s[F]&1||(s[F]|=1,Y[A++]=F,E++);let ye=t.GetPathByUid(F);n.path=ye,n.type=3,h.level=X,r.emit(13,n);}else T[B++]=F;}O=B;continue}else {for(let K=0;K<c;K++){let B=G[K];if(s[B]&4){s[B]|=16;let I=t.GetPathByUid(B);n.path=I,n.type=6,r.emit(12,n);}}c=0,y=0;for(let K=0;K<O;K++){let B=T[K];if(s[B]&2){s[B]|=16;let I=t.GetPathByUid(B);n.path=I,n.type=6,r.emit(12,n);}}O=0,v=0;break}}E>0&&d>=40&&(n.type=2,r.emit(4,n));break}}finally{ee=false;let L=d+v+E,ne=q.inFlightCount||0;if(!(o===U)){n.token=U,r.emit(3,n);return}if(i.requestUpdate(),L===0&&ne===0){if(u.get(_)===U&&!Ve){Ve=true,n.type=1,r.emit(2,n),q.resetCounters(),w.fill(null),P=false;let K=performance.now();be=-1,u.delete(_),n.token=U,n.duration=(K-qe).toFixed(2.1)+"ms",r.emit(1,n),Promise.resolve().then(()=>{r.callOnSuccess();});}}else {let K=L===0&&ne>0?3:1;if(n.type=K,h.nums=d,h.asyncNums=ne,r.emit(4,n),ne>0&&!z){z=true;let B=()=>{if(o!==U){z=false;return}if(q.inFlightCount===0){z=false,Ne(),Ye(()=>{o===U&&q.inFlightCount===0&&j();});return}else q.inFlightCount,requestAnimationFrame(B);};requestAnimationFrame(B);}}}};j();};return {TaskRunner:x,CancelTask:p,stageValueFn:N}}function je(g){let{path:e,uid:t,type:r,meta:i,dirtySignal:l,state:u}=g,a=null,o=["path","uid","type","dependOn","nodeBucket"],h={path:e,uid:t,type:r,meta:i,dirtySignal:l,createView:(n={})=>{if(a&&Object.keys(n).length===0)return a;let P=new Proxy(n,{get(m,S){let N=S;return Reflect.has(m,S)?Reflect.get(m,S):N in g.state?g.state[N]:N in g?g[N]:i&&N in i?i[N]:Reflect.get(m,S)},set(m,S,N){return false},ownKeys(m){let S=new Set([...Reflect.ownKeys(m),...Object.keys(u||{}),...Object.keys(i||{}),...o]);return Array.from(S)},getOwnPropertyDescriptor(m,S){let N=S;return Reflect.has(m,S)||u&&N in u||i&&N in i||o.includes(N)?{enumerable:true,configurable:true}:Reflect.getOwnPropertyDescriptor(m,S)}});return a=P,P}};return "children"in g?{...h,children:g.children}:{...h,state:g.state,nodeBucket:g.nodeBucket,notifyKeys:g.notifyKeys,dependOn:g.dependOn,calledBy:0,get proxy(){return a}}}var ct=(g,e,t,r,i,l,u)=>{let a=g.useEntangleStep,o=[],p=[],h=new Set,n=r,S=t,N=0,x=0,b=0,M=100,se=()=>{let d={link:null,impactNode:null,impactUid:-1,hitTargetUids:null,isDirty:false,propose:null};return d.propose={set:(s,H,k=1)=>{d.epoch===b&&H!==d.impactNode.state[s]&&(d.link.count++,(!p[d.impactUid]||p[d.impactUid].length===0)&&(p[d.impactUid]=[],x++),p[d.impactUid].push({key:s,value:H,weight:k}),d.isDirty||(d.hitTargetUids.push(d.impactUid),d.isDirty=true));},update:(s,H,k="add")=>{d.epoch===b&&(d.link.count++,(!p[d.impactUid]||p[d.impactUid].length===0)&&(p[d.impactUid]=[],x++),p[d.impactUid].push({key:s,delta:H,op:k,weight:1}),d.isDirty||(d.hitTargetUids.push(d.impactUid),d.isDirty=true));},patch:(s,H)=>{d.epoch===b&&(d.link.count++,(!p[d.impactUid]||p[d.impactUid].length===0)&&(p[d.impactUid]=[],x++),p[d.impactUid].push({key:s,patch:H,weight:1}),d.isDirty||(d.hitTargetUids.push(d.impactUid),d.isDirty=true));}},d},U=Array.from({length:M},se),_=M-1,ee=(d,s,H)=>{let k=s.path,Y=d.impact;if(d.count>=a){u.emit("entangle:blocked",{observer:k,target:Y,count:d.count});return}let A=n(Y),E=d.isProxy?s.proxy:s,T=d.isProxy?A.proxy:A;if(d.filter&&!d.filter(E,T))return;let O,v=true;_<0?(O=se(),v=false):O=U[_--];let G=b;O.epoch=G,O.isDirty=false,O.link=d,O.impactNode=A,O.impactUid=A.uid,O.hitTargetUids=H;let c=d.emit(E,T,O.propose);if(c instanceof Promise||c&&typeof c.then=="function")return N++,(async()=>{try{await c;}catch(y){u.emit("node:error",{path:k,error:y}),u.onError({path:k,error:y});}finally{G===b&&N--,v&&(U[++_]=O);}})();v&&(U[++_]=O);};return {useEntangle:d=>{let{cause:s,impact:H,via:k,emit:Y,filter:A,isProxy:E}=d;if(!k||k.length===0){u.emit("entangle:warn",{path:s,type:"no_keys"});return}let O=n(s).uid;o[O]||(o[O]=new Map);let v=o[O];for(let G=0;G<k.length;G++){let c=k[G];v.has(c)||v.set(c,[]),v.get(c).push({impact:H,emit:Y,filter:A,count:0,isProxy:!!E});}},updateEntangleLevel:()=>{let d=S();h.clear();for(let s=0;s<o.length;s++)if(o[s]!==void 0){let H=d.get(s)||0;h.add(H);}},Turnstile:{volatileLevels:h,get inFlightCount(){return N},get hasPendingGhosts(){return x>0},nextEpoch:()=>{b++,N=0,x=0,p.length=0;},hasObserver:d=>o[d]!==void 0,getTriggerKeys:d=>{let s=o[d];return s?Array.from(s.keys()):[]},receiveGhosts:(d,s=[])=>{let H=d.uid,k=[],Y=o[H];if(!Y||s.length===0)return k;let A=[];for(let G=0;G<s.length;G++){let c=Y.get(s[G]);if(c)for(let y=0;y<c.length;y++)A.push(c[y]);}let E=0,T=false,O=null;for(;E<A.length;E++){if(e.shouldYield()){T=true;break}let G=ee(A[E],d,k);if(G){O=G,T=true,E++;break}}let v=()=>{if(k.length<=1)return k;let G=[],c=Object.create(null);for(let y=0;y<k.length;y++){let w=k[y];c[w]||(c[w]=true,G.push(w));}return G};return T?(async()=>{for(O&&await O,e.shouldYield()&&await e.yieldToMain();E<A.length;){let G=[],c=Math.min(E+M,A.length);for(;E<c;E++){let y=ee(A[E],d,k);y&&G.push(y);}G.length>0&&await Promise.all(G.map(async y=>{await y,e.shouldYield()&&await e.yieldToMain();})),e.shouldYield()&&await e.yieldToMain();}return v()})():v()},resolveGhosts:d=>{let s=d.uid,H=p[s];if(!H||H.length===0)return [];let k=[],Y=Object.create(null);for(let A=0;A<H.length;A++){let E=H[A];Y[E.key]||(Y[E.key]=[]),Y[E.key].push(E);}for(let A in Y){let E=Y[A],T=d.state[A],O,v=-1/0,G=false;for(let c=0;c<E.length;c++){let y=E[c];if(y.patch!==void 0&&(T=y.patch(T)),y.value!==void 0){let w=y.weight??1;w>=v&&(v=w,O=y.value,G=true);}}G&&(T=O);for(let c=0;c<E.length;c++){let y=E[c];if(y.delta!==void 0)switch(y.op||"add"){case "add":T=(typeof T=="number"?T:0)+y.delta;break;case "remove":T=Array.isArray(T)?T.filter(V=>V!==y.delta):T;break;case "intersect":T=Array.isArray(T)?T.filter(V=>y.delta.includes(V)):y.delta;break;case "union":{let V=Array.isArray(T)?T:[],q=Array.isArray(y.delta)?y.delta:[y.delta];T=[...new Set([...V,...q])];break}case "merge":{let V=typeof T=="object"&&T!==null&&!Array.isArray(T)?T:{},q=typeof y.delta=="object"&&y.delta!==null&&!Array.isArray(y.delta)?y.delta:{};T={...V,...q};break}}}Object.is(d.state[A],T)||(d.state[A]=T,k.push(A));}return p[s]=[],x--,k.length>0?k:[]},resetCounters:()=>{for(let d=0;d<o.length;d++){let s=o[d];if(s)for(let H of s.values())for(let k=0;k<H.length;k++)H[k].count=0;}}}}};function yt(g,e,t,r,i){let l=lt(),u=0,a=new Map,o=[],p=[],h=[],n=[],P=false,m=new Set,N=async()=>{let c=Array.from(m);if(m.clear(),"signalTrigger"in i&&typeof i.signalTrigger=="function")for(let y of c){let w=s(y);i.signalTrigger(w.dirtySignal);}else "emit"in i&&i.emit(c);},x=()=>{P||(P=true,requestAnimationFrame(()=>{try{for(;m.size>0;)N();}finally{P=false;}}));},{useEntangle:b,updateEntangleLevel:M,Turnstile:se}=ct({useEntangleStep:g.useEntangleStep},l,e.GetUidToLevelMap,d,s,H,{emit:r.emit,onError:r.callOnError}),{TaskRunner:U,CancelTask:_,stageValueFn:ee}=ut({useGreedy:g.useGreedy},e,{GetNodeByPath:d,GetNodeByUid:s,GetPathByUid:H,GetBucket:A,GetMaxUid:E,Turnstile:se},r,{requestUpdate:x,flushPathSet:m},l),z=c=>{throw new Error(`[MeshFlow] Duplicate Path: ${c}`)},C=c=>{a.has(c.path)&&z(String(c.path));let y=++u,w={path:c.path,getNode:ae=>d(ae)},V=(ae,de="value")=>{let me=ae({...w}),Ne=d(c.path);if(!Object.is(Ne.state[de],me)){if(t.createHistoryAction&&t.pushIntoHistory){let Te=t.createHistoryAction([{path:c.path,value:Ne.state[de]},{path:c.path,value:me}],Pe=>{let xe=d(Pe.path);xe.state[de]=Pe.value,T(Pe.path);});t.pushIntoHistory(Te);}Ne.state[de]=me,T(c.path);}},q=je({uid:y,type:c.type,path:c.path,state:c.state,meta:c.meta,nodeBucket:{},dirtySignal:"signalCreator"in i?i.signalCreator():void 0,notifyKeys:c.notifyKeys,dependOn:V});return a.set(q.path,y),h[y]=q.path,o[y]=q,q},te=c=>{a.has(c.path)&&z(String(c.path));let y=++u,w=je({uid:y,type:c.type,path:c.path,state:{},meta:c,nodeBucket:{},children:c.children});return a.set(w.path,y),p[y]=w,w};function d(c){let y=a.get(c),w=o[y];if(!w)throw Error("Wrong id");return w}function s(c){let y=o[c];if(!y)throw Error("Wrong id");return y}function H(c){return h[c]}function k(c){let y=a.get(c);return p[y]}function Y(c){return n.push(c)-1}function A(c){let y=n[c];if(!y)throw Error("Wrong id");return y}function E(){return u}let T=c=>{let y=d(c);if(!y)throw Error("Wrong id");m.add(y.uid),x();let w=e.GetNextDependency(y.uid);O(y.uid,w);};function O(c,y){U(c,y);}return {registerNode:C,registerGroupNode:te,GetNodeByPath:d,GetGroupByPath:k,notify:T,notifyAll:async()=>{Promise.resolve().then(async()=>{let c=e.GetDependencyOrder();if(!c||c.length===0)return;let y=c[0];try{U(null,y);}catch(w){throw r.callOnError(w),w}finally{x();}});},batchNotify:c=>{if(!c||c.length===0)return;if(t.createHistoryAction&&t.pushIntoHistory){let w=t.createHistoryAction([c.map(V=>({path:V.path,key:V.key,value:d(V.path).state[V.key]})),c.map(V=>({path:V.path,key:V.key,value:V.value}))],V=>{let q=new Set;V.forEach(ae=>{let de=d(ae.path);de.state[ae.key]=ae.value,m.add(ae.path),q.add(ae.uid);}),x(),q.size>0&&U(null,Array.from(q));});t.pushIntoHistory(w);}let y=new Set;c.forEach(w=>{let V=d(w.path);V.state[w.key]=w.value,m.add(V.uid),y.add(V.uid);}),x(),y.size>0&&U(null,Array.from(y));},useEntangle:b,updateEntangleLevel:M,SetBucket:Y,GetBucket:A,CancelTask:_,stageValueFn:ee,UITrigger:i,UidToNodeMap:o}}function dt(g,e){let t=false,r=false,i=false,l=false,u=new Map,a=[],o=[],p=[],h=[],n=[],P=[],m=[],S=new Map,{GetNextDependency:x,GetPrevDependency:b,GetAllPrevDependency:M,GetAllNextDependency:se,rebuildDirectDependencyMaps:U}=nt(()=>a,()=>p,()=>P,()=>n),_={},ee={};if(e.modules.useHistory){let j=e.modules.useHistory,f;j.isMeshModuleInited?f=j:f=j();let{Undo:W,Redo:D,PushIntoHistory:Q,CreateHistoryAction:le,updateUndoSize:L,updateRedoSize:ne}=f();_.pushIntoHistory=Q,_.createHistoryAction=le,ee={Undo:W,Redo:D,updateUndoSize:L,updateRedoSize:ne};}let z=!!e.modules.useMeshRenderGate,C={};if(z){let j=e.modules.useMeshRenderGate.isMeshModuleInited,f=e.modules.useMeshRenderGate;C=(j?f:f())(()=>ae);}let{onError:te,callOnError:d}=st(),{onSuccess:s,callOnSuccess:H}=at(),{onStart:k,callOnStart:Y}=it(),{emit:A,usePlugin:E,destroyPlugin:T}=ot(),{SetTrace:O,useTrace:v}=et(),G=v();E(G);let c=z?{...C}:{...e.UITrigger},y=yt({useGreedy:e.config.useGreedy,useEntangleStep:e.config.useEntangleStep||100},{GetDependencyOrder:()=>m,GetAllNextDependency:se,GetNextDependency:x,GetPrevDependency:b,GetAllPrevDependency:M,GetUidToLevelMap:()=>S},_,{callOnError:d,callOnSuccess:H,callOnStart:Y,emit:A},c),{SetBucket:w,GetBucket:V,GetGroupByPath:q,GetNodeByPath:ae,notifyAll:de,useEntangle:me,updateEntangleLevel:Ne,CancelTask:Te,stageValueFn:Pe}=y;z&&C.init();let xe={};if(e.modules.useInternalForm){let{uiSchema:j,GetFormData:f}=e.modules.useInternalForm(y,g);xe={uiSchema:j,GetFormData:f};}let Oe={};if(e.modules.useSchemaValidators){let{SetValidators:j}=e.modules.useSchemaValidators(ae);Oe={SetValidators:j};}let{SetRule:ke,SetRules:De}=Ze(ae,w,V,a,p,o,h,u),{SetStrategy:be}=Je(ae,V),oe=rt(a,u),ie=()=>{let j=oe();m=j.steps,S=j.levelMap,Re();},Re=()=>{i&&(Ne(),i=false);},Se=()=>{l||(l=true,Promise.resolve().then(Re).finally(()=>{l=false;}));},Ie=()=>{r||(r=true,Promise.resolve().then(()=>{if(ie(),t){let{directNextMap:j,directPrevMap:f}=U(m.flat());n=j,P=f;}}).finally(()=>{r=false,t=false;}));};return {SetRule:(j,f,W,D)=>{ke(j,f,W,D),t=true,Ie();},SetRules:(j,f,W,D)=>{De(j,f,W,D),t=true,Ie();},SetStrategy:be,useEntangle:j=>{me(j),i=true,Se();},SetTrace:O,usePlugin:E,SetValue:(j,f,W)=>{Re(),ae(j).dependOn(()=>W,f);},GetValue:(j,f="value")=>ae(j).proxy[f],SetValues:j=>{Re(),y.batchNotify(j);},GetGroupByPath:q,notifyAll:async()=>{ie(),await de();},GetAllDependency:()=>a,GetDependencyOrder:()=>m,historyExports:ee,formExports:xe,validatorExports:Oe,batchRenderExport:C,hasRenderGate:()=>z,onError:te,onSuccess:s,onStart:k,scheduler:y,destroyPlugin:T,CancelTask:Te,StageValue:(j,f,W)=>{let D=ae(j);Pe(D.uid,f,W);}}}var Ke=new Map,ht=(g,e,t)=>{try{if(Ke.has(g))throw Error("engineID repeated");let r=dt(e,{config:t.config||{useGreedy:!1},UITrigger:t.UITrigger,modules:t.modules??{},plugins:{}}),{SetRule:i,SetRules:l,SetValues:u,SetStrategy:a,SetValue:o,GetValue:p,usePlugin:h,useEntangle:n,GetGroupByPath:P,notifyAll:m,SetTrace:S,GetAllDependency:N,GetDependencyOrder:x,historyExports:b,formExports:M,validatorExports:se,batchRenderExport:U,hasRenderGate:_,onError:ee,onSuccess:z,onStart:C,scheduler:te,destroyPlugin:d,CancelTask:s,StageValue:H}=r,k={config:{SetRule:i,SetRules:l,SetStrategy:a,notifyAll:m,SetTrace:S,usePlugin:h,hasRenderGate:_,useEntangle:n},data:{SetValue:o,GetValue:p,SetValues:u,GetGroupByPath:P,StageValue:H},dependency:{GetAllDependency:N,GetDependencyOrder:x},hooks:{onError:ee,onSuccess:z,onStart:C}},Y=(T,O,v)=>{!O||typeof O!="object"||Object.keys(O).forEach(G=>{let c=O[G];if(typeof c=="object"&&c!==null)T[G]=T[G]||{},Y(T[G],c,v);else if(typeof c=="function"){let y=G;if(y==="useMeshRenderGate")y="render";else if(y.startsWith("use")){let w=y.slice(3);y=w.charAt(0).toLowerCase()+w.slice(1);}G==="useHistory"&&v.exports.history&&Object.keys(v.exports.history).length>0?T[y]=v.exports.history:G==="useInternalForm"&&v.exports.form&&Object.keys(v.exports.form).length>0?T[y]=v.exports.form:G==="useSchemaValidators"&&v.exports.validator&&Object.keys(v.exports.validator).length>0?T[y]=v.exports.validator:G==="useMeshRenderGate"&&v.exports.render?T[y]=v.exports.render:T[y]=c(v.scheduler,v.Schema);}});},A={...k,destroyPlugin:d,CancelTask:s,modules:{}},E=t.modules;return E&&Y(A.modules,E,{scheduler:te,Schema:e,exports:{history:b,form:M,validator:se,render:U}}),Ke.set(g,A),A}catch(r){throw Error(r)}},xn=()=>(g,e,t)=>ht(g,e,t),An=g=>{let e=Ke.get(g);if(!e)throw Error("Engine not found.");return e},vn=g=>{let e=Ke.get(g);e.destroyPlugin(),e.CancelTask(),Ke.delete(g);};export{_e as DefaultStrategy,Ce as MeshFlowEventsName,Le as TriggerCause,vn as deleteEngine,An as useEngine,ht as useMeshFlow,xn as useMeshFlowDefiner,yt as useScheduler};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@meshflow/core",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.2",
|
|
4
4
|
"description": "A logic orchestration engine utilizing topological scheduling and watermark control to resolve asynchronous race conditions in complex dependency linkages.",
|
|
5
5
|
"main": "./index.cjs",
|
|
6
6
|
"module": "./index.js",
|