From 823d8eea51bbba94a84c5b1d4c5ed2cd5ea6a344 Mon Sep 17 00:00:00 2001 From: Michael Shanks Date: Tue, 24 Mar 2020 16:12:46 +0000 Subject: [PATCH] allow all conde snippets to be either blocks or expressions --- packages/core/src/actionsApi/initialise.js | 4 +-- packages/core/src/common/compileCode.js | 29 +++++++++---------- packages/core/src/indexApi/aggregates.js | 4 +-- packages/core/src/indexing/evaluate.js | 6 ++-- packages/core/src/indexing/sharding.js | 2 +- packages/core/src/recordApi/validate.js | 4 +-- packages/core/src/templateApi/validate.js | 6 ++-- .../core/src/templateApi/validateAggregate.js | 2 +- 8 files changed, 28 insertions(+), 29 deletions(-) diff --git a/packages/core/src/actionsApi/initialise.js b/packages/core/src/actionsApi/initialise.js index 6df15994dd..90b27ac2b1 100644 --- a/packages/core/src/actionsApi/initialise.js +++ b/packages/core/src/actionsApi/initialise.js @@ -9,7 +9,7 @@ import { reduce, find, } from "lodash/fp" -import { compileExpression, compileCode } from "../common/compileCode" +import { compileCode } from "../common/compileCode" import { $ } from "../common" import { _executeAction } from "./execute" import { BadRequestError, NotFoundError } from "../common/errors" @@ -49,7 +49,7 @@ const subscribeTriggers = ( const shouldRunTrigger = (trigger, eventContext) => { if (!trigger.condition) return true - const shouldRun = compileExpression(trigger.condition) + const shouldRun = compileCode(trigger.condition) return shouldRun({ context: eventContext }) } diff --git a/packages/core/src/common/compileCode.js b/packages/core/src/common/compileCode.js index 3447d45b5c..8c570d626f 100644 --- a/packages/core/src/common/compileCode.js +++ b/packages/core/src/common/compileCode.js @@ -1,13 +1,25 @@ import { - compileExpression as cExp, compileCode as cCode, } from "@nx-js/compiler-util" +import { includes } from "lodash/fp" + export const compileCode = code => { let func + let safeCode + + if (includes("return ")(code)) { + safeCode = code + } else { + let trimmed = code.trim() + trimmed = trimmed.endsWith(";") + ? trimmed.substring(0, trimmed.length - 1) + : trimmed + safeCode = `return (${trimmed})` + } try { - func = cCode(code) + func = cCode(safeCode) } catch (e) { e.message = `Error compiling code : ${code} : ${e.message}` throw e @@ -15,16 +27,3 @@ export const compileCode = code => { return func } - -export const compileExpression = code => { - let func - - try { - func = cExp(code) - } catch (e) { - e.message = `Error compiling expression : ${code} : ${e.message}` - throw e - } - - return func -} diff --git a/packages/core/src/indexApi/aggregates.js b/packages/core/src/indexApi/aggregates.js index 94344d6ad4..178f37f45a 100644 --- a/packages/core/src/indexApi/aggregates.js +++ b/packages/core/src/indexApi/aggregates.js @@ -1,5 +1,5 @@ import { has, isNumber, isUndefined } from "lodash/fp" -import { compileExpression, compileCode } from "@nx-js/compiler-util" +import { compileCode } from "../common/compileCode" import { safeKey, apiWrapper, events, isNonEmptyString } from "../common" import { iterateIndex } from "../indexing/read" import { @@ -147,7 +147,7 @@ const applyItemToAggregateResult = (indexNode, result, item) => { const thisGroupResult = result[aggGroup.name] if (isNonEmptyString(aggGroup.condition)) { - if (!compileExpression(aggGroup.condition)({ record: item })) { + if (!compileCode(aggGroup.condition)({ record: item })) { continue } } diff --git a/packages/core/src/indexing/evaluate.js b/packages/core/src/indexing/evaluate.js index db7f0d0236..ec9180ffbc 100644 --- a/packages/core/src/indexing/evaluate.js +++ b/packages/core/src/indexing/evaluate.js @@ -1,5 +1,5 @@ -import { compileExpression, compileCode } from "@nx-js/compiler-util" -import { isUndefined, keys, cloneDeep, isFunction } from "lodash/fp" +import { compileCode } from "../common/compileCode" +import { isUndefined, keys, cloneDeep, isFunction, includes } from "lodash/fp" import { defineError } from "../common" export const filterEval = "FILTER_EVALUATE" @@ -16,7 +16,7 @@ const getEvaluateResult = () => ({ result: null, }) -export const compileFilter = index => compileExpression(index.filter) +export const compileFilter = index => compileCode(index.filter) export const compileMap = index => compileCode(index.map) diff --git a/packages/core/src/indexing/sharding.js b/packages/core/src/indexing/sharding.js index a9b5ded1d7..0b8eaaf97e 100644 --- a/packages/core/src/indexing/sharding.js +++ b/packages/core/src/indexing/sharding.js @@ -1,4 +1,4 @@ -import { compileCode } from "@nx-js/compiler-util" +import { compileCode } from "../common/compileCode" import { filter, includes, map, last } from "lodash/fp" import { getActualKeyOfParent, diff --git a/packages/core/src/recordApi/validate.js b/packages/core/src/recordApi/validate.js index b2949b5bf2..052a92680e 100644 --- a/packages/core/src/recordApi/validate.js +++ b/packages/core/src/recordApi/validate.js @@ -1,5 +1,5 @@ import { map, reduce, filter, isEmpty, flatten, each } from "lodash/fp" -import { compileExpression } from "@nx-js/compiler-util" +import { compileCode } from "../common/compileCode" import _ from "lodash" import { getExactNodeForKey } from "../templateApi/hierarchy" import { validateFieldParse, validateTypeConstraints } from "../types" @@ -35,7 +35,7 @@ const validateAllTypeConstraints = async (record, recordNode, context) => { const runRecordValidationRules = (record, recordNode) => { const runValidationRule = rule => { - const isValid = compileExpression(rule.expressionWhenValid) + const isValid = compileCode(rule.expressionWhenValid) const expressionContext = { record, _ } return isValid(expressionContext) ? { valid: true } diff --git a/packages/core/src/templateApi/validate.js b/packages/core/src/templateApi/validate.js index 1b3afa84d1..14e4edbba9 100644 --- a/packages/core/src/templateApi/validate.js +++ b/packages/core/src/templateApi/validate.js @@ -11,7 +11,7 @@ import { isEmpty, has, } from "lodash/fp" -import { compileExpression, compileCode } from "@nx-js/compiler-util" +import { compileCode } from "../common/compileCode" import { $, isSomething, @@ -73,7 +73,7 @@ const aggregateGroupRules = [ "condition does not compile", a => isEmpty(a.condition) || - executesWithoutException(() => compileExpression(a.condition)) + executesWithoutException(() => compileCode(a.condition)) ), ] @@ -196,7 +196,7 @@ const triggerRules = actions => [ t => { if (!t.condition) return true try { - compileExpression(t.condition) + compileCode(t.condition) return true } catch (_) { return false diff --git a/packages/core/src/templateApi/validateAggregate.js b/packages/core/src/templateApi/validateAggregate.js index 1e790d624a..e0fc4e9a94 100644 --- a/packages/core/src/templateApi/validateAggregate.js +++ b/packages/core/src/templateApi/validateAggregate.js @@ -1,5 +1,5 @@ import { flatten, map, isEmpty } from "lodash/fp" -import { compileCode } from "@nx-js/compiler-util" +import { compileCode } from "../common/compileCode" import { isNonEmptyString, executesWithoutException, $ } from "../common" import { applyRuleSet, makerule } from "../common/validationCommon"