reactronic 0.93.25025 → 0.94.25027

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/README.md +41 -40
  2. package/build/dist/source/Enums.d.ts +32 -0
  3. package/build/dist/source/Enums.js +37 -0
  4. package/build/dist/source/OperationEx.d.ts +7 -0
  5. package/build/dist/source/{ReactiveLoop.js → OperationEx.js} +8 -8
  6. package/build/dist/source/Options.d.ts +7 -27
  7. package/build/dist/source/Options.js +0 -24
  8. package/build/dist/source/Pipe.d.ts +2 -2
  9. package/build/dist/source/Pipe.js +2 -2
  10. package/build/dist/source/Ref.d.ts +1 -1
  11. package/build/dist/source/Ref.js +4 -4
  12. package/build/dist/source/System.d.ts +29 -0
  13. package/build/dist/source/{ReactiveSystem.js → System.js} +24 -19
  14. package/build/dist/source/api.d.ts +12 -10
  15. package/build/dist/source/api.js +10 -8
  16. package/build/dist/source/core/Changeset.d.ts +8 -7
  17. package/build/dist/source/core/Changeset.js +18 -18
  18. package/build/dist/source/core/Data.d.ts +6 -6
  19. package/build/dist/source/core/Data.js +2 -2
  20. package/build/dist/source/core/Indicator.d.ts +2 -2
  21. package/build/dist/source/core/Indicator.js +3 -3
  22. package/build/dist/source/core/Journal.d.ts +2 -2
  23. package/build/dist/source/core/Journal.js +7 -7
  24. package/build/dist/source/core/Meta.d.ts +1 -1
  25. package/build/dist/source/core/Meta.js +1 -1
  26. package/build/dist/source/core/Mvcc.d.ts +17 -16
  27. package/build/dist/source/core/Mvcc.js +30 -30
  28. package/build/dist/source/core/MvccArray.d.ts +3 -3
  29. package/build/dist/source/core/MvccArray.js +4 -4
  30. package/build/dist/source/core/MvccMap.d.ts +3 -3
  31. package/build/dist/source/core/MvccMap.js +4 -4
  32. package/build/dist/source/core/MvccMergeList.d.ts +2 -2
  33. package/build/dist/source/core/MvccMergeList.js +2 -2
  34. package/build/dist/source/core/Operation.d.ts +25 -25
  35. package/build/dist/source/core/Operation.js +200 -200
  36. package/build/dist/source/core/Transaction.d.ts +3 -3
  37. package/build/dist/source/core/Transaction.js +72 -72
  38. package/build/dist/source/core/Tree.d.ts +26 -0
  39. package/build/dist/source/core/Tree.js +120 -0
  40. package/build/dist/source/core/TreeNode.d.ts +117 -0
  41. package/build/dist/source/core/{ReactiveNode.js → TreeNode.js} +57 -185
  42. package/package.json +1 -1
  43. package/build/dist/source/ReactiveLoop.d.ts +0 -7
  44. package/build/dist/source/ReactiveSystem.d.ts +0 -30
  45. package/build/dist/source/core/ReactiveNode.d.ts +0 -107
@@ -1,7 +1,7 @@
1
1
  import { F } from "../util/Utils.js";
2
2
  import { Worker } from "../Worker.js";
3
3
  import { SnapshotOptions } from "../Options.js";
4
- import { ObjectHandle, ObjectVersion, Reaction, FieldVersion, FieldKey } from "./Data.js";
4
+ import { ObjectHandle, ObjectVersion, OperationFootprint, ContentFootprint, FieldKey } from "./Data.js";
5
5
  import { Changeset } from "./Changeset.js";
6
6
  export declare abstract class Transaction implements Worker {
7
7
  static get current(): Transaction;
@@ -78,13 +78,13 @@ export declare class TransactionImpl extends Transaction {
78
78
  private checkForConflicts;
79
79
  private tryResolveConflicts;
80
80
  private applyOrDiscard;
81
- applyOrDiscardChangeset(): Array<Reaction>;
81
+ applyOrDiscardChangeset(): Array<OperationFootprint>;
82
82
  applyObjectChanges(h: ObjectHandle, ov: ObjectVersion): void;
83
83
  static migrateObjectChangesToAnotherTransaction(h: ObjectHandle, ov: ObjectVersion, tParent: Transaction): void;
84
84
  static migrateFieldVersionToAnotherTransaction(h: ObjectHandle, fk: FieldKey, ov: ObjectVersion, ovParent: ObjectVersion, tParent: Transaction): void;
85
85
  private acquirePromise;
86
86
  private static getCurrentChangeset;
87
87
  private static getEditableChangeset;
88
- static migrateFieldVersion: (fv: FieldVersion, target: Transaction) => FieldVersion;
88
+ static migrateContentFootprint: (fv: ContentFootprint, target: Transaction) => ContentFootprint;
89
89
  static _init(): void;
90
90
  }
@@ -9,7 +9,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  };
10
10
  import { UNDEF, pause } from "../util/Utils.js";
11
11
  import { Log, misuse, error, fatal } from "../util/Dbg.js";
12
- import { Isolation } from "../Options.js";
12
+ import { Isolation } from "../Enums.js";
13
13
  import { Meta } from "./Data.js";
14
14
  import { Changeset, Dump, EMPTY_OBJECT_VERSION, UNDEFINED_REVISION } from "./Changeset.js";
15
15
  export class Transaction {
@@ -354,73 +354,73 @@ export class TransactionImpl extends Transaction {
354
354
  }
355
355
  static migrateFieldVersionToAnotherTransaction(h, fk, ov, ovParent, tParent) {
356
356
  const csParent = tParent.changeset;
357
- const fv = ov.data[fk];
358
- const fvParent = ovParent.data[fk];
359
- if (fv.isLaunch) {
360
- const migrated = TransactionImpl.migrateFieldVersion(fv, tParent);
361
- if (ovParent.former.objectVersion.data[fk] !== fvParent) {
362
- let reactions = fvParent.reactions;
363
- if (reactions) {
364
- const migratedReactions = migrated.reactions = new Set();
365
- reactions.forEach(o => {
366
- const conformingTriggers = o.triggers;
367
- const sub = conformingTriggers.get(fvParent);
368
- conformingTriggers.delete(fvParent);
369
- conformingTriggers.set(migrated, sub);
370
- migratedReactions.add(o);
357
+ const cf = ov.data[fk];
358
+ const cfParent = ovParent.data[fk];
359
+ if (cf.isComputed) {
360
+ const migrated = TransactionImpl.migrateContentFootprint(cf, tParent);
361
+ if (ovParent.former.objectVersion.data[fk] !== cfParent) {
362
+ let subscribers = cfParent.subscribers;
363
+ if (subscribers) {
364
+ const migratedSubscribers = migrated.subscribers = new Set();
365
+ subscribers.forEach(o => {
366
+ const conformingObservables = o.observables;
367
+ const sub = conformingObservables.get(cfParent);
368
+ conformingObservables.delete(cfParent);
369
+ conformingObservables.set(migrated, sub);
370
+ migratedSubscribers.add(o);
371
371
  });
372
- fvParent.reactions = undefined;
372
+ cfParent.subscribers = undefined;
373
373
  }
374
- reactions = fv.reactions;
375
- if (reactions) {
376
- let migratedReactions = migrated.reactions;
377
- if (migratedReactions === undefined)
378
- migratedReactions = migrated.reactions = new Set();
379
- reactions.forEach(o => {
380
- const conformingTriggers = o.triggers;
381
- const sub = conformingTriggers.get(fv);
382
- conformingTriggers.delete(fv);
383
- conformingTriggers.set(migrated, sub);
384
- migratedReactions.add(o);
374
+ subscribers = cf.subscribers;
375
+ if (subscribers) {
376
+ let migratedSubscribers = migrated.subscribers;
377
+ if (migratedSubscribers === undefined)
378
+ migratedSubscribers = migrated.subscribers = new Set();
379
+ subscribers.forEach(o => {
380
+ const conformingObservables = o.observables;
381
+ const sub = conformingObservables.get(cf);
382
+ conformingObservables.delete(cf);
383
+ conformingObservables.set(migrated, sub);
384
+ migratedSubscribers.add(o);
385
385
  });
386
- fv.reactions = undefined;
386
+ cf.subscribers = undefined;
387
387
  }
388
- const triggers = fv.triggers;
389
- const migratedTriggers = migrated.triggers;
390
- if (triggers) {
391
- triggers.forEach((s, o) => {
392
- const conformingReactions = o.reactions;
393
- conformingReactions.delete(fv);
394
- conformingReactions.add(migrated);
395
- migratedTriggers.set(o, s);
388
+ const observables = cf.observables;
389
+ const migratedObservables = migrated.observables;
390
+ if (observables) {
391
+ observables.forEach((s, o) => {
392
+ const conformingSubscribers = o.subscribers;
393
+ conformingSubscribers.delete(cf);
394
+ conformingSubscribers.add(migrated);
395
+ migratedObservables.set(o, s);
396
396
  });
397
- triggers.clear();
397
+ observables.clear();
398
398
  }
399
399
  ovParent.data[fk] = migrated;
400
400
  }
401
401
  else {
402
- const reactions = fv.reactions;
403
- if (reactions) {
404
- const migratedReactions = migrated.reactions = new Set();
405
- reactions.forEach(o => {
406
- const conformingTriggers = o.triggers;
407
- const sub = conformingTriggers.get(fv);
408
- conformingTriggers.delete(fv);
409
- conformingTriggers.set(migrated, sub);
402
+ const subscribers = cf.subscribers;
403
+ if (subscribers) {
404
+ const migratedReactions = migrated.subscribers = new Set();
405
+ subscribers.forEach(o => {
406
+ const conformingObservables = o.observables;
407
+ const sub = conformingObservables.get(cf);
408
+ conformingObservables.delete(cf);
409
+ conformingObservables.set(migrated, sub);
410
410
  migratedReactions.add(o);
411
411
  });
412
- fv.reactions = undefined;
412
+ cf.subscribers = undefined;
413
413
  }
414
- const triggers = fv.triggers;
415
- const migratedTriggers = migrated.triggers;
416
- if (triggers) {
417
- triggers.forEach((s, o) => {
418
- const conformingReactions = o.reactions;
419
- conformingReactions.delete(fv);
420
- conformingReactions.add(migrated);
421
- migratedTriggers.set(o, s);
414
+ const observables = cf.observables;
415
+ const migratedObservables = migrated.observables;
416
+ if (observables) {
417
+ observables.forEach((s, o) => {
418
+ const conformingSubscribers = o.subscribers;
419
+ conformingSubscribers.delete(cf);
420
+ conformingSubscribers.add(migrated);
421
+ migratedObservables.set(o, s);
422
422
  });
423
- triggers.clear();
423
+ observables.clear();
424
424
  }
425
425
  ovParent.data[fk] = migrated;
426
426
  }
@@ -428,25 +428,25 @@ export class TransactionImpl extends Transaction {
428
428
  Changeset.markEdited(undefined, migrated, true, ovParent, fk, h);
429
429
  }
430
430
  else {
431
- const parentContent = fvParent === null || fvParent === void 0 ? void 0 : fvParent.content;
432
- if (ovParent.former.objectVersion.data[fk] !== fvParent) {
433
- fvParent.content = fv.content;
434
- const reactions = fv.reactions;
435
- if (reactions) {
436
- if (fvParent.reactions === undefined)
437
- fvParent.reactions = new Set();
438
- reactions.forEach(o => {
439
- const conformingTriggers = o.triggers;
440
- const sub = conformingTriggers.get(fv);
441
- conformingTriggers.delete(fv);
442
- conformingTriggers.set(fvParent, sub);
443
- fvParent.reactions.add(o);
431
+ const parentContent = cfParent === null || cfParent === void 0 ? void 0 : cfParent.content;
432
+ if (ovParent.former.objectVersion.data[fk] !== cfParent) {
433
+ cfParent.content = cf.content;
434
+ const subscribers = cf.subscribers;
435
+ if (subscribers) {
436
+ if (cfParent.subscribers === undefined)
437
+ cfParent.subscribers = new Set();
438
+ subscribers.forEach(o => {
439
+ const conformingObservables = o.observables;
440
+ const sub = conformingObservables.get(cf);
441
+ conformingObservables.delete(cf);
442
+ conformingObservables.set(cfParent, sub);
443
+ cfParent.subscribers.add(o);
444
444
  });
445
445
  }
446
446
  }
447
447
  else
448
- ovParent.data[fk] = fv;
449
- Changeset.markEdited(parentContent, fv.content, true, ovParent, fk, h);
448
+ ovParent.data[fk] = cf;
449
+ Changeset.markEdited(parentContent, cf.content, true, ovParent, fk, h);
450
450
  }
451
451
  }
452
452
  acquirePromise() {
@@ -479,7 +479,7 @@ TransactionImpl.gCurr = TransactionImpl.none;
479
479
  TransactionImpl.isInspectionMode = false;
480
480
  TransactionImpl.frameStartTime = 0;
481
481
  TransactionImpl.frameOverCounter = 0;
482
- TransactionImpl.migrateFieldVersion = function (fv, target) {
483
- throw misuse("this implementation of cloneLaunch should never be called");
482
+ TransactionImpl.migrateContentFootprint = function (fv, target) {
483
+ throw misuse("this implementation of migrateContentFootprint should never be called");
484
484
  };
485
485
  TransactionImpl._init();
@@ -0,0 +1,26 @@
1
+ import { Priority, Mode } from "../Enums.js";
2
+ import { ReactiveTreeNodeDriver, ReactiveTreeNodeDecl, Script, ScriptAsync, Handler, ReactiveTreeNode } from "./TreeNode.js";
3
+ import { LoggingOptions } from "../Logging.js";
4
+ export declare class ReactiveTree {
5
+ static declare<E = void>(driver: ReactiveTreeNodeDriver<E>, script?: Script<E>, scriptAsync?: ScriptAsync<E>, key?: string, mode?: Mode, preparation?: Script<E>, preparationAsync?: ScriptAsync<E>, finalization?: Script<E>, triggers?: unknown, basis?: ReactiveTreeNodeDecl<E>): ReactiveTreeNode<E>;
6
+ static declare<E = void>(driver: ReactiveTreeNodeDriver<E>, declaration?: ReactiveTreeNodeDecl<E>): ReactiveTreeNode<E>;
7
+ static declare<E = void>(driver: ReactiveTreeNodeDriver<E>, scriptOrDeclaration?: Script<E> | ReactiveTreeNodeDecl<E>, scriptAsync?: ScriptAsync<E>, key?: string, mode?: Mode, preparation?: Script<E>, preparationAsync?: ScriptAsync<E>, finalization?: Script<E>, triggers?: unknown, basis?: ReactiveTreeNodeDecl<E>): ReactiveTreeNode<E>;
8
+ static withBasis<E = void>(declaration?: ReactiveTreeNodeDecl<E>, basis?: ReactiveTreeNodeDecl<E>): ReactiveTreeNodeDecl<E>;
9
+ static get isFirstScriptRun(): boolean;
10
+ static get key(): string;
11
+ static get stamp(): number;
12
+ static get triggers(): unknown;
13
+ static get priority(): Priority;
14
+ static set priority(value: Priority);
15
+ static get childrenShuffling(): boolean;
16
+ static set childrenShuffling(value: boolean);
17
+ static triggerScriptRun(node: ReactiveTreeNode<any>, triggers: unknown): void;
18
+ static triggerFinalization(node: ReactiveTreeNode<any>): void;
19
+ static runNestedNodeScriptsThenDo(action: (error: unknown) => void): void;
20
+ static markAsMounted(node: ReactiveTreeNode<any>, yes: boolean): void;
21
+ static findMatchingHost<E = unknown, R = unknown>(node: ReactiveTreeNode<E>, match: Handler<ReactiveTreeNode<E>, boolean>): ReactiveTreeNode<R> | undefined;
22
+ static findMatchingPrevSibling<E = unknown, R = unknown>(node: ReactiveTreeNode<E>, match: Handler<ReactiveTreeNode<E>, boolean>): ReactiveTreeNode<R> | undefined;
23
+ static forEachChildRecursively<E = unknown>(node: ReactiveTreeNode<E>, action: Handler<ReactiveTreeNode<E>>): void;
24
+ static getDefaultLoggingOptions(): LoggingOptions | undefined;
25
+ static setDefaultLoggingOptions(logging?: LoggingOptions): void;
26
+ }
@@ -0,0 +1,120 @@
1
+ import { Mode } from "../Enums.js";
2
+ import { generateKey, observablesAreEqual } from "./TreeNode.js";
3
+ import { MergeList } from "../util/MergeList.js";
4
+ export class ReactiveTree {
5
+ static declare(driver, scriptOrDeclaration, scriptAsync, key, mode, preparation, preparationAsync, finalization, triggers, basis) {
6
+ let result;
7
+ let declaration;
8
+ if (scriptOrDeclaration instanceof Function) {
9
+ declaration = {
10
+ script: scriptOrDeclaration, scriptAsync, key, mode,
11
+ preparation, preparationAsync, finalization, triggers, basis,
12
+ };
13
+ }
14
+ else
15
+ declaration = scriptOrDeclaration !== null && scriptOrDeclaration !== void 0 ? scriptOrDeclaration : {};
16
+ let effectiveKey = declaration.key;
17
+ const owner = (getModeUsingBasisChain(declaration) & Mode.rootNode) !== Mode.rootNode ? gNodeSlot === null || gNodeSlot === void 0 ? void 0 : gNodeSlot.instance : undefined;
18
+ if (owner) {
19
+ let existing = owner.driver.declareChild(owner, driver, declaration, declaration.basis);
20
+ const children = owner.children;
21
+ existing !== null && existing !== void 0 ? existing : (existing = children.tryMergeAsExisting(effectiveKey = effectiveKey || generateKey(owner), undefined, "nested elements can be declared inside 'script' only"));
22
+ if (existing) {
23
+ result = existing.instance;
24
+ if (result.driver !== driver && driver !== undefined)
25
+ throw new Error(`changing element driver is not yet supported: "${result.driver.name}" -> "${driver === null || driver === void 0 ? void 0 : driver.name}"`);
26
+ const exTriggers = result.declaration.triggers;
27
+ if (observablesAreEqual(declaration.triggers, exTriggers))
28
+ declaration.triggers = exTriggers;
29
+ result.declaration = declaration;
30
+ }
31
+ else {
32
+ result = new ReactiveTreeNodeImpl(effectiveKey || generateKey(owner), driver, declaration, owner);
33
+ result.slot = children.mergeAsAdded(result);
34
+ }
35
+ }
36
+ else {
37
+ result = new ReactiveTreeNodeImpl(effectiveKey || "", driver, declaration, owner);
38
+ result.slot = MergeList.createItem(result);
39
+ triggerScriptRunViaSlot(result.slot);
40
+ }
41
+ return result;
42
+ }
43
+ static withBasis(declaration, basis) {
44
+ if (declaration)
45
+ declaration.basis = basis;
46
+ else
47
+ declaration = basis !== null && basis !== void 0 ? basis : {};
48
+ return declaration;
49
+ }
50
+ static get isFirstScriptRun() {
51
+ return ReactiveTreeNodeImpl.nodeSlot.instance.stamp === 1;
52
+ }
53
+ static get key() {
54
+ return ReactiveTreeNodeImpl.nodeSlot.instance.key;
55
+ }
56
+ static get stamp() {
57
+ return ReactiveTreeNodeImpl.nodeSlot.instance.stamp;
58
+ }
59
+ static get triggers() {
60
+ return ReactiveTreeNodeImpl.nodeSlot.instance.declaration.triggers;
61
+ }
62
+ static get priority() {
63
+ return ReactiveTreeNodeImpl.nodeSlot.instance.priority;
64
+ }
65
+ static set priority(value) {
66
+ ReactiveTreeNodeImpl.nodeSlot.instance.priority = value;
67
+ }
68
+ static get childrenShuffling() {
69
+ return ReactiveTreeNodeImpl.nodeSlot.instance.childrenShuffling;
70
+ }
71
+ static set childrenShuffling(value) {
72
+ ReactiveTreeNodeImpl.nodeSlot.instance.childrenShuffling = value;
73
+ }
74
+ static triggerScriptRun(node, triggers) {
75
+ const impl = node;
76
+ const declaration = impl.declaration;
77
+ if (!observablesAreEqual(triggers, declaration.triggers)) {
78
+ declaration.triggers = triggers;
79
+ triggerScriptRunViaSlot(impl.slot);
80
+ }
81
+ }
82
+ static triggerFinalization(node) {
83
+ const impl = node;
84
+ triggerFinalization(impl.slot, true, true);
85
+ }
86
+ static runNestedNodeScriptsThenDo(action) {
87
+ runNestedNodeScriptsThenDoImpl(ReactiveTreeNodeImpl.nodeSlot, undefined, action);
88
+ }
89
+ static markAsMounted(node, yes) {
90
+ const n = node;
91
+ if (n.stamp < 0)
92
+ throw new Error("deactivated node cannot be mounted or unmounted");
93
+ if (n.stamp >= Number.MAX_SAFE_INTEGER)
94
+ throw new Error("node must be activated before mounting");
95
+ n.stamp = yes ? 0 : Number.MAX_SAFE_INTEGER - 1;
96
+ }
97
+ static findMatchingHost(node, match) {
98
+ let p = node.host;
99
+ while (p !== p.host && !match(p))
100
+ p = p.host;
101
+ return p;
102
+ }
103
+ static findMatchingPrevSibling(node, match) {
104
+ let p = node.slot.prev;
105
+ while (p && !match(p.instance))
106
+ p = p.prev;
107
+ return p === null || p === void 0 ? void 0 : p.instance;
108
+ }
109
+ static forEachChildRecursively(node, action) {
110
+ action(node);
111
+ for (const child of node.children.items())
112
+ ReactiveTree.forEachChildRecursively(child.instance, action);
113
+ }
114
+ static getDefaultLoggingOptions() {
115
+ return ReactiveTreeNodeImpl.logging;
116
+ }
117
+ static setDefaultLoggingOptions(logging) {
118
+ ReactiveTreeNodeImpl.logging = logging;
119
+ }
120
+ }
@@ -0,0 +1,117 @@
1
+ import { LoggingOptions } from "../Logging.js";
2
+ import { MergeList, MergeListReader, MergedItem } from "../util/MergeList.js";
3
+ import { Priority, Mode } from "../Enums.js";
4
+ import { ReactivityOptions } from "../Options.js";
5
+ import { ObservableObject } from "../core/Mvcc.js";
6
+ export type Script<E> = (el: E, basis: () => void) => void;
7
+ export type ScriptAsync<E> = (el: E, basis: () => Promise<void>) => Promise<void>;
8
+ export type Handler<E = unknown, R = void> = (el: E) => R;
9
+ export declare abstract class ReactiveTreeNode<E = unknown> {
10
+ abstract readonly key: string;
11
+ abstract readonly driver: ReactiveTreeNodeDriver<E>;
12
+ abstract readonly declaration: Readonly<ReactiveTreeNodeDecl<E>>;
13
+ abstract readonly level: number;
14
+ abstract readonly owner: ReactiveTreeNode;
15
+ abstract element: E;
16
+ abstract readonly host: ReactiveTreeNode;
17
+ abstract readonly children: MergeListReader<ReactiveTreeNode>;
18
+ abstract readonly slot: MergedItem<ReactiveTreeNode<E>> | undefined;
19
+ abstract readonly stamp: number;
20
+ abstract readonly outer: ReactiveTreeNode;
21
+ abstract readonly context: ReactiveTreeNodeContext | undefined;
22
+ abstract priority?: Priority;
23
+ abstract childrenShuffling: boolean;
24
+ abstract strictOrder: boolean;
25
+ abstract has(mode: Mode): boolean;
26
+ abstract configureReactronic(options: Partial<ReactivityOptions>): ReactivityOptions;
27
+ }
28
+ export type ReactiveTreeNodeDecl<E = unknown> = {
29
+ script?: Script<E>;
30
+ scriptAsync?: ScriptAsync<E>;
31
+ key?: string;
32
+ mode?: Mode;
33
+ preparation?: Script<E>;
34
+ preparationAsync?: ScriptAsync<E>;
35
+ finalization?: Script<E>;
36
+ triggers?: unknown;
37
+ basis?: ReactiveTreeNodeDecl<E>;
38
+ };
39
+ export type ReactiveTreeNodeDriver<E = unknown> = {
40
+ readonly name: string;
41
+ readonly isPartition: boolean;
42
+ readonly initialize?: Handler<E>;
43
+ create(node: ReactiveTreeNode<E>): E;
44
+ runPreparation(node: ReactiveTreeNode<E>): void;
45
+ runFinalization(node: ReactiveTreeNode<E>, isLeader: boolean): boolean;
46
+ runMount(node: ReactiveTreeNode<E>): void;
47
+ runScript(node: ReactiveTreeNode<E>): void | Promise<void>;
48
+ declareChild(ownerNode: ReactiveTreeNode<E>, childDriver: ReactiveTreeNodeDriver<any>, childDeclaration?: ReactiveTreeNodeDecl<any>, childBasis?: ReactiveTreeNodeDecl<any>): MergedItem<ReactiveTreeNode> | undefined;
49
+ provideHost(node: ReactiveTreeNode<E>): ReactiveTreeNode<E>;
50
+ };
51
+ export type ReactiveTreeNodeContext<T extends Object = Object> = {
52
+ value: T;
53
+ };
54
+ export declare abstract class BaseDriver<E = unknown> implements ReactiveTreeNodeDriver<E> {
55
+ readonly name: string;
56
+ readonly isPartition: boolean;
57
+ readonly initialize?: Handler<E> | undefined;
58
+ constructor(name: string, isPartition: boolean, initialize?: Handler<E> | undefined);
59
+ abstract create(node: ReactiveTreeNode<E>): E;
60
+ runPreparation(node: ReactiveTreeNode<E>): void | Promise<void>;
61
+ runFinalization(node: ReactiveTreeNode<E>, isLeader: boolean): boolean;
62
+ runMount(node: ReactiveTreeNode<E>): void;
63
+ runScript(node: ReactiveTreeNode<E>): void | Promise<void>;
64
+ declareChild(ownerNode: ReactiveTreeNode<E>, childDriver: ReactiveTreeNodeDriver<any>, childDeclaration?: ReactiveTreeNodeDecl<any>, childBasis?: ReactiveTreeNodeDecl<any>): MergedItem<ReactiveTreeNode> | undefined;
65
+ provideHost(node: ReactiveTreeNode<E>): ReactiveTreeNode<E>;
66
+ }
67
+ export declare class ReactiveTreeVariable<T extends Object = Object> {
68
+ readonly defaultValue: T | undefined;
69
+ constructor(defaultValue?: T);
70
+ set value(value: T);
71
+ get value(): T;
72
+ get valueOrUndefined(): T | undefined;
73
+ }
74
+ export declare function generateKey(owner: ReactiveTreeNodeImpl): string;
75
+ declare class ReactiveTreeNodeContextImpl<T extends Object = Object> extends ObservableObject implements ReactiveTreeNodeContext<T> {
76
+ next: ReactiveTreeNodeContextImpl<object> | undefined;
77
+ variable: ReactiveTreeVariable<T>;
78
+ value: T;
79
+ constructor(variable: ReactiveTreeVariable<T>, value: T);
80
+ }
81
+ declare class ReactiveTreeNodeImpl<E = unknown> extends ReactiveTreeNode<E> {
82
+ static logging: LoggingOptions | undefined;
83
+ static grandNodeCount: number;
84
+ static disposableNodeCount: number;
85
+ static readonly shortFrameDuration = 16;
86
+ static readonly longFrameDuration = 300;
87
+ static currentScriptPriority: Priority;
88
+ static frameDuration: number;
89
+ readonly key: string;
90
+ readonly driver: ReactiveTreeNodeDriver<E>;
91
+ declaration: ReactiveTreeNodeDecl<E>;
92
+ readonly level: number;
93
+ readonly owner: ReactiveTreeNodeImpl;
94
+ readonly element: E;
95
+ host: ReactiveTreeNodeImpl;
96
+ readonly children: MergeList<ReactiveTreeNodeImpl>;
97
+ slot: MergedItem<ReactiveTreeNodeImpl<E>> | undefined;
98
+ stamp: number;
99
+ outer: ReactiveTreeNodeImpl;
100
+ context: ReactiveTreeNodeContextImpl<any> | undefined;
101
+ numerator: number;
102
+ priority: Priority;
103
+ childrenShuffling: boolean;
104
+ constructor(key: string, driver: ReactiveTreeNodeDriver<E>, declaration: Readonly<ReactiveTreeNodeDecl<E>>, owner: ReactiveTreeNodeImpl | undefined);
105
+ get strictOrder(): boolean;
106
+ set strictOrder(value: boolean);
107
+ get isMoved(): boolean;
108
+ has(mode: Mode): boolean;
109
+ script(_triggers: unknown): void;
110
+ configureReactronic(options: Partial<ReactivityOptions>): ReactivityOptions;
111
+ static get nodeSlot(): MergedItem<ReactiveTreeNodeImpl>;
112
+ static tryUseNodeVariableValue<T extends Object>(variable: ReactiveTreeVariable<T>): T | undefined;
113
+ static useNodeVariableValue<T extends Object>(variable: ReactiveTreeVariable<T>): T;
114
+ static setNodeVariableValue<T extends Object>(variable: ReactiveTreeVariable<T>, value: T | undefined): void;
115
+ }
116
+ export declare function observablesAreEqual(a1: any, a2: any): boolean;
117
+ export {};