expressionish 0.1.0 → 0.1.1
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/expressionish.d.ts +540 -0
- package/dist/expressionish.mjs +1429 -0
- package/dist/expressionish.mjs.map +7 -0
- package/package.json +4 -4
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/misc/split.ts", "../src/parse/base-token.ts", "../src/parse/sequence-token.ts", "../src/parse/root/token.ts", "../src/parse/text/token.ts", "../src/errors.ts", "../src/parse/lookup/token.ts", "../src/parse/arguments/token.ts", "../src/parse/text/escape.ts", "../src/parse/text/quote.ts", "../src/parse/if/token.ts", "../src/parse/comparison/operators.ts", "../src/parse/comparison/token.ts", "../src/parse/variable/token.ts", "../src/parse/variable/tokenize.ts", "../src/parse/whitespace/tokenize.ts", "../src/parse/comparison/tokenize.ts", "../src/parse/logic/operators.ts", "../src/parse/logic/token.ts", "../src/parse/logic/tokenize.ts", "../src/parse/if/tokenize.ts", "../src/parse/arguments/argument.ts", "../src/parse/arguments/tokenize.ts", "../src/parse/lookup/tokenize.ts", "../src/parse/text/block.ts", "../src/parse/root/tokenize.ts", "../src/expressionish.ts"],
|
|
4
|
+
"sourcesContent": ["import { type GenericToken } from '../types';\n\n/*!\nThe MIT License (MIT) @ Copyright (c) 2016 Justin Sippel, Vitaly Domnikov\nhttps://github.com/bluelovers/runes/blob/8013b6e4021a41d6b579d76b3332c87389c5f092/LICENSE\n*/\nconst HIGH_SURROGATE_START = 0xd800;\nconst HIGH_SURROGATE_END = 0xdbff;\nconst LOW_SURROGATE_START = 0xdc00;\nconst REGIONAL_INDICATOR_START = 0x1f1e6;\nconst REGIONAL_INDICATOR_END = 0x1f1ff;\nconst FITZPATRICK_MODIFIER_START = 0x1f3fb;\nconst FITZPATRICK_MODIFIER_END = 0x1f3ff;\nconst VARIATION_MODIFIER_START = 0xfe00;\nconst VARIATION_MODIFIER_END = 0xfe0f;\nconst DIACRITICAL_MARKS_START = 0x20d0;\nconst DIACRITICAL_MARKS_END = 0x20ff;\nconst ZWJ = 0x200d;\nconst GRAPHEMS = new Set([\n 0x0308, // ( \u25CC\u0308 ) COMBINING DIAERESIS\n 0x0937, // ( \u0937 ) DEVANAGARI LETTER SSA\n 0x093F, // ( \u093F ) DEVANAGARI VOWEL SIGN I\n 0x0BA8, // ( \u0BA8 ) TAMIL LETTER NA\n 0x0BBF, // ( \u0BBF ) TAMIL VOWEL SIGN I\n 0x0BCD, // ( \u25CC\u0BCD) TAMIL SIGN VIRAMA\n 0x0E31, // ( \u25CC\u0E31 ) THAI CHARACTER MAI HAN-AKAT\n 0x0E33, // ( \u0E33 ) THAI CHARACTER SARA AM\n 0x0E40, // ( \u0E40 ) THAI CHARACTER SARA E\n 0x0E49, // ( \u0E40 ) THAI CHARACTER MAI THO\n 0x1100, // ( \u1100 ) HANGUL CHOSEONG KIYEOK\n 0x1161, // ( \u1161 ) HANGUL JUNGSEONG A\n 0x11A8 // ( \u11A8 ) HANGUL JONGSEONG KIYEOK\n]);\n\nconst betweenInclusive = (value: number, lower: number, upper: number) => {\n return (value >= lower && value <= upper);\n};\n\nconst codePointFromSurrogatePair = (pair: string) => {\n const highOffset = pair.charCodeAt(0) - HIGH_SURROGATE_START;\n const lowOffset = pair.charCodeAt(1) - LOW_SURROGATE_START;\n return (highOffset << 10) + lowOffset + 0x10000;\n};\n\n/** Splits the input into an array of unicode-aware characters\n * @returns {string[]} An array containing the delimited characters where each entry is a character\n*/\nexport const split = (\n /** Input text to split into characters */\n input: string\n) : string[] => {\n if (typeof input !== 'string') {\n throw new Error('string cannot be undefined or null')\n }\n const result : string[] = [];\n let idx = 0;\n let inc = 0;\n while (idx < input.length) {\n const idxInc = idx + inc;\n const current = input[idxInc];\n if (\n idxInc < (input.length - 1) &&\n current &&\n betweenInclusive(current.charCodeAt(0), HIGH_SURROGATE_START, HIGH_SURROGATE_END)\n ) {\n const currPair = codePointFromSurrogatePair(current + input[idxInc + 1]);\n const nextPair = codePointFromSurrogatePair(input.substring(idxInc + 2, idxInc + 5));\n if (\n betweenInclusive(currPair, REGIONAL_INDICATOR_START, REGIONAL_INDICATOR_END) &&\n betweenInclusive(nextPair, REGIONAL_INDICATOR_START, REGIONAL_INDICATOR_END)\n ) {\n inc += 4;\n } else if (betweenInclusive(nextPair, FITZPATRICK_MODIFIER_START, FITZPATRICK_MODIFIER_END)) {\n inc += 4;\n } else {\n inc += 2;\n }\n } else {\n inc += 1;\n }\n if (GRAPHEMS.has((input[idx + inc] + '').charCodeAt(0))) {\n inc += 1;\n }\n if (betweenInclusive((input[idx + inc] + '').charCodeAt(0), VARIATION_MODIFIER_START, VARIATION_MODIFIER_END)) {\n inc += 1;\n }\n if (betweenInclusive((input[idx + inc] + '').charCodeAt(0), DIACRITICAL_MARKS_START, DIACRITICAL_MARKS_END)) {\n inc += 1;\n }\n if ((input[idx + inc] + '').charCodeAt(0) === ZWJ) {\n inc += 1;\n continue;\n }\n result.push(input.substring(idx, idx + inc));\n idx += inc;\n inc = 0;\n }\n return result;\n};\n\n/** Converts the input into a list of Generic tokens for further processing\n * * Unicode multi-byte/character glyphs are treated as a singular entry\n * * Each whitespace character is treated as a singular entry\n * * `\\` is treated as a singular entry, the following character is also treated as a singular entry regardless of what it is\n * * \\`\\` is treated as a singular entry\n * * All other ascii punctionation is treated as a singular entry\n * * Non-unicode characters that are not whitespace or punctuation are grouped together and treated as a singular entry\n*/\nexport const tokenize = (input: string) : GenericToken[] => {\n\n if (typeof input !== 'string') {\n throw new Error('string cannot be undefined or null')\n }\n\n // eslint-disable-next-line no-control-regex\n const asciiPunct = /^[\\x01-\\x2F\\x3A-\\x40\\x5B-\\x60\\x7B-\\x7E]$/;\n\n const result : GenericToken[] = [];\n let idx = 0;\n let inc = 0;\n let tok = null;\n let escaped = false;\n while (idx < input.length) {\n const idxInc = idx + inc;\n const current = input[idxInc];\n\n // unicode multi-byte character\n if (\n idxInc < (input.length - 1) &&\n current &&\n betweenInclusive(current.charCodeAt(0), HIGH_SURROGATE_START, HIGH_SURROGATE_END)\n ) {\n const currPair = codePointFromSurrogatePair(current + input[idxInc + 1]);\n const nextPair = codePointFromSurrogatePair(input.substring(idxInc + 2, idxInc + 5));\n if (\n betweenInclusive(currPair, REGIONAL_INDICATOR_START, REGIONAL_INDICATOR_END) &&\n betweenInclusive(nextPair, REGIONAL_INDICATOR_START, REGIONAL_INDICATOR_END)\n ) {\n inc += 4;\n } else if (betweenInclusive(nextPair, FITZPATRICK_MODIFIER_START, FITZPATRICK_MODIFIER_END)) {\n inc += 4;\n } else {\n inc += 2;\n }\n } else {\n inc += 1;\n }\n\n if (GRAPHEMS.has((input[idx + inc] + '').charCodeAt(0))) {\n inc += 1;\n }\n if (betweenInclusive((input[idx + inc] + '').charCodeAt(0), VARIATION_MODIFIER_START, VARIATION_MODIFIER_END)) {\n inc += 1;\n }\n if (betweenInclusive((input[idx + inc] + '').charCodeAt(0), DIACRITICAL_MARKS_START, DIACRITICAL_MARKS_END)) {\n inc += 1;\n }\n if ((input[idx + inc] + '').charCodeAt(0) === ZWJ) {\n inc += 1;\n continue;\n }\n\n // Emoji/unicode character\n if (inc > 1) {\n if (tok != null) {\n result.push(tok);\n tok = null;\n }\n result.push({ position: idx, value: input.substring(idx, idx + inc) });\n escaped = false;\n\n // block-escape denoter\n } else if (input.substring(idx, idx + 2) === '``') {\n if (tok != null) {\n result.push(tok);\n tok = null;\n }\n if (escaped) {\n result.push({ position: idx, value: '`'});\n escaped = false;\n } else {\n result.push({ position: idx, value: '``'});\n inc += 1;\n }\n\n // singular character escape denoter\n } else if (input[idx] === '\\\\') {\n if (tok != null) {\n result.push(tok);\n tok = null;\n }\n result.push({ position: idx, value: '\\\\'});\n escaped = !escaped;\n\n // All ascii punctuation and whitespace assumed to be potentially significant\n } else if (asciiPunct.test(input[idx])) {\n if (tok != null) {\n result.push(tok);\n tok = null;\n }\n result.push({ position: idx, value: input[idx] });\n escaped = false;\n\n // Non-emoji, non-punctuation, no-whitespace characters\n } else if (escaped) {\n result.push({ position: idx, value: input[idx] });\n escaped = false;\n } else if (tok == null) {\n tok = { position: idx, value: input[idx] };\n } else {\n tok.value += input[idx];\n }\n\n idx += inc;\n inc = 0;\n }\n if (tok != null) {\n result.push(tok);\n }\n\n return result;\n};", "import { type EvaluateOptions } from '../types';\n\nexport interface BaseTokenOptions {\n position: number,\n type?: string,\n value?: unknown\n}\n\nexport interface BaseTokenJSON {\n position: number,\n type: string,\n value?: unknown\n}\n\nexport default class BaseToken {\n position: number;\n type: string;\n value?: unknown;\n\n constructor(options: BaseTokenOptions) {\n this.position = options.position;\n this.type = options.type || 'UNKNOWN';\n this.value = options.value;\n }\n\n toJSON() : BaseTokenJSON {\n return {\n position: this.position,\n type: this.type,\n value: this.value\n };\n }\n\n async evaluate(options: EvaluateOptions) : Promise<unknown> {\n if (options.onlyValidate) {\n return;\n }\n return this.value;\n }\n}", "import type { EvaluateOptions } from '../types';\nimport type { LookupTokenJSON, IfTokenJSON, VariableTokenJSON, TextTokenJSON, SequenceTokenJSON } from '../tojson-types';\n\nimport type { default as TextToken } from './text/token';\nimport type { default as LookupToken } from './lookup/token';\nimport type { default as IfToken } from './if/token';\nimport type { default as VariableToken } from './variable/token';\n\nimport BaseToken from './base-token';\n\nexport interface SequenceTokenOptions {\n position: number;\n value?: LookupToken | IfToken | VariableToken | TextToken | SequenceToken\n}\n\nexport default class SequenceToken extends BaseToken {\n value : Array<LookupToken | IfToken | VariableToken | TextToken | SequenceToken>;\n\n constructor(options: SequenceTokenOptions) {\n super({\n ...options,\n type: 'LIST'\n });\n this.value = [];\n }\n\n add(token: LookupToken | IfToken | VariableToken | TextToken | SequenceToken) {\n if (\n token.type !== 'TEXT' ||\n !this.value.length ||\n this.value[this.value.length - 1].type !== 'TEXT'\n ) {\n this.value.push(token);\n } else {\n this.value[this.value.length - 1].value += (token.value as string);\n }\n }\n\n get unwrap() : SequenceToken | TextToken | LookupToken | IfToken | VariableToken {\n if (this.value.length === 1) {\n return this.value[0];\n }\n return this;\n }\n\n toJSON() : SequenceTokenJSON | LookupTokenJSON | IfTokenJSON | VariableTokenJSON | TextTokenJSON {\n const unwrapped = this.unwrap;\n if (unwrapped !== this) {\n return unwrapped.toJSON();\n }\n\n return {\n position: this.position,\n type: this.type,\n value: this.value.map(token => token.toJSON())\n }\n }\n\n async evaluate(options: EvaluateOptions) : Promise<unknown> {\n if (this.value == null || this.value.length === 0) {\n return;\n }\n if (this.value.length === 1) {\n return this.value[0].evaluate(options || {});\n }\n\n return (await Promise.all(this.value.map(token => token.evaluate(options || {})))).reduce((prev: unknown, curr) => {\n if (prev == null) {\n return curr;\n }\n if (curr == null) {\n return prev;\n }\n //eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (prev as any) + (curr as any);\n })\n }\n\n}", "import type { RootTokenJSON } from '../../tojson-types';\nimport type { TokenizeOptions, PreEval, EvaluateData, LookupMap, VariableMap, LogicOperatorMap, ComparisonOperatorMap } from '../../types';\n\nimport SequenceToken from '../sequence-token';\n\nexport type RootTokenOptions = TokenizeOptions;\nexport interface RootEvaluateOptions {\n onlyValidate?: boolean;\n preeval?: PreEval;\n data?: EvaluateData;\n}\n\nexport default class RootToken extends SequenceToken {\n lookups: LookupMap;\n variables: VariableMap;\n expression: string;\n logicOperators: LogicOperatorMap;\n comparisonOperators: ComparisonOperatorMap;\n\n constructor(options: RootTokenOptions) {\n super({\n position: 0\n });\n this.type = 'ROOT'\n this.lookups = options.lookups;\n this.variables = options.variables;\n this.logicOperators = options.logicalOperators || new Map();\n this.comparisonOperators = options.comparisonOperators || new Map();\n this.expression = options.expression;\n }\n toJSON(): RootTokenJSON {\n return super.toJSON();\n }\n\n async evaluate(options: RootEvaluateOptions = {}): Promise<unknown> {\n return super.evaluate({\n ...options,\n lookups: this.lookups,\n variables: this.variables,\n logicalOperators: this.logicOperators,\n comparisonOperators: this.comparisonOperators,\n expression: this.expression\n });\n }\n}", "import BaseToken from '../base-token';\n\nimport type { TextTokenJSON } from '../../tojson-types';\n\nexport interface TextTokenOptions {\n position: number,\n value: string\n}\n\nexport default class TextToken extends BaseToken {\n value: string;\n\n constructor(options: TextTokenOptions) {\n super({\n ...options,\n type: 'TEXT'\n });\n this.value = options.value || '';\n }\n\n toJSON() : TextTokenJSON {\n return {\n position: this.position,\n type: this.type,\n value: this.value\n };\n }\n}", "/** Represents a generic error when attempting to parse an expression */\nexport class ExpressionError extends Error {\n /** When defined: where the error was encountered within the expression text */\n position?: number;\n\n constructor(\n /** Message to associate with the error */\n message: string,\n\n /** Where the error was encountered within the expression text */\n position?: number\n ) {\n super(message);\n Error.captureStackTrace(this, this.constructor);\n this.name = 'ExpressionError';\n this.message = message;\n this.position = position;\n }\n static get name() {\n return 'ExpressionError';\n }\n}\n\n/** Represents an error related to the arguments list or a singular argument to be passed to a variable */\nexport class ExpressionArgumentsError extends ExpressionError {\n\n /** The index of the argument in the arguments list */\n index?: number;\n\n /** The variable name the arguments list belongs to */\n varname?: string;\n\n constructor(\n /** Message to associate with the error */\n message: string,\n\n /** Where the error was encountered within the expression text */\n position?: number,\n\n /** The index of the argument in the arguments list */\n index?: number,\n\n /** The variable name the arguments list belongs to */\n varname?: string\n ) {\n super(message, position);\n Error.captureStackTrace(this, this.constructor);\n this.name = 'ExpressionArgumentsError';\n this.index = index || -1;\n this.varname = varname;\n }\n\n static get name() {\n return 'ExpressionArgumentsError';\n }\n}\n\n/** Represents an error related to parsing a variable */\nexport class ExpressionVariableError extends ExpressionError {\n\n /** The associated variable name */\n varname?: string;\n\n constructor(\n /** Message to associate with the error */\n message: string,\n\n /** Where the error was encountered within the expression text */\n position?: number,\n\n /** The variable name to associate with the error */\n varname?: string\n ) {\n super(message, position);\n Error.captureStackTrace(this, this.constructor);\n this.name = 'ExpressionVariableError';\n this.varname = varname;\n }\n\n static get name() {\n return 'ExpressionVariableError';\n }\n}\n\n/** Represents a syntax error within the given expression */\nexport class ExpressionSyntaxError extends ExpressionError {\n\n /** The character associated with the error */\n character?: string;\n\n constructor(\n\n /** Message to associate with the error */\n message: string,\n\n /** Where the error was encountered within the expression text */\n position?: number,\n\n /** The character associated with the error */\n character?: string\n ) {\n super(message, position);\n Error.captureStackTrace(this, this.constructor);\n this.name = 'ExpressionSyntaxError';\n this.character = character;\n }\n\n static get name() {\n return 'ExpressionSyntaxError';\n }\n}", "import type { EvaluateOptions } from '../../types';\nimport type { LookupTokenJSON } from '../../tojson-types';\n\nimport BaseToken from '../base-token';\nimport ArgumentsToken from '../arguments/token';\n\nimport { ExpressionVariableError } from '../../errors';\n\nexport interface LookupTokenOptions {\n position: number;\n prefix: string;\n value: string;\n arguments?: ArgumentsToken;\n}\n\nexport default class LookupToken extends BaseToken {\n prefix: string;\n value: string;\n arguments?: ArgumentsToken;\n\n constructor(options: LookupTokenOptions) {\n super({\n ...options,\n type: 'LOOKUP'\n });\n this.value = options.value;\n this.prefix = options.prefix;\n this.arguments = options.arguments;\n }\n\n toJSON() : LookupTokenJSON {\n return {\n position: this.position,\n type: this.type,\n prefix: this.prefix,\n value: this.value,\n arguments: this.arguments ? this.arguments.toJSON() : undefined\n }\n }\n\n async evaluate(options: EvaluateOptions): Promise<unknown> {\n if (!options.lookups) {\n throw new ExpressionVariableError(`lookup map invalid`, this.position, this.value);\n }\n\n const lookup = options.lookups.get(this.prefix);\n if (lookup == null) {\n throw new ExpressionVariableError(`unknown lookup prefix`, this.position, this.prefix);\n }\n\n const variable = await lookup(options.data || {}, this.value);\n\n if (variable == null) {\n return;\n }\n\n if (options.preeval) {\n await options.preeval(options.data || {}, variable);\n }\n if (variable.preeval) {\n await variable.preeval(options.data || {}, variable);\n }\n\n let args : unknown[] = [];\n if (this.arguments) {\n args = await this.arguments.evaluate(options);\n }\n\n if (options.onlyValidate) {\n return;\n }\n\n if (variable.argsCheck) {\n // Should throw an ExpressionArgumentsError if argsCheck fails\n await variable.argsCheck(options.data || {}, ...args);\n }\n\n return variable.evaluate(options.data || {}, ...args);\n }\n}", "import type { EvaluateOptions } from '../../types';\nimport type { ArgumentsTokenJSON } from '../../tojson-types';\nimport type ComparisonToken from '../comparison/token';\nimport type IfToken from '../if/token';\nimport type LogicToken from '../logic/token';\nimport type LookupToken from '../lookup/token';\nimport type TextToken from '../text/token';\nimport type VariableToken from '../variable/token';\n\nimport BaseToken from '../base-token';\nimport SequenceToken from '../sequence-token';\n\nexport interface ArgumentsTokenOptions {\n position: number;\n value?: Array<LookupToken | IfToken | VariableToken | TextToken | SequenceToken | LogicToken | ComparisonToken>\n}\n\nexport default class ArgumentsToken extends BaseToken {\n value : Array<LookupToken | IfToken | VariableToken | TextToken | SequenceToken | LogicToken | ComparisonToken>;\n\n constructor(options: ArgumentsTokenOptions) {\n super({\n ...options,\n type: 'ARGUMENTS_LIST'\n });\n this.value = options.value || [];\n }\n\n toJSON() : ArgumentsTokenJSON {\n return {\n position: this.position,\n type: this.type,\n value: this.value.map(item => item.toJSON())\n }\n }\n\n async evaluate(options: EvaluateOptions): Promise<unknown[]> {\n return Promise.all(this.value.map(item => item.evaluate(options)));\n }\n}", "import type { GenericToken, TokenizeResult } from '../../types';\n\nexport default (tokens: GenericToken[], cursor: number, escapeChars?: string) : TokenizeResult<GenericToken> => {\n const count = tokens.length;\n\n if ((cursor + 1) >= count || tokens[cursor].value != '\\\\') {\n return [false];\n }\n\n if (escapeChars == null) {\n escapeChars = '\"$[,]\\\\rnt`'\n }\n\n // block-escape indicator escaped\n if (\n escapeChars.includes('`') &&\n tokens[cursor + 1].value === '`' &&\n tokens[cursor + 2].value === '`'\n ) {\n return [ true, cursor + 3, { position: cursor, value: '``' } ];\n }\n\n // Escape Denoter followed by non-escape char\n // Treat the Escape Denoter as the escaped char (e.g. '\\' -> '\\\\')\n if (!escapeChars.includes(tokens[cursor + 1].value)) {\n return [true, cursor + 1, { position: cursor, value: '\\\\' }];\n }\n\n cursor += 1;\n const token = { ...tokens[cursor] };\n\n switch (token.value) {\n case 'n':\n token.value = '\\n';\n break;\n\n case 'r':\n token.value = '\\r';\n break;\n\n case 't':\n token.value = '\\t';\n break;\n }\n\n return [true, cursor + 1, token];\n};", "import type { GenericToken, TokenizeResult } from '../../types';\n\nimport tokenizeEscape from './escape';\nimport TextToken from './token';\n\nimport { ExpressionSyntaxError } from '../../errors';\n\nexport default (tokens: GenericToken[], cursor: number) : TokenizeResult<TextToken> => {\n const count = tokens.length;\n\n if (\n cursor >= count ||\n tokens[cursor] == null ||\n tokens[cursor].value !== '\"'\n ) {\n return [false];\n }\n\n const start = cursor;\n cursor += 1;\n\n let text : string = '';\n while (cursor < count) {\n if (tokens[cursor].value === '\"') {\n return [\n true,\n cursor + 1,\n new TextToken({\n position: start,\n value: text\n })\n ]\n }\n\n const [tokenized, tokenizeCursor, tokenizeResult] = tokenizeEscape(tokens, cursor, '\\\\\"nrt');\n if (tokenized) {\n cursor = tokenizeCursor;\n text += tokenizeResult.value;\n continue;\n }\n\n text += tokens[cursor].value;\n cursor += 1;\n }\n\n throw new ExpressionSyntaxError('End quote missing', tokens[start].position);\n}", "import type { EvaluateOptions } from '../../types';\nimport type { IfTokenJSON } from '../../tojson-types';\nimport type ComparisonToken from '../comparison/token';\nimport type LogicToken from '../logic/token';\nimport type LookupToken from '../lookup/token';\nimport type VariableToken from '../variable/token';\nimport type SequenceToken from '../sequence-token';\nimport type TextToken from '../text/token';\ntype ConditionToken = ComparisonToken | LogicToken;\ntype OperandToken = LookupToken | IfToken | VariableToken | TextToken | SequenceToken;\n\nimport BaseToken from '../base-token';\n\nexport interface IfTokenOptions {\n position: number;\n value: ConditionToken;\n whenTrue: OperandToken;\n whenFalse?: OperandToken;\n}\n\nexport default class IfToken extends BaseToken {\n value: ConditionToken;\n whenTrue: OperandToken\n whenFalse?: OperandToken;\n\n constructor(options: IfTokenOptions) {\n super({\n position: options.position,\n type: 'IF'\n });\n this.value = options.value;\n this.whenTrue = options.whenTrue;\n this.whenFalse = options.whenFalse;\n }\n\n toJSON() : IfTokenJSON {\n return {\n position: this.position,\n type: this.type,\n value: this.value.toJSON(),\n whenTrue: this.whenTrue.toJSON(),\n whenFalse: this.whenFalse ? this.whenFalse.toJSON() : undefined\n };\n }\n\n async evaluate(options: EvaluateOptions): Promise<unknown> {\n const result = await this.value.evaluate(options);\n if (options.onlyValidate) {\n await this.whenTrue.evaluate(options);\n if (this.whenFalse) {\n await this.whenFalse.evaluate(options);\n }\n } else if (result) {\n return this.whenTrue.evaluate(options);\n }\n if (this.whenFalse) {\n return this.whenFalse.evaluate(options);\n }\n }\n}", "import type { ComparisonOperatorDefinition, EvaluateData } from '../../types';\n\n/** Attempts to convert the two inputs into numeric values */\nconst toNumber = (data: EvaluateData, v1: unknown, v2: unknown) : [unknown, unknown]|[number, number]=> {\n if (v1 === '' || v2 === '') {\n return [v1, v2];\n }\n\n const v1Num = Number(v1);\n if (!Number.isFinite(v1Num)) {\n return [v1, v2];\n }\n\n const v2Num = Number(v2);\n if (!Number.isFinite(v2Num)) {\n return [v1, v2];\n }\n return [v1Num, v2Num];\n}\n\n/** Tests if inputs are strictly equal */\nconst isStrictEqual = (data: EvaluateData, v1: unknown, v2: unknown) => {\n [v1, v2] = toNumber(data, v1, v2);\n return v1 === v2;\n};\n\n/** Tests if input is not a nullish value */\nconst isTruthy = (data: EvaluateData, v1: unknown) => {\n return v1 != null &&\n v1 !== false &&\n v1 !== 0 &&\n v1 !== '';\n};\n\n/** Comparison Operator Map */\nexport default (new Map<string, ComparisonOperatorDefinition>([\n\n ['istruthy', {\n maxArgumentsCount: 1,\n evaluate: isTruthy\n }],\n ['!istruthy', {\n maxArgumentsCount: 1,\n evaluate: (data: EvaluateData, v1: unknown) => !isTruthy(data, v1)\n }],\n\n ['===', {\n minArgumentsCount: 2,\n evaluate: isStrictEqual\n }],\n ['!==', {\n minArgumentsCount: 2,\n evaluate: (data: EvaluateData, v1: unknown, v2: unknown) => !isStrictEqual(data, v1, v2)\n }],\n\n ['<', {\n minArgumentsCount: 2,\n evaluate: (data: EvaluateData, v1: unknown, v2: unknown) => {\n [v1, v2] = toNumber(data, v1, v2);\n if (typeof v1 !== 'number' || typeof v2 !== 'number') {\n return false;\n }\n return v1 < v2;\n }\n }],\n ['<=', {\n minArgumentsCount: 2,\n evaluate: (data: EvaluateData, v1: unknown, v2: unknown) => {\n [v1, v2] = toNumber(data, v1, v2);\n if (typeof v1 !== 'number' || typeof v2 !== 'number') {\n return false;\n }\n return v1 <= v2;\n }\n }],\n\n ['>', {\n minArgumentsCount: 2,\n evaluate: (data: EvaluateData, v1: unknown, v2: unknown) => {\n [v1, v2] = toNumber(data, v1, v2);\n if (typeof v1 !== 'number' || typeof v2 !== 'number') {\n return false;\n }\n return v1 > v2;\n }\n }],\n ['>=', {\n minArgumentsCount: 2,\n evaluate: (data: EvaluateData, v1: unknown, v2: unknown) => {\n [v1, v2] = toNumber(data, v1, v2);\n if (typeof v1 !== 'number' || typeof v2 !== 'number') {\n return false;\n }\n return v1 >= v2;\n }\n }]\n]));", "import type { EvaluateOptions } from '../../types';\nimport type { ComparisonTokenJSON } from '../../tojson-types';\nimport type { default as TextToken } from '../text/token';\nimport type { default as LookupToken } from '../lookup/token';\nimport type { default as IfToken } from '../if/token';\nimport type { default as VariableToken } from '../variable/token';\nimport type { default as SequenceToken } from '../sequence-token';\ntype operand = LookupToken | IfToken | VariableToken | TextToken | SequenceToken;\n\nimport BaseToken from '../base-token';\n\nimport operators from './operators';\n\nexport interface ComparisonTokenOptions {\n position: number;\n value: string;\n left: operand;\n right?: operand;\n}\n\nexport default class ComparisonToken extends BaseToken {\n value: string;\n left: operand;\n right?: operand;\n\n constructor(options: ComparisonTokenOptions) {\n super({\n ...options,\n type: 'COMPARISON'\n });\n this.value = options.value;\n this.left = options.left;\n this.right = options.right;\n }\n\n toJSON() : ComparisonTokenJSON {\n return {\n position: this.position,\n type: this.type,\n value: this.value,\n left: this.left.toJSON(),\n right: this.right ? this.right.toJSON() : undefined\n };\n }\n\n async evaluate(options: EvaluateOptions): Promise<unknown> {\n if (!this.value || this.value === '') {\n this.value = 'istruthy';\n }\n\n const operator = operators.get(this.value);\n if (operator == null) {\n return false;\n }\n\n const left = await this.left.evaluate(options);\n\n let right : undefined | unknown;\n if (this.right) {\n right = await this.right.evaluate(options);\n }\n\n if (options.onlyValidate) {\n return;\n }\n return operator.evaluate(options.data || {}, left, right);\n }\n}", "import type { EvaluateOptions, Variable } from '../../types';\nimport type { VariableTokenJSON } from '../../tojson-types'\n\nimport type ArgumentsToken from '../arguments/token';\nimport BaseToken from '../base-token';\n\nexport interface VariableTokenOptions {\n position: number;\n value: string;\n arguments?: ArgumentsToken\n}\n\nexport default class VariableToken extends BaseToken {\n value: string;\n arguments?: ArgumentsToken;\n\n constructor(options: VariableTokenOptions) {\n super({\n ...options,\n type: 'VARIABLE'\n });\n this.value = options.value || '';\n this.arguments = options.arguments;\n }\n\n toJSON() : VariableTokenJSON {\n return {\n position: this.position,\n type: this.type,\n value: this.value,\n arguments: this.arguments ? this.arguments.toJSON() : undefined\n }\n }\n\n async evaluate(options: EvaluateOptions): Promise<unknown> {\n if (!options.variables || !options.variables.has(this.value)) {\n throw new Error('unknown variable');\n }\n\n const variable = options.variables.get(this.value) as Variable;\n\n if (options.preeval) {\n await options.preeval(options.data || {}, variable);\n }\n\n if (variable.preeval) {\n await variable.preeval(options.data || {}, variable);\n }\n\n let args : unknown[] = [];\n if (this.arguments) {\n args = await this.arguments.evaluate(options);\n }\n\n if (variable.argsCheck) {\n await variable.argsCheck(options.data || {}, ...args);\n }\n\n if (options.onlyValidate) {\n return;\n }\n\n return variable.evaluate(options.data || {}, ...args);\n }\n}", "import type { GenericToken, TokenizeOptions, TokenizeResult } from '../../types';\n\nimport VariableToken from './token';\n\nimport tokenizeArguments from '../arguments/tokenize';\n\nimport { ExpressionVariableError } from '../../errors';\n\nexport default (tokens: GenericToken[], cursor: number, options: TokenizeOptions) : TokenizeResult<VariableToken> => {\n\n const count = tokens.length;\n if (cursor + 1 >= count || tokens[cursor].value !== '$') {\n return [false];\n }\n\n const start = cursor;\n cursor += 1;\n\n // parse name\n const name = tokens[cursor].value;\n if (!/^[a-z][a-z\\d]*/i.test(name)) {\n return [false];\n }\n if (!options.variables.has(name)) {\n throw new ExpressionVariableError('unknown variable', tokens[cursor].position, name);\n }\n cursor += 1;\n\n // parse arguments\n const [tokenized, tCursor, tResult] = tokenizeArguments(tokens, cursor, options);\n if (tokenized) {\n cursor = tCursor as number;\n }\n\n return [\n true,\n cursor,\n new VariableToken({\n position: start,\n value: name,\n arguments: tResult\n })\n ];\n\n}", "import type { GenericToken, TokenizeResult } from '../../types';\n\n/** Consumes sequential whitespace from `tokens` beginning at `cursor` */\nexport default ((tokens: GenericToken[], cursor: number) : TokenizeResult<string> => {\n const count = tokens.length;\n if (cursor >= count) {\n return [false];\n }\n\n let ws = '';\n let index = cursor;\n while (index < count && (\n tokens[index].value === ' ' ||\n tokens[index].value === '\\n' ||\n tokens[index].value === '\\r' ||\n tokens[index].value === '\\t' ||\n tokens[index].value === '\\b' ||\n tokens[index].value === '\\f'\n )) {\n ws += tokens[index].value;\n index += 1;\n }\n\n if (cursor === index) {\n return [false];\n }\n return [true, index, ws];\n});", "import type { ComparisonOperatorMap, GenericToken, TokenizeOptions, TokenizeResult } from '../../types';\nimport type IfToken from '../if/token';\nimport type LookupToken from '../lookup/token';\nimport type VariableToken from '../variable/token';\n\n\nimport ComparisonToken from './token';\nimport SequenceToken from '../sequence-token';\nimport TextToken from '../text/token';\n\nimport tokenizeEscape from '../text/escape';\nimport tokenizeIf from '../if/tokenize';\nimport tokenizeLookup from '../lookup/tokenize';\nimport tokenizeQuote from '../text/quote';\nimport tokenizeVariable from '../variable/tokenize';\nimport tokenizeWhitespace from '../whitespace/tokenize';\n\nimport operators from './operators';\nimport { ExpressionArgumentsError, ExpressionSyntaxError } from '../../errors';\n\n\ninterface TokenizeOperatorOptions extends TokenizeOptions {\n operators: ComparisonOperatorMap\n}\n\nconst tokenizeOperator = (tokens: GenericToken[], cursor: number, options: TokenizeOperatorOptions) : [success: false ] | [success: true, cursor: number, result: string ]=> {\n const count = tokens.length;\n if (\n cursor >= count ||\n tokens[cursor].value === ',' ||\n tokens[cursor].value === ']' ||\n /^\\s/.test(tokens[cursor].value)\n ) {\n return [false];\n }\n\n let operator : string = '';\n if (tokens[cursor].value === '!') {\n operator = '!';\n cursor += 1;\n if (\n cursor >= count ||\n tokens[cursor].value === ',' ||\n tokens[cursor].value === ']' ||\n /^\\s/.test(tokens[cursor].value)\n ) {\n return [false];\n }\n }\n\n // text operator, such as 'isnumber'\n if (/^[a-z]+$/i.test(tokens[cursor].value)) {\n operator += tokens[cursor].value.toLowerCase();\n cursor += 1;\n\n // punctuation operator, such as ==\n } else {\n let operatorAccumulator = operator;\n let tmpCursor = cursor;\n while (tmpCursor < count) {\n if (!/^[\\x21-\\x2F\\x3A-\\x40\\x5E-\\x60]$/.test(tokens[tmpCursor].value)) {\n break;\n }\n\n operatorAccumulator += tokens[tmpCursor].value;\n tmpCursor += 1;\n\n if (options.operators.has(operatorAccumulator)) {\n operator = operatorAccumulator;\n cursor = tmpCursor;\n }\n }\n }\n\n\n if (\n cursor >= count ||\n !options.operators.has(operator) ||\n (\n tokens[cursor].value !== ',' &&\n tokens[cursor].value !== ']' &&\n !/^\\s+$/.test(tokens[cursor].value)\n )\n ) {\n return [false];\n }\n\n\n const [wsRem, wsCursor] = tokenizeWhitespace(tokens, cursor);\n if (wsRem) {\n cursor = wsCursor as number;\n }\n return [true, cursor, operator];\n}\n\nexport default (tokens: GenericToken[], cursor: number, options: TokenizeOptions) : TokenizeResult<ComparisonToken> => {\n const count = tokens.length;\n\n // nothing to parse\n if (\n cursor >= count ||\n tokens[cursor].value === ',' ||\n tokens[cursor].value === ']'\n ) {\n return [false];\n }\n\n const mergedOperators : ComparisonOperatorMap = new Map(operators);\n if (options.comparisonOperators) {\n options.comparisonOperators.forEach((operator, key) => {\n mergedOperators.set(key, operator);\n });\n }\n\n\n const start = tokens[cursor].position;\n\n const consumeWS = () => {\n const [wsRem, wsCursor, wsResult] = tokenizeWhitespace(tokens, cursor);\n if (wsRem) {\n cursor = wsCursor as number;\n return wsResult as string;\n }\n return ''\n }\n // consumeWS(); - leading whitespace should have been consumed by caller\n\n\n const left = new SequenceToken({ position: start });\n let operator : undefined | string;\n let right : SequenceToken | undefined;\n while (cursor < count) {\n const position = cursor;\n const ws = consumeWS();\n\n // end of conditional sequence\n if (\n cursor >= count\n || tokens[cursor].value === ','\n || tokens[cursor].value === ']'\n ) {\n break;\n }\n\n if (left.value.length > 0 && operator == null && ws !== '') {\n const [opTokenized, opCursor, opResult] = tokenizeOperator(tokens, cursor, { ...options, operators: mergedOperators });\n if (opTokenized) {\n if (left.value.length === 0) {\n throw new ExpressionSyntaxError('left operand not specified', start);\n }\n\n cursor = opCursor as number;\n operator = opResult as string;\n right = new SequenceToken({ position: cursor });\n continue;\n }\n }\n\n const parts = right ? right : left;\n\n if (ws !== '') {\n parts.add(new TextToken({ position, value: ws }));\n }\n\n // Single-char escape\n const [eTokenized, eCursor, eResult] = tokenizeEscape(tokens, cursor, '\"$,\\\\`]');\n if (eTokenized) {\n parts.add(new TextToken({ position, value: (eResult as GenericToken).value}));\n cursor = eCursor as number;\n }\n\n // Quoted text\n let [tokenized, tCursor, tResult] : [ tokenized: boolean, cursor?: number, result?: LookupToken | IfToken | VariableToken | TextToken ] = tokenizeQuote(tokens, cursor);\n if (tokenized) {\n parts.add(tResult as TextToken);\n cursor = tCursor as number;\n continue;\n }\n\n // Lookup\n [tokenized, tCursor, tResult] = tokenizeLookup(tokens, cursor, options);\n if (tokenized) {\n parts.add(tResult as LookupToken);\n cursor = tCursor as number;\n continue;\n }\n\n // $if\n [tokenized, tCursor, tResult] = tokenizeIf(tokens, cursor, options);\n if (tokenized) {\n parts.add(tResult as IfToken);\n cursor = tCursor as number;\n continue;\n }\n\n // Variable\n [tokenized, tCursor, tResult] = tokenizeVariable(tokens, cursor, options);\n if (tokenized) {\n parts.add(tResult as VariableToken);\n cursor = tCursor as number;\n continue;\n }\n\n // All other situations treat the generic token as plain text\n parts.add(new TextToken(tokens[cursor]));\n cursor += 1;\n\n }\n\n if (!left.value.length) {\n return [false];\n }\n operator = operator || 'istruthy';\n\n if (\n operators.get(operator)?.maxArgumentsCount === 1\n && right != null\n && (\n !(right instanceof SequenceToken) ||\n right.value.length !== 0\n )\n ) {\n throw new ExpressionArgumentsError(`comparison operator ${operator} must not have a right-hand-side value`);\n }\n if (\n operators.get(operator)?.minArgumentsCount === 2\n && (\n right == null ||\n (right instanceof SequenceToken && right.value.length === 0)\n )\n ) {\n throw new ExpressionArgumentsError(`comparison operator ${operator} requires a right-hand-side value`);\n }\n return [\n true,\n cursor,\n new ComparisonToken({\n position: start,\n value: operator,\n left: left.unwrap,\n right: right ? right.unwrap : undefined\n })\n ]\n}", "import type { EvaluateData, LogicOperatorDefinition } from '../../types';\n\nconst not = (data: EvaluateData, arg: unknown) => (arg == null || arg === false || arg === 0 || arg === '');\n\nexport default (new Map<string, LogicOperatorDefinition>([\n ['not', {\n minArgumentsCount: 1,\n maxArgumentsCount: 1,\n evaluate: not\n }],\n ['and', {\n minArgumentsCount: 1,\n evaluate: (data: EvaluateData, ...args: unknown[]) => {\n if (args == null || !args.length) {\n return false;\n }\n return !args.some(item => not(data, item));\n }\n }],\n ['or', {\n minArgumentsCount: 1,\n evaluate: (data: EvaluateData, ...args: unknown[]) => {\n if (args == null || !args.length) {\n return false;\n }\n return args.some(item => !not(data, item));\n }\n }],\n]));", "import type { EvaluateOptions, LogicOperatorDefinition } from '../../types';\nimport type { LogicTokenJSON } from '../../tojson-types';\nimport type ArgumentsToken from '../arguments/token';\n\nimport BaseToken from '../base-token';\n\nimport operators from './operators';\n\nexport interface LogicTokenOptions {\n position: number;\n value: string;\n arguments: ArgumentsToken;\n}\n\nexport default class LogicToken extends BaseToken {\n value: string;\n arguments: ArgumentsToken;\n\n constructor(options: LogicTokenOptions) {\n super({\n ...options,\n type: 'LOGIC'\n });\n this.value = options.value;\n this.arguments = options.arguments;\n }\n\n toJSON() : LogicTokenJSON {\n return {\n position: this.position,\n type: this.type,\n value: this.value,\n arguments: this.arguments.toJSON()\n };\n }\n\n async evaluate(options: EvaluateOptions): Promise<unknown> {\n let operator : LogicOperatorDefinition;\n if (options.logicalOperators?.has(this.value)) {\n operator = options.logicalOperators.get(this.value) as LogicOperatorDefinition;\n } else if (operators.has(this.value)) {\n operator = operators.get(this.value) as LogicOperatorDefinition;\n } else {\n return false;\n }\n\n const args = await this.arguments.evaluate(options);\n if (operator.argsCheck) {\n operator.argsCheck(options.data || {}, ...args);\n }\n\n if (options.onlyValidate) {\n return;\n }\n\n return operator.evaluate(options.data || {}, ...args);\n }\n}", "import type { GenericToken, LogicOperatorDefinition, TokenizeOptions, TokenizeResult } from '../../types';\nimport type ComparisonToken from '../comparison/token';\nimport type IfToken from '../if/token';\nimport type LookupToken from '../lookup/token';\nimport type SequenceToken from '../sequence-token';\nimport type TextToken from '../text/token';\nimport type VariableToken from '../variable/token';\n\nimport ArgumentsToken from '../arguments/token';\nimport LogicToken from './token'\n\nimport tokenizeWhitespace from '../whitespace/tokenize';\nimport tokenizeComparison from '../comparison/tokenize';\n\nimport operators from './operators';\nimport { ExpressionArgumentsError, ExpressionSyntaxError } from '../../errors';\n\nconst tokenizeLogicOperator = (tokens: GenericToken[], cursor: number, options: TokenizeOptions) : TokenizeResult<LogicToken> => {\n const count = tokens.length;\n\n\n if (cursor + 1 >= count || tokens[cursor].value !== '$') {\n return [false];\n }\n const start = tokens[cursor].position;\n cursor += 1;\n\n const mergedOperators = new Map(operators);\n if (options.logicalOperators) {\n options.logicalOperators.forEach((operator, key) => {\n mergedOperators.set(key, operator);\n });\n }\n let operator : string;\n if (mergedOperators.has(tokens[cursor].value)) {\n operator = tokens[cursor].value;\n cursor += 1;\n if (cursor >= count) {\n return [false];\n }\n } else {\n return [false];\n }\n\n\n\n if (tokens[cursor].value !== '[') {\n throw new ExpressionSyntaxError('Logic Operators require atleast one argument', tokens[cursor].position);\n }\n const argsStart = tokens[cursor].position;\n cursor += 1;\n\n const consumeWS = (notEnd?: boolean) : undefined | string => {\n const [tokenized, tCursor, ws] = tokenizeWhitespace(tokens, cursor);\n if (tokenized) {\n cursor = tCursor as number;\n }\n if (notEnd && cursor >= count) {\n throw new ExpressionSyntaxError('unexpected end of expression');\n }\n return ws;\n }\n consumeWS(true);\n\n const args : Array<LookupToken | IfToken | VariableToken | TextToken | SequenceToken> = [];\n while (cursor < count) {\n\n consumeWS();\n\n if (cursor >= count) {\n break;\n }\n\n let [tokenize, tCursor, tResult] : [tokenize: boolean, tCursor?: number, tResult?: LogicToken | ComparisonToken] = tokenizeLogicOperator(tokens, cursor, options);\n if (!tokenize) {\n [tokenize, tCursor, tResult] = tokenizeComparison(tokens, cursor, options);\n }\n if (!tokenize) {\n throw new ExpressionArgumentsError('conditional expected', tokens[cursor].position, args.length);\n }\n args.push(tResult as (LogicToken | ComparisonToken));\n cursor = tCursor as number;\n\n if (tokens[cursor].value === ',') {\n cursor += 1;\n continue;\n }\n\n if (tokens[cursor].value === ']') {\n const opDef = operators.get(operator) as LogicOperatorDefinition;\n if (opDef.minArgumentsCount != null && args.length < opDef.minArgumentsCount) {\n throw new ExpressionArgumentsError(`$${operator} expects atleast ${opDef.minArgumentsCount} argument(s)`);\n }\n if (opDef.maxArgumentsCount != null && args.length > opDef.maxArgumentsCount) {\n throw new ExpressionArgumentsError(`$${operator} expects at most ${opDef.maxArgumentsCount} argument(s)`);\n }\n return [\n true,\n cursor + 1,\n new LogicToken({\n position: start,\n value: operator,\n arguments: new ArgumentsToken({\n position: argsStart,\n value: args\n })\n })\n ];\n }\n\n throw new ExpressionSyntaxError('unexpected token', tokens[cursor].position);\n }\n\n throw new ExpressionSyntaxError('unexpected end of expression', count);\n}\nexport default tokenizeLogicOperator;", "import type { GenericToken, TokenizeOptions, TokenizeResult } from '../../types';\nimport type ComparisonToken from '../comparison/token';\nimport type LogicToken from '../logic/token';\nimport type LookupToken from '../lookup/token';\nimport type SequenceToken from '../sequence-token';\nimport type TextToken from '../text/token';\nimport type VariableToken from '../variable/token';\ntype ConditionToken = ComparisonToken | LogicToken;\n\nimport IfToken from './token';\n\nimport tokenizeArgument from '../arguments/argument';\nimport tokenizeComparison from '../comparison/tokenize';\nimport tokenizeLogicOperator from '../logic/tokenize';\nimport tokenizeWhitespace from '../whitespace/tokenize';\n\nimport { ExpressionArgumentsError, ExpressionSyntaxError } from '../../errors';\n\nexport default (tokens: GenericToken[], cursor: number, options: TokenizeOptions) : TokenizeResult<IfToken> => {\n const count = tokens.length;\n\n if (\n cursor + 1 >= count ||\n tokens[cursor].value !== '$' ||\n tokens[cursor + 1].value !== 'if'\n ) {\n return [false];\n }\n\n const start = tokens[cursor].position;\n cursor += 2;\n\n if (cursor >= count) {\n throw new ExpressionArgumentsError('$if requires atleast 2 arguments', start, 0, 'if');\n }\n\n if (tokens[cursor].value !== '[') {\n throw new ExpressionArgumentsError('$if requires atleast 2 arguments', tokens[cursor].position, 0, 'if');\n }\n cursor += 1;\n\n\n const consumeWS = (notEnd?: boolean) : undefined | string => {\n const [tokenized, tCursor, ws] = tokenizeWhitespace(tokens, cursor);\n if (tokenized) {\n cursor = tCursor as number;\n }\n if (notEnd && cursor >= count) {\n throw new ExpressionSyntaxError('unexpected end of expression');\n }\n return ws;\n }\n consumeWS(true);\n\n // condition\n let [tokenize, tCursor, tResult] : [tokenize: boolean, tCursor?: number, tResult?: ConditionToken ] = tokenizeLogicOperator(tokens, cursor, options);\n if (!tokenize) {\n [tokenize, tCursor, tResult] = tokenizeComparison(tokens, cursor, options);\n if (!tokenize) {\n throw new ExpressionArgumentsError('$if requires the first argument to be a conditional', tokens[cursor].position, 0, 'if');\n }\n }\n const condition = tResult as ConditionToken;\n cursor = tCursor as number;\n\n // , expected after condition\n if (cursor >= count) {\n throw new ExpressionSyntaxError('unexpected end of expression');\n }\n if (tokens[cursor].value === ']') {\n throw new ExpressionArgumentsError('$if requires atleast 2 arguments', tokens[cursor].position, 2, 'if');\n }\n if (tokens[cursor].value !== ',') {\n throw new ExpressionSyntaxError('expected end of conditional', tokens[cursor].position);\n }\n cursor += 1;\n consumeWS(true);\n\n // whenTrue\n if (cursor >= count) {\n throw new ExpressionSyntaxError('unexpected end of expression');\n }\n const [wtTokenize, wtCursor, whenTrue] = tokenizeArgument(tokens, cursor, options);\n if (!wtTokenize) {\n throw new ExpressionArgumentsError('$if must have atleast a condition and 1 parameter', tokens[cursor].position, 1, 'if');\n\n } else {\n cursor = wtCursor as number;\n if (cursor >= count) {\n throw new ExpressionSyntaxError('unexpected end of expression');\n }\n }\n\n // when false\n let wfTokenize : boolean,\n wfCursor: undefined | number,\n whenFalse: undefined | LookupToken | IfToken | VariableToken | TextToken | SequenceToken;\n if (tokens[cursor].value === ',') {\n\n // consume , and trailing whitespace\n cursor += 1;\n consumeWS(true);\n\n if (tokens[cursor].value !== ']') {\n [wfTokenize, wfCursor, whenFalse] = tokenizeArgument(tokens, cursor, options);\n if (!wfTokenize) {\n throw new ExpressionSyntaxError('expected 3rd parameter');\n }\n cursor = wfCursor as number;\n if (cursor >= count) {\n throw new ExpressionSyntaxError('unexpected end of expression');\n }\n }\n }\n\n // end of arguments\n if (tokens[cursor].value !== ']') {\n throw new ExpressionSyntaxError('expected end of arguments list', tokens[cursor].position);\n }\n return [\n true,\n cursor + 1,\n new IfToken({\n position: start,\n value: condition,\n whenTrue,\n whenFalse\n })\n ];\n}", "import type { GenericToken, TokenizeOptions, TokenizeResult } from '../../types';\n\nimport IfToken from '../if/token';\nimport LookupToken from '../lookup/token';\nimport SequenceToken from '../sequence-token';\nimport TextToken from '../text/token';\nimport VariableToken from '../variable/token';\n\nimport tokenizeQuote from '../text/quote';\nimport tokenizeEscape from '../text/escape';\nimport tokenizeBlockEscape from '../text/block';\nimport tokenizeLookup from '../lookup/tokenize';\nimport tokenizeIf from '../if/tokenize';\nimport tokenizeVariable from '../variable/tokenize';\nimport tokenizeWhitespace from '../whitespace/tokenize';\n\nimport { ExpressionSyntaxError } from '../../errors';\n\nexport default (tokens: GenericToken[], cursor: number, options: TokenizeOptions) : TokenizeResult<LookupToken | IfToken | VariableToken | TextToken | SequenceToken> => {\n const count = tokens.length;\n\n if (cursor >= count) {\n return [false];\n }\n\n const start = tokens[cursor].position;\n\n const consumeWS = (notEnd?: boolean) : string => {\n const [tokenized, tCursor, ws] = tokenizeWhitespace(tokens, cursor);\n if (tokenized) {\n cursor = tCursor as number;\n }\n if (notEnd && cursor >= count) {\n throw new ExpressionSyntaxError('unexpected end of expression');\n }\n return ws || '';\n }\n consumeWS();\n if (cursor >= count) {\n return [false];\n }\n\n const parts = new SequenceToken({ position: start });\n while (cursor < count) {\n const position = tokens[cursor].position;\n const whitespace = consumeWS();\n if (cursor >= count) {\n break;\n }\n\n // End of argument\n if (\n tokens[cursor].value === ']' ||\n tokens[cursor].value === ','\n ) {\n return [true, cursor, parts.unwrap];\n }\n\n // Whitespace is between 'parts' so must be kept\n if (whitespace !== '') {\n parts.add(new TextToken({ position, value: whitespace}));\n }\n\n // Single-char escape\n const [eTokenized, eCursor, eResult] = tokenizeEscape(tokens, cursor, '\"$,\\\\`]');\n if (eTokenized) {\n parts.add(new TextToken({ position, value: (eResult as GenericToken).value}));\n cursor = eCursor as number;\n }\n\n // Block escape\n let [tokenized, tCursor, tResult] : [ tokenized: boolean, cursor?: number, result?: LookupToken | IfToken | VariableToken | TextToken | SequenceToken ] = tokenizeBlockEscape(tokens, cursor, options);\n if (tokenized) {\n parts.add(tResult as SequenceToken);\n cursor = tCursor as number;\n continue;\n }\n\n // Quoted text\n [tokenized, tCursor, tResult] = tokenizeQuote(tokens, cursor);\n if (tokenized) {\n parts.add(tResult as TextToken);\n cursor = tCursor as number;\n continue;\n }\n\n // Lookup\n [tokenized, tCursor, tResult] = tokenizeLookup(tokens, cursor, options);\n if (tokenized) {\n parts.add(tResult as LookupToken);\n cursor = tCursor as number;\n continue;\n }\n\n // $if\n [tokenized, tCursor, tResult] = tokenizeIf(tokens, cursor, options);\n if (tokenized) {\n parts.add(tResult as IfToken);\n cursor = tCursor as number;\n continue;\n }\n\n // Variable\n [tokenized, tCursor, tResult] = tokenizeVariable(tokens, cursor, options);\n if (tokenized) {\n parts.add(tResult as VariableToken);\n cursor = tCursor as number;\n continue;\n }\n\n // All other situations treat the generic token as plain text\n parts.add(new TextToken(tokens[cursor]));\n cursor += 1;\n }\n\n throw new ExpressionSyntaxError('unexpected end of arguments list')\n}", "import type { GenericToken, TokenizeOptions, TokenizeResult } from '../../types';\nimport type IfToken from '../if/token';\nimport type LookupToken from '../lookup/token';\nimport type SequenceToken from '../sequence-token';\nimport type TextToken from '../text/token';\nimport type VariableToken from '../variable/token';\n\nimport ArgumentsToken from './token'\n\nimport tokenizeArgument from './argument';\nimport tokenizeWhitespace from '../whitespace/tokenize';\n\nimport { ExpressionSyntaxError } from '../../errors';\n\nexport default (tokens: GenericToken[], cursor: number, options: TokenizeOptions) : TokenizeResult<ArgumentsToken> => {\n const count = tokens.length;\n\n if (cursor >= count || tokens[cursor].value !== '[') {\n return [false];\n }\n\n const start = tokens[cursor].position;\n cursor += 1;\n\n const consumeWS = () => {\n const [wsRem, wsCursor, wsResult] = tokenizeWhitespace(tokens, cursor);\n if (wsRem) {\n cursor = wsCursor as number;\n return wsResult as string;\n }\n return ''\n }\n consumeWS();\n\n const args : Array<LookupToken | IfToken | VariableToken | TextToken | SequenceToken> = [];\n while (cursor < count) {\n consumeWS();\n if (cursor >= count) {\n break;\n }\n\n // get next argument\n const [aTokenized, aCursor, aResult] = tokenizeArgument(tokens, cursor, options);\n if (!aTokenized) {\n throw new ExpressionSyntaxError('encountered missing or invalid argument', tokens[cursor].position);\n }\n cursor = aCursor as number;\n args.push(aResult as (LookupToken | IfToken | VariableToken | TextToken | SequenceToken));\n\n if (cursor >= count) {\n break;\n }\n\n // End of arguments list\n if (tokens[cursor].value === ']') {\n return [\n true,\n cursor + 1,\n new ArgumentsToken({\n position: start,\n value: args\n })\n ];\n }\n\n if (tokens[cursor].value !== ',') {\n throw new ExpressionSyntaxError('expected end of argument', tokens[cursor].position);\n }\n cursor += 1;\n }\n\n\n if (cursor >= count) {\n throw new ExpressionSyntaxError('unexpected end of expression');\n }\n\n throw new ExpressionSyntaxError('unexpected end of arguments list', tokens[cursor].position);\n}", "import type { GenericToken, TokenizeOptions, TokenizeResult } from '../../types';\n\nimport LookupToken from './token';\n\nimport tokenizeArguments from '../arguments/tokenize';\n\nexport default (tokens: GenericToken[], cursor: number, options: TokenizeOptions) : TokenizeResult<LookupToken> => {\n const count = tokens.length;\n if (\n cursor + 1 >= count ||\n tokens[cursor].value !== '$'\n ) {\n return [false];\n }\n\n const start = tokens[cursor].position;\n\n cursor += 1;\n\n // Determine prefix\n let prefixAccumulator = ''\n let prefix = '';\n let tmpCursor = cursor;\n while (tmpCursor < count) {\n const val = tokens[tmpCursor].value;\n if (!/[\\x21-\\x47\\x3A-\\x40\\x5B\\x5D-\\x60\\x7B-\\x7E]/.test(val)) {\n break;\n }\n prefixAccumulator += val;\n tmpCursor += 1;\n\n if (options.lookups.has(prefixAccumulator)) {\n prefix = prefixAccumulator;\n cursor = tmpCursor;\n }\n }\n if (cursor >= count || !prefix) {\n return [false];\n }\n\n // Determine name\n let name = '';\n if (!/^[a-z]/i.test(tokens[cursor].value)) {\n return [false];\n }\n\n while (\n cursor < count && (\n /^[a-z\\d]+$/i.test(tokens[cursor].value) ||\n tokens[cursor].value === '_' ||\n tokens[cursor].value === '-'\n )\n ) {\n name += tokens[cursor].value;\n cursor += 1;\n }\n if (!/^[a-z][a-z\\d_-]+/i.test(name)) {\n return [false];\n }\n\n let args;\n const [tokenized, tokenizedCursor, tokenizedResult] = tokenizeArguments(tokens, cursor, options);\n if (tokenized) {\n cursor = tokenizedCursor;\n args = tokenizedResult;\n }\n\n return [\n true,\n cursor,\n new LookupToken({\n position: start,\n prefix,\n value: name,\n arguments: args\n })\n ];\n}", "import type { GenericToken, TokenizeOptions, TokenizeResult } from '../../types';\nimport type IfToken from '../if/token';\nimport type LookupToken from '../lookup/token';\nimport type VariableToken from '../variable/token';\n\nimport SequenceToken from '../sequence-token';\nimport TextToken from './token';\n\nimport tokenizeLookup from '../lookup/tokenize';\nimport tokenizeIf from '../if/tokenize';\nimport tokenizeVariable from '../variable/tokenize';\n\nexport default (tokens: GenericToken[], cursor: number, options: TokenizeOptions) : TokenizeResult<LookupToken | IfToken | VariableToken | TextToken | SequenceToken> => {\n const count = tokens.length;\n if ((cursor + 1) >= count || tokens[cursor].value !== '``') {\n return [false];\n }\n\n cursor += 1;\n const result = new SequenceToken({ position: tokens[cursor].position });\n\n while (cursor < count) {\n if (tokens[cursor].value === '``') {\n return [true, cursor + 1, result.unwrap];\n }\n\n let [tokenized, tCursor, tResult] : [success: boolean, cursor?: number, result?: LookupToken | IfToken | VariableToken] = tokenizeLookup(tokens, cursor, options);\n if (tokenized) {\n result.add(tResult as LookupToken);\n cursor = tCursor as number;\n continue;\n }\n\n [tokenized, tCursor, tResult] = tokenizeIf(tokens, cursor, options);\n if (tokenized) {\n result.add(tResult as IfToken);\n cursor = tCursor as number;\n continue;\n }\n\n [tokenized, tCursor, tResult] = tokenizeVariable(tokens, cursor, options);\n if (tokenized) {\n result.add(tResult as VariableToken);\n cursor = tCursor as number;\n continue;\n }\n\n result.add(new TextToken(tokens[cursor]));\n cursor += 1;\n }\n\n return [false];\n}", "import type { GenericToken, TokenizeOptions } from '../../types';\nimport type IfToken from '../if/token';\nimport type LookupToken from '../lookup/token';\nimport type SequenceToken from '../sequence-token';\nimport type VariableToken from '../variable/token';\n\nimport { tokenize as split } from '../../misc/split';\n\nimport RootToken from './token';\nimport TextToken from '../text/token';\n\nimport tokenizeBlockEscape from '../text/block';\nimport tokenizeEscape from '../text/escape';\nimport tokenizeIf from '../if/tokenize';\nimport tokenizeLookup from '../lookup/tokenize';\nimport tokenizeVariable from '../variable/tokenize';\n\n\nexport default (options: TokenizeOptions) : RootToken => {\n\n const result = new RootToken(options);\n\n const tokens = split(options.expression);\n const count = tokens.length;\n let cursor = 0;\n\n while (cursor < count) {\n\n const [eTokenized, eCursor, eResult] = tokenizeEscape(tokens, cursor);\n if (eTokenized) {\n result.add(new TextToken(eResult as GenericToken));\n cursor = eCursor as number;\n continue;\n }\n\n let [tokenized, tCursor, tResult] : [tokenized: boolean, cursor?: number, result?: LookupToken | IfToken | VariableToken | TextToken | SequenceToken] = tokenizeBlockEscape(tokens, cursor, options);\n if (tokenized) {\n result.add(tResult as LookupToken | IfToken | VariableToken | TextToken | SequenceToken);\n cursor = tCursor as number;\n continue;\n }\n\n [tokenized, tCursor, tResult] = tokenizeLookup(tokens, cursor, options);\n if (tokenized) {\n result.add(tResult as LookupToken);\n cursor = tCursor as number;\n continue\n }\n\n [tokenized, tCursor, tResult] = tokenizeIf(tokens, cursor, options);\n if (tokenized) {\n result.add(tResult as IfToken);\n cursor = tCursor as number;\n continue\n }\n\n [tokenized, tCursor, tResult] = tokenizeVariable(tokens, cursor, options);\n if (tokenized) {\n result.add(tResult as VariableToken);\n cursor = tCursor as number;\n continue\n }\n result.add(new TextToken(tokens[cursor]));\n cursor += 1;\n }\n\n return result;\n};", "import tokenizeRoot from './parse/root/tokenize';\nimport { TokenizeOptions, LookupMap, EvaluateOptions, LogicOperatorMap, ComparisonOperatorMap } from './types';\n\nexport { default as ArgumentsToken, ArgumentsTokenOptions } from './parse/arguments/token';\nexport { default as BaseToken, BaseTokenOptions } from './parse/base-token';\nexport { default as ComparisonToken, ComparisonTokenOptions } from './parse/comparison/token';\nexport { default as IfToken, IfTokenOptions } from './parse/if/token';\nexport { default as LogicToken, LogicTokenOptions } from './parse/logic/token';\nexport { default as LookupToken, LookupTokenOptions } from './parse/lookup/token';\nexport { default as RootToken, RootTokenOptions, RootEvaluateOptions } from './parse/root/token';\nexport { default as SequenceToken } from './parse/sequence-token';\nexport { default as TextToken, TextTokenOptions } from './parse/text/token';\nexport { default as VariableToken, VariableTokenOptions } from './parse/variable/token';\nexport { ExpressionError, ExpressionArgumentsError, ExpressionSyntaxError, ExpressionVariableError } from './errors';\n\n\n/** Parses a string expression into a usable Expressionish-Token instance */\nexport const tokenize = (\n /** Options to use during tokenization */\n options: TokenizeOptions\n) => {\n if (options == null) {\n throw new TypeError('options not specified');\n }\n\n // Validate options.variables\n if (options.variables == null) {\n throw new TypeError('variables map is null');\n }\n if (!(options.variables instanceof Map)) {\n throw new TypeError('variables map is not a Map instance');\n }\n\n // validate options.lookups\n if (options.lookups == null) {\n options.lookups = new Map() as LookupMap;\n } else if (!(options.lookups instanceof Map)) {\n throw new TypeError('lookups option specified but is not a Map instance');\n }\n\n // validate options.LogicalOperators\n if (options.logicalOperators == null) {\n options.logicalOperators = new Map() as LogicOperatorMap;\n } else if (!(options.logicalOperators instanceof Map)) {\n throw new TypeError('logical operators options specified but is not a Map instance');\n }\n\n if (options.comparisonOperators == null) {\n options.comparisonOperators = new Map() as ComparisonOperatorMap;\n } else if (!(options.comparisonOperators instanceof Map)) {\n throw new TypeError('comparison operators options specified but is not a Map instance');\n }\n\n // validate options.expression\n if (options.expression == null) {\n throw new TypeError('expression not specified');\n }\n if (typeof options.expression !== 'string') {\n throw new TypeError('expression must be a string');\n }\n\n // tokenize the expression\n return tokenizeRoot(options);\n}\n\n/** Parses then evaluates expression text */\nexport const evaluate = async (\n /** Options passed to the parser and evaluator */\n options: EvaluateOptions\n) => tokenize(options).evaluate({\n onlyValidate: options.onlyValidate,\n preeval: options.preeval,\n data: options.data\n});"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["tokenize_default", "tokenize_default", "tokenize_default", "operator", "operators_default", "operators_default", "operators_default", "operator", "tokenize_default", "tokenize", "tokenize_default", "tCursor", "tokenize", "tokenize_default", "tokenize_default", "tokenize_default", "tokenize_default", "tokenize_default", "tokenize", "tokenize_default"]
|
|
7
|
+
}
|
package/package.json
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "expressionish",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"license": "ISC",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
7
7
|
"url": "https://github.com/SReject/expressionish"
|
|
8
8
|
},
|
|
9
9
|
"files": [
|
|
10
|
-
"./dist/
|
|
11
|
-
"./dist/
|
|
12
|
-
"./dist/
|
|
10
|
+
"./dist/expressionish.mjs",
|
|
11
|
+
"./dist/expressionish.d.ts",
|
|
12
|
+
"./dist/expressionish.mjs.map"
|
|
13
13
|
],
|
|
14
14
|
"type": "module",
|
|
15
15
|
"exports": {
|