@rkmodules/rules 0.0.109 → 0.0.111

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.esm.js CHANGED
@@ -502,6 +502,31 @@ function toArray(a) {
502
502
  return Object.values(a).flat();
503
503
  }
504
504
 
505
+ var getType = {
506
+ name: "getType",
507
+ label: "Get Type",
508
+ description: "Gets the type of a value as a string",
509
+ inputs: {
510
+ input: { type: "any" },
511
+ },
512
+ outputs: {
513
+ type: "string",
514
+ },
515
+ impl: function (inputs, params) { return __awaiter(void 0, void 0, void 0, function () {
516
+ return __generator(this, function (_a) {
517
+ return [2 /*return*/, {
518
+ type: mapTree(inputs.input, function (x) {
519
+ if (x === undefined)
520
+ return "empty";
521
+ if (x === null)
522
+ return "empty";
523
+ return typeof x;
524
+ }),
525
+ }];
526
+ });
527
+ }); },
528
+ };
529
+
505
530
  // utilities
506
531
  /**
507
532
  * merges two trees by concatenating the branches with the same path
@@ -736,8 +761,17 @@ var primitives$8 = (_a$8 = {},
736
761
  _a$8[getValue.name] = getValue,
737
762
  _a$8[log.name] = log,
738
763
  _a$8[value.name] = value,
764
+ _a$8[getType.name] = getType,
739
765
  _a$8);
740
766
 
767
+ function isNumber() {
768
+ var ns = [];
769
+ for (var _i = 0; _i < arguments.length; _i++) {
770
+ ns[_i] = arguments[_i];
771
+ }
772
+ return ns.every(function (n) { return typeof n === "number" && !isNaN(n); });
773
+ }
774
+
741
775
  var add$1 = {
742
776
  name: "add",
743
777
  label: "Add",
@@ -753,7 +787,7 @@ var add$1 = {
753
787
  return __generator(this, function (_a) {
754
788
  return [2 /*return*/, {
755
789
  sum: binaryOnTree(inputs.a, inputs.b, function (itemA, itemB) {
756
- if (itemA === undefined || itemB === undefined)
790
+ if (!isNumber(itemA, itemB))
757
791
  return DISCARD;
758
792
  return itemA + itemB;
759
793
  }, true),
@@ -935,7 +969,7 @@ var cosDeg = {
935
969
  return __generator(this, function (_a) {
936
970
  return [2 /*return*/, {
937
971
  cos: mapTree(inputs.a, function (angle) {
938
- if (angle === undefined)
972
+ if (!isNumber(angle))
939
973
  return DISCARD;
940
974
  return Math.cos((angle * Math.PI) / 180);
941
975
  }),
@@ -959,7 +993,7 @@ var divide = {
959
993
  return __generator(this, function (_a) {
960
994
  return [2 /*return*/, {
961
995
  quotient: binaryOnTree(inputs.a, inputs.b, function (itemA, itemB) {
962
- if (itemA === undefined || itemB === undefined)
996
+ if (!isNumber(itemA, itemB))
963
997
  return DISCARD;
964
998
  if (itemB === 0)
965
999
  return DISCARD;
@@ -986,12 +1020,12 @@ var equalTo = {
986
1020
  return __generator(this, function (_a) {
987
1021
  return [2 /*return*/, {
988
1022
  eq: binaryOnTree(inputs.a, inputs.b, function (itemA, itemB) {
989
- if (itemA === undefined || itemB === undefined)
1023
+ if (!isNumber(itemA, itemB))
990
1024
  return DISCARD;
991
1025
  return itemA === itemB;
992
1026
  }, true),
993
1027
  neq: binaryOnTree(inputs.a, inputs.b, function (itemA, itemB) {
994
- if (itemA === undefined || itemB === undefined)
1028
+ if (!isNumber(itemA, itemB))
995
1029
  return DISCARD;
996
1030
  return itemA !== itemB;
997
1031
  }, true),
@@ -1016,12 +1050,12 @@ var greaterThan = {
1016
1050
  return __generator(this, function (_a) {
1017
1051
  return [2 /*return*/, {
1018
1052
  gt: binaryOnTree(inputs.a, inputs.b, function (itemA, itemB) {
1019
- if (itemA === undefined || itemB === undefined)
1053
+ if (!isNumber(itemA, itemB))
1020
1054
  return DISCARD;
1021
1055
  return itemA > itemB;
1022
1056
  }, true),
1023
1057
  gte: binaryOnTree(inputs.a, inputs.b, function (itemA, itemB) {
1024
- if (itemA === undefined || itemB === undefined)
1058
+ if (!isNumber(itemA, itemB))
1025
1059
  return DISCARD;
1026
1060
  return itemA >= itemB;
1027
1061
  }, true),
@@ -1046,12 +1080,12 @@ var lessThan = {
1046
1080
  return __generator(this, function (_a) {
1047
1081
  return [2 /*return*/, {
1048
1082
  lt: binaryOnTree(inputs.a, inputs.b, function (itemA, itemB) {
1049
- if (itemA === undefined || itemB === undefined)
1083
+ if (!isNumber(itemA, itemB))
1050
1084
  return DISCARD;
1051
1085
  return itemA < itemB;
1052
1086
  }, true),
1053
1087
  lte: binaryOnTree(inputs.a, inputs.b, function (itemA, itemB) {
1054
- if (itemA === undefined || itemB === undefined)
1088
+ if (!isNumber(itemA, itemB))
1055
1089
  return DISCARD;
1056
1090
  return itemA <= itemB;
1057
1091
  }, true),
@@ -1075,7 +1109,7 @@ var modulo = {
1075
1109
  return __generator(this, function (_a) {
1076
1110
  return [2 /*return*/, {
1077
1111
  mod: binaryOnTree(inputs.a, inputs.b, function (itemA, itemB) {
1078
- if (itemA === undefined || itemB === undefined)
1112
+ if (!isNumber(itemA, itemB))
1079
1113
  return DISCARD;
1080
1114
  return itemA % itemB;
1081
1115
  }, true),
@@ -1099,7 +1133,7 @@ var multiply = {
1099
1133
  return __generator(this, function (_a) {
1100
1134
  return [2 /*return*/, {
1101
1135
  product: binaryOnTree(inputs.a, inputs.b, function (itemA, itemB) {
1102
- if (itemA === undefined || itemB === undefined)
1136
+ if (!isNumber(itemA, itemB))
1103
1137
  return DISCARD;
1104
1138
  return itemA * itemB;
1105
1139
  }, true),
@@ -1123,7 +1157,7 @@ var pow = {
1123
1157
  return __generator(this, function (_a) {
1124
1158
  return [2 /*return*/, {
1125
1159
  pow: binaryOnTree(inputs.x, inputs.n, function (x, n) {
1126
- if (x === undefined || n === undefined)
1160
+ if (!isNumber(x, n))
1127
1161
  return DISCARD;
1128
1162
  return Math.pow(x, n);
1129
1163
  }, true),
@@ -1146,7 +1180,7 @@ var sinDeg = {
1146
1180
  return __generator(this, function (_a) {
1147
1181
  return [2 /*return*/, {
1148
1182
  sin: mapTree(inputs.a, function (angle) {
1149
- if (angle === undefined)
1183
+ if (!isNumber(angle))
1150
1184
  return DISCARD;
1151
1185
  return Math.sin((angle * Math.PI) / 180);
1152
1186
  }),
@@ -1169,7 +1203,7 @@ var sqrt = {
1169
1203
  return __generator(this, function (_a) {
1170
1204
  return [2 /*return*/, {
1171
1205
  sqrt: mapTree(inputs.x, function (x) {
1172
- if (x === undefined)
1206
+ if (!isNumber(x))
1173
1207
  return DISCARD;
1174
1208
  if (x < 0)
1175
1209
  return DISCARD;
@@ -1195,7 +1229,7 @@ var subtract$1 = {
1195
1229
  return __generator(this, function (_a) {
1196
1230
  return [2 /*return*/, {
1197
1231
  difference: binaryOnTree(inputs.a, inputs.b, function (itemA, itemB) {
1198
- if (itemA === undefined || itemB === undefined)
1232
+ if (!isNumber(itemA, itemB))
1199
1233
  return DISCARD;
1200
1234
  return itemA - itemB;
1201
1235
  }, true),
@@ -1218,7 +1252,7 @@ var tanDeg = {
1218
1252
  return __generator(this, function (_a) {
1219
1253
  return [2 /*return*/, {
1220
1254
  tan: mapTree(inputs.a, function (angle) {
1221
- if (angle === undefined)
1255
+ if (!isNumber(angle))
1222
1256
  return DISCARD;
1223
1257
  return Math.tan((angle * Math.PI) / 180);
1224
1258
  }),
@@ -1246,7 +1280,7 @@ var ceil = {
1246
1280
  f = Math.pow(10, params.decimals || 0);
1247
1281
  return [2 /*return*/, {
1248
1282
  ceil: mapTree(inputs.x, function (x) {
1249
- if (x === undefined)
1283
+ if (!isNumber(x))
1250
1284
  return DISCARD;
1251
1285
  return Math.ceil(f * x) / f;
1252
1286
  }),
@@ -1274,7 +1308,7 @@ var floor = {
1274
1308
  f = Math.pow(10, params.decimals || 0);
1275
1309
  return [2 /*return*/, {
1276
1310
  floor: mapTree(inputs.x, function (x) {
1277
- if (x === undefined)
1311
+ if (!isNumber(x))
1278
1312
  return DISCARD;
1279
1313
  return Math.floor(f * x) / f;
1280
1314
  }),
@@ -1302,7 +1336,7 @@ var round = {
1302
1336
  f = Math.pow(10, params.decimals || 0);
1303
1337
  return [2 /*return*/, {
1304
1338
  round: mapTree(inputs.x, function (x) {
1305
- if (x === undefined)
1339
+ if (!isNumber(x))
1306
1340
  return DISCARD;
1307
1341
  return Math.round(f * x) / f;
1308
1342
  }),
@@ -1662,7 +1696,11 @@ var listInput = {
1662
1696
  allLines = allLines.map(function (line) { return line.toLowerCase() === "true"; });
1663
1697
  }
1664
1698
  else if (allLines.every(function (line) { return isNumStr(line); })) {
1665
- allLines = allLines.map(function (line) { return Number(line); });
1699
+ allLines = allLines.map(function (line) {
1700
+ if (!line)
1701
+ return undefined;
1702
+ return Number(line);
1703
+ });
1666
1704
  }
1667
1705
  return allLines;
1668
1706
  }),
@@ -1932,10 +1970,65 @@ var groupOr = {
1932
1970
  }); },
1933
1971
  };
1934
1972
 
1973
+ var groupStats = {
1974
+ name: "groupStats",
1975
+ label: "Group stats",
1976
+ description: "Returns statistics about a group of numbers",
1977
+ inputs: {
1978
+ tree: "number",
1979
+ },
1980
+ outputs: {
1981
+ min: "number",
1982
+ max: "number",
1983
+ avg: "number",
1984
+ std: "number",
1985
+ sum: "number",
1986
+ count: "number",
1987
+ },
1988
+ impl: function (inputs) { return __awaiter(void 0, void 0, void 0, function () {
1989
+ var stats;
1990
+ return __generator(this, function (_a) {
1991
+ stats = mapTreeBranch(inputs.tree || {}, function (branch) {
1992
+ var numbers = branch.filter(function (val) { return typeof val === "number"; });
1993
+ var min = Infinity;
1994
+ var max = -Infinity;
1995
+ var avg = 0;
1996
+ var std = 0;
1997
+ var variance = 0;
1998
+ var sum = 0;
1999
+ var count = numbers.length;
2000
+ numbers.forEach(function (val) {
2001
+ if (val < min)
2002
+ min = val;
2003
+ if (val > max)
2004
+ max = val;
2005
+ sum += val;
2006
+ avg += val / count;
2007
+ });
2008
+ numbers.forEach(function (val) {
2009
+ variance += Math.pow((val - avg), 2) / count;
2010
+ });
2011
+ std = Math.sqrt(variance);
2012
+ return [{ min: min, max: max, avg: avg, std: std, sum: sum, count: count }];
2013
+ });
2014
+ // split out into separate outputs
2015
+ return [2 /*return*/, {
2016
+ min: mapTreeBranch(stats, function (branch) { return [branch[0].min]; }),
2017
+ max: mapTreeBranch(stats, function (branch) { return [branch[0].max]; }),
2018
+ avg: mapTreeBranch(stats, function (branch) { return [branch[0].avg]; }),
2019
+ std: mapTreeBranch(stats, function (branch) { return [branch[0].std]; }),
2020
+ sum: mapTreeBranch(stats, function (branch) { return [branch[0].sum]; }),
2021
+ count: mapTreeBranch(stats, function (branch) { return [branch[0].count]; }),
2022
+ }];
2023
+ });
2024
+ }); },
2025
+ };
2026
+
1935
2027
  var _a$2;
1936
2028
  var primitives$2 = (_a$2 = {},
1937
2029
  _a$2[groupAnd.name] = groupAnd,
1938
2030
  _a$2[groupOr.name] = groupOr,
2031
+ _a$2[groupStats.name] = groupStats,
1939
2032
  _a$2);
1940
2033
 
1941
2034
  var inputs = {
@@ -5289,6 +5382,7 @@ var InputText = React.memo(function (_a) {
5289
5382
  return (React.createElement("textarea", { value: inner, onChange: function (e) { return setInner(e.target.value); }, onBlur: handleBlur, onKeyDown: handleKey, onMouseDown: function (e) { return e.stopPropagation(); }, rows: 4 }));
5290
5383
  });
5291
5384
  function Control(_a) {
5385
+ var _b;
5292
5386
  var value = _a.value, vardef = _a.vardef, onChange = _a.onChange;
5293
5387
  var customControls = useControls();
5294
5388
  if (vardef.type in customControls) {
@@ -5303,8 +5397,13 @@ function Control(_a) {
5303
5397
  return React.createElement(InputString, { value: value !== null && value !== void 0 ? value : "", onChange: onChange });
5304
5398
  case "text":
5305
5399
  return React.createElement(InputText, { value: value !== null && value !== void 0 ? value : "", onChange: onChange });
5306
- case "number":
5307
- return (React.createElement(InputNumber, { value: Number(value) || 0, onChange: onChange, step: vardef.step, min: vardef.min, max: vardef.max, inputMode: "numeric", onMouseDown: function (e) { return e.stopPropagation(); } }));
5400
+ case "number": {
5401
+ if (!vardef.allowEmpty) {
5402
+ value = (_b = value !== null && value !== void 0 ? value : vardef.default) !== null && _b !== void 0 ? _b : 0;
5403
+ }
5404
+ value = value ? Number(value) : value;
5405
+ return (React.createElement(InputNumber, { value: value, onChange: onChange, step: vardef.step, min: vardef.min, max: vardef.max, inputMode: "numeric", onMouseDown: function (e) { return e.stopPropagation(); } }));
5406
+ }
5308
5407
  case "boolean":
5309
5408
  return (React.createElement("input", { type: "checkbox", checked: Boolean(value), onChange: function (e) { return onChange === null || onChange === void 0 ? void 0 : onChange(e.target.checked); } }));
5310
5409
  default: