jsonlogic-formula
Version:
JsonLogic parser to and from spreadsheet formula syntax
8 lines (7 loc) • 17.3 kB
Source Map (JSON)
{
"version": 3,
"sources": ["../src/formula-to-jsonlogic.ts", "../src/jsonlogic-to-string.ts"],
"sourcesContent": ["const ANY_REGEX_BREAK = /[&;,=><+\\-)\\*\\/]/;\n\nconst FN_SEP = \", \";\nconst FN_NAME_VARIABLE = \"V\";\nconst FN_NAME_FUNCTION = \"F\";\nconst FN_NAME_OPERATOR = \"O\";\n\nfunction parse(ast: any, joinKey = \"\"): any {\n\tif (ast == null) {\n\t\treturn \"null\";\n\t}\n\n\tif (Array.isArray(ast)) {\n\t\tif (!joinKey && ast.length > 1) {\n\t\t\treturn `[${ast.map((a) => parse(a)).join(\",\")}]`;\n\t\t}\n\n\t\treturn ast.map((a) => parse(a)).join(joinKey);\n\t}\n\n\tif (typeof ast === \"string\") {\n\t\treturn JSON.stringify(ast);\n\t}\n\n\treturn ast.toString();\n}\n\nconst VariableTokenKey = \"@VAR\";\nfunction VariableToken(\n\tvariable: string,\n\tleftSheet?: string,\n\trightSheet?: string,\n) {\n\treturn {\n\t\t$key: VariableTokenKey,\n\t\tvariable,\n\t\tleftSheet,\n\t\trightSheet,\n\t\ttoString() {\n\t\t\treturn `${FN_NAME_VARIABLE}(${JSON.stringify(\n\t\t\t\tthis.variable,\n\t\t\t)}, ${JSON.stringify(this.leftSheet)}, ${JSON.stringify(\n\t\t\t\tthis.rightSheet,\n\t\t\t)})`;\n\t\t},\n\t};\n}\n\nconst FunctionTokenKey = \"@FN\";\nfunction FunctionToken(name: string, args: any) {\n\treturn {\n\t\t$key: FunctionTokenKey,\n\t\tname,\n\t\targs,\n\t\ttoString() {\n\t\t\treturn `${FN_NAME_FUNCTION}('${this.name}', ${parse(this.args, FN_SEP)})`;\n\t\t},\n\t};\n}\n\nconst OperatorTokenKey = \"@OP\";\nfunction OperatorToken(operator: string, left: any, right?: any) {\n\treturn {\n\t\t$key: OperatorTokenKey,\n\t\toperator,\n\t\tleft,\n\t\tright,\n\t\ttoString() {\n\t\t\treturn `${FN_NAME_OPERATOR}('${this.operator}', ${parse(\n\t\t\t\tthis.left,\n\t\t\t\tFN_SEP,\n\t\t\t)}, ${parse(this.right, FN_SEP)})`;\n\t\t},\n\t};\n}\n\nfunction tokneize(value: string) {\n\tconst chunks = value\n\t\t.split(\n\t\t\t/(\"[^\"]*\"|'[^']*'|\\#[A-Z\\/0_]+[\\!?]?|\\[[^\\]]*\\]|[\\w\\.]+\\s*\\(|>=|<=|<>|[!&:;,+\\-\\/*()=<>%^\\s{}@])/,\n\t\t)\n\t\t.filter((value) => !!value);\n\tlet i = 0;\n\tlet iLen = 0;\n\tlet lastWasText = false;\n\tlet lastWasSpace = false;\n\tlet arrayMode = false;\n\tlet arrayDepth = 0;\n\n\treturn parseGroups().filter((value) => value !== \",\");\n\n\tfunction parseGroups(breakOn?: RegExp) {\n\t\tconst group: any[] = [];\n\n\t\tlet c: string;\n\t\twhile ((c = chunks[i])) {\n\t\t\tconst last = chunks[i - 1];\n\t\t\tconst next = chunks[i + 1];\n\t\t\tconst len = c.length;\n\n\t\t\tconst _lastWasText = lastWasText;\n\n\t\t\tlastWasText = false;\n\n\t\t\tiLen += len;\n\t\t\tlastWasSpace = c === \"!\" ? lastWasSpace : last === \" \";\n\n\t\t\tif (arrayMode && arrayDepth === 1 && c !== \"}\") {\n\t\t\t\tarrayDepth = 2;\n\t\t\t\tgroup.push(parseGroups(/}/));\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (c[0] === '\"' && c[len - 1] === '\"') {\n\t\t\t\ti++;\n\t\t\t\t// Handle string escaping with double quotes `60\"\"` => `60\"`\n\t\t\t\tif (_lastWasText) {\n\t\t\t\t\tgroup.push(`${group.pop()}\"${c.slice(1, -1)}`);\n\t\t\t\t} else {\n\t\t\t\t\tgroup.push(c.slice(1, -1));\n\t\t\t\t}\n\t\t\t\tlastWasText = true;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (c[0] === '\"' && c[len - 1] !== '\"') {\n\t\t\t\tthrow new Error(`Unclosed quote (\") at ${iLen - len + 1}`);\n\t\t\t}\n\n\t\t\tif (c[0] === \"'\" && c[len - 1] === \"'\") {\n\t\t\t\ti++;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (breakOn?.test(c)) {\n\t\t\t\treturn group;\n\t\t\t}\n\n\t\t\t// Eat whitespace\n\t\t\tif (c === \" \" || c === \"\\n\" || c === \"\\r\" || c === \"\\t\") {\n\t\t\t\ti++;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (c === \"(\") {\n\t\t\t\ti++;\n\t\t\t\tgroup.push(...parseGroups());\n\n\t\t\t\tif (chunks[i - 1] !== \")\") {\n\t\t\t\t\tthrow new Error(`Unclosed parenthesis \"(\" at ${iLen}`);\n\t\t\t\t}\n\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (arrayMode && c === \";\") {\n\t\t\t\tarrayDepth = 1;\n\t\t\t\ti++;\n\t\t\t\treturn group;\n\t\t\t}\n\n\t\t\tif (arrayMode && c === \",\") {\n\t\t\t\tarrayDepth = 2;\n\t\t\t\ti++;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (c === \"{\") {\n\t\t\t\tif (arrayMode) {\n\t\t\t\t\tthrow new Error(\"Nested arrays are not supported\");\n\t\t\t\t}\n\n\t\t\t\tarrayMode = true;\n\t\t\t\tarrayDepth = 1;\n\t\t\t\ti++;\n\t\t\t\tgroup.push(parseGroups(/}/));\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (c === \"}\" && arrayDepth === 2) {\n\t\t\t\tarrayDepth = 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (c === \"}\") {\n\t\t\t\tarrayMode = false;\n\t\t\t\tarrayDepth = 0;\n\t\t\t\ti++;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Handle functions SUM(...)\n\t\t\tif (len > 1 && c.charAt(len - 1) === \"(\") {\n\t\t\t\ti++;\n\t\t\t\tconst token = FunctionToken(\n\t\t\t\t\tc.slice(0, -1).trim().toUpperCase(),\n\t\t\t\t\tparseGroups().filter((v) => \",\" !== v),\n\t\t\t\t);\n\t\t\t\tgroup.push(token);\n\n\t\t\t\tif (chunks[i - 1] !== \")\") {\n\t\t\t\t\tthrow new Error(`Unclosed parenthesis \"(\" at ${iLen}`);\n\t\t\t\t}\n\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (c === \")\") {\n\t\t\t\ti++;\n\t\t\t\treturn group;\n\t\t\t}\n\n\t\t\tif (c === \"%\") {\n\t\t\t\ti++;\n\t\t\t\tconst token = OperatorToken(c, group.pop());\n\t\t\t\tgroup.push(token);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (c === \"*\" || c === \"/\" || c === \"&\") {\n\t\t\t\ti++;\n\t\t\t\tconst token = OperatorToken(\n\t\t\t\t\tc,\n\t\t\t\t\tgroup.pop(),\n\t\t\t\t\tparseGroups(ANY_REGEX_BREAK),\n\t\t\t\t);\n\t\t\t\tgroup.push(token);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (c === \"+\" || c === \"-\" || c === \"^\") {\n\t\t\t\ti++;\n\t\t\t\t// Account for \"-1\", \"+1\", \"-A1\" etc.\n\t\t\t\tconst lastToken = group[group.length - 1];\n\t\t\t\tif (\n\t\t\t\t\tlastToken === \",\" ||\n\t\t\t\t\tlastToken === \";\" ||\n\t\t\t\t\tlastToken === \"\" ||\n\t\t\t\t\tlastToken == null\n\t\t\t\t) {\n\t\t\t\t\tconst token = OperatorToken(c, \"0\", parseGroups(ANY_REGEX_BREAK));\n\t\t\t\t\tgroup.push(token);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst token = OperatorToken(\n\t\t\t\t\tc,\n\t\t\t\t\tgroup.pop(),\n\t\t\t\t\tparseGroups(/[;,=><+\\-^&)]/),\n\t\t\t\t);\n\t\t\t\tgroup.push(token);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tc === \"=\" ||\n\t\t\t\tc === \"<>\" ||\n\t\t\t\tc === \"<=\" ||\n\t\t\t\tc === \">=\" ||\n\t\t\t\tc === \"<\" ||\n\t\t\t\tc === \">\"\n\t\t\t) {\n\t\t\t\ti++;\n\t\t\t\tconst token = OperatorToken(c, group.pop(), parseGroups(/[\\;\\,=><)]/));\n\t\t\t\tgroup.push(token);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Handle numbers\n\t\t\t// If they are not surrounded by `:` they are not range cells (e.g. 1:2)\n\t\t\tif (/^[0-9.][0-9.,]*$/.test(c) && last !== \":\" && next !== \":\") {\n\t\t\t\ti++;\n\t\t\t\tgroup.push(Number(c.replace(/,/g, \".\")));\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (c.toUpperCase() === \"TRUE\") {\n\t\t\t\ti++;\n\t\t\t\tgroup.push(true);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (c.toUpperCase() === \"FALSE\") {\n\t\t\t\ti++;\n\t\t\t\tgroup.push(false);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (c.toUpperCase() === \"NULL\") {\n\t\t\t\ti++;\n\t\t\t\tgroup.push(null);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Handle variables\n\t\t\t// - Starts with a letter or underscore (_) or backslash (\\)\n\t\t\t// - Doesn't include a space or character that isn't allowed\n\t\t\t// - Doesn't conflict with an existing name in the workbook.\n\t\t\tif (/^[A-Za-z_\\\\][\\w.]*$/.test(c)) {\n\t\t\t\tconst token = VariableToken(c);\n\t\t\t\tgroup.push(token);\n\n\t\t\t\ti++;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tgroup.push(c);\n\t\t\ti++;\n\t\t}\n\n\t\treturn group;\n\t}\n}\n\nfunction OPERATOR(type: string, ...args: any[]) {\n\tif (type === \"=\") {\n\t\treturn {\n\t\t\t\"===\": args,\n\t\t};\n\t}\n\n\tif (type === \"<>\") {\n\t\treturn {\n\t\t\t\"!==\": args,\n\t\t};\n\t}\n\n\tif (type === \"&\") {\n\t\treturn {\n\t\t\tcat: args,\n\t\t};\n\t}\n\n\treturn {\n\t\t[type]: args,\n\t};\n}\n\nfunction FUNCTION(type: string, ...args: any[]) {\n\tif (type === \"NOT\") {\n\t\tif (args[0][\"!\"]) {\n\t\t\treturn {\n\t\t\t\t\"!!\": args[0][\"!\"],\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\t\"!\": args,\n\t\t};\n\t}\n\n\treturn {\n\t\t[type.toLowerCase()]: args,\n\t};\n}\n\nfunction VARIABLE(name: string) {\n\treturn {\n\t\tvar: name,\n\t};\n}\n\nexport function formulaToJsonlogic(value: string) {\n\tconst fn = new Function(\n\t\tFN_NAME_VARIABLE,\n\t\tFN_NAME_FUNCTION,\n\t\tFN_NAME_OPERATOR,\n\t\t\"return \" + parse(tokneize(value)),\n\t);\n\n\treturn fn(VARIABLE, FUNCTION, OPERATOR);\n}\n", "const OPERATOR_MAP: Record<string, string> = {\n\t\"==\": \"=\",\n\t\"===\": \"=\",\n\t\"!=\": \"<>\",\n\t\"!==\": \"<>\",\n\tCAT: \"&\",\n};\n\n// Logical operators\n// ==\n// ===\n// !=\n// !==\n// !\n// !!\n\n// Numeric operations\n// >, >=, <, and <=\n\n// Arithmetic\n// + - * / %\n\nexport function jsonlogicToFormula(value: any, depth = 0): string | string[] {\n\tif (Array.isArray(value)) {\n\t\tif (depth > 0) {\n\t\t\treturn `{${value\n\t\t\t\t.map((v) => jsonlogicToFormula(v, depth + 1))\n\t\t\t\t.join(\";\")}}`;\n\t\t}\n\n\t\treturn value.flatMap((v) => jsonlogicToFormula(v, depth + 1));\n\t}\n\n\tif (typeof value === \"object\" && value) {\n\t\tconst keys = Object.keys(value);\n\n\t\tif (keys.length === 1) {\n\t\t\tconst name = keys[0].toUpperCase();\n\n\t\t\tif (name === \"VAR\") {\n\t\t\t\tconst result = value[keys[0]];\n\n\t\t\t\tif (typeof result === \"string\") {\n\t\t\t\t\treturn result || \"root\";\n\t\t\t\t}\n\n\t\t\t\treturn jsonlogicToFormula(result, depth + 1);\n\t\t\t}\n\n\t\t\t// New function restarts depth\n\t\t\tconst result = jsonlogicToFormula(value[keys[0]], 0);\n\t\t\tconst arrayResult = ([] as string[]).concat(result);\n\n\t\t\tif (/^[!=><]+$/.test(name) || name === \"CAT\") {\n\t\t\t\tconst op = OPERATOR_MAP[name] || name;\n\t\t\t\tconst chunk1 = arrayResult.slice(0, 2);\n\t\t\t\tconst chunk2 = arrayResult.slice(1, 3);\n\n\t\t\t\tif (chunk2.length > 1) {\n\t\t\t\t\treturn `AND(${chunk1.join(op)},${chunk2.join(op)})`;\n\t\t\t\t}\n\n\t\t\t\tif (op === \"!\") {\n\t\t\t\t\treturn `NOT(${chunk1})`;\n\t\t\t\t}\n\n\t\t\t\tif (op === \"!!\") {\n\t\t\t\t\treturn `NOT(NOT(${chunk1}))`;\n\t\t\t\t}\n\n\t\t\t\treturn chunk1.join(op);\n\t\t\t}\n\n\t\t\tif (/^[+\\-*\\/%]+$/.test(name)) {\n\t\t\t\tconst op = OPERATOR_MAP[name] || name;\n\n\t\t\t\tif (arrayResult.length === 1) {\n\t\t\t\t\treturn `-${arrayResult.join(op)}`;\n\t\t\t\t}\n\n\t\t\t\treturn arrayResult.join(op);\n\t\t\t}\n\n\t\t\treturn `${name}(${arrayResult.join(\",\")})`;\n\t\t}\n\n\t\t// Not supported jsonlogic syntax\n\t\treturn JSON.stringify(value);\n\t}\n\n\tif (typeof value === \"boolean\") {\n\t\treturn String(value).toUpperCase();\n\t}\n\n\treturn JSON.stringify(value);\n}\n"],
"mappings": "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",
"names": ["ANY_REGEX_BREAK", "FN_SEP", "FN_NAME_VARIABLE", "FN_NAME_FUNCTION", "FN_NAME_OPERATOR", "parse", "ast", "joinKey", "a", "VariableTokenKey", "VariableToken", "variable", "leftSheet", "rightSheet", "FunctionTokenKey", "FunctionToken", "name", "args", "OperatorTokenKey", "OperatorToken", "operator", "left", "right", "tokneize", "value", "chunks", "i", "iLen", "lastWasText", "lastWasSpace", "arrayMode", "arrayDepth", "parseGroups", "breakOn", "group", "c", "last", "next", "len", "_lastWasText", "token", "v", "lastToken", "OPERATOR", "type", "FUNCTION", "VARIABLE", "formulaToJsonlogic", "OPERATOR_MAP", "jsonlogicToFormula", "value", "depth", "v", "keys", "name", "result", "arrayResult", "op", "chunk1", "chunk2"]
}