@rkmodules/rules 0.0.24 → 0.0.26
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 +288 -203
- package/dist/index.js.map +1 -1
- package/dist/lib/Engine/index.d.ts +5 -5
- package/dist/lib/Flow/Components/GenericNode.d.ts +2 -3
- package/dist/lib/Flow/Components/Input.d.ts +1 -2
- package/dist/lib/Flow/Components/Param.d.ts +1 -2
- package/dist/lib/Flow/Context.d.ts +1 -3
- package/dist/lib/Flow/index.d.ts +7 -2
- package/dist/lib/Flow/types.d.ts +6 -2
- package/dist/lib/hooks/useFlow.d.ts +18 -7
- package/dist/lib/hooks/usePositions.d.ts +1 -1
- package/dist/lib/hooks/useVariable.d.ts +3 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
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');
|
|
6
|
+
var reactDnd = require('react-dnd');
|
|
7
7
|
var katex = require('katex');
|
|
8
8
|
var classNames = require('classnames');
|
|
9
9
|
var zustand = require('zustand');
|
|
10
10
|
var middleware = require('zustand/middleware');
|
|
11
|
-
var reactDnd = require('react-dnd');
|
|
12
11
|
|
|
13
12
|
/******************************************************************************
|
|
14
13
|
Copyright (c) Microsoft Corporation.
|
|
@@ -875,7 +874,7 @@ var listItem = {
|
|
|
875
874
|
// return indices.map((i) => branch[i]);
|
|
876
875
|
// }
|
|
877
876
|
// }),
|
|
878
|
-
item: binaryOnTreeBranch(inputs.list, inputs.index, function (branch, indices) {
|
|
877
|
+
item: binaryOnTreeBranch(inputs.list || {}, inputs.index || {}, function (branch, indices) {
|
|
879
878
|
if (indices) {
|
|
880
879
|
return indices.map(function (i) { return branch[i]; });
|
|
881
880
|
}
|
|
@@ -1173,6 +1172,7 @@ var Engine = /** @class */ (function () {
|
|
|
1173
1172
|
endTime: endTime_1,
|
|
1174
1173
|
duration: endTime_1 - startTime_1,
|
|
1175
1174
|
});
|
|
1175
|
+
console.log("functionReult", name_1, inputs_1, params_1, result_1);
|
|
1176
1176
|
_e.label = 4;
|
|
1177
1177
|
case 4:
|
|
1178
1178
|
_i++;
|
|
@@ -1191,6 +1191,7 @@ var Engine = /** @class */ (function () {
|
|
|
1191
1191
|
endTime: endTime,
|
|
1192
1192
|
duration: endTime - startTime,
|
|
1193
1193
|
});
|
|
1194
|
+
console.log("graph run done", result, context, endTime - startTime);
|
|
1194
1195
|
return [2 /*return*/, result];
|
|
1195
1196
|
}
|
|
1196
1197
|
});
|
|
@@ -1302,11 +1303,12 @@ var Engine = /** @class */ (function () {
|
|
|
1302
1303
|
}
|
|
1303
1304
|
return [2 /*return*/, this.run(builtFn, inputs)];
|
|
1304
1305
|
}
|
|
1305
|
-
console.log("Engine running with inputs", inputs, interpolate(inputs, {}));
|
|
1306
1306
|
mappedInputs = interpolate(inputs, {});
|
|
1307
|
+
console.log("Engine running with inputs", inputs, mappedInputs);
|
|
1307
1308
|
return [4 /*yield*/, ((_a = node.impl) === null || _a === void 0 ? void 0 : _a.call(node, mappedInputs, {}))];
|
|
1308
1309
|
case 1:
|
|
1309
1310
|
result = _b.sent();
|
|
1311
|
+
console.log("Engine run complete", result);
|
|
1310
1312
|
return [2 /*return*/, result];
|
|
1311
1313
|
}
|
|
1312
1314
|
});
|
|
@@ -1316,8 +1318,8 @@ var Engine = /** @class */ (function () {
|
|
|
1316
1318
|
return this.fnIndex[name];
|
|
1317
1319
|
};
|
|
1318
1320
|
// node handlers
|
|
1319
|
-
Engine.prototype.applyNodeDelete = function (
|
|
1320
|
-
var newFn = __assign(__assign({},
|
|
1321
|
+
Engine.prototype.applyNodeDelete = function (oldFn, nodeIds) {
|
|
1322
|
+
var newFn = __assign(__assign({}, oldFn), { body: __assign({}, oldFn.body) });
|
|
1321
1323
|
nodeIds.forEach(function (id) {
|
|
1322
1324
|
delete newFn.body[id];
|
|
1323
1325
|
});
|
|
@@ -1338,8 +1340,8 @@ var Engine = /** @class */ (function () {
|
|
|
1338
1340
|
});
|
|
1339
1341
|
return newFn;
|
|
1340
1342
|
};
|
|
1341
|
-
Engine.prototype.applyEdgeDelete = function (
|
|
1342
|
-
var newFn = __assign(__assign({},
|
|
1343
|
+
Engine.prototype.applyEdgeDelete = function (oldFn, fromNode, toNode, fromField, toField) {
|
|
1344
|
+
var newFn = __assign(__assign({}, oldFn), { body: __assign({}, oldFn.body) });
|
|
1343
1345
|
var from = newFn.body[fromNode];
|
|
1344
1346
|
var to = newFn.body[toNode];
|
|
1345
1347
|
if (!from || !to) {
|
|
@@ -1354,8 +1356,8 @@ var Engine = /** @class */ (function () {
|
|
|
1354
1356
|
}
|
|
1355
1357
|
return newFn;
|
|
1356
1358
|
};
|
|
1357
|
-
Engine.prototype.applyNodeAdd = function (
|
|
1358
|
-
var newFn = __assign(__assign({},
|
|
1359
|
+
Engine.prototype.applyNodeAdd = function (oldFn, nodeName, callback) {
|
|
1360
|
+
var newFn = __assign(__assign({}, oldFn), { body: __assign({}, oldFn.body) });
|
|
1359
1361
|
var id = uid$1();
|
|
1360
1362
|
// ensure unique id
|
|
1361
1363
|
while (newFn.body[id]) {
|
|
@@ -1388,10 +1390,10 @@ var Engine = /** @class */ (function () {
|
|
|
1388
1390
|
callback === null || callback === void 0 ? void 0 : callback(newCall, id);
|
|
1389
1391
|
return topSort(newFn);
|
|
1390
1392
|
};
|
|
1391
|
-
Engine.prototype.applyNodeConnect = function (
|
|
1392
|
-
var newFn = __assign(__assign({},
|
|
1393
|
+
Engine.prototype.applyNodeConnect = function (oldFn, fromNode, toNode, fromField, toField) {
|
|
1394
|
+
var newFn = __assign(__assign({}, oldFn), { body: __assign({}, oldFn.body) });
|
|
1393
1395
|
var from = newFn.body[fromNode];
|
|
1394
|
-
var to = newFn.body[toNode];
|
|
1396
|
+
var to = __assign({}, newFn.body[toNode]);
|
|
1395
1397
|
if (!from || !to) {
|
|
1396
1398
|
console.warn("Invalid nodes for connection");
|
|
1397
1399
|
return newFn;
|
|
@@ -1401,54 +1403,12 @@ var Engine = /** @class */ (function () {
|
|
|
1401
1403
|
}
|
|
1402
1404
|
// add the reference
|
|
1403
1405
|
to.inputs[toField] = "<".concat(fromNode, ".").concat(fromField, ">");
|
|
1406
|
+
newFn.body[toNode] = to;
|
|
1404
1407
|
return topSort(newFn);
|
|
1405
1408
|
};
|
|
1406
1409
|
return Engine;
|
|
1407
1410
|
}());
|
|
1408
1411
|
|
|
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
1412
|
function Control(_a) {
|
|
1453
1413
|
var value = _a.value, type = _a.type, options = _a.options, onChange = _a.onChange;
|
|
1454
1414
|
if (options) {
|
|
@@ -1471,21 +1431,19 @@ function Control(_a) {
|
|
|
1471
1431
|
}
|
|
1472
1432
|
}
|
|
1473
1433
|
|
|
1434
|
+
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"};
|
|
1435
|
+
|
|
1474
1436
|
var Input = function (_a) {
|
|
1475
1437
|
var _b;
|
|
1476
|
-
var name = _a.name, varDef = _a.varDef, id = _a.id, data = _a.data
|
|
1438
|
+
var name = _a.name, varDef = _a.varDef, id = _a.id, data = _a.data;
|
|
1477
1439
|
var normalized = normalizeVarDef(varDef);
|
|
1478
1440
|
var value = (_b = data.inputs) === null || _b === void 0 ? void 0 : _b[name];
|
|
1479
1441
|
var isRef = isReference(value);
|
|
1480
1442
|
var handleInputChange = function (param) { return function (value) {
|
|
1481
1443
|
var _a;
|
|
1482
|
-
|
|
1483
|
-
|
|
1484
|
-
|
|
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);
|
|
1444
|
+
data.onChange({
|
|
1445
|
+
inputs: __assign(__assign({}, data.inputs), (_a = {}, _a[param] = value, _a)),
|
|
1446
|
+
});
|
|
1489
1447
|
}; };
|
|
1490
1448
|
return (React.createElement("tr", { key: name, className: classNames(styles.Input, styles["type-".concat(normalized.type)]), style: {
|
|
1491
1449
|
"--type-color": "var(--color-".concat(normalized.type, ")"),
|
|
@@ -1498,19 +1456,15 @@ var Input = function (_a) {
|
|
|
1498
1456
|
|
|
1499
1457
|
var Param = function (_a) {
|
|
1500
1458
|
var _b;
|
|
1501
|
-
|
|
1459
|
+
_a.id; var name = _a.name, varDef = _a.varDef, data = _a.data;
|
|
1502
1460
|
var normalized = normalizeVarDef(varDef);
|
|
1503
1461
|
var value = (_b = data.params) === null || _b === void 0 ? void 0 : _b[name];
|
|
1504
1462
|
var isRef = isReference(value);
|
|
1505
1463
|
var handleParamChange = function (param) { return function (value) {
|
|
1506
1464
|
var _a;
|
|
1507
|
-
|
|
1508
|
-
|
|
1509
|
-
|
|
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);
|
|
1465
|
+
data.onChange({
|
|
1466
|
+
params: __assign(__assign({}, data.params), (_a = {}, _a[param] = value, _a)),
|
|
1467
|
+
});
|
|
1514
1468
|
}; };
|
|
1515
1469
|
return (React.createElement("tr", { key: name, className: classNames(styles.Input, styles["type-".concat(normalized.type)]), style: {
|
|
1516
1470
|
"--type-color": "var(--color-".concat(normalized.type, ")"),
|
|
@@ -1530,23 +1484,62 @@ var Output = function (_a) {
|
|
|
1530
1484
|
React.createElement(react.Handle, { type: "source", position: react.Position.Right, id: "".concat(id, "-").concat(name) }))));
|
|
1531
1485
|
};
|
|
1532
1486
|
|
|
1487
|
+
var dummyEngine = new Engine();
|
|
1488
|
+
var EngineContext = React.createContext(dummyEngine);
|
|
1489
|
+
var useEngine = function () {
|
|
1490
|
+
return React.useContext(EngineContext);
|
|
1491
|
+
};
|
|
1492
|
+
|
|
1493
|
+
function NodeContainer(_a) {
|
|
1494
|
+
var _b;
|
|
1495
|
+
var id = _a.id, label = _a.label, className = _a.className, selected = _a.selected, children = _a.children;
|
|
1496
|
+
var engine = useEngine();
|
|
1497
|
+
var _c = __read(React.useState(false), 2), active = _c[0], setActive = _c[1];
|
|
1498
|
+
React.useEffect(function () {
|
|
1499
|
+
if (!id)
|
|
1500
|
+
return;
|
|
1501
|
+
var timer;
|
|
1502
|
+
var removeOnCall = engine.subscribe("functionCall", function (event) {
|
|
1503
|
+
if (event.name === id) {
|
|
1504
|
+
setActive(true);
|
|
1505
|
+
}
|
|
1506
|
+
});
|
|
1507
|
+
var removeOnResult = engine.subscribe("functionResult", function (event) {
|
|
1508
|
+
if (event.name === id) {
|
|
1509
|
+
clearTimeout(timer);
|
|
1510
|
+
timer = setTimeout(function () { return setActive(false); }, Math.max(0, 1000 - (event.duration || 0)));
|
|
1511
|
+
}
|
|
1512
|
+
});
|
|
1513
|
+
return function () {
|
|
1514
|
+
removeOnCall();
|
|
1515
|
+
removeOnResult();
|
|
1516
|
+
};
|
|
1517
|
+
}, [id]);
|
|
1518
|
+
return (React.createElement("div", { className: classNames(className, styles.DefaultNode, (_b = {},
|
|
1519
|
+
_b[styles.selected] = selected,
|
|
1520
|
+
_b[styles.active] = active,
|
|
1521
|
+
_b)) },
|
|
1522
|
+
React.createElement("div", { className: styles.Label }, label),
|
|
1523
|
+
children));
|
|
1524
|
+
}
|
|
1525
|
+
|
|
1533
1526
|
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
|
|
1527
|
+
var id = _a.id, data = _a.data, selected = _a.selected, inputs = _a.inputs, outputs = _a.outputs, params = _a.params, children = _a.children;
|
|
1535
1528
|
return (React.createElement(NodeContainer, { label: data.name, selected: selected, id: id },
|
|
1536
1529
|
children,
|
|
1537
1530
|
React.createElement("table", null,
|
|
1538
1531
|
React.createElement("tbody", null,
|
|
1539
|
-
Object.entries(outputs || {}).map(function (_a) {
|
|
1532
|
+
Object.entries(outputs || data.outputDefs || {}).map(function (_a) {
|
|
1540
1533
|
var _b = __read(_a, 2), name = _b[0], varDef = _b[1];
|
|
1541
1534
|
return (React.createElement(Output, { key: name, name: name, varDef: varDef, id: id }));
|
|
1542
1535
|
}),
|
|
1543
|
-
Object.entries(inputs || {}).map(function (_a) {
|
|
1536
|
+
Object.entries(inputs || data.inputDefs || {}).map(function (_a) {
|
|
1544
1537
|
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
|
|
1538
|
+
return (React.createElement(Input, { key: name, name: name, varDef: varDef, id: id, data: data }));
|
|
1546
1539
|
}),
|
|
1547
|
-
Object.entries(params || {}).map(function (_a) {
|
|
1540
|
+
Object.entries(params || data.paramDefs || {}).map(function (_a) {
|
|
1548
1541
|
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
|
|
1542
|
+
return (React.createElement(Param, { key: name, name: name, varDef: varDef, id: id, data: data }));
|
|
1550
1543
|
})))));
|
|
1551
1544
|
}
|
|
1552
1545
|
|
|
@@ -1569,15 +1562,9 @@ function MathView(_a) {
|
|
|
1569
1562
|
var Calc = React.memo(function (_a) {
|
|
1570
1563
|
var _b;
|
|
1571
1564
|
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
1565
|
var expression = (((_b = data.params) === null || _b === void 0 ? void 0 : _b.expression) || "").toString();
|
|
1579
1566
|
// add free variables to inputs
|
|
1580
|
-
var inputs = __assign({}, (
|
|
1567
|
+
var inputs = __assign({}, (data.inputDefs || {}));
|
|
1581
1568
|
var symbols = getUnboundSymbols(expression);
|
|
1582
1569
|
symbols.forEach(function (symbol) {
|
|
1583
1570
|
if (!inputs[symbol]) {
|
|
@@ -1586,27 +1573,20 @@ var Calc = React.memo(function (_a) {
|
|
|
1586
1573
|
};
|
|
1587
1574
|
}
|
|
1588
1575
|
});
|
|
1589
|
-
return (React.createElement(GenericNode, { id: id, data: data, selected: selected, inputs: inputs
|
|
1576
|
+
return (React.createElement(GenericNode, { id: id, data: data, selected: selected, inputs: inputs },
|
|
1590
1577
|
React.createElement(MathView, { expr: expression, displayMode: true })));
|
|
1591
1578
|
});
|
|
1592
1579
|
Calc.displayName = "CalcNode";
|
|
1593
1580
|
|
|
1594
1581
|
var Default = React.memo(function (_a) {
|
|
1595
1582
|
var id = _a.id, data = _a.data, selected = _a.selected;
|
|
1596
|
-
|
|
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 }));
|
|
1583
|
+
return React.createElement(GenericNode, { id: id, data: data, selected: selected });
|
|
1603
1584
|
});
|
|
1604
1585
|
Default.displayName = "DefaultNode";
|
|
1605
1586
|
|
|
1606
1587
|
var Log = React.memo(function (_a) {
|
|
1607
1588
|
var id = _a.id, data = _a.data, selected = _a.selected;
|
|
1608
1589
|
var engine = useEngine();
|
|
1609
|
-
var calledFn = engine.getFunction(data.name);
|
|
1610
1590
|
var _b = __read(React.useState(null), 2), value = _b[0], setValue = _b[1];
|
|
1611
1591
|
React.useEffect(function () {
|
|
1612
1592
|
return engine.subscribe("functionResult", function (event) {
|
|
@@ -1616,9 +1596,6 @@ var Log = React.memo(function (_a) {
|
|
|
1616
1596
|
}
|
|
1617
1597
|
});
|
|
1618
1598
|
}, []);
|
|
1619
|
-
if (!calledFn) {
|
|
1620
|
-
return (React.createElement(NodeContainer, { label: "Function not found", selected: selected }));
|
|
1621
|
-
}
|
|
1622
1599
|
return (React.createElement(NodeContainer, { id: id, label: data.name, selected: selected, className: styles.Log },
|
|
1623
1600
|
React.createElement("div", { className: styles.Table },
|
|
1624
1601
|
React.createElement("table", null, Object.entries(value || {}).map(function (_a) {
|
|
@@ -1627,9 +1604,12 @@ var Log = React.memo(function (_a) {
|
|
|
1627
1604
|
React.createElement("tbody", null,
|
|
1628
1605
|
React.createElement("tr", null,
|
|
1629
1606
|
React.createElement("th", { colSpan: 2 }, "{".concat(key, "}"))),
|
|
1630
|
-
val.map(function (item, index) {
|
|
1631
|
-
|
|
1632
|
-
React.createElement("
|
|
1607
|
+
val.map(function (item, index) {
|
|
1608
|
+
var _a;
|
|
1609
|
+
return (React.createElement("tr", { key: "".concat(key, "-").concat(index) },
|
|
1610
|
+
React.createElement("td", null, index),
|
|
1611
|
+
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))));
|
|
1612
|
+
}))));
|
|
1633
1613
|
}))),
|
|
1634
1614
|
React.createElement(react.Handle, { type: "target", position: react.Position.Left, id: "".concat(id, "-data") }),
|
|
1635
1615
|
React.createElement(react.Handle, { type: "source", position: react.Position.Right, id: "".concat(id, "-data") })));
|
|
@@ -1641,19 +1621,13 @@ function uid() {
|
|
|
1641
1621
|
}
|
|
1642
1622
|
var Merge = React.memo(function (_a) {
|
|
1643
1623
|
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
1624
|
var inputs = Object.fromEntries(Object.keys(data.inputs || {}).map(function (name, i) { return [
|
|
1651
1625
|
name,
|
|
1652
1626
|
{ type: "any", label: "D".concat(i + 1) },
|
|
1653
1627
|
]; }));
|
|
1654
1628
|
var inputCount = Object.keys(inputs).length;
|
|
1655
1629
|
inputs[uid()] = { type: "any", label: "D".concat(inputCount + 1) };
|
|
1656
|
-
var outputs = __assign({}, (
|
|
1630
|
+
var outputs = __assign({}, (data.outputDefs || {}));
|
|
1657
1631
|
return (React.createElement(NodeContainer, { label: data.name, selected: selected, id: id },
|
|
1658
1632
|
React.createElement("table", null,
|
|
1659
1633
|
React.createElement("tbody", null,
|
|
@@ -1663,7 +1637,7 @@ var Merge = React.memo(function (_a) {
|
|
|
1663
1637
|
}),
|
|
1664
1638
|
Object.entries(inputs || {}).map(function (_a) {
|
|
1665
1639
|
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
|
|
1640
|
+
return (React.createElement(Input, { key: name, name: name, varDef: varDef, id: id, data: data }));
|
|
1667
1641
|
})))));
|
|
1668
1642
|
});
|
|
1669
1643
|
Merge.displayName = "MergeNode";
|
|
@@ -1688,12 +1662,21 @@ var variableStore = zustand.create(function (set, get, api) {
|
|
|
1688
1662
|
},
|
|
1689
1663
|
setVar: function (scope, name, value, persist) {
|
|
1690
1664
|
var _a, _b;
|
|
1665
|
+
var key = "".concat(scope, "|").concat(name);
|
|
1691
1666
|
if (persist) {
|
|
1692
|
-
var
|
|
1667
|
+
var oldData = pget().data;
|
|
1668
|
+
var newValue = typeof value === "function"
|
|
1669
|
+
? value(oldData[key])
|
|
1670
|
+
: value;
|
|
1671
|
+
var data = __assign(__assign({}, oldData), (_a = {}, _a[key] = newValue, _a));
|
|
1693
1672
|
pset({ data: data });
|
|
1694
1673
|
}
|
|
1695
1674
|
else {
|
|
1696
|
-
var
|
|
1675
|
+
var oldData = get().data;
|
|
1676
|
+
var newValue = typeof value === "function"
|
|
1677
|
+
? value(oldData[key])
|
|
1678
|
+
: value;
|
|
1679
|
+
var data = __assign(__assign({}, oldData), (_b = {}, _b[key] = newValue, _b));
|
|
1697
1680
|
set({ data: data });
|
|
1698
1681
|
}
|
|
1699
1682
|
},
|
|
@@ -1729,79 +1712,187 @@ function usePositions(fn) {
|
|
|
1729
1712
|
function useUpdatePositions(fn) {
|
|
1730
1713
|
var _a = __read(usePositions(fn), 2), positions = _a[0], setPositions = _a[1];
|
|
1731
1714
|
return React.useCallback(function (id, position) {
|
|
1732
|
-
|
|
1733
|
-
setPositions(
|
|
1715
|
+
positions[id] = position;
|
|
1716
|
+
setPositions(positions);
|
|
1734
1717
|
}, [positions, setPositions]);
|
|
1735
1718
|
}
|
|
1736
1719
|
|
|
1737
|
-
|
|
1738
|
-
|
|
1739
|
-
|
|
1740
|
-
|
|
1741
|
-
|
|
1742
|
-
|
|
1743
|
-
|
|
1744
|
-
|
|
1745
|
-
|
|
1746
|
-
|
|
1747
|
-
|
|
1748
|
-
|
|
1749
|
-
|
|
1750
|
-
|
|
1751
|
-
|
|
1752
|
-
|
|
1753
|
-
|
|
1754
|
-
|
|
1720
|
+
// helpers
|
|
1721
|
+
function updateNodeArguments(node, inputs, params) {
|
|
1722
|
+
return __assign(__assign({}, node), { data: __assign(__assign({}, node.data), { inputs: inputs, params: params }) });
|
|
1723
|
+
}
|
|
1724
|
+
/**
|
|
1725
|
+
* flow state stores nodes and edges for the flow graph these can be updated when the function changes
|
|
1726
|
+
* using setFn
|
|
1727
|
+
*/
|
|
1728
|
+
var useFlowState = zustand.create(function (set, get) { return ({
|
|
1729
|
+
engine: null,
|
|
1730
|
+
fn: null,
|
|
1731
|
+
options: {},
|
|
1732
|
+
nodes: [],
|
|
1733
|
+
edges: [],
|
|
1734
|
+
setNodes: function (updater) {
|
|
1735
|
+
set(function (state) { return ({ nodes: updater(state.nodes) }); });
|
|
1736
|
+
},
|
|
1737
|
+
setEdges: function (updater) {
|
|
1738
|
+
set(function (state) { return ({ edges: updater(state.edges) }); });
|
|
1739
|
+
},
|
|
1740
|
+
setFn: function (fn) {
|
|
1741
|
+
// console.log("setFn", fn);
|
|
1742
|
+
var _a = get(), oldFn = _a.fn, nodes = _a.nodes, edges = _a.edges, engine = _a.engine, options = _a.options;
|
|
1743
|
+
// update the graph by shallow comparison
|
|
1744
|
+
if (!engine) {
|
|
1745
|
+
throw new Error("Engine not set");
|
|
1746
|
+
}
|
|
1747
|
+
var oldKeys = Object.keys((oldFn === null || oldFn === void 0 ? void 0 : oldFn.body) || {});
|
|
1748
|
+
var newKeys = Object.keys(fn.body || {});
|
|
1749
|
+
// remove all the nodes that were removed
|
|
1750
|
+
nodes = nodes === null || nodes === void 0 ? void 0 : nodes.filter(function (node) { return newKeys.includes(node.id); });
|
|
1751
|
+
// remove all the edges that were removed
|
|
1752
|
+
edges = edges === null || edges === void 0 ? void 0 : edges.filter(function (edge) {
|
|
1753
|
+
return (newKeys.includes(edge.source) && newKeys.includes(edge.target));
|
|
1755
1754
|
});
|
|
1756
|
-
|
|
1757
|
-
|
|
1758
|
-
|
|
1759
|
-
|
|
1760
|
-
|
|
1761
|
-
|
|
1762
|
-
|
|
1763
|
-
|
|
1764
|
-
|
|
1755
|
+
// create the new nodes that were added
|
|
1756
|
+
var addedKeys = newKeys.filter(function (key) { return !oldKeys.includes(key); });
|
|
1757
|
+
addedKeys.forEach(function (key, index) {
|
|
1758
|
+
var _a;
|
|
1759
|
+
var fncall = (_a = fn.body) === null || _a === void 0 ? void 0 : _a[key];
|
|
1760
|
+
// add the node
|
|
1761
|
+
nodes.push(createNode(engine, key, fncall, options));
|
|
1762
|
+
// add edges
|
|
1763
|
+
var refs = getReferences(fncall.inputs || {});
|
|
1764
|
+
refs.forEach(function (ref) {
|
|
1765
|
+
edges.push(createEdge(key, ref));
|
|
1765
1766
|
});
|
|
1766
1767
|
});
|
|
1767
|
-
|
|
1768
|
-
|
|
1769
|
-
|
|
1768
|
+
// update the changed nodes
|
|
1769
|
+
var changedKeys = newKeys.filter(function (key) {
|
|
1770
|
+
var _a, _b;
|
|
1771
|
+
// shallow comparison
|
|
1772
|
+
return ((_a = fn.body) === null || _a === void 0 ? void 0 : _a[key]) !== ((_b = oldFn === null || oldFn === void 0 ? void 0 : oldFn.body) === null || _b === void 0 ? void 0 : _b[key]);
|
|
1773
|
+
});
|
|
1774
|
+
// console.log("changed keys", changedKeys);
|
|
1775
|
+
changedKeys.forEach(function (key) {
|
|
1776
|
+
var _a;
|
|
1777
|
+
// update the nodes that were changed
|
|
1778
|
+
var fncall = (_a = fn.body) === null || _a === void 0 ? void 0 : _a[key];
|
|
1779
|
+
nodes = nodes === null || nodes === void 0 ? void 0 : nodes.map(function (n) {
|
|
1780
|
+
if (n.id === key) {
|
|
1781
|
+
return updateNodeArguments(n, fncall.inputs, fncall.params);
|
|
1782
|
+
}
|
|
1783
|
+
return n;
|
|
1784
|
+
});
|
|
1785
|
+
// update incoming edges
|
|
1786
|
+
var refs = getReferences(fncall.inputs || {});
|
|
1787
|
+
// remove all incoming edges
|
|
1788
|
+
edges = edges === null || edges === void 0 ? void 0 : edges.filter(function (e) { return e.target !== key; });
|
|
1789
|
+
// add the edge
|
|
1790
|
+
refs.forEach(function (ref) {
|
|
1791
|
+
edges.push(createEdge(key, ref));
|
|
1792
|
+
});
|
|
1793
|
+
});
|
|
1794
|
+
// console.log("final graph", nodes, edges);
|
|
1795
|
+
// update the function, nodes and edges
|
|
1796
|
+
set({ fn: fn, nodes: nodes, edges: edges });
|
|
1797
|
+
},
|
|
1798
|
+
init: function (fn, engine, options) {
|
|
1799
|
+
// console.log("initing");
|
|
1800
|
+
set({ engine: engine, options: options });
|
|
1801
|
+
get().setFn(fn);
|
|
1802
|
+
},
|
|
1803
|
+
}); });
|
|
1804
|
+
/**
|
|
1805
|
+
* creates a flow state and provides handlers to update nodes and edges
|
|
1806
|
+
*/
|
|
1770
1807
|
function useFlow(fn, engine, options) {
|
|
1771
|
-
var
|
|
1772
|
-
|
|
1773
|
-
|
|
1774
|
-
}, [
|
|
1808
|
+
var state = useFlowState();
|
|
1809
|
+
React.useEffect(function () {
|
|
1810
|
+
state.init(fn, engine, options);
|
|
1811
|
+
}, [engine]);
|
|
1812
|
+
React.useEffect(function () {
|
|
1813
|
+
state.setFn(fn);
|
|
1814
|
+
}, [fn]);
|
|
1815
|
+
return React.useMemo(function () { return ({
|
|
1816
|
+
nodes: state.nodes,
|
|
1817
|
+
edges: state.edges,
|
|
1818
|
+
setNodes: state.setNodes,
|
|
1819
|
+
setEdges: state.setEdges,
|
|
1820
|
+
}); }, [state]);
|
|
1821
|
+
}
|
|
1822
|
+
function createNode(engine, id, fncall, options) {
|
|
1823
|
+
var _a, _b;
|
|
1824
|
+
var calledFn = engine.getFunction(fncall.name);
|
|
1825
|
+
// create a node for each function call
|
|
1826
|
+
return {
|
|
1827
|
+
id: id,
|
|
1828
|
+
data: {
|
|
1829
|
+
name: fncall.name,
|
|
1830
|
+
inputs: fncall.inputs,
|
|
1831
|
+
params: fncall.params,
|
|
1832
|
+
inputDefs: (calledFn === null || calledFn === void 0 ? void 0 : calledFn.inputs) || {},
|
|
1833
|
+
paramDefs: (calledFn === null || calledFn === void 0 ? void 0 : calledFn.params) || {},
|
|
1834
|
+
outputDefs: (calledFn === null || calledFn === void 0 ? void 0 : calledFn.outputs) || {},
|
|
1835
|
+
onChange: ((_a = options.onDataChange) === null || _a === void 0 ? void 0 : _a.call(options, id)) || (function () { }),
|
|
1836
|
+
},
|
|
1837
|
+
position: ((_b = options.positions) === null || _b === void 0 ? void 0 : _b[id]) || { x: 0, y: 0 },
|
|
1838
|
+
dragHandle: options.dragHandle,
|
|
1839
|
+
type: (calledFn === null || calledFn === void 0 ? void 0 : calledFn.nodeType) || "Default",
|
|
1840
|
+
};
|
|
1841
|
+
}
|
|
1842
|
+
function createEdge(nodeId, ref) {
|
|
1843
|
+
return {
|
|
1844
|
+
id: "".concat(ref.path, "-").concat(nodeId, ".").concat(ref.name),
|
|
1845
|
+
source: ref.refNode,
|
|
1846
|
+
target: nodeId,
|
|
1847
|
+
sourceHandle: "".concat(ref.refNode, "-").concat(ref.refField),
|
|
1848
|
+
targetHandle: "".concat(nodeId, "-").concat(ref.name),
|
|
1849
|
+
};
|
|
1775
1850
|
}
|
|
1776
1851
|
|
|
1777
1852
|
function FlowInner(_a) {
|
|
1778
1853
|
var fn = _a.function, engine = _a.engine, onChange = _a.onChange, onClick = _a.onClick, onSelect = _a.onSelect;
|
|
1779
1854
|
var _b = __read(React.useState(null), 2), instance = _b[0], setInstance = _b[1];
|
|
1780
|
-
var
|
|
1781
|
-
var _c =
|
|
1855
|
+
var updatePosition = useUpdatePositions(fn);
|
|
1856
|
+
var _c = __read(usePositions(fn), 1), positions = _c[0];
|
|
1857
|
+
var handleDataChange = function (id) { return function (newData) {
|
|
1858
|
+
onChange === null || onChange === void 0 ? void 0 : onChange(function (fn) {
|
|
1859
|
+
// update the function definition
|
|
1860
|
+
// console.log("before fn call update", Object.keys(fn.body));
|
|
1861
|
+
var body = __assign({}, fn.body);
|
|
1862
|
+
var fncall = __assign(__assign({}, (body[id] || {})), newData);
|
|
1863
|
+
body[id] = fncall;
|
|
1864
|
+
// console.log("after fn call update", Object.keys(body));
|
|
1865
|
+
var updatedFn = __assign(__assign({}, fn), { body: body });
|
|
1866
|
+
return updatedFn;
|
|
1867
|
+
});
|
|
1868
|
+
}; };
|
|
1869
|
+
var _d = useFlow(fn, engine, {
|
|
1782
1870
|
dragHandle: ".".concat(styles.Label),
|
|
1783
|
-
|
|
1784
|
-
|
|
1785
|
-
|
|
1871
|
+
positions: positions,
|
|
1872
|
+
onDataChange: handleDataChange,
|
|
1873
|
+
}), nodes = _d.nodes, edges = _d.edges, setNodes = _d.setNodes, setEdges = _d.setEdges;
|
|
1786
1874
|
// node selection handler
|
|
1787
|
-
var
|
|
1875
|
+
var handleSelect = React.useCallback(function (_a) {
|
|
1788
1876
|
var nodes = _a.nodes;
|
|
1789
1877
|
onSelect === null || onSelect === void 0 ? void 0 : onSelect(nodes.map(function (n) { return n.id; }) || []);
|
|
1790
1878
|
}, [onSelect]);
|
|
1791
1879
|
react.useOnSelectionChange({
|
|
1792
|
-
onChange:
|
|
1880
|
+
onChange: handleSelect,
|
|
1793
1881
|
});
|
|
1794
1882
|
// dropping nodes
|
|
1795
|
-
var
|
|
1883
|
+
var _e = __read(reactDnd.useDrop({
|
|
1796
1884
|
accept: "flow-node",
|
|
1797
1885
|
drop: function (item, monitor) {
|
|
1798
1886
|
var pos = monitor.getClientOffset();
|
|
1799
1887
|
if (instance && pos) {
|
|
1800
1888
|
var position_1 = instance.screenToFlowPosition(pos);
|
|
1801
|
-
|
|
1802
|
-
|
|
1803
|
-
|
|
1804
|
-
|
|
1889
|
+
// console.log("handle drop", position);
|
|
1890
|
+
onChange === null || onChange === void 0 ? void 0 : onChange(function (fn) {
|
|
1891
|
+
return engine.applyNodeAdd(fn, item.name, function (fnCall, id) {
|
|
1892
|
+
// console.log("node added", id, position);
|
|
1893
|
+
updatePosition(id, position_1);
|
|
1894
|
+
});
|
|
1895
|
+
});
|
|
1805
1896
|
}
|
|
1806
1897
|
},
|
|
1807
1898
|
collect: function (monitor) {
|
|
@@ -1809,19 +1900,8 @@ function FlowInner(_a) {
|
|
|
1809
1900
|
isOver: monitor.isOver(),
|
|
1810
1901
|
};
|
|
1811
1902
|
},
|
|
1812
|
-
}), 2);
|
|
1813
|
-
//
|
|
1814
|
-
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]);
|
|
1903
|
+
}), 2); _e[0].isOver; var drop = _e[1];
|
|
1904
|
+
// connecting nodes
|
|
1825
1905
|
var onConnect = React.useCallback(function (params) {
|
|
1826
1906
|
var _a, _b;
|
|
1827
1907
|
var sourceField = (_a = params.sourceHandle) === null || _a === void 0 ? void 0 : _a.split("-")[1];
|
|
@@ -1830,37 +1910,34 @@ function FlowInner(_a) {
|
|
|
1830
1910
|
console.warn("Invalid connection handles", params);
|
|
1831
1911
|
return;
|
|
1832
1912
|
}
|
|
1833
|
-
onChange === null || onChange === void 0 ? void 0 : onChange(
|
|
1834
|
-
|
|
1835
|
-
}, [setEdges, fn, onChange]);
|
|
1836
|
-
var onNodesDelete = React.useCallback(function (nodesToDelete) {
|
|
1837
|
-
onChange === null || onChange === void 0 ? void 0 : onChange(engine.applyNodeDelete(fn, nodesToDelete.map(function (n) { return n.id; })));
|
|
1838
|
-
setNodes(function (nodesSnapshot) {
|
|
1839
|
-
return nodesSnapshot.filter(function (node) { return !nodesToDelete.some(function (n) { return n.id === node.id; }); });
|
|
1913
|
+
onChange === null || onChange === void 0 ? void 0 : onChange(function (fn) {
|
|
1914
|
+
return engine.applyNodeConnect(fn, params.source, params.target, sourceField, targetField);
|
|
1840
1915
|
});
|
|
1841
|
-
|
|
1842
|
-
|
|
1843
|
-
|
|
1844
|
-
|
|
1916
|
+
}, [fn, onChange]);
|
|
1917
|
+
// deleting nodes
|
|
1918
|
+
var onNodesDelete = React.useCallback(function (nodesToDelete) {
|
|
1919
|
+
onChange === null || onChange === void 0 ? void 0 : onChange(function (fn) {
|
|
1920
|
+
return engine.applyNodeDelete(fn, nodesToDelete.map(function (n) { return n.id; }));
|
|
1845
1921
|
});
|
|
1846
|
-
}, [
|
|
1922
|
+
}, [onChange, fn]);
|
|
1923
|
+
// deleting edges
|
|
1847
1924
|
var onEdgesDelete = React.useCallback(function (edgesToDelete) {
|
|
1848
|
-
|
|
1849
|
-
|
|
1850
|
-
|
|
1851
|
-
|
|
1852
|
-
|
|
1853
|
-
|
|
1854
|
-
|
|
1855
|
-
|
|
1856
|
-
|
|
1857
|
-
|
|
1858
|
-
|
|
1859
|
-
|
|
1860
|
-
|
|
1861
|
-
return edgesSnapshot.filter(function (edge) { return !edgesToDelete.some(function (e) { return e.id === edge.id; }); });
|
|
1925
|
+
onChange === null || onChange === void 0 ? void 0 : onChange(function (fn) {
|
|
1926
|
+
var newFn = fn;
|
|
1927
|
+
edgesToDelete.forEach(function (edge) {
|
|
1928
|
+
var _a, _b;
|
|
1929
|
+
var sourceField = (_a = edge.sourceHandle) === null || _a === void 0 ? void 0 : _a.split("-")[1];
|
|
1930
|
+
var targetField = (_b = edge.targetHandle) === null || _b === void 0 ? void 0 : _b.split("-")[1];
|
|
1931
|
+
if (!sourceField || !targetField) {
|
|
1932
|
+
console.warn("Invalid connection handles", edge);
|
|
1933
|
+
return;
|
|
1934
|
+
}
|
|
1935
|
+
newFn = engine.applyEdgeDelete(newFn, edge.source, edge.target, sourceField, targetField);
|
|
1936
|
+
});
|
|
1937
|
+
return newFn;
|
|
1862
1938
|
});
|
|
1863
|
-
}, [
|
|
1939
|
+
}, [onChange, fn]);
|
|
1940
|
+
// handle canvas clicks to be able to place nodes
|
|
1864
1941
|
var handleClick = function (e) {
|
|
1865
1942
|
if (instance) {
|
|
1866
1943
|
var position = instance.screenToFlowPosition({
|
|
@@ -1870,6 +1947,16 @@ function FlowInner(_a) {
|
|
|
1870
1947
|
onClick === null || onClick === void 0 ? void 0 : onClick(e, position);
|
|
1871
1948
|
}
|
|
1872
1949
|
};
|
|
1950
|
+
var onNodesChange = React.useCallback(function (changes) {
|
|
1951
|
+
return setNodes(function (nodesSnapshot) {
|
|
1952
|
+
return react.applyNodeChanges(changes, nodesSnapshot);
|
|
1953
|
+
});
|
|
1954
|
+
}, []);
|
|
1955
|
+
var onEdgesChange = React.useCallback(function (changes) {
|
|
1956
|
+
return setEdges(function (edgesSnapshot) {
|
|
1957
|
+
return react.applyEdgeChanges(changes, edgesSnapshot);
|
|
1958
|
+
});
|
|
1959
|
+
}, []);
|
|
1873
1960
|
return (React.createElement(react.ReactFlow, { ref: drop, nodes: nodes, edges: edges, nodeTypes: nodeTypes, onNodesChange: onNodesChange, onEdgesChange: onEdgesChange, onNodesDelete: onNodesDelete, onEdgesDelete: onEdgesDelete, onNodeDragStop: function (e, n) { return updatePosition(n.id, n.position); }, onConnect: onConnect, onInit: setInstance, onPaneClick: handleClick, fitView: true,
|
|
1874
1961
|
// panOnDrag={false}
|
|
1875
1962
|
selectionOnDrag: true, minZoom: 0.1, deleteKeyCode: "Delete" },
|
|
@@ -1879,9 +1966,8 @@ function FlowInner(_a) {
|
|
|
1879
1966
|
function Flow(_a) {
|
|
1880
1967
|
var fn = _a.function, engine = _a.engine, _b = _a.onChange, onChange = _b === void 0 ? function () { } : _b, onClick = _a.onClick, onSelect = _a.onSelect;
|
|
1881
1968
|
return (React.createElement(EngineContext.Provider, { value: engine },
|
|
1882
|
-
React.createElement(
|
|
1883
|
-
React.createElement(
|
|
1884
|
-
React.createElement(FlowInner, { function: fn, engine: engine, onChange: onChange, onClick: onClick, onSelect: onSelect })))));
|
|
1969
|
+
React.createElement(react.ReactFlowProvider, null,
|
|
1970
|
+
React.createElement(FlowInner, { function: fn, engine: engine, onChange: onChange, onClick: onClick, onSelect: onSelect }))));
|
|
1885
1971
|
}
|
|
1886
1972
|
|
|
1887
1973
|
function useDraggableNode(name, fn) {
|
|
@@ -1940,7 +2026,6 @@ exports.Flow = Flow;
|
|
|
1940
2026
|
exports.binaryOnTree = binaryOnTree;
|
|
1941
2027
|
exports.binaryOnTreeBranch = binaryOnTreeBranch;
|
|
1942
2028
|
exports.broadCast = broadCast;
|
|
1943
|
-
exports.createGraph = createGraph;
|
|
1944
2029
|
exports.expandTree = expandTree;
|
|
1945
2030
|
exports.getBranch = getBranch;
|
|
1946
2031
|
exports.getReferences = getReferences;
|