From c4c1c6c54d0670ca9bb02b1f324c935564f7eea3 Mon Sep 17 00:00:00 2001 From: Mark Ford Date: Tue, 24 Dec 2024 10:34:37 -0500 Subject: [PATCH] improve validation of MathAdd (#25) * fix: update the grammar for the math add intrinsic func args * fix: support negative numbers as literal values --- package.json | 2 +- src/__tests__/validatePath.test.ts | 32 ++++++++++++++++++++++++++++++ src/aslPaths.pegjs | 7 +++++-- 3 files changed, 38 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 8c0fdda..1a6bcf5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "asl-path-validator", - "version": "0.15.0", + "version": "0.16.0", "description": "Validates the path expressions for the Amazon States Language", "main": "./dist/index.js", "scripts": { diff --git a/src/__tests__/validatePath.test.ts b/src/__tests__/validatePath.test.ts index 5fda749..c2b4545 100644 --- a/src/__tests__/validatePath.test.ts +++ b/src/__tests__/validatePath.test.ts @@ -132,6 +132,38 @@ describe("unit tests for the parser", () => { path: "States.MathAdd($.value1, $.step)", valid_in: PayloadTemplatesOnly, }, + { + path: "States.MathAdd($.value1, -1)", + valid_in: PayloadTemplatesOnly, + }, + { + path: "States.MathAdd($.value1, 1)", + valid_in: PayloadTemplatesOnly, + }, + { + path: "States.MathAdd(1, -1)", + valid_in: PayloadTemplatesOnly, + }, + { + path: "States.MathAdd(-1, -1)", + valid_in: PayloadTemplatesOnly, + }, + { + path: "States.MathAdd(1, $.step)", + valid_in: PayloadTemplatesOnly, + }, + { + path: "States.MathAdd(-1, $.step)", + valid_in: PayloadTemplatesOnly, + }, + { + path: "States.MathAdd('-1', 'abc')", + valid_in: None, + }, + { + path: "States.MathAdd(States.ArrayLength($$.Execution.Input.machines),-1)", + valid_in: PayloadTemplatesOnly, + }, { path: "States.StringSplit($.inputString, $.splitter)", valid_in: PayloadTemplatesOnly, diff --git a/src/aslPaths.pegjs b/src/aslPaths.pegjs index 296c9ee..5ce7094 100644 --- a/src/aslPaths.pegjs +++ b/src/aslPaths.pegjs @@ -63,7 +63,10 @@ intrinsic_function / func:"States.StringToJson" args:single_arg {return {func, args}} / func:"States.JsonToString" args:single_arg {return {func, args}} / func:"States.MathRandom" args:function_args {return {func, args}} - / func:"States.MathAdd" args:function_args {return {func, args}} + / func:"States.MathAdd" PAREN_LEFT _ arg1:jsonpath_ _ COMMA _ arg2:jsonpath_ _ PAREN_RIGHT {return {func, arg1, arg2}} + / func:"States.MathAdd" PAREN_LEFT _ arg1:jsonpath_ _ COMMA _ arg2:(MINUS? NUMBER) _ PAREN_RIGHT {return {func, arg1, arg2}} + / func:"States.MathAdd" PAREN_LEFT _ arg1:(MINUS? NUMBER) _ COMMA _ arg2:jsonpath_ _ PAREN_RIGHT {return {func, arg1, arg2}} + / func:"States.MathAdd" PAREN_LEFT _ arg1:(MINUS? NUMBER) _ COMMA _ arg2:(MINUS? NUMBER) _ PAREN_RIGHT {return {func, arg1, arg2}} / func:"States.StringSplit" args:function_args {return {func, args}} / func:"States.UUID" args:no_args {return {func, args}} / func:"States.Format" args:function_args {return {func, args}} @@ -119,7 +122,7 @@ comparison_op value = STRING - / NUMBER + / minus:MINUS? nbr:NUMBER { return (minus === '-' ? -1 : 1) * parseFloat(nbr)} / TRUE / FALSE / NULL