@rkmodules/rules 0.0.23 → 0.0.25

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/dist/index.js CHANGED
@@ -1,9 +1,8 @@
1
1
  'use strict';
2
2
 
3
3
  var mathjs = require('mathjs');
4
- var react = require('@xyflow/react');
5
- var useInner = require('@rkmodules/use-inner');
6
4
  var React = require('react');
5
+ var react = require('@xyflow/react');
7
6
  var katex = require('katex');
8
7
  var classNames = require('classnames');
9
8
  var zustand = require('zustand');
@@ -1406,49 +1405,6 @@ var Engine = /** @class */ (function () {
1406
1405
  return Engine;
1407
1406
  }());
1408
1407
 
1409
- var dummyEngine = new Engine();
1410
- var EngineContext = React.createContext(dummyEngine);
1411
- var useEngine = function () {
1412
- return React.useContext(EngineContext);
1413
- };
1414
- var ChangeContext = React.createContext(function () { });
1415
- var useChange = function () {
1416
- return React.useContext(ChangeContext);
1417
- };
1418
-
1419
- var styles = {"DefaultNode":"DefaultNode_R2P6c","selected":"selected_VmB-F","active":"active_zjUzx","Log":"Log_dsq5e","Label":"Label_wBwWA","Input":"Input_Yhvzf","Output":"Output_e4yF-","Table":"Table_aZyRT"};
1420
-
1421
- function NodeContainer(_a) {
1422
- var _b;
1423
- var id = _a.id, label = _a.label, className = _a.className, selected = _a.selected, children = _a.children;
1424
- var engine = useEngine();
1425
- var _c = __read(React.useState(false), 2), active = _c[0], setActive = _c[1];
1426
- React.useEffect(function () {
1427
- if (!id)
1428
- return;
1429
- var removeOnCall = engine.subscribe("functionCall", function (event) {
1430
- if (event.name === id) {
1431
- setActive(true);
1432
- }
1433
- });
1434
- var removeOnResult = engine.subscribe("functionResult", function (event) {
1435
- if (event.name === id) {
1436
- setTimeout(function () { return setActive(false); }, Math.max(0, 1000 - (event.duration || 0)));
1437
- }
1438
- });
1439
- return function () {
1440
- removeOnCall();
1441
- removeOnResult();
1442
- };
1443
- }, [id]);
1444
- return (React.createElement("div", { className: classNames(className, styles.DefaultNode, (_b = {},
1445
- _b[styles.selected] = selected,
1446
- _b[styles.active] = active,
1447
- _b)) },
1448
- React.createElement("div", { className: styles.Label }, label),
1449
- children));
1450
- }
1451
-
1452
1408
  function Control(_a) {
1453
1409
  var value = _a.value, type = _a.type, options = _a.options, onChange = _a.onChange;
1454
1410
  if (options) {
@@ -1471,21 +1427,19 @@ function Control(_a) {
1471
1427
  }
1472
1428
  }
1473
1429
 
1430
+ var styles = {"DefaultNode":"DefaultNode_R2P6c","selected":"selected_VmB-F","active":"active_zjUzx","Log":"Log_dsq5e","Label":"Label_wBwWA","Input":"Input_Yhvzf","Output":"Output_e4yF-","Table":"Table_aZyRT"};
1431
+
1474
1432
  var Input = function (_a) {
1475
1433
  var _b;
1476
- var name = _a.name, varDef = _a.varDef, id = _a.id, data = _a.data, onChange = _a.onChange;
1434
+ var name = _a.name, varDef = _a.varDef, id = _a.id, data = _a.data;
1477
1435
  var normalized = normalizeVarDef(varDef);
1478
1436
  var value = (_b = data.inputs) === null || _b === void 0 ? void 0 : _b[name];
1479
1437
  var isRef = isReference(value);
1480
1438
  var handleInputChange = function (param) { return function (value) {
1481
1439
  var _a;
1482
- // Update the function instance with the new input value
1483
- var body = __assign({}, data.caller.body);
1484
- var call = __assign({}, (body[id] || {}));
1485
- call.inputs = __assign(__assign({}, call.inputs), (_a = {}, _a[param] = value, _a));
1486
- body[id] = call;
1487
- var updatedFn = __assign(__assign({}, data.caller), { body: body });
1488
- onChange(updatedFn);
1440
+ data.onChange({
1441
+ inputs: __assign(__assign({}, data.inputs), (_a = {}, _a[param] = value, _a)),
1442
+ });
1489
1443
  }; };
1490
1444
  return (React.createElement("tr", { key: name, className: classNames(styles.Input, styles["type-".concat(normalized.type)]), style: {
1491
1445
  "--type-color": "var(--color-".concat(normalized.type, ")"),
@@ -1498,19 +1452,15 @@ var Input = function (_a) {
1498
1452
 
1499
1453
  var Param = function (_a) {
1500
1454
  var _b;
1501
- var id = _a.id, name = _a.name, varDef = _a.varDef, data = _a.data, onChange = _a.onChange;
1455
+ _a.id; var name = _a.name, varDef = _a.varDef, data = _a.data;
1502
1456
  var normalized = normalizeVarDef(varDef);
1503
1457
  var value = (_b = data.params) === null || _b === void 0 ? void 0 : _b[name];
1504
1458
  var isRef = isReference(value);
1505
1459
  var handleParamChange = function (param) { return function (value) {
1506
1460
  var _a;
1507
- // Update the function instance with the new param value
1508
- var body = __assign({}, data.caller.body);
1509
- var call = __assign({}, (body[id] || {}));
1510
- call.params = __assign(__assign({}, call.params), (_a = {}, _a[param] = value, _a));
1511
- body[id] = call;
1512
- var updatedFn = __assign(__assign({}, data.caller), { body: body });
1513
- onChange(updatedFn);
1461
+ data.onChange({
1462
+ params: __assign(__assign({}, data.params), (_a = {}, _a[param] = value, _a)),
1463
+ });
1514
1464
  }; };
1515
1465
  return (React.createElement("tr", { key: name, className: classNames(styles.Input, styles["type-".concat(normalized.type)]), style: {
1516
1466
  "--type-color": "var(--color-".concat(normalized.type, ")"),
@@ -1530,23 +1480,62 @@ var Output = function (_a) {
1530
1480
  React.createElement(react.Handle, { type: "source", position: react.Position.Right, id: "".concat(id, "-").concat(name) }))));
1531
1481
  };
1532
1482
 
1483
+ var dummyEngine = new Engine();
1484
+ var EngineContext = React.createContext(dummyEngine);
1485
+ var useEngine = function () {
1486
+ return React.useContext(EngineContext);
1487
+ };
1488
+
1489
+ function NodeContainer(_a) {
1490
+ var _b;
1491
+ var id = _a.id, label = _a.label, className = _a.className, selected = _a.selected, children = _a.children;
1492
+ var engine = useEngine();
1493
+ var _c = __read(React.useState(false), 2), active = _c[0], setActive = _c[1];
1494
+ React.useEffect(function () {
1495
+ if (!id)
1496
+ return;
1497
+ var timer;
1498
+ var removeOnCall = engine.subscribe("functionCall", function (event) {
1499
+ if (event.name === id) {
1500
+ setActive(true);
1501
+ }
1502
+ });
1503
+ var removeOnResult = engine.subscribe("functionResult", function (event) {
1504
+ if (event.name === id) {
1505
+ clearTimeout(timer);
1506
+ timer = setTimeout(function () { return setActive(false); }, Math.max(0, 1000 - (event.duration || 0)));
1507
+ }
1508
+ });
1509
+ return function () {
1510
+ removeOnCall();
1511
+ removeOnResult();
1512
+ };
1513
+ }, [id]);
1514
+ return (React.createElement("div", { className: classNames(className, styles.DefaultNode, (_b = {},
1515
+ _b[styles.selected] = selected,
1516
+ _b[styles.active] = active,
1517
+ _b)) },
1518
+ React.createElement("div", { className: styles.Label }, label),
1519
+ children));
1520
+ }
1521
+
1533
1522
  function GenericNode(_a) {
1534
- var id = _a.id, data = _a.data, selected = _a.selected, inputs = _a.inputs, outputs = _a.outputs, params = _a.params, children = _a.children, onChange = _a.onChange;
1523
+ var id = _a.id, data = _a.data, selected = _a.selected, inputs = _a.inputs, outputs = _a.outputs, params = _a.params, children = _a.children;
1535
1524
  return (React.createElement(NodeContainer, { label: data.name, selected: selected, id: id },
1536
1525
  children,
1537
1526
  React.createElement("table", null,
1538
1527
  React.createElement("tbody", null,
1539
- Object.entries(outputs || {}).map(function (_a) {
1528
+ Object.entries(outputs || data.outputDefs || {}).map(function (_a) {
1540
1529
  var _b = __read(_a, 2), name = _b[0], varDef = _b[1];
1541
1530
  return (React.createElement(Output, { key: name, name: name, varDef: varDef, id: id }));
1542
1531
  }),
1543
- Object.entries(inputs || {}).map(function (_a) {
1532
+ Object.entries(inputs || data.inputDefs || {}).map(function (_a) {
1544
1533
  var _b = __read(_a, 2), name = _b[0], varDef = _b[1];
1545
- return (React.createElement(Input, { key: name, name: name, varDef: varDef, id: id, data: data, onChange: onChange }));
1534
+ return (React.createElement(Input, { key: name, name: name, varDef: varDef, id: id, data: data }));
1546
1535
  }),
1547
- Object.entries(params || {}).map(function (_a) {
1536
+ Object.entries(params || data.paramDefs || {}).map(function (_a) {
1548
1537
  var _b = __read(_a, 2), name = _b[0], varDef = _b[1];
1549
- return (React.createElement(Param, { key: name, name: name, varDef: varDef, id: id, data: data, onChange: onChange }));
1538
+ return (React.createElement(Param, { key: name, name: name, varDef: varDef, id: id, data: data }));
1550
1539
  })))));
1551
1540
  }
1552
1541
 
@@ -1569,15 +1558,9 @@ function MathView(_a) {
1569
1558
  var Calc = React.memo(function (_a) {
1570
1559
  var _b;
1571
1560
  var id = _a.id, data = _a.data, selected = _a.selected;
1572
- var engine = useEngine();
1573
- var onChange = useChange();
1574
- var calledFn = engine.getFunction(data.name);
1575
- if (!calledFn) {
1576
- return (React.createElement(NodeContainer, { label: "Function not found", selected: selected }));
1577
- }
1578
1561
  var expression = (((_b = data.params) === null || _b === void 0 ? void 0 : _b.expression) || "").toString();
1579
1562
  // add free variables to inputs
1580
- var inputs = __assign({}, (calledFn.inputs || {}));
1563
+ var inputs = __assign({}, (data.inputDefs || {}));
1581
1564
  var symbols = getUnboundSymbols(expression);
1582
1565
  symbols.forEach(function (symbol) {
1583
1566
  if (!inputs[symbol]) {
@@ -1586,27 +1569,20 @@ var Calc = React.memo(function (_a) {
1586
1569
  };
1587
1570
  }
1588
1571
  });
1589
- return (React.createElement(GenericNode, { id: id, data: data, selected: selected, inputs: inputs, outputs: calledFn.outputs, params: calledFn.params, onChange: onChange },
1572
+ return (React.createElement(GenericNode, { id: id, data: data, selected: selected, inputs: inputs },
1590
1573
  React.createElement(MathView, { expr: expression, displayMode: true })));
1591
1574
  });
1592
1575
  Calc.displayName = "CalcNode";
1593
1576
 
1594
1577
  var Default = React.memo(function (_a) {
1595
1578
  var id = _a.id, data = _a.data, selected = _a.selected;
1596
- var engine = useEngine();
1597
- var onChange = useChange();
1598
- var calledFn = engine.getFunction(data.name);
1599
- if (!calledFn) {
1600
- return (React.createElement(NodeContainer, { label: "Function not found", selected: selected }));
1601
- }
1602
- return (React.createElement(GenericNode, { id: id, data: data, selected: selected, inputs: calledFn.inputs, outputs: calledFn.outputs, params: calledFn.params, onChange: onChange }));
1579
+ return React.createElement(GenericNode, { id: id, data: data, selected: selected });
1603
1580
  });
1604
1581
  Default.displayName = "DefaultNode";
1605
1582
 
1606
1583
  var Log = React.memo(function (_a) {
1607
1584
  var id = _a.id, data = _a.data, selected = _a.selected;
1608
1585
  var engine = useEngine();
1609
- var calledFn = engine.getFunction(data.name);
1610
1586
  var _b = __read(React.useState(null), 2), value = _b[0], setValue = _b[1];
1611
1587
  React.useEffect(function () {
1612
1588
  return engine.subscribe("functionResult", function (event) {
@@ -1616,9 +1592,6 @@ var Log = React.memo(function (_a) {
1616
1592
  }
1617
1593
  });
1618
1594
  }, []);
1619
- if (!calledFn) {
1620
- return (React.createElement(NodeContainer, { label: "Function not found", selected: selected }));
1621
- }
1622
1595
  return (React.createElement(NodeContainer, { id: id, label: data.name, selected: selected, className: styles.Log },
1623
1596
  React.createElement("div", { className: styles.Table },
1624
1597
  React.createElement("table", null, Object.entries(value || {}).map(function (_a) {
@@ -1627,9 +1600,12 @@ var Log = React.memo(function (_a) {
1627
1600
  React.createElement("tbody", null,
1628
1601
  React.createElement("tr", null,
1629
1602
  React.createElement("th", { colSpan: 2 }, "{".concat(key, "}"))),
1630
- val.map(function (item, index) { return (React.createElement("tr", { key: "".concat(key, "-").concat(index) },
1631
- React.createElement("td", null, index),
1632
- React.createElement("td", { title: JSON.stringify(item, null, 2) }, item === null || item === void 0 ? void 0 : item.toString()))); }))));
1603
+ val.map(function (item, index) {
1604
+ var _a;
1605
+ return (React.createElement("tr", { key: "".concat(key, "-").concat(index) },
1606
+ React.createElement("td", null, index),
1607
+ React.createElement("td", { title: JSON.stringify(item, null, 2) }, (_a = item === null || item === void 0 ? void 0 : item.toString) === null || _a === void 0 ? void 0 : _a.call(item))));
1608
+ }))));
1633
1609
  }))),
1634
1610
  React.createElement(react.Handle, { type: "target", position: react.Position.Left, id: "".concat(id, "-data") }),
1635
1611
  React.createElement(react.Handle, { type: "source", position: react.Position.Right, id: "".concat(id, "-data") })));
@@ -1641,19 +1617,13 @@ function uid() {
1641
1617
  }
1642
1618
  var Merge = React.memo(function (_a) {
1643
1619
  var id = _a.id, data = _a.data, selected = _a.selected;
1644
- var engine = useEngine();
1645
- var onChange = useChange();
1646
- var calledFn = engine.getFunction(data.name);
1647
- if (!calledFn) {
1648
- return (React.createElement(NodeContainer, { label: "Function not found", selected: selected }));
1649
- }
1650
1620
  var inputs = Object.fromEntries(Object.keys(data.inputs || {}).map(function (name, i) { return [
1651
1621
  name,
1652
1622
  { type: "any", label: "D".concat(i + 1) },
1653
1623
  ]; }));
1654
1624
  var inputCount = Object.keys(inputs).length;
1655
1625
  inputs[uid()] = { type: "any", label: "D".concat(inputCount + 1) };
1656
- var outputs = __assign({}, (calledFn.outputs || {}));
1626
+ var outputs = __assign({}, (data.outputDefs || {}));
1657
1627
  return (React.createElement(NodeContainer, { label: data.name, selected: selected, id: id },
1658
1628
  React.createElement("table", null,
1659
1629
  React.createElement("tbody", null,
@@ -1663,7 +1633,7 @@ var Merge = React.memo(function (_a) {
1663
1633
  }),
1664
1634
  Object.entries(inputs || {}).map(function (_a) {
1665
1635
  var _b = __read(_a, 2), name = _b[0], varDef = _b[1];
1666
- return (React.createElement(Input, { key: name, name: name, varDef: varDef, id: id, data: data, onChange: onChange }));
1636
+ return (React.createElement(Input, { key: name, name: name, varDef: varDef, id: id, data: data }));
1667
1637
  })))));
1668
1638
  });
1669
1639
  Merge.displayName = "MergeNode";
@@ -1737,9 +1707,29 @@ function useUpdatePositions(fn) {
1737
1707
  function createGraph(fn, engine, positions, options) {
1738
1708
  var nodes = [];
1739
1709
  var edges = [];
1710
+ var handleChange = function (id) { return function (newData) {
1711
+ var _a;
1712
+ // console.log("handleChange", id, newData);
1713
+ options === null || options === void 0 ? void 0 : options.setNodes(function (nds) {
1714
+ return nds.map(function (node) {
1715
+ if (node.id === id) {
1716
+ // console.log("update node", id, newData);
1717
+ return __assign(__assign({}, node), { data: __assign(__assign({}, node.data), newData) });
1718
+ }
1719
+ return node;
1720
+ });
1721
+ });
1722
+ // update the function definition
1723
+ var body = __assign({}, fn.body);
1724
+ var fncall = __assign(__assign({}, (body[id] || {})), newData);
1725
+ body[id] = fncall;
1726
+ var updatedFn = __assign(__assign({}, fn), { body: body });
1727
+ (_a = options === null || options === void 0 ? void 0 : options.onChange) === null || _a === void 0 ? void 0 : _a.call(options, updatedFn);
1728
+ // console.log("updated call", fncall);
1729
+ }; };
1740
1730
  Object.entries(fn.body || {}).forEach(function (_a, index) {
1741
1731
  var _b = __read(_a, 2), id = _b[0], fncall = _b[1];
1742
- var reffedFn = engine.getFunction(fncall.name);
1732
+ var calledFn = engine.getFunction(fncall.name);
1743
1733
  // create a node for each function call
1744
1734
  nodes.push({
1745
1735
  id: id,
@@ -1748,10 +1738,14 @@ function createGraph(fn, engine, positions, options) {
1748
1738
  caller: fn,
1749
1739
  inputs: fncall.inputs,
1750
1740
  params: fncall.params,
1741
+ inputDefs: (calledFn === null || calledFn === void 0 ? void 0 : calledFn.inputs) || {},
1742
+ paramDefs: (calledFn === null || calledFn === void 0 ? void 0 : calledFn.params) || {},
1743
+ outputDefs: (calledFn === null || calledFn === void 0 ? void 0 : calledFn.outputs) || {},
1744
+ onChange: handleChange(id),
1751
1745
  },
1752
1746
  position: (positions === null || positions === void 0 ? void 0 : positions[id]) || { x: 250 * index, y: 0 },
1753
1747
  dragHandle: options === null || options === void 0 ? void 0 : options.dragHandle,
1754
- type: (reffedFn === null || reffedFn === void 0 ? void 0 : reffedFn.nodeType) || "Default",
1748
+ type: (calledFn === null || calledFn === void 0 ? void 0 : calledFn.nodeType) || "Default",
1755
1749
  });
1756
1750
  var refs = getReferences(fncall.inputs || {});
1757
1751
  refs.forEach(function (ref) {
@@ -1769,30 +1763,35 @@ function createGraph(fn, engine, positions, options) {
1769
1763
  }
1770
1764
  function useFlow(fn, engine, options) {
1771
1765
  var _a = __read(usePositions(fn), 1), positions = _a[0];
1772
- return React.useMemo(function () {
1773
- return createGraph(fn, engine, positions, options);
1774
- }, [fn, engine]);
1766
+ React.useEffect(function () {
1767
+ var _a = createGraph(fn, engine, positions, options), nodes = _a.nodes, edges = _a.edges;
1768
+ options.setNodes(nodes);
1769
+ options.setEdges(edges);
1770
+ }, [engine]);
1775
1771
  }
1776
1772
 
1777
1773
  function FlowInner(_a) {
1778
1774
  var fn = _a.function, engine = _a.engine, onChange = _a.onChange, onClick = _a.onClick, onSelect = _a.onSelect;
1779
1775
  var _b = __read(React.useState(null), 2), instance = _b[0], setInstance = _b[1];
1780
1776
  var updatePositions = useUpdatePositions(fn);
1781
- var _c = useFlow(fn, engine, {
1777
+ var _c = __read(react.useNodesState([]), 3), nodes = _c[0], setNodes = _c[1], onNodesChange = _c[2];
1778
+ var _d = __read(react.useEdgesState([]), 3), edges = _d[0], setEdges = _d[1], onEdgesChange = _d[2];
1779
+ useFlow(fn, engine, {
1782
1780
  dragHandle: ".".concat(styles.Label),
1783
- }), initialNodes = _c.nodes, initialEdges = _c.edges;
1784
- var _d = __read(useInner.useInner(initialNodes), 2), nodes = _d[0], setNodes = _d[1];
1785
- var _e = __read(useInner.useInner(initialEdges), 2), edges = _e[0], setEdges = _e[1];
1781
+ setNodes: setNodes,
1782
+ setEdges: setEdges,
1783
+ onChange: onChange,
1784
+ });
1786
1785
  // node selection handler
1787
1786
  var handleChange = React.useCallback(function (_a) {
1788
- var nodes = _a.nodes, edges = _a.edges;
1789
- onSelect === null || onSelect === void 0 ? void 0 : onSelect(nodes, edges);
1787
+ var nodes = _a.nodes;
1788
+ onSelect === null || onSelect === void 0 ? void 0 : onSelect(nodes.map(function (n) { return n.id; }) || []);
1790
1789
  }, [onSelect]);
1791
1790
  react.useOnSelectionChange({
1792
1791
  onChange: handleChange,
1793
1792
  });
1794
1793
  // dropping nodes
1795
- var _f = __read(reactDnd.useDrop({
1794
+ var _e = __read(reactDnd.useDrop({
1796
1795
  accept: "flow-node",
1797
1796
  drop: function (item, monitor) {
1798
1797
  var pos = monitor.getClientOffset();
@@ -1809,19 +1808,9 @@ function FlowInner(_a) {
1809
1808
  isOver: monitor.isOver(),
1810
1809
  };
1811
1810
  },
1812
- }), 2); _f[0].isOver; var drop = _f[1];
1811
+ }), 2); _e[0].isOver; var drop = _e[1];
1813
1812
  // useLayoutNodes();
1814
1813
  var updatePosition = useUpdatePositions(fn);
1815
- var onNodesChange = React.useCallback(function (changes) {
1816
- return setNodes(function (nodesSnapshot) {
1817
- return react.applyNodeChanges(changes, nodesSnapshot);
1818
- });
1819
- }, [setNodes]);
1820
- var onEdgesChange = React.useCallback(function (changes) {
1821
- return setEdges(function (edgesSnapshot) {
1822
- return react.applyEdgeChanges(changes, edgesSnapshot);
1823
- });
1824
- }, [setEdges]);
1825
1814
  var onConnect = React.useCallback(function (params) {
1826
1815
  var _a, _b;
1827
1816
  var sourceField = (_a = params.sourceHandle) === null || _a === void 0 ? void 0 : _a.split("-")[1];
@@ -1879,9 +1868,8 @@ function FlowInner(_a) {
1879
1868
  function Flow(_a) {
1880
1869
  var fn = _a.function, engine = _a.engine, _b = _a.onChange, onChange = _b === void 0 ? function () { } : _b, onClick = _a.onClick, onSelect = _a.onSelect;
1881
1870
  return (React.createElement(EngineContext.Provider, { value: engine },
1882
- React.createElement(ChangeContext.Provider, { value: onChange },
1883
- React.createElement(react.ReactFlowProvider, null,
1884
- React.createElement(FlowInner, { function: fn, engine: engine, onChange: onChange, onClick: onClick, onSelect: onSelect })))));
1871
+ React.createElement(react.ReactFlowProvider, null,
1872
+ React.createElement(FlowInner, { function: fn, engine: engine, onChange: onChange, onClick: onClick, onSelect: onSelect }))));
1885
1873
  }
1886
1874
 
1887
1875
  function useDraggableNode(name, fn) {