@lotics/app-sdk 0.115.3 → 0.115.4

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 (2) hide show
  1. package/dist/index.js +23 -14
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -31520,33 +31520,37 @@ function buildDependencyGraph(formulaFields, allFields) {
31520
31520
  }
31521
31521
  return { sortedFields: result, circularDependencies };
31522
31522
  }
31523
- function readsFieldsOnlyThroughEmptinessPredicates(node) {
31523
+ function readsFieldsOnlyThroughEmptinessPredicates(node, taken) {
31524
+ const reads = (child) => readsFieldsOnlyThroughEmptinessPredicates(child, taken);
31524
31525
  if (node === void 0) return true;
31525
31526
  if (isFieldRead(node)) return false;
31526
31527
  switch (node.type) {
31527
31528
  case "Invoke": {
31528
31529
  const args = node.arguments ?? [];
31529
31530
  const predicate = node.method === void 0 && node.receiver.type === "ID" && EMPTINESS_PREDICATES.has(node.receiver.value);
31530
- return (predicate || readsFieldsOnlyThroughEmptinessPredicates(node.receiver)) && args.every(
31531
- (arg) => predicate && isFieldRead(arg) || readsFieldsOnlyThroughEmptinessPredicates(arg)
31531
+ return (predicate || reads(node.receiver)) && args.every(
31532
+ (arg) => predicate && isFieldRead(arg) || reads(arg)
31532
31533
  );
31533
31534
  }
31534
31535
  case "Unary":
31535
- return readsFieldsOnlyThroughEmptinessPredicates(node.child);
31536
+ return reads(node.child);
31536
31537
  case "Binary":
31537
- return readsFieldsOnlyThroughEmptinessPredicates(node.left) && readsFieldsOnlyThroughEmptinessPredicates(node.right);
31538
+ return reads(node.left) && reads(node.right);
31538
31539
  case "Getter":
31539
- return readsFieldsOnlyThroughEmptinessPredicates(node.receiver);
31540
+ return reads(node.receiver);
31540
31541
  case "Index":
31541
- return readsFieldsOnlyThroughEmptinessPredicates(node.receiver) && readsFieldsOnlyThroughEmptinessPredicates(node.argument);
31542
- case "Ternary":
31543
- return readsFieldsOnlyThroughEmptinessPredicates(node.condition) && readsFieldsOnlyThroughEmptinessPredicates(node.trueExpr) && readsFieldsOnlyThroughEmptinessPredicates(node.falseExpr);
31542
+ return reads(node.receiver) && reads(node.argument);
31543
+ case "Ternary": {
31544
+ if (!reads(node.condition)) return false;
31545
+ const decided = node.condition === void 0 || taken === void 0 ? void 0 : taken(node.condition);
31546
+ return decided === true ? reads(node.trueExpr) : decided === false ? reads(node.falseExpr) : reads(node.trueExpr) && reads(node.falseExpr);
31547
+ }
31544
31548
  case "List":
31545
- return (node.items ?? []).every(readsFieldsOnlyThroughEmptinessPredicates);
31549
+ return (node.items ?? []).every((item) => reads(item));
31546
31550
  case "Map":
31547
- return Object.values(node.entries ?? {}).every(readsFieldsOnlyThroughEmptinessPredicates);
31551
+ return Object.values(node.entries ?? {}).every((entry) => reads(entry));
31548
31552
  case "ArrowFunction":
31549
- return readsFieldsOnlyThroughEmptinessPredicates(node.body);
31553
+ return reads(node.body);
31550
31554
  case "ID":
31551
31555
  return node.value !== "data";
31552
31556
  case "Literal":
@@ -31559,8 +31563,13 @@ function isFieldRead(node) {
31559
31563
  }
31560
31564
  function evaluateFormulaWithJS(preparedExpression, data, timezone, everyReferenceEmpty) {
31561
31565
  try {
31562
- if (everyReferenceEmpty && !readsFieldsOnlyThroughEmptinessPredicates(parseExpression(preparedExpression))) {
31563
- return null;
31566
+ if (everyReferenceEmpty) {
31567
+ const helpers = createTimezoneAwareFunctions(timezone);
31568
+ const taken = (condition2) => {
31569
+ const answer = condition2.evaluate({ ...data, ...helpers });
31570
+ return typeof answer === "boolean" ? answer : void 0;
31571
+ };
31572
+ if (!readsFieldsOnlyThroughEmptinessPredicates(parseExpression(preparedExpression), taken)) return null;
31564
31573
  }
31565
31574
  const result = evaluateJsExpression(preparedExpression, data, void 0, timezone);
31566
31575
  if (result === null || result === void 0) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lotics/app-sdk",
3
- "version": "0.115.3",
3
+ "version": "0.115.4",
4
4
  "description": "The SDK a Lotics custom-code app reads and writes through \u2014 typed hooks over the host bridge, cell readers, mount() and AppRouter",
5
5
  "type": "module",
6
6
  "exports": {