UNPKG

adaptive-expressions

Version:
249 lines 11.9 kB
"use strict"; /** * @module adaptive-expressions */ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.ExpressionFunctions = void 0; /** * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. */ const BuiltinFunctions = __importStar(require("./builtinFunctions")); const expressionType_1 = require("./expressionType"); /** * <summary> * Definition of default built-in functions for expressions. * </summary> * <remarks> * These functions are largely from WDL https://docs.microsoft.com/en-us/azure/logic-apps/workflow-definition-language-functions-reference * with a few extensions like infix operators for math, logic and comparisons. * This class also has some methods that are useful to use when defining custom functions. * You can always construct a <see cref="ExpressionEvaluator"/> directly which gives the maximum amount of control over validation and evaluation. * Validators are static checkers that should throw an exception if something is not valid statically. * Evaluators are called to evaluate an expression and should try not to throw. * There are some evaluators in this file that take in a verifier that is called at runtime to verify arguments are proper. * </remarks> */ class ExpressionFunctions { /** * @private */ static getStandardFunctions() { const functions = [ new BuiltinFunctions.Abs(), new BuiltinFunctions.Accessor(), new BuiltinFunctions.Add(), new BuiltinFunctions.AddDays(), new BuiltinFunctions.AddHours(), new BuiltinFunctions.AddMinutes(), new BuiltinFunctions.AddOrdinal(), new BuiltinFunctions.AddProperty(), new BuiltinFunctions.AddSeconds(), new BuiltinFunctions.AddToTime(), new BuiltinFunctions.All(), new BuiltinFunctions.And(), new BuiltinFunctions.Any(), new BuiltinFunctions.Average(), new BuiltinFunctions.Base64(), new BuiltinFunctions.Base64ToBinary(), new BuiltinFunctions.Base64ToString(), new BuiltinFunctions.Binary(), new BuiltinFunctions.Bool(), new BuiltinFunctions.Ceiling(), new BuiltinFunctions.Coalesce(), new BuiltinFunctions.Concat(), new BuiltinFunctions.Contains(), new BuiltinFunctions.ConvertFromUTC(), new BuiltinFunctions.ConvertToUTC(), new BuiltinFunctions.Count(), new BuiltinFunctions.CountWord(), new BuiltinFunctions.CreateArray(), new BuiltinFunctions.DataUri(), new BuiltinFunctions.DataUriToBinary(), new BuiltinFunctions.DataUriToString(), new BuiltinFunctions.DateFunc(), new BuiltinFunctions.DateReadBack(), new BuiltinFunctions.DateTimeDiff(), new BuiltinFunctions.DayOfMonth(), new BuiltinFunctions.DayOfWeek(), new BuiltinFunctions.DayOfYear(), new BuiltinFunctions.Divide(), new BuiltinFunctions.Element(), new BuiltinFunctions.Empty(), new BuiltinFunctions.EndsWith(), new BuiltinFunctions.EOL(), new BuiltinFunctions.Equal(), new BuiltinFunctions.Exists(), new BuiltinFunctions.Flatten(), new BuiltinFunctions.First(), new BuiltinFunctions.Float(), new BuiltinFunctions.Floor(), new BuiltinFunctions.Foreach(), new BuiltinFunctions.FormatDateTime(), new BuiltinFunctions.FormatEpoch(), new BuiltinFunctions.FormatNumber(), new BuiltinFunctions.FormatTicks(), new BuiltinFunctions.GetFutureTime(), new BuiltinFunctions.GetNextViableDate(), new BuiltinFunctions.GetNextViableTime(), new BuiltinFunctions.GetPastTime(), new BuiltinFunctions.GetPreviousViableDate(), new BuiltinFunctions.GetPreviousViableTime(), new BuiltinFunctions.GetPastTime(), new BuiltinFunctions.GetProperty(), new BuiltinFunctions.GetTimeOfDay(), new BuiltinFunctions.GreaterThan(), new BuiltinFunctions.GreaterThanOrEqual(), new BuiltinFunctions.If(), new BuiltinFunctions.Ignore(), new BuiltinFunctions.IndexOf(), new BuiltinFunctions.IndicesAndValues(), new BuiltinFunctions.Int(), new BuiltinFunctions.Intersection(), new BuiltinFunctions.IsArray(), new BuiltinFunctions.IsBoolean(), new BuiltinFunctions.IsDate(), new BuiltinFunctions.IsDateRange(), new BuiltinFunctions.IsDateTime(), new BuiltinFunctions.IsDefinite(), new BuiltinFunctions.IsDuration(), new BuiltinFunctions.IsFloat(), new BuiltinFunctions.IsInteger(), new BuiltinFunctions.IsMatch(), new BuiltinFunctions.IsObject(), new BuiltinFunctions.IsPresent(), new BuiltinFunctions.IsString(), new BuiltinFunctions.IsTime(), new BuiltinFunctions.IsTimeRange(), new BuiltinFunctions.Join(), new BuiltinFunctions.JPath(), new BuiltinFunctions.Json(), new BuiltinFunctions.JsonStringify(), new BuiltinFunctions.Last(), new BuiltinFunctions.LastIndexOf(), new BuiltinFunctions.Length(), new BuiltinFunctions.LessThan(), new BuiltinFunctions.LessThanOrEqual(), new BuiltinFunctions.Max(), new BuiltinFunctions.Merge(), new BuiltinFunctions.Min(), new BuiltinFunctions.Mod(), new BuiltinFunctions.Month(), new BuiltinFunctions.Multiply(), new BuiltinFunctions.NewGuid(), new BuiltinFunctions.Not(), new BuiltinFunctions.NotEqual(), new BuiltinFunctions.Optional(), new BuiltinFunctions.Or(), new BuiltinFunctions.Power(), new BuiltinFunctions.Rand(), new BuiltinFunctions.Range(), new BuiltinFunctions.RemoveProperty(), new BuiltinFunctions.Replace(), new BuiltinFunctions.ReplaceIgnoreCase(), new BuiltinFunctions.Reverse(), new BuiltinFunctions.Round(), new BuiltinFunctions.Select(), new BuiltinFunctions.SentenceCase(), new BuiltinFunctions.SetPathToValue(), new BuiltinFunctions.SetProperty(), new BuiltinFunctions.Skip(), new BuiltinFunctions.SortBy(), new BuiltinFunctions.SortByDescending(), new BuiltinFunctions.Split(), new BuiltinFunctions.Sqrt(), new BuiltinFunctions.StartOfDay(), new BuiltinFunctions.StartOfHour(), new BuiltinFunctions.StartOfMonth(), new BuiltinFunctions.StartsWith(), new BuiltinFunctions.String(), new BuiltinFunctions.StringOrValue(), new BuiltinFunctions.SubArray(), new BuiltinFunctions.Substring(), new BuiltinFunctions.Subtract(), new BuiltinFunctions.SubtractFromTime(), new BuiltinFunctions.Sum(), new BuiltinFunctions.Take(), new BuiltinFunctions.Ticks(), new BuiltinFunctions.TicksToDays(), new BuiltinFunctions.TicksToHours(), new BuiltinFunctions.TicksToMinutes(), new BuiltinFunctions.TimexResolve(), new BuiltinFunctions.TitleCase(), new BuiltinFunctions.ToLower(), new BuiltinFunctions.ToUpper(), new BuiltinFunctions.Trim(), new BuiltinFunctions.Union(), new BuiltinFunctions.Unique(), new BuiltinFunctions.UriComponent(), new BuiltinFunctions.UriComponentToString(), new BuiltinFunctions.UriHost(), new BuiltinFunctions.UriPath(), new BuiltinFunctions.UriPathAndQuery(), new BuiltinFunctions.UriPort(), new BuiltinFunctions.UriQuery(), new BuiltinFunctions.UriScheme(), new BuiltinFunctions.UtcNow(), new BuiltinFunctions.Where(), new BuiltinFunctions.XML(), new BuiltinFunctions.XPath(), new BuiltinFunctions.Year(), ]; const lookup = new Map(); functions.forEach((func) => { lookup.set(func.type, func); }); // Attach negations lookup.get(expressionType_1.ExpressionType.LessThan).negation = lookup.get(expressionType_1.ExpressionType.GreaterThanOrEqual); lookup.get(expressionType_1.ExpressionType.LessThanOrEqual).negation = lookup.get(expressionType_1.ExpressionType.GreaterThan); lookup.get(expressionType_1.ExpressionType.Equal).negation = lookup.get(expressionType_1.ExpressionType.NotEqual); // Math aliases lookup.set('add', lookup.get(expressionType_1.ExpressionType.Add)); // more than 1 param lookup.set('mul', lookup.get(expressionType_1.ExpressionType.Multiply)); // more than 1 param lookup.set('div', lookup.get(expressionType_1.ExpressionType.Divide)); // more than 1 param lookup.set('sub', lookup.get(expressionType_1.ExpressionType.Subtract)); // more than 1 param lookup.set('exp', lookup.get(expressionType_1.ExpressionType.Power)); // more than 1 param lookup.set('mod', lookup.get(expressionType_1.ExpressionType.Mod)); // Comparison aliases lookup.set('and', lookup.get(expressionType_1.ExpressionType.And)); lookup.set('equals', lookup.get(expressionType_1.ExpressionType.Equal)); lookup.set('greater', lookup.get(expressionType_1.ExpressionType.GreaterThan)); lookup.set('greaterOrEquals', lookup.get(expressionType_1.ExpressionType.GreaterThanOrEqual)); lookup.set('less', lookup.get(expressionType_1.ExpressionType.LessThan)); lookup.set('lessOrEquals', lookup.get(expressionType_1.ExpressionType.LessThanOrEqual)); lookup.set('not', lookup.get(expressionType_1.ExpressionType.Not)); lookup.set('or', lookup.get(expressionType_1.ExpressionType.Or)); lookup.set('&', lookup.get(expressionType_1.ExpressionType.Concat)); lookup.set('??', lookup.get(expressionType_1.ExpressionType.Coalesce)); return lookup; } } exports.ExpressionFunctions = ExpressionFunctions; /** * Read only Dictionary of built in functions. */ ExpressionFunctions.standardFunctions = ExpressionFunctions.getStandardFunctions(); //# sourceMappingURL=expressionFunctions.js.map