reactronic 0.94.25032 → 0.94.25033

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.
@@ -21,5 +21,5 @@ export { Journal } from "./core/Journal.js";
21
21
  export { runAtomically, runNonReactively, runSensitively, runContextually, manageReactiveOperation, configureCurrentReactiveOperation, disposeObservableObject } from "./System.js";
22
22
  export { ReactiveSystem, observable, atomic, reactive, cached, options } from "./System.js";
23
23
  export { ReactiveOperationEx } from "./OperationEx.js";
24
- export { launch, ReactiveTreeNode, BaseDriver, ReactiveTreeVariable } from "./core/TreeNode.js";
24
+ export { declare, derived, launch, ReactiveTreeNode, BaseDriver, ReactiveTreeVariable } from "./core/TreeNode.js";
25
25
  export type { Script, ScriptAsync, Handler, ReactiveTreeNodeDecl, ReactiveTreeNodeDriver, ReactiveTreeNodeContext } from "./core/TreeNode.js";
@@ -17,4 +17,4 @@ export { Journal } from "./core/Journal.js";
17
17
  export { runAtomically, runNonReactively, runSensitively, runContextually, manageReactiveOperation, configureCurrentReactiveOperation, disposeObservableObject } from "./System.js";
18
18
  export { ReactiveSystem, observable, atomic, reactive, cached, options } from "./System.js";
19
19
  export { ReactiveOperationEx } from "./OperationEx.js";
20
- export { launch, ReactiveTreeNode, BaseDriver, ReactiveTreeVariable } from "./core/TreeNode.js";
20
+ export { declare, derived, launch, ReactiveTreeNode, BaseDriver, ReactiveTreeVariable } from "./core/TreeNode.js";
@@ -6,6 +6,10 @@ import { ObservableObject } from "../core/Mvcc.js";
6
6
  export type Script<E> = (el: E, basis: () => void) => void;
7
7
  export type ScriptAsync<E> = (el: E, basis: () => Promise<void>) => Promise<void>;
8
8
  export type Handler<E = unknown, R = void> = (el: E) => R;
9
+ export declare function 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>;
10
+ export declare function declare<E = void>(driver: ReactiveTreeNodeDriver<E>, declaration?: ReactiveTreeNodeDecl<E>): ReactiveTreeNode<E>;
11
+ export declare function 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>;
12
+ export declare function derived<E = void>(declaration?: ReactiveTreeNodeDecl<E>, basis?: ReactiveTreeNodeDecl<E>): ReactiveTreeNodeDecl<E>;
9
13
  export declare function launch<T>(node: ReactiveTreeNode<T>, triggers?: unknown): ReactiveTreeNode<T>;
10
14
  export declare abstract class ReactiveTreeNode<E = unknown> {
11
15
  static readonly shortFrameDuration = 16;
@@ -32,13 +36,9 @@ export declare abstract class ReactiveTreeNode<E = unknown> {
32
36
  abstract configureReactivity(options: Partial<ReactivityOptions>): ReactivityOptions;
33
37
  static get current(): ReactiveTreeNode;
34
38
  static get isFirstScriptRun(): boolean;
35
- 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>;
36
- static declare<E = void>(driver: ReactiveTreeNodeDriver<E>, declaration?: ReactiveTreeNodeDecl<E>): ReactiveTreeNode<E>;
37
- 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>;
38
- static withBasis<E = void>(declaration?: ReactiveTreeNodeDecl<E>, basis?: ReactiveTreeNodeDecl<E>): ReactiveTreeNodeDecl<E>;
39
39
  static launchScript(node: ReactiveTreeNode<any>, triggers: unknown): void;
40
40
  static launchFinalization(node: ReactiveTreeNode<any>): void;
41
- static runNestedNodeScriptsThenDo(action: (error: unknown) => void): void;
41
+ static launchNestedNodesThenDo(action: (error: unknown) => void): void;
42
42
  static markAsMounted(node: ReactiveTreeNode<any>, yes: boolean): void;
43
43
  lookupTreeNodeByUri<E = unknown>(uri: string): ReactiveTreeNode<E> | undefined;
44
44
  static findMatchingHost<E = unknown, R = unknown>(node: ReactiveTreeNode<E>, match: Handler<ReactiveTreeNode<E>, boolean>): ReactiveTreeNode<R> | undefined;
@@ -24,6 +24,50 @@ import { Priority, Mode, Isolation, Reentrance } from "../Enums.js";
24
24
  import { ObservableObject } from "../core/Mvcc.js";
25
25
  import { Transaction } from "../core/Transaction.js";
26
26
  import { ReactiveSystem, options, observable, reactive, runAtomically, runNonReactively, manageReactiveOperation, disposeObservableObject } from "../System.js";
27
+ export function declare(driver, scriptOrDeclaration, scriptAsync, key, mode, preparation, preparationAsync, finalization, triggers, basis) {
28
+ let result;
29
+ let declaration;
30
+ if (scriptOrDeclaration instanceof Function) {
31
+ declaration = {
32
+ script: scriptOrDeclaration, scriptAsync, key, mode,
33
+ preparation, preparationAsync, finalization, triggers, basis,
34
+ };
35
+ }
36
+ else
37
+ declaration = scriptOrDeclaration !== null && scriptOrDeclaration !== void 0 ? scriptOrDeclaration : {};
38
+ let effectiveKey = declaration.key;
39
+ const owner = gNodeSlot === null || gNodeSlot === void 0 ? void 0 : gNodeSlot.instance;
40
+ if (owner) {
41
+ let existing = owner.driver.declareChild(owner, driver, declaration, declaration.basis);
42
+ const children = owner.children;
43
+ existing !== null && existing !== void 0 ? existing : (existing = children.tryMergeAsExisting(effectiveKey = effectiveKey || generateKey(owner), undefined, "nested elements can be declared inside 'script' only"));
44
+ if (existing) {
45
+ result = existing.instance;
46
+ if (result.driver !== driver && driver !== undefined)
47
+ throw misuse(`changing element driver is not yet supported: "${result.driver.name}" -> "${driver === null || driver === void 0 ? void 0 : driver.name}"`);
48
+ const exTriggers = result.declaration.triggers;
49
+ if (observablesAreEqual(declaration.triggers, exTriggers))
50
+ declaration.triggers = exTriggers;
51
+ result.declaration = declaration;
52
+ }
53
+ else {
54
+ result = new ReactiveTreeNodeImpl(effectiveKey || generateKey(owner), driver, declaration, owner);
55
+ result.slot = children.mergeAsAdded(result);
56
+ }
57
+ }
58
+ else {
59
+ result = new ReactiveTreeNodeImpl(effectiveKey || generateKey(owner), driver, declaration, owner);
60
+ result.slot = MergeList.createItem(result);
61
+ }
62
+ return result;
63
+ }
64
+ export function derived(declaration, basis) {
65
+ if (declaration)
66
+ declaration.basis = basis;
67
+ else
68
+ declaration = basis !== null && basis !== void 0 ? basis : {};
69
+ return declaration;
70
+ }
27
71
  export function launch(node, triggers) {
28
72
  ReactiveTreeNode.launchScript(node, triggers);
29
73
  return node;
@@ -35,50 +79,6 @@ export class ReactiveTreeNode {
35
79
  static get isFirstScriptRun() {
36
80
  return ReactiveTreeNode.current.stamp === 1;
37
81
  }
38
- static declare(driver, scriptOrDeclaration, scriptAsync, key, mode, preparation, preparationAsync, finalization, triggers, basis) {
39
- let result;
40
- let declaration;
41
- if (scriptOrDeclaration instanceof Function) {
42
- declaration = {
43
- script: scriptOrDeclaration, scriptAsync, key, mode,
44
- preparation, preparationAsync, finalization, triggers, basis,
45
- };
46
- }
47
- else
48
- declaration = scriptOrDeclaration !== null && scriptOrDeclaration !== void 0 ? scriptOrDeclaration : {};
49
- let effectiveKey = declaration.key;
50
- const owner = gNodeSlot === null || gNodeSlot === void 0 ? void 0 : gNodeSlot.instance;
51
- if (owner) {
52
- let existing = owner.driver.declareChild(owner, driver, declaration, declaration.basis);
53
- const children = owner.children;
54
- existing !== null && existing !== void 0 ? existing : (existing = children.tryMergeAsExisting(effectiveKey = effectiveKey || generateKey(owner), undefined, "nested elements can be declared inside 'script' only"));
55
- if (existing) {
56
- result = existing.instance;
57
- if (result.driver !== driver && driver !== undefined)
58
- throw misuse(`changing element driver is not yet supported: "${result.driver.name}" -> "${driver === null || driver === void 0 ? void 0 : driver.name}"`);
59
- const exTriggers = result.declaration.triggers;
60
- if (observablesAreEqual(declaration.triggers, exTriggers))
61
- declaration.triggers = exTriggers;
62
- result.declaration = declaration;
63
- }
64
- else {
65
- result = new ReactiveTreeNodeImpl(effectiveKey || generateKey(owner), driver, declaration, owner);
66
- result.slot = children.mergeAsAdded(result);
67
- }
68
- }
69
- else {
70
- result = new ReactiveTreeNodeImpl(effectiveKey || generateKey(owner), driver, declaration, owner);
71
- result.slot = MergeList.createItem(result);
72
- }
73
- return result;
74
- }
75
- static withBasis(declaration, basis) {
76
- if (declaration)
77
- declaration.basis = basis;
78
- else
79
- declaration = basis !== null && basis !== void 0 ? basis : {};
80
- return declaration;
81
- }
82
82
  static launchScript(node, triggers) {
83
83
  const impl = node;
84
84
  const declaration = impl.declaration;
@@ -91,8 +91,8 @@ export class ReactiveTreeNode {
91
91
  const impl = node;
92
92
  launchFinalization(impl.slot, true, true);
93
93
  }
94
- static runNestedNodeScriptsThenDo(action) {
95
- runNestedNodeScriptsThenDoImpl(ReactiveTreeNodeImpl.nodeSlot, undefined, action);
94
+ static launchNestedNodesThenDo(action) {
95
+ launchNestedNodesThenDoImpl(ReactiveTreeNodeImpl.nodeSlot, undefined, action);
96
96
  }
97
97
  static markAsMounted(node, yes) {
98
98
  const n = node;
@@ -383,7 +383,7 @@ function gatherAuthorityAndPath(node, path, relativeTo) {
383
383
  function getNodeKey(node) {
384
384
  return node.stamp >= 0 ? node.key : undefined;
385
385
  }
386
- function runNestedNodeScriptsThenDoImpl(nodeSlot, error, action) {
386
+ function launchNestedNodesThenDoImpl(nodeSlot, error, action) {
387
387
  runInsideContextOfNode(nodeSlot, () => {
388
388
  var _a;
389
389
  const owner = nodeSlot.instance;
@@ -531,10 +531,10 @@ function runScriptNow(nodeSlot) {
531
531
  node.children.beginMerge();
532
532
  const driver = node.driver;
533
533
  result = driver.runScript(node);
534
- result = proceedSyncOrAsync(result, v => { runNestedNodeScriptsThenDoImpl(nodeSlot, undefined, NOP); return v; }, e => { console.log(e); runNestedNodeScriptsThenDoImpl(nodeSlot, e !== null && e !== void 0 ? e : new Error("unknown error"), NOP); });
534
+ result = proceedSyncOrAsync(result, v => { launchNestedNodesThenDoImpl(nodeSlot, undefined, NOP); return v; }, e => { console.log(e); launchNestedNodesThenDoImpl(nodeSlot, e !== null && e !== void 0 ? e : new Error("unknown error"), NOP); });
535
535
  }
536
536
  catch (e) {
537
- runNestedNodeScriptsThenDoImpl(nodeSlot, e, NOP);
537
+ launchNestedNodesThenDoImpl(nodeSlot, e, NOP);
538
538
  console.log(`Reactive node script failed: ${node.key}`);
539
539
  console.log(`${e}`);
540
540
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "reactronic",
3
- "version": "0.94.25032",
3
+ "version": "0.94.25033",
4
4
  "description": "Reactronic - Transactional Reactive State Management",
5
5
  "publisher": "Nezaboodka Software",
6
6
  "license": "Apache-2.0",