@fincity/kirun-js 1.9.1 → 2.0.0

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.
Files changed (52) hide show
  1. package/__tests__/engine/function/system/math/MathFunctionRepositoryTest.ts +118 -75
  2. package/__tests__/engine/function/system/string/StringFunctionRepoTest2.ts +3 -3
  3. package/__tests__/engine/function/system/string/StringFunctionRepoTest3.ts +2 -2
  4. package/__tests__/engine/function/system/string/StringFunctionRepositoryTest.ts +8 -8
  5. package/__tests__/engine/json/schema/SchemaUtil.ts +1 -1
  6. package/__tests__/engine/json/schema/type/TypeUtilTest.ts +1 -1
  7. package/__tests__/engine/json/schema/validator/AnyOfAllOfOneOfValidatorTest.ts +24 -19
  8. package/__tests__/engine/json/schema/validator/ArrayContainsValidatorTest.ts +22 -22
  9. package/__tests__/engine/json/schema/validator/ArraySchemaAdapterTypeTest.ts +10 -10
  10. package/__tests__/engine/json/schema/validator/ArraySchemaTypeTest.ts +22 -22
  11. package/__tests__/engine/json/schema/validator/ArrayValidatorTest.ts +13 -13
  12. package/__tests__/engine/json/schema/validator/NotValidatorTest.ts +10 -9
  13. package/__tests__/engine/json/schema/validator/NullValidatorTest.ts +6 -6
  14. package/__tests__/engine/json/schema/validator/ObjectPropertiesTest.ts +4 -4
  15. package/__tests__/engine/json/schema/validator/ObjectValidatorTest.ts +32 -28
  16. package/__tests__/engine/json/schema/validator/SchemaAnyOfValidatorTest.ts +184 -182
  17. package/__tests__/engine/json/schema/validator/SchemaValidatorTest.ts +43 -32
  18. package/__tests__/engine/json/schema/validator/StringFormatSchemaValidatorTest.ts +24 -24
  19. package/__tests__/engine/json/schema/validator/StringValidatorTest.ts +14 -14
  20. package/__tests__/engine/repository/KIRunFunctionRepositoryTest.ts +7 -7
  21. package/__tests__/engine/repository/RepositoryFilterTest.ts +7 -7
  22. package/__tests__/engine/runtime/KIRuntimeFunctionInFunction.ts +11 -7
  23. package/__tests__/engine/runtime/KIRuntimeNoParamMapTest.ts +2 -2
  24. package/__tests__/engine/runtime/KIRuntimeNoValuesTest.ts +2 -2
  25. package/__tests__/engine/runtime/KIRuntimeTest.ts +8 -6
  26. package/__tests__/engine/runtime/KIRuntimeTestWithoutGenEvent.ts +4 -1
  27. package/__tests__/engine/runtime/KIRuntimeUndefinedParamTest.ts +4 -4
  28. package/__tests__/engine/runtime/KIRuntimeValuesEmptyTest.ts +6 -6
  29. package/__tests__/indexTest.ts +10 -10
  30. package/dist/index.js +1 -1
  31. package/dist/index.js.map +1 -1
  32. package/dist/module.js +1 -1
  33. package/dist/module.js.map +1 -1
  34. package/dist/types.d.ts +17 -17
  35. package/dist/types.d.ts.map +1 -1
  36. package/package.json +1 -1
  37. package/src/engine/HybridRepository.ts +5 -5
  38. package/src/engine/Repository.ts +2 -2
  39. package/src/engine/function/AbstractFunction.ts +35 -31
  40. package/src/engine/function/system/array/ArrayFunctionRepository.ts +8 -6
  41. package/src/engine/function/system/math/MathFunctionRepository.ts +7 -5
  42. package/src/engine/function/system/object/ObjectFunctionRepository.ts +7 -5
  43. package/src/engine/function/system/string/StringFunctionRepository.ts +8 -6
  44. package/src/engine/json/schema/SchemaUtil.ts +33 -30
  45. package/src/engine/json/schema/validator/ArrayValidator.ts +25 -20
  46. package/src/engine/json/schema/validator/ObjectValidator.ts +32 -14
  47. package/src/engine/json/schema/validator/SchemaValidator.ts +15 -11
  48. package/src/engine/json/schema/validator/TypeValidator.ts +5 -5
  49. package/src/engine/repository/KIRunFunctionRepository.ts +3 -2
  50. package/src/engine/repository/KIRunSchemaRepository.ts +7 -5
  51. package/src/engine/runtime/KIRuntime.ts +14 -14
  52. package/src/engine/util/duplicate.ts +1 -1
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"mappings":"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","sources":["src/engine/namespaces/Namespaces.ts","src/engine/util/NullCheck.ts","src/engine/json/schema/array/ArraySchemaType.ts","src/engine/json/schema/type/SchemaType.ts","src/engine/json/schema/type/Type.ts","src/engine/json/schema/type/MultipleType.ts","src/engine/json/schema/type/SingleType.ts","src/engine/json/schema/type/TypeUtil.ts","src/engine/json/schema/Schema.ts","src/engine/json/schema/validator/exception/SchemaReferenceException.ts","src/engine/model/ParameterType.ts","src/engine/model/Parameter.ts","src/engine/repository/KIRunSchemaRepository.ts","src/engine/util/mapEntry.ts","src/engine/util/MapUtil.ts","src/engine/model/Event.ts","src/engine/model/EventResult.ts","src/engine/exception/KIRuntimeException.ts","src/engine/model/FunctionOutput.ts","src/engine/model/FunctionSignature.ts","src/engine/util/string/StringFormatter.ts","src/engine/util/LinkedList.ts","src/engine/util/deepEqual.ts","src/engine/util/string/StringUtil.ts","src/engine/util/Tuples.ts","src/engine/json/schema/validator/exception/SchemaValidationException.ts","src/engine/json/schema/SchemaUtil.ts","src/engine/json/schema/validator/AnyOfAllOfOneOfValidator.ts","src/engine/json/schema/validator/ArrayValidator.ts","src/engine/json/schema/validator/BooleanValidator.ts","src/engine/json/schema/validator/NullValidator.ts","src/engine/json/schema/validator/NumberValidator.ts","src/engine/json/schema/validator/ObjectValidator.ts","src/engine/json/schema/string/StringFormat.ts","src/engine/json/schema/validator/StringValidator.ts","src/engine/json/schema/validator/TypeValidator.ts","src/engine/json/schema/validator/SchemaValidator.ts","src/engine/function/AbstractFunction.ts","src/engine/function/system/array/AbstractArrayFunction.ts","src/engine/function/system/array/Concatenate.ts","src/engine/function/system/array/AddFirst.ts","src/engine/function/system/array/ArrayToArrayOfObjects.ts","src/engine/exception/ExecutionException.ts","src/engine/util/primitive/PrimitiveUtil.ts","src/engine/function/system/array/BinarySearch.ts","src/engine/util/ArrayUtil.ts","src/engine/function/system/array/Compare.ts","src/engine/util/duplicate.ts","src/engine/function/system/array/Copy.ts","src/engine/function/system/array/Delete.ts","src/engine/function/system/array/DeleteFirst.ts","src/engine/function/system/array/DeleteFrom.ts","src/engine/function/system/array/DeleteLast.ts","src/engine/function/system/array/Disjoint.ts","src/engine/function/system/array/Equals.ts","src/engine/function/system/array/Fill.ts","src/engine/function/system/array/Frequency.ts","src/engine/function/system/array/IndexOf.ts","src/engine/function/system/array/IndexOfArray.ts","src/engine/function/system/array/LastIndexOf.ts","src/engine/function/system/array/LastIndexOfArray.ts","src/engine/function/system/array/Max.ts","src/engine/function/system/array/Min.ts","src/engine/function/system/array/MisMatch.ts","src/engine/function/system/array/Reverse.ts","src/engine/function/system/array/Rotate.ts","src/engine/function/system/array/Shuffle.ts","src/engine/function/system/array/Sort.ts","src/engine/function/system/array/SubArray.ts","src/engine/function/system/array/Insert.ts","src/engine/function/system/array/InsertLast.ts","src/engine/function/system/array/RemoveDuplicates.ts","src/engine/util/string/StringBuilder.ts","src/engine/runtime/expression/exception/ExpressionEvaluationException.ts","src/engine/runtime/expression/ExpressionToken.ts","src/engine/runtime/expression/ExpressionTokenValue.ts","src/engine/runtime/expression/Operation.ts","src/engine/runtime/expression/Expression.ts","src/engine/runtime/expression/tokenextractor/TokenValueExtractor.ts","src/engine/runtime/expression/tokenextractor/ObjectValueSetterExtractor.ts","src/engine/function/system/array/ArrayToObject.ts","src/engine/function/system/array/ArrayFunctionRepository.ts","src/engine/runtime/ContextElement.ts","src/engine/function/system/context/Create.ts","src/engine/function/system/context/Get.ts","src/engine/runtime/expression/operators/binary/BinaryOperator.ts","src/engine/runtime/expression/operators/binary/LogicalNullishCoalescingOperator.ts","src/engine/runtime/expression/operators/binary/ArithmeticAdditionOperator.ts","src/engine/runtime/expression/operators/binary/ArithmeticDivisionOperator.ts","src/engine/runtime/expression/operators/binary/ArithmeticInetgerDivisionOperator.ts","src/engine/runtime/expression/operators/binary/ArithmeticModulusOperator.ts","src/engine/runtime/expression/operators/binary/ArithmeticMultiplicationOperator.ts","src/engine/runtime/expression/operators/binary/ArithmeticSubtractionOperator.ts","src/engine/runtime/expression/operators/binary/ArrayOperator.ts","src/engine/runtime/expression/operators/binary/BitwiseAndOperator.ts","src/engine/runtime/expression/operators/binary/BitwiseLeftShiftOperator.ts","src/engine/runtime/expression/operators/binary/BitwiseOrOperator.ts","src/engine/runtime/expression/operators/binary/BitwiseRightShiftOperator.ts","src/engine/runtime/expression/operators/binary/BitwiseUnsignedRightShiftOperator.ts","src/engine/runtime/expression/operators/binary/BitwiseXorOperator.ts","src/engine/runtime/expression/operators/binary/LogicalAndOperator.ts","src/engine/runtime/expression/operators/binary/LogicalEqualOperator.ts","src/engine/runtime/expression/operators/binary/LogicalGreaterThanEqualOperator.ts","src/engine/runtime/expression/operators/binary/LogicalGreaterThanOperator.ts","src/engine/runtime/expression/operators/binary/LogicalLessThanEqualOperator.ts","src/engine/runtime/expression/operators/binary/LogicalLessThanOperator.ts","src/engine/runtime/expression/operators/binary/LogicalNotEqualOperator.ts","src/engine/runtime/expression/operators/binary/LogicalOrOperator.ts","src/engine/runtime/expression/operators/binary/ObjectOperator.ts","src/engine/runtime/expression/operators/unary/UnaryOperator.ts","src/engine/runtime/expression/operators/unary/ArithmeticUnaryMinusOperator.ts","src/engine/runtime/expression/operators/unary/ArithmeticUnaryPlusOperator.ts","src/engine/runtime/expression/operators/unary/BitwiseComplementOperator.ts","src/engine/runtime/expression/operators/unary/LogicalNotOperator.ts","src/engine/runtime/expression/tokenextractor/LiteralTokenValueExtractor.ts","src/engine/runtime/expression/operators/ternary/ConditionalTernaryOperator.ts","src/engine/runtime/expression/operators/ternary/TernaryOperator.ts","src/engine/runtime/expression/tokenextractor/ExpressionInternalValueExtractor.ts","src/engine/runtime/expression/ExpressionEvaluator.ts","src/engine/function/system/context/SetFunction.ts","src/engine/function/system/GenerateEvent.ts","src/engine/function/system/If.ts","src/engine/function/system/loop/Break.ts","src/engine/function/system/loop/CountLoop.ts","src/engine/function/system/loop/ForEachLoop.ts","src/engine/function/system/loop/RangeLoop.ts","src/engine/function/system/math/Add.ts","src/engine/function/system/math/GenericMathFunction.ts","src/engine/function/system/math/Hypotenuse.ts","src/engine/function/system/math/Maximum.ts","src/engine/function/system/math/Minimum.ts","src/engine/function/system/math/Random.ts","src/engine/function/system/math/RandomFloat.ts","src/engine/function/system/math/RandomInt.ts","src/engine/function/system/math/MathFunctionRepository.ts","src/engine/function/system/object/AbstractObjectFunction.ts","src/engine/function/system/object/ObjectFunctionRepository.ts","src/engine/function/system/object/ObjectValues.ts","src/engine/function/system/object/ObjectKeys.ts","src/engine/function/system/object/ObjectEntries.ts","src/engine/function/system/object/ObjectDeleteKey.ts","src/engine/function/system/object/ObjectPutValue.ts","src/engine/function/system/Print.ts","src/engine/function/system/string/AbstractStringFunction.ts","src/engine/function/system/string/Concatenate.ts","src/engine/function/system/string/DeleteForGivenLength.ts","src/engine/function/system/string/InsertAtGivenPosition.ts","src/engine/function/system/string/PostPad.ts","src/engine/function/system/string/PrePad.ts","src/engine/function/system/string/RegionMatches.ts","src/engine/function/system/string/ReplaceAtGivenPosition.ts","src/engine/function/system/string/Reverse.ts","src/engine/function/system/string/Split.ts","src/engine/function/system/string/ToString.ts","src/engine/function/system/string/TrimTo.ts","src/engine/function/system/string/StringFunctionRepository.ts","src/engine/HybridRepository.ts","src/engine/repository/KIRunFunctionRepository.ts","src/engine/runtime/StatementMessage.ts","src/engine/runtime/StatementExecution.ts","src/engine/runtime/tokenextractor/ContextTokenValueExtractor.ts","src/engine/runtime/tokenextractor/OutputMapTokenValueExtractor.ts","src/engine/runtime/tokenextractor/ArgumentsTokenValueExtractor.ts","src/engine/runtime/graph/ExecutionGraph.ts","src/engine/runtime/graph/GraphVertex.ts","src/engine/json/JsonExpression.ts","src/engine/model/ParameterReferenceType.ts","src/engine/util/UUID.ts","src/engine/runtime/FunctionExecutionParameters.ts","src/engine/runtime/StatementMessageType.ts","src/engine/runtime/KIRuntime.ts","src/engine/constant/KIRunConstants.ts","src/engine/model/Position.ts","src/engine/model/AbstractStatement.ts","src/engine/model/ParameterReference.ts","src/engine/model/Statement.ts","src/engine/model/StatementGroup.ts","src/engine/model/FunctionDefinition.ts","src/engine/model/Argument.ts"],"sourcesContent":["export class Namespaces {\n public static readonly SYSTEM: string = 'System';\n public static readonly SYSTEM_CTX: string = 'System.Context';\n public static readonly SYSTEM_LOOP: string = 'System.Loop';\n public static readonly SYSTEM_ARRAY: string = 'System.Array';\n public static readonly SYSTEM_OBJECT: string = 'System.Object';\n\n public static readonly MATH: string = 'System.Math';\n public static readonly STRING: string = 'System.String';\n\n private constructor() {}\n}\n","export function isNullValue(v: any): boolean {\n return v === null || v === undefined;\n}\n","import { isNullValue } from '../../../util/NullCheck';\nimport { Schema } from '../Schema';\n\nexport class ArraySchemaType {\n private singleSchema: Schema | undefined;\n private tupleSchema: Schema[] | undefined;\n\n public constructor(ast?: ArraySchemaType) {\n if (!ast) return;\n this.singleSchema = ast.singleSchema ? new Schema(ast.singleSchema) : undefined;\n this.tupleSchema = ast.tupleSchema ? ast.tupleSchema.map((e) => new Schema(e)) : undefined;\n }\n\n public setSingleSchema(schema: Schema): ArraySchemaType {\n this.singleSchema = schema;\n return this;\n }\n\n public setTupleSchema(schemas: Schema[]): ArraySchemaType {\n this.tupleSchema = schemas;\n return this;\n }\n\n public getSingleSchema(): Schema | undefined {\n return this.singleSchema;\n }\n\n public getTupleSchema(): Schema[] | undefined {\n return this.tupleSchema;\n }\n\n public isSingleType(): boolean {\n return !isNullValue(this.singleSchema);\n }\n\n public static of(...schemas: Schema[]): ArraySchemaType {\n if (schemas.length == 1) return new ArraySchemaType().setSingleSchema(schemas[0]);\n\n return new ArraySchemaType().setTupleSchema(schemas);\n }\n\n public static from(obj: any): ArraySchemaType | undefined {\n if (!obj) return undefined;\n if (Array.isArray(obj))\n return new ArraySchemaType().setTupleSchema(Schema.fromListOfSchemas(obj)!);\n\n let keys: any[] = Object.keys(obj);\n\n if (keys.indexOf('singleSchema') != -1) {\n return new ArraySchemaType().setSingleSchema(Schema.from(obj['singleSchema'])!);\n } else if (keys.indexOf('tupleSchema') != -1) {\n return new ArraySchemaType().setTupleSchema(\n Schema.fromListOfSchemas(obj['tupleSchema'])!,\n );\n }\n\n let x = Schema.from(obj);\n if (!x) return undefined;\n return new ArraySchemaType().setSingleSchema(x);\n }\n}\n","export enum SchemaType {\n INTEGER = 'Integer',\n LONG = 'Long',\n FLOAT = 'Float',\n DOUBLE = 'Double',\n STRING = 'String',\n OBJECT = 'Object',\n ARRAY = 'Array',\n BOOLEAN = 'Boolean',\n NULL = 'Null',\n}\n","import { SchemaType } from './SchemaType';\n\nexport abstract class Type {\n public abstract getAllowedSchemaTypes(): Set<SchemaType>;\n public abstract contains(type: SchemaType): boolean;\n}\n","import { SchemaType } from './SchemaType';\nimport { Type } from './Type';\n\nexport class MultipleType extends Type {\n private type: Set<SchemaType>;\n\n public constructor(type: Set<SchemaType> | MultipleType) {\n super();\n\n if (type instanceof MultipleType)\n this.type = new Set(Array.from((type as MultipleType).type));\n else this.type = new Set(Array.from(type));\n }\n\n public getType(): Set<SchemaType> {\n return this.type;\n }\n\n public setType(type: Set<SchemaType>): MultipleType {\n this.type = type;\n return this;\n }\n\n public getAllowedSchemaTypes(): Set<SchemaType> {\n return this.type;\n }\n\n public contains(type: SchemaType): boolean {\n return this.type?.has(type);\n }\n}\n","import { SchemaType } from './SchemaType';\nimport { Type } from './Type';\n\nexport class SingleType extends Type {\n private type: SchemaType;\n\n public constructor(type: SchemaType | SingleType) {\n super();\n\n if (type instanceof SingleType) this.type = (type as SingleType).type;\n else this.type = type as SchemaType;\n }\n\n public getType(): SchemaType {\n return this.type;\n }\n\n public getAllowedSchemaTypes(): Set<SchemaType> {\n return new Set([this.type]);\n }\n\n public contains(type: SchemaType): boolean {\n return this.type == type;\n }\n}\n","import { MultipleType } from './MultipleType';\nimport { SchemaType } from './SchemaType';\nimport { SingleType } from './SingleType';\nimport { Type } from './Type';\n\nexport class TypeUtil {\n public static of(...types: SchemaType[]): Type {\n if (types.length == 1) return new SingleType(types[0]);\n\n return new MultipleType(new Set(types));\n }\n\n public static from(types: any): Type | undefined {\n if (typeof types === 'string') {\n return new SingleType(SchemaType[types as keyof typeof SchemaType]);\n } else if (Array.isArray(types)) {\n return new MultipleType(\n new Set(types.map((e) => e as keyof typeof SchemaType).map((e) => SchemaType[e])),\n );\n }\n return undefined;\n }\n}\n","import { Namespaces } from '../../namespaces/Namespaces';\nimport { ArraySchemaType } from './array/ArraySchemaType';\nimport { StringFormat } from './string/StringFormat';\nimport { SchemaType } from './type/SchemaType';\nimport { TypeUtil } from './type/TypeUtil';\nimport { Type } from './type/Type';\nimport { isNullValue } from '../../util/NullCheck';\nimport { SingleType } from './type/SingleType';\nimport { MultipleType } from './type/MultipleType';\n\nconst ADDITIONAL_PROPERTY: string = 'additionalProperty';\nconst ADDITIONAL_ITEMS: string = 'additionalItems';\nconst ENUMS: string = 'enums';\nconst ITEMS_STRING: string = 'items';\nconst SCHEMA_ROOT_PATH: string = 'System.Schema';\nconst REQUIRED_STRING: string = 'required';\nconst VERSION_STRING: string = 'version';\nconst NAMESPACE_STRING: string = 'namespace';\nconst TEMPORARY: string = '_';\n\nexport class AdditionalType {\n private booleanValue?: boolean;\n private schemaValue?: Schema;\n\n constructor(apt: AdditionalType | undefined = undefined) {\n if (!apt) return;\n this.booleanValue = apt.booleanValue;\n if (!apt.schemaValue) return;\n this.schemaValue = new Schema(apt.schemaValue);\n }\n\n public getBooleanValue(): boolean | undefined {\n return this.booleanValue;\n }\n\n public getSchemaValue(): Schema | undefined {\n return this.schemaValue;\n }\n\n public setBooleanValue(booleanValue: boolean): AdditionalType {\n this.booleanValue = booleanValue;\n return this;\n }\n\n public setSchemaValue(schemaValue: Schema): AdditionalType {\n this.schemaValue = schemaValue;\n return this;\n }\n\n public static from(obj: any): AdditionalType | undefined {\n if (isNullValue(obj)) return undefined;\n const ad = new AdditionalType();\n if (typeof obj === 'boolean') ad.booleanValue = obj;\n else {\n let keys = Object.keys(obj);\n if (keys.indexOf('booleanValue') != -1) ad.booleanValue = obj.booleanValue;\n else if (keys.indexOf('schemaValue') != -1)\n ad.schemaValue = Schema.from(obj.schemaValue);\n else ad.schemaValue = Schema.from(obj);\n }\n return ad;\n }\n}\n\nexport class Schema {\n public static readonly NULL: Schema = new Schema()\n .setNamespace(Namespaces.SYSTEM)\n .setName('Null')\n .setType(TypeUtil.of(SchemaType.NULL))\n .setConstant(undefined);\n\n private static readonly TYPE_SCHEMA: Schema = new Schema()\n .setType(TypeUtil.of(SchemaType.STRING))\n .setEnums([\n 'INTEGER',\n 'LONG',\n 'FLOAT',\n 'DOUBLE',\n 'STRING',\n 'OBJECT',\n 'ARRAY',\n 'BOOLEAN',\n 'NULL',\n ]);\n\n public static readonly SCHEMA: Schema = new Schema()\n .setNamespace(Namespaces.SYSTEM)\n .setName('Schema')\n .setType(TypeUtil.of(SchemaType.OBJECT))\n .setProperties(\n new Map<string, Schema>([\n [\n NAMESPACE_STRING,\n Schema.of(NAMESPACE_STRING, SchemaType.STRING).setDefaultValue(TEMPORARY),\n ],\n ['name', Schema.ofString('name')],\n [VERSION_STRING, Schema.of(VERSION_STRING, SchemaType.INTEGER).setDefaultValue(1)],\n ['ref', Schema.ofString('ref')],\n [\n 'type',\n new Schema().setAnyOf([\n Schema.TYPE_SCHEMA,\n Schema.ofArray('type', Schema.TYPE_SCHEMA),\n ]),\n ],\n ['anyOf', Schema.ofArray('anyOf', Schema.ofRef(SCHEMA_ROOT_PATH))],\n ['allOf', Schema.ofArray('allOf', Schema.ofRef(SCHEMA_ROOT_PATH))],\n ['oneOf', Schema.ofArray('oneOf', Schema.ofRef(SCHEMA_ROOT_PATH))],\n\n ['not', Schema.ofRef(SCHEMA_ROOT_PATH)],\n ['title', Schema.ofString('title')],\n ['description', Schema.ofString('description')],\n ['id', Schema.ofString('id')],\n ['examples', Schema.ofAny('examples')],\n ['defaultValue', Schema.ofAny('defaultValue')],\n ['comment', Schema.ofString('comment')],\n [ENUMS, Schema.ofArray(ENUMS, Schema.ofString(ENUMS))],\n ['constant', Schema.ofAny('constant')],\n\n ['pattern', Schema.ofString('pattern')],\n [\n 'format',\n Schema.of('format', SchemaType.STRING).setEnums([\n 'DATETIME',\n 'TIME',\n 'DATE',\n 'EMAIL',\n 'REGEX',\n ]),\n ],\n ['minLength', Schema.ofInteger('minLength')],\n ['maxLength', Schema.ofInteger('maxLength')],\n\n ['multipleOf', Schema.ofLong('multipleOf')],\n ['minimum', Schema.ofNumber('minimum')],\n ['maximum', Schema.ofNumber('maximum')],\n ['exclusiveMinimum', Schema.ofNumber('exclusiveMinimum')],\n ['exclusiveMaximum', Schema.ofNumber('exclusiveMaximum')],\n\n [\n 'properties',\n Schema.of('properties', SchemaType.OBJECT).setAdditionalProperties(\n new AdditionalType().setSchemaValue(Schema.ofRef(SCHEMA_ROOT_PATH)),\n ),\n ],\n [\n 'additionalProperties',\n new Schema()\n .setName(ADDITIONAL_PROPERTY)\n .setNamespace(Namespaces.SYSTEM)\n .setAnyOf([\n Schema.ofBoolean(ADDITIONAL_PROPERTY),\n Schema.ofObject(ADDITIONAL_PROPERTY).setRef(SCHEMA_ROOT_PATH),\n ])\n .setDefaultValue(true),\n ],\n [\n REQUIRED_STRING,\n Schema.ofArray(\n REQUIRED_STRING,\n Schema.ofString(REQUIRED_STRING),\n ).setDefaultValue([]),\n ],\n ['propertyNames', Schema.ofRef(SCHEMA_ROOT_PATH)],\n ['minProperties', Schema.ofInteger('minProperties')],\n ['maxProperties', Schema.ofInteger('maxProperties')],\n [\n 'patternProperties',\n Schema.of('patternProperties', SchemaType.OBJECT).setAdditionalProperties(\n new AdditionalType().setSchemaValue(Schema.ofRef(SCHEMA_ROOT_PATH)),\n ),\n ],\n\n [\n ITEMS_STRING,\n new Schema()\n .setName(ITEMS_STRING)\n .setAnyOf([\n Schema.ofRef(SCHEMA_ROOT_PATH).setName('item'),\n Schema.ofArray('tuple', Schema.ofRef(SCHEMA_ROOT_PATH)),\n ]),\n ],\n\n ['contains', Schema.ofRef(SCHEMA_ROOT_PATH)],\n ['minContains', Schema.ofInteger('minContains')],\n ['maxContains', Schema.ofInteger('maxContains')],\n ['minItems', Schema.ofInteger('minItems')],\n ['maxItems', Schema.ofInteger('maxItems')],\n ['uniqueItems', Schema.ofBoolean('uniqueItems')],\n [\n 'additionalItems',\n new Schema()\n .setName(ADDITIONAL_ITEMS)\n .setNamespace(Namespaces.SYSTEM)\n .setAnyOf([\n Schema.ofBoolean(ADDITIONAL_ITEMS),\n Schema.ofObject(ADDITIONAL_ITEMS).setRef(SCHEMA_ROOT_PATH),\n ]),\n ],\n [\n '$defs',\n Schema.of('$defs', SchemaType.OBJECT).setAdditionalProperties(\n new AdditionalType().setSchemaValue(Schema.ofRef(SCHEMA_ROOT_PATH)),\n ),\n ],\n\n ['permission', Schema.ofString('permission')],\n ]),\n )\n .setRequired([]);\n\n public static ofString(id: string): Schema {\n return new Schema().setType(TypeUtil.of(SchemaType.STRING)).setName(id);\n }\n\n public static ofInteger(id: string): Schema {\n return new Schema().setType(TypeUtil.of(SchemaType.INTEGER)).setName(id);\n }\n\n public static ofFloat(id: string): Schema {\n return new Schema().setType(TypeUtil.of(SchemaType.FLOAT)).setName(id);\n }\n\n public static ofLong(id: string): Schema {\n return new Schema().setType(TypeUtil.of(SchemaType.LONG)).setName(id);\n }\n\n public static ofDouble(id: string): Schema {\n return new Schema().setType(TypeUtil.of(SchemaType.DOUBLE)).setName(id);\n }\n\n public static ofAny(id: string): Schema {\n return new Schema()\n .setType(\n TypeUtil.of(\n SchemaType.INTEGER,\n SchemaType.LONG,\n SchemaType.FLOAT,\n SchemaType.DOUBLE,\n SchemaType.STRING,\n SchemaType.BOOLEAN,\n SchemaType.ARRAY,\n SchemaType.NULL,\n SchemaType.OBJECT,\n ),\n )\n .setName(id);\n }\n\n public static ofAnyNotNull(id: string): Schema {\n return new Schema()\n .setType(\n TypeUtil.of(\n SchemaType.INTEGER,\n SchemaType.LONG,\n SchemaType.FLOAT,\n SchemaType.DOUBLE,\n SchemaType.STRING,\n SchemaType.BOOLEAN,\n SchemaType.ARRAY,\n SchemaType.OBJECT,\n ),\n )\n .setName(id);\n }\n\n public static ofNumber(id: string): Schema {\n return new Schema()\n .setType(\n TypeUtil.of(\n SchemaType.INTEGER,\n SchemaType.LONG,\n SchemaType.FLOAT,\n SchemaType.DOUBLE,\n ),\n )\n .setName(id);\n }\n\n public static ofBoolean(id: string): Schema {\n return new Schema().setType(TypeUtil.of(SchemaType.BOOLEAN)).setName(id);\n }\n\n public static of(id: string, ...types: SchemaType[]): Schema {\n return new Schema().setType(TypeUtil.of(...types)).setName(id);\n }\n\n public static ofObject(id: string): Schema {\n return new Schema().setType(TypeUtil.of(SchemaType.OBJECT)).setName(id);\n }\n\n public static ofRef(ref: string): Schema {\n return new Schema().setRef(ref);\n }\n\n public static ofArray(id: string, ...itemSchemas: Schema[]): Schema {\n return new Schema()\n .setType(TypeUtil.of(SchemaType.ARRAY))\n .setName(id)\n .setItems(ArraySchemaType.of(...itemSchemas));\n }\n\n public static fromListOfSchemas(list: any): Schema[] | undefined {\n if (isNullValue(list) && !Array.isArray(list)) return undefined;\n let x: Schema[] = [];\n for (let e of Array.from(list)) {\n let v = Schema.from(e);\n if (!v) continue;\n x.push(v);\n }\n\n return x;\n }\n\n public static fromMapOfSchemas(map: any): Map<string, Schema> | undefined {\n if (isNullValue(map)) return undefined;\n const retMap = new Map<string, Schema>();\n\n Object.entries(map).forEach(([k, v]) => {\n let value = Schema.from(v);\n if (!value) return;\n retMap.set(k, value);\n });\n\n return retMap;\n }\n\n public static from(obj: any, isStringSchema: boolean = false): Schema | undefined {\n if (isNullValue(obj)) return undefined;\n\n let schema: Schema = new Schema();\n schema.namespace = obj.namespace ?? TEMPORARY;\n schema.name = obj.name;\n\n schema.version = obj.version ?? 1;\n\n schema.ref = obj.ref;\n\n if (!isStringSchema) schema.type = TypeUtil.from(obj.type);\n else schema.type = new SingleType(SchemaType.STRING);\n\n schema.anyOf = Schema.fromListOfSchemas(obj.anyOf);\n schema.allOf = Schema.fromListOfSchemas(obj.allOf);\n schema.oneOf = Schema.fromListOfSchemas(obj.oneOf);\n schema.not = Schema.from(obj.not);\n\n schema.description = obj.description;\n schema.examples = obj.examples ? [...obj.examples] : undefined;\n schema.defaultValue = obj.defaultValue;\n schema.comment = obj.comment;\n schema.enums = obj.enums ? [...obj.enums] : undefined;\n schema.constant = obj.constant;\n\n // String\n schema.pattern = obj.pattern;\n schema.format = obj.format;\n schema.minLength = obj.minLength;\n schema.maxLength = obj.maxLength;\n\n // Number\n schema.multipleOf = obj.multipleOf;\n schema.minimum = obj.minimum;\n schema.maximum = obj.maximum;\n schema.exclusiveMinimum = obj.exclusiveMinimum;\n schema.exclusiveMaximum = obj.exclusiveMaximum;\n\n // Object\n schema.properties = Schema.fromMapOfSchemas(obj.properties);\n schema.additionalProperties = AdditionalType.from(obj.additionalProperties);\n schema.required = obj.required;\n schema.propertyNames = Schema.from(obj.propertyNames, true);\n schema.minProperties = obj.minProperties;\n schema.maxProperties = obj.maxProperties;\n schema.patternProperties = Schema.fromMapOfSchemas(obj.patternProperties);\n\n // Array\n schema.items = ArraySchemaType.from(obj.items);\n schema.additionalItems = AdditionalType.from(obj.additionalItems);\n schema.contains = Schema.from(obj.contains);\n schema.minContains = obj.minContains;\n schema.maxContains = obj.maxContains;\n schema.minItems = obj.minItems;\n schema.maxItems = obj.maxItems;\n schema.uniqueItems = obj.uniqueItems;\n\n schema.$defs = Schema.fromMapOfSchemas(obj.$defs);\n schema.permission = obj.permission;\n\n return schema;\n }\n\n private namespace: string = TEMPORARY;\n private name?: string;\n\n private version: number = 1;\n\n private ref?: string;\n\n private type?: Type;\n private anyOf?: Schema[];\n private allOf?: Schema[];\n private oneOf?: Schema[];\n private not?: Schema;\n\n private description?: string;\n private examples?: any[];\n private defaultValue?: any;\n private comment?: string;\n private enums?: any[];\n private constant?: any;\n\n // String\n private pattern?: string;\n private format?: StringFormat;\n private minLength?: number;\n private maxLength?: number;\n\n // Number\n private multipleOf?: number;\n private minimum?: number;\n private maximum?: number;\n private exclusiveMinimum?: number;\n private exclusiveMaximum?: number;\n\n // Object\n private properties?: Map<string, Schema>;\n private additionalProperties?: AdditionalType;\n private required?: string[];\n private propertyNames?: Schema;\n private minProperties?: number;\n private maxProperties?: number;\n private patternProperties?: Map<string, Schema>;\n\n // Array\n private items?: ArraySchemaType;\n private additionalItems?: AdditionalType;\n private contains?: Schema;\n private minContains?: number;\n private maxContains?: number;\n private minItems?: number;\n private maxItems?: number;\n private uniqueItems?: boolean;\n\n private $defs?: Map<string, Schema>;\n private permission?: string;\n\n public constructor(schema?: Schema) {\n if (!schema) return;\n\n this.namespace = schema.namespace;\n this.name = schema.name;\n\n this.version = schema.version;\n this.ref = schema.ref;\n\n this.type =\n schema.type instanceof SingleType\n ? new SingleType(schema.type as SingleType)\n : new MultipleType(schema.type as MultipleType);\n\n this.anyOf = schema.anyOf?.map((x) => new Schema(x));\n\n this.allOf = schema.allOf?.map((x) => new Schema(x));\n this.oneOf = schema.oneOf?.map((x) => new Schema(x));\n\n this.not = this.not ? new Schema(this.not) : undefined;\n\n this.description = schema.description;\n this.examples = schema.examples ? JSON.parse(JSON.stringify(schema.examples)) : undefined;\n\n this.defaultValue = schema.defaultValue\n ? JSON.parse(JSON.stringify(schema.defaultValue))\n : undefined;\n this.comment = schema.comment;\n this.enums = schema.enums ? [...schema.enums] : undefined;\n this.constant = schema.constant ? JSON.parse(JSON.stringify(schema.constant)) : undefined;\n\n this.pattern = schema.pattern;\n this.format = schema.format;\n\n this.minLength = schema.minLength;\n this.maxLength = schema.maxLength;\n\n this.multipleOf = schema.multipleOf;\n this.minimum = schema.minimum;\n this.maximum = schema.maximum;\n this.exclusiveMinimum = schema.exclusiveMinimum;\n this.exclusiveMaximum = schema.exclusiveMaximum;\n\n this.properties = schema.properties\n ? new Map(Array.from(schema.properties.entries()).map((e) => [e[0], new Schema(e[1])]))\n : undefined;\n\n this.additionalProperties = schema.additionalProperties\n ? new AdditionalType(schema.additionalProperties)\n : undefined;\n\n this.required = schema.required ? [...schema.required] : undefined;\n\n this.propertyNames = schema.propertyNames ? new Schema(schema.propertyNames) : undefined;\n this.minProperties = schema.minProperties;\n this.maxProperties = schema.maxProperties;\n\n this.patternProperties = schema.patternProperties\n ? new Map(\n Array.from(schema.patternProperties.entries()).map((e) => [\n e[0],\n new Schema(e[1]),\n ]),\n )\n : undefined;\n\n this.items = schema.items ? new ArraySchemaType(schema.items) : undefined;\n this.contains = schema.contains ? new Schema(this.contains) : undefined;\n this.minContains = schema.minContains;\n this.maxContains = schema.maxContains;\n this.minItems = schema.minItems;\n this.maxItems = schema.maxItems;\n this.uniqueItems = schema.uniqueItems;\n this.additionalItems = schema.additionalItems\n ? new AdditionalType(schema.additionalItems)\n : undefined;\n\n this.$defs = schema.$defs\n ? new Map(Array.from(schema.$defs.entries()).map((e) => [e[0], new Schema(e[1])]))\n : undefined;\n\n this.permission = schema.permission;\n }\n\n public getTitle(): string | undefined {\n if (!this.namespace || this.namespace == TEMPORARY) return this.name;\n\n return this.namespace + '.' + this.name;\n }\n\n public getFullName(): string {\n return this.namespace + '.' + this.name;\n }\n\n public get$defs(): Map<string, Schema> | undefined {\n return this.$defs;\n }\n\n public set$defs($defs: Map<string, Schema>): Schema {\n this.$defs = $defs;\n return this;\n }\n\n public getNamespace(): string {\n return this.namespace;\n }\n public setNamespace(namespace: string): Schema {\n this.namespace = namespace;\n return this;\n }\n public getName(): string | undefined {\n return this.name;\n }\n public setName(name: string): Schema {\n this.name = name;\n return this;\n }\n public getVersion(): number {\n return this.version;\n }\n public setVersion(version: number): Schema {\n this.version = version;\n return this;\n }\n public getRef(): string | undefined {\n return this.ref;\n }\n public setRef(ref: string): Schema {\n this.ref = ref;\n return this;\n }\n public getType(): Type | undefined {\n return this.type;\n }\n public setType(type: Type): Schema {\n this.type = type;\n return this;\n }\n public getAnyOf(): Schema[] | undefined {\n return this.anyOf;\n }\n public setAnyOf(anyOf: Schema[]): Schema {\n this.anyOf = anyOf;\n return this;\n }\n public getAllOf(): Schema[] | undefined {\n return this.allOf;\n }\n public setAllOf(allOf: Schema[]): Schema {\n this.allOf = allOf;\n return this;\n }\n public getOneOf(): Schema[] | undefined {\n return this.oneOf;\n }\n public setOneOf(oneOf: Schema[]): Schema {\n this.oneOf = oneOf;\n return this;\n }\n public getNot(): Schema | undefined {\n return this.not;\n }\n public setNot(not: Schema): Schema {\n this.not = not;\n return this;\n }\n public getDescription(): string | undefined {\n return this.description;\n }\n public setDescription(description: string): Schema {\n this.description = description;\n return this;\n }\n public getExamples(): any[] | undefined {\n return this.examples;\n }\n public setExamples(examples: any[]): Schema {\n this.examples = examples;\n return this;\n }\n public getDefaultValue(): any {\n return this.defaultValue;\n }\n public setDefaultValue(defaultValue: any): Schema {\n this.defaultValue = defaultValue;\n return this;\n }\n public getComment(): string | undefined {\n return this.comment;\n }\n public setComment(comment: string): Schema {\n this.comment = comment;\n return this;\n }\n public getEnums(): any[] | undefined {\n return this.enums;\n }\n public setEnums(enums: any[]): Schema {\n this.enums = enums;\n return this;\n }\n public getConstant(): any {\n return this.constant;\n }\n public setConstant(constant: any): Schema {\n this.constant = constant;\n return this;\n }\n public getPattern(): string | undefined {\n return this.pattern;\n }\n public setPattern(pattern: string): Schema {\n this.pattern = pattern;\n return this;\n }\n public getFormat(): StringFormat | undefined {\n return this.format;\n }\n public setFormat(format: StringFormat): Schema {\n this.format = format;\n return this;\n }\n public getMinLength(): number | undefined {\n return this.minLength;\n }\n public setMinLength(minLength: number): Schema {\n this.minLength = minLength;\n return this;\n }\n public getMaxLength(): number | undefined {\n return this.maxLength;\n }\n public setMaxLength(maxLength: number): Schema {\n this.maxLength = maxLength;\n return this;\n }\n public getMultipleOf(): number | undefined {\n return this.multipleOf;\n }\n public setMultipleOf(multipleOf: number): Schema {\n this.multipleOf = multipleOf;\n return this;\n }\n public getMinimum(): number | undefined {\n return this.minimum;\n }\n public setMinimum(minimum: number): Schema {\n this.minimum = minimum;\n return this;\n }\n public getMaximum(): number | undefined {\n return this.maximum;\n }\n public setMaximum(maximum: number): Schema {\n this.maximum = maximum;\n return this;\n }\n public getExclusiveMinimum(): number | undefined {\n return this.exclusiveMinimum;\n }\n public setExclusiveMinimum(exclusiveMinimum: number): Schema {\n this.exclusiveMinimum = exclusiveMinimum;\n return this;\n }\n public getExclusiveMaximum(): number | undefined {\n return this.exclusiveMaximum;\n }\n public setExclusiveMaximum(exclusiveMaximum: number): Schema {\n this.exclusiveMaximum = exclusiveMaximum;\n return this;\n }\n public getProperties(): Map<string, Schema> | undefined {\n return this.properties;\n }\n public setProperties(properties: Map<string, Schema>): Schema {\n this.properties = properties;\n return this;\n }\n public getAdditionalProperties(): AdditionalType | undefined {\n return this.additionalProperties;\n }\n public setAdditionalProperties(additionalProperties: AdditionalType): Schema {\n this.additionalProperties = additionalProperties;\n return this;\n }\n\n public getAdditionalItems(): AdditionalType | undefined {\n return this.additionalItems;\n }\n public setAdditionalItems(additionalItems: AdditionalType): Schema {\n this.additionalItems = additionalItems;\n return this;\n }\n\n public getRequired(): string[] | undefined {\n return this.required;\n }\n public setRequired(required: string[]): Schema {\n this.required = required;\n return this;\n }\n public getPropertyNames(): Schema | undefined {\n return this.propertyNames;\n }\n public setPropertyNames(propertyNames: Schema): Schema {\n this.propertyNames = propertyNames;\n this.propertyNames.type = new SingleType(SchemaType.STRING);\n return this;\n }\n public getMinProperties(): number | undefined {\n return this.minProperties;\n }\n public setMinProperties(minProperties: number): Schema {\n this.minProperties = minProperties;\n return this;\n }\n public getMaxProperties(): number | undefined {\n return this.maxProperties;\n }\n public setMaxProperties(maxProperties: number): Schema {\n this.maxProperties = maxProperties;\n return this;\n }\n public getPatternProperties(): Map<string, Schema> | undefined {\n return this.patternProperties;\n }\n public setPatternProperties(patternProperties: Map<string, Schema>): Schema {\n this.patternProperties = patternProperties;\n return this;\n }\n public getItems(): ArraySchemaType | undefined {\n return this.items;\n }\n public setItems(items: ArraySchemaType): Schema {\n this.items = items;\n return this;\n }\n public getContains(): Schema | undefined {\n return this.contains;\n }\n public setContains(contains: Schema): Schema {\n this.contains = contains;\n return this;\n }\n\n public getMinContains(): number | undefined {\n return this.minContains;\n }\n\n public setMinContains(minContains: number): Schema {\n this.minContains = minContains;\n return this;\n }\n\n public getMaxContains(): number | undefined {\n return this.maxContains;\n }\n\n public setMaxContains(maxContains: number): Schema {\n this.maxContains = maxContains;\n return this;\n }\n\n public getMinItems(): number | undefined {\n return this.minItems;\n }\n public setMinItems(minItems: number): Schema {\n this.minItems = minItems;\n return this;\n }\n public getMaxItems(): number | undefined {\n return this.maxItems;\n }\n public setMaxItems(maxItems: number): Schema {\n this.maxItems = maxItems;\n return this;\n }\n public getUniqueItems(): boolean | undefined {\n return this.uniqueItems;\n }\n public setUniqueItems(uniqueItems: boolean): Schema {\n this.uniqueItems = uniqueItems;\n return this;\n }\n public getPermission(): string | undefined {\n return this.permission;\n }\n public setPermission(permission: string): Schema {\n this.permission = permission;\n return this;\n }\n}\n","export class SchemaReferenceException extends Error {\n private schemaPath: string;\n private cause?: Error;\n\n constructor(schemaPath: string, message: string, err?: Error) {\n super(schemaPath.trim() ? schemaPath + '-' + message : message);\n\n this.schemaPath = schemaPath;\n this.cause = err;\n }\n\n public getSchemaPath(): string {\n return this.schemaPath;\n }\n\n public getCause(): Error | undefined {\n return this.cause;\n }\n}\n","export enum ParameterType {\n CONSTANT = 'CONSTANT',\n EXPRESSION = 'EXPRESSION',\n}\n","import { Schema } from '../json/schema/Schema';\nimport { SchemaType } from '../json/schema/type/SchemaType';\nimport { TypeUtil } from '../json/schema/type/TypeUtil';\nimport { SchemaReferenceException } from '../json/schema/validator/exception/SchemaReferenceException';\nimport { Namespaces } from '../namespaces/Namespaces';\nimport { ParameterType } from './ParameterType';\n\nconst VALUE: string = 'value';\n\nexport class Parameter {\n private static readonly SCHEMA_NAME: string = 'Parameter';\n\n public static readonly SCHEMA: Schema = new Schema()\n .setNamespace(Namespaces.SYSTEM)\n .setName(Parameter.SCHEMA_NAME)\n .setProperties(\n new Map([\n ['schema', Schema.SCHEMA],\n ['parameterName', Schema.ofString('parameterName')],\n [\n 'variableArgument',\n Schema.of('variableArgument', SchemaType.BOOLEAN).setDefaultValue(false),\n ],\n ['type', Schema.ofString('type').setEnums(['EXPRESSION', 'CONSTANT'])],\n ]),\n );\n\n // Place holder for the expression parameter when required to represent an expression in the value.\n public static readonly EXPRESSION: Schema = new Schema()\n .setNamespace(Namespaces.SYSTEM)\n .setName('ParameterExpression')\n .setType(TypeUtil.of(SchemaType.OBJECT))\n .setProperties(\n new Map([\n ['isExpression', Schema.ofBoolean('isExpression').setDefaultValue(true)],\n [VALUE, Schema.ofAny(VALUE)],\n ]),\n );\n\n private schema: Schema;\n\n private parameterName: string;\n private variableArgument: boolean = false;\n private type: ParameterType = ParameterType.EXPRESSION;\n\n constructor(pn: string | Parameter, schema?: Schema) {\n if (pn instanceof Parameter) {\n this.schema = new Schema(pn.schema);\n this.parameterName = pn.parameterName;\n this.variableArgument = pn.variableArgument;\n this.type = pn.type;\n } else {\n if (!schema) {\n throw new Error('Unknown constructor signature');\n }\n this.schema = schema;\n this.parameterName = pn;\n }\n }\n\n public getSchema(): Schema {\n return this.schema;\n }\n public setSchema(schema: Schema): Parameter {\n this.schema = schema;\n return this;\n }\n public getParameterName(): string {\n return this.parameterName;\n }\n public setParameterName(parameterName: string): Parameter {\n this.parameterName = parameterName;\n return this;\n }\n public isVariableArgument(): boolean {\n return this.variableArgument;\n }\n public setVariableArgument(variableArgument: boolean): Parameter {\n this.variableArgument = variableArgument;\n return this;\n }\n public getType(): ParameterType {\n return this.type;\n }\n public setType(type: ParameterType): Parameter {\n this.type = type;\n return this;\n }\n\n public static ofEntry(\n name: string,\n schema: Schema,\n variableArgument: boolean = false,\n type: ParameterType = ParameterType.EXPRESSION,\n ): [string, Parameter] {\n return [\n name,\n new Parameter(name, schema).setType(type).setVariableArgument(variableArgument),\n ];\n }\n\n public static of(\n name: string,\n schema: Schema,\n variableArgument: boolean = false,\n type: ParameterType = ParameterType.EXPRESSION,\n ): Parameter {\n return new Parameter(name, schema).setType(type).setVariableArgument(variableArgument);\n }\n\n public static from(json: any): Parameter {\n const paramSchema = Schema.from(json.schema);\n if (!paramSchema) throw new SchemaReferenceException('', 'Parameter requires Schema');\n return new Parameter(json.parameterName, paramSchema)\n .setVariableArgument(!!json.variableArguments)\n .setType(json.type ?? ParameterType.EXPRESSION);\n }\n}\n","import { Schema } from '../json/schema/Schema';\nimport { Parameter } from '../model/Parameter';\nimport { Namespaces } from '../namespaces/Namespaces';\nimport { Repository } from '../Repository';\n\nconst map: Map<string, Schema> = new Map([\n ['any', Schema.ofAny('any').setNamespace(Namespaces.SYSTEM)],\n ['boolean', Schema.ofBoolean('boolean').setNamespace(Namespaces.SYSTEM)],\n ['double', Schema.ofDouble('double').setNamespace(Namespaces.SYSTEM)],\n ['float', Schema.ofFloat('float').setNamespace(Namespaces.SYSTEM)],\n ['integer', Schema.ofInteger('integer').setNamespace(Namespaces.SYSTEM)],\n ['long', Schema.ofLong('long').setNamespace(Namespaces.SYSTEM)],\n ['number', Schema.ofNumber('number').setNamespace(Namespaces.SYSTEM)],\n ['string', Schema.ofString('string').setNamespace(Namespaces.SYSTEM)],\n [Parameter.EXPRESSION.getName()!, Parameter.EXPRESSION],\n [Schema.NULL.getName()!, Schema.NULL],\n [Schema.SCHEMA.getName()!, Schema.SCHEMA],\n]);\n\nconst filterableNames = Array.from(map.values()).map((e) => e.getFullName());\n\nexport class KIRunSchemaRepository implements Repository<Schema> {\n public find(namespace: string, name: string): Schema | undefined {\n if (Namespaces.SYSTEM != namespace) return undefined;\n\n return map.get(name);\n }\n\n public filter(name: string): string[] {\n return filterableNames.filter((e) => e.toLowerCase().indexOf(name.toLowerCase()) !== -1);\n }\n}\n","import { Function } from '../function/Function';\n\nexport default function mapEntry(fun: Function): [string, Function] {\n return [fun.getSignature().getName(), fun];\n}\n","import { isNullValue } from './NullCheck';\n\nexport class MapUtil {\n public static of<K, V>(\n k1?: K,\n v1?: V,\n k2?: K,\n v2?: V,\n k3?: K,\n v3?: V,\n k4?: K,\n v4?: V,\n k5?: K,\n v5?: V,\n k6?: K,\n v6?: V,\n k7?: K,\n v7?: V,\n k8?: K,\n v8?: V,\n k9?: K,\n v9?: V,\n k10?: K,\n v10?: V,\n ): Map<K, V> {\n const map: Map<K, V> = new Map();\n\n if (!isNullValue(k1) && !isNullValue(v1)) map.set(k1!, v1!);\n\n if (!isNullValue(k2) && !isNullValue(v2)) map.set(k2!, v2!);\n\n if (!isNullValue(k3) && !isNullValue(v3)) map.set(k3!, v3!);\n\n if (!isNullValue(k4) && !isNullValue(v4)) map.set(k4!, v4!);\n\n if (!isNullValue(k5) && !isNullValue(v5)) map.set(k5!, v5!);\n\n if (!isNullValue(k6) && !isNullValue(v6)) map.set(k6!, v6!);\n\n if (!isNullValue(k7) && !isNullValue(v7)) map.set(k7!, v7!);\n\n if (!isNullValue(k8) && !isNullValue(v8)) map.set(k8!, v8!);\n\n if (!isNullValue(k9) && !isNullValue(v9)) map.set(k9!, v9!);\n\n if (!isNullValue(k10) && !isNullValue(v10)) map.set(k10!, v10!);\n\n return map;\n }\n\n public static ofArrayEntries<K, V>(...entry: [K, V][]): Map<K, V> {\n const map: Map<K, V> = new Map();\n\n for (const [k, v] of entry) {\n map.set(k, v);\n }\n\n return map;\n }\n\n public static entry<K, V>(k: K, v: V): MapEntry<K, V> {\n return new MapEntry(k, v);\n }\n\n public static ofEntries<K, V>(...entry: MapEntry<K, V>[]): Map<K, V> {\n const map: Map<K, V> = new Map();\n\n for (const eachEntry of entry) {\n map.set(eachEntry.k, eachEntry.v);\n }\n\n return map;\n }\n\n public static ofEntriesArray<K, V>(...entry: [K, V][]): Map<K, V> {\n const map: Map<K, V> = new Map();\n\n for (let i = 0; i < entry.length; i++) {\n map.set(entry[i][0], entry[i][1]);\n }\n\n return map;\n }\n\n private constructor() {}\n}\n\nexport class MapEntry<K, V> {\n k: K;\n v: V;\n\n public constructor(k: K, v: V) {\n this.k = k;\n this.v = v;\n }\n}\n","import { AdditionalType, Schema } from '../json/schema/Schema';\nimport { SchemaType } from '../json/schema/type/SchemaType';\nimport { TypeUtil } from '../json/schema/type/TypeUtil';\nimport { SchemaReferenceException } from '../json/schema/validator/exception/SchemaReferenceException';\nimport { Namespaces } from '../namespaces/Namespaces';\n\nexport class Event {\n public static readonly OUTPUT: string = 'output';\n public static readonly ERROR: string = 'error';\n public static readonly ITERATION: string = 'iteration';\n public static readonly TRUE: string = 'true';\n public static readonly FALSE: string = 'false';\n public static readonly SCHEMA_NAME: string = 'Event';\n public static readonly SCHEMA: Schema = new Schema()\n .setNamespace(Namespaces.SYSTEM)\n .setName(Event.SCHEMA_NAME)\n .setType(TypeUtil.of(SchemaType.OBJECT))\n .setProperties(\n new Map([\n ['name', Schema.ofString('name')],\n [\n 'parameters',\n Schema.ofObject('parameter').setAdditionalProperties(\n new AdditionalType().setSchemaValue(Schema.SCHEMA),\n ),\n ],\n ]),\n );\n private name: string;\n private parameters: Map<string, Schema>;\n\n constructor(evn: string | Event, parameters?: Map<string, Schema>) {\n if (evn instanceof Event) {\n this.name = evn.name;\n this.parameters = new Map(\n Array.from(evn.parameters.entries()).map((e) => [e[0], new Schema(e[1])]),\n );\n } else {\n this.name = evn;\n if (!parameters) throw new Error('Unknown constructor format');\n this.parameters = parameters;\n }\n }\n\n public getName(): string {\n return this.name;\n }\n public setName(name: string): Event {\n this.name = name;\n return this;\n }\n public getParameters(): Map<string, Schema> {\n return this.parameters;\n }\n public setParameters(parameters: Map<string, Schema>): Event {\n this.parameters = parameters;\n return this;\n }\n\n public static outputEventMapEntry(parameters: Map<string, Schema>): [string, Event] {\n return Event.eventMapEntry(Event.OUTPUT, parameters);\n }\n\n public static eventMapEntry(\n eventName: string,\n parameters: Map<string, Schema>,\n ): [string, Event] {\n return [eventName, new Event(eventName, parameters)];\n }\n\n public static from(json: any): Event {\n return new Event(\n json.name,\n new Map(\n Object.entries(json.parameters ?? {}).map((e: any) => {\n const eventSchema = Schema.from(e[1]);\n if (!eventSchema)\n throw new SchemaReferenceException('', 'Event expects a schema');\n return [e[0], eventSchema];\n }),\n ),\n );\n }\n}\n","import { Event } from './Event';\n\nexport class EventResult {\n private name: string;\n private result: Map<string, any>;\n\n constructor(name: string, result: Map<string, any>) {\n this.name = name;\n this.result = result;\n }\n\n public getName(): string {\n return this.name;\n }\n public setName(name: string): EventResult {\n this.name = name;\n return this;\n }\n public getResult(): Map<string, any> {\n return this.result;\n }\n public setResult(result: Map<string, any>): EventResult {\n this.result = result;\n return this;\n }\n\n public static outputOf(result: Map<string, any>): EventResult {\n return EventResult.of(Event.OUTPUT, result);\n }\n\n public static of(eventName: string, result: Map<string, any>): EventResult {\n return new EventResult(eventName, result);\n }\n}\n","export class KIRuntimeException extends Error {\n private cause?: Error;\n\n constructor(message: string, err?: Error) {\n super(message);\n this.cause = err;\n }\n\n public getCause(): Error | undefined {\n return this.cause;\n }\n}\n","import { KIRuntimeException } from '../exception/KIRuntimeException';\nimport { isNullValue } from '../util/NullCheck';\nimport { EventResult } from './EventResult';\nimport { FunctionOutputGenerator } from './FunctionOutputGenerator';\n\nexport class FunctionOutput {\n private fo: EventResult[];\n\n private index: number = 0;\n private generator?: FunctionOutputGenerator;\n\n public constructor(arg: EventResult[] | FunctionOutputGenerator) {\n if (isNullValue(arg)) throw new KIRuntimeException('Function output is generating null');\n\n if (Array.isArray(arg) && arg.length && arg[0] instanceof EventResult) {\n this.fo = arg as EventResult[];\n } else {\n this.fo = [];\n if (!Array.isArray(arg)) this.generator = arg as FunctionOutputGenerator;\n }\n }\n\n public next(): EventResult | undefined {\n if (!this.generator) {\n if (this.index < this.fo.length) return this.fo[this.index++];\n return undefined;\n }\n\n const er: EventResult | undefined = this.generator.next();\n if (er) this.fo.push(er);\n return er;\n }\n\n public allResults(): EventResult[] {\n return this.fo;\n }\n}\n","import { AdditionalType, Schema } from '../json/schema/Schema';\nimport { Namespaces } from '../namespaces/Namespaces';\nimport { Event } from './Event';\nimport { Parameter } from './Parameter';\n\nexport class FunctionSignature {\n private static readonly SCHEMA_NAME: string = 'FunctionSignature';\n public static readonly SCHEMA: Schema = new Schema()\n .setNamespace(Namespaces.SYSTEM)\n .setName(FunctionSignature.SCHEMA_NAME)\n .setProperties(\n new Map([\n ['name', Schema.ofString('name')],\n ['namespace', Schema.ofString('namespace')],\n [\n 'parameters',\n Schema.ofObject('parameters').setAdditionalProperties(\n new AdditionalType().setSchemaValue(Parameter.SCHEMA),\n ),\n ],\n [\n 'events',\n Schema.ofObject('events').setAdditionalProperties(\n new AdditionalType().setSchemaValue(Event.SCHEMA),\n ),\n ],\n ]),\n );\n private namespace: string = '_';\n private name: string;\n private parameters: Map<string, Parameter> = new Map();\n private events: Map<string, Event> = new Map();\n\n constructor(value: string | FunctionSignature) {\n if (value instanceof FunctionSignature) {\n this.name = value.name;\n this.namespace = value.namespace;\n this.parameters = new Map(\n Array.from(value.parameters.entries()).map((e) => [e[0], new Parameter(e[1])]),\n );\n this.events = new Map(\n Array.from(value.events.entries()).map((e) => [e[0], new Event(e[1])]),\n );\n } else {\n this.name = value;\n }\n }\n\n public getNamespace(): string {\n return this.namespace;\n }\n public setNamespace(namespace: string): FunctionSignature {\n this.namespace = namespace;\n return this;\n }\n public getName(): string {\n return this.name;\n }\n public setName(name: string): FunctionSignature {\n this.name = name;\n return this;\n }\n public getParameters(): Map<string, Parameter> {\n return this.parameters;\n }\n public setParameters(parameters: Map<string, Parameter>): FunctionSignature {\n this.parameters = parameters;\n return this;\n }\n public getEvents(): Map<string, Event> {\n return this.events;\n }\n public setEvents(events: Map<string, Event>): FunctionSignature {\n this.events = events;\n return this;\n }\n public getFullName(): string {\n return this.namespace + '.' + this.name;\n }\n}\n","export class StringFormatter {\n public static format(formatString: string, ...params: any[]): string {\n if (!params || params.length == 0) return formatString;\n\n let sb: string = '';\n let ind: number = 0;\n let chr: string = '';\n let prevchar: string = chr;\n let length: number = formatString.length;\n\n for (let i = 0; i < length; i++) {\n chr = formatString.charAt(i);\n\n if (chr == '$' && prevchar == '\\\\') sb = sb.substring(0, i - 1) + chr;\n else if (chr == '$' && ind < params.length) sb += params[ind++];\n else sb += chr;\n\n prevchar = chr;\n }\n\n return sb.toString();\n }\n\n private constructor() {}\n}\n","import { KIRuntimeException } from '../exception/KIRuntimeException';\nimport { deepEqual } from './deepEqual';\nimport { StringFormatter } from './string/StringFormatter';\n\nexport class LinkedList<T> {\n private head?: Node<T> = undefined;\n private tail?: Node<T> = undefined;\n public length: number = 0;\n\n public constructor(list?: T[]) {\n if (list?.length) {\n for (const t of list) {\n if (!this.head) {\n this.tail = this.head = new Node(t);\n } else {\n const node = new Node(t, this.tail);\n this.tail!.next = node;\n this.tail = node;\n }\n }\n this.length = list.length;\n }\n }\n\n public push(value: T) {\n const node = new Node(value, undefined, this.head);\n if (!this.head) {\n this.tail = this.head = node;\n } else {\n this.head.previous = node;\n this.head = node;\n }\n this.length++;\n }\n\n public pop(): T {\n if (!this.head) {\n throw Error('List is empty and cannot pop further.');\n }\n const value: T = this.head!.value;\n this.length--;\n\n if (this.head == this.tail) {\n this.head = this.tail = undefined;\n return value;\n }\n\n const node: Node<T> = this.head!;\n\n this.head = node.next;\n node.next = undefined;\n node.previous = undefined;\n this.head!.previous = undefined;\n return value;\n }\n\n public isEmpty(): boolean {\n return !this.length;\n }\n\n public size(): number {\n return this.length;\n }\n\n public get(index: number): T {\n if (index < 0 || index >= this.length) {\n throw new Error(`${index} is out of bounds [0,${this.length}]`);\n }\n\n let x = this.head;\n while (index > 0) {\n x = this.head!.next;\n --index;\n }\n\n return x!.value;\n }\n\n public set(index: number, value: T): LinkedList<T> {\n if (index < 0 || index >= this.length)\n throw new KIRuntimeException(\n StringFormatter.format(\n 'Index $ out of bound to set the value in linked list.',\n index,\n ),\n );\n\n let x = this.head;\n while (index > 0) {\n x = this.head!.next;\n --index;\n }\n x!.value = value;\n return this;\n }\n\n public toString(): string {\n let x = this.head;\n let str: string = '';\n\n while (x) {\n str += x.value;\n x = x.next;\n if (x) str += ', ';\n }\n\n return `[${str}]`;\n }\n\n public toArray(): T[] {\n let arr: T[] = [];\n\n let x = this.head;\n\n while (x) {\n arr.push(x.value);\n x = x.next;\n }\n\n return arr;\n }\n\n public peek(): T {\n if (!this.head) {\n throw new Error('List is empty so cannot peak');\n }\n\n return this.head.value;\n }\n\n public peekLast(): T {\n if (!this.tail) {\n throw new Error('List is empty so cannot peak');\n }\n return this.tail.value;\n }\n\n public getFirst(): T {\n if (!this.head) {\n throw new Error('List is empty so cannot get first');\n }\n return this.head.value;\n }\n\n public removeFirst(): T {\n return this.pop();\n }\n\n public removeLast(): T {\n if (!this.tail) {\n throw new Error('List is empty so cannot remove');\n }\n --this.length;\n const v: T = this.tail.value;\n if (this.length == 0) {\n this.head = this.tail = undefined;\n } else {\n const n = this.tail.previous;\n n!.next = undefined;\n this.tail.previous = undefined;\n this.tail = n;\n }\n\n return v;\n }\n\n public addAll(list: T[]): LinkedList<T> {\n if (!list || !list.length) return this;\n list.forEach(this.add.bind(this));\n return this;\n }\n\n public add(t: T): LinkedList<T> {\n ++this.length;\n if (!this.tail && !this.head) {\n this.head = this.tail = new Node(t);\n } else if (this.head === this.tail) {\n this.tail = new Node(t, this.head);\n this.head!.next = this.tail;\n } else {\n this.tail = new Node(t, this.tail);\n this.tail.previous!.next = this.tail;\n }\n return this;\n }\n\n public map<U>(callbackfn: (value: T, index: number) => U, thisArg?: any): LinkedList<U> {\n let newList: LinkedList<U> = new LinkedList();\n\n let x = this.head;\n\n let index: number = 0;\n while (x) {\n newList.add(callbackfn(x.value, index));\n x = x.next;\n ++index;\n }\n\n return newList;\n }\n\n public indexOf(value: T): number {\n let x = this.head;\n\n let index: number = 0;\n while (x) {\n if (deepEqual(x.value, value)) return index;\n x = x.next;\n ++index;\n }\n\n return -1;\n }\n\n public forEach(callbackfn: (value: T, index: number) => void, thisArg?: any): void {\n let x = this.head;\n let index: number = 0;\n while (x) {\n callbackfn(x.value, index);\n x = x.next;\n ++index;\n }\n }\n}\n\nclass Node<T> {\n public value: T;\n public next?: Node<T>;\n public previous?: Node<T>;\n\n constructor(t: T, previous?: Node<T>, next?: Node<T>) {\n this.value = t;\n this.next = next;\n this.previous = previous;\n }\n\n public toString(): string {\n return '' + this.value;\n }\n}\n","import { LinkedList } from './LinkedList';\n\nexport function deepEqual(x: any, y: any) {\n let xa = new LinkedList();\n xa.push(x);\n let yb = new LinkedList();\n yb.push(y);\n\n while (!xa.isEmpty() && !yb.isEmpty()) {\n const a: any = xa.pop();\n const b: any = yb.pop();\n\n if (a === b) continue;\n\n const typeOfA = typeof a;\n const typeOfB = typeof b;\n\n if (typeOfA === 'undefined' || typeOfB === 'undefined') {\n if (!a && !b) continue;\n return false;\n }\n\n if (typeOfA !== typeOfB) return false;\n\n if (Array.isArray(a)) {\n if (!Array.isArray(b) || a.length != b.length) return false;\n for (let i = 0; i < a.length; i++) {\n xa.push(a[i]);\n yb.push(b[i]);\n }\n continue;\n }\n\n if (typeOfA === 'object') {\n const entriesOfA = Object.entries(a);\n const entriesOfB = Object.entries(b);\n if (entriesOfA.length !== entriesOfB.length) return false;\n for (const [k, v] of entriesOfA) {\n xa.push(v);\n yb.push(b[k]);\n }\n\n continue;\n }\n return false;\n }\n\n return true;\n}\n","import { KIRuntimeException } from '../../exception/KIRuntimeException';\nimport { StringFormatter } from './StringFormatter';\n\nexport class StringUtil {\n private constructor() {}\n\n public static nthIndex(str: string, c: string, from: number = 0, occurance: number): number {\n if (!str) throw new KIRuntimeException('String cannot be null');\n\n if (from < 0 || from >= str.length)\n throw new KIRuntimeException(\n StringFormatter.format('Cannot search from index : $', from),\n );\n\n if (occurance <= 0 || occurance > str.length)\n throw new KIRuntimeException(\n StringFormatter.format('Cannot search for occurance : $', occurance),\n );\n\n while (from < str.length) {\n if (str.charAt(from) == c) {\n --occurance;\n if (occurance == 0) return from;\n }\n\n ++from;\n }\n\n return -1;\n }\n\n public static splitAtFirstOccurance(\n str: string,\n c: string,\n ): [string | undefined, string | undefined] {\n if (!str) return [undefined, undefined];\n\n let index: number = str.indexOf(c);\n\n if (index == -1) return [str, undefined];\n\n return [str.substring(0, index), str.substring(index + 1)];\n }\n\n public static isNullOrBlank(str: string | undefined): boolean {\n return !str || str.trim() == '';\n }\n}\n","export class Tuple2<F, S> {\n protected f: F;\n protected s: S;\n\n constructor(f: F, s: S) {\n this.f = f;\n this.s = s;\n }\n\n public getT1(): F {\n return this.f;\n }\n\n public getT2(): S {\n return this.s;\n }\n\n public setT1(f: F): Tuple2<F, S> {\n this.f = f;\n return this;\n }\n\n public setT2(s: S): Tuple2<F, S> {\n this.s = s;\n return this;\n }\n}\n\nexport class Tuple3<F, S, T> extends Tuple2<F, S> {\n protected t: T;\n\n constructor(f: F, s: S, t: T) {\n super(f, s);\n this.t = t;\n }\n\n public getT3(): T {\n return this.t;\n }\n\n public setT1(f: F): Tuple3<F, S, T> {\n this.f = f;\n return this;\n }\n\n public setT2(s: S): Tuple3<F, S, T> {\n this.s = s;\n return this;\n }\n\n public setT3(t: T): Tuple3<F, S, T> {\n this.t = t;\n return this;\n }\n}\n\nexport class Tuple4<F, S, T, FR> extends Tuple3<F, S, T> {\n protected fr: FR;\n\n constructor(f: F, s: S, t: T, fr: FR) {\n super(f, s, t);\n this.fr = fr;\n }\n\n public getT4(): FR {\n return this.fr;\n }\n\n public setT1(f: F): Tuple4<F, S, T, FR> {\n this.f = f;\n return this;\n }\n\n public setT2(s: S): Tuple4<F, S, T, FR> {\n this.s = s;\n return this;\n }\n\n public setT3(t: T): Tuple4<F, S, T, FR> {\n this.t = t;\n return this;\n }\n\n public setT4(fr: FR): Tuple4<F, S, T, FR> {\n this.fr = fr;\n return this;\n }\n}\n","export class SchemaValidationException extends Error {\n private schemaPath: string;\n private cause?: Error;\n constructor(\n schemaPath: string,\n message: string,\n sve: SchemaValidationException[] = [],\n err?: Error,\n ) {\n super(message + (sve ? sve.map((e) => e.message).reduce((a, c) => a + '\\n' + c, '') : ''));\n this.schemaPath = schemaPath;\n this.cause = err;\n }\n\n public getSchemaPath(): string {\n return this.schemaPath;\n }\n\n public getCause(): Error | undefined {\n return this.cause;\n }\n}\n","import { Repository } from '../../Repository';\nimport { isNullValue } from '../../util/NullCheck';\nimport { StringUtil } from '../../util/string/StringUtil';\nimport { Tuple2 } from '../../util/Tuples';\nimport { Schema } from './Schema';\nimport { SchemaType } from './type/SchemaType';\nimport { SchemaReferenceException } from './validator/exception/SchemaReferenceException';\nimport { SchemaValidationException } from './validator/exception/SchemaValidationException';\n\nexport class SchemaUtil {\n private static readonly UNABLE_TO_RETRIVE_SCHEMA_FROM_REFERENCED_PATH: string =\n 'Unable to retrive schema from referenced path';\n\n private static readonly CYCLIC_REFERENCE_LIMIT_COUNTER: number = 20;\n\n public static getDefaultValue(\n s: Schema | undefined,\n sRepository: Repository<Schema> | undefined,\n ): any {\n if (!s) return undefined;\n\n if (s.getConstant()) return s.getConstant();\n\n if (!isNullValue(s.getDefaultValue())) return s.getDefaultValue();\n\n return SchemaUtil.getDefaultValue(\n SchemaUtil.getSchemaFromRef(s, sRepository, s.getRef()),\n sRepository,\n );\n }\n\n public static hasDefaultValueOrNullSchemaType(\n s: Schema | undefined,\n sRepository: Repository<Schema> | undefined,\n ): boolean {\n if (!s) return false;\n if (s.getConstant()) return true;\n\n if (!isNullValue(s.getDefaultValue())) return true;\n\n if (isNullValue(s.getRef())) {\n if (s.getType()?.getAllowedSchemaTypes().has(SchemaType.NULL)) return true;\n return false;\n }\n\n return this.hasDefaultValueOrNullSchemaType(\n SchemaUtil.getSchemaFromRef(s, sRepository, s.getRef()),\n sRepository,\n );\n }\n\n public static getSchemaFromRef(\n schema: Schema,\n sRepository: Repository<Schema> | undefined,\n ref: string | undefined,\n iteration: number = 0,\n ): Schema | undefined {\n iteration++;\n if (iteration == SchemaUtil.CYCLIC_REFERENCE_LIMIT_COUNTER)\n throw new SchemaValidationException(ref ?? '', 'Schema has a cyclic reference');\n\n if (!schema || !ref || StringUtil.isNullOrBlank(ref)) return undefined;\n\n if (!ref.startsWith('#')) {\n var tuple = SchemaUtil.resolveExternalSchema(schema, sRepository, ref);\n if (tuple) {\n schema = tuple.getT1();\n ref = tuple.getT2();\n }\n }\n\n let parts: string[] = ref.split('/');\n let i: number = 1;\n\n if (i === parts.length) return schema;\n\n return SchemaUtil.resolveInternalSchema(schema, sRepository, ref, iteration, parts, i);\n }\n\n private static resolveInternalSchema(\n inSchema: Schema,\n sRepository: Repository<Schema> | undefined,\n ref: string,\n iteration: number,\n parts: string[],\n i: number,\n ): Schema | undefined {\n let schema: Schema | undefined = inSchema;\n if (i === parts.length) return undefined;\n while (i < parts.length) {\n if (parts[i] === '$defs') {\n i++;\n\n if (i >= parts.length || !schema.get$defs())\n throw new SchemaReferenceException(\n ref,\n SchemaUtil.UNABLE_TO_RETRIVE_SCHEMA_FROM_REFERENCED_PATH,\n );\n\n schema = schema.get$defs()?.get(parts[i]);\n } else {\n if (\n schema &&\n (!schema.getType()?.contains(SchemaType.OBJECT) || !schema.getProperties())\n )\n throw new SchemaReferenceException(\n ref,\n 'Cannot retrievie schema from non Object type schemas',\n );\n\n schema = schema.getProperties()?.get(parts[i]);\n }\n\n i++;\n\n if (!schema)\n throw new SchemaReferenceException(\n ref,\n SchemaUtil.UNABLE_TO_RETRIVE_SCHEMA_FROM_REFERENCED_PATH,\n );\n\n if (!StringUtil.isNullOrBlank(schema.getRef())) {\n schema = SchemaUtil.getSchemaFromRef(\n schema,\n sRepository,\n schema.getRef(),\n iteration,\n );\n if (!schema)\n throw new SchemaReferenceException(\n ref,\n SchemaUtil.UNABLE_TO_RETRIVE_SCHEMA_FROM_REFERENCED_PATH,\n );\n }\n }\n return schema;\n }\n\n private static resolveExternalSchema(\n inSchem: Schema,\n sRepository: Repository<Schema> | undefined,\n ref: string,\n ): Tuple2<Schema, string> | undefined {\n if (!sRepository) return undefined;\n\n let nms = StringUtil.splitAtFirstOccurance(ref ?? '', '/');\n if (!nms[0]) return undefined;\n\n let nmspnm = StringUtil.splitAtFirstOccurance(nms[0], '.');\n if (!nmspnm[0] || !nmspnm[1]) return undefined;\n\n let schema = sRepository.find(nmspnm[0], nmspnm[1]);\n if (!schema) return undefined;\n if (!nms[1] || nms[1] === '') return new Tuple2(schema, ref);\n\n ref = '#/' + nms[1];\n\n if (!schema)\n throw new SchemaReferenceException(\n ref,\n SchemaUtil.UNABLE_TO_RETRIVE_SCHEMA_FROM_REFERENCED_PATH,\n );\n\n return new Tuple2(schema, ref);\n }\n\n private constructor() {}\n}\n","import { Repository } from '../../../Repository';\nimport { Schema } from '../Schema';\nimport { SchemaValidationException } from './exception/SchemaValidationException';\nimport { SchemaValidator } from './SchemaValidator';\n\nexport class AnyOfAllOfOneOfValidator {\n public static validate(\n parents: Schema[],\n schema: Schema,\n repository: Repository<Schema> | undefined,\n element: any,\n ): any {\n let list: SchemaValidationException[] = [];\n if (schema.getOneOf() && !schema.getOneOf()) {\n AnyOfAllOfOneOfValidator.oneOf(parents, schema, repository, element, list);\n } else if (schema.getAllOf() && !schema.getAllOf()) {\n AnyOfAllOfOneOfValidator.allOf(parents, schema, repository, element, list);\n } else if (schema.getAnyOf() && !schema.getAnyOf()) {\n AnyOfAllOfOneOfValidator.anyOf(parents, schema, repository, element, list);\n }\n\n return element;\n }\n\n private static anyOf(\n parents: Schema[],\n schema: Schema,\n repository: Repository<Schema> |undefined,\n element: any,\n list: SchemaValidationException[],\n ) {\n let flag: boolean = false;\n for (let s of schema.getAnyOf() ?? []) {\n try {\n AnyOfAllOfOneOfValidator.validate(parents, s, repository, element);\n flag = true;\n break;\n } catch (err: any) {\n flag = false;\n list.push(err);\n }\n }\n\n if (!flag) {\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n \"The value don't satisfy any of the schemas.\",\n list,\n );\n }\n }\n\n private static allOf(\n parents: Schema[],\n schema: Schema,\n repository: Repository<Schema> | undefined,\n element: any,\n list: SchemaValidationException[],\n ) {\n let flag: number = 0;\n for (let s of schema.getAllOf() ?? []) {\n try {\n AnyOfAllOfOneOfValidator.validate(parents, s, repository, element);\n flag++;\n } catch (err: any) {\n list.push(err);\n }\n }\n\n if (flag !== schema.getAllOf()?.length) {\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n \"The value doesn't satisfy some of the schemas.\",\n list,\n );\n }\n }\n\n private static oneOf(\n parents: Schema[],\n schema: Schema,\n repository: Repository<Schema> | undefined,\n element: any,\n list: SchemaValidationException[],\n ) {\n let flag: number = 0;\n for (let s of schema.getOneOf() ?? []) {\n try {\n AnyOfAllOfOneOfValidator.validate(parents, s, repository, element);\n flag++;\n } catch (err : any) {\n list.push(err);\n }\n }\n\n if (flag != 1) {\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n flag == 0\n ? 'The value does not satisfy any schema'\n : 'The value satisfy more than one schema',\n list,\n );\n }\n }\n\n private constructor() {}\n}\n","import { Repository } from '../../../Repository';\nimport { isNullValue } from '../../../util/NullCheck';\nimport { ArraySchemaType } from '../array/ArraySchemaType';\nimport { Schema } from '../Schema';\nimport { SchemaValidationException } from './exception/SchemaValidationException';\nimport { SchemaValidator } from './SchemaValidator';\n\nexport class ArrayValidator {\n public static validate(\n parents: Schema[],\n schema: Schema,\n repository: Repository<Schema> | undefined,\n element: any,\n ): any {\n if (isNullValue(element))\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n 'Expected an array but found null',\n );\n\n if (!Array.isArray(element))\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n element.toString() + ' is not an Array',\n );\n\n let array: any[] = element as any[];\n\n ArrayValidator.checkMinMaxItems(parents, schema, array);\n\n ArrayValidator.checkItems(parents, schema, repository, array);\n\n ArrayValidator.checkUniqueItems(parents, schema, array);\n\n ArrayValidator.checkContains(schema, parents, repository, array);\n\n return element;\n }\n\n private static checkContains(\n schema: Schema,\n parents: Schema[],\n repository: Repository<Schema> | undefined,\n array: any[],\n ) {\n if (isNullValue(schema.getContains())) return;\n\n let count = ArrayValidator.countContains(\n parents,\n schema,\n repository,\n array,\n isNullValue(schema.getMinContains()) && isNullValue(schema.getMaxContains()),\n );\n\n if (count === 0) {\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n 'None of the items are of type contains schema',\n );\n }\n\n if (!isNullValue(schema.getMinContains()) && schema.getMinContains()! > count)\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n 'The minimum number of the items of type contains schema should be ' +\n schema.getMinContains() +\n ' but found ' +\n count,\n );\n\n if (!isNullValue(schema.getMaxContains()) && schema.getMaxContains()! < count)\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n 'The maximum number of the items of type contains schema should be ' +\n schema.getMaxContains() +\n ' but found ' +\n count,\n );\n }\n\n public static countContains(\n parents: Schema[],\n schema: Schema,\n repository: Repository<Schema> | undefined,\n array: any[],\n stopOnFirst?: boolean,\n ): number {\n let count = 0;\n for (let i = 0; i < array.length; i++) {\n let newParents: Schema[] = !parents ? [] : [...parents];\n\n try {\n SchemaValidator.validate(newParents, schema.getContains(), repository, array[i]);\n count++;\n if (stopOnFirst) break;\n } catch (err) {}\n }\n return count;\n }\n\n public static checkUniqueItems(parents: Schema[], schema: Schema, array: any[]): void {\n if (schema.getUniqueItems() && schema.getUniqueItems()) {\n let set: Set<any> = new Set<any>(array);\n\n if (set.size !== array.length)\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n 'Items on the array are not unique',\n );\n }\n }\n\n public static checkMinMaxItems(parents: Schema[], schema: Schema, array: any[]): void {\n if (schema.getMinItems() && schema.getMinItems()! > array.length) {\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n 'Array should have minimum of ' + schema.getMinItems() + ' elements',\n );\n }\n\n if (schema.getMaxItems() && schema.getMaxItems()! < array.length) {\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n 'Array can have maximum of ' + schema.getMaxItems() + ' elements',\n );\n }\n }\n\n public static checkItems(\n parents: Schema[],\n schema: Schema,\n repository: Repository<Schema> | undefined,\n array: any[],\n ) {\n if (!schema.getItems()) return;\n\n let type: ArraySchemaType = schema.getItems()!;\n\n if (type.getSingleSchema()) {\n for (let i = 0; i < array.length; i++) {\n let newParents: Schema[] = !parents ? [] : [...parents];\n let element: any = SchemaValidator.validate(\n newParents,\n type.getSingleSchema(),\n repository,\n array[i],\n );\n array[i] = element;\n }\n }\n\n if (type.getTupleSchema()) {\n if (\n type.getTupleSchema()!.length !== array.length &&\n isNullValue(schema?.getAdditionalItems())\n ) {\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n 'Expected an array with only ' +\n type.getTupleSchema()!.length +\n ' but found ' +\n array.length,\n );\n }\n\n this.checkItemsInTupleSchema(parents, repository, array, type);\n\n this.checkAdditionalItems(parents, schema, repository, array, type);\n }\n }\n\n private static checkItemsInTupleSchema(\n parents: Schema[],\n repository: Repository<Schema> | undefined,\n array: any[],\n type: ArraySchemaType,\n ) {\n for (let i = 0; i < type.getTupleSchema()?.length!; i++) {\n let newParents: Schema[] = !parents ? [] : [...parents];\n let element: any = SchemaValidator.validate(\n newParents,\n type.getTupleSchema()![i],\n repository,\n array[i],\n );\n array[i] = element;\n }\n }\n\n private static checkAdditionalItems(\n parents: Schema[],\n schema: Schema,\n repository: Repository<Schema> | undefined,\n array: any[],\n type: ArraySchemaType,\n ) {\n if (!isNullValue(schema.getAdditionalItems())) {\n let additionalSchemaType = schema.getAdditionalItems();\n if (additionalSchemaType?.getBooleanValue()) {\n //validate the additional items whether schema is valid or not\n let anySchemaType = Schema.ofAny('item'); // as additional items is true it should validate against any valid schema defined in the system\n if (\n additionalSchemaType?.getBooleanValue() === false &&\n array.length > type.getTupleSchema()?.length!\n )\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n 'No Additional Items are defined',\n );\n\n this.checkEachItemInAdditionalItems(\n parents,\n schema,\n repository,\n array,\n type,\n anySchemaType,\n );\n } else if (additionalSchemaType?.getSchemaValue()) {\n let schemaType = additionalSchemaType.getSchemaValue();\n this.checkEachItemInAdditionalItems(\n parents,\n schema,\n repository,\n array,\n type,\n schemaType,\n );\n }\n }\n }\n\n private static checkEachItemInAdditionalItems(\n parents: Schema[],\n schema: Schema,\n repository: Repository<Schema> | undefined,\n array: any[],\n type: ArraySchemaType,\n schemaType: Schema | undefined,\n ) {\n for (let i = type.getTupleSchema()?.length!; i < array.length; i++) {\n let newParents: Schema[] = !parents ? [] : [...parents];\n let element: any = SchemaValidator.validate(\n newParents,\n schemaType!,\n repository,\n array[i],\n );\n array[i] = element;\n }\n return;\n }\n\n private constructor() {}\n}\n","import { isNullValue } from '../../../util/NullCheck';\nimport { Schema } from '../Schema';\nimport { SchemaValidationException } from './exception/SchemaValidationException';\nimport { SchemaValidator } from './SchemaValidator';\n\nexport class BooleanValidator {\n public static validate(parents: Schema[], schema: Schema, element: any): any {\n if (isNullValue(element))\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n 'Expected a boolean but found null',\n );\n\n if (typeof element !== 'boolean')\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n element.toString() + ' is not a boolean',\n );\n\n return element;\n }\n\n private constructor() {}\n}\n","import { isNullValue } from '../../../util/NullCheck';\nimport { Schema } from '../Schema';\nimport { SchemaValidationException } from './exception/SchemaValidationException';\nimport { SchemaValidator } from './SchemaValidator';\n\nexport class NullValidator {\n public static validate(parents: Schema[], schema: Schema, element: any): any {\n if (isNullValue(element)) return element;\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n 'Expected a null but found ' + element,\n );\n }\n\n private constructor() {}\n}\n","import { isNullValue } from '../../../util/NullCheck';\nimport { Schema } from '../Schema';\nimport { SchemaType } from '../type/SchemaType';\nimport { SchemaValidationException } from './exception/SchemaValidationException';\nimport { SchemaValidator } from './SchemaValidator';\n\nexport class NumberValidator {\n public static validate(type: SchemaType, parents: Schema[], schema: Schema, element: any): any {\n if (isNullValue(element))\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n 'Expected a number but found null',\n );\n\n if (typeof element !== 'number')\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n element.toString() + ' is not a ' + type,\n );\n\n let n: number = NumberValidator.extractNumber(type, parents, schema, element);\n\n NumberValidator.checkRange(parents, schema, element, n);\n\n NumberValidator.checkMultipleOf(parents, schema, element, n);\n\n return element;\n }\n\n private static extractNumber(\n type: SchemaType,\n parents: Schema[],\n schema: Schema,\n element: any,\n ): number {\n let n = element;\n\n try {\n if (type == SchemaType.LONG || type == SchemaType.INTEGER) n = Math.round(n);\n } catch (err: any) {\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n element + ' is not a number of type ' + type,\n err,\n );\n }\n\n if (\n isNullValue(n) ||\n ((type == SchemaType.LONG || type == SchemaType.INTEGER) && n != element)\n ) {\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n element.toString() + ' is not a number of type ' + type,\n );\n }\n\n return n;\n }\n\n private static checkMultipleOf(parents: Schema[], schema: Schema, element: any, n: number) {\n if (schema.getMultipleOf()) {\n let l1: number = n;\n let l2: number = schema.getMultipleOf()!;\n\n if (l1 % l2 != 0)\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n element.toString() + ' is not multiple of ' + schema.getMultipleOf(),\n );\n }\n }\n\n private static checkRange(parents: Schema[], schema: Schema, element: any, n: number) {\n if (schema.getMinimum() && NumberValidator.numberCompare(n, schema.getMinimum()!) < 0) {\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n element.toString() + ' should be greater than or equal to ' + schema.getMinimum(),\n );\n }\n\n if (schema.getMaximum() && NumberValidator.numberCompare(n, schema.getMaximum()!) > 0) {\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n element.toString() + ' should be less than or equal to ' + schema.getMaximum(),\n );\n }\n\n if (\n schema.getExclusiveMinimum() &&\n NumberValidator.numberCompare(n, schema.getExclusiveMinimum()!) <= 0\n ) {\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n element.toString() + ' should be greater than ' + schema.getExclusiveMinimum(),\n );\n }\n\n if (\n schema.getExclusiveMaximum() &&\n NumberValidator.numberCompare(n, schema.getExclusiveMaximum()!) > 0\n ) {\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n element.toString() + ' should be less than ' + schema.getExclusiveMaximum(),\n );\n }\n }\n\n private static numberCompare(n1: number, n2: number): number {\n return n1 - n2;\n }\n\n private constructor() {}\n}\n","import { Repository } from '../../../Repository';\nimport { isNullValue } from '../../../util/NullCheck';\nimport { AdditionalType, Schema } from '../Schema';\nimport { SchemaUtil } from '../SchemaUtil';\nimport { SchemaValidationException } from './exception/SchemaValidationException';\nimport { SchemaValidator } from './SchemaValidator';\n\nexport class ObjectValidator {\n public static validate(\n parents: Schema[],\n schema: Schema,\n repository: Repository<Schema> | undefined,\n element: any,\n ) {\n if (isNullValue(element))\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n 'Expected an object but found null',\n );\n\n if (typeof element !== 'object' || Array.isArray(element))\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n element.toString() + ' is not an Object',\n );\n\n let jsonObject: any = element;\n let keys: Set<string> = new Set<string>(Object.keys(jsonObject));\n\n ObjectValidator.checkMinMaxProperties(parents, schema, keys);\n\n if (schema.getPropertyNames()) {\n ObjectValidator.checkPropertyNameSchema(parents, schema, repository, keys);\n }\n\n if (schema.getRequired()) {\n ObjectValidator.checkRequired(parents, schema, jsonObject);\n }\n\n if (schema.getProperties()) {\n ObjectValidator.checkProperties(parents, schema, repository, jsonObject, keys);\n }\n\n if (schema.getPatternProperties()) {\n ObjectValidator.checkPatternProperties(parents, schema, repository, jsonObject, keys);\n }\n\n if (schema.getAdditionalProperties()) {\n ObjectValidator.checkAddtionalProperties(parents, schema, repository, jsonObject, keys);\n }\n }\n\n private static checkPropertyNameSchema(\n parents: Schema[],\n schema: Schema,\n repository: Repository<Schema> | undefined,\n keys: Set<String>,\n ) {\n for (let key of Array.from(keys.values())) {\n try {\n SchemaValidator.validate(\n parents,\n schema.getPropertyNames() as Schema,\n repository,\n key,\n );\n } catch (err) {\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n \"Property name '\" + key + \"' does not fit the property schema\",\n );\n }\n }\n }\n\n private static checkRequired(parents: Schema[], schema: Schema, jsonObject: any) {\n for (const key of schema.getRequired() ?? []) {\n if (isNullValue(jsonObject[key])) {\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n key + ' is mandatory',\n );\n }\n }\n }\n\n private static checkAddtionalProperties(\n parents: Schema[],\n schema: Schema,\n repository: Repository<Schema> | undefined,\n jsonObject: any,\n keys: Set<string>,\n ) {\n let apt: AdditionalType = schema.getAdditionalProperties()!;\n if (apt.getSchemaValue()) {\n for (let key of Array.from(keys.values())) {\n let newParents: Schema[] = !parents ? [] : [...parents];\n\n let element: any = SchemaValidator.validate(\n newParents,\n apt.getSchemaValue(),\n repository,\n jsonObject[key],\n );\n jsonObject[key] = element;\n }\n } else {\n if (apt.getBooleanValue() === false && keys.size) {\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n Array.from(keys) + ' is/are additional properties which are not allowed.',\n );\n }\n }\n }\n\n private static checkPatternProperties(\n parents: Schema[],\n schema: Schema,\n repository: Repository<Schema> | undefined,\n jsonObject: any,\n keys: Set<string>,\n ) {\n const compiledPatterns: Map<string, RegExp> = new Map<string, RegExp>();\n for (const keyPattern of Array.from(schema.getPatternProperties()!.keys()))\n compiledPatterns.set(keyPattern, new RegExp(keyPattern));\n\n let goodKeys: string[] = [];\n\n for (const key of Array.from(keys.values())) {\n const newParents: Schema[] = !parents ? [] : [...parents];\n\n for (const e of Array.from(compiledPatterns.entries())) {\n if (e[1].test(key)) {\n const element: any = SchemaValidator.validate(\n newParents,\n schema.getPatternProperties()!.get(e[0]),\n repository,\n jsonObject[key],\n );\n jsonObject[key] = element;\n keys.delete(key);\n break;\n }\n }\n }\n }\n\n private static checkProperties(\n parents: Schema[],\n schema: Schema,\n repository: Repository<Schema> | undefined,\n jsonObject: any,\n keys: Set<string>,\n ) {\n for (const each of Array.from(schema.getProperties()!)) {\n let value: any = jsonObject[each[0]];\n\n if (!jsonObject.hasOwnProperty(each[0]) && isNullValue(value)) {\n const defValue = SchemaUtil.getDefaultValue(each[1], repository);\n if (isNullValue(defValue)) continue;\n }\n\n let newParents: Schema[] = !parents ? [] : [...parents];\n let element: any = SchemaValidator.validate(newParents, each[1], repository, value);\n jsonObject[each[0]] = element;\n keys.delete(each[0]);\n }\n }\n\n private static checkMinMaxProperties(parents: Schema[], schema: Schema, keys: Set<string>) {\n if (schema.getMinProperties() && keys.size < schema.getMinProperties()!) {\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n 'Object should have minimum of ' + schema.getMinProperties() + ' properties',\n );\n }\n\n if (schema.getMaxProperties() && keys.size > schema.getMaxProperties()!) {\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n 'Object can have maximum of ' + schema.getMaxProperties() + ' properties',\n );\n }\n }\n\n private constructor() {}\n}\n","export enum StringFormat {\n DATETIME = 'DATETIME',\n TIME = 'TIME',\n DATE = 'DATE',\n EMAIL = 'EMAIL',\n REGEX = 'REGEX',\n}\n","import { isNullValue } from '../../../util/NullCheck';\nimport { Schema } from '../Schema';\nimport { StringFormat } from '../string/StringFormat';\nimport { SchemaValidationException } from './exception/SchemaValidationException';\nimport { SchemaValidator } from './SchemaValidator';\n\nexport class StringValidator {\n private static readonly TIME: RegExp =\n /^([01]?[0-9]|2[0-3]):[0-5][0-9](:[0-5][0-9])?([+-][01][0-9]:[0-5][0-9])?$/;\n\n private static readonly DATE: RegExp =\n /^[0-9]{4,4}-([0][0-9]|[1][0-2])-(0[1-9]|[1-2][1-9]|3[01])$/;\n\n private static readonly DATETIME: RegExp =\n /^[0-9]{4,4}-([0][0-9]|[1][0-2])-(0[1-9]|[1-2][1-9]|3[01])T([01]?[0-9]|2[0-3]):[0-5][0-9](:[0-5][0-9])?([+-][01][0-9]:[0-5][0-9])?$/;\n\n private static readonly EMAIL: RegExp =\n /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*$/;\n\n public static validate(parents: Schema[], schema: Schema, element: any): any {\n if (isNullValue(element))\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n 'Expected a string but found ' + element,\n );\n\n if (typeof element !== 'string')\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n element.toString() + ' is not String',\n );\n\n if (schema.getFormat() == StringFormat.TIME) {\n StringValidator.patternMatcher(\n parents,\n schema,\n element,\n StringValidator.TIME,\n 'time pattern',\n );\n } else if (schema.getFormat() == StringFormat.DATE) {\n StringValidator.patternMatcher(\n parents,\n schema,\n element,\n StringValidator.DATE,\n 'date pattern',\n );\n } else if (schema.getFormat() == StringFormat.DATETIME) {\n StringValidator.patternMatcher(\n parents,\n schema,\n element,\n StringValidator.DATETIME,\n 'date time pattern',\n );\n } else if (schema.getFormat() == StringFormat.EMAIL) {\n StringValidator.patternMatcher(\n parents,\n schema,\n element,\n StringValidator.EMAIL,\n 'email pattern',\n );\n } else if (schema.getPattern()) {\n StringValidator.patternMatcher(\n parents,\n schema,\n element,\n new RegExp(schema.getPattern()!),\n 'pattern ' + schema.getPattern(),\n );\n }\n\n let length: number = element.length;\n if (schema.getMinLength() && length < schema.getMinLength()!) {\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n 'Expected a minimum of ' + schema.getMinLength() + ' characters',\n );\n } else if (schema.getMaxLength() && length > schema.getMaxLength()!) {\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n 'Expected a maximum of ' + schema.getMaxLength() + ' characters',\n );\n }\n\n return element;\n }\n\n private static patternMatcher(\n parents: Schema[],\n schema: Schema,\n element: any,\n pattern: RegExp,\n message: string,\n ) {\n let matched: boolean = pattern.test(element);\n if (!matched) {\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n element.toString() + ' is not matched with the ' + message,\n );\n }\n }\n\n private constructor() {}\n}\n","import { Repository } from '../../../Repository';\nimport { Schema } from '../Schema';\nimport { SchemaType } from '../type/SchemaType';\nimport { ArrayValidator } from './ArrayValidator';\nimport { BooleanValidator } from './BooleanValidator';\nimport { SchemaValidationException } from './exception/SchemaValidationException';\nimport { NullValidator } from './NullValidator';\nimport { NumberValidator } from './NumberValidator';\nimport { ObjectValidator } from './ObjectValidator';\nimport { SchemaValidator } from './SchemaValidator';\nimport { StringValidator } from './StringValidator';\n\nexport class TypeValidator {\n public static validate(\n parents: Schema[],\n type: SchemaType,\n schema: Schema,\n repository: Repository<Schema> |undefined,\n element: any,\n ): any {\n if (type == SchemaType.STRING) {\n StringValidator.validate(parents, schema, element);\n } else if (\n type == SchemaType.LONG ||\n type == SchemaType.INTEGER ||\n type == SchemaType.DOUBLE ||\n type == SchemaType.FLOAT\n ) {\n NumberValidator.validate(type, parents, schema, element);\n } else if (type == SchemaType.BOOLEAN) {\n BooleanValidator.validate(parents, schema, element);\n } else if (type == SchemaType.OBJECT) {\n ObjectValidator.validate(parents, schema, repository, element);\n } else if (type == SchemaType.ARRAY) {\n ArrayValidator.validate(parents, schema, repository, element);\n } else if (type == SchemaType.NULL) {\n NullValidator.validate(parents, schema, element);\n } else {\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n type + ' is not a valid type.',\n );\n }\n\n return element;\n }\n\n private constructor() {}\n}\n","import { Repository } from '../../../Repository';\nimport { deepEqual } from '../../../util/deepEqual';\nimport { isNullValue } from '../../../util/NullCheck';\nimport { StringUtil } from '../../../util/string/StringUtil';\nimport { Schema } from '../Schema';\nimport { SchemaUtil } from '../SchemaUtil';\nimport { SchemaType } from '../type/SchemaType';\nimport { AnyOfAllOfOneOfValidator } from './AnyOfAllOfOneOfValidator';\nimport { SchemaValidationException } from './exception/SchemaValidationException';\nimport { TypeValidator } from './TypeValidator';\n\nexport class SchemaValidator {\n public static path(parents: Schema[] | undefined): string {\n if (!parents) return '';\n\n return parents\n .map((e) => e.getTitle() ?? '')\n .filter((e) => !!e)\n .reduce((a, c, i) => a + (i === 0 ? '' : '.') + c, '');\n }\n\n public static validate(\n parents: Schema[] | undefined,\n schema: Schema | undefined,\n repository: Repository<Schema> | undefined,\n element: any,\n ): any {\n if (!schema) {\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n 'No schema found to validate',\n );\n }\n\n if (!parents) {\n parents = new Array();\n }\n parents.push(schema);\n\n if (isNullValue(element) && !isNullValue(schema.getDefaultValue())) {\n return JSON.parse(JSON.stringify(schema.getDefaultValue()));\n }\n\n if (!isNullValue(schema.getConstant())) {\n return SchemaValidator.constantValidation(parents, schema, element);\n }\n\n if (schema.getEnums() && !schema.getEnums()?.length) {\n return SchemaValidator.enumCheck(parents, schema, element);\n }\n\n if (schema.getFormat() && isNullValue(schema.getType()))\n throw new SchemaValidationException(\n this.path(parents),\n 'Type is missing in schema for declared ' +\n schema.getFormat()?.toString() +\n ' format.',\n );\n\n if (schema.getType()) {\n SchemaValidator.typeValidation(parents, schema, repository, element);\n }\n\n if (!StringUtil.isNullOrBlank(schema.getRef())) {\n return SchemaValidator.validate(\n parents,\n SchemaUtil.getSchemaFromRef(parents[0], repository, schema.getRef()),\n repository,\n element,\n );\n }\n\n if (schema.getOneOf() || schema.getAllOf() || schema.getAnyOf()) {\n AnyOfAllOfOneOfValidator.validate(parents, schema, repository, element);\n }\n\n if (schema.getNot()) {\n let flag: boolean = false;\n try {\n SchemaValidator.validate(parents, schema.getNot(), repository, element);\n flag = true;\n } catch (err) {\n flag = false;\n }\n if (flag)\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n 'Schema validated value in not condition.',\n );\n }\n\n return element;\n }\n\n public static constantValidation(parents: Schema[], schema: Schema, element: any): any {\n if (!deepEqual(schema.getConstant(), element)) {\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n 'Expecting a constant value : ' + element,\n );\n }\n return element;\n }\n\n public static enumCheck(parents: Schema[], schema: Schema, element: any): any {\n let x: boolean = false;\n for (let e of schema.getEnums() ?? []) {\n if (e === element) {\n x = true;\n break;\n }\n }\n\n if (x) return element;\n else {\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n 'Value is not one of ' + schema.getEnums(),\n );\n }\n }\n\n public static typeValidation(\n parents: Schema[],\n schema: Schema,\n repository: Repository<Schema> | undefined,\n element: any,\n ) {\n let valid: boolean = false;\n let list: SchemaValidationException[] = [];\n\n for (const type of Array.from(schema.getType()?.getAllowedSchemaTypes()?.values() ?? [])) {\n try {\n TypeValidator.validate(parents, type, schema, repository, element);\n valid = true;\n break;\n } catch (err: any) {\n valid = false;\n list.push(err);\n }\n }\n\n if (!valid) {\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n 'Value ' + JSON.stringify(element) + ' is not of valid type(s)',\n list,\n );\n }\n }\n\n private constructor() {}\n}\n","import { KIRuntimeException } from '../exception/KIRuntimeException';\nimport { Schema } from '../json/schema/Schema';\nimport { SchemaValidator } from '../json/schema/validator/SchemaValidator';\nimport { Event } from '../model/Event';\nimport { FunctionOutput } from '../model/FunctionOutput';\nimport { FunctionSignature } from '../model/FunctionSignature';\nimport { Parameter } from '../model/Parameter';\nimport { Repository } from '../Repository';\nimport { FunctionExecutionParameters } from '../runtime/FunctionExecutionParameters';\nimport { StatementExecution } from '../runtime/StatementExecution';\nimport { isNullValue } from '../util/NullCheck';\nimport { Tuple2 } from '../util/Tuples';\nimport { Function } from './Function';\n\nexport abstract class AbstractFunction implements Function {\n protected validateArguments(\n args: Map<string, any>,\n schemaRepository: Repository<Schema>,\n statementExecution: StatementExecution | undefined,\n ): Map<string, any> {\n return Array.from(this.getSignature().getParameters().entries())\n .map((e) => {\n let param: Parameter = e[1];\n try {\n return this.validateArgument(args, schemaRepository, e, param);\n } catch (err: any) {\n const signature = this.getSignature();\n throw new KIRuntimeException(\n `Error while executing the function ${signature.getNamespace()}.${signature.getName()}'s parameter ${param.getParameterName()} with step name '${\n statementExecution?.getStatement().getStatementName() ?? 'Unknown Step'\n }' with error : ${err?.message}`,\n );\n }\n })\n .reduce((a, c) => {\n a.set(c.getT1(), c.getT2());\n return a;\n }, new Map<string, any>());\n }\n\n private validateArgument(\n args: Map<string, any>,\n schemaRepository: Repository<Schema>,\n e: [string, Parameter],\n param: Parameter,\n ): Tuple2<string, any> {\n let key: string = e[0];\n let jsonElement: any = args.get(e[0]);\n\n if (isNullValue(jsonElement) && !param.isVariableArgument()) {\n return new Tuple2(\n key,\n SchemaValidator.validate(undefined, param.getSchema(), schemaRepository, undefined),\n );\n }\n\n if (!param?.isVariableArgument())\n return new Tuple2(\n key,\n SchemaValidator.validate(\n undefined,\n param.getSchema(),\n schemaRepository,\n jsonElement,\n ),\n );\n\n let array: any[] | undefined = undefined;\n\n if (Array.isArray(jsonElement)) array = jsonElement as any[];\n else {\n array = [];\n if (!isNullValue(jsonElement)) array.push(jsonElement);\n else if (!isNullValue(param.getSchema().getDefaultValue()))\n array.push(param.getSchema().getDefaultValue());\n }\n\n for (let i = 0; i < array.length; i++) {\n array[i] = SchemaValidator.validate(\n undefined,\n param.getSchema(),\n schemaRepository,\n array[i],\n );\n }\n\n return new Tuple2(key, array);\n }\n\n public async execute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n context.setArguments(\n this.validateArguments(\n context.getArguments() ?? new Map(),\n context.getSchemaRepository(),\n context.getStatementExecution(),\n ),\n );\n try {\n return this.internalExecute(context);\n } catch (err: any) {\n const signature = this.getSignature();\n throw new KIRuntimeException(\n `Error while executing the function ${signature.getNamespace()}.${signature.getName()} with step name '${\n context.getStatementExecution()?.getStatement().getStatementName() ??\n 'Unknown Step'\n }' with error : ${err?.message}`,\n );\n }\n }\n\n public getProbableEventSignature(\n probableParameters: Map<string, Schema[]>,\n ): Map<string, Event> {\n return this.getSignature().getEvents();\n }\n\n protected abstract internalExecute(\n context: FunctionExecutionParameters,\n ): Promise<FunctionOutput>;\n public abstract getSignature(): FunctionSignature;\n}\n","import { Schema } from '../../../json/schema/Schema';\nimport { SchemaType } from '../../../json/schema/type/SchemaType';\nimport { TypeUtil } from '../../../json/schema/type/TypeUtil';\nimport { Event } from '../../../model/Event';\nimport { FunctionSignature } from '../../../model/FunctionSignature';\nimport { Parameter } from '../../../model/Parameter';\nimport { Namespaces } from '../../../namespaces/Namespaces';\nimport { MapUtil } from '../../../util/MapUtil';\nimport { AbstractFunction } from '../../AbstractFunction';\n\nexport abstract class AbstractArrayFunction extends AbstractFunction {\n public static readonly EVENT_INDEX_NAME: string = 'index';\n public static readonly EVENT_RESULT_NAME: string = 'result';\n\n public static readonly EVENT_INDEX: Event = new Event(\n Event.OUTPUT,\n MapUtil.of(\n AbstractArrayFunction.EVENT_INDEX_NAME,\n Schema.ofInteger(AbstractArrayFunction.EVENT_INDEX_NAME),\n ),\n );\n\n public static readonly EVENT_RESULT_INTEGER: Event = new Event(\n Event.OUTPUT,\n MapUtil.of(\n AbstractArrayFunction.EVENT_RESULT_NAME,\n Schema.ofInteger(AbstractArrayFunction.EVENT_RESULT_NAME),\n ),\n );\n\n public static readonly EVENT_RESULT_BOOLEAN: Event = new Event(\n Event.OUTPUT,\n MapUtil.of(\n AbstractArrayFunction.EVENT_RESULT_NAME,\n Schema.ofBoolean(AbstractArrayFunction.EVENT_RESULT_NAME),\n ),\n );\n\n public static readonly EVENT_RESULT_ARRAY: Event = new Event(\n Event.OUTPUT,\n MapUtil.of(\n AbstractArrayFunction.EVENT_RESULT_NAME,\n Schema.ofArray(\n AbstractArrayFunction.EVENT_RESULT_NAME,\n Schema.ofAny(AbstractArrayFunction.EVENT_RESULT_NAME),\n ),\n ),\n );\n\n public static readonly EVENT_RESULT_EMPTY: Event = new Event(Event.OUTPUT, MapUtil.of());\n\n public static readonly EVENT_RESULT_ANY: Event = new Event(\n Event.OUTPUT,\n MapUtil.of(this.EVENT_RESULT_NAME, Schema.ofAny(this.EVENT_RESULT_NAME)),\n );\n\n public static readonly EVENT_RESULT_OBJECT: Event = new Event(\n Event.OUTPUT,\n MapUtil.of(this.EVENT_RESULT_NAME, Schema.ofObject(this.EVENT_RESULT_NAME)),\n );\n\n public static readonly PARAMETER_INT_LENGTH: Parameter = Parameter.of(\n 'length',\n Schema.ofInteger('length').setDefaultValue(-1),\n );\n public static readonly PARAMETER_ARRAY_FIND: Parameter = Parameter.of(\n 'find',\n Schema.ofArray('eachFind', Schema.ofAny('eachFind')),\n );\n public static readonly PARAMETER_INT_SOURCE_FROM: Parameter = Parameter.of(\n 'srcFrom',\n Schema.ofInteger('srcFrom').setDefaultValue(0).setMinimum(0),\n );\n public static readonly PARAMETER_INT_SECOND_SOURCE_FROM: Parameter = Parameter.of(\n 'secondSrcFrom',\n Schema.ofInteger('secondSrcFrom').setDefaultValue(0),\n );\n public static readonly PARAMETER_INT_FIND_FROM: Parameter = Parameter.of(\n 'findFrom',\n Schema.ofInteger('findFrom').setDefaultValue(0),\n );\n\n public static readonly PARAMETER_INT_OFFSET: Parameter = Parameter.of(\n 'offset',\n Schema.ofInteger('offset').setDefaultValue(0),\n );\n\n public static readonly PARAMETER_ROTATE_LENGTH: Parameter = Parameter.of(\n 'rotateLength',\n Schema.ofInteger('rotateLength').setDefaultValue(1).setMinimum(1),\n );\n\n public static readonly PARAMETER_BOOLEAN_ASCENDING: Parameter = Parameter.of(\n 'ascending',\n Schema.ofBoolean('ascending').setDefaultValue(false),\n );\n\n public static readonly PARAMETER_FIND_PRIMITIVE: Parameter = Parameter.of(\n 'findPrimitive',\n Schema.of(\n 'findPrimitive',\n SchemaType.STRING,\n SchemaType.DOUBLE,\n SchemaType.FLOAT,\n SchemaType.INTEGER,\n SchemaType.LONG,\n ),\n );\n\n public static readonly PARAMETER_ARRAY_SOURCE: Parameter = Parameter.of(\n 'source',\n Schema.ofArray('eachSource', Schema.ofAny('eachSource')),\n );\n\n public static readonly PARAMETER_ARRAY_SECOND_SOURCE: Parameter = Parameter.of(\n 'secondSource',\n Schema.ofArray('eachSecondSource', Schema.ofAny('eachSecondSource')),\n );\n\n public static readonly PARAMETER_ARRAY_SOURCE_PRIMITIVE: Parameter = Parameter.of(\n 'source',\n Schema.ofArray(\n 'eachSource',\n new Schema()\n .setName('eachSource')\n .setType(\n TypeUtil.of(\n SchemaType.STRING,\n SchemaType.NULL,\n SchemaType.INTEGER,\n SchemaType.FLOAT,\n SchemaType.DOUBLE,\n SchemaType.LONG,\n ),\n ),\n ),\n );\n\n public static readonly PARAMETER_BOOLEAN_DEEP_COPY: Parameter = Parameter.of(\n 'deepCopy',\n Schema.ofBoolean('deepCopy').setDefaultValue(true),\n );\n public static readonly PARAMETER_ANY: Parameter = Parameter.of(\n 'element',\n Schema.ofAny('element'),\n );\n\n public static readonly PARAMETER_ANY_NOT_NULL: Parameter = Parameter.of(\n 'elementObject',\n Schema.ofAnyNotNull('elementObject'),\n );\n\n public static readonly PARAMETER_ANY_VAR_ARGS: Parameter = Parameter.of(\n 'element',\n Schema.ofAny('element'),\n ).setVariableArgument(true);\n\n public static readonly PARAMETER_ARRAY_RESULT: Parameter = Parameter.of(\n AbstractArrayFunction.EVENT_RESULT_NAME,\n Schema.ofArray('eachResult', Schema.ofAny('eachResult')),\n );\n\n private signature: FunctionSignature;\n\n protected constructor(functionName: string, parameters: Parameter[], event: Event) {\n super();\n\n const paramMap: Map<string, Parameter> = new Map();\n for (const param of parameters) paramMap.set(param.getParameterName(), param);\n\n this.signature = new FunctionSignature(functionName)\n .setNamespace(Namespaces.SYSTEM_ARRAY)\n .setParameters(paramMap)\n .setEvents(MapUtil.of(event.getName(), event));\n }\n\n public getSignature(): FunctionSignature {\n return this.signature;\n }\n}\n","import { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { AbstractArrayFunction } from './AbstractArrayFunction';\n\nexport class Concatenate extends AbstractArrayFunction {\n public constructor() {\n super(\n 'Concatenate',\n [\n AbstractArrayFunction.PARAMETER_ARRAY_SOURCE,\n AbstractArrayFunction.PARAMETER_ARRAY_SECOND_SOURCE,\n ],\n AbstractArrayFunction.EVENT_RESULT_ARRAY,\n );\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let source: any[] = context\n ?.getArguments()\n ?.get(AbstractArrayFunction.PARAMETER_ARRAY_SOURCE.getParameterName());\n\n let secondSource: any[] = context\n ?.getArguments()\n ?.get(AbstractArrayFunction.PARAMETER_ARRAY_SECOND_SOURCE.getParameterName());\n\n return new FunctionOutput([\n EventResult.outputOf(\n new Map([[AbstractArrayFunction.EVENT_RESULT_NAME, [...source, ...secondSource]]]),\n ),\n ]);\n }\n}\n","import { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { AbstractArrayFunction } from './AbstractArrayFunction';\n\nexport class AddFirst extends AbstractArrayFunction {\n public constructor() {\n super(\n 'AddFirst',\n [AbstractArrayFunction.PARAMETER_ARRAY_SOURCE, AbstractArrayFunction.PARAMETER_ANY],\n AbstractArrayFunction.EVENT_RESULT_ARRAY,\n );\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let source: any[] = context\n ?.getArguments()\n ?.get(AbstractArrayFunction.PARAMETER_ARRAY_SOURCE.getParameterName());\n\n let input: any = context\n ?.getArguments()\n ?.get(AbstractArrayFunction.PARAMETER_ANY.getParameterName());\n\n source = [...source];\n\n if (source.length == 0) {\n source.push(input);\n return new FunctionOutput([EventResult.outputOf(new Map([]))]);\n }\n\n source.push(input);\n\n let len: number = source.length - 1;\n\n while (len > 0) {\n let temp: any = source[len - 1];\n source[len - 1] = source[len];\n source[len--] = temp;\n }\n\n return new FunctionOutput([\n EventResult.outputOf(new Map([[AbstractArrayFunction.EVENT_RESULT_NAME, source]])),\n ]);\n }\n}\n","import { Schema } from '../../../json/schema/Schema';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { Parameter } from '../../../model/Parameter';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { AbstractArrayFunction } from './AbstractArrayFunction';\n\nconst KEY_NAME = 'keyName';\n\nexport class ArrayToArrayOfObjects extends AbstractArrayFunction {\n public constructor() {\n super(\n 'ArrayToArrayOfObjects',\n [\n AbstractArrayFunction.PARAMETER_ARRAY_SOURCE,\n Parameter.of(KEY_NAME, Schema.ofString(KEY_NAME), true),\n ],\n AbstractArrayFunction.EVENT_RESULT_ARRAY,\n );\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let source: any[] = context\n ?.getArguments()\n ?.get(ArrayToArrayOfObjects.PARAMETER_ARRAY_SOURCE.getParameterName());\n\n let keys: string[] = context?.getArguments()?.get(KEY_NAME);\n\n if (!source?.length) {\n return new FunctionOutput([\n EventResult.outputOf(new Map([[AbstractArrayFunction.EVENT_RESULT_NAME, []]])),\n ]);\n }\n\n let result: any[] = source.map((e) => {\n const obj: any = {};\n if (Array.isArray(e)) {\n if (keys.length) {\n keys.forEach((key, index) => {\n obj[key] = e[index];\n });\n } else {\n for (let i = 0; i < e.length; i++) {\n obj[`value${i + 1}`] = e[i];\n }\n }\n } else {\n obj[keys.length ? keys[0] : 'value'] = e;\n }\n\n return obj;\n });\n\n return new FunctionOutput([\n EventResult.outputOf(new Map([[AbstractArrayFunction.EVENT_RESULT_NAME, result]])),\n ]);\n }\n}\n","export class ExecutionException extends Error {\n private cause?: Error;\n\n constructor(message: string, err?: Error) {\n super(message);\n this.cause = err;\n }\n\n public getCause(): Error | undefined {\n return this.cause;\n }\n}\n","import { ExecutionException } from '../../exception/ExecutionException';\nimport { KIRuntimeException } from '../../exception/KIRuntimeException';\nimport { JsonExpression } from '../../json/JsonExpression';\nimport { SchemaType } from '../../json/schema/type/SchemaType';\nimport { isNullValue } from '../NullCheck';\nimport { StringFormatter } from '../string/StringFormatter';\nimport { Tuple2 } from '../Tuples';\n\nexport class PrimitiveUtil {\n public static findPrimitiveNullAsBoolean(element: any): Tuple2<SchemaType, any> {\n if (isNullValue(element)) return new Tuple2(SchemaType.BOOLEAN, false);\n\n let typof: string = typeof element;\n if (typof === 'object')\n throw new ExecutionException(\n StringFormatter.format('$ is not a primitive type', element),\n );\n\n let value: any = element;\n\n if (typof === 'boolean') return new Tuple2(SchemaType.BOOLEAN, value);\n\n if (typof === 'string') return new Tuple2(SchemaType.STRING, value);\n\n return PrimitiveUtil.findPrimitiveNumberType(value);\n }\n\n public static findPrimitive(element: any): Tuple2<SchemaType, any> {\n if (isNullValue(element)) return new Tuple2(SchemaType.NULL, undefined);\n\n let typof: string = typeof element;\n\n if (typof === 'object')\n throw new ExecutionException(\n StringFormatter.format('$ is not a primitive type', element),\n );\n\n let value: any = element;\n\n if (typof === 'boolean') return new Tuple2(SchemaType.BOOLEAN, value);\n\n if (typof === 'string') return new Tuple2(SchemaType.STRING, value);\n\n return PrimitiveUtil.findPrimitiveNumberType(value);\n }\n\n public static findPrimitiveNumberType(element: any): Tuple2<SchemaType, any> {\n if (isNullValue(element) || Array.isArray(element) || typeof element == 'object')\n throw new ExecutionException(\n StringFormatter.format('Unable to convert $ to a number.', element),\n );\n\n let value: any = element;\n\n // I think we should not forcibly convert a string to number, it was needed in java as we were using GSON.\n // if (typeof value === \"string\") {\n // if (!/^[\\d]{0,}[.]{0,1}[\\d]{1,}$/.test(value)) //Don't do this, I need to enhance to accommadate the exponent form.\n // throw new ExecutionException(StringFormatter.format(\"Unable to convert $ to a number.\", value));\n // let fv = parseFloat(value);\n // let iv = parseInt(value);\n\n // if (iv === fv)\n // return new Tuple2(SchemaType.LONG, iv);\n // else\n // return new Tuple2(SchemaType.DOUBLE, fv);\n // }\n\n try {\n let num: number = value as number;\n if (Number.isInteger(num)) return new Tuple2(SchemaType.LONG, num);\n else return new Tuple2(SchemaType.DOUBLE, num);\n } catch (err: any) {\n throw new ExecutionException(\n StringFormatter.format('Unable to convert $ to a number.', value),\n err,\n );\n }\n }\n\n public static compare(a: any, b: any): number {\n if (a == b) return 0;\n\n if (isNullValue(a) || isNullValue(b)) return isNullValue(a) ? -1 : 1;\n\n if (Array.isArray(a) || Array.isArray(b)) {\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length != b.length) return a.length - b.length;\n for (let i = 0; i < a.length; i++) {\n let cmp: number = this.compare(a[i], b[i]);\n if (cmp != 0) return cmp;\n }\n return 0;\n }\n return Array.isArray(a) ? -1 : 1;\n }\n\n const typofa = typeof a;\n const typofb = typeof b;\n\n if (typofa === 'object' || typofb === 'object') {\n if (typofa === 'object' && typofb === 'object') {\n Object.keys(a).forEach((key) => {\n let cmp = this.compare(a[key], b[key]);\n if (cmp != 0) return cmp;\n });\n }\n return typofa === 'object' ? -1 : 1;\n }\n\n return this.comparePrimitive(a, b);\n }\n\n public static comparePrimitive(oa: any, ob: any): number {\n if (isNullValue(oa) || isNullValue(ob)) {\n if (isNullValue(oa) && isNullValue(ob)) return 0;\n return isNullValue(oa) ? -1 : 1;\n }\n\n if (oa == ob) return 0;\n\n if (typeof oa == 'boolean' || typeof ob == 'boolean') return oa ? -1 : 1;\n\n if (typeof oa == 'string' || typeof ob == 'string') {\n return oa + '' < ob + '' ? -1 : 1;\n }\n\n if (typeof oa == 'number' || typeof ob == 'number') {\n return oa - ob;\n }\n\n return 0;\n }\n\n private static baseNumberType(num: number): SchemaType {\n if (Number.isInteger(num)) return SchemaType.LONG;\n else return SchemaType.DOUBLE;\n }\n\n public static toPrimitiveType(e: any): number {\n return e as number;\n }\n\n private constructor() {}\n}\n","import { KIRuntimeException } from '../../../exception/KIRuntimeException';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { PrimitiveUtil } from '../../../util/primitive/PrimitiveUtil';\nimport { AbstractArrayFunction } from './AbstractArrayFunction';\n\nexport class BinarySearch extends AbstractArrayFunction {\n public constructor() {\n super(\n 'BinarySearch',\n [\n BinarySearch.PARAMETER_ARRAY_SOURCE_PRIMITIVE,\n BinarySearch.PARAMETER_INT_SOURCE_FROM,\n BinarySearch.PARAMETER_FIND_PRIMITIVE,\n BinarySearch.PARAMETER_INT_LENGTH,\n ],\n BinarySearch.EVENT_INDEX,\n );\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let source: any[] = context\n ?.getArguments()\n ?.get(BinarySearch.PARAMETER_ARRAY_SOURCE.getParameterName());\n\n let start: number = context\n ?.getArguments()\n ?.get(BinarySearch.PARAMETER_INT_SOURCE_FROM.getParameterName());\n\n let find: any = context\n ?.getArguments()\n ?.get(BinarySearch.PARAMETER_FIND_PRIMITIVE.getParameterName());\n\n let end: number = context\n ?.getArguments()\n ?.get(BinarySearch.PARAMETER_INT_LENGTH.getParameterName());\n\n if (source.length == 0 || start < 0 || start > source.length)\n throw new KIRuntimeException('Search source array cannot be empty');\n\n if (end == -1) end = source.length - start;\n\n end = start + end;\n\n if (end > source.length)\n throw new KIRuntimeException(\n 'End point for array cannot be more than the size of the source array',\n );\n\n let index: number = -1;\n\n while (start <= end) {\n let mid: number = Math.floor((start + end) / 2);\n if (PrimitiveUtil.compare(source[mid], find) == 0) {\n index = mid;\n break;\n } else if (PrimitiveUtil.compare(source[mid], find) > 0) end = mid - 1;\n else start = mid + 1;\n }\n\n return new FunctionOutput([\n EventResult.outputOf(new Map([[BinarySearch.EVENT_INDEX_NAME, index]])),\n ]);\n }\n}\n","export class ArrayUtil {\n public static removeAListFrom(source: any[], removeList: any[]): void {\n if (!removeList || !source || !source.length || !removeList.length) return;\n\n const e: Set<any> = new Set<any>(removeList);\n\n for (let i = 0; i < source.length; i++) {\n if (!e.has(source[i])) continue;\n source.splice(i, 1);\n i--;\n }\n }\n\n public static of<K>(...k: K[]): K[] {\n const copy: K[] = new Array(k.length);\n\n for (let i = 0; i < k.length; i++) copy[i] = k[i];\n\n return copy;\n }\n\n private constructor() {}\n}\n","import { KIRuntimeException } from '../../../exception/KIRuntimeException';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { ArrayUtil } from '../../../util/ArrayUtil';\nimport { MapUtil } from '../../../util/MapUtil';\nimport { isNullValue } from '../../../util/NullCheck';\nimport { StringFormatter } from '../../../util/string/StringFormatter';\nimport { AbstractArrayFunction } from './AbstractArrayFunction';\n\nexport class Compare extends AbstractArrayFunction {\n public constructor() {\n super(\n 'Compare',\n ArrayUtil.of(\n Compare.PARAMETER_ARRAY_SOURCE,\n Compare.PARAMETER_INT_SOURCE_FROM,\n Compare.PARAMETER_ARRAY_FIND,\n Compare.PARAMETER_INT_FIND_FROM,\n Compare.PARAMETER_INT_LENGTH,\n ),\n Compare.EVENT_RESULT_INTEGER,\n );\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n var source = context\n ?.getArguments()\n ?.get(Compare.PARAMETER_ARRAY_SOURCE.getParameterName());\n var srcfrom = context\n ?.getArguments()\n ?.get(Compare.PARAMETER_INT_SOURCE_FROM.getParameterName());\n var find = context?.getArguments()?.get(Compare.PARAMETER_ARRAY_FIND.getParameterName());\n var findfrom = context\n ?.getArguments()\n ?.get(Compare.PARAMETER_INT_FIND_FROM.getParameterName());\n var length = context?.getArguments()?.get(Compare.PARAMETER_INT_LENGTH.getParameterName());\n\n if (source.length == 0) {\n throw new KIRuntimeException('Compare source array cannot be empty');\n }\n\n if (find.length == 0) {\n throw new KIRuntimeException('Compare find array cannot be empty');\n }\n\n if (length == -1) length = source.length - srcfrom;\n\n if (srcfrom + length > source.length)\n throw new KIRuntimeException(\n StringFormatter.format(\n 'Source array size $ is less than comparing size $',\n source.length,\n srcfrom + length,\n ),\n );\n\n if (findfrom + length > find.length)\n throw new KIRuntimeException(\n StringFormatter.format(\n 'Find array size $ is less than comparing size $',\n find.length,\n findfrom + length,\n ),\n );\n\n return new FunctionOutput(\n ArrayUtil.of(\n EventResult.outputOf(\n MapUtil.of(\n Compare.EVENT_RESULT_NAME,\n this.compare(\n source,\n srcfrom,\n srcfrom + length,\n find,\n findfrom,\n findfrom + length,\n ),\n ),\n ),\n ),\n );\n }\n\n public compare(\n source: any[],\n srcfrom: number,\n srcto: number,\n find: any[],\n findfrom: number,\n findto: number,\n ): number {\n if (srcto < srcfrom) {\n let x: number = srcfrom;\n srcfrom = srcto;\n srcto = x;\n }\n\n if (findto < findfrom) {\n let x: number = findfrom;\n findfrom = findto;\n findto = x;\n }\n\n if (srcto - srcfrom != findto - findfrom) {\n throw new KIRuntimeException(\n StringFormatter.format(\n 'Cannot compare uneven arrays from $ to $ in source array with $ to $ in find array',\n srcto,\n srcfrom,\n findto,\n findfrom,\n ),\n );\n }\n\n for (let i = srcfrom, j = findfrom; i < srcto; i++, j++) {\n let x: number = 1;\n\n if (isNullValue(source[i]) || isNullValue(find[j])) {\n let s: boolean = isNullValue(source[i]);\n let f: boolean = isNullValue(find[j]);\n\n if (s == f) x = 0;\n else if (s) x = -1;\n } else {\n let typs: string = typeof source[i];\n let typf: string = typeof find[j];\n\n if (typs === 'object' || typf === 'object') {\n x = 1;\n } else if (typs === 'string' || typf === 'string') {\n let s = '' + source[i];\n let f = '' + find[j];\n if (s === f) x = 0;\n else if (s < f) x = -1;\n } else if (typs === 'boolean' || typf === 'boolean') {\n x = typs == typf ? 0 : 1;\n } else if (typs === 'number' && typf === 'number') {\n x = source[i] - find[j];\n }\n }\n\n if (x != 0) return x;\n }\n\n return 0;\n }\n}\n","export function duplicate(obj: any): any {\n if (!obj) return obj;\n if (structuredClone) return structuredClone(obj);\n return JSON.parse(JSON.stringify(obj));\n}\n","import { KIRuntimeException } from '../../../exception/KIRuntimeException';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { MapUtil } from '../../../util/MapUtil';\nimport { isNullValue } from '../../../util/NullCheck';\nimport { duplicate } from '../../../util/duplicate';\nimport { StringFormatter } from '../../../util/string/StringFormatter';\nimport { AbstractArrayFunction } from './AbstractArrayFunction';\n\nexport class Copy extends AbstractArrayFunction {\n public constructor() {\n super(\n 'Copy',\n [\n Copy.PARAMETER_ARRAY_SOURCE,\n Copy.PARAMETER_INT_SOURCE_FROM,\n Copy.PARAMETER_INT_LENGTH,\n Copy.PARAMETER_BOOLEAN_DEEP_COPY,\n ],\n Copy.EVENT_RESULT_ARRAY,\n );\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n var source = context?.getArguments()?.get(Copy.PARAMETER_ARRAY_SOURCE.getParameterName());\n var srcfrom = context\n ?.getArguments()\n ?.get(Copy.PARAMETER_INT_SOURCE_FROM.getParameterName());\n var length = context?.getArguments()?.get(Copy.PARAMETER_INT_LENGTH.getParameterName());\n\n if (length == -1) length = source.length - srcfrom;\n\n if (srcfrom + length > source.length)\n throw new KIRuntimeException(\n StringFormatter.format(\n 'Array has no elements from $ to $ as the array size is $',\n srcfrom,\n srcfrom + length,\n source.length,\n ),\n );\n\n var deep = context\n ?.getArguments()\n ?.get(Copy.PARAMETER_BOOLEAN_DEEP_COPY.getParameterName());\n\n const ja: any[] = new Array(length);\n\n for (let i = srcfrom; i < srcfrom + length; i++) {\n if (!isNullValue(source[i])) ja[i - srcfrom] = deep ? duplicate(source[i]) : source[i];\n }\n\n return new FunctionOutput([EventResult.outputOf(MapUtil.of(Copy.EVENT_RESULT_NAME, ja))]);\n }\n}\n","import { KIRuntimeException } from '../../../exception/KIRuntimeException';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { AbstractArrayFunction } from './AbstractArrayFunction';\nimport { PrimitiveUtil } from '../../../util/primitive/PrimitiveUtil';\n\nexport class Delete extends AbstractArrayFunction {\n public constructor() {\n super(\n 'Delete',\n [\n AbstractArrayFunction.PARAMETER_ARRAY_SOURCE,\n AbstractArrayFunction.PARAMETER_ANY_VAR_ARGS,\n ],\n AbstractArrayFunction.EVENT_RESULT_ARRAY,\n );\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let source: any[] = context\n ?.getArguments()\n ?.get(Delete.PARAMETER_ARRAY_SOURCE.getParameterName());\n\n let receivedArgs: any[] = context\n ?.getArguments()\n ?.get(Delete.PARAMETER_ANY_VAR_ARGS.getParameterName());\n\n if (receivedArgs === null || typeof receivedArgs === 'undefined')\n throw new KIRuntimeException(\n 'The deletable var args are empty. So cannot be proceeded further.',\n );\n\n if (source.length == 0 || receivedArgs.length == 0)\n throw new KIRuntimeException(\n 'Expected a source or deletable for an array but not found any',\n );\n\n let indexes = new Set<number>();\n\n for (let i: number = source.length - 1; i >= 0; i--) {\n for (let j: number = 0; j < receivedArgs.length; j++) {\n if (!indexes.has(i) && PrimitiveUtil.compare(source[i], receivedArgs[j]) == 0)\n indexes.add(source[i]);\n }\n }\n\n return new FunctionOutput([\n EventResult.outputOf(\n new Map([\n [\n AbstractArrayFunction.EVENT_RESULT_NAME,\n source.filter((value) => !indexes.has(value)),\n ],\n ]),\n ),\n ]);\n }\n}\n","import { KIRuntimeException } from '../../../exception/KIRuntimeException';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { AbstractArrayFunction } from './AbstractArrayFunction';\n\nexport class DeleteFirst extends AbstractArrayFunction {\n public constructor() {\n super('DeleteFirst', [DeleteFirst.PARAMETER_ARRAY_SOURCE], DeleteFirst.EVENT_RESULT_ARRAY);\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let source: any[] = context\n ?.getArguments()\n ?.get(DeleteFirst.PARAMETER_ARRAY_SOURCE.getParameterName());\n\n if (source.length == 0) throw new KIRuntimeException('Given source array is empty');\n\n source = [...source];\n source.shift();\n return new FunctionOutput([\n EventResult.outputOf(new Map([[AbstractArrayFunction.EVENT_RESULT_NAME, source]])),\n ]);\n }\n}\n","import { KIRuntimeException } from '../../../exception/KIRuntimeException';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { AbstractArrayFunction } from './AbstractArrayFunction';\n\nexport class DeleteFrom extends AbstractArrayFunction {\n public constructor() {\n super(\n 'DeleteFrom',\n [\n DeleteFrom.PARAMETER_ARRAY_SOURCE,\n DeleteFrom.PARAMETER_INT_SOURCE_FROM,\n DeleteFrom.PARAMETER_INT_LENGTH,\n ],\n DeleteFrom.EVENT_RESULT_ARRAY,\n );\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let source: any[] = context\n ?.getArguments()\n ?.get(DeleteFrom.PARAMETER_ARRAY_SOURCE.getParameterName());\n\n let start: number = context\n ?.getArguments()\n ?.get(DeleteFrom.PARAMETER_INT_SOURCE_FROM.getParameterName());\n\n let len: number = context\n ?.getArguments()\n ?.get(DeleteFrom.PARAMETER_INT_LENGTH.getParameterName());\n\n if (source.length == 0) throw new KIRuntimeException('There are no elements to be deleted');\n\n source = [...source];\n if (start >= source.length || start < 0)\n throw new KIRuntimeException(\n 'The int source for the array should be in between 0 and length of the array ',\n );\n\n if (len == -1) len = source.length - start;\n\n if (start + len > source.length)\n throw new KIRuntimeException(\n 'Requested length to be deleted is more than the size of array ',\n );\n\n source.splice(start, len);\n\n return new FunctionOutput([\n EventResult.outputOf(new Map([[AbstractArrayFunction.EVENT_RESULT_NAME, source]])),\n ]);\n }\n}\n","import { KIRuntimeException } from '../../../exception/KIRuntimeException';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { AbstractArrayFunction } from './AbstractArrayFunction';\n\nexport class DeleteLast extends AbstractArrayFunction {\n public constructor() {\n super('DeleteLast', [DeleteLast.PARAMETER_ARRAY_SOURCE], DeleteLast.EVENT_RESULT_ARRAY);\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let source: any[] = context\n ?.getArguments()\n ?.get(DeleteLast.PARAMETER_ARRAY_SOURCE.getParameterName());\n\n if (source.length == 0) throw new KIRuntimeException('Given source array is empty');\n\n source = [...source];\n source.pop();\n\n return new FunctionOutput([\n EventResult.outputOf(new Map([[AbstractArrayFunction.EVENT_RESULT_NAME, source]])),\n ]);\n }\n}\n","import { KIRuntimeException } from '../../../exception/KIRuntimeException';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { AbstractArrayFunction } from './AbstractArrayFunction';\n\nexport class Disjoint extends AbstractArrayFunction {\n public constructor() {\n super(\n 'Disjoint',\n [\n Disjoint.PARAMETER_ARRAY_SOURCE,\n Disjoint.PARAMETER_INT_SOURCE_FROM,\n Disjoint.PARAMETER_ARRAY_SECOND_SOURCE,\n Disjoint.PARAMETER_INT_SECOND_SOURCE_FROM,\n Disjoint.PARAMETER_INT_LENGTH,\n ],\n Disjoint.EVENT_RESULT_ARRAY,\n );\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let firstSource: any[] = context\n ?.getArguments()\n ?.get(Disjoint.PARAMETER_ARRAY_SOURCE.getParameterName());\n\n let first: number = context\n ?.getArguments()\n ?.get(Disjoint.PARAMETER_INT_SOURCE_FROM.getParameterName());\n\n let secondSource: any[] = context\n ?.getArguments()\n ?.get(Disjoint.PARAMETER_ARRAY_SECOND_SOURCE.getParameterName());\n\n let second: number = context\n ?.getArguments()\n ?.get(Disjoint.PARAMETER_INT_SECOND_SOURCE_FROM.getParameterName());\n\n let len: number = context\n ?.getArguments()\n ?.get(Disjoint.PARAMETER_INT_LENGTH.getParameterName());\n\n if (len == -1)\n len =\n firstSource.length <= secondSource.length\n ? firstSource.length - first\n : secondSource.length - second;\n\n if (\n len > firstSource.length ||\n len > secondSource.length ||\n first + len > firstSource.length ||\n second + len > secondSource.length\n )\n throw new KIRuntimeException(\n 'The length which was being requested is more than than the size either source array or second source array',\n );\n\n let set1: Set<any> = new Set<any>();\n let set2: Set<any> = new Set<any>();\n\n for (let i: number = 0; i < len; i++) set1.add(firstSource[i + first]);\n\n for (let i: number = 0; i < len; i++) set2.add(secondSource[i + second]);\n\n let set3: Set<any> = new Set<any>();\n\n set1.forEach((element) => {\n if (set2.has(element)) set2.delete(element);\n else set3.add(element);\n });\n\n set2.forEach((element) => {\n if (!set1.has(element)) set3.add(element);\n });\n\n return new FunctionOutput([\n EventResult.outputOf(new Map([[Disjoint.EVENT_RESULT_NAME, [...set3]]])),\n ]);\n }\n}\n","import { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { MapUtil } from '../../../util/MapUtil';\nimport { AbstractArrayFunction } from './AbstractArrayFunction';\nimport { Compare } from './Compare';\n\nexport class Equals extends AbstractArrayFunction {\n public constructor() {\n super(\n 'Equals',\n [\n Equals.PARAMETER_ARRAY_SOURCE,\n Equals.PARAMETER_INT_SOURCE_FROM,\n Equals.PARAMETER_ARRAY_FIND,\n Equals.PARAMETER_INT_FIND_FROM,\n Equals.PARAMETER_INT_LENGTH,\n ],\n Equals.EVENT_RESULT_BOOLEAN,\n );\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let compare: Compare = new Compare();\n\n let fo: FunctionOutput = await compare.execute(context);\n\n let resultMap: Map<string, any> = fo.allResults()[0].getResult();\n\n let v: number = resultMap.get(Equals.EVENT_RESULT_NAME);\n\n return new FunctionOutput([\n EventResult.outputOf(MapUtil.of(Equals.EVENT_RESULT_NAME, v == 0)),\n ]);\n }\n}\n","import { KIRuntimeException } from '../../../exception/KIRuntimeException';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { MapUtil } from '../../../util/MapUtil';\nimport { isNullValue } from '../../../util/NullCheck';\nimport { duplicate } from '../../../util/duplicate';\nimport { StringFormatter } from '../../../util/string/StringFormatter';\nimport { AbstractArrayFunction } from './AbstractArrayFunction';\n\nexport class Fill extends AbstractArrayFunction {\n public constructor() {\n super(\n 'Fill',\n [\n Fill.PARAMETER_ARRAY_SOURCE,\n Fill.PARAMETER_INT_SOURCE_FROM,\n Fill.PARAMETER_INT_LENGTH,\n Fill.PARAMETER_ANY,\n ],\n Fill.EVENT_RESULT_EMPTY,\n );\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n var source = context?.getArguments()?.get(Fill.PARAMETER_ARRAY_SOURCE.getParameterName());\n var srcfrom = context\n ?.getArguments()\n ?.get(Fill.PARAMETER_INT_SOURCE_FROM.getParameterName());\n var length = context?.getArguments()?.get(Fill.PARAMETER_INT_LENGTH.getParameterName());\n var element = context?.getArguments()?.get(Fill.PARAMETER_ANY.getParameterName());\n\n if (srcfrom < 0)\n throw new KIRuntimeException(\n StringFormatter.format('Arrays out of bound trying to access $ index', srcfrom),\n );\n\n if (length == -1) length = source.length - srcfrom;\n\n let add = srcfrom + length - source.length;\n\n source = [...source];\n if (add > 0) {\n for (let i = 0; i < add; i++) source.push();\n }\n\n for (let i = srcfrom; i < srcfrom + length; i++) {\n source[i] = isNullValue(element) ? element : duplicate(element);\n }\n\n return new FunctionOutput([\n EventResult.outputOf(MapUtil.of(AbstractArrayFunction.EVENT_RESULT_NAME, source)),\n ]);\n }\n}\n","import { KIRuntimeException } from '../../../exception/KIRuntimeException';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { isNullValue } from '../../../util/NullCheck';\nimport { PrimitiveUtil } from '../../../util/primitive/PrimitiveUtil';\nimport { AbstractArrayFunction } from './AbstractArrayFunction';\n\nexport class Frequency extends AbstractArrayFunction {\n FunctionOutput: any;\n\n public constructor() {\n super(\n 'Frequency',\n [\n Frequency.PARAMETER_ARRAY_SOURCE,\n Frequency.PARAMETER_ANY,\n Frequency.PARAMETER_INT_SOURCE_FROM,\n Frequency.PARAMETER_INT_LENGTH,\n ],\n Frequency.EVENT_RESULT_INTEGER,\n );\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let source: any[] = context\n ?.getArguments()\n ?.get(Frequency.PARAMETER_ARRAY_SOURCE.getParameterName());\n\n let find: any = context?.getArguments()?.get(Frequency.PARAMETER_ANY.getParameterName());\n\n let start: number = context\n ?.getArguments()\n ?.get(Frequency.PARAMETER_INT_SOURCE_FROM.getParameterName());\n\n let length: number = context\n ?.getArguments()\n ?.get(Frequency.PARAMETER_INT_LENGTH.getParameterName());\n\n if (source.length == 0)\n return new FunctionOutput([\n EventResult.outputOf(new Map([[Frequency.EVENT_RESULT_NAME, 0]])),\n ]);\n\n if (start > source.length)\n throw new KIRuntimeException('Given start point is more than the size of source');\n\n let end: number = start + length;\n\n if (length == -1) end = source.length - start;\n\n if (end > source.length)\n throw new KIRuntimeException('Given length is more than the size of source');\n\n let frequency: number = 0;\n\n for (let i: number = start; i < end && i < source.length; i++) {\n if (PrimitiveUtil.compare(source[i], find) == 0) frequency++;\n }\n\n return new FunctionOutput([\n EventResult.outputOf(new Map([[Frequency.EVENT_RESULT_NAME, frequency]])),\n ]);\n }\n}\n","import { KIRuntimeException } from '../../../exception/KIRuntimeException';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { isNullValue } from '../../../util/NullCheck';\nimport { PrimitiveUtil } from '../../../util/primitive/PrimitiveUtil';\nimport { AbstractArrayFunction } from './AbstractArrayFunction';\n\nexport class IndexOf extends AbstractArrayFunction {\n public constructor() {\n super(\n 'IndexOf',\n [\n IndexOf.PARAMETER_ARRAY_SOURCE,\n IndexOf.PARAMETER_ANY_NOT_NULL,\n IndexOf.PARAMETER_INT_FIND_FROM,\n ],\n IndexOf.EVENT_RESULT_INTEGER,\n );\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let source: any[] = context\n ?.getArguments()\n ?.get(IndexOf.PARAMETER_ARRAY_SOURCE.getParameterName());\n\n var find = context?.getArguments()?.get(IndexOf.PARAMETER_ANY_NOT_NULL.getParameterName());\n\n let len: number = context\n ?.getArguments()\n ?.get(IndexOf.PARAMETER_INT_FIND_FROM.getParameterName());\n\n if (source.length == 0)\n return new FunctionOutput([\n EventResult.outputOf(new Map([[IndexOf.EVENT_RESULT_NAME, -1]])),\n ]);\n\n if (len < 0 || len > source.length)\n throw new KIRuntimeException(\n 'The size of the search index of the array is greater than the size of the array',\n );\n\n let index: number = -1;\n\n for (let i: number = len; i < source.length; i++) {\n if (PrimitiveUtil.compare(source[i], find) == 0) {\n index = i;\n break;\n }\n }\n\n return new FunctionOutput([\n EventResult.outputOf(new Map([[IndexOf.EVENT_RESULT_NAME, index]])),\n ]);\n }\n}\n","import { KIRuntimeException } from '../../../exception/KIRuntimeException';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { PrimitiveUtil } from '../../../util/primitive/PrimitiveUtil';\nimport { AbstractArrayFunction } from './AbstractArrayFunction';\n\nexport class IndexOfArray extends AbstractArrayFunction {\n public constructor() {\n super(\n 'IndexOfArray',\n [\n IndexOfArray.PARAMETER_ARRAY_SOURCE,\n IndexOfArray.PARAMETER_ARRAY_SECOND_SOURCE,\n IndexOfArray.PARAMETER_INT_FIND_FROM,\n ],\n IndexOfArray.EVENT_RESULT_INTEGER,\n );\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let source: any[] = context\n ?.getArguments()\n ?.get(IndexOfArray.PARAMETER_ARRAY_SOURCE.getParameterName());\n\n let secondSource: any[] = context\n ?.getArguments()\n ?.get(IndexOfArray.PARAMETER_ARRAY_SECOND_SOURCE.getParameterName());\n\n let from: number = context\n ?.getArguments()\n ?.get(IndexOfArray.PARAMETER_INT_FIND_FROM.getParameterName());\n\n if (source.length == 0 || secondSource.length == 0)\n return new FunctionOutput([\n EventResult.outputOf(new Map([[IndexOfArray.EVENT_RESULT_NAME, -1]])),\n ]);\n\n if (from < 0 || from > source.length || source.length < secondSource.length)\n throw new KIRuntimeException(\n 'Given from second source is more than the size of the source array',\n );\n\n let secondSourceSize: number = secondSource.length;\n let index: number = -1;\n\n for (let i: number = from; i < source.length; i++) {\n let j: number = 0;\n if (PrimitiveUtil.compare(source[i], secondSource[j]) == 0) {\n while (j < secondSourceSize) {\n if (PrimitiveUtil.compare(source[i + j], secondSource[j]) != 0) {\n break;\n }\n j++;\n }\n if (j == secondSourceSize) {\n index = i;\n break;\n }\n }\n }\n\n return new FunctionOutput([\n EventResult.outputOf(new Map([[IndexOfArray.EVENT_RESULT_NAME, index]])),\n ]);\n }\n}\n","import { KIRuntimeException } from '../../../exception/KIRuntimeException';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { PrimitiveUtil } from '../../../util/primitive/PrimitiveUtil';\nimport { AbstractArrayFunction } from './AbstractArrayFunction';\n\nexport class LastIndexOf extends AbstractArrayFunction {\n public constructor() {\n super(\n 'LastIndexOf',\n [\n LastIndexOf.PARAMETER_ARRAY_SOURCE,\n LastIndexOf.PARAMETER_ANY_NOT_NULL,\n LastIndexOf.PARAMETER_INT_FIND_FROM,\n ],\n LastIndexOf.EVENT_RESULT_INTEGER,\n );\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let source: any[] = context\n ?.getArguments()\n ?.get(LastIndexOf.PARAMETER_ARRAY_SOURCE.getParameterName());\n\n var find = context\n ?.getArguments()\n ?.get(LastIndexOf.PARAMETER_ANY_NOT_NULL.getParameterName());\n\n let len = context\n ?.getArguments()\n ?.get(LastIndexOf.PARAMETER_INT_FIND_FROM.getParameterName());\n\n if (source.length == 0)\n return new FunctionOutput([\n EventResult.outputOf(new Map([[LastIndexOf.EVENT_RESULT_NAME, -1]])),\n ]);\n\n if (len < 0 || len > source.length)\n throw new KIRuntimeException(\n \"The value of length shouldn't the exceed the size of the array or shouldn't be in terms\",\n );\n\n let index: number = -1;\n\n for (let i: number = source.length - 1; i >= len; i--) {\n if (PrimitiveUtil.compare(source[i], find) == 0) {\n index = i;\n break;\n }\n }\n\n return new FunctionOutput([\n EventResult.outputOf(new Map([[LastIndexOf.EVENT_RESULT_NAME, index]])),\n ]);\n }\n}\n","import { KIRuntimeException } from '../../../exception/KIRuntimeException';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { PrimitiveUtil } from '../../../util/primitive/PrimitiveUtil';\nimport { AbstractArrayFunction } from './AbstractArrayFunction';\n\nexport class LastIndexOfArray extends AbstractArrayFunction {\n public constructor() {\n super(\n 'LastIndexOfArray',\n [\n LastIndexOfArray.PARAMETER_ARRAY_SOURCE,\n LastIndexOfArray.PARAMETER_ARRAY_SECOND_SOURCE,\n LastIndexOfArray.PARAMETER_INT_FIND_FROM,\n ],\n LastIndexOfArray.EVENT_RESULT_INTEGER,\n );\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let source: any[] = context\n ?.getArguments()\n ?.get(LastIndexOfArray.PARAMETER_ARRAY_SOURCE.getParameterName());\n\n let secondSource: any[] = context\n ?.getArguments()\n ?.get(LastIndexOfArray.PARAMETER_ARRAY_SECOND_SOURCE.getParameterName());\n\n let from: any = context\n ?.getArguments()\n ?.get(LastIndexOfArray.PARAMETER_INT_FIND_FROM.getParameterName());\n\n if (source.length == 0)\n return new FunctionOutput([\n EventResult.outputOf(new Map([[LastIndexOfArray.EVENT_RESULT_NAME, -1]])),\n ]);\n\n if (from < 0 || from > source.length || secondSource.length > source.length)\n throw new KIRuntimeException(\n 'Given from index is more than the size of the source array',\n );\n\n let secondSourceSize: number = secondSource.length;\n let index: number = -1;\n\n for (let i: number = from; i < source.length; i++) {\n let j: number = 0;\n if (PrimitiveUtil.compare(source[i], secondSource[j]) == 0) {\n while (j < secondSourceSize) {\n if (PrimitiveUtil.compare(source[i + j], secondSource[j]) != 0) {\n break;\n }\n j++;\n }\n if (j == secondSourceSize) {\n index = i;\n }\n }\n }\n\n return new FunctionOutput([\n EventResult.outputOf(new Map([[LastIndexOfArray.EVENT_RESULT_NAME, index]])),\n ]);\n }\n}\n","import { KIRuntimeException } from '../../../exception/KIRuntimeException';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { AbstractArrayFunction } from './AbstractArrayFunction';\nimport { PrimitiveUtil } from '../../../util/primitive/PrimitiveUtil';\n\nexport class Max extends AbstractArrayFunction {\n public constructor() {\n super('Max', [Max.PARAMETER_ARRAY_SOURCE_PRIMITIVE], Max.EVENT_RESULT_ANY);\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let source: any[] = context\n ?.getArguments()\n ?.get(Max.PARAMETER_ARRAY_SOURCE_PRIMITIVE.getParameterName());\n\n if (source.length == 0) throw new KIRuntimeException('Search source array cannot be empty');\n\n let max: any = source[0];\n for (let i: number = 1; i < source.length; i++) {\n let y: any = source[i];\n if (PrimitiveUtil.comparePrimitive(max, y) >= 0) continue;\n max = y;\n }\n\n return new FunctionOutput([EventResult.outputOf(new Map([[Max.EVENT_RESULT_NAME, max]]))]);\n }\n}\n","import { KIRuntimeException } from '../../../exception/KIRuntimeException';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { AbstractArrayFunction } from './AbstractArrayFunction';\nimport { PrimitiveUtil } from '../../../util/primitive/PrimitiveUtil';\nimport { isNullValue } from '../../../util/NullCheck';\n\nexport class Min extends AbstractArrayFunction {\n public constructor() {\n super('Min', [Min.PARAMETER_ARRAY_SOURCE_PRIMITIVE], Min.EVENT_RESULT_ANY);\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let source: any[] = context\n ?.getArguments()\n ?.get(Min.PARAMETER_ARRAY_SOURCE_PRIMITIVE.getParameterName());\n\n if (source.length == 0) throw new KIRuntimeException('Search source array cannot be empty');\n\n let min: any = undefined;\n for (let i: number = 0; i < source.length; i++) {\n if (isNullValue(source[i])) continue;\n if (min === undefined || PrimitiveUtil.comparePrimitive(source[i], min) < 0)\n min = source[i];\n }\n\n return new FunctionOutput([EventResult.outputOf(new Map([[Min.EVENT_RESULT_NAME, min]]))]);\n }\n}\n","import { KIRuntimeException } from '../../../exception/KIRuntimeException';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { AbstractArrayFunction } from './AbstractArrayFunction';\n\nexport class MisMatch extends AbstractArrayFunction {\n public constructor() {\n super(\n 'MisMatch',\n [\n MisMatch.PARAMETER_ARRAY_SOURCE,\n MisMatch.PARAMETER_INT_FIND_FROM,\n MisMatch.PARAMETER_ARRAY_SECOND_SOURCE,\n MisMatch.PARAMETER_INT_SECOND_SOURCE_FROM,\n MisMatch.PARAMETER_INT_LENGTH,\n ],\n MisMatch.EVENT_RESULT_INTEGER,\n );\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let firstSource: any[] = context\n ?.getArguments()\n ?.get(MisMatch.PARAMETER_ARRAY_SOURCE.getParameterName());\n\n let firstFind: number = context\n ?.getArguments()\n ?.get(MisMatch.PARAMETER_INT_FIND_FROM.getParameterName());\n\n let secondSource: any[] = context\n ?.getArguments()\n ?.get(MisMatch.PARAMETER_ARRAY_SECOND_SOURCE.getParameterName());\n\n let secondFind: number = context\n ?.getArguments()\n ?.get(MisMatch.PARAMETER_INT_SECOND_SOURCE_FROM.getParameterName());\n\n let length: number = context\n ?.getArguments()\n ?.get(MisMatch.PARAMETER_INT_LENGTH.getParameterName());\n\n // write check conditions\n\n let first: number = firstFind < firstSource.length && firstFind > 0 ? firstFind : 0;\n let second: number = secondFind < secondSource.length && secondFind > 0 ? secondFind : 0;\n\n if (first + length >= firstSource.length || second + length > secondSource.length)\n throw new KIRuntimeException(\n 'The size of the array for first and second which was being requested is more than size of the given array',\n );\n\n let index: number = -1;\n\n for (let i: number = 0; i < length; i++) {\n if (firstSource[first + i] != secondSource[second + i]) {\n index = i;\n break;\n }\n }\n\n return new FunctionOutput([\n EventResult.outputOf(new Map([[MisMatch.EVENT_RESULT_NAME, index]])),\n ]);\n }\n}\n","import { KIRuntimeException } from '../../../exception/KIRuntimeException';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { AbstractArrayFunction } from './AbstractArrayFunction';\n\nexport class Reverse extends AbstractArrayFunction {\n public constructor() {\n super(\n 'Reverse',\n [\n Reverse.PARAMETER_ARRAY_SOURCE,\n Reverse.PARAMETER_INT_SOURCE_FROM,\n Reverse.PARAMETER_INT_LENGTH,\n ],\n Reverse.EVENT_RESULT_ARRAY,\n );\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let source: any[] = context\n ?.getArguments()\n ?.get(Reverse.PARAMETER_ARRAY_SOURCE.getParameterName());\n\n let st: number = context\n ?.getArguments()\n ?.get(Reverse.PARAMETER_INT_SOURCE_FROM.getParameterName());\n\n let len: number = context\n ?.getArguments()\n ?.get(Reverse.PARAMETER_INT_LENGTH.getParameterName());\n\n if (len == -1) len = source.length - st;\n\n if (len >= source.length || len < 0 || st < 0)\n throw new KIRuntimeException(\n 'Please provide start point between the start and end indexes or provide the length which was less than the source size ',\n );\n\n source = [...source];\n\n let endpoint: number = st + len - 1;\n while (st <= endpoint) {\n let first: any = source[st];\n let last: any = source[endpoint];\n source[st++] = last;\n source[endpoint--] = first;\n }\n\n return new FunctionOutput([\n EventResult.outputOf(new Map([[Reverse.EVENT_RESULT_NAME, source]])),\n ]);\n }\n}\n","import { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { AbstractArrayFunction } from './AbstractArrayFunction';\n\nexport class Rotate extends AbstractArrayFunction {\n public constructor() {\n super(\n 'Rotate',\n [Rotate.PARAMETER_ARRAY_SOURCE, Rotate.PARAMETER_ROTATE_LENGTH],\n Rotate.EVENT_RESULT_ANY,\n );\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let source: any[] = context\n ?.getArguments()\n ?.get(Rotate.PARAMETER_ARRAY_SOURCE.getParameterName());\n\n let rotLen: number = context\n ?.getArguments()\n ?.get(Rotate.PARAMETER_ROTATE_LENGTH.getParameterName());\n\n if (source.length == 0)\n return new FunctionOutput([\n EventResult.outputOf(new Map([[AbstractArrayFunction.EVENT_RESULT_NAME, source]])),\n ]);\n\n source = [...source];\n\n let size: number = source.length;\n rotLen = rotLen % size;\n\n this.rotate(source, 0, rotLen - 1);\n this.rotate(source, rotLen, size - 1);\n this.rotate(source, 0, size - 1);\n\n return new FunctionOutput([\n EventResult.outputOf(new Map([[AbstractArrayFunction.EVENT_RESULT_NAME, source]])),\n ]);\n }\n\n private rotate(elements: any[], start: number, end: number): void {\n while (start < end) {\n let temp: any = elements[start];\n elements[start++] = elements[end];\n elements[end--] = temp;\n }\n }\n}\n","import { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { AbstractArrayFunction } from './AbstractArrayFunction';\n\nexport class Shuffle extends AbstractArrayFunction {\n public constructor() {\n super('Shuffle', [Shuffle.PARAMETER_ARRAY_SOURCE], Shuffle.EVENT_RESULT_ANY);\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let source: any[] = context\n ?.getArguments()\n ?.get(Shuffle.PARAMETER_ARRAY_SOURCE.getParameterName());\n\n if (source.length <= 1)\n return new FunctionOutput([\n EventResult.outputOf(new Map([[AbstractArrayFunction.EVENT_RESULT_NAME, source]])),\n ]);\n\n source = [...source];\n let x: number = 0;\n let size: number = source.length;\n\n for (let i: number = 0; i < size; i++) {\n let y: number = Math.floor(Math.random() * size) % size;\n let temp: any = source[x];\n source[x] = source[y];\n source[y] = temp;\n x = y;\n }\n\n return new FunctionOutput([\n EventResult.outputOf(new Map([[AbstractArrayFunction.EVENT_RESULT_NAME, source]])),\n ]);\n }\n}\n","import { KIRuntimeException } from '../../../exception/KIRuntimeException';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\n\nimport { AbstractArrayFunction } from './AbstractArrayFunction';\n\nexport class Sort extends AbstractArrayFunction {\n public constructor() {\n super(\n 'Sort',\n [\n Sort.PARAMETER_ARRAY_SOURCE_PRIMITIVE,\n Sort.PARAMETER_INT_FIND_FROM,\n Sort.PARAMETER_INT_LENGTH,\n Sort.PARAMETER_BOOLEAN_ASCENDING,\n ],\n Sort.EVENT_RESULT_ANY,\n );\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let source: any[] = context\n ?.getArguments()\n ?.get(Sort.PARAMETER_ARRAY_SOURCE_PRIMITIVE.getParameterName());\n\n let start: number = context\n ?.getArguments()\n ?.get(Sort.PARAMETER_INT_FIND_FROM.getParameterName());\n\n let len: number = context\n ?.getArguments()\n ?.get(Sort.PARAMETER_INT_LENGTH.getParameterName());\n\n let ascending: boolean = context\n ?.getArguments()\n ?.get(Sort.PARAMETER_BOOLEAN_ASCENDING.getParameterName());\n\n if (source.length == 0)\n return new FunctionOutput([\n EventResult.outputOf(new Map([[AbstractArrayFunction.EVENT_RESULT_NAME, source]])),\n ]);\n\n source = [...source];\n if (len == -1) len = source.length - start;\n\n if (start < 0 || start >= source.length || start + len > source.length)\n throw new KIRuntimeException(\n 'Given start point is more than the size of the array or not available at that point',\n );\n\n let slicedArray: any[] = source.slice(start, start + len + 1);\n\n slicedArray.sort((a, b) => compareFunction(a, b, ascending));\n\n source.splice(start, len, ...slicedArray);\n\n return new FunctionOutput([\n EventResult.outputOf(new Map([[AbstractArrayFunction.EVENT_RESULT_NAME, source]])),\n ]);\n }\n}\n\nfunction compareFunction(a: any, b: any, ascending: boolean): number {\n if (a === b) return 0;\n if (a === null) return 1;\n if (b === null) return -1;\n if (!ascending) return a < b ? -1 : 1;\n\n return a < b ? 1 : -1;\n}\n","import { KIRuntimeException } from '../../../exception/KIRuntimeException';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { AbstractArrayFunction } from './AbstractArrayFunction';\n\nexport class SubArray extends AbstractArrayFunction {\n public constructor() {\n super(\n 'SubArray',\n [\n SubArray.PARAMETER_ARRAY_SOURCE,\n SubArray.PARAMETER_INT_FIND_FROM,\n SubArray.PARAMETER_INT_LENGTH,\n ],\n SubArray.EVENT_RESULT_ARRAY,\n );\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let source: any[] = context\n ?.getArguments()\n ?.get(SubArray.PARAMETER_ARRAY_SOURCE.getParameterName());\n\n let start: number = context\n ?.getArguments()\n ?.get(SubArray.PARAMETER_INT_FIND_FROM.getParameterName());\n\n let len: number = context\n ?.getArguments()\n ?.get(SubArray.PARAMETER_INT_LENGTH.getParameterName());\n\n if (len == -1) len = source.length - start;\n\n if (len <= 0) return new FunctionOutput([EventResult.outputOf(new Map([]))]);\n\n if (!(start >= 0 && start < source.length) || start + len > source.length)\n throw new KIRuntimeException(\n 'Given find from point is more than the source size array or the Requested length for the subarray was more than the source size',\n );\n\n let slicedArray: any[] = source.slice(start, start + len);\n\n return new FunctionOutput([\n EventResult.outputOf(new Map([[SubArray.EVENT_RESULT_NAME, slicedArray]])),\n ]);\n }\n}\n","import { KIRuntimeException } from '../../../exception/KIRuntimeException';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { isNullValue } from '../../../util/NullCheck';\nimport { AbstractArrayFunction } from './AbstractArrayFunction';\n\nexport class Insert extends AbstractArrayFunction {\n public constructor() {\n super(\n 'Insert',\n [Insert.PARAMETER_ARRAY_SOURCE, Insert.PARAMETER_INT_OFFSET, Insert.PARAMETER_ANY],\n Insert.EVENT_RESULT_ARRAY,\n );\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let source: any[] = context\n ?.getArguments()\n ?.get(Insert.PARAMETER_ARRAY_SOURCE.getParameterName());\n\n let offset: number = context\n ?.getArguments()\n ?.get(Insert.PARAMETER_INT_OFFSET.getParameterName());\n\n var output = context?.getArguments()?.get(Insert.PARAMETER_ANY.getParameterName());\n\n if (isNullValue(output) || isNullValue(offset) || offset > source.length)\n throw new KIRuntimeException('Please valid resouces to insert at the correct location');\n\n source = [...source];\n\n if (source.length == 0) {\n if (offset == 0) source.push(output);\n return new FunctionOutput([\n EventResult.outputOf(new Map([[AbstractArrayFunction.EVENT_RESULT_NAME, source]])),\n ]);\n }\n\n source.push(output);\n let len: number = source.length - 1;\n offset++; // to insert at that point\n\n while (len >= offset) {\n let temp: any = source[len - 1];\n source[len - 1] = source[len];\n source[len--] = temp;\n }\n\n return new FunctionOutput([\n EventResult.outputOf(new Map([[AbstractArrayFunction.EVENT_RESULT_NAME, source]])),\n ]);\n }\n}\n","import { KIRuntimeException } from '../../../exception/KIRuntimeException';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { isNullValue } from '../../../util/NullCheck';\nimport { AbstractArrayFunction } from './AbstractArrayFunction';\n\nexport class InsertLast extends AbstractArrayFunction {\n public constructor() {\n super(\n 'InsertLast',\n [InsertLast.PARAMETER_ARRAY_SOURCE, InsertLast.PARAMETER_ANY],\n InsertLast.EVENT_RESULT_ARRAY,\n );\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let source: any[] = context\n ?.getArguments()\n ?.get(InsertLast.PARAMETER_ARRAY_SOURCE.getParameterName());\n\n var output = context?.getArguments()?.get(InsertLast.PARAMETER_ANY.getParameterName());\n\n source = [...source];\n\n source.push(output);\n return new FunctionOutput([\n EventResult.outputOf(new Map([[AbstractArrayFunction.EVENT_RESULT_NAME, source]])),\n ]);\n }\n}\n","import { KIRuntimeException } from '../../../exception/KIRuntimeException';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { MapUtil } from '../../../util/MapUtil';\nimport { isNullValue } from '../../../util/NullCheck';\nimport { deepEqual } from '../../../util/deepEqual';\nimport { duplicate } from '../../../util/duplicate';\nimport { StringFormatter } from '../../../util/string/StringFormatter';\nimport { AbstractArrayFunction } from './AbstractArrayFunction';\n\nexport class RemoveDuplicates extends AbstractArrayFunction {\n public constructor() {\n super(\n 'RemoveDuplicates',\n [\n RemoveDuplicates.PARAMETER_ARRAY_SOURCE,\n RemoveDuplicates.PARAMETER_INT_SOURCE_FROM,\n RemoveDuplicates.PARAMETER_INT_LENGTH,\n ],\n RemoveDuplicates.EVENT_RESULT_ARRAY,\n );\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n var source = context\n ?.getArguments()\n ?.get(RemoveDuplicates.PARAMETER_ARRAY_SOURCE.getParameterName());\n var srcfrom = context\n ?.getArguments()\n ?.get(RemoveDuplicates.PARAMETER_INT_SOURCE_FROM.getParameterName());\n var length = context\n ?.getArguments()\n ?.get(RemoveDuplicates.PARAMETER_INT_LENGTH.getParameterName());\n\n if (length == -1) length = source.length - srcfrom;\n\n if (srcfrom + length > source.length)\n throw new KIRuntimeException(\n StringFormatter.format(\n 'Array has no elements from $ to $ as the array size is $',\n srcfrom,\n srcfrom + length,\n source.length,\n ),\n );\n\n const ja: any[] = [...source];\n const to = srcfrom + length;\n\n for (let i = to - 1; i >= srcfrom; i--) {\n for (let j = i - 1; j >= srcfrom; j--) {\n if (deepEqual(ja[i], ja[j])) {\n ja.splice(i, 1);\n break;\n }\n }\n }\n\n return new FunctionOutput([\n EventResult.outputOf(MapUtil.of(RemoveDuplicates.EVENT_RESULT_NAME, ja)),\n ]);\n }\n}\n","import { KIRunConstants } from '../../constant/KIRunConstants';\nimport { KIRuntimeException } from '../../exception/KIRuntimeException';\n\nexport class StringBuilder {\n private str: string;\n\n public constructor(str?: string) {\n this.str = str ?? '';\n }\n\n public append(x: any): StringBuilder {\n this.str += x;\n return this;\n }\n\n public toString(): string {\n return '' + this.str;\n }\n\n public trim(): StringBuilder {\n this.str = this.str.trim();\n return this;\n }\n\n public setLength(num: number): StringBuilder {\n this.str = this.str.substring(0, num);\n return this;\n }\n\n public length(): number {\n return this.str.length;\n }\n\n public charAt(index: number): string {\n return this.str.charAt(index);\n }\n\n public deleteCharAt(index: number): StringBuilder {\n this.checkIndex(index);\n this.str = this.str.substring(0, index) + this.str.substring(index + 1);\n return this;\n }\n\n public insert(index: number, str: string): StringBuilder {\n this.str = this.str.substring(0, index) + str + this.str.substring(index);\n return this;\n }\n\n private checkIndex(index: number): void {\n if (index >= this.str.length)\n throw new KIRuntimeException(\n `Index ${index} is greater than or equal to ${this.str.length}`,\n );\n }\n\n public substring(start: number, end: number): string {\n return this.str.substring(start, end);\n }\n}\n","import { StringFormatter } from '../../../util/string/StringFormatter';\n\nexport class ExpressionEvaluationException extends Error {\n private cause?: Error;\n\n constructor(expression: string, message: string, err?: Error) {\n super(StringFormatter.format('$ : $', expression, message));\n\n this.cause = err;\n }\n\n public getCause(): Error | undefined {\n return this.cause;\n }\n}\n","export class ExpressionToken {\n expression: string;\n\n public constructor(expression: string) {\n this.expression = expression;\n }\n\n public getExpression(): string {\n return this.expression;\n }\n\n public toString(): string {\n return this.expression;\n }\n}\n","import { StringFormatter } from '../../util/string/StringFormatter';\nimport { ExpressionToken } from './ExpressionToken';\n\nexport class ExpressionTokenValue extends ExpressionToken {\n private element: any;\n\n public constructor(expression: string, element: any) {\n super(expression);\n this.element = element;\n }\n\n public getTokenValue(): any {\n return this.element;\n }\n\n public getElement(): any {\n return this.element;\n }\n\n public toString(): string {\n return StringFormatter.format('$: $', this.expression, this.element);\n }\n}\n","export class Operation {\n public static readonly MULTIPLICATION: Operation = new Operation('*');\n public static readonly DIVISION: Operation = new Operation('/');\n public static readonly INTEGER_DIVISION: Operation = new Operation('//');\n public static readonly MOD: Operation = new Operation('%');\n public static readonly ADDITION: Operation = new Operation('+');\n public static readonly SUBTRACTION: Operation = new Operation('-');\n\n public static readonly NOT: Operation = new Operation('not', undefined, true);\n public static readonly AND: Operation = new Operation('and', undefined, true);\n public static readonly OR: Operation = new Operation('or', undefined, true);\n public static readonly LESS_THAN: Operation = new Operation('<');\n public static readonly LESS_THAN_EQUAL: Operation = new Operation('<=');\n public static readonly GREATER_THAN: Operation = new Operation('>');\n public static readonly GREATER_THAN_EQUAL: Operation = new Operation('>=');\n public static readonly EQUAL: Operation = new Operation('=');\n public static readonly NOT_EQUAL: Operation = new Operation('!=');\n\n public static readonly BITWISE_AND: Operation = new Operation('&');\n public static readonly BITWISE_OR: Operation = new Operation('|');\n public static readonly BITWISE_XOR: Operation = new Operation('^');\n public static readonly BITWISE_COMPLEMENT: Operation = new Operation('~');\n public static readonly BITWISE_LEFT_SHIFT: Operation = new Operation('<<');\n public static readonly BITWISE_RIGHT_SHIFT: Operation = new Operation('>>');\n public static readonly BITWISE_UNSIGNED_RIGHT_SHIFT: Operation = new Operation('>>>');\n\n public static readonly UNARY_PLUS: Operation = new Operation('UN: +', '+');\n public static readonly UNARY_MINUS: Operation = new Operation('UN: -', '-');\n public static readonly UNARY_LOGICAL_NOT: Operation = new Operation('UN: not', 'not');\n public static readonly UNARY_BITWISE_COMPLEMENT: Operation = new Operation('UN: ~', '~');\n\n public static readonly ARRAY_OPERATOR: Operation = new Operation('[');\n public static readonly OBJECT_OPERATOR: Operation = new Operation('.');\n\n public static readonly NULLISH_COALESCING_OPERATOR: Operation = new Operation('??');\n\n public static readonly CONDITIONAL_TERNARY_OPERATOR: Operation = new Operation('?');\n\n private static readonly VALUE_OF: Map<string, Operation> = new Map([\n ['MULTIPLICATION', Operation.MULTIPLICATION],\n ['DIVISION', Operation.DIVISION],\n ['INTEGER_DIVISON', Operation.INTEGER_DIVISION],\n ['MOD', Operation.MOD],\n ['ADDITION', Operation.ADDITION],\n ['SUBTRACTION', Operation.SUBTRACTION],\n ['NOT', Operation.NOT],\n ['AND', Operation.AND],\n ['OR', Operation.OR],\n ['LESS_THAN', Operation.LESS_THAN],\n ['LESS_THAN_EQUAL', Operation.LESS_THAN_EQUAL],\n ['GREATER_THAN', Operation.GREATER_THAN],\n ['GREATER_THAN_EQUAL', Operation.GREATER_THAN_EQUAL],\n ['EQUAL', Operation.EQUAL],\n ['NOT_EQUAL', Operation.NOT_EQUAL],\n ['BITWISE_AND', Operation.BITWISE_AND],\n ['BITWISE_OR', Operation.BITWISE_OR],\n ['BITWISE_XOR', Operation.BITWISE_XOR],\n ['BITWISE_COMPLEMENT', Operation.BITWISE_COMPLEMENT],\n ['BITWISE_LEFT_SHIFT', Operation.BITWISE_LEFT_SHIFT],\n ['BITWISE_RIGHT_SHIFT', Operation.BITWISE_RIGHT_SHIFT],\n ['BITWISE_UNSIGNED_RIGHT_SHIFT', Operation.BITWISE_UNSIGNED_RIGHT_SHIFT],\n ['UNARY_PLUS', Operation.UNARY_PLUS],\n ['UNARY_MINUS', Operation.UNARY_MINUS],\n ['UNARY_LOGICAL_NOT', Operation.UNARY_LOGICAL_NOT],\n ['UNARY_BITWISE_COMPLEMENT', Operation.UNARY_BITWISE_COMPLEMENT],\n ['ARRAY_OPERATOR', Operation.ARRAY_OPERATOR],\n ['OBJECT_OPERATOR', Operation.OBJECT_OPERATOR],\n ['NULLISH_COALESCING_OPERATOR', Operation.NULLISH_COALESCING_OPERATOR],\n ['CONDITIONAL_TERNARY_OPERATOR', Operation.CONDITIONAL_TERNARY_OPERATOR],\n ]);\n\n public static readonly UNARY_OPERATORS: Set<Operation> = new Set([\n Operation.ADDITION,\n Operation.SUBTRACTION,\n Operation.NOT,\n Operation.BITWISE_COMPLEMENT,\n Operation.UNARY_PLUS,\n Operation.UNARY_MINUS,\n Operation.UNARY_LOGICAL_NOT,\n Operation.UNARY_BITWISE_COMPLEMENT,\n ]);\n\n public static readonly ARITHMETIC_OPERATORS: Set<Operation> = new Set([\n Operation.MULTIPLICATION,\n Operation.DIVISION,\n Operation.INTEGER_DIVISION,\n Operation.MOD,\n Operation.ADDITION,\n Operation.SUBTRACTION,\n ]);\n\n public static readonly LOGICAL_OPERATORS: Set<Operation> = new Set([\n Operation.NOT,\n Operation.AND,\n Operation.OR,\n Operation.LESS_THAN,\n Operation.LESS_THAN_EQUAL,\n Operation.GREATER_THAN,\n Operation.GREATER_THAN_EQUAL,\n Operation.EQUAL,\n Operation.NOT_EQUAL,\n Operation.NULLISH_COALESCING_OPERATOR,\n ]);\n\n public static readonly BITWISE_OPERATORS: Set<Operation> = new Set([\n Operation.BITWISE_AND,\n Operation.BITWISE_COMPLEMENT,\n Operation.BITWISE_LEFT_SHIFT,\n Operation.BITWISE_OR,\n Operation.BITWISE_RIGHT_SHIFT,\n Operation.BITWISE_UNSIGNED_RIGHT_SHIFT,\n Operation.BITWISE_XOR,\n ]);\n\n public static readonly CONDITIONAL_OPERATORS: Set<Operation> = new Set([\n Operation.CONDITIONAL_TERNARY_OPERATOR,\n ]);\n\n public static readonly OPERATOR_PRIORITY: Map<Operation, number> = new Map([\n [Operation.UNARY_PLUS, 1],\n [Operation.UNARY_MINUS, 1],\n [Operation.UNARY_LOGICAL_NOT, 1],\n [Operation.UNARY_BITWISE_COMPLEMENT, 1],\n [Operation.ARRAY_OPERATOR, 1],\n [Operation.OBJECT_OPERATOR, 1],\n [Operation.MULTIPLICATION, 2],\n [Operation.DIVISION, 2],\n [Operation.INTEGER_DIVISION, 2],\n [Operation.MOD, 2],\n [Operation.ADDITION, 3],\n [Operation.SUBTRACTION, 3],\n [Operation.BITWISE_LEFT_SHIFT, 4],\n [Operation.BITWISE_RIGHT_SHIFT, 4],\n [Operation.BITWISE_UNSIGNED_RIGHT_SHIFT, 4],\n [Operation.LESS_THAN, 5],\n [Operation.LESS_THAN_EQUAL, 5],\n [Operation.GREATER_THAN, 5],\n [Operation.GREATER_THAN_EQUAL, 5],\n [Operation.EQUAL, 6],\n [Operation.NOT_EQUAL, 6],\n [Operation.BITWISE_AND, 7],\n [Operation.BITWISE_XOR, 8],\n [Operation.BITWISE_OR, 9],\n [Operation.AND, 10],\n [Operation.OR, 11],\n [Operation.NULLISH_COALESCING_OPERATOR, 11],\n [Operation.CONDITIONAL_TERNARY_OPERATOR, 12],\n ]);\n\n public static readonly OPERATORS: Set<string> = new Set(\n [\n ...Array.from(Operation.ARITHMETIC_OPERATORS),\n ...Array.from(Operation.LOGICAL_OPERATORS),\n ...Array.from(Operation.BITWISE_OPERATORS),\n Operation.ARRAY_OPERATOR,\n Operation.OBJECT_OPERATOR,\n ...Array.from(Operation.CONDITIONAL_OPERATORS),\n ].map((e) => e.getOperator()),\n );\n\n public static readonly OPERATORS_WITHOUT_SPACE_WRAP: Set<string> = new Set(\n [\n ...Array.from(Operation.ARITHMETIC_OPERATORS),\n ...Array.from(Operation.LOGICAL_OPERATORS),\n ...Array.from(Operation.BITWISE_OPERATORS),\n Operation.ARRAY_OPERATOR,\n Operation.OBJECT_OPERATOR,\n ...Array.from(Operation.CONDITIONAL_OPERATORS),\n ]\n .filter((e) => !e.shouldBeWrappedInSpace())\n .map((e) => e.getOperator()),\n );\n\n public static readonly OPERATION_VALUE_OF: Map<string, Operation> = new Map(\n Array.from(Operation.VALUE_OF.entries()).map(([_, o]) => [o.getOperator(), o]),\n );\n\n public static readonly UNARY_MAP: Map<Operation, Operation> = new Map([\n [Operation.ADDITION, Operation.UNARY_PLUS],\n [Operation.SUBTRACTION, Operation.UNARY_MINUS],\n [Operation.NOT, Operation.UNARY_LOGICAL_NOT],\n [Operation.BITWISE_COMPLEMENT, Operation.UNARY_BITWISE_COMPLEMENT],\n [Operation.UNARY_PLUS, Operation.UNARY_PLUS],\n [Operation.UNARY_MINUS, Operation.UNARY_MINUS],\n [Operation.UNARY_LOGICAL_NOT, Operation.UNARY_LOGICAL_NOT],\n [Operation.UNARY_BITWISE_COMPLEMENT, Operation.UNARY_BITWISE_COMPLEMENT],\n ]);\n\n public static readonly BIGGEST_OPERATOR_SIZE: number = Array.from(Operation.VALUE_OF.values())\n .map((e) => e.getOperator())\n .filter((e) => !e.startsWith('UN: '))\n .map((e) => e.length)\n .reduce((a, c) => (a > c ? a : c), 0);\n\n private operator: string;\n private operatorName: string;\n private _shouldBeWrappedInSpace: boolean;\n public constructor(\n operator: string,\n operatorName?: string,\n shouldBeWrappedInSpace: boolean = false,\n ) {\n this.operator = operator;\n this.operatorName = operatorName ?? operator;\n this._shouldBeWrappedInSpace = shouldBeWrappedInSpace;\n }\n\n public getOperator(): string {\n return this.operator;\n }\n\n public getOperatorName(): string {\n return this.operatorName;\n }\n\n public shouldBeWrappedInSpace(): boolean {\n return this._shouldBeWrappedInSpace;\n }\n\n public valueOf(str: string): Operation | undefined {\n return Operation.VALUE_OF.get(str);\n }\n\n public toString(): string {\n return this.operator;\n }\n}\n","import { LinkedList } from '../../util/LinkedList';\nimport { StringBuilder } from '../../util/string/StringBuilder';\nimport { StringFormatter } from '../../util/string/StringFormatter';\nimport { StringUtil } from '../../util/string/StringUtil';\nimport { Tuple2 } from '../../util/Tuples';\nimport { ExpressionEvaluationException } from './exception/ExpressionEvaluationException';\nimport { ExpressionToken } from './ExpressionToken';\nimport { ExpressionTokenValue } from './ExpressionTokenValue';\nimport { Operation } from './Operation';\n\nexport class Expression extends ExpressionToken {\n // Data structure for storing tokens\n private tokens: LinkedList<ExpressionToken> = new LinkedList();\n // Data structure for storing operations\n private ops: LinkedList<Operation> = new LinkedList();\n\n public constructor(\n expression?: string,\n l?: ExpressionToken,\n r?: ExpressionToken,\n op?: Operation,\n ) {\n super(expression ? expression : '');\n if (l) this.tokens.push(l);\n if (r) this.tokens.push(r);\n if (op) this.ops.push(op);\n this.evaluate();\n }\n\n public getTokens(): LinkedList<ExpressionToken> {\n return this.tokens;\n }\n\n public getOperations(): LinkedList<Operation> {\n return this.ops;\n }\n\n private evaluate(): void {\n const length: number = this.expression.length;\n let chr: string = '';\n\n let sb: StringBuilder = new StringBuilder('');\n let buff: string | undefined = undefined;\n let i: number = 0;\n let isPrevOp: boolean = false;\n\n while (i < length) {\n chr = this.expression[i];\n buff = sb.toString();\n\n switch (chr) {\n case ' ': {\n isPrevOp = this.processTokenSepearator(sb, buff, isPrevOp);\n break;\n }\n case '(': {\n i = this.processSubExpression(length, sb, buff, i, isPrevOp);\n isPrevOp = false;\n break;\n }\n case ')': {\n throw new ExpressionEvaluationException(\n this.expression,\n 'Extra closing parenthesis found',\n );\n }\n case ']': {\n throw new ExpressionEvaluationException(\n this.expression,\n 'Extra closing square bracket found',\n );\n }\n case \"'\":\n case '\"': {\n let result: Tuple2<number, boolean> = this.processStringLiteral(length, chr, i);\n i = result.getT1();\n isPrevOp = result.getT2();\n break;\n }\n case '?': {\n if (\n i + 1 < length &&\n this.expression.charAt(i + 1) != '?' &&\n i != 0 &&\n this.expression.charAt(i - 1) != '?'\n ) {\n i = this.processTernaryOperator(length, sb, buff, i, isPrevOp);\n } else {\n let result: Tuple2<number, boolean> = this.processOthers(\n chr,\n length,\n sb,\n buff,\n i,\n isPrevOp,\n );\n i = result.getT1();\n isPrevOp = result.getT2();\n if (isPrevOp && this.ops.peek() == Operation.ARRAY_OPERATOR) {\n result = this.process(length, sb, i);\n i = result.getT1();\n isPrevOp = result.getT2();\n }\n }\n break;\n }\n default:\n let result: Tuple2<number, boolean> = this.processOthers(\n chr,\n length,\n sb,\n buff,\n i,\n isPrevOp,\n );\n i = result.getT1();\n isPrevOp = result.getT2();\n if (isPrevOp && this.ops.peek() == Operation.ARRAY_OPERATOR) {\n result = this.process(length, sb, i);\n i = result.getT1();\n isPrevOp = result.getT2();\n }\n }\n\n ++i;\n }\n\n buff = sb.toString();\n if (!StringUtil.isNullOrBlank(buff)) {\n if (Operation.OPERATORS.has(buff)) {\n throw new ExpressionEvaluationException(\n this.expression,\n 'Expression is ending with an operator',\n );\n } else {\n this.tokens.push(new ExpressionToken(buff));\n }\n }\n }\n\n private processStringLiteral(length: number, chr: string, i: number): Tuple2<number, boolean> {\n let strConstant: string = '';\n\n let j: number = i + 1;\n for (; j < length; j++) {\n let nextChar = this.expression.charAt(j);\n\n if (nextChar == chr && this.expression.charAt(j - 1) != '\\\\') break;\n\n strConstant += nextChar;\n }\n\n if (j == length && this.expression.charAt(j - 1) != chr) {\n throw new ExpressionEvaluationException(\n this.expression,\n 'Missing string ending marker ' + chr,\n );\n }\n\n let result = new Tuple2(j, false);\n\n this.tokens.push(new ExpressionTokenValue(strConstant, strConstant));\n return result;\n }\n\n private process(length: number, sb: StringBuilder, i: number): Tuple2<number, boolean> {\n let cnt: number = 1;\n ++i;\n while (i < length && cnt != 0) {\n let c: string = this.expression.charAt(i);\n if (c == ']') --cnt;\n else if (c == '[') ++cnt;\n if (cnt != 0) {\n sb.append(c);\n i++;\n }\n }\n this.tokens.push(new Expression(sb.toString()));\n sb.setLength(0);\n\n return new Tuple2(i, false);\n }\n\n private processOthers(\n chr: string,\n length: number,\n sb: StringBuilder,\n buff: string,\n i: number,\n isPrevOp: boolean,\n ): Tuple2<number, boolean> {\n let start: number = length - i;\n start = start < Operation.BIGGEST_OPERATOR_SIZE ? start : Operation.BIGGEST_OPERATOR_SIZE;\n\n for (let size = start; size > 0; size--) {\n let op: string = this.expression.substring(i, i + size);\n if (Operation.OPERATORS_WITHOUT_SPACE_WRAP.has(op)) {\n if (!StringUtil.isNullOrBlank(buff)) {\n this.tokens.push(new ExpressionToken(buff));\n isPrevOp = false;\n }\n this.checkUnaryOperator(\n this.tokens,\n this.ops,\n Operation.OPERATION_VALUE_OF.get(op),\n isPrevOp,\n );\n isPrevOp = true;\n sb.setLength(0);\n return new Tuple2(i + size - 1, isPrevOp);\n }\n }\n\n sb.append(chr);\n return new Tuple2(i, false);\n }\n\n private processTernaryOperator(\n length: number,\n sb: StringBuilder,\n buff: string,\n i: number,\n isPrevOp: boolean,\n ): number {\n if (isPrevOp) {\n throw new ExpressionEvaluationException(\n this.expression,\n 'Ternary operator is followed by an operator',\n );\n }\n\n if (buff.trim() != '') {\n this.tokens.push(new Expression(buff));\n sb.setLength(0);\n }\n\n ++i;\n let cnt: number = 1;\n let inChr = '';\n const start = i;\n while (i < length && cnt > 0) {\n inChr = this.expression.charAt(i);\n if (inChr == '?') ++cnt;\n else if (inChr == ':') --cnt;\n ++i;\n }\n\n if (inChr != ':') {\n throw new ExpressionEvaluationException(this.expression, \"':' operater is missing\");\n }\n\n if (i >= length) {\n throw new ExpressionEvaluationException(\n this.expression,\n 'Third part of the ternary expression is missing',\n );\n }\n\n while (\n !this.ops.isEmpty() &&\n this.hasPrecedence(Operation.CONDITIONAL_TERNARY_OPERATOR, this.ops.peek())\n ) {\n let prev: Operation = this.ops.pop();\n\n if (Operation.UNARY_OPERATORS.has(prev)) {\n const l: ExpressionToken = this.tokens.pop();\n this.tokens.push(new Expression('', l, undefined, prev));\n } else {\n let r = this.tokens.pop();\n let l = this.tokens.pop();\n\n this.tokens.push(new Expression('', l, r, prev));\n }\n }\n\n this.ops.push(Operation.CONDITIONAL_TERNARY_OPERATOR);\n this.tokens.push(new Expression(this.expression.substring(start, i - 1)));\n\n const secondExp: string = this.expression.substring(i);\n if (secondExp.trim() === '') {\n throw new ExpressionEvaluationException(\n this.expression,\n 'Third part of the ternary expression is missing',\n );\n }\n\n this.tokens.push(new Expression(secondExp));\n\n return length - 1;\n }\n\n private processSubExpression(\n length: number,\n sb: StringBuilder,\n buff: string,\n i: number,\n isPrevOp: boolean,\n ): number {\n if (Operation.OPERATORS.has(buff)) {\n this.checkUnaryOperator(\n this.tokens,\n this.ops,\n Operation.OPERATION_VALUE_OF.get(buff),\n isPrevOp,\n );\n sb.setLength(0);\n } else if (!StringUtil.isNullOrBlank(buff)) {\n throw new ExpressionEvaluationException(\n this.expression,\n StringFormatter.format('Unkown token : $ found.', buff),\n );\n }\n\n let cnt: number = 1;\n const subExp: StringBuilder = new StringBuilder();\n let inChr: string = this.expression.charAt(i);\n i++;\n while (i < length && cnt > 0) {\n inChr = this.expression.charAt(i);\n if (inChr == '(') cnt++;\n else if (inChr == ')') cnt--;\n if (cnt != 0) {\n subExp.append(inChr);\n i++;\n }\n }\n\n if (inChr != ')')\n throw new ExpressionEvaluationException(\n this.expression,\n 'Missing a closed parenthesis',\n );\n\n while (\n subExp.length() > 2 &&\n subExp.charAt(0) == '(' &&\n subExp.charAt(subExp.length() - 1) == ')'\n ) {\n subExp.deleteCharAt(0);\n subExp.setLength(subExp.length() - 1);\n }\n\n this.tokens.push(new Expression(subExp.toString().trim()));\n return i;\n }\n\n private processTokenSepearator(sb: StringBuilder, buff: string, isPrevOp: boolean): boolean {\n if (!StringUtil.isNullOrBlank(buff)) {\n if (Operation.OPERATORS.has(buff)) {\n this.checkUnaryOperator(\n this.tokens,\n this.ops,\n Operation.OPERATION_VALUE_OF.get(buff),\n isPrevOp,\n );\n isPrevOp = true;\n } else {\n this.tokens.push(new ExpressionToken(buff));\n isPrevOp = false;\n }\n }\n sb.setLength(0);\n\n return isPrevOp;\n }\n\n private checkUnaryOperator(\n tokens: LinkedList<ExpressionToken>,\n ops: LinkedList<Operation>,\n op: Operation | undefined,\n isPrevOp: boolean,\n ): void {\n if (!op) return;\n if (isPrevOp || tokens.isEmpty()) {\n if (Operation.UNARY_OPERATORS.has(op)) {\n const x = Operation.UNARY_MAP.get(op);\n if (x) ops.push(x);\n } else\n throw new ExpressionEvaluationException(\n this.expression,\n StringFormatter.format('Extra operator $ found.', op),\n );\n } else {\n while (!ops.isEmpty() && this.hasPrecedence(op, ops.peek())) {\n let prev: Operation = ops.pop();\n\n if (Operation.UNARY_OPERATORS.has(prev)) {\n let l: ExpressionToken = tokens.pop();\n tokens.push(new Expression('', l, undefined, prev));\n } else {\n let r: ExpressionToken = tokens.pop();\n let l: ExpressionToken = tokens.pop();\n\n tokens.push(new Expression('', l, r, prev));\n }\n }\n ops.push(op);\n }\n }\n\n private hasPrecedence(op1: Operation, op2: Operation): boolean {\n let pre1: number | undefined = Operation.OPERATOR_PRIORITY.get(op1);\n let pre2: number | undefined = Operation.OPERATOR_PRIORITY.get(op2);\n if (!pre1 || !pre2) {\n throw new Error('Unknown operators provided');\n }\n return pre2 < pre1;\n }\n\n public toString(): string {\n if (this.ops.isEmpty()) {\n if (this.tokens.size() == 1) return this.tokens.get(0).toString();\n return 'Error: No tokens';\n }\n\n let sb: StringBuilder = new StringBuilder();\n let ind: number = 0;\n\n const ops: Operation[] = this.ops.toArray();\n const tokens: ExpressionToken[] = this.tokens.toArray();\n\n for (let i = 0; i < ops.length; i++) {\n if (ops[i].getOperator().startsWith('UN: ')) {\n sb.append('(')\n .append(ops[i].getOperator().substring(4))\n .append(\n tokens[ind] instanceof Expression\n ? (tokens[ind] as Expression).toString()\n : tokens[ind],\n )\n .append(')');\n ind++;\n } else if (ops[i] == Operation.CONDITIONAL_TERNARY_OPERATOR) {\n let temp: ExpressionToken = tokens[ind++];\n sb.insert(\n 0,\n temp instanceof Expression ? (temp as Expression).toString() : temp.toString(),\n );\n sb.insert(0, ':');\n temp = tokens[ind++];\n sb.insert(\n 0,\n temp instanceof Expression ? (temp as Expression).toString() : temp.toString(),\n );\n sb.insert(0, '?');\n temp = tokens[ind++];\n sb.insert(\n 0,\n temp instanceof Expression ? (temp as Expression).toString() : temp.toString(),\n ).append(')');\n sb.insert(0, '(');\n } else {\n if (ind == 0) {\n const temp: ExpressionToken = tokens[ind++];\n sb.insert(\n 0,\n temp instanceof Expression\n ? (temp as Expression).toString()\n : temp.toString(),\n );\n }\n const temp: ExpressionToken = tokens[ind++];\n sb.insert(0, ops[i].getOperator())\n .insert(\n 0,\n temp instanceof Expression\n ? (temp as Expression).toString()\n : temp.toString(),\n )\n .insert(0, '(')\n .append(')');\n }\n }\n\n return sb.toString();\n }\n\n public equals(o: Expression): boolean {\n return this.expression == o.expression;\n }\n}\n","import { KIRuntimeException } from '../../../exception/KIRuntimeException';\nimport { isNullValue } from '../../../util/NullCheck';\nimport { StringFormatter } from '../../../util/string/StringFormatter';\nimport { StringUtil } from '../../../util/string/StringUtil';\nimport { ExpressionEvaluationException } from '../exception/ExpressionEvaluationException';\n\nexport abstract class TokenValueExtractor {\n public static readonly REGEX_SQUARE_BRACKETS: RegExp = /[\\[\\]]/;\n public static readonly REGEX_DOT: RegExp = /\\./;\n\n public getValue(token: string): any {\n let prefix: string = this.getPrefix();\n\n if (!token.startsWith(prefix))\n throw new KIRuntimeException(\n StringFormatter.format(\"Token $ doesn't start with $\", token, prefix),\n );\n\n return this.getValueInternal(token);\n }\n\n protected retrieveElementFrom(\n token: string,\n parts: string[],\n partNumber: number,\n jsonElement: any,\n ): any {\n if (isNullValue(jsonElement)) return undefined;\n\n if (parts.length == partNumber) return jsonElement;\n\n let bElement: any = parts[partNumber]\n .split(TokenValueExtractor.REGEX_SQUARE_BRACKETS)\n .map((e) => e.trim())\n .filter((e) => !StringUtil.isNullOrBlank(e))\n .reduce(\n (a, c, i) =>\n this.resolveForEachPartOfTokenWithBrackets(token, parts, partNumber, c, a, i),\n jsonElement,\n );\n\n return this.retrieveElementFrom(token, parts, partNumber + 1, bElement);\n }\n\n protected resolveForEachPartOfTokenWithBrackets(\n token: string,\n parts: string[],\n partNumber: number,\n c: string,\n a: any,\n i: any,\n ): any {\n if (isNullValue(a)) return undefined;\n\n if (i === 0) {\n if (c === 'length' && typeof a === 'string') {\n return a.length;\n }\n if (Array.isArray(a)) {\n if (c === 'length') return a.length;\n try {\n let index: number = parseInt(c);\n if (isNaN(index)) {\n throw new Error(StringFormatter.format('$ is not a number', index));\n }\n if (index >= a.length) return undefined;\n\n return a[index];\n } catch (err: any) {\n throw new ExpressionEvaluationException(\n token,\n StringFormatter.format(\"$ couldn't be parsed into integer in $\", c, token),\n err,\n );\n }\n }\n\n this.checkIfObject(token, parts, partNumber, a);\n return a[c];\n } else if (c?.startsWith('\"')) {\n if (!c.endsWith('\"') || c.length == 1 || c.length == 2)\n throw new ExpressionEvaluationException(\n token,\n StringFormatter.format('$ is missing a double quote or empty key found', token),\n );\n\n this.checkIfObject(token, parts, partNumber, a);\n return a[c.substring(1, c.length - 1)];\n }\n\n try {\n let index: number = parseInt(c);\n if (isNaN(index)) {\n throw new Error(StringFormatter.format('$ is not a number', index));\n }\n if (!Array.isArray(a))\n throw new ExpressionEvaluationException(\n token,\n StringFormatter.format(\n 'Expecting an array with index $ while processing the expression',\n index,\n token,\n ),\n );\n\n if (index >= a.length) return undefined;\n\n return a[index];\n } catch (err: any) {\n throw new ExpressionEvaluationException(\n token,\n StringFormatter.format(\"$ couldn't be parsed into integer in $\", c, token),\n err,\n );\n }\n }\n\n protected checkIfObject(\n token: string,\n parts: string[],\n partNumber: number,\n jsonElement: any,\n ): void {\n if (typeof jsonElement != 'object' || Array.isArray(jsonElement))\n throw new ExpressionEvaluationException(\n token,\n StringFormatter.format(\n 'Unable to retrive $ from $ in the path $',\n parts[partNumber],\n jsonElement.toString(),\n token,\n ),\n );\n }\n\n protected abstract getValueInternal(token: string): any;\n\n public abstract getPrefix(): string;\n}\n","import { KIRuntimeException } from '../../../exception/KIRuntimeException';\nimport { isNullValue } from '../../../util/NullCheck';\nimport { duplicate } from '../../../util/duplicate';\nimport { StringFormatter } from '../../../util/string/StringFormatter';\nimport { StringUtil } from '../../../util/string/StringUtil';\nimport { Expression } from '../Expression';\nimport { ExpressionTokenValue } from '../ExpressionTokenValue';\nimport { Operation } from '../Operation';\nimport { ExpressionEvaluationException } from '../exception/ExpressionEvaluationException';\nimport { TokenValueExtractor } from './TokenValueExtractor';\n\nexport class ObjectValueSetterExtractor extends TokenValueExtractor {\n private store: any;\n private prefix: string;\n constructor(store: any, prefix: string) {\n super();\n this.store = store;\n this.prefix = prefix;\n }\n protected getValueInternal(token: string) {\n let parts: string[] = token.split(TokenValueExtractor.REGEX_DOT);\n return this.retrieveElementFrom(token, parts, 1, this.store);\n }\n\n public getStore(): any {\n return this.store;\n }\n public setStore(store: any): ObjectValueSetterExtractor {\n this.store = store;\n return this;\n }\n\n public setValue(\n token: string,\n value: any,\n overwrite: boolean = true,\n deleteOnNull: boolean = false,\n ) {\n this.store = duplicate(this.store);\n this.modifyStore(token, value, overwrite, deleteOnNull);\n }\n\n private modifyStore(\n stringToken: string,\n value: any,\n overwrite: boolean,\n deleteOnNull: boolean,\n ) {\n const exp = new Expression(stringToken);\n const tokens = exp.getTokens();\n tokens.removeLast();\n const ops = exp.getOperations();\n\n let op = ops.removeLast();\n let token = tokens.removeLast();\n let mem =\n token instanceof ExpressionTokenValue\n ? (token as ExpressionTokenValue).getElement()\n : token.getExpression();\n\n let el = this.store;\n\n while (!ops.isEmpty()) {\n if (op == Operation.OBJECT_OPERATOR) {\n el = this.getDataFromObject(el, mem, ops.peekLast());\n } else {\n el = this.getDataFromArray(el, mem, ops.peekLast());\n }\n\n op = ops.removeLast();\n token = tokens.removeLast();\n mem =\n token instanceof ExpressionTokenValue\n ? (token as ExpressionTokenValue).getElement()\n : token.getExpression();\n }\n\n if (op == Operation.OBJECT_OPERATOR)\n this.putDataInObject(el, mem, value, overwrite, deleteOnNull);\n else this.putDataInArray(el, mem, value, overwrite, deleteOnNull);\n }\n\n private getDataFromArray(el: any, mem: string, nextOp: Operation): any {\n if (!Array.isArray(el))\n throw new KIRuntimeException(\n StringFormatter.format('Expected an array but found $', el),\n );\n\n const index = parseInt(mem);\n if (isNaN(index))\n throw new KIRuntimeException(\n StringFormatter.format('Expected an array index but found $', mem),\n );\n if (index < 0)\n throw new KIRuntimeException(\n StringFormatter.format('Array index is out of bound - $', mem),\n );\n\n let je = el[index];\n\n if (isNullValue(je)) {\n je = nextOp == Operation.OBJECT_OPERATOR ? {} : [];\n el[index] = je;\n }\n return je;\n }\n\n private getDataFromObject(el: any, mem: string, nextOp: Operation): any {\n if (Array.isArray(el) || typeof el !== 'object')\n throw new KIRuntimeException(\n StringFormatter.format('Expected an object but found $', el),\n );\n\n let je = el[mem];\n\n if (isNullValue(je)) {\n je = nextOp == Operation.OBJECT_OPERATOR ? {} : [];\n el[mem] = je;\n }\n return je;\n }\n\n private putDataInArray(\n el: any,\n mem: string,\n value: any,\n overwrite: boolean,\n deleteOnNull: boolean,\n ): void {\n if (!Array.isArray(el))\n throw new KIRuntimeException(\n StringFormatter.format('Expected an array but found $', el),\n );\n\n const index = parseInt(mem);\n if (isNaN(index))\n throw new KIRuntimeException(\n StringFormatter.format('Expected an array index but found $', mem),\n );\n if (index < 0)\n throw new KIRuntimeException(\n StringFormatter.format('Array index is out of bound - $', mem),\n );\n\n if (overwrite || isNullValue(el[index])) {\n if (deleteOnNull && isNullValue(value)) el.splice(index, 1);\n else el[index] = value;\n }\n }\n\n private putDataInObject(\n el: any,\n mem: string,\n value: any,\n overwrite: boolean,\n deleteOnNull: boolean,\n ): void {\n if (Array.isArray(el) || typeof el !== 'object')\n throw new KIRuntimeException(\n StringFormatter.format('Expected an object but found $', el),\n );\n\n if (overwrite || isNullValue(el[mem])) {\n if (deleteOnNull && isNullValue(value)) delete el[mem];\n else el[mem] = value;\n }\n }\n\n getPrefix(): string {\n return this.prefix;\n }\n}\n","import { Schema } from '../../../json/schema/Schema';\nimport { SchemaType } from '../../../json/schema/type/SchemaType';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { Parameter } from '../../../model/Parameter';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { ObjectValueSetterExtractor } from '../../../runtime/expression/tokenextractor/ObjectValueSetterExtractor';\nimport { isNullValue } from '../../../util/NullCheck';\nimport { AbstractArrayFunction } from './AbstractArrayFunction';\n\nconst KEY_PATH = 'keyPath';\nconst VALUE_PATH = 'valuePath';\nconst IGNORE_NULL_VALUES = 'ignoreNullValues';\nconst IGNORE_NULL_KEYS = 'ignoreNullKeys';\nconst IGNORE_DUPLICATE_KEYS = 'ignoreDuplicateKeys';\n\nexport class ArrayToObject extends AbstractArrayFunction {\n public constructor() {\n super(\n 'ArrayToObjects',\n [\n AbstractArrayFunction.PARAMETER_ARRAY_SOURCE,\n Parameter.of(KEY_PATH, Schema.ofString(KEY_PATH)),\n Parameter.of(VALUE_PATH, Schema.of(VALUE_PATH, SchemaType.STRING, SchemaType.NULL)),\n Parameter.of(\n IGNORE_NULL_VALUES,\n Schema.ofBoolean(IGNORE_NULL_VALUES).setDefaultValue(false),\n ),\n Parameter.of(\n IGNORE_NULL_KEYS,\n Schema.ofBoolean(IGNORE_NULL_KEYS).setDefaultValue(true),\n ),\n Parameter.of(\n IGNORE_DUPLICATE_KEYS,\n Schema.ofBoolean(IGNORE_DUPLICATE_KEYS).setDefaultValue(false),\n ),\n ],\n AbstractArrayFunction.EVENT_RESULT_ANY,\n );\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let source: any[] = context\n ?.getArguments()\n ?.get(AbstractArrayFunction.PARAMETER_ARRAY_SOURCE.getParameterName());\n\n let keyPath: string = context?.getArguments()?.get(KEY_PATH);\n let valuePath: string = context?.getArguments()?.get(VALUE_PATH) ?? '';\n\n let ignoreNullValues: boolean = context?.getArguments()?.get(IGNORE_NULL_VALUES);\n let ignoreNullKeys: boolean = context?.getArguments()?.get(IGNORE_NULL_KEYS);\n let ignoreDuplicateKeys: boolean = context?.getArguments()?.get(IGNORE_DUPLICATE_KEYS);\n\n const ove: ObjectValueSetterExtractor = new ObjectValueSetterExtractor({}, 'Data.');\n\n const result: any = source\n .filter((e) => !isNullValue(e))\n .reduce((acc: any, cur: any) => {\n ove.setStore(cur);\n\n const key = ove.getValue('Data.' + keyPath);\n if (ignoreNullKeys && isNullValue(key)) return acc;\n\n const value = valuePath ? ove.getValue('Data.' + valuePath) : cur;\n if (ignoreNullValues && isNullValue(value)) return acc;\n\n if (ignoreDuplicateKeys && acc.hasOwnProperty(key)) return acc;\n\n acc[key] = value;\n return acc;\n }, {});\n\n return new FunctionOutput([\n EventResult.outputOf(new Map([[AbstractArrayFunction.EVENT_RESULT_NAME, result]])),\n ]);\n }\n}\n","import { Namespaces } from '../../../namespaces/Namespaces';\nimport { Repository } from '../../../Repository';\nimport mapEntry from '../../../util/mapEntry';\nimport { MapUtil } from '../../../util/MapUtil';\nimport { Function } from '../../Function';\nimport { Concatenate } from './Concatenate';\nimport { AddFirst } from './AddFirst';\nimport { ArrayToArrayOfObjects } from './ArrayToArrayOfObjects';\nimport { BinarySearch } from './BinarySearch';\nimport { Compare } from './Compare';\nimport { Copy } from './Copy';\nimport { Delete } from './Delete';\nimport { DeleteFirst } from './DeleteFirst';\nimport { DeleteFrom } from './DeleteFrom';\nimport { DeleteLast } from './DeleteLast';\nimport { Disjoint } from './Disjoint';\nimport { Equals } from './Equals';\nimport { Fill } from './Fill';\nimport { Frequency } from './Frequency';\nimport { IndexOf } from './IndexOf';\nimport { IndexOfArray } from './IndexOfArray';\nimport { LastIndexOf } from './LastIndexOf';\nimport { LastIndexOfArray } from './LastIndexOfArray';\nimport { Max } from './Max';\nimport { Min } from './Min';\nimport { MisMatch } from './MisMatch';\nimport { Reverse } from './Reverse';\nimport { Rotate } from './Rotate';\nimport { Shuffle } from './Shuffle';\nimport { Sort } from './Sort';\nimport { SubArray } from './SubArray';\nimport { Insert } from './Insert';\nimport { InsertLast } from './InsertLast';\nimport { RemoveDuplicates } from './RemoveDuplicates';\nimport { ArrayToObject } from './ArrayToObject';\n\nexport class ArrayFunctionRepository implements Repository<Function> {\n private static readonly repoMap: Map<string, Function> = MapUtil.ofArrayEntries(\n mapEntry(new Concatenate()),\n mapEntry(new AddFirst()),\n mapEntry(new BinarySearch()),\n mapEntry(new Compare()),\n mapEntry(new Copy()),\n mapEntry(new Delete()),\n mapEntry(new DeleteFirst()),\n mapEntry(new DeleteFrom()),\n mapEntry(new DeleteLast()),\n mapEntry(new Disjoint()),\n mapEntry(new Equals()),\n mapEntry(new Fill()),\n mapEntry(new Frequency()),\n mapEntry(new IndexOf()),\n mapEntry(new IndexOfArray()),\n mapEntry(new LastIndexOf()),\n mapEntry(new LastIndexOfArray()),\n mapEntry(new Max()),\n mapEntry(new Min()),\n mapEntry(new MisMatch()),\n mapEntry(new Reverse()),\n mapEntry(new Rotate()),\n mapEntry(new Shuffle()),\n mapEntry(new Sort()),\n mapEntry(new SubArray()),\n mapEntry(new ArrayToArrayOfObjects()),\n mapEntry(new Insert()),\n mapEntry(new InsertLast()),\n mapEntry(new RemoveDuplicates()),\n mapEntry(new ArrayToObject()),\n );\n\n private static readonly filterableNames = Array.from(\n ArrayFunctionRepository.repoMap.values(),\n ).map((e) => e.getSignature().getFullName());\n\n public find(namespace: string, name: string): Function | undefined {\n if (namespace != Namespaces.SYSTEM_ARRAY) {\n return undefined;\n }\n\n return ArrayFunctionRepository.repoMap.get(name);\n }\n\n public filter(name: string): string[] {\n return ArrayFunctionRepository.filterableNames.filter(\n (e) => e.toLowerCase().indexOf(name.toLowerCase()) !== -1,\n );\n }\n}\n","import { Schema } from '../json/schema/Schema';\n\nexport class ContextElement {\n public static readonly NULL: ContextElement = new ContextElement(Schema.NULL, undefined);\n\n private schema?: Schema;\n private element: any;\n\n public constructor(schema?: Schema, element?: any) {\n this.schema = schema;\n this.element = element;\n }\n\n public getSchema(): Schema | undefined {\n return this.schema;\n }\n public setSchema(schema: Schema): ContextElement {\n this.schema = schema;\n return this;\n }\n public getElement(): any {\n return this.element;\n }\n public setElement(element: any): ContextElement {\n this.element = element;\n return this;\n }\n}\n","import { KIRuntimeException } from '../../../exception/KIRuntimeException';\nimport { Schema } from '../../../json/schema/Schema';\nimport { StringFormat } from '../../../json/schema/string/StringFormat';\nimport { SchemaType } from '../../../json/schema/type/SchemaType';\nimport { TypeUtil } from '../../../json/schema/type/TypeUtil';\nimport { Event } from '../../../model/Event';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionSignature } from '../../../model/FunctionSignature';\nimport { Parameter } from '../../../model/Parameter';\nimport { ParameterType } from '../../../model/ParameterType';\nimport { Namespaces } from '../../../namespaces/Namespaces';\nimport { ContextElement } from '../../../runtime/ContextElement';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { isNullValue } from '../../../util/NullCheck';\nimport { StringFormatter } from '../../../util/string/StringFormatter';\nimport { AbstractFunction } from '../../AbstractFunction';\n\nconst NAME = 'name';\nconst SCHEMA = 'schema';\n\nconst SIGNATURE: FunctionSignature = new FunctionSignature('Create')\n .setNamespace(Namespaces.SYSTEM_CTX)\n .setParameters(\n new Map([\n Parameter.ofEntry(\n NAME,\n new Schema()\n .setName(NAME)\n .setType(TypeUtil.of(SchemaType.STRING))\n .setMinLength(1)\n .setFormat(StringFormat.REGEX)\n .setPattern('^[a-zA-Z_$][a-zA-Z_$0-9]*$'),\n false,\n ParameterType.CONSTANT,\n ),\n Parameter.ofEntry(SCHEMA, Schema.SCHEMA, false, ParameterType.CONSTANT),\n ]),\n )\n .setEvents(new Map([Event.outputEventMapEntry(new Map())]));\n\nexport class Create extends AbstractFunction {\n public getSignature(): FunctionSignature {\n return SIGNATURE;\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n const name: string = context?.getArguments()?.get(NAME);\n\n if (context?.getContext()?.has(name))\n throw new KIRuntimeException(\n StringFormatter.format(\"Context already has an element for '$' \", name),\n );\n\n let s: Schema | undefined = Schema.from(context?.getArguments()?.get(SCHEMA));\n\n if (!s) {\n throw new KIRuntimeException('Schema is not supplied.');\n }\n\n context\n .getContext()!\n .set(\n name,\n new ContextElement(\n s,\n isNullValue(s.getDefaultValue()) ? undefined : s.getDefaultValue(),\n ),\n );\n\n return new FunctionOutput([EventResult.outputOf(new Map())]);\n }\n}\n","import { KIRuntimeException } from '../../../exception/KIRuntimeException';\nimport { Schema } from '../../../json/schema/Schema';\nimport { StringFormat } from '../../../json/schema/string/StringFormat';\nimport { SchemaType } from '../../../json/schema/type/SchemaType';\nimport { TypeUtil } from '../../../json/schema/type/TypeUtil';\nimport { Event } from '../../../model/Event';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionSignature } from '../../../model/FunctionSignature';\nimport { Parameter } from '../../../model/Parameter';\nimport { ParameterType } from '../../../model/ParameterType';\nimport { Namespaces } from '../../../namespaces/Namespaces';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { StringFormatter } from '../../../util/string/StringFormatter';\nimport { AbstractFunction } from '../../AbstractFunction';\n\nconst NAME = 'name';\nconst VALUE = 'value';\nconst SIGNATURE = new FunctionSignature('Get')\n .setNamespace(Namespaces.SYSTEM_CTX)\n .setParameters(\n new Map([\n Parameter.ofEntry(\n NAME,\n new Schema()\n .setName(NAME)\n .setType(TypeUtil.of(SchemaType.STRING))\n .setMinLength(1)\n .setFormat(StringFormat.REGEX)\n .setPattern('^[a-zA-Z_$][a-zA-Z_$0-9]*$'),\n false,\n ParameterType.CONSTANT,\n ),\n ]),\n )\n .setEvents(new Map([Event.outputEventMapEntry(new Map([[VALUE, Schema.ofAny(VALUE)]]))]));\n\nexport class Get extends AbstractFunction {\n public getSignature(): FunctionSignature {\n return SIGNATURE;\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n const name: string = context?.getArguments()?.get(NAME);\n\n if (!context.getContext()?.has(name))\n throw new KIRuntimeException(\n StringFormatter.format(\"Context don't have an element for '$' \", name),\n );\n\n return new FunctionOutput([\n EventResult.outputOf(new Map([VALUE, context.getContext()?.get(name)?.getElement()])),\n ]);\n }\n}\n","import { ExecutionException } from '../../../../exception/ExecutionException';\nimport { isNullValue } from '../../../../util/NullCheck';\nimport { StringFormatter } from '../../../../util/string/StringFormatter';\nimport { Operation } from '../../Operation';\n\nexport abstract class BinaryOperator {\n public abstract apply(t: any, u: any): any;\n\n public nullCheck(e1: any, e2: any, op: Operation): void {\n if (isNullValue(e1) || isNullValue(e2))\n throw new ExecutionException(\n StringFormatter.format('$ cannot be applied to a null value', op.getOperatorName()),\n );\n }\n}\n","import { isNullValue } from '../../../../util/NullCheck';\nimport { BinaryOperator } from './BinaryOperator';\n\nexport class LogicalNullishCoalescingOperator extends BinaryOperator {\n public apply(t: any, u: any): any {\n return isNullValue(t) ? u : t;\n }\n}\n","import { isNullValue } from '../../../../util/NullCheck';\nimport { BinaryOperator } from './BinaryOperator';\n\nexport class ArithmeticAdditionOperator extends BinaryOperator {\n public apply(t: any, u: any): any {\n if (isNullValue(t)) return u;\n else if (isNullValue(u)) return t;\n return t + u;\n }\n}\n","import { Operation } from '../../Operation';\nimport { BinaryOperator } from './BinaryOperator';\n\nexport class ArithmeticDivisionOperator extends BinaryOperator {\n public apply(t: any, u: any): any {\n this.nullCheck(t, u, Operation.DIVISION);\n return t / u;\n }\n}\n","import { Operation } from '../../Operation';\nimport { BinaryOperator } from './BinaryOperator';\n\nexport class ArithmeticIntegerDivisionOperator extends BinaryOperator {\n public apply(t: any, u: any): any {\n this.nullCheck(t, u, Operation.DIVISION);\n return Math.floor(t / u);\n }\n}\n","import { Operation } from '../../Operation';\nimport { BinaryOperator } from './BinaryOperator';\n\nexport class ArithmeticModulusOperator extends BinaryOperator {\n public apply(t: any, u: any): any {\n this.nullCheck(t, u, Operation.MOD);\n return t % u;\n }\n}\n","import { Operation } from '../../Operation';\nimport { BinaryOperator } from './BinaryOperator';\n\nexport class ArithmeticMultiplicationOperator extends BinaryOperator {\n public apply(t: any, u: any): any {\n this.nullCheck(t, u, Operation.MULTIPLICATION);\n\n const isTTypeString = typeof t === 'string';\n const uType = typeof u;\n\n if (isTTypeString || uType === 'string') {\n let str: string = isTTypeString ? t : u;\n let num: number = isTTypeString ? u : t;\n\n let sb: string = '';\n\n let reverse: boolean = num < 0;\n num = Math.abs(num);\n\n let times = Math.floor(num);\n while (times-- > 0) sb += str;\n\n let chrs = Math.floor(str.length * (num - Math.floor(num)));\n if (chrs < 0) chrs = -chrs;\n\n if (chrs != 0) sb += str.substring(0, chrs);\n\n if (reverse) {\n let rev = '';\n for (let i = sb.length - 1; i >= 0; i--) {\n rev += sb[i];\n }\n return rev;\n }\n\n return sb;\n }\n\n return t * u;\n }\n}\n","import { Operation } from '../../Operation';\nimport { BinaryOperator } from './BinaryOperator';\n\nexport class ArithmeticSubtractionOperator extends BinaryOperator {\n public apply(t: any, u: any): any {\n this.nullCheck(t, u, Operation.SUBTRACTION);\n return t - u;\n }\n}\n","import { ExecutionException } from '../../../../exception/ExecutionException';\nimport { StringFormatter } from '../../../../util/string/StringFormatter';\nimport { BinaryOperator } from './BinaryOperator';\n\nexport class ArrayOperator extends BinaryOperator {\n public apply(t: any, u: any): any {\n if (!t) {\n throw new ExecutionException('Cannot apply array operator on a null value');\n }\n\n if (!u) {\n throw new ExecutionException('Cannot retrive null index value');\n }\n\n if (!Array.isArray(t) && typeof t != 'string') {\n throw new ExecutionException(\n StringFormatter.format('Cannot retrieve value from a primitive value $', t),\n );\n }\n if (u >= t.length)\n throw new ExecutionException(\n StringFormatter.format(\n 'Cannot retrieve index $ from the array of length $',\n u,\n t.length,\n ),\n );\n\n return t[u];\n }\n}\n","import { Operation } from '../../Operation';\nimport { BinaryOperator } from './BinaryOperator';\n\nexport class BitwiseAndOperator extends BinaryOperator {\n public apply(t: any, u: any): any {\n this.nullCheck(t, u, Operation.BITWISE_AND);\n return t & u;\n }\n}\n","import { Operation } from '../../Operation';\nimport { BinaryOperator } from './BinaryOperator';\n\nexport class BitwiseLeftShiftOperator extends BinaryOperator {\n public apply(t: any, u: any): any {\n this.nullCheck(t, u, Operation.BITWISE_LEFT_SHIFT);\n return t << u;\n }\n}\n","import { Operation } from '../../Operation';\nimport { BinaryOperator } from './BinaryOperator';\n\nexport class BitwiseOrOperator extends BinaryOperator {\n public apply(t: any, u: any): any {\n this.nullCheck(t, u, Operation.BITWISE_OR);\n return t | u;\n }\n}\n","import { Operation } from '../../Operation';\nimport { BinaryOperator } from './BinaryOperator';\n\nexport class BitwiseRightShiftOperator extends BinaryOperator {\n public apply(t: any, u: any): any {\n this.nullCheck(t, u, Operation.BITWISE_RIGHT_SHIFT);\n return t >> u;\n }\n}\n","import { Operation } from '../../Operation';\nimport { BinaryOperator } from './BinaryOperator';\n\nexport class BitwiseUnsignedRightShiftOperator extends BinaryOperator {\n public apply(t: any, u: any): any {\n this.nullCheck(t, u, Operation.BITWISE_UNSIGNED_RIGHT_SHIFT);\n return t >>> u;\n }\n}\n","import { Operation } from '../../Operation';\nimport { BinaryOperator } from './BinaryOperator';\n\nexport class BitwiseXorOperator extends BinaryOperator {\n public apply(t: any, u: any): any {\n this.nullCheck(t, u, Operation.BITWISE_XOR);\n return t ^ u;\n }\n}\n","import { ExecutionException } from '../../../../exception/ExecutionException';\nimport { SchemaType } from '../../../../json/schema/type/SchemaType';\nimport { PrimitiveUtil } from '../../../../util/primitive/PrimitiveUtil';\nimport { StringFormatter } from '../../../../util/string/StringFormatter';\nimport { Tuple2 } from '../../../../util/Tuples';\nimport { BinaryOperator } from './BinaryOperator';\n\nexport class LogicalAndOperator extends BinaryOperator {\n public apply(t: any, u: any): any {\n const tType: Tuple2<SchemaType, any> = PrimitiveUtil.findPrimitiveNullAsBoolean(t);\n const uType: Tuple2<SchemaType, any> = PrimitiveUtil.findPrimitiveNullAsBoolean(u);\n\n if (tType.getT1() != SchemaType.BOOLEAN)\n throw new ExecutionException(\n StringFormatter.format('Boolean value expected but found $', tType.getT2()),\n );\n\n if (uType.getT1() != SchemaType.BOOLEAN)\n throw new ExecutionException(\n StringFormatter.format('Boolean value expected but found $', uType.getT2()),\n );\n\n return tType.getT2() && uType.getT2();\n }\n}\n","import { deepEqual } from '../../../../util/deepEqual';\nimport { BinaryOperator } from './BinaryOperator';\n\nexport class LogicalEqualOperator extends BinaryOperator {\n public apply(t: any, u: any): any {\n return deepEqual(t, u);\n }\n}\n","import { ExecutionException } from '../../../../exception/ExecutionException';\nimport { SchemaType } from '../../../../json/schema/type/SchemaType';\nimport { PrimitiveUtil } from '../../../../util/primitive/PrimitiveUtil';\nimport { StringFormatter } from '../../../../util/string/StringFormatter';\nimport { Tuple2 } from '../../../../util/Tuples';\nimport { BinaryOperator } from './BinaryOperator';\n\nexport class LogicalGreaterThanEqualOperator extends BinaryOperator {\n public apply(t: any, u: any): any {\n const tType: Tuple2<SchemaType, any> = PrimitiveUtil.findPrimitiveNullAsBoolean(t);\n const uType: Tuple2<SchemaType, any> = PrimitiveUtil.findPrimitiveNullAsBoolean(u);\n\n if (tType.getT1() == SchemaType.BOOLEAN || uType.getT1() == SchemaType.BOOLEAN)\n throw new ExecutionException(\n StringFormatter.format(\n 'Cannot compare >= with the values $ and $',\n tType.getT2(),\n uType.getT2(),\n ),\n );\n\n return tType.getT2() >= uType.getT2();\n }\n}\n","import { ExecutionException } from '../../../../exception/ExecutionException';\nimport { SchemaType } from '../../../../json/schema/type/SchemaType';\nimport { PrimitiveUtil } from '../../../../util/primitive/PrimitiveUtil';\nimport { StringFormatter } from '../../../../util/string/StringFormatter';\nimport { Tuple2 } from '../../../../util/Tuples';\nimport { BinaryOperator } from './BinaryOperator';\n\nexport class LogicalGreaterThanOperator extends BinaryOperator {\n public apply(t: any, u: any): any {\n const tType: Tuple2<SchemaType, any> = PrimitiveUtil.findPrimitiveNullAsBoolean(t);\n const uType: Tuple2<SchemaType, any> = PrimitiveUtil.findPrimitiveNullAsBoolean(u);\n\n if (tType.getT1() == SchemaType.BOOLEAN || uType.getT1() == SchemaType.BOOLEAN)\n throw new ExecutionException(\n StringFormatter.format(\n 'Cannot compare > with the values $ and $',\n tType.getT2(),\n uType.getT2(),\n ),\n );\n\n return tType.getT2() > uType.getT2();\n }\n}\n","import { ExecutionException } from '../../../../exception/ExecutionException';\nimport { SchemaType } from '../../../../json/schema/type/SchemaType';\nimport { PrimitiveUtil } from '../../../../util/primitive/PrimitiveUtil';\nimport { StringFormatter } from '../../../../util/string/StringFormatter';\nimport { Tuple2 } from '../../../../util/Tuples';\nimport { BinaryOperator } from './BinaryOperator';\n\nexport class LogicalLessThanEqualOperator extends BinaryOperator {\n public apply(t: any, u: any): any {\n const tType: Tuple2<SchemaType, any> = PrimitiveUtil.findPrimitiveNullAsBoolean(t);\n const uType: Tuple2<SchemaType, any> = PrimitiveUtil.findPrimitiveNullAsBoolean(u);\n\n if (tType.getT1() == SchemaType.BOOLEAN || uType.getT1() == SchemaType.BOOLEAN)\n throw new ExecutionException(\n StringFormatter.format(\n 'Cannot compare <= with the values $ and $',\n tType.getT2(),\n uType.getT2(),\n ),\n );\n\n return tType.getT2() <= uType.getT2();\n }\n}\n","import { ExecutionException } from '../../../../exception/ExecutionException';\nimport { SchemaType } from '../../../../json/schema/type/SchemaType';\nimport { PrimitiveUtil } from '../../../../util/primitive/PrimitiveUtil';\nimport { StringFormatter } from '../../../../util/string/StringFormatter';\nimport { Tuple2 } from '../../../../util/Tuples';\nimport { BinaryOperator } from './BinaryOperator';\n\nexport class LogicalLessThanOperator extends BinaryOperator {\n public apply(t: any, u: any): any {\n const tType: Tuple2<SchemaType, any> = PrimitiveUtil.findPrimitiveNullAsBoolean(t);\n const uType: Tuple2<SchemaType, any> = PrimitiveUtil.findPrimitiveNullAsBoolean(u);\n\n if (tType.getT1() == SchemaType.BOOLEAN || uType.getT1() == SchemaType.BOOLEAN)\n throw new ExecutionException(\n StringFormatter.format(\n 'Cannot compare < with the values $ and $',\n tType.getT2(),\n uType.getT2(),\n ),\n );\n\n return tType.getT2() < uType.getT2();\n }\n}\n","import { deepEqual } from '../../../../util/deepEqual';\nimport { BinaryOperator } from './BinaryOperator';\n\nexport class LogicalNotEqualOperator extends BinaryOperator {\n public apply(t: any, u: any): any {\n return !deepEqual(t, u);\n }\n}\n","import { ExecutionException } from '../../../../exception/ExecutionException';\nimport { SchemaType } from '../../../../json/schema/type/SchemaType';\nimport { PrimitiveUtil } from '../../../../util/primitive/PrimitiveUtil';\nimport { StringFormatter } from '../../../../util/string/StringFormatter';\nimport { Tuple2 } from '../../../../util/Tuples';\nimport { BinaryOperator } from './BinaryOperator';\n\nexport class LogicalOrOperator extends BinaryOperator {\n public apply(t: any, u: any): any {\n const tType: Tuple2<SchemaType, any> = PrimitiveUtil.findPrimitiveNullAsBoolean(t);\n const uType: Tuple2<SchemaType, any> = PrimitiveUtil.findPrimitiveNullAsBoolean(u);\n\n if (tType.getT1() != SchemaType.BOOLEAN)\n throw new ExecutionException(\n StringFormatter.format('Boolean value expected but found $', tType.getT2()),\n );\n\n if (uType.getT1() != SchemaType.BOOLEAN)\n throw new ExecutionException(\n StringFormatter.format('Boolean value expected but found $', uType.getT2()),\n );\n\n return tType.getT2() || uType.getT2();\n }\n}\n","import { ExecutionException } from '../../../../exception/ExecutionException';\nimport { StringFormatter } from '../../../../util/string/StringFormatter';\nimport { BinaryOperator } from './BinaryOperator';\n\nexport class ObjectOperator extends BinaryOperator {\n public apply(t: any, u: any): any {\n if (!t) {\n throw new ExecutionException('Cannot apply array operator on a null value');\n }\n\n if (!u) {\n throw new ExecutionException('Cannot retrive null property value');\n }\n\n const x: string = typeof t;\n\n if (!Array.isArray(t) && x != 'string' && x != 'object') {\n throw new ExecutionException(\n StringFormatter.format('Cannot retrieve value from a primitive value $', t),\n );\n }\n return t[u];\n }\n}\n","import { ExecutionException } from '../../../../exception/ExecutionException';\nimport { isNullValue } from '../../../../util/NullCheck';\nimport { StringFormatter } from '../../../../util/string/StringFormatter';\nimport { Operation } from '../../Operation';\n\nexport abstract class UnaryOperator {\n public abstract apply(t: any): any;\n\n public nullCheck(e1: any, op: Operation): void {\n if (isNullValue(e1))\n throw new ExecutionException(\n StringFormatter.format('$ cannot be applied to a null value', op.getOperatorName()),\n );\n }\n}\n","import { PrimitiveUtil } from '../../../../util/primitive/PrimitiveUtil';\nimport { Operation } from '../../Operation';\nimport { UnaryOperator } from './UnaryOperator';\n\nexport class ArithmeticUnaryMinusOperator extends UnaryOperator {\n public apply(t: any): any {\n this.nullCheck(t, Operation.UNARY_MINUS);\n\n PrimitiveUtil.findPrimitiveNumberType(t);\n\n return -t;\n }\n}\n","import { PrimitiveUtil } from '../../../../util/primitive/PrimitiveUtil';\nimport { Operation } from '../../Operation';\nimport { UnaryOperator } from './UnaryOperator';\n\nexport class ArithmeticUnaryPlusOperator extends UnaryOperator {\n public apply(t: any): any {\n this.nullCheck(t, Operation.UNARY_PLUS);\n\n PrimitiveUtil.findPrimitiveNumberType(t);\n\n return t;\n }\n}\n","import { ExecutionException } from '../../../../exception/ExecutionException';\nimport { SchemaType } from '../../../../json/schema/type/SchemaType';\nimport { PrimitiveUtil } from '../../../../util/primitive/PrimitiveUtil';\nimport { StringFormatter } from '../../../../util/string/StringFormatter';\nimport { Tuple2 } from '../../../../util/Tuples';\nimport { Operation } from '../../Operation';\nimport { UnaryOperator } from './UnaryOperator';\n\nexport class BitwiseComplementOperator extends UnaryOperator {\n public apply(t: any): any {\n this.nullCheck(t, Operation.UNARY_BITWISE_COMPLEMENT);\n\n let tType: Tuple2<SchemaType, any> = PrimitiveUtil.findPrimitiveNumberType(t);\n\n if (tType.getT1() != SchemaType.INTEGER && tType.getT1() != SchemaType.LONG)\n throw new ExecutionException(\n StringFormatter.format('Unable to apply bitwise operator on $', t),\n );\n\n return ~t;\n }\n}\n","import { UnaryOperator } from './UnaryOperator';\n\nexport class LogicalNotOperator extends UnaryOperator {\n public apply(t: any): any {\n return !t && t !== '';\n }\n}\n","import { StringFormatter } from '../../../util/string/StringFormatter';\nimport { StringUtil } from '../../../util/string/StringUtil';\nimport { ExpressionEvaluationException } from '../exception/ExpressionEvaluationException';\nimport { TokenValueExtractor } from './TokenValueExtractor';\n\nconst KEYWORDS: Map<string, any> = new Map([\n ['true', true],\n ['false', false],\n ['null', undefined],\n ['undefined', undefined],\n]);\n\nexport class LiteralTokenValueExtractor extends TokenValueExtractor {\n public static readonly INSTANCE: LiteralTokenValueExtractor = new LiteralTokenValueExtractor();\n\n protected getValueInternal(token: string): any {\n if (StringUtil.isNullOrBlank(token)) return undefined;\n\n token = token.trim();\n\n if (KEYWORDS.has(token)) return KEYWORDS.get(token);\n\n if (token.startsWith('\"')) {\n return this.processString(token);\n }\n\n return this.processNumbers(token);\n }\n\n private processNumbers(token: string): any {\n try {\n let v = Number(token);\n\n if (isNaN(v)) throw new Error('Parse number error');\n\n return v;\n } catch (err: any) {\n throw new ExpressionEvaluationException(\n token,\n StringFormatter.format('Unable to parse the literal or expression $', token),\n err,\n );\n }\n }\n\n private processString(token: string): any {\n if (!token.endsWith('\"'))\n throw new ExpressionEvaluationException(\n token,\n StringFormatter.format('String literal $ is not closed properly', token),\n );\n\n return token.substring(1, token.length - 1);\n }\n\n public getPrefix(): string {\n return '';\n }\n}\n","import { TernaryOperator } from './TernaryOperator';\n\nexport class ConditionalTernaryOperator extends TernaryOperator {\n public apply(t: any, u: any, v: any): any {\n return t ? u : v;\n }\n}\n","import { ExecutionException } from '../../../../exception/ExecutionException';\nimport { isNullValue } from '../../../../util/NullCheck';\nimport { StringFormatter } from '../../../../util/string/StringFormatter';\nimport { Operation } from '../../Operation';\n\nexport abstract class TernaryOperator {\n public abstract apply(t: any, u: any, v: any): any;\n\n public nullCheck(e1: any, e2: any, e3: any, op: Operation): void {\n if (isNullValue(e1) || isNullValue(e2) || isNullValue(e3))\n throw new ExecutionException(\n StringFormatter.format('$ cannot be applied to a null value', op.getOperatorName()),\n );\n }\n}\n","import { TokenValueExtractor } from './TokenValueExtractor';\n\nexport class ExpressionInternalValueExtractor extends TokenValueExtractor {\n public static readonly PREFIX: string = '_internal.';\n\n private values: Map<string, any> = new Map();\n\n public addValue(key: string, value: any) {\n this.values.set(key, value);\n }\n\n public getValueInternal(token: string): any {\n let parts: string[] = token.split(TokenValueExtractor.REGEX_DOT);\n\n let key: string = parts[1];\n let bIndex: number = key.indexOf('[');\n let fromIndex = 2;\n if (bIndex != -1) {\n key = parts[1].substring(0, bIndex);\n parts[1] = parts[1].substring(bIndex);\n fromIndex = 1;\n }\n return this.retrieveElementFrom(token, parts, fromIndex, this.values.get(key));\n }\n\n public getPrefix(): string {\n return ExpressionInternalValueExtractor.PREFIX;\n }\n}\n","import { ExecutionException } from '../../exception/ExecutionException';\nimport { LinkedList } from '../../util/LinkedList';\nimport { StringBuilder } from '../../util/string/StringBuilder';\nimport { StringFormatter } from '../../util/string/StringFormatter';\nimport { FunctionExecutionParameters } from '../FunctionExecutionParameters';\nimport { ExpressionEvaluationException } from './exception/ExpressionEvaluationException';\nimport { Expression } from './Expression';\nimport { ExpressionToken } from './ExpressionToken';\nimport { ExpressionTokenValue } from './ExpressionTokenValue';\nimport { Operation } from './Operation';\nimport { LogicalNullishCoalescingOperator } from './operators/binary/LogicalNullishCoalescingOperator';\nimport { ArithmeticAdditionOperator } from './operators/binary/ArithmeticAdditionOperator';\nimport { ArithmeticDivisionOperator } from './operators/binary/ArithmeticDivisionOperator';\nimport { ArithmeticIntegerDivisionOperator } from './operators/binary/ArithmeticInetgerDivisionOperator';\nimport { ArithmeticModulusOperator } from './operators/binary/ArithmeticModulusOperator';\nimport { ArithmeticMultiplicationOperator } from './operators/binary/ArithmeticMultiplicationOperator';\nimport { ArithmeticSubtractionOperator } from './operators/binary/ArithmeticSubtractionOperator';\nimport { ArrayOperator } from './operators/binary/ArrayOperator';\nimport { BinaryOperator } from './operators/binary/BinaryOperator';\nimport { BitwiseAndOperator } from './operators/binary/BitwiseAndOperator';\nimport { BitwiseLeftShiftOperator } from './operators/binary/BitwiseLeftShiftOperator';\nimport { BitwiseOrOperator } from './operators/binary/BitwiseOrOperator';\nimport { BitwiseRightShiftOperator } from './operators/binary/BitwiseRightShiftOperator';\nimport { BitwiseUnsignedRightShiftOperator } from './operators/binary/BitwiseUnsignedRightShiftOperator';\nimport { BitwiseXorOperator } from './operators/binary/BitwiseXorOperator';\nimport { LogicalAndOperator } from './operators/binary/LogicalAndOperator';\nimport { LogicalEqualOperator } from './operators/binary/LogicalEqualOperator';\nimport { LogicalGreaterThanEqualOperator } from './operators/binary/LogicalGreaterThanEqualOperator';\nimport { LogicalGreaterThanOperator } from './operators/binary/LogicalGreaterThanOperator';\nimport { LogicalLessThanEqualOperator } from './operators/binary/LogicalLessThanEqualOperator';\nimport { LogicalLessThanOperator } from './operators/binary/LogicalLessThanOperator';\nimport { LogicalNotEqualOperator } from './operators/binary/LogicalNotEqualOperator';\nimport { LogicalOrOperator } from './operators/binary/LogicalOrOperator';\nimport { ObjectOperator } from './operators/binary/ObjectOperator';\nimport { ArithmeticUnaryMinusOperator } from './operators/unary/ArithmeticUnaryMinusOperator';\nimport { ArithmeticUnaryPlusOperator } from './operators/unary/ArithmeticUnaryPlusOperator';\nimport { BitwiseComplementOperator } from './operators/unary/BitwiseComplementOperator';\nimport { LogicalNotOperator } from './operators/unary/LogicalNotOperator';\nimport { UnaryOperator } from './operators/unary/UnaryOperator';\nimport { LiteralTokenValueExtractor } from './tokenextractor/LiteralTokenValueExtractor';\nimport { TokenValueExtractor } from './tokenextractor/TokenValueExtractor';\nimport { Tuple2 } from '../../util/Tuples';\nimport { ConditionalTernaryOperator } from './operators/ternary';\nimport { TernaryOperator } from './operators/ternary/TernaryOperator';\nimport { ExpressionInternalValueExtractor } from './tokenextractor/ExpressionInternalValueExtractor';\n\nexport class ExpressionEvaluator {\n private static readonly UNARY_OPERATORS_MAP: Map<Operation, UnaryOperator> = new Map([\n [Operation.UNARY_BITWISE_COMPLEMENT, new BitwiseComplementOperator()],\n [Operation.UNARY_LOGICAL_NOT, new LogicalNotOperator()],\n [Operation.UNARY_MINUS, new ArithmeticUnaryMinusOperator()],\n [Operation.UNARY_PLUS, new ArithmeticUnaryPlusOperator()],\n ]);\n\n private static readonly TERNARY_OPERATORS_MAP: Map<Operation, TernaryOperator> = new Map([\n [Operation.CONDITIONAL_TERNARY_OPERATOR, new ConditionalTernaryOperator()],\n ]);\n\n private static readonly BINARY_OPERATORS_MAP: Map<Operation, BinaryOperator> = new Map([\n [Operation.ADDITION, new ArithmeticAdditionOperator()],\n [Operation.DIVISION, new ArithmeticDivisionOperator()],\n [Operation.INTEGER_DIVISION, new ArithmeticIntegerDivisionOperator()],\n [Operation.MOD, new ArithmeticModulusOperator()],\n [Operation.MULTIPLICATION, new ArithmeticMultiplicationOperator()],\n [Operation.SUBTRACTION, new ArithmeticSubtractionOperator()],\n\n [Operation.BITWISE_AND, new BitwiseAndOperator()],\n [Operation.BITWISE_LEFT_SHIFT, new BitwiseLeftShiftOperator()],\n [Operation.BITWISE_OR, new BitwiseOrOperator()],\n [Operation.BITWISE_RIGHT_SHIFT, new BitwiseRightShiftOperator()],\n [Operation.BITWISE_UNSIGNED_RIGHT_SHIFT, new BitwiseUnsignedRightShiftOperator()],\n [Operation.BITWISE_XOR, new BitwiseXorOperator()],\n\n [Operation.AND, new LogicalAndOperator()],\n [Operation.EQUAL, new LogicalEqualOperator()],\n [Operation.GREATER_THAN, new LogicalGreaterThanOperator()],\n [Operation.GREATER_THAN_EQUAL, new LogicalGreaterThanEqualOperator()],\n [Operation.LESS_THAN, new LogicalLessThanOperator()],\n [Operation.LESS_THAN_EQUAL, new LogicalLessThanEqualOperator()],\n [Operation.OR, new LogicalOrOperator()],\n [Operation.NOT_EQUAL, new LogicalNotEqualOperator()],\n [Operation.NULLISH_COALESCING_OPERATOR, new LogicalNullishCoalescingOperator()],\n\n [Operation.ARRAY_OPERATOR, new ArrayOperator()],\n [Operation.OBJECT_OPERATOR, new ObjectOperator()],\n ]);\n\n private static readonly UNARY_OPERATORS_MAP_KEY_SET: Set<Operation> = new Set(\n ExpressionEvaluator.UNARY_OPERATORS_MAP.keys(),\n );\n\n private expression: string;\n private exp?: Expression;\n private internalTokenValueExtractor: ExpressionInternalValueExtractor =\n new ExpressionInternalValueExtractor();\n\n public constructor(exp: Expression | string) {\n if (exp instanceof Expression) {\n this.exp = exp as Expression;\n this.expression = this.exp.getExpression();\n } else {\n this.expression = exp;\n }\n }\n\n public evaluate(valuesMap: Map<string, TokenValueExtractor>): any {\n const tuple: Tuple2<string, Expression> = this.processNestingExpression(\n this.expression,\n valuesMap,\n );\n this.expression = tuple.getT1();\n this.exp = tuple.getT2();\n valuesMap = new Map(valuesMap.entries());\n valuesMap.set(\n this.internalTokenValueExtractor.getPrefix(),\n this.internalTokenValueExtractor,\n );\n\n return this.evaluateExpression(this.exp, valuesMap);\n }\n\n private processNestingExpression(\n expression: string,\n valuesMap: Map<string, TokenValueExtractor>,\n ): Tuple2<string, Expression> {\n let start = 0;\n let i = 0;\n\n const tuples: LinkedList<Tuple2<number, number>> = new LinkedList();\n\n while (i < expression.length - 1) {\n if (expression.charAt(i) == '{' && expression.charAt(i + 1) == '{') {\n if (start == 0) tuples.push(new Tuple2(i + 2, -1));\n\n start++;\n i++;\n } else if (expression.charAt(i) == '}' && expression.charAt(i + 1) == '}') {\n start--;\n\n if (start < 0)\n throw new ExpressionEvaluationException(\n expression,\n 'Expecting {{ nesting path operator to be started before closing',\n );\n\n if (start == 0) {\n tuples.push(tuples.pop().setT2(i));\n }\n i++;\n }\n i++;\n }\n\n let newExpression = this.replaceNestingExpression(expression, valuesMap, tuples);\n\n return new Tuple2(newExpression, new Expression(newExpression));\n }\n\n private replaceNestingExpression(\n expression: string,\n valuesMap: Map<string, TokenValueExtractor>,\n tuples: LinkedList<Tuple2<number, number>>,\n ): string {\n let newExpression = expression;\n\n for (var tuple of tuples.toArray()) {\n if (tuple.getT2() == -1)\n throw new ExpressionEvaluationException(\n expression,\n 'Expecting }} nesting path operator to be closed',\n );\n\n let expStr: string = new ExpressionEvaluator(\n newExpression.substring(tuple.getT1(), tuple.getT2()),\n ).evaluate(valuesMap);\n\n newExpression =\n newExpression.substring(0, tuple.getT1() - 2) +\n expStr +\n newExpression.substring(tuple.getT2() + 2);\n }\n return newExpression;\n }\n\n public getExpression(): Expression {\n if (!this.exp) this.exp = new Expression(this.expression);\n\n return this.exp;\n }\n\n public getExpressionString(): string {\n return this.expression;\n }\n\n private evaluateExpression(exp: Expression, valuesMap: Map<string, TokenValueExtractor>): any {\n let ops: LinkedList<Operation> = exp.getOperations();\n let tokens: LinkedList<ExpressionToken> = exp.getTokens();\n\n while (!ops.isEmpty()) {\n let operator: Operation = ops.pop();\n let token: ExpressionToken = tokens.pop();\n\n if (ExpressionEvaluator.UNARY_OPERATORS_MAP_KEY_SET.has(operator)) {\n tokens.push(\n this.applyUnaryOperation(operator, this.getValueFromToken(valuesMap, token)),\n );\n } else if (\n operator == Operation.OBJECT_OPERATOR ||\n operator == Operation.ARRAY_OPERATOR\n ) {\n this.processObjectOrArrayOperator(valuesMap, ops, tokens, operator, token);\n } else if (operator == Operation.CONDITIONAL_TERNARY_OPERATOR) {\n const token2: ExpressionToken = tokens.pop();\n const token3: ExpressionToken = tokens.pop();\n var v1 = this.getValueFromToken(valuesMap, token3);\n var v2 = this.getValueFromToken(valuesMap, token2);\n var v3 = this.getValueFromToken(valuesMap, token);\n tokens.push(this.applyTernaryOperation(operator, v1, v2, v3));\n } else {\n const token2: ExpressionToken = tokens.pop();\n var v1 = this.getValueFromToken(valuesMap, token2);\n var v2 = this.getValueFromToken(valuesMap, token);\n tokens.push(this.applyBinaryOperation(operator, v1, v2));\n }\n }\n\n if (tokens.isEmpty())\n throw new ExecutionException(\n StringFormatter.format('Expression : $ evaluated to null', exp),\n );\n\n if (tokens.size() != 1)\n throw new ExecutionException(\n StringFormatter.format('Expression : $ evaluated multiple values $', exp, tokens),\n );\n\n const token: ExpressionToken = tokens.get(0);\n if (token instanceof ExpressionTokenValue)\n return (token as ExpressionTokenValue).getElement();\n else if (!(token instanceof Expression)) return this.getValueFromToken(valuesMap, token);\n\n throw new ExecutionException(\n StringFormatter.format('Expression : $ evaluated to $', exp, tokens.get(0)),\n );\n }\n\n private processObjectOrArrayOperator(\n valuesMap: Map<string, TokenValueExtractor>,\n ops: LinkedList<Operation>,\n tokens: LinkedList<ExpressionToken>,\n operator?: Operation,\n token?: ExpressionToken,\n ): void {\n const objTokens: LinkedList<ExpressionToken> = new LinkedList();\n const objOperations: LinkedList<Operation> = new LinkedList();\n\n if (!operator || !token) return;\n\n do {\n objOperations.push(operator);\n if (token instanceof Expression)\n objTokens.push(\n new ExpressionTokenValue(\n token.toString(),\n this.evaluateExpression(token as Expression, valuesMap),\n ),\n );\n else if (token) objTokens.push(token);\n token = tokens.isEmpty() ? undefined : tokens.pop();\n operator = ops.isEmpty() ? undefined : ops.pop();\n } while (operator == Operation.OBJECT_OPERATOR || operator == Operation.ARRAY_OPERATOR);\n\n if (token) {\n if (token instanceof Expression)\n objTokens.push(\n new ExpressionTokenValue(\n token.toString(),\n this.evaluateExpression(token as Expression, valuesMap),\n ),\n );\n else objTokens.push(token);\n }\n\n if (operator) ops.push(operator);\n\n let objToken: ExpressionToken = objTokens.pop();\n\n if (\n objToken instanceof ExpressionTokenValue &&\n typeof objToken.getTokenValue() === 'object'\n ) {\n const key = new Date().getTime() + '' + Math.round(Math.random() * 1000);\n this.internalTokenValueExtractor.addValue(key, objToken.getTokenValue());\n objToken = new ExpressionToken(ExpressionInternalValueExtractor.PREFIX + key);\n }\n\n let sb: StringBuilder = new StringBuilder(\n objToken instanceof ExpressionTokenValue\n ? (objToken as ExpressionTokenValue).getTokenValue()\n : objToken.toString(),\n );\n\n while (!objTokens.isEmpty()) {\n objToken = objTokens.pop();\n operator = objOperations.pop();\n sb.append(operator.getOperator()).append(\n objToken instanceof ExpressionTokenValue\n ? (objToken as ExpressionTokenValue).getTokenValue()\n : objToken.toString(),\n );\n if (operator == Operation.ARRAY_OPERATOR) sb.append(']');\n }\n\n let str: string = sb.toString();\n let key: string = str.substring(0, str.indexOf('.') + 1);\n if (key.length > 2 && valuesMap.has(key))\n tokens.push(new ExpressionTokenValue(str, this.getValue(str, valuesMap)));\n else {\n let v: any = undefined;\n try {\n v = LiteralTokenValueExtractor.INSTANCE.getValue(str);\n } catch (err) {\n v = str;\n }\n tokens.push(new ExpressionTokenValue(str, v));\n }\n }\n\n private applyTernaryOperation(operator: Operation, v1: any, v2: any, v3: any): ExpressionToken {\n let op: TernaryOperator | undefined =\n ExpressionEvaluator.TERNARY_OPERATORS_MAP.get(operator);\n\n if (!op)\n throw new ExpressionEvaluationException(\n this.expression,\n StringFormatter.format('No operator found to evaluate $', this.getExpression()),\n );\n\n return new ExpressionTokenValue(operator.toString(), op.apply(v1, v2, v3));\n }\n\n private applyBinaryOperation(operator: Operation, v1: any, v2: any): ExpressionToken {\n let typv1: string = typeof v1;\n let typv2: string = typeof v2;\n\n let op: BinaryOperator | undefined = ExpressionEvaluator.BINARY_OPERATORS_MAP.get(operator);\n\n if (\n (typv1 === 'object' || typv2 === 'object') &&\n operator !== Operation.EQUAL &&\n operator !== Operation.NOT_EQUAL &&\n operator !== Operation.NULLISH_COALESCING_OPERATOR\n )\n throw new ExpressionEvaluationException(\n this.expression,\n StringFormatter.format(\n 'Cannot evaluate expression $ $ $',\n v1,\n operator.getOperator(),\n v2,\n ),\n );\n\n if (!op)\n throw new ExpressionEvaluationException(\n this.expression,\n StringFormatter.format(\n 'No operator found to evaluate $ $ $',\n v1,\n operator.getOperator(),\n v2,\n ),\n );\n\n return new ExpressionTokenValue(operator.toString(), op.apply(v1, v2));\n }\n\n private applyUnaryOperation(operator: Operation, value: any): ExpressionToken {\n let typv: string = typeof value;\n\n if (typv === 'object' || Array.isArray(value))\n throw new ExpressionEvaluationException(\n this.expression,\n StringFormatter.format(\n 'The operator $ cannot be applied to $',\n operator.getOperator(),\n value,\n ),\n );\n\n let op: UnaryOperator | undefined = ExpressionEvaluator.UNARY_OPERATORS_MAP.get(operator);\n\n if (!op)\n throw new ExpressionEvaluationException(\n this.expression,\n StringFormatter.format(\n 'No Unary operator $ is found to apply on $',\n operator.getOperator(),\n value,\n ),\n );\n\n return new ExpressionTokenValue(operator.toString(), op.apply(value));\n }\n\n private getValueFromToken(\n valuesMap: Map<string, TokenValueExtractor>,\n token: ExpressionToken,\n ): any {\n if (token instanceof Expression) {\n return this.evaluateExpression(token as Expression, valuesMap);\n } else if (token instanceof ExpressionTokenValue) {\n return (token as ExpressionTokenValue).getElement();\n }\n return this.getValue(token.getExpression(), valuesMap);\n }\n\n private getValue(path: string, valuesMap: Map<string, TokenValueExtractor>): any {\n if (path.length <= 5) return LiteralTokenValueExtractor.INSTANCE.getValue(path);\n\n const pathPrefix: string = path.substring(0, path.indexOf('.') + 1);\n return (valuesMap.get(pathPrefix) ?? LiteralTokenValueExtractor.INSTANCE).getValue(path);\n }\n}\n","import { ExecutionException } from '../../../exception/ExecutionException';\nimport { KIRuntimeException } from '../../../exception/KIRuntimeException';\nimport { Schema } from '../../../json/schema/Schema';\nimport { SchemaType } from '../../../json/schema/type/SchemaType';\nimport { TypeUtil } from '../../../json/schema/type/TypeUtil';\nimport { Event } from '../../../model/Event';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionSignature } from '../../../model/FunctionSignature';\nimport { Parameter } from '../../../model/Parameter';\nimport { ParameterType } from '../../../model/ParameterType';\nimport { Namespaces } from '../../../namespaces/Namespaces';\nimport { ContextElement } from '../../../runtime/ContextElement';\nimport { Expression } from '../../../runtime/expression/Expression';\nimport { ExpressionEvaluator } from '../../../runtime/expression/ExpressionEvaluator';\nimport { ExpressionToken } from '../../../runtime/expression/ExpressionToken';\nimport { ExpressionTokenValue } from '../../../runtime/expression/ExpressionTokenValue';\nimport { Operation } from '../../../runtime/expression/Operation';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { LinkedList } from '../../../util/LinkedList';\nimport { isNullValue } from '../../../util/NullCheck';\nimport { PrimitiveUtil } from '../../../util/primitive/PrimitiveUtil';\nimport { StringFormatter } from '../../../util/string/StringFormatter';\nimport { StringUtil } from '../../../util/string/StringUtil';\nimport { Tuple2 } from '../../../util/Tuples';\nimport { AbstractFunction } from '../../AbstractFunction';\n\nconst NAME = 'name';\nconst VALUE = 'value';\nconst SIGNATURE = new FunctionSignature('Set')\n .setNamespace(Namespaces.SYSTEM_CTX)\n .setParameters(\n new Map([\n Parameter.ofEntry(\n NAME,\n new Schema().setName(NAME).setType(TypeUtil.of(SchemaType.STRING)).setMinLength(1),\n false,\n ParameterType.CONSTANT,\n ),\n Parameter.ofEntry(VALUE, Schema.ofAny(VALUE)),\n ]),\n )\n .setEvents(new Map([Event.outputEventMapEntry(new Map())]));\n\nexport class SetFunction extends AbstractFunction {\n public getSignature(): FunctionSignature {\n return SIGNATURE;\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let key: string = context?.getArguments()?.get(NAME);\n\n if (StringUtil.isNullOrBlank(key)) {\n throw new KIRuntimeException(\n 'Empty string is not a valid name for the context element',\n );\n }\n\n let value: any = context?.getArguments()?.get(VALUE);\n\n const exp: Expression = new Expression(key);\n\n const contextToken: ExpressionToken = exp.getTokens().peekLast();\n\n if (\n !contextToken.getExpression().startsWith('Context') ||\n contextToken instanceof Expression ||\n (contextToken instanceof ExpressionTokenValue &&\n !(contextToken as ExpressionTokenValue)\n .getElement()\n .toString()\n .startsWith('Context'))\n ) {\n throw new ExecutionException(\n StringFormatter.format('The context path $ is not a valid path in context', key),\n );\n }\n\n for (const op of exp.getOperations().toArray()) {\n if (op == Operation.ARRAY_OPERATOR || op == Operation.OBJECT_OPERATOR) continue;\n\n throw new ExecutionException(\n StringFormatter.format(\n 'Expected a reference to the context location, but found an expression $',\n key,\n ),\n );\n }\n\n for (let i = 0; i < exp.getTokens().size(); i++) {\n let ex = exp.getTokens().get(i);\n if (ex instanceof Expression)\n exp.getTokens().set(\n i,\n new ExpressionTokenValue(\n key,\n new ExpressionEvaluator(ex as Expression).evaluate(context.getValuesMap()),\n ),\n );\n }\n return this.modifyContext(context, key, value, exp);\n }\n\n private modifyContext(\n context: FunctionExecutionParameters,\n key: string,\n value: any,\n exp: Expression,\n ): FunctionOutput {\n const tokens = exp.getTokens();\n tokens.removeLast();\n const ops = exp.getOperations();\n ops.removeLast();\n let ce: ContextElement | undefined = context\n .getContext()\n ?.get(tokens.removeLast().getExpression());\n\n if (isNullValue(ce)) {\n throw new KIRuntimeException(\n StringFormatter.format(\"Context doesn't have any element with name '$' \", key),\n );\n }\n\n if (ops.isEmpty()) {\n ce!.setElement(value);\n return new FunctionOutput([EventResult.outputOf(new Map())]);\n }\n\n let el: any = ce!.getElement();\n\n let op = ops.removeLast();\n let token = tokens.removeLast();\n let mem =\n token instanceof ExpressionTokenValue\n ? (token as ExpressionTokenValue).getElement()\n : token.getExpression();\n\n if (isNullValue(el)) {\n el = op == Operation.OBJECT_OPERATOR ? {} : [];\n ce!.setElement(el);\n }\n\n while (!ops.isEmpty()) {\n if (op == Operation.OBJECT_OPERATOR) {\n el = this.getDataFromObject(el, mem, ops.peekLast());\n } else {\n el = this.getDataFromArray(el, mem, ops.peekLast());\n }\n\n op = ops.removeLast();\n token = tokens.removeLast();\n mem =\n token instanceof ExpressionTokenValue\n ? (token as ExpressionTokenValue).getElement()\n : token.getExpression();\n }\n\n if (op == Operation.OBJECT_OPERATOR) this.putDataInObject(el, mem, value);\n else this.putDataInArray(el, mem, value);\n\n return new FunctionOutput([EventResult.outputOf(new Map())]);\n }\n\n private getDataFromArray(el: any, mem: string, nextOp: Operation): any {\n if (!Array.isArray(el))\n throw new KIRuntimeException(\n StringFormatter.format('Expected an array but found $', el),\n );\n\n const index = parseInt(mem);\n if (isNaN(index))\n throw new KIRuntimeException(\n StringFormatter.format('Expected an array index but found $', mem),\n );\n if (index < 0)\n throw new KIRuntimeException(\n StringFormatter.format('Array index is out of bound - $', mem),\n );\n\n let je = el[index];\n\n if (isNullValue(je)) {\n je = nextOp == Operation.OBJECT_OPERATOR ? {} : [];\n el[index] = je;\n }\n return je;\n }\n\n private getDataFromObject(el: any, mem: string, nextOp: Operation): any {\n if (Array.isArray(el) || typeof el !== 'object')\n throw new KIRuntimeException(\n StringFormatter.format('Expected an object but found $', el),\n );\n\n let je = el[mem];\n\n if (isNullValue(je)) {\n je = nextOp == Operation.OBJECT_OPERATOR ? {} : [];\n el[mem] = je;\n }\n return je;\n }\n\n private putDataInArray(el: any, mem: string, value: any): void {\n if (!Array.isArray(el))\n throw new KIRuntimeException(\n StringFormatter.format('Expected an array but found $', el),\n );\n\n const index = parseInt(mem);\n if (isNaN(index))\n throw new KIRuntimeException(\n StringFormatter.format('Expected an array index but found $', mem),\n );\n if (index < 0)\n throw new KIRuntimeException(\n StringFormatter.format('Array index is out of bound - $', mem),\n );\n\n el[index] = value;\n }\n\n private putDataInObject(el: any, mem: string, value: any): void {\n if (Array.isArray(el) || typeof el !== 'object')\n throw new KIRuntimeException(\n StringFormatter.format('Expected an object but found $', el),\n );\n\n el[mem] = value;\n }\n}\n","import { KIRuntimeException } from '../../exception/KIRuntimeException';\nimport { Schema } from '../../json/schema/Schema';\nimport { Event } from '../../model/Event';\nimport { EventResult } from '../../model/EventResult';\nimport { FunctionOutput } from '../../model/FunctionOutput';\nimport { FunctionSignature } from '../../model/FunctionSignature';\nimport { Parameter } from '../../model/Parameter';\nimport { Namespaces } from '../../namespaces/Namespaces';\nimport { ExpressionEvaluator } from '../../runtime/expression/ExpressionEvaluator';\nimport { FunctionExecutionParameters } from '../../runtime/FunctionExecutionParameters';\nimport { KIRuntime } from '../../runtime/KIRuntime';\nimport { isNullValue } from '../../util/NullCheck';\nimport { AbstractFunction } from '../AbstractFunction';\n\nconst VALUE = 'value';\nconst EVENT_NAME = 'eventName';\nconst RESULTS = 'results';\n\nconst SIGNATURE: FunctionSignature = new FunctionSignature('GenerateEvent')\n .setNamespace(Namespaces.SYSTEM)\n .setParameters(\n new Map([\n Parameter.ofEntry(EVENT_NAME, Schema.ofString(EVENT_NAME).setDefaultValue('output')),\n Parameter.ofEntry(\n RESULTS,\n Schema.ofObject(RESULTS).setProperties(\n new Map([\n ['name', Schema.ofString('name')],\n [VALUE, Parameter.EXPRESSION],\n ]),\n ),\n true,\n ),\n ]),\n )\n .setEvents(new Map([Event.outputEventMapEntry(new Map())]));\n\ninterface ResultType {\n name: string;\n value: any;\n}\n\nexport class GenerateEvent extends AbstractFunction {\n public getSignature(): FunctionSignature {\n return SIGNATURE;\n }\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n const events: Map<string, Map<string, any>[]> | undefined = context.getEvents();\n const args: Map<string, any> | undefined = context.getArguments();\n\n const eventName: string = args?.get(EVENT_NAME);\n const map: Map<string, any> = context\n ?.getArguments()\n ?.get(RESULTS)\n .map((e: ResultType) => {\n let je: any = e[VALUE];\n\n if (isNullValue(je)) throw new KIRuntimeException('Expect a value object');\n\n let v: any = je.value;\n if (je.isExpression)\n v = new ExpressionEvaluator(v).evaluate(context.getValuesMap());\n return [e.name, v];\n })\n .reduce((a: Map<string, any>, c: [string, any]) => {\n a.set(c[0], c[1]);\n return a;\n }, new Map());\n\n if (!events?.has(eventName)) events?.set(eventName, []);\n events?.get(eventName)?.push(map);\n\n return new FunctionOutput([EventResult.outputOf(new Map())]);\n }\n}\n","import { Schema } from '../../json/schema/Schema';\nimport { SchemaType } from '../../json/schema/type/SchemaType';\nimport { Event } from '../../model/Event';\nimport { EventResult } from '../../model/EventResult';\nimport { FunctionOutput } from '../../model/FunctionOutput';\nimport { FunctionSignature } from '../../model/FunctionSignature';\nimport { Parameter } from '../../model/Parameter';\nimport { Namespaces } from '../../namespaces/Namespaces';\nimport { FunctionExecutionParameters } from '../../runtime/FunctionExecutionParameters';\nimport { AbstractFunction } from '../AbstractFunction';\n\nexport class If extends AbstractFunction {\n private static readonly CONDITION: string = 'condition';\n\n private static readonly SIGNATURE: FunctionSignature = new FunctionSignature('If')\n .setNamespace(Namespaces.SYSTEM)\n .setParameters(\n new Map([Parameter.ofEntry(If.CONDITION, Schema.of(If.CONDITION, SchemaType.BOOLEAN))]),\n )\n .setEvents(\n new Map([\n Event.eventMapEntry(Event.TRUE, new Map()),\n Event.eventMapEntry(Event.FALSE, new Map()),\n Event.outputEventMapEntry(new Map()),\n ]),\n );\n\n public getSignature(): FunctionSignature {\n return If.SIGNATURE;\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n var condition = context.getArguments()?.get(If.CONDITION);\n\n return new FunctionOutput([\n EventResult.of(condition ? Event.TRUE : Event.FALSE, new Map()),\n EventResult.outputOf(new Map()),\n ]);\n }\n}\n","import { Schema } from '../../../json/schema/Schema';\nimport { SchemaType } from '../../../json/schema/type/SchemaType';\nimport { Event } from '../../../model/Event';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionSignature } from '../../../model/FunctionSignature';\nimport { Parameter } from '../../../model/Parameter';\nimport { Namespaces } from '../../../namespaces/Namespaces';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { AbstractFunction } from '../../AbstractFunction';\n\nconst STEP_NAME = 'stepName';\n\nconst SIGNATURE = new FunctionSignature('Break')\n .setNamespace(Namespaces.SYSTEM_LOOP)\n .setParameters(new Map([Parameter.ofEntry(STEP_NAME, Schema.of(STEP_NAME, SchemaType.STRING))]))\n .setEvents(new Map([Event.outputEventMapEntry(new Map([]))]));\n\nexport class Break extends AbstractFunction {\n public getSignature(): FunctionSignature {\n return SIGNATURE;\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let stepName: string = context.getArguments()?.get(STEP_NAME);\n\n context.getExecutionContext().set(stepName, true);\n\n return new FunctionOutput([EventResult.outputOf(new Map())]);\n }\n}\n","import { Schema } from '../../../json/schema/Schema';\nimport { SchemaType } from '../../../json/schema/type/SchemaType';\nimport { Event } from '../../../model/Event';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionSignature } from '../../../model/FunctionSignature';\nimport { Parameter } from '../../../model/Parameter';\nimport { Namespaces } from '../../../namespaces/Namespaces';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { AbstractFunction } from '../../AbstractFunction';\n\nconst COUNT = 'count';\nconst VALUE = 'value';\nconst INDEX = 'index';\n\nconst SIGNATURE = new FunctionSignature('CountLoop')\n .setNamespace(Namespaces.SYSTEM_LOOP)\n .setParameters(new Map([Parameter.ofEntry(COUNT, Schema.of(COUNT, SchemaType.INTEGER))]))\n .setEvents(\n new Map([\n Event.eventMapEntry(\n Event.ITERATION,\n new Map([[INDEX, Schema.of(INDEX, SchemaType.INTEGER)]]),\n ),\n Event.outputEventMapEntry(new Map([[VALUE, Schema.of(VALUE, SchemaType.INTEGER)]])),\n ]),\n );\n\nexport class CountLoop extends AbstractFunction {\n public getSignature(): FunctionSignature {\n return SIGNATURE;\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let count: number = context.getArguments()?.get(COUNT);\n let current = 0;\n let statementName = context.getStatementExecution()?.getStatement()?.getStatementName();\n\n return new FunctionOutput({\n next(): EventResult {\n if (\n current >= count ||\n (statementName && context.getExecutionContext()?.get(statementName))\n ) {\n // check for break;\n if (statementName) context.getExecutionContext()?.delete(statementName);\n return EventResult.outputOf(new Map([[VALUE, current]]));\n }\n\n const eve = EventResult.of(Event.ITERATION, new Map([[INDEX, current]]));\n ++current;\n\n return eve;\n },\n });\n }\n}\n","import { Schema } from '../../../json/schema/Schema';\nimport { SchemaType } from '../../../json/schema/type/SchemaType';\nimport { Event } from '../../../model/Event';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionSignature } from '../../../model/FunctionSignature';\nimport { Parameter } from '../../../model/Parameter';\nimport { Namespaces } from '../../../namespaces/Namespaces';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { AbstractFunction } from '../../AbstractFunction';\n\nconst SOURCE = 'source';\nconst EACH = 'each';\nconst INDEX = 'index';\nconst VALUE = 'value';\n\nconst SIGNATURE = new FunctionSignature('ForEachLoop')\n .setNamespace(Namespaces.SYSTEM_LOOP)\n .setParameters(\n new Map([Parameter.ofEntry(SOURCE, Schema.ofArray(SOURCE, Schema.ofAny(SOURCE)))]),\n )\n .setEvents(\n new Map([\n Event.eventMapEntry(\n Event.ITERATION,\n new Map([\n [INDEX, Schema.of(INDEX, SchemaType.INTEGER)],\n [EACH, Schema.ofAny(EACH)],\n ]),\n ),\n Event.outputEventMapEntry(new Map([[VALUE, Schema.of(VALUE, SchemaType.INTEGER)]])),\n ]),\n );\n\nexport class ForEachLoop extends AbstractFunction {\n public getSignature(): FunctionSignature {\n return SIGNATURE;\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let source: any[] = context.getArguments()?.get(SOURCE);\n\n let current = 0;\n\n let statementName = context.getStatementExecution()?.getStatement()?.getStatementName();\n\n return new FunctionOutput({\n next(): EventResult {\n if (\n current >= source.length ||\n (statementName && context.getExecutionContext()?.get(statementName)) //check for breaks;\n ) {\n if (statementName) context.getExecutionContext()?.delete(statementName);\n return EventResult.outputOf(new Map([[VALUE, current]]));\n }\n\n const eve = EventResult.of(\n Event.ITERATION,\n new Map([\n [INDEX, current],\n [EACH, source[current]],\n ]),\n );\n ++current;\n\n return eve;\n },\n });\n }\n}\n","import { Schema } from '../../../json/schema/Schema';\nimport { SchemaType } from '../../../json/schema/type/SchemaType';\nimport { Event } from '../../../model/Event';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionSignature } from '../../../model/FunctionSignature';\nimport { Parameter } from '../../../model/Parameter';\nimport { Namespaces } from '../../../namespaces/Namespaces';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { AbstractFunction } from '../../AbstractFunction';\n\nconst FROM = 'from';\nconst TO = 'to';\nconst STEP = 'step';\nconst VALUE = 'value';\nconst INDEX = 'index';\n\nconst SIGNATURE = new FunctionSignature('RangeLoop')\n .setNamespace(Namespaces.SYSTEM_LOOP)\n .setParameters(\n new Map([\n Parameter.ofEntry(\n FROM,\n Schema.of(\n FROM,\n SchemaType.INTEGER,\n SchemaType.LONG,\n SchemaType.FLOAT,\n SchemaType.DOUBLE,\n ).setDefaultValue(0),\n ),\n Parameter.ofEntry(\n TO,\n Schema.of(\n TO,\n SchemaType.INTEGER,\n SchemaType.LONG,\n SchemaType.FLOAT,\n SchemaType.DOUBLE,\n ).setDefaultValue(1),\n ),\n Parameter.ofEntry(\n STEP,\n Schema.of(\n STEP,\n SchemaType.INTEGER,\n SchemaType.LONG,\n SchemaType.FLOAT,\n SchemaType.DOUBLE,\n )\n .setDefaultValue(1)\n .setNot(new Schema().setConstant(0)),\n ),\n ]),\n )\n .setEvents(\n new Map([\n Event.eventMapEntry(\n Event.ITERATION,\n new Map([\n [\n INDEX,\n Schema.of(\n INDEX,\n SchemaType.INTEGER,\n SchemaType.LONG,\n SchemaType.FLOAT,\n SchemaType.DOUBLE,\n ),\n ],\n ]),\n ),\n Event.outputEventMapEntry(\n new Map([\n [\n VALUE,\n Schema.of(\n VALUE,\n SchemaType.INTEGER,\n SchemaType.LONG,\n SchemaType.FLOAT,\n SchemaType.DOUBLE,\n ),\n ],\n ]),\n ),\n ]),\n );\n\nexport class RangeLoop extends AbstractFunction {\n public getSignature(): FunctionSignature {\n return SIGNATURE;\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let from: number = context.getArguments()?.get(FROM);\n let to: number = context.getArguments()?.get(TO);\n let step: number = context.getArguments()?.get(STEP);\n\n const forward = step > 0;\n let current: number = from;\n let done: boolean = false;\n let statementName = context.getStatementExecution()?.getStatement()?.getStatementName();\n\n return new FunctionOutput({\n next(): EventResult | undefined {\n if (done) return undefined;\n\n if (\n (forward && current >= to) ||\n (!forward && current <= to) ||\n (statementName && context.getExecutionContext()?.get(statementName)) //Check for break;\n ) {\n done = true;\n if (statementName) context.getExecutionContext()?.delete(statementName);\n return EventResult.outputOf(new Map([[VALUE, current]]));\n }\n\n const eve = EventResult.of(Event.ITERATION, new Map([[INDEX, current]]));\n current += step;\n\n return eve;\n },\n });\n }\n}\n","import { Schema } from '../../../json/schema/Schema';\nimport { Event } from '../../../model/Event';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionSignature } from '../../../model/FunctionSignature';\nimport { Parameter } from '../../../model/Parameter';\nimport { Namespaces } from '../../../namespaces/Namespaces';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { AbstractFunction } from '../../AbstractFunction';\n\nconst VALUE = 'value';\n\nconst SIGNATURE = new FunctionSignature('Add')\n .setNamespace(Namespaces.MATH)\n .setParameters(\n new Map([[VALUE, new Parameter(VALUE, Schema.ofNumber(VALUE)).setVariableArgument(true)]]),\n )\n .setEvents(new Map([Event.outputEventMapEntry(new Map([[VALUE, Schema.ofNumber(VALUE)]]))]));\n\nexport class Add extends AbstractFunction {\n public getSignature(): FunctionSignature {\n return SIGNATURE;\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let nums: number[] = context.getArguments()?.get(VALUE);\n\n return new FunctionOutput([\n EventResult.outputOf(new Map([[VALUE, nums.reduce((a, c) => (a += c), 0)]])),\n ]);\n }\n}\n","import { Schema } from '../../../json/schema/Schema';\nimport { SchemaType } from '../../../json/schema/type/SchemaType';\nimport { TypeUtil } from '../../../json/schema/type/TypeUtil';\nimport { Event } from '../../../model/Event';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionSignature } from '../../../model/FunctionSignature';\nimport { Parameter } from '../../../model/Parameter';\nimport { Namespaces } from '../../../namespaces/Namespaces';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { PrimitiveUtil } from '../../../util/primitive/PrimitiveUtil';\nimport { AbstractFunction } from '../../AbstractFunction';\n\nconst VALUE = 'value';\nconst VALUE1 = 'value1';\nconst VALUE2 = 'value2';\n\nconst paramFunctions = [\n () => {\n return new Map([[VALUE, new Parameter(VALUE, Schema.ofNumber(VALUE))]]);\n },\n () => {\n return new Map([\n [VALUE1, new Parameter(VALUE1, Schema.ofNumber(VALUE1))],\n [VALUE2, new Parameter(VALUE2, Schema.ofNumber(VALUE2))],\n ]);\n },\n];\n\nexport class GenericMathFunction extends AbstractFunction {\n private signature: FunctionSignature;\n private parametersNumber: number;\n private mathFunction: (v1: number, v2?: number) => number;\n\n public constructor(\n functionName: string,\n mathFunction: (v1: number, v2?: number) => number,\n parametersNumber: number = 1,\n ...returnType: SchemaType[]\n ) {\n super();\n if (!returnType || !returnType.length) returnType = [SchemaType.DOUBLE];\n this.parametersNumber = parametersNumber;\n this.mathFunction = mathFunction;\n this.signature = new FunctionSignature(functionName)\n .setNamespace(Namespaces.MATH)\n .setParameters(paramFunctions[parametersNumber - 1]())\n .setEvents(\n new Map([\n Event.outputEventMapEntry(\n new Map([\n [\n VALUE,\n new Schema().setType(TypeUtil.of(...returnType)).setName(VALUE),\n ],\n ]),\n ) as [string, Event],\n ]),\n );\n }\n\n public getSignature(): FunctionSignature {\n return this.signature;\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let v1 = PrimitiveUtil.findPrimitiveNumberType(\n context.getArguments()?.get(this.parametersNumber == 1 ? VALUE : VALUE1),\n ).getT2();\n let v2;\n if (this.parametersNumber == 2)\n v2 = PrimitiveUtil.findPrimitiveNumberType(context.getArguments()?.get(VALUE2)).getT2();\n\n return new FunctionOutput([\n EventResult.outputOf(new Map([[VALUE, this.mathFunction.call(this, v1, v2)]])),\n ]);\n }\n}\n","import { Schema } from '../../../json/schema/Schema';\nimport { SchemaType } from '../../../json/schema/type/SchemaType';\nimport { TypeUtil } from '../../../json/schema/type/TypeUtil';\nimport { Event } from '../../../model/Event';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionSignature } from '../../../model/FunctionSignature';\nimport { Parameter } from '../../../model/Parameter';\nimport { Namespaces } from '../../../namespaces/Namespaces';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { AbstractFunction } from '../../AbstractFunction';\n\nconst VALUE = 'value';\n\nexport class Hypotenuse extends AbstractFunction {\n private static readonly SIGNATURE: FunctionSignature = new FunctionSignature('Hypotenuse')\n .setNamespace(Namespaces.MATH)\n .setParameters(\n new Map([\n [VALUE, new Parameter(VALUE, Schema.ofNumber(VALUE)).setVariableArgument(true)],\n ]),\n )\n .setEvents(\n new Map([\n Event.outputEventMapEntry(\n new Map([\n [\n VALUE,\n new Schema().setType(TypeUtil.of(SchemaType.DOUBLE)).setName(VALUE),\n ],\n ]),\n ) as [string, Event],\n ]),\n );\n\n public constructor() {\n super();\n }\n\n public getSignature(): FunctionSignature {\n return Hypotenuse.SIGNATURE;\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let nums: number[] = context.getArguments()?.get(VALUE);\n\n return new FunctionOutput([\n EventResult.outputOf(\n new Map([[VALUE, Math.sqrt(nums.reduce((a, c) => (a += c * c), 0))]]),\n ),\n ]);\n }\n}\n","import { Schema } from '../../../json/schema/Schema';\nimport { Event } from '../../../model/Event';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionSignature } from '../../../model/FunctionSignature';\nimport { Parameter } from '../../../model/Parameter';\nimport { Namespaces } from '../../../namespaces/Namespaces';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { AbstractFunction } from '../../AbstractFunction';\n\nconst VALUE = 'value';\n\nconst SIGNATURE = new FunctionSignature('Maximum')\n .setNamespace(Namespaces.MATH)\n .setParameters(\n new Map([[VALUE, new Parameter(VALUE, Schema.ofNumber(VALUE)).setVariableArgument(true)]]),\n )\n .setEvents(new Map([Event.outputEventMapEntry(new Map([[VALUE, Schema.ofNumber(VALUE)]]))]));\n\nexport class Maximum extends AbstractFunction {\n public getSignature(): FunctionSignature {\n return SIGNATURE;\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let nums: number[] = context.getArguments()?.get(VALUE);\n\n return new FunctionOutput([\n EventResult.outputOf(\n new Map([\n [VALUE, nums.reduce((a, c) => ((!a && a !== 0) || c > a ? c : a))],\n ]),\n ),\n ]);\n }\n}\n","import { Schema } from '../../../json/schema/Schema';\nimport { Event } from '../../../model/Event';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionSignature } from '../../../model/FunctionSignature';\nimport { Parameter } from '../../../model/Parameter';\nimport { Namespaces } from '../../../namespaces/Namespaces';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { AbstractFunction } from '../../AbstractFunction';\n\nconst VALUE = 'value';\n\nconst SIGNATURE = new FunctionSignature('Minimum')\n .setNamespace(Namespaces.MATH)\n .setParameters(\n new Map([[VALUE, new Parameter(VALUE, Schema.ofNumber(VALUE)).setVariableArgument(true)]]),\n )\n .setEvents(new Map([Event.outputEventMapEntry(new Map([[VALUE, Schema.ofNumber(VALUE)]]))]));\n\nexport class Minimum extends AbstractFunction {\n public getSignature(): FunctionSignature {\n return SIGNATURE;\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let nums: number[] = context.getArguments()?.get(VALUE);\n\n return new FunctionOutput([\n EventResult.outputOf(\n new Map([\n [VALUE, nums.reduce((a, c) => ((!a && a !== 0) || c < a ? c : a))],\n ]),\n ),\n ]);\n }\n}\n","import { Schema } from '../../../json/schema/Schema';\nimport { Event } from '../../../model/Event';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionSignature } from '../../../model/FunctionSignature';\nimport { Namespaces } from '../../../namespaces/Namespaces';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { MapUtil } from '../../../util/MapUtil';\nimport { AbstractFunction } from '../../AbstractFunction';\n\nconst VALUE = 'value';\nexport class Random extends AbstractFunction {\n private static readonly SIGNATURE: FunctionSignature = new FunctionSignature('Random')\n .setNamespace(Namespaces.MATH)\n .setEvents(\n new Map<string, Event>([\n Event.outputEventMapEntry(MapUtil.of(VALUE, Schema.ofDouble(VALUE))),\n ]),\n );\n\n public getSignature(): FunctionSignature {\n return Random.SIGNATURE;\n }\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n return new FunctionOutput([EventResult.outputOf(new Map([[VALUE, Math.random()]]))]);\n }\n}\n","import { Schema } from '../../../json/schema/Schema';\nimport { Event } from '../../../model/Event';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionSignature } from '../../../model/FunctionSignature';\nimport { Parameter } from '../../../model/Parameter';\nimport { Namespaces } from '../../../namespaces/Namespaces';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { MapUtil } from '../../../util/MapUtil';\nimport { AbstractFunction } from '../../AbstractFunction';\n\nexport class RandomFloat extends AbstractFunction {\n public static readonly MIN_VALUE = 'minValue';\n\n public static readonly MAX_VALUE = 'maxValue';\n\n public static readonly VALUE = 'value';\n\n private static readonly SIGNATURE: FunctionSignature = new FunctionSignature('RandomFloat')\n .setParameters(\n MapUtil.of(\n RandomFloat.MIN_VALUE,\n Parameter.of(\n RandomFloat.MIN_VALUE,\n Schema.ofFloat(RandomFloat.MIN_VALUE).setDefaultValue(0),\n ),\n RandomFloat.MAX_VALUE,\n Parameter.of(\n RandomFloat.MAX_VALUE,\n Schema.ofFloat(RandomFloat.MAX_VALUE).setDefaultValue(2147483647),\n ),\n ),\n )\n .setNamespace(Namespaces.MATH)\n .setEvents(\n new Map<string, Event>([\n Event.outputEventMapEntry(\n MapUtil.of(RandomFloat.VALUE, Schema.ofFloat(RandomFloat.VALUE)),\n ),\n ]),\n );\n\n public getSignature(): FunctionSignature {\n return RandomFloat.SIGNATURE;\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let min: number = context.getArguments()?.get(RandomFloat.MIN_VALUE);\n\n let max: number = context.getArguments()?.get(RandomFloat.MAX_VALUE);\n\n let num: number = Math.random() * (max - min) + min;\n\n return new FunctionOutput([EventResult.outputOf(new Map([[RandomFloat.VALUE, num]]))]);\n }\n}\n","import { Schema } from '../../../json/schema/Schema';\nimport { Event } from '../../../model/Event';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionSignature } from '../../../model/FunctionSignature';\nimport { Parameter } from '../../../model/Parameter';\nimport { Namespaces } from '../../../namespaces/Namespaces';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { MapUtil } from '../../../util/MapUtil';\nimport { AbstractFunction } from '../../AbstractFunction';\n\nexport class RandomInt extends AbstractFunction {\n public static readonly MIN_VALUE = 'minValue';\n\n public static readonly MAX_VALUE = 'maxValue';\n\n public static readonly VALUE = 'value';\n\n private static readonly SIGNATURE: FunctionSignature = new FunctionSignature('RandomInt')\n .setParameters(\n MapUtil.of(\n RandomInt.MIN_VALUE,\n Parameter.of(\n RandomInt.MIN_VALUE,\n Schema.ofInteger(RandomInt.MIN_VALUE).setDefaultValue(0),\n ),\n RandomInt.MAX_VALUE,\n Parameter.of(\n RandomInt.MAX_VALUE,\n Schema.ofInteger(RandomInt.MAX_VALUE).setDefaultValue(2147483647),\n ),\n ),\n )\n .setNamespace(Namespaces.MATH)\n .setEvents(\n new Map<string, Event>([\n Event.outputEventMapEntry(\n MapUtil.of(RandomInt.VALUE, Schema.ofInteger(RandomInt.VALUE)),\n ),\n ]),\n );\n\n public getSignature(): FunctionSignature {\n return RandomInt.SIGNATURE;\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let min: number = context.getArguments()?.get(RandomInt.MIN_VALUE);\n\n let max: number = context.getArguments()?.get(RandomInt.MAX_VALUE);\n\n let num: number = Math.floor(Math.random() * (max - min) + min);\n\n return new FunctionOutput([EventResult.outputOf(new Map([[RandomInt.VALUE, num]]))]);\n }\n}\n","import { SchemaType } from '../../../json/schema/type/SchemaType';\nimport { Namespaces } from '../../../namespaces/Namespaces';\nimport { Repository } from '../../../Repository';\nimport { AbstractFunction } from '../../AbstractFunction';\nimport { Function } from '../../Function';\nimport { Add } from './Add';\nimport { GenericMathFunction } from './GenericMathFunction';\nimport { Hypotenuse } from './Hypotenuse';\nimport { Maximum } from './Maximum';\nimport { Minimum } from './Minimum';\nimport { Random } from './Random';\nimport { RandomFloat } from './RandomFloat';\nimport { RandomInt } from './RandomInt';\n\nconst functionObjectsIndex: { [key: string]: AbstractFunction } = {\n Absolute: new GenericMathFunction(\n 'Absolute',\n (v) => Math.abs(v),\n 1,\n SchemaType.INTEGER,\n SchemaType.LONG,\n SchemaType.FLOAT,\n SchemaType.DOUBLE,\n ),\n ACosine: new GenericMathFunction('ArcCosine', (v) => Math.acos(v)),\n ASine: new GenericMathFunction('ArcSine', (v) => Math.asin(v)),\n ATangent: new GenericMathFunction('ArcTangent', (v) => Math.atan(v)),\n Ceiling: new GenericMathFunction('Ceiling', (v) => Math.ceil(v)),\n Cosine: new GenericMathFunction('Cosine', (v) => Math.cos(v)),\n CosineH: new GenericMathFunction('HyperbolicCosine', (v) => Math.cosh(v)),\n CubeRoot: new GenericMathFunction('CubeRoot', (v) => Math.cbrt(v)),\n Exponential: new GenericMathFunction('Exponential', (v) => Math.exp(v)),\n Expm1: new GenericMathFunction('ExponentialMinus1', (v) => Math.expm1(v)),\n Floor: new GenericMathFunction('Floor', (v) => Math.floor(v)),\n Log: new GenericMathFunction('LogNatural', (v) => Math.log(v)),\n Log10: new GenericMathFunction('Log10', (v) => Math.log10(v)),\n Round: new GenericMathFunction(\n 'Round',\n (v) => Math.round(v),\n 1,\n SchemaType.INTEGER,\n SchemaType.LONG,\n ),\n Sine: new GenericMathFunction('Sine', (v) => Math.sin(v)),\n SineH: new GenericMathFunction('HyperbolicSine', (v) => Math.sinh(v)),\n Tangent: new GenericMathFunction('Tangent', (v) => Math.tan(v)),\n TangentH: new GenericMathFunction('HyperbolicTangent', (v) => Math.tanh(v)),\n ToDegrees: new GenericMathFunction('ToDegrees', (v) => v * (Math.PI / 180)),\n ToRadians: new GenericMathFunction('ToRadians', (v) => v * (180 / Math.PI)),\n SquareRoot: new GenericMathFunction('SquareRoot', (v) => Math.sqrt(v)),\n ArcTangent: new GenericMathFunction('ArcTangent2', (v1, v2) => Math.atan2(v1, v2!), 2),\n Power: new GenericMathFunction('Power', (v1, v2) => Math.pow(v1, v2!), 2),\n Add: new Add(),\n Hypotenuse: new Hypotenuse(),\n Maximum: new Maximum(),\n Minimum: new Minimum(),\n Random: new Random(),\n RandomFloat: new RandomFloat(),\n RandomInt: new RandomInt(),\n};\n\nconst filterableNames = Object.values(functionObjectsIndex).map((e) =>\n e.getSignature().getFullName(),\n);\n\nexport class MathFunctionRepository implements Repository<Function> {\n find(namespace: string, name: string): Function | undefined {\n if (namespace != Namespaces.MATH) return undefined;\n\n return functionObjectsIndex[name];\n }\n\n public filter(name: string): string[] {\n return filterableNames.filter((e) => e.toLowerCase().indexOf(name.toLowerCase()) !== -1);\n }\n}\n","import { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionSignature } from '../../../model/FunctionSignature';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { AbstractFunction } from '../../AbstractFunction';\n\nimport { Namespaces } from '../../../namespaces/Namespaces';\nimport { Event } from '../../../model/Event';\nimport { Schema } from '../../../json/schema/Schema';\nimport { Parameter } from '../../../model/Parameter';\n\nconst VALUE = 'value';\n\nconst SOURCE = 'source';\n\nexport abstract class AbstractObjectFunction extends AbstractFunction {\n private signature: FunctionSignature;\n\n protected constructor(functionName: string, valueSchema: Schema) {\n super();\n this.signature = new FunctionSignature(functionName)\n .setNamespace(Namespaces.SYSTEM_OBJECT)\n .setParameters(new Map([Parameter.ofEntry(SOURCE, Schema.ofAny(SOURCE))]))\n .setEvents(new Map([Event.outputEventMapEntry(new Map([[VALUE, valueSchema]]))]));\n }\n\n public getSignature(): FunctionSignature {\n return this.signature;\n }\n}\n","import { SchemaType } from '../../../json/schema/type/SchemaType';\nimport { Namespaces } from '../../../namespaces/Namespaces';\nimport { Repository } from '../../../Repository';\nimport { AbstractFunction } from '../../AbstractFunction';\nimport { Function } from '../../Function';\nimport { ObjectDeleteKey } from './ObjectDeleteKey';\nimport { ObjectEntries } from './ObjectEntries';\nimport { ObjectKeys } from './ObjectKeys';\nimport { ObjectPutValue } from './ObjectPutValue';\nimport { ObjectValues } from './ObjectValues';\n\nconst functionObjectsIndex: { [key: string]: AbstractFunction } = {\n ObjectValues: new ObjectValues(),\n ObjectKeys: new ObjectKeys(),\n ObjectEntries: new ObjectEntries(),\n ObjectDeleteKey: new ObjectDeleteKey(),\n ObjectPutValue: new ObjectPutValue(),\n};\n\nconst filterableNames = Object.values(functionObjectsIndex).map((e) =>\n e.getSignature().getFullName(),\n);\n\nexport class ObjectFunctionRepository implements Repository<Function> {\n find(namespace: string, name: string): Function | undefined {\n if (namespace != Namespaces.SYSTEM_OBJECT) return undefined;\n\n return functionObjectsIndex[name];\n }\n\n public filter(name: string): string[] {\n return filterableNames.filter((e) => e.toLowerCase().indexOf(name.toLowerCase()) !== -1);\n }\n}\n","import { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\n\nimport { isNullValue } from '../../../util/NullCheck';\nimport { EventResult } from '../../../model/EventResult';\nimport { AbstractObjectFunction } from './AbstractObjectFunction';\nimport { Schema } from '../../../json/schema/Schema';\nimport { duplicate } from '../../../util/duplicate';\n\nconst VALUE = 'value';\n\nexport class ObjectValues extends AbstractObjectFunction {\n public constructor() {\n super('ObjectValues', Schema.ofArray(VALUE, Schema.ofAny(VALUE)));\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n var source = context.getArguments()?.get('source');\n\n if (isNullValue(source))\n return new FunctionOutput([EventResult.outputOf(new Map([[VALUE, []]]))]);\n\n let objectValues: any[] = Object.entries(duplicate(source))\n .sort((a, b) => a[0].localeCompare(b[0]))\n .map((e) => e[1]);\n\n return new FunctionOutput([EventResult.outputOf(new Map([[VALUE, objectValues]]))]);\n }\n}\n","import { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\n\nimport { isNullValue } from '../../../util/NullCheck';\nimport { EventResult } from '../../../model/EventResult';\nimport { AbstractObjectFunction } from './AbstractObjectFunction';\nimport { Schema } from '../../../json/schema/Schema';\nimport { duplicate } from '../../../util/duplicate';\n\nconst VALUE = 'value';\n\nexport class ObjectKeys extends AbstractObjectFunction {\n public constructor() {\n super('ObjectKeys', Schema.ofArray(VALUE, Schema.ofString(VALUE)));\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n var source = context.getArguments()?.get('source');\n\n if (isNullValue(source))\n return new FunctionOutput([EventResult.outputOf(new Map([[VALUE, []]]))]);\n\n let keys: string[] = Object.keys(duplicate(source)).sort((a, b) => a.localeCompare(b));\n\n return new FunctionOutput([EventResult.outputOf(new Map([[VALUE, keys]]))]);\n }\n}\n","import { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\n\nimport { isNullValue } from '../../../util/NullCheck';\nimport { EventResult } from '../../../model/EventResult';\nimport { AbstractObjectFunction } from './AbstractObjectFunction';\nimport { Schema } from '../../../json/schema/Schema';\nimport { duplicate } from '../../../util/duplicate';\n\nconst VALUE = 'value';\n\nexport class ObjectEntries extends AbstractObjectFunction {\n public constructor() {\n super(\n 'ObjectEntries',\n Schema.ofArray(\n VALUE,\n Schema.ofArray('tuple', Schema.ofString('key'), Schema.ofAny('value')),\n ),\n );\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n var source = context.getArguments()?.get('source');\n\n if (isNullValue(source))\n return new FunctionOutput([EventResult.outputOf(new Map([[VALUE, []]]))]);\n\n let entries = Object.entries(duplicate(source)).sort((a, b) => a[0].localeCompare(b[0]));\n\n return new FunctionOutput([EventResult.outputOf(new Map([[VALUE, entries]]))]);\n }\n}\n","import { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\n\nimport { Schema } from '../../../json/schema/Schema';\nimport { Event } from '../../../model/Event';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionSignature } from '../../../model/FunctionSignature';\nimport { Parameter } from '../../../model/Parameter';\nimport { Namespaces } from '../../../namespaces/Namespaces';\nimport { isNullValue } from '../../../util/NullCheck';\nimport { duplicate } from '../../../util/duplicate';\nimport { AbstractFunction } from '../../AbstractFunction';\n\nconst VALUE = 'value';\nconst SOURCE = 'source';\nconst KEY = 'key';\n\nexport class ObjectDeleteKey extends AbstractFunction {\n private signature: FunctionSignature;\n\n public constructor() {\n super();\n this.signature = new FunctionSignature('ObjectDeleteKey')\n .setNamespace(Namespaces.SYSTEM_OBJECT)\n .setParameters(\n new Map([\n Parameter.ofEntry(SOURCE, Schema.ofAny(SOURCE)),\n Parameter.ofEntry(KEY, Schema.ofString(KEY)),\n ]),\n )\n .setEvents(\n new Map([Event.outputEventMapEntry(new Map([[VALUE, Schema.ofAny(VALUE)]]))]),\n );\n }\n\n public getSignature(): FunctionSignature {\n return this.signature;\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let source = context.getArguments()?.get(SOURCE);\n let key = context.getArguments()?.get(KEY);\n\n if (isNullValue(source))\n return new FunctionOutput([EventResult.outputOf(new Map([[VALUE, undefined]]))]);\n\n source = duplicate(source);\n delete source[key];\n\n return new FunctionOutput([EventResult.outputOf(new Map([[VALUE, source]]))]);\n }\n}\n","import { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\n\nimport { Schema } from '../../../json/schema/Schema';\nimport { Event } from '../../../model/Event';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionSignature } from '../../../model/FunctionSignature';\nimport { Parameter } from '../../../model/Parameter';\nimport { Namespaces } from '../../../namespaces/Namespaces';\nimport { duplicate } from '../../../util/duplicate';\nimport { AbstractFunction } from '../../AbstractFunction';\nimport { isNullValue } from '../../../util/NullCheck';\nimport { ObjectValueSetterExtractor } from '../../../runtime/expression/tokenextractor/ObjectValueSetterExtractor';\n\nconst VALUE = 'value';\nconst SOURCE = 'source';\nconst KEY = 'key';\nconst OVERWRITE = 'overwrite';\nconst DELETE_KEY_ON_NULL = 'deleteKeyOnNull';\n\nexport class ObjectPutValue extends AbstractFunction {\n private signature: FunctionSignature;\n\n public constructor() {\n super();\n this.signature = new FunctionSignature('ObjectPutValue')\n .setNamespace(Namespaces.SYSTEM_OBJECT)\n .setParameters(\n new Map([\n Parameter.ofEntry(SOURCE, Schema.ofObject(SOURCE)),\n Parameter.ofEntry(KEY, Schema.ofString(KEY)),\n Parameter.ofEntry(VALUE, Schema.ofAny(VALUE)),\n Parameter.ofEntry(OVERWRITE, Schema.ofBoolean(OVERWRITE).setDefaultValue(true)),\n Parameter.ofEntry(\n DELETE_KEY_ON_NULL,\n Schema.ofBoolean(DELETE_KEY_ON_NULL).setDefaultValue(false),\n ),\n ]),\n )\n .setEvents(\n new Map([Event.outputEventMapEntry(new Map([[VALUE, Schema.ofObject(VALUE)]]))]),\n );\n }\n\n public getSignature(): FunctionSignature {\n return this.signature;\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let source = context.getArguments()?.get(SOURCE);\n let key = context.getArguments()?.get(KEY);\n let value = context.getArguments()?.get(VALUE);\n let overwrite = context.getArguments()?.get(OVERWRITE);\n let deleteKeyOnNull = context.getArguments()?.get(DELETE_KEY_ON_NULL);\n\n const ove = new ObjectValueSetterExtractor(source, 'Data.');\n ove.setValue(key, value, overwrite, deleteKeyOnNull);\n\n return new FunctionOutput([EventResult.outputOf(new Map([[VALUE, ove.getStore()]]))]);\n }\n}\n","import { Schema } from '../../json/schema/Schema';\nimport { SchemaType } from '../../json/schema/type/SchemaType';\nimport { Event } from '../../model/Event';\nimport { EventResult } from '../../model/EventResult';\nimport { FunctionOutput } from '../../model/FunctionOutput';\nimport { FunctionSignature } from '../../model/FunctionSignature';\nimport { Parameter } from '../../model/Parameter';\nimport { Namespaces } from '../../namespaces/Namespaces';\nimport { FunctionExecutionParameters } from '../../runtime/FunctionExecutionParameters';\nimport { AbstractFunction } from '../AbstractFunction';\n\nexport class Print extends AbstractFunction {\n private static readonly VALUES: string = 'values';\n\n private static readonly SIGNATURE: FunctionSignature = new FunctionSignature('Print')\n .setNamespace(Namespaces.SYSTEM)\n .setParameters(\n new Map([Parameter.ofEntry(Print.VALUES, Schema.ofAny(Print.VALUES), true)]),\n );\n\n public getSignature(): FunctionSignature {\n return Print.SIGNATURE;\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n var values = context.getArguments()?.get(Print.VALUES);\n\n console?.log(...values);\n\n return new FunctionOutput([EventResult.outputOf(new Map())]);\n }\n}\n","import { Schema } from '../../../json/schema/Schema';\nimport { Event } from '../../../model/Event';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionSignature } from '../../../model/FunctionSignature';\nimport { Parameter } from '../../../model/Parameter';\nimport { Function } from '../../Function';\nimport { Namespaces } from '../../../namespaces/Namespaces';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { MapUtil } from '../../../util/MapUtil';\nimport { AbstractFunction } from '../../AbstractFunction';\n\nexport abstract class AbstractStringFunction extends AbstractFunction {\n public static readonly PARAMETER_STRING_NAME: string = 'string';\n\n public static readonly PARAMETER_SEARCH_STRING_NAME: string = 'searchString';\n\n public static readonly PARAMETER_SECOND_STRING_NAME: string = 'secondString';\n\n public static readonly PARAMETER_THIRD_STRING_NAME: string = 'thirdString';\n\n public static readonly PARAMETER_INDEX_NAME: string = 'index';\n\n public static readonly PARAMETER_SECOND_INDEX_NAME: string = 'secondIndex';\n\n public static readonly EVENT_RESULT_NAME: string = 'result';\n\n protected static readonly PARAMETER_STRING: Parameter = new Parameter(\n AbstractStringFunction.PARAMETER_STRING_NAME,\n Schema.ofString(AbstractStringFunction.PARAMETER_STRING_NAME),\n );\n\n protected static readonly PARAMETER_SECOND_STRING: Parameter = new Parameter(\n AbstractStringFunction.PARAMETER_SECOND_STRING_NAME,\n Schema.ofString(AbstractStringFunction.PARAMETER_SECOND_STRING_NAME),\n );\n\n protected static readonly PARAMETER_THIRD_STRING: Parameter = new Parameter(\n AbstractStringFunction.PARAMETER_THIRD_STRING_NAME,\n Schema.ofString(AbstractStringFunction.PARAMETER_THIRD_STRING_NAME),\n );\n\n protected static readonly PARAMETER_INDEX: Parameter = new Parameter(\n AbstractStringFunction.PARAMETER_INDEX_NAME,\n Schema.ofInteger(AbstractStringFunction.PARAMETER_INDEX_NAME),\n );\n\n protected static readonly PARAMETER_SECOND_INDEX: Parameter = new Parameter(\n AbstractStringFunction.PARAMETER_SECOND_INDEX_NAME,\n Schema.ofInteger(AbstractStringFunction.PARAMETER_SECOND_INDEX_NAME),\n );\n\n protected static readonly PARAMETER_SEARCH_STRING: Parameter = new Parameter(\n AbstractStringFunction.PARAMETER_SEARCH_STRING_NAME,\n Schema.ofString(AbstractStringFunction.PARAMETER_STRING_NAME),\n );\n\n protected static readonly EVENT_STRING: Event = new Event(\n Event.OUTPUT,\n MapUtil.of(\n AbstractStringFunction.EVENT_RESULT_NAME,\n Schema.ofString(AbstractStringFunction.EVENT_RESULT_NAME),\n ),\n );\n\n protected static readonly EVENT_BOOLEAN: Event = new Event(\n Event.OUTPUT,\n MapUtil.of(\n AbstractStringFunction.EVENT_RESULT_NAME,\n Schema.ofBoolean(AbstractStringFunction.EVENT_RESULT_NAME),\n ),\n );\n\n protected static readonly EVENT_INT: Event = new Event(\n Event.OUTPUT,\n MapUtil.of(\n AbstractStringFunction.EVENT_RESULT_NAME,\n Schema.ofInteger(AbstractStringFunction.EVENT_RESULT_NAME),\n ),\n );\n\n protected static readonly EVENT_ARRAY: Event = new Event(\n Event.OUTPUT,\n MapUtil.of(\n AbstractStringFunction.EVENT_RESULT_NAME,\n Schema.ofArray(AbstractStringFunction.EVENT_RESULT_NAME),\n ),\n );\n\n private signature: FunctionSignature;\n\n constructor(namespace: string, functionName: string, event: Event, ...parameter: Parameter[]) {\n super();\n const paramMap: Map<string, Parameter> = new Map();\n parameter.forEach((e) => paramMap.set(e.getParameterName(), e));\n\n this.signature = new FunctionSignature(functionName)\n .setNamespace(namespace)\n .setParameters(paramMap)\n .setEvents(MapUtil.of(event.getName(), event));\n }\n\n public getSignature(): FunctionSignature {\n return this.signature;\n }\n\n public static ofEntryAsStringBooleanOutput(\n name: string,\n fun: (a: string, b: string) => boolean,\n ): [string, Function] {\n return [\n name,\n new (class extends AbstractStringFunction {\n constructor(\n namespace: string,\n functionName: string,\n event: Event,\n ...parameter: Parameter[]\n ) {\n super(namespace, functionName, event, ...parameter);\n }\n\n protected async internalExecute(\n context: FunctionExecutionParameters,\n ): Promise<FunctionOutput> {\n let s: string = context\n ?.getArguments()\n ?.get(AbstractStringFunction.PARAMETER_STRING_NAME);\n let ss: string = context\n ?.getArguments()\n ?.get(AbstractStringFunction.PARAMETER_SEARCH_STRING_NAME);\n\n return new FunctionOutput([\n EventResult.outputOf(\n MapUtil.of(AbstractStringFunction.EVENT_RESULT_NAME, fun(s, ss)),\n ),\n ]);\n }\n })(\n Namespaces.STRING,\n name,\n AbstractStringFunction.EVENT_BOOLEAN,\n AbstractStringFunction.PARAMETER_STRING,\n AbstractStringFunction.PARAMETER_SEARCH_STRING,\n ),\n ];\n }\n\n public static ofEntryAsStringAndIntegerStringOutput(\n name: string,\n fun: (a: string, b: number) => string,\n ): [string, Function] {\n return [\n name,\n new (class extends AbstractStringFunction {\n constructor(\n namespace: string,\n functionName: string,\n event: Event,\n ...parameter: Parameter[]\n ) {\n super(namespace, functionName, event, ...parameter);\n }\n\n protected async internalExecute(\n context: FunctionExecutionParameters,\n ): Promise<FunctionOutput> {\n let s: string = context\n ?.getArguments()\n ?.get(AbstractStringFunction.PARAMETER_STRING_NAME);\n let count: number = context\n ?.getArguments()\n ?.get(AbstractStringFunction.PARAMETER_INDEX_NAME);\n\n return new FunctionOutput([\n EventResult.outputOf(\n MapUtil.of(AbstractStringFunction.EVENT_RESULT_NAME, fun(s, count)),\n ),\n ]);\n }\n })(\n Namespaces.STRING,\n name,\n AbstractStringFunction.EVENT_STRING,\n AbstractStringFunction.PARAMETER_STRING,\n AbstractStringFunction.PARAMETER_INDEX,\n ),\n ];\n }\n\n public static ofEntryAsStringIntegerOutput(\n name: string,\n fun: (a: string, b: string) => number,\n ): [string, Function] {\n return [\n name,\n new (class extends AbstractStringFunction {\n constructor(\n namespace: string,\n functionName: string,\n event: Event,\n ...parameter: Parameter[]\n ) {\n super(namespace, functionName, event, ...parameter);\n }\n\n protected async internalExecute(\n context: FunctionExecutionParameters,\n ): Promise<FunctionOutput> {\n let s1: string = context\n ?.getArguments()\n ?.get(AbstractStringFunction.PARAMETER_STRING_NAME);\n let s2: string = context\n ?.getArguments()\n ?.get(AbstractStringFunction.PARAMETER_SEARCH_STRING_NAME);\n\n return new FunctionOutput([\n EventResult.outputOf(\n MapUtil.of(AbstractStringFunction.EVENT_RESULT_NAME, fun(s1, s2)),\n ),\n ]);\n }\n })(\n Namespaces.STRING,\n name,\n AbstractStringFunction.EVENT_INT,\n AbstractStringFunction.PARAMETER_STRING,\n AbstractStringFunction.PARAMETER_SEARCH_STRING,\n ),\n ];\n }\n\n public static ofEntryString(name: string, fun: (a: string) => string): [string, Function] {\n return [\n name,\n new (class extends AbstractStringFunction {\n constructor(\n namespace: string,\n functionName: string,\n event: Event,\n ...parameter: Parameter[]\n ) {\n super(namespace, functionName, event, ...parameter);\n }\n\n protected async internalExecute(\n context: FunctionExecutionParameters,\n ): Promise<FunctionOutput> {\n let s: string = context\n ?.getArguments()\n ?.get(AbstractStringFunction.PARAMETER_STRING_NAME);\n\n return new FunctionOutput([\n EventResult.outputOf(\n MapUtil.of(AbstractStringFunction.EVENT_RESULT_NAME, fun(s)),\n ),\n ]);\n }\n })(\n Namespaces.STRING,\n name,\n AbstractStringFunction.EVENT_STRING,\n AbstractStringFunction.PARAMETER_STRING,\n ),\n ];\n }\n public static ofEntryStringBooleanOutput(\n name: string,\n fun: (a: string) => boolean,\n ): [string, Function] {\n return [\n name,\n new (class extends AbstractStringFunction {\n constructor(\n namespace: string,\n functionName: string,\n event: Event,\n ...parameter: Parameter[]\n ) {\n super(namespace, functionName, event, ...parameter);\n }\n\n protected async internalExecute(\n context: FunctionExecutionParameters,\n ): Promise<FunctionOutput> {\n let s: string = context\n ?.getArguments()\n ?.get(AbstractStringFunction.PARAMETER_STRING_NAME);\n\n return new FunctionOutput([\n EventResult.outputOf(\n MapUtil.of(AbstractStringFunction.EVENT_RESULT_NAME, fun(s)),\n ),\n ]);\n }\n })(\n Namespaces.STRING,\n name,\n AbstractStringFunction.EVENT_BOOLEAN,\n AbstractStringFunction.PARAMETER_STRING,\n ),\n ];\n }\n\n public static ofEntryAsStringStringIntegerIntegerOutput(\n name: string,\n fun: (a: string, b: string, c: number) => number,\n ): [string, Function] {\n return [\n name,\n new (class extends AbstractStringFunction {\n constructor(\n namespace: string,\n functionName: string,\n event: Event,\n ...parameter: Parameter[]\n ) {\n super(namespace, functionName, event, ...parameter);\n }\n\n protected async internalExecute(\n context: FunctionExecutionParameters,\n ): Promise<FunctionOutput> {\n let s: string = context\n ?.getArguments()\n ?.get(AbstractStringFunction.PARAMETER_STRING_NAME);\n let ss: string = context\n ?.getArguments()\n ?.get(AbstractStringFunction.PARAMETER_SEARCH_STRING_NAME);\n\n let ind: number = context\n ?.getArguments()\n ?.get(AbstractStringFunction.PARAMETER_INDEX_NAME);\n\n return new FunctionOutput([\n EventResult.outputOf(\n MapUtil.of(AbstractStringFunction.EVENT_RESULT_NAME, fun(s, ss, ind)),\n ),\n ]);\n }\n })(\n Namespaces.STRING,\n name,\n AbstractStringFunction.EVENT_INT,\n AbstractStringFunction.PARAMETER_STRING,\n AbstractStringFunction.PARAMETER_SEARCH_STRING,\n AbstractStringFunction.PARAMETER_INDEX,\n ),\n ];\n }\n\n public static ofEntryAsStringIntegerIntegerStringOutput(\n name: string,\n fun: (a: string, b: number, c: number) => string,\n ): [string, Function] {\n return [\n name,\n new (class extends AbstractStringFunction {\n constructor(\n namespace: string,\n functionName: string,\n event: Event,\n ...parameter: Parameter[]\n ) {\n super(namespace, functionName, event, ...parameter);\n }\n\n protected async internalExecute(\n context: FunctionExecutionParameters,\n ): Promise<FunctionOutput> {\n let s: string = context\n ?.getArguments()\n ?.get(AbstractStringFunction.PARAMETER_STRING_NAME);\n let ind1: number = context\n ?.getArguments()\n ?.get(AbstractStringFunction.PARAMETER_INDEX_NAME);\n\n let ind2: number = context\n ?.getArguments()\n ?.get(AbstractStringFunction.PARAMETER_SECOND_INDEX_NAME);\n\n return new FunctionOutput([\n EventResult.outputOf(\n MapUtil.of(\n AbstractStringFunction.EVENT_RESULT_NAME,\n fun(s, ind1, ind2),\n ),\n ),\n ]);\n }\n })(\n Namespaces.STRING,\n name,\n AbstractStringFunction.EVENT_INT,\n AbstractStringFunction.PARAMETER_STRING,\n AbstractStringFunction.PARAMETER_INDEX,\n AbstractStringFunction.PARAMETER_SECOND_INDEX,\n ),\n ];\n }\n\n public static ofEntryAsStringStringStringStringOutput(\n name: string,\n fun: (a: string, b: string, c: string) => string,\n ): [string, Function] {\n return [\n name,\n new (class extends AbstractStringFunction {\n constructor(\n namespace: string,\n functionName: string,\n event: Event,\n ...parameter: Parameter[]\n ) {\n super(namespace, functionName, event, ...parameter);\n }\n\n protected async internalExecute(\n context: FunctionExecutionParameters,\n ): Promise<FunctionOutput> {\n let s1: string = context\n ?.getArguments()\n ?.get(AbstractStringFunction.PARAMETER_STRING_NAME);\n let s2: string = context\n ?.getArguments()\n ?.get(AbstractStringFunction.PARAMETER_SECOND_STRING_NAME);\n let s3: string = context\n ?.getArguments()\n ?.get(AbstractStringFunction.PARAMETER_THIRD_STRING_NAME);\n\n return new FunctionOutput([\n EventResult.outputOf(\n MapUtil.of(AbstractStringFunction.EVENT_RESULT_NAME, fun(s1, s2, s3)),\n ),\n ]);\n }\n })(\n Namespaces.STRING,\n name,\n AbstractStringFunction.EVENT_STRING,\n AbstractStringFunction.PARAMETER_STRING,\n AbstractStringFunction.PARAMETER_SECOND_STRING,\n AbstractStringFunction.PARAMETER_THIRD_STRING,\n ),\n ];\n }\n}\n","import { Schema } from '../../../json/schema/Schema';\nimport { SchemaType } from '../../../json/schema/type/SchemaType';\nimport { SingleType } from '../../../json/schema/type/SingleType';\nimport { Event } from '../../../model/Event';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionSignature } from '../../../model/FunctionSignature';\nimport { Parameter } from '../../../model/Parameter';\nimport { Namespaces } from '../../../namespaces/Namespaces';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { AbstractFunction } from '../../AbstractFunction';\n\nexport class Concatenate extends AbstractFunction {\n public static VALUE: string = 'value';\n\n private static SCHEMA: Schema = new Schema()\n .setName(Concatenate.VALUE)\n .setType(new SingleType(SchemaType.STRING));\n\n private static SIGNATURE: FunctionSignature = new FunctionSignature('Concatenate')\n .setNamespace(Namespaces.STRING)\n .setParameters(\n new Map([\n [\n Concatenate.VALUE,\n new Parameter(Concatenate.VALUE, Concatenate.SCHEMA).setVariableArgument(true),\n ],\n ]),\n )\n .setEvents(\n new Map([\n Event.outputEventMapEntry(\n new Map([[Concatenate.VALUE, Schema.ofString(Concatenate.VALUE)]]),\n ),\n ]),\n );\n\n public constructor() {\n super();\n }\n\n public getSignature(): FunctionSignature {\n return Concatenate.SIGNATURE;\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let contextArgs: string[] = context.getArguments()?.get(Concatenate.VALUE);\n\n let concatenatedString: string = '';\n\n contextArgs.reduce((curr, next) => (concatenatedString = curr + next), concatenatedString);\n\n return new FunctionOutput([\n EventResult.outputOf(new Map([[Concatenate.VALUE, concatenatedString]])),\n ]);\n }\n}\n","import { Schema } from '../../../json/schema/Schema';\nimport { Event } from '../../../model/Event';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionSignature } from '../../../model/FunctionSignature';\nimport { Parameter } from '../../../model/Parameter';\nimport { Namespaces } from '../../../namespaces/Namespaces';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { AbstractFunction } from '../../AbstractFunction';\n\nexport class DeleteForGivenLength extends AbstractFunction {\n public static readonly PARAMETER_STRING_NAME: string = 'string';\n\n public static readonly PARAMETER_AT_START_NAME: string = 'startPosition';\n\n public static readonly PARAMETER_AT_END_NAME: string = 'endPosition';\n\n public static readonly EVENT_RESULT_NAME: string = 'result';\n\n protected readonly PARAMETER_STRING: Parameter = new Parameter(\n DeleteForGivenLength.PARAMETER_STRING_NAME,\n Schema.ofString(DeleteForGivenLength.PARAMETER_STRING_NAME),\n );\n\n protected readonly PARAMETER_AT_START: Parameter = new Parameter(\n DeleteForGivenLength.PARAMETER_AT_START_NAME,\n Schema.ofInteger(DeleteForGivenLength.PARAMETER_AT_START_NAME),\n );\n\n protected readonly PARAMETER_AT_END: Parameter = new Parameter(\n DeleteForGivenLength.PARAMETER_AT_END_NAME,\n Schema.ofInteger(DeleteForGivenLength.PARAMETER_AT_END_NAME),\n );\n\n protected readonly EVENT_STRING: Event = new Event(\n Event.OUTPUT,\n new Map([\n [\n DeleteForGivenLength.EVENT_RESULT_NAME,\n Schema.ofString(DeleteForGivenLength.EVENT_RESULT_NAME),\n ],\n ]),\n );\n\n private signature: FunctionSignature = new FunctionSignature('DeleteForGivenLength')\n .setNamespace(Namespaces.STRING)\n .setParameters(\n new Map([\n [this.PARAMETER_STRING.getParameterName(), this.PARAMETER_STRING],\n [this.PARAMETER_AT_START.getParameterName(), this.PARAMETER_AT_START],\n [this.PARAMETER_AT_END.getParameterName(), this.PARAMETER_AT_END],\n ]),\n )\n .setEvents(new Map([[this.EVENT_STRING.getName(), this.EVENT_STRING]]));\n\n public constructor() {\n super();\n }\n\n public getSignature(): FunctionSignature {\n return this.signature;\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let inputString: string = context\n ?.getArguments()\n ?.get(DeleteForGivenLength.PARAMETER_STRING_NAME);\n let startPosition: number = context\n ?.getArguments()\n ?.get(DeleteForGivenLength.PARAMETER_AT_START_NAME);\n let endPosition: number = context\n ?.getArguments()\n ?.get(DeleteForGivenLength.PARAMETER_AT_END_NAME);\n\n if (endPosition >= startPosition) {\n let outputString: string = '';\n\n outputString += inputString.substring(0, startPosition);\n outputString += inputString.substring(endPosition);\n\n return new FunctionOutput([\n EventResult.outputOf(\n new Map([[DeleteForGivenLength.EVENT_RESULT_NAME, outputString.toString()]]),\n ),\n ]);\n }\n\n return new FunctionOutput([\n EventResult.outputOf(new Map([[DeleteForGivenLength.EVENT_RESULT_NAME, inputString]])),\n ]);\n }\n}\n","import { Schema } from '../../../json/schema/Schema';\nimport { Event } from '../../../model/Event';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionSignature } from '../../../model/FunctionSignature';\nimport { Parameter } from '../../../model/Parameter';\nimport { Namespaces } from '../../../namespaces/Namespaces';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { AbstractFunction } from '../../AbstractFunction';\n\nexport class InsertAtGivenPosition extends AbstractFunction {\n public static readonly PARAMETER_STRING_NAME: string = 'string';\n\n public static readonly PARAMETER_AT_POSITION_NAME: string = 'position';\n\n public static readonly PARAMETER_INSERT_STRING_NAME: string = 'insertString';\n\n protected readonly EVENT_RESULT_NAME: string = 'result';\n\n protected readonly PARAMETER_STRING: Parameter = new Parameter(\n InsertAtGivenPosition.PARAMETER_STRING_NAME,\n Schema.ofString(InsertAtGivenPosition.PARAMETER_STRING_NAME),\n );\n\n protected readonly PARAMETER_AT_POSITION: Parameter = new Parameter(\n InsertAtGivenPosition.PARAMETER_AT_POSITION_NAME,\n Schema.ofInteger(InsertAtGivenPosition.PARAMETER_AT_POSITION_NAME),\n );\n\n protected readonly PARAMETER_INSERT_STRING: Parameter = new Parameter(\n InsertAtGivenPosition.PARAMETER_INSERT_STRING_NAME,\n Schema.ofString(InsertAtGivenPosition.PARAMETER_INSERT_STRING_NAME),\n );\n\n protected readonly EVENT_STRING: Event = new Event(\n Event.OUTPUT,\n new Map([[this.EVENT_RESULT_NAME, Schema.ofString(this.EVENT_RESULT_NAME)]]),\n );\n\n private signature: FunctionSignature = new FunctionSignature('InsertAtGivenPosition')\n .setNamespace(Namespaces.STRING)\n .setParameters(\n new Map([\n [this.PARAMETER_STRING.getParameterName(), this.PARAMETER_STRING],\n [this.PARAMETER_AT_POSITION.getParameterName(), this.PARAMETER_AT_POSITION],\n [this.PARAMETER_INSERT_STRING.getParameterName(), this.PARAMETER_INSERT_STRING],\n ]),\n )\n .setEvents(\n new Map([\n Event.outputEventMapEntry(\n new Map([[this.EVENT_RESULT_NAME, Schema.ofString(this.EVENT_RESULT_NAME)]]),\n ),\n ]),\n );\n\n public getSignature(): FunctionSignature {\n return this.signature;\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let inputString: string = context\n ?.getArguments()\n ?.get(InsertAtGivenPosition.PARAMETER_STRING_NAME);\n let at: number = context\n ?.getArguments()\n ?.get(InsertAtGivenPosition.PARAMETER_AT_POSITION_NAME);\n let insertString: string = context\n ?.getArguments()\n ?.get(InsertAtGivenPosition.PARAMETER_INSERT_STRING_NAME);\n\n let outputString: string = '';\n\n outputString += inputString.substring(0, at);\n outputString += insertString;\n outputString += inputString.substring(at);\n\n return new FunctionOutput([\n EventResult.outputOf(new Map([[this.EVENT_RESULT_NAME, outputString]])),\n ]);\n }\n}\n","import { Schema } from '../../../json/schema/Schema';\nimport { Event } from '../../../model/Event';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionSignature } from '../../../model/FunctionSignature';\nimport { Parameter } from '../../../model/Parameter';\nimport { Namespaces } from '../../../namespaces/Namespaces';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { AbstractFunction } from '../../AbstractFunction';\n\nexport class PostPad extends AbstractFunction {\n protected static readonly PARAMETER_STRING_NAME: string = 'string';\n\n protected static readonly PARAMETER_POSTPAD_STRING_NAME: string = 'postpadString';\n\n protected static readonly PARAMETER_LENGTH_NAME: string = 'length';\n\n protected static readonly EVENT_RESULT_NAME: string = 'result';\n\n protected static PARAMETER_STRING: Parameter = new Parameter(\n PostPad.PARAMETER_STRING_NAME,\n Schema.ofString(PostPad.PARAMETER_STRING_NAME),\n );\n\n protected static PARAMETER_POSTPAD_STRING: Parameter = new Parameter(\n PostPad.PARAMETER_POSTPAD_STRING_NAME,\n Schema.ofString(PostPad.PARAMETER_POSTPAD_STRING_NAME),\n );\n\n protected static PARAMETER_LENGTH: Parameter = new Parameter(\n PostPad.PARAMETER_LENGTH_NAME,\n Schema.ofInteger(PostPad.PARAMETER_LENGTH_NAME),\n );\n\n protected static EVENT_STRING: Event = new Event(\n Event.OUTPUT,\n new Map([[PostPad.EVENT_RESULT_NAME, Schema.ofString(PostPad.EVENT_RESULT_NAME)]]),\n );\n\n private signature: FunctionSignature = new FunctionSignature('PostPad')\n .setNamespace(Namespaces.STRING)\n .setParameters(\n new Map([\n [PostPad.PARAMETER_STRING.getParameterName(), PostPad.PARAMETER_STRING],\n [\n PostPad.PARAMETER_POSTPAD_STRING.getParameterName(),\n PostPad.PARAMETER_POSTPAD_STRING,\n ],\n [PostPad.PARAMETER_LENGTH.getParameterName(), PostPad.PARAMETER_LENGTH],\n ]),\n )\n .setEvents(new Map([[PostPad.EVENT_STRING.getName(), PostPad.EVENT_STRING]]));\n\n public constructor() {\n super();\n }\n\n public getSignature(): FunctionSignature {\n return this.signature;\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let inputString: string = context.getArguments()?.get(PostPad.PARAMETER_STRING_NAME);\n let postpadString: string = context\n ?.getArguments()\n ?.get(PostPad.PARAMETER_POSTPAD_STRING_NAME);\n\n let length: number = context.getArguments()?.get(PostPad.PARAMETER_LENGTH_NAME);\n let outputString: string = '';\n let prepadStringLength: number = postpadString.length;\n\n outputString += inputString;\n\n while (prepadStringLength <= length) {\n outputString += postpadString;\n prepadStringLength += postpadString.length;\n }\n\n if (outputString.length - inputString.length < length) {\n outputString += postpadString.substring(\n 0,\n length - (outputString.length - inputString.length),\n );\n }\n\n return new FunctionOutput([\n EventResult.of(\n PostPad.EVENT_RESULT_NAME,\n new Map([[PostPad.EVENT_RESULT_NAME, outputString.toString()]]),\n ),\n ]);\n }\n}\n","import { Schema } from '../../../json/schema/Schema';\nimport { Event } from '../../../model/Event';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionSignature } from '../../../model/FunctionSignature';\nimport { Parameter } from '../../../model/Parameter';\nimport { Namespaces } from '../../../namespaces/Namespaces';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { AbstractFunction } from '../../AbstractFunction';\n\nexport class PrePad extends AbstractFunction {\n public static readonly PARAMETER_STRING_NAME: string = 'string';\n\n public static readonly PARAMETER_PREPAD_STRING_NAME: string = 'prepadString';\n\n public static readonly PARAMETER_LENGTH_NAME: string = 'length';\n\n public static readonly EVENT_RESULT_NAME: string = 'result';\n\n protected static readonly PARAMETER_STRING: Parameter = new Parameter(\n PrePad.PARAMETER_STRING_NAME,\n Schema.ofString(PrePad.PARAMETER_STRING_NAME),\n );\n\n protected static readonly PARAMETER_PREPAD_STRING: Parameter = new Parameter(\n PrePad.PARAMETER_PREPAD_STRING_NAME,\n Schema.ofString(PrePad.PARAMETER_PREPAD_STRING_NAME),\n );\n\n protected static readonly PARAMETER_LENGTH: Parameter = new Parameter(\n PrePad.PARAMETER_LENGTH_NAME,\n Schema.ofInteger(PrePad.PARAMETER_LENGTH_NAME),\n );\n\n protected static readonly EVENT_STRING: Event = new Event(\n Event.OUTPUT,\n new Map([[PrePad.EVENT_RESULT_NAME, Schema.ofString(PrePad.EVENT_RESULT_NAME)]]),\n );\n\n private readonly signature: FunctionSignature = new FunctionSignature('PrePad')\n .setNamespace(Namespaces.STRING)\n .setParameters(\n new Map([\n [PrePad.PARAMETER_STRING.getParameterName(), PrePad.PARAMETER_STRING],\n [PrePad.PARAMETER_PREPAD_STRING.getParameterName(), PrePad.PARAMETER_PREPAD_STRING],\n [PrePad.PARAMETER_LENGTH.getParameterName(), PrePad.PARAMETER_LENGTH],\n ]),\n )\n .setEvents(new Map([[PrePad.EVENT_STRING.getName(), PrePad.EVENT_STRING]]));\n\n public getSignature(): FunctionSignature {\n return this.signature;\n }\n\n public constructor() {\n super();\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let inputString: string = context.getArguments()?.get(PrePad.PARAMETER_STRING_NAME);\n let prepadString: string = context.getArguments()?.get(PrePad.PARAMETER_PREPAD_STRING_NAME);\n let length: number = context.getArguments()?.get(PrePad.PARAMETER_LENGTH_NAME);\n let outputString: string = '';\n let prepadStringLength: number = prepadString.length;\n\n while (prepadStringLength <= length) {\n outputString += prepadString;\n prepadStringLength += prepadString.length;\n }\n\n if (outputString.length < length) {\n outputString += prepadString.substring(0, length - outputString.length);\n }\n\n outputString += inputString;\n return new FunctionOutput([\n EventResult.of(\n PrePad.EVENT_RESULT_NAME,\n new Map([[PrePad.EVENT_RESULT_NAME, outputString]]),\n ),\n ]);\n }\n}\n","import { Schema } from '../../../json/schema/Schema';\nimport { Event } from '../../../model/Event';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionSignature } from '../../../model/FunctionSignature';\nimport { Parameter } from '../../../model/Parameter';\nimport { Namespaces } from '../../../namespaces/Namespaces';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { AbstractFunction } from '../../AbstractFunction';\n\nexport class RegionMatches extends AbstractFunction {\n public static readonly PARAMETER_STRING_NAME: string = 'string';\n\n public static readonly PARAMETER_BOOLEAN_NAME: string = 'boolean';\n\n public static readonly PARAMETER_FIRST_OFFSET_NAME: string = 'firstOffset';\n\n public static readonly PARAMETER_OTHER_STRING_NAME: string = 'otherString';\n\n public static readonly PARAMETER_SECOND_OFFSET_NAME: string = 'secondOffset';\n\n public static readonly PARAMETER_INTEGER_NAME: string = 'length';\n\n public static readonly EVENT_RESULT_NAME: string = 'result';\n\n public static PARAMETER_STRING: Parameter = new Parameter(\n RegionMatches.PARAMETER_STRING_NAME,\n Schema.ofString(RegionMatches.PARAMETER_STRING_NAME),\n );\n\n protected static PARAMETER_OTHER_STRING: Parameter = new Parameter(\n RegionMatches.PARAMETER_OTHER_STRING_NAME,\n Schema.ofString(RegionMatches.PARAMETER_OTHER_STRING_NAME),\n );\n\n protected static PARAMETER_FIRST_OFFSET: Parameter = new Parameter(\n RegionMatches.PARAMETER_FIRST_OFFSET_NAME,\n Schema.ofInteger(RegionMatches.PARAMETER_FIRST_OFFSET_NAME),\n );\n\n protected static PARAMETER_SECOND_OFFSET: Parameter = new Parameter(\n RegionMatches.PARAMETER_SECOND_OFFSET_NAME,\n Schema.ofInteger(RegionMatches.PARAMETER_SECOND_OFFSET_NAME),\n );\n\n protected static PARAMETER_INTEGER: Parameter = new Parameter(\n RegionMatches.PARAMETER_INTEGER_NAME,\n Schema.ofInteger(RegionMatches.PARAMETER_INTEGER_NAME),\n );\n\n protected static PARAMETER_BOOLEAN: Parameter = new Parameter(\n RegionMatches.PARAMETER_BOOLEAN_NAME,\n Schema.ofBoolean(RegionMatches.PARAMETER_BOOLEAN_NAME),\n );\n\n protected static EVENT_BOOLEAN: Event = new Event(\n Event.OUTPUT,\n new Map([\n [RegionMatches.EVENT_RESULT_NAME, Schema.ofBoolean(RegionMatches.EVENT_RESULT_NAME)],\n ]),\n );\n\n private signature: FunctionSignature = new FunctionSignature('RegionMatches')\n .setNamespace(Namespaces.STRING)\n .setParameters(\n new Map([\n [RegionMatches.PARAMETER_STRING.getParameterName(), RegionMatches.PARAMETER_STRING],\n [\n RegionMatches.PARAMETER_BOOLEAN.getParameterName(),\n RegionMatches.PARAMETER_BOOLEAN,\n ],\n [\n RegionMatches.PARAMETER_FIRST_OFFSET.getParameterName(),\n RegionMatches.PARAMETER_FIRST_OFFSET,\n ],\n [\n RegionMatches.PARAMETER_OTHER_STRING.getParameterName(),\n RegionMatches.PARAMETER_OTHER_STRING,\n ],\n [\n RegionMatches.PARAMETER_SECOND_OFFSET.getParameterName(),\n RegionMatches.PARAMETER_SECOND_OFFSET,\n ],\n [\n RegionMatches.PARAMETER_INTEGER.getParameterName(),\n RegionMatches.PARAMETER_INTEGER,\n ],\n ]),\n )\n .setEvents(new Map([[RegionMatches.EVENT_BOOLEAN.getName(), RegionMatches.EVENT_BOOLEAN]]));\n\n public getSignature(): FunctionSignature {\n return this.signature;\n }\n\n public constructor() {\n super();\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let inputString: string = context.getArguments()?.get(RegionMatches.PARAMETER_STRING_NAME);\n let ignoreCase: boolean = context.getArguments()?.get(RegionMatches.PARAMETER_BOOLEAN_NAME);\n let toffSet: number = context\n .getArguments()\n ?.get(RegionMatches.PARAMETER_FIRST_OFFSET_NAME);\n let otherString: string = context\n ?.getArguments()\n ?.get(RegionMatches.PARAMETER_OTHER_STRING_NAME);\n let oOffSet: number = context\n ?.getArguments()\n ?.get(RegionMatches.PARAMETER_SECOND_OFFSET_NAME);\n let length: number = context.getArguments()?.get(RegionMatches.PARAMETER_INTEGER_NAME);\n\n let matches: boolean = false;\n\n if (\n toffSet < 0 ||\n oOffSet < 0 ||\n toffSet + length > inputString.length ||\n oOffSet + length > otherString.length\n )\n matches = false;\n else if (ignoreCase) {\n inputString = inputString.substring(toffSet, toffSet + length).toUpperCase();\n let s2: string = otherString.substring(oOffSet, oOffSet + length).toUpperCase();\n matches = inputString == s2;\n } else {\n inputString = inputString.substring(toffSet, toffSet + length);\n let s2: string = otherString.substring(oOffSet, length);\n matches = inputString == s2;\n }\n\n return new FunctionOutput([\n EventResult.outputOf(new Map([[RegionMatches.EVENT_RESULT_NAME, matches]])),\n ]);\n }\n}\n","import { Schema } from '../../../json/schema/Schema';\nimport { Event } from '../../../model/Event';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionSignature } from '../../../model/FunctionSignature';\nimport { Parameter } from '../../../model/Parameter';\nimport { Namespaces } from '../../../namespaces/Namespaces';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\n\nimport { AbstractFunction } from '../../AbstractFunction';\n\nexport class ReplaceAtGivenPosition extends AbstractFunction {\n protected static readonly PARAMETER_STRING_NAME: string = 'string';\n\n protected static readonly PARAMETER_AT_START_NAME: string = 'startPosition';\n\n protected static readonly PARAMETER_AT_LENGTH_NAME: string = 'lengthPosition';\n\n protected static readonly PARAMETER_REPLACE_STRING_NAME: string = 'replaceString';\n\n protected static readonly EVENT_RESULT_NAME: string = 'result';\n\n protected static PARAMETER_STRING: Parameter = new Parameter(\n ReplaceAtGivenPosition.PARAMETER_STRING_NAME,\n Schema.ofString(ReplaceAtGivenPosition.PARAMETER_STRING_NAME),\n );\n\n protected static PARAMETER_AT_START: Parameter = new Parameter(\n ReplaceAtGivenPosition.PARAMETER_AT_START_NAME,\n Schema.ofInteger(ReplaceAtGivenPosition.PARAMETER_AT_START_NAME),\n );\n\n protected static PARAMETER_AT_LENGTH: Parameter = new Parameter(\n ReplaceAtGivenPosition.PARAMETER_AT_LENGTH_NAME,\n Schema.ofInteger(ReplaceAtGivenPosition.PARAMETER_AT_LENGTH_NAME),\n );\n\n protected static PARAMETER_REPLACE_STRING: Parameter = new Parameter(\n ReplaceAtGivenPosition.PARAMETER_REPLACE_STRING_NAME,\n Schema.ofString(ReplaceAtGivenPosition.PARAMETER_REPLACE_STRING_NAME),\n );\n\n protected static EVENT_STRING: Event = new Event(\n Event.OUTPUT,\n new Map([\n [\n ReplaceAtGivenPosition.EVENT_RESULT_NAME,\n Schema.ofString(ReplaceAtGivenPosition.EVENT_RESULT_NAME),\n ],\n ]),\n );\n\n public constructor() {\n super();\n }\n\n private signature: FunctionSignature = new FunctionSignature('ReplaceAtGivenPosition')\n .setNamespace(Namespaces.STRING)\n .setParameters(\n new Map([\n [\n ReplaceAtGivenPosition.PARAMETER_STRING.getParameterName(),\n ReplaceAtGivenPosition.PARAMETER_STRING,\n ],\n [\n ReplaceAtGivenPosition.PARAMETER_AT_START.getParameterName(),\n ReplaceAtGivenPosition.PARAMETER_AT_START,\n ],\n [\n ReplaceAtGivenPosition.PARAMETER_AT_LENGTH.getParameterName(),\n ReplaceAtGivenPosition.PARAMETER_AT_LENGTH,\n ],\n [\n ReplaceAtGivenPosition.PARAMETER_REPLACE_STRING.getParameterName(),\n ReplaceAtGivenPosition.PARAMETER_REPLACE_STRING,\n ],\n ]),\n )\n .setEvents(\n new Map([\n [\n ReplaceAtGivenPosition.EVENT_STRING.getName(),\n ReplaceAtGivenPosition.EVENT_STRING,\n ],\n ]),\n );\n\n public getSignature(): FunctionSignature {\n return this.signature;\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let inputString: string = context\n ?.getArguments()\n ?.get(ReplaceAtGivenPosition.PARAMETER_STRING_NAME);\n let startPosition: number = context\n ?.getArguments()\n ?.get(ReplaceAtGivenPosition.PARAMETER_AT_START_NAME);\n let length: number = context\n ?.getArguments()\n ?.get(ReplaceAtGivenPosition.PARAMETER_AT_LENGTH_NAME);\n let replaceString: string = context\n ?.getArguments()\n ?.get(ReplaceAtGivenPosition.PARAMETER_REPLACE_STRING_NAME);\n let inputStringLength: number = inputString.length;\n\n if (startPosition < length) {\n let outputString: string = '';\n outputString += inputString.substring(0, startPosition);\n outputString += replaceString;\n outputString += inputString.substring(startPosition + length);\n }\n\n return new FunctionOutput([\n EventResult.outputOf(\n new Map([[ReplaceAtGivenPosition.EVENT_RESULT_NAME, inputString]]),\n ),\n ]);\n }\n}\n","import { Schema } from '../../../json/schema/Schema';\nimport { Event } from '../../../model/Event';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionSignature } from '../../../model/FunctionSignature';\nimport { Parameter } from '../../../model/Parameter';\nimport { Namespaces } from '../../../namespaces/Namespaces';\nimport { AbstractFunction } from '../../AbstractFunction';\nimport { MapUtil } from '../../../util/MapUtil';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { TypeUtil } from '../../../json/schema/type/TypeUtil';\nimport { SchemaType } from '../../../json/schema/type/SchemaType';\n\nexport class Reverse extends AbstractFunction {\n protected readonly VALUE: string = 'value';\n\n private readonly SIGNATURE: FunctionSignature = new FunctionSignature('Reverse')\n .setNamespace(Namespaces.STRING)\n .setParameters(\n new Map([\n [\n this.VALUE,\n new Parameter(this.VALUE, Schema.ofString(this.VALUE)).setVariableArgument(\n false,\n ),\n ],\n ]),\n )\n .setEvents(\n new Map([\n Event.outputEventMapEntry(\n new Map([\n [\n this.VALUE,\n new Schema()\n .setType(TypeUtil.of(SchemaType.STRING))\n .setName(this.VALUE),\n ],\n ]),\n ),\n ]),\n );\n\n public constructor() {\n super();\n }\n\n public getSignature(): FunctionSignature {\n return this.SIGNATURE;\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let acutalString: string = context.getArguments()?.get(this.VALUE);\n let stringLength: number = acutalString.length - 1;\n let reversedString: string = '';\n\n while (stringLength >= 0) {\n reversedString += acutalString.charAt(stringLength--);\n }\n\n return new FunctionOutput([EventResult.outputOf(MapUtil.of(this.VALUE, reversedString))]);\n }\n}\n","import { Schema } from '../../../json/schema/Schema';\nimport { Event } from '../../../model/Event';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionSignature } from '../../../model/FunctionSignature';\nimport { Parameter } from '../../../model/Parameter';\nimport { Namespaces } from '../../../namespaces/Namespaces';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { MapUtil } from '../../../util/MapUtil';\nimport { AbstractFunction } from '../../AbstractFunction';\n\nexport class Split extends AbstractFunction {\n protected readonly PARAMETER_STRING_NAME: string = 'string';\n protected readonly PARAMETER_SPLIT_STRING_NAME: string = 'searchString';\n protected readonly EVENT_RESULT_NAME: string = 'result';\n\n protected readonly PARAMETER_STRING: Parameter = new Parameter(\n this.PARAMETER_STRING_NAME,\n Schema.ofString(this.PARAMETER_STRING_NAME),\n );\n\n protected readonly PARAMETER_SPLIT_STRING: Parameter = new Parameter(\n this.PARAMETER_SPLIT_STRING_NAME,\n Schema.ofString(this.PARAMETER_SPLIT_STRING_NAME),\n );\n\n protected readonly EVENT_ARRAY: Event = new Event(\n Event.OUTPUT,\n MapUtil.of(this.EVENT_RESULT_NAME, Schema.ofArray(this.EVENT_RESULT_NAME)),\n );\n\n public getSignature(): FunctionSignature {\n return new FunctionSignature('Split')\n .setNamespace(Namespaces.STRING)\n .setParameters(\n new Map([\n [this.PARAMETER_STRING_NAME, this.PARAMETER_STRING],\n [this.PARAMETER_SPLIT_STRING_NAME, this.PARAMETER_SPLIT_STRING],\n ]),\n )\n .setEvents(\n new Map([\n Event.outputEventMapEntry(\n new Map([[this.EVENT_RESULT_NAME, Schema.ofArray(this.EVENT_RESULT_NAME)]]),\n ) as [string, Event],\n ]),\n );\n }\n\n public constructor() {\n super();\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let s1: string = context.getArguments()?.get(this.PARAMETER_STRING_NAME);\n let s2: string = context.getArguments()?.get(this.PARAMETER_SPLIT_STRING_NAME);\n\n return new FunctionOutput([\n EventResult.outputOf(MapUtil.of(this.EVENT_RESULT_NAME, s1.split(s2))),\n ]);\n }\n}\n","import { Schema } from '../../../json/schema/Schema';\nimport { Event } from '../../../model/Event';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionSignature } from '../../../model/FunctionSignature';\nimport { Parameter } from '../../../model/Parameter';\nimport { Namespaces } from '../../../namespaces/Namespaces';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { AbstractFunction } from '../../AbstractFunction';\n\nexport class ToString extends AbstractFunction {\n protected readonly PARAMETER_INPUT_ANYTYPE_NAME: string = 'anytype';\n\n protected readonly EVENT_RESULT_NAME: string = 'result';\n\n protected readonly PARAMETER_INPUT_ANYTYPE: Parameter = new Parameter(\n this.PARAMETER_INPUT_ANYTYPE_NAME,\n Schema.ofAny(this.PARAMETER_INPUT_ANYTYPE_NAME),\n );\n\n protected readonly EVENT_STRING: Event = new Event(\n Event.OUTPUT,\n new Map([[this.EVENT_RESULT_NAME, Schema.ofString(this.EVENT_RESULT_NAME)]]),\n );\n\n public getSignature(): FunctionSignature {\n return new FunctionSignature('ToString')\n .setNamespace(Namespaces.STRING)\n .setParameters(\n new Map([\n [this.PARAMETER_INPUT_ANYTYPE.getParameterName(), this.PARAMETER_INPUT_ANYTYPE],\n ]),\n )\n .setEvents(new Map([[this.EVENT_STRING.getName(), this.EVENT_STRING]]));\n }\n\n public constructor() {\n super();\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let input: any = context.getArguments()?.get(this.PARAMETER_INPUT_ANYTYPE_NAME);\n let output: string = '';\n\n if (typeof input === 'object') {\n output = JSON.stringify(input, undefined, 2);\n } else {\n output = '' + input;\n }\n\n return new FunctionOutput([\n EventResult.outputOf(new Map([[this.EVENT_RESULT_NAME, output]])),\n ]);\n }\n}\n","import { Schema } from '../../../json/schema/Schema';\nimport { Event } from '../../../model/Event';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionSignature } from '../../../model/FunctionSignature';\nimport { Parameter } from '../../../model/Parameter';\nimport { Namespaces } from '../../../namespaces/Namespaces';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { AbstractFunction } from '../../AbstractFunction';\n\nexport class TrimTo extends AbstractFunction {\n public static readonly PARAMETER_STRING_NAME: string = 'string';\n\n public static readonly PARAMETER_LENGTH_NAME: string = 'length';\n\n public static readonly EVENT_RESULT_NAME: string = 'result';\n\n protected static readonly PARAMETER_STRING: Parameter = new Parameter(\n TrimTo.PARAMETER_STRING_NAME,\n Schema.ofString(TrimTo.PARAMETER_STRING_NAME),\n );\n\n protected static readonly PARAMETER_LENGTH: Parameter = new Parameter(\n TrimTo.PARAMETER_LENGTH_NAME,\n Schema.ofInteger(TrimTo.PARAMETER_LENGTH_NAME),\n );\n\n protected static readonly EVENT_STRING: Event = new Event(\n Event.OUTPUT,\n new Map([[TrimTo.EVENT_RESULT_NAME, Schema.ofString(TrimTo.EVENT_RESULT_NAME)]]),\n );\n\n private signature: FunctionSignature = new FunctionSignature('TrimTo')\n .setNamespace(Namespaces.STRING)\n .setParameters(\n new Map([\n [TrimTo.PARAMETER_STRING.getParameterName(), TrimTo.PARAMETER_STRING],\n [TrimTo.PARAMETER_LENGTH.getParameterName(), TrimTo.PARAMETER_LENGTH],\n ]),\n )\n .setEvents(new Map([[TrimTo.EVENT_STRING.getName(), TrimTo.EVENT_STRING]]));\n\n public getSignature(): FunctionSignature {\n return this.signature;\n }\n\n public constructor() {\n super();\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let inputString: string = context.getArguments()?.get(TrimTo.PARAMETER_STRING_NAME);\n let length: number = context.getArguments()?.get(TrimTo.PARAMETER_LENGTH_NAME);\n\n return new FunctionOutput([\n EventResult.of(\n TrimTo.EVENT_RESULT_NAME,\n new Map([[TrimTo.EVENT_RESULT_NAME, inputString.substring(0, length)]]),\n ),\n ]);\n }\n}\n","import { Namespaces } from '../../../namespaces/Namespaces';\nimport { Repository } from '../../../Repository';\nimport mapEntry from '../../../util/mapEntry';\nimport { MapUtil } from '../../../util/MapUtil';\nimport { Function } from '../../Function';\nimport { AbstractStringFunction } from './AbstractStringFunction';\nimport { Concatenate } from './Concatenate';\nimport { DeleteForGivenLength } from './DeleteForGivenLength';\nimport { InsertAtGivenPosition } from './InsertAtGivenPosition';\nimport { PostPad } from './PostPad';\nimport { PrePad } from './PrePad';\nimport { RegionMatches } from './RegionMatches';\nimport { ReplaceAtGivenPosition } from './ReplaceAtGivenPosition';\nimport { Reverse } from './Reverse';\nimport { Split } from './Split';\nimport { ToString } from './ToString';\nimport { TrimTo } from './TrimTo';\n\nexport class StringFunctionRepository implements Repository<Function> {\n private static readonly repoMap: Map<string, Function> = MapUtil.ofArrayEntries(\n AbstractStringFunction.ofEntryString('Trim', (e) => e.trim()),\n AbstractStringFunction.ofEntryString('LowerCase', (e) => e.toLocaleLowerCase()),\n AbstractStringFunction.ofEntryString('UpperCase', (e) => e.toUpperCase()),\n AbstractStringFunction.ofEntryStringBooleanOutput('IsBlank', (e) => e.trim() === ''),\n AbstractStringFunction.ofEntryStringBooleanOutput('IsEmpty', (e) => e === ''),\n\n AbstractStringFunction.ofEntryAsStringBooleanOutput(\n 'Contains',\n (a, b) => a.indexOf(b) != -1,\n ),\n AbstractStringFunction.ofEntryAsStringBooleanOutput('EndsWith', (a, b) => a.endsWith(b)),\n AbstractStringFunction.ofEntryAsStringBooleanOutput(\n 'EqualsIgnoreCase',\n (a, b) => a.toUpperCase() == b.toUpperCase(),\n ),\n AbstractStringFunction.ofEntryAsStringBooleanOutput('Matches', (a, b) =>\n new RegExp(b).test(a),\n ),\n AbstractStringFunction.ofEntryAsStringIntegerOutput('IndexOf', (a, b) => a.indexOf(b)),\n AbstractStringFunction.ofEntryAsStringIntegerOutput('LastIndexOf', (a, b) =>\n a.lastIndexOf(b),\n ),\n AbstractStringFunction.ofEntryAsStringAndIntegerStringOutput('Repeat', (a, b) =>\n a.repeat(b),\n ),\n\n AbstractStringFunction.ofEntryAsStringStringIntegerIntegerOutput(\n 'IndexOfWithStartPoint',\n (a, b, c) => a.indexOf(b, c),\n ),\n AbstractStringFunction.ofEntryAsStringStringIntegerIntegerOutput(\n 'LastIndexOfWithStartPoint',\n (a, b, c) => a.lastIndexOf(b, c),\n ),\n AbstractStringFunction.ofEntryAsStringStringStringStringOutput('Replace', (a, b, c) => {\n return a;\n }),\n AbstractStringFunction.ofEntryAsStringStringStringStringOutput('ReplaceFirst', (a, b, c) =>\n a.replace(b, c),\n ),\n AbstractStringFunction.ofEntryAsStringIntegerIntegerStringOutput('SubString', (a, b, c) =>\n a.substring(b, c),\n ),\n mapEntry(new Concatenate()),\n mapEntry(new DeleteForGivenLength()),\n mapEntry(new InsertAtGivenPosition()),\n mapEntry(new PostPad()),\n mapEntry(new PrePad()),\n mapEntry(new RegionMatches()),\n mapEntry(new ReplaceAtGivenPosition()),\n mapEntry(new Reverse()),\n mapEntry(new Split()),\n mapEntry(new ToString()),\n mapEntry(new TrimTo()),\n );\n\n private static readonly filterableNames = Array.from(\n StringFunctionRepository.repoMap.values(),\n ).map((e) => e.getSignature().getFullName());\n\n public find(namespace: string, name: string): Function | undefined {\n if (namespace != Namespaces.STRING) {\n return undefined;\n }\n return StringFunctionRepository.repoMap.get(name);\n }\n\n public filter(name: string): string[] {\n return StringFunctionRepository.filterableNames.filter(\n (e) => e.toLowerCase().indexOf(name.toLowerCase()) !== -1,\n );\n }\n}\n","import { Repository } from './Repository';\n\nexport class HybridRepository<T> implements Repository<T> {\n repos: Repository<T>[];\n\n constructor(...repos: Repository<T>[]) {\n this.repos = repos;\n }\n\n public find(namespace: string, name: string): T | undefined {\n for (let repo of this.repos) {\n let s = repo.find(namespace, name);\n if (s) return s;\n }\n\n return undefined;\n }\n\n public filter(name: string): string[] {\n let result= new Set<string>;\n for (let repo of this.repos) {\n repo.filter(name).forEach(e => result.add(e));\n }\n return Array.from(result);\n }\n}\n","import { Function } from '../function/Function';\nimport { ArrayFunctionRepository } from '../function/system/array/ArrayFunctionRepository';\nimport { Create } from '../function/system/context/Create';\nimport { Get } from '../function/system/context/Get';\nimport { SetFunction } from '../function/system/context/SetFunction';\nimport { GenerateEvent } from '../function/system/GenerateEvent';\nimport { If } from '../function/system/If';\nimport { Break } from '../function/system/loop/Break';\nimport { CountLoop } from '../function/system/loop/CountLoop';\nimport { ForEachLoop } from '../function/system/loop/ForEachLoop';\nimport { RangeLoop } from '../function/system/loop/RangeLoop';\nimport { MathFunctionRepository } from '../function/system/math/MathFunctionRepository';\nimport { ObjectFunctionRepository } from '../function/system/object/ObjectFunctionRepository';\nimport { Print } from '../function/system/Print';\nimport { StringFunctionRepository } from '../function/system/string/StringFunctionRepository';\nimport { HybridRepository } from '../HybridRepository';\nimport { Namespaces } from '../namespaces/Namespaces';\nimport mapEntry from '../util/mapEntry';\n\nconst map: Map<string, Map<string, Function>> = new Map([\n [\n Namespaces.SYSTEM_CTX,\n new Map([mapEntry(new Create()), mapEntry(new Get()), mapEntry(new SetFunction())]),\n ],\n [\n Namespaces.SYSTEM_LOOP,\n new Map([\n mapEntry(new RangeLoop()),\n mapEntry(new CountLoop()),\n mapEntry(new Break()),\n mapEntry(new ForEachLoop()),\n ]),\n ],\n [\n Namespaces.SYSTEM,\n new Map([mapEntry(new If()), mapEntry(new GenerateEvent()), mapEntry(new Print())]),\n ],\n]);\n\nconst filterableNames = Array.from(map.values())\n .flatMap((e) => Array.from(e.values()))\n .map((e) => e.getSignature().getFullName());\n\nexport class KIRunFunctionRepository extends HybridRepository<Function> {\n public constructor() {\n super(\n {\n find(namespace: string, name: string): Function | undefined {\n return map.get(namespace)?.get(name);\n },\n filter(name: string): string[] {\n return Array.from(filterableNames).filter(\n (e) => e.toLowerCase().indexOf(name.toLowerCase()) !== -1,\n );\n },\n },\n new MathFunctionRepository(),\n new StringFunctionRepository(),\n new ArrayFunctionRepository(),\n new ObjectFunctionRepository(),\n );\n }\n}\n","import { StatementMessageType } from './StatementMessageType';\n\nexport class StatementMessage {\n private messageType?: StatementMessageType;\n private message?: string;\n\n public constructor(messageType?: StatementMessageType, message?: string) {\n this.message = message;\n this.messageType = messageType;\n }\n\n public getMessageType(): StatementMessageType | undefined {\n return this.messageType;\n }\n public setMessageType(messageType: StatementMessageType): StatementMessage {\n this.messageType = messageType;\n return this;\n }\n public getMessage(): string | undefined {\n return this.message;\n }\n public setMessage(message: string): StatementMessage {\n this.message = message;\n return this;\n }\n\n public toString(): string {\n return `${this.messageType} : ${this.message}`;\n }\n}\n","import { Statement } from '../model/Statement';\nimport { GraphVertexType } from './graph/GraphVertexType';\nimport { StatementMessage } from './StatementMessage';\nimport { StatementMessageType } from './StatementMessageType';\n\n// @EqualsAndHashCode(exclude = { \"messages\", \"dependencies\" })\nexport class StatementExecution implements GraphVertexType<String> {\n private statement: Statement;\n private messages: StatementMessage[] = new Array();\n private dependencies: Set<string> = new Set();\n\n public constructor(statement: Statement) {\n this.statement = statement;\n }\n\n public getStatement(): Statement {\n return this.statement;\n }\n public setStatement(statement: Statement): StatementExecution {\n this.statement = statement;\n return this;\n }\n public getMessages(): StatementMessage[] {\n return this.messages;\n }\n public setMessages(messages: StatementMessage[]): StatementExecution {\n this.messages = messages;\n return this;\n }\n public getDependencies(): Set<string> {\n return this.dependencies;\n }\n public setDependencies(dependencies: Set<string>): StatementExecution {\n this.dependencies = dependencies;\n return this;\n }\n\n public getUniqueKey(): string {\n return this.statement.getStatementName();\n }\n\n public addMessage(type: StatementMessageType, message: string): void {\n this.messages.push(new StatementMessage(type, message));\n }\n\n public addDependency(dependency: string): void {\n this.dependencies.add(dependency);\n }\n\n public getDepenedencies(): Set<string> {\n return this.dependencies;\n }\n\n public equals(obj: Object): boolean {\n if (!(obj instanceof StatementExecution)) return false;\n\n let se: StatementExecution = obj as StatementExecution;\n\n return se.statement.equals(this.statement);\n }\n}\n","import { ContextElement } from '../ContextElement';\nimport { TokenValueExtractor } from '../expression/tokenextractor/TokenValueExtractor';\n\nexport class ContextTokenValueExtractor extends TokenValueExtractor {\n public static readonly PREFIX: string = 'Context.';\n\n private context: Map<string, ContextElement>;\n\n public constructor(context: Map<string, ContextElement>) {\n super();\n this.context = context;\n }\n\n protected getValueInternal(token: string): any {\n let parts: string[] = token.split(TokenValueExtractor.REGEX_DOT);\n\n let key: string = parts[1];\n let bIndex: number = key.indexOf('[');\n let fromIndex = 2;\n if (bIndex != -1) {\n key = parts[1].substring(0, bIndex);\n parts[1] = parts[1].substring(bIndex);\n fromIndex = 1;\n }\n\n return this.retrieveElementFrom(\n token,\n parts,\n fromIndex,\n this.context.get(key)?.getElement(),\n );\n }\n\n public getPrefix(): string {\n return ContextTokenValueExtractor.PREFIX;\n }\n}\n","import { TokenValueExtractor } from '../expression/tokenextractor/TokenValueExtractor';\n\nexport class OutputMapTokenValueExtractor extends TokenValueExtractor {\n public static readonly PREFIX: string = 'Steps.';\n\n private output: Map<string, Map<string, Map<string, any>>>;\n\n public constructor(output: Map<string, Map<string, Map<string, any>>>) {\n super();\n this.output = output;\n }\n\n protected getValueInternal(token: string): any {\n let parts: string[] = token.split(TokenValueExtractor.REGEX_DOT);\n\n let ind: number = 1;\n\n let events: Map<string, Map<string, any>> | undefined = this.output.get(parts[ind++]);\n if (!events || ind >= parts.length) return undefined;\n\n let eachEvent: Map<string, any> | undefined = events.get(parts[ind++]);\n if (!eachEvent || ind > parts.length) return undefined;\n if (ind === parts.length) return eachEvent;\n\n const bracket = parts[ind].indexOf('[');\n\n if (bracket === -1) {\n let element: any = eachEvent.get(parts[ind++]);\n return this.retrieveElementFrom(token, parts, ind, element);\n }\n\n const evParamName = parts[ind].substring(0, bracket);\n let element: any = eachEvent.get(evParamName);\n return this.retrieveElementFrom(token, parts, ind, { [evParamName]: element });\n }\n\n public getPrefix(): string {\n return OutputMapTokenValueExtractor.PREFIX;\n }\n}\n","import { TokenValueExtractor } from '../expression/tokenextractor/TokenValueExtractor';\n\nexport class ArgumentsTokenValueExtractor extends TokenValueExtractor {\n public static readonly PREFIX: string = 'Arguments.';\n\n private args: Map<string, any>;\n\n public constructor(args: Map<string, any>) {\n super();\n this.args = args;\n }\n\n protected getValueInternal(token: string): any {\n let parts: string[] = token.split(TokenValueExtractor.REGEX_DOT);\n\n let key: string = parts[1];\n let bIndex: number = key.indexOf('[');\n let fromIndex = 2;\n if (bIndex != -1) {\n key = parts[1].substring(0, bIndex);\n parts[1] = parts[1].substring(bIndex);\n fromIndex = 1;\n }\n return this.retrieveElementFrom(token, parts, fromIndex, this.args.get(key));\n }\n\n public getPrefix(): string {\n return ArgumentsTokenValueExtractor.PREFIX;\n }\n}\n","import { LinkedList } from '../../util/LinkedList';\nimport { GraphVertex } from './GraphVertex';\nimport { GraphVertexType } from './GraphVertexType';\n\nexport class ExecutionGraph<K, T extends GraphVertexType<K>> {\n private nodeMap: Map<K, GraphVertex<K, T>> = new Map();\n private isSubGrph: boolean;\n\n public constructor(isSubGrph: boolean = false) {\n this.isSubGrph = isSubGrph;\n }\n\n public getVerticesData(): T[] {\n return Array.from(this.nodeMap.values()).map((e) => e.getData());\n }\n\n public addVertex(data: T): GraphVertex<K, T> {\n if (!this.nodeMap.has(data.getUniqueKey())) {\n let t = new GraphVertex(this, data);\n this.nodeMap.set(data.getUniqueKey(), t);\n }\n return this.nodeMap.get(data.getUniqueKey())!;\n }\n\n public getVertex(key: K): GraphVertex<K, T> | undefined {\n return this.nodeMap.get(key);\n }\n\n public getVertexData(key: K): T | undefined {\n if (this.nodeMap.has(key)) return this.nodeMap.get(key)!.getData();\n return undefined;\n }\n\n public getVerticesWithNoIncomingEdges(): GraphVertex<K, T>[] {\n return Array.from(this.nodeMap.values()).filter((e) => !e.hasIncomingEdges());\n }\n\n public isCyclic(): boolean {\n let list: LinkedList<GraphVertex<K, T>> = new LinkedList(\n this.getVerticesWithNoIncomingEdges(),\n );\n let visited: Set<K> = new Set();\n\n let vertex: GraphVertex<K, T>;\n while (!list.isEmpty()) {\n if (visited.has(list.getFirst().getKey())) return true;\n\n vertex = list.removeFirst();\n\n visited.add(vertex.getKey());\n if (vertex.hasOutgoingEdges())\n list.addAll(\n Array.from(vertex.getOutVertices().values()).flatMap((e) => Array.from(e)),\n );\n }\n\n return false;\n }\n\n public addVertices(values: T[]): void {\n for (const value of values) this.addVertex(value);\n }\n\n public getNodeMap(): Map<K, GraphVertex<K, T>> {\n return this.nodeMap;\n }\n\n public isSubGraph(): boolean {\n return this.isSubGrph;\n }\n\n public toString(): string {\n return (\n 'Execution Graph : \\n' +\n Array.from(this.nodeMap.values())\n\n .map((e) => e.toString())\n .join('\\n')\n );\n }\n}\n","import { LinkedList } from '../../util/LinkedList';\nimport { Tuple2 } from '../../util/Tuples';\nimport { ExecutionGraph } from './ExecutionGraph';\nimport { GraphVertexType } from './GraphVertexType';\n\nexport class GraphVertex<K, T extends GraphVertexType<K>> {\n private data: T;\n private outVertices: Map<string, Set<GraphVertex<K, T>>> = new Map();\n private inVertices: Set<Tuple2<GraphVertex<K, T>, string>> = new Set();\n private graph: ExecutionGraph<K, T>;\n\n public constructor(graph: ExecutionGraph<K, T>, data: T) {\n this.data = data;\n this.graph = graph;\n }\n\n public getData(): T {\n return this.data;\n }\n public setData(data: T): GraphVertex<K, T> {\n this.data = data;\n return this;\n }\n public getOutVertices(): Map<string, Set<GraphVertex<K, T>>> {\n return this.outVertices;\n }\n public setOutVertices(outVertices: Map<string, Set<GraphVertex<K, T>>>): GraphVertex<K, T> {\n this.outVertices = outVertices;\n return this;\n }\n public getInVertices(): Set<Tuple2<GraphVertex<K, T>, string>> {\n return this.inVertices;\n }\n public setInVertices(inVertices: Set<Tuple2<GraphVertex<K, T>, string>>): GraphVertex<K, T> {\n this.inVertices = inVertices;\n return this;\n }\n public getGraph(): ExecutionGraph<K, T> {\n return this.graph;\n }\n public setGraph(graph: ExecutionGraph<K, T>): GraphVertex<K, T> {\n this.graph = graph;\n return this;\n }\n\n public getKey(): K {\n return this.data.getUniqueKey();\n }\n\n // public addOutEdgeTo(type: string, data:T) :GraphVertex<K, T> {\n // \treturn this.addOutEdgeTo(type, this.graph.addVertex(data));\n // }\n\n // public GraphVertex<K, T> addInEdgeTo(T data, String type) {\n // \treturn this.addInEdgeTo(this.graph.addVertex(data), type);\n // }\n\n public addOutEdgeTo(type: string, vertex: GraphVertex<K, T>): GraphVertex<K, T> {\n if (!this.outVertices.has(type)) this.outVertices.set(type, new Set());\n this.outVertices.get(type)!.add(vertex);\n vertex.inVertices.add(new Tuple2(this, type));\n return vertex;\n }\n\n public addInEdgeTo(vertex: GraphVertex<K, T>, type: string): GraphVertex<K, T> {\n this.inVertices.add(new Tuple2(vertex, type));\n if (!vertex.outVertices.has(type)) vertex.outVertices.set(type, new Set());\n vertex.outVertices.get(type)!.add(this);\n return vertex;\n }\n\n public hasIncomingEdges(): boolean {\n return !!this.inVertices.size;\n }\n\n public hasOutgoingEdges(): boolean {\n return !!this.outVertices.size;\n }\n\n public getSubGraphOfType(type: string): ExecutionGraph<K, T> {\n let subGraph: ExecutionGraph<K, T> = new ExecutionGraph(true);\n\n var typeVertices = new LinkedList(Array.from(this.outVertices.get(type) ?? []));\n\n typeVertices.map((e) => e.getData()).forEach((e) => subGraph.addVertex(e));\n\n while (!typeVertices.isEmpty()) {\n var vertex = typeVertices.pop();\n Array.from(vertex.outVertices.values())\n .flatMap((e) => Array.from(e))\n .forEach((e) => {\n subGraph.addVertex(e.getData());\n typeVertices.add(e);\n });\n }\n\n return subGraph;\n }\n\n public toString(): string {\n var ins = Array.from(this.getInVertices())\n .map((e) => e.getT1().getKey() + '(' + e.getT2() + ')')\n .join(', ');\n\n var outs = Array.from(this.outVertices.entries())\n .map(\n ([key, value]) =>\n key +\n ': ' +\n Array.from(value)\n .map((e) => e.getKey())\n .join(','),\n )\n .join('\\n\\t\\t');\n\n return this.getKey() + ':\\n\\tIn: ' + ins + '\\n\\tOut: \\n\\t\\t' + outs;\n }\n}\n","export class JsonExpression {\n private expression: string;\n\n public constructor(expression: string) {\n this.expression = expression;\n }\n\n public getExpression(): string {\n return this.expression;\n }\n}\n","export enum ParameterReferenceType {\n VALUE = 'VALUE',\n EXPRESSION = 'EXPRESSION',\n}\n","export default function UUID() {\n var dt = new Date().getTime();\n var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n var r = (dt + Math.random() * 16) % 16 | 0;\n dt = Math.floor(dt / 16);\n return (c == 'x' ? r : (r & 0x3) | 0x8).toString(16);\n });\n return uuid;\n}\n","import { Function } from '../function/Function';\nimport { Schema } from '../json/schema/Schema';\nimport { Repository } from '../Repository';\nimport UUID from '../util/UUID';\nimport { ContextElement } from './ContextElement';\nimport { TokenValueExtractor } from './expression/tokenextractor/TokenValueExtractor';\nimport { StatementExecution } from './StatementExecution';\nimport { ContextTokenValueExtractor } from './tokenextractor/ContextTokenValueExtractor';\nimport { OutputMapTokenValueExtractor } from './tokenextractor/OutputMapTokenValueExtractor';\n\nexport class FunctionExecutionParameters {\n private context?: Map<string, ContextElement>;\n private args?: Map<string, any>;\n private events?: Map<string, Map<string, any>[]>;\n private statementExecution?: StatementExecution;\n private steps?: Map<string, Map<string, Map<string, any>>>;\n private count: number = 0;\n private functionRepository: Repository<Function>;\n private schemaRepository: Repository<Schema>;\n private executionId: string;\n private executionContext: Map<string, any> = new Map();\n\n private valueExtractors: Map<string, TokenValueExtractor> = new Map();\n\n public constructor(\n functionRepository: Repository<Function>,\n schemaRepository: Repository<Schema>,\n executionId?: string,\n ) {\n this.functionRepository = functionRepository;\n this.schemaRepository = schemaRepository;\n this.executionId = executionId ?? UUID();\n }\n\n public getExecutionId(): string {\n return this.executionId;\n }\n\n public getContext(): Map<string, ContextElement> | undefined {\n return this.context;\n }\n public setContext(context: Map<string, ContextElement>): FunctionExecutionParameters {\n this.context = context;\n let x: TokenValueExtractor = new ContextTokenValueExtractor(context);\n this.valueExtractors.set(x.getPrefix(), x);\n return this;\n }\n public getArguments(): Map<string, any> | undefined {\n return this.args;\n }\n public setArguments(args: Map<string, any>): FunctionExecutionParameters {\n this.args = args;\n return this;\n }\n\n public getEvents(): Map<string, Map<string, any>[]> | undefined {\n return this.events;\n }\n public setEvents(events: Map<string, Map<string, any>[]>): FunctionExecutionParameters {\n this.events = events;\n return this;\n }\n public getStatementExecution(): StatementExecution | undefined {\n return this.statementExecution;\n }\n public setStatementExecution(\n statementExecution: StatementExecution,\n ): FunctionExecutionParameters {\n this.statementExecution = statementExecution;\n return this;\n }\n public getSteps(): Map<string, Map<string, Map<string, any>>> | undefined {\n return this.steps;\n }\n public setSteps(\n steps: Map<string, Map<string, Map<string, any>>>,\n ): FunctionExecutionParameters {\n this.steps = steps;\n let x: TokenValueExtractor = new OutputMapTokenValueExtractor(steps);\n this.valueExtractors.set(x.getPrefix(), x);\n return this;\n }\n public getCount(): number {\n return this.count;\n }\n public setCount(count: number): FunctionExecutionParameters {\n this.count = count;\n return this;\n }\n\n public getValuesMap(): Map<string, TokenValueExtractor> {\n return this.valueExtractors;\n }\n\n public getFunctionRepository(): Repository<Function> {\n return this.functionRepository;\n }\n public setFunctionRepository(\n functionRepository: Repository<Function>,\n ): FunctionExecutionParameters {\n this.functionRepository = functionRepository;\n return this;\n }\n public getSchemaRepository(): Repository<Schema> {\n return this.schemaRepository;\n }\n public setSchemaRepository(schemaRepository: Repository<Schema>): FunctionExecutionParameters {\n this.schemaRepository = schemaRepository;\n return this;\n }\n\n public addTokenValueExtractor(\n ...extractors: TokenValueExtractor[]\n ): FunctionExecutionParameters {\n for (const tve of extractors) this.valueExtractors.set(tve.getPrefix(), tve);\n return this;\n }\n\n public setValuesMap(valuesMap: Map<string, TokenValueExtractor>): FunctionExecutionParameters {\n for (const [k, v] of valuesMap.entries()) this.valueExtractors.set(k, v);\n\n return this;\n }\n\n public setExecutionContext(executionContext: Map<string, any>): FunctionExecutionParameters {\n this.executionContext = executionContext;\n return this;\n }\n\n public getExecutionContext(): Map<string, any> {\n return this.executionContext;\n }\n}\n","export enum StatementMessageType {\n ERROR = 'ERROR',\n WARNING = 'WARNING',\n MESSAGE = 'MESSAGE',\n}\n","import { KIRuntimeException } from '../exception/KIRuntimeException';\nimport { AbstractFunction } from '../function/AbstractFunction';\nimport { Function } from '../function/Function';\nimport { Repository } from '../Repository';\nimport { JsonExpression } from '../json/JsonExpression';\nimport { Schema } from '../json/schema/Schema';\nimport { SchemaUtil } from '../json/schema/SchemaUtil';\nimport { Event } from '../model/Event';\nimport { EventResult } from '../model/EventResult';\nimport { FunctionDefinition } from '../model/FunctionDefinition';\nimport { FunctionOutput } from '../model/FunctionOutput';\nimport { FunctionSignature } from '../model/FunctionSignature';\nimport { Parameter } from '../model/Parameter';\nimport { ParameterReference } from '../model/ParameterReference';\nimport { ParameterReferenceType } from '../model/ParameterReferenceType';\nimport { Statement } from '../model/Statement';\nimport { LinkedList } from '../util/LinkedList';\nimport { StringFormatter } from '../util/string/StringFormatter';\nimport { StringUtil } from '../util/string/StringUtil';\nimport { Tuple4, Tuple2 } from '../util/Tuples';\nimport { ContextElement } from './ContextElement';\nimport { ExpressionEvaluator } from './expression/ExpressionEvaluator';\nimport { FunctionExecutionParameters } from './FunctionExecutionParameters';\nimport { ExecutionGraph } from './graph/ExecutionGraph';\nimport { GraphVertex } from './graph/GraphVertex';\nimport { StatementExecution } from './StatementExecution';\nimport { StatementMessageType } from './StatementMessageType';\nimport { isNullValue } from '../util/NullCheck';\nimport { SchemaType } from '../json/schema/type/SchemaType';\nimport { ArraySchemaType } from '../json/schema/array/ArraySchemaType';\nimport { ArgumentsTokenValueExtractor } from './tokenextractor/ArgumentsTokenValueExtractor';\nimport { OutputMapTokenValueExtractor } from './tokenextractor/OutputMapTokenValueExtractor';\nimport { ContextTokenValueExtractor } from './tokenextractor/ContextTokenValueExtractor';\n\nexport class KIRuntime extends AbstractFunction {\n private static readonly PARAMETER_NEEDS_A_VALUE: string = 'Parameter \"$\" needs a value';\n\n private static readonly STEP_REGEX_PATTERN: RegExp = new RegExp(\n 'Steps\\\\.([a-zA-Z0-9\\\\\\\\-]{1,})\\\\.([a-zA-Z0-9\\\\\\\\-]{1,})',\n 'g',\n );\n\n private static readonly VERSION: number = 1;\n\n private static readonly MAX_EXECUTION_ITERATIONS: number = 10000000;\n\n private fd: FunctionDefinition;\n\n private debugMode: boolean = false;\n\n public constructor(fd: FunctionDefinition, debugMode: boolean = false) {\n super();\n this.debugMode = debugMode;\n this.fd = fd;\n if (this.fd.getVersion() > KIRuntime.VERSION) {\n throw new KIRuntimeException(\n 'Runtime is at a lower version ' +\n KIRuntime.VERSION +\n ' and trying to run code from version ' +\n this.fd.getVersion() +\n '.',\n );\n }\n }\n\n public getSignature(): FunctionSignature {\n return this.fd;\n }\n\n public async getExecutionPlan(\n fRepo: Repository<Function>,\n sRepo: Repository<Schema>,\n ): Promise<ExecutionGraph<string, StatementExecution>> {\n let g: ExecutionGraph<string, StatementExecution> = new ExecutionGraph();\n for (let s of Array.from(this.fd.getSteps().values()))\n g.addVertex(this.prepareStatementExecution(s, fRepo, sRepo));\n\n let unresolved = this.makeEdges(g);\n\n Array.from(unresolved.getT2().entries()).forEach((e) => {\n let ex = g.getNodeMap().get(e[0])?.getData();\n if (!ex) return;\n ex.addMessage(StatementMessageType.ERROR, e[1]);\n });\n\n return g;\n }\n\n protected async internalExecute(\n inContext: FunctionExecutionParameters,\n ): Promise<FunctionOutput> {\n if (!inContext.getContext()) inContext.setContext(new Map());\n\n if (!inContext.getEvents()) inContext.setEvents(new Map());\n\n if (!inContext.getSteps()) inContext.setSteps(new Map());\n\n if (inContext.getArguments()) {\n inContext.addTokenValueExtractor(\n new ArgumentsTokenValueExtractor(inContext.getArguments()!),\n );\n }\n\n if (this.debugMode) {\n console.log(\n `EID: ${inContext.getExecutionId()} Executing: ${this.fd.getNamespace()}.${this.fd.getName()}`,\n );\n console.log(`EID: ${inContext.getExecutionId()} Parameters: `, inContext);\n }\n\n let eGraph: ExecutionGraph<string, StatementExecution> = await this.getExecutionPlan(\n inContext.getFunctionRepository(),\n inContext.getSchemaRepository(),\n );\n\n if (this.debugMode) {\n console.log(`EID: ${inContext.getExecutionId()} ${eGraph?.toString()}`);\n }\n\n // if (logger.isDebugEnabled()) {\n // \tlogger.debug(StringFormatter.format(\"Executing : $.$\", this.fd.getNamespace(), this.fd.getName()));\n // \tlogger.debug(eGraph.toString());\n // }\n\n let messages: string[] = eGraph\n .getVerticesData()\n .filter((e) => e.getMessages().length)\n .map((e) => e.getStatement().getStatementName() + ': \\n' + e.getMessages().join(','));\n\n if (messages?.length) {\n throw new KIRuntimeException(\n 'Please fix the errors in the function definition before execution : \\n' +\n messages.join(',\\n'),\n );\n }\n\n return await this.executeGraph(eGraph, inContext);\n }\n\n private async executeGraph(\n eGraph: ExecutionGraph<string, StatementExecution>,\n inContext: FunctionExecutionParameters,\n ): Promise<FunctionOutput> {\n let executionQue: LinkedList<GraphVertex<string, StatementExecution>> = new LinkedList();\n executionQue.addAll(eGraph.getVerticesWithNoIncomingEdges());\n\n let branchQue: LinkedList<\n Tuple4<\n ExecutionGraph<string, StatementExecution>,\n Tuple2<string, string>[],\n FunctionOutput,\n GraphVertex<string, StatementExecution>\n >\n > = new LinkedList();\n\n while (\n (!executionQue.isEmpty() || !branchQue.isEmpty()) &&\n !inContext.getEvents()?.has(Event.OUTPUT)\n ) {\n await this.processBranchQue(inContext, executionQue, branchQue);\n await this.processExecutionQue(inContext, executionQue, branchQue);\n\n inContext.setCount(inContext.getCount() + 1);\n\n if (inContext.getCount() == KIRuntime.MAX_EXECUTION_ITERATIONS)\n throw new KIRuntimeException('Execution locked in an infinite loop');\n }\n\n if (!eGraph.isSubGraph() && !inContext.getEvents()?.size) {\n const eventMap = this.getSignature().getEvents();\n if (eventMap.size && eventMap.get(Event.OUTPUT)?.getParameters()?.size)\n throw new KIRuntimeException('No events raised');\n }\n\n const er: EventResult[] = Array.from(inContext.getEvents()?.entries() ?? []).flatMap((e) =>\n e[1].map((v) => EventResult.of(e[0], v)),\n );\n\n if (er.length || eGraph.isSubGraph()) return new FunctionOutput(er);\n else return new FunctionOutput([EventResult.of(Event.OUTPUT, new Map<string, any>())]);\n }\n\n private async processExecutionQue(\n inContext: FunctionExecutionParameters,\n executionQue: LinkedList<GraphVertex<string, StatementExecution>>,\n branchQue: LinkedList<\n Tuple4<\n ExecutionGraph<string, StatementExecution>,\n Tuple2<string, string>[],\n FunctionOutput,\n GraphVertex<string, StatementExecution>\n >\n >,\n ) {\n if (!executionQue.isEmpty()) {\n let vertex: GraphVertex<string, StatementExecution> = executionQue.pop();\n\n if (!(await this.allDependenciesResolvedVertex(vertex, inContext.getSteps()!)))\n executionQue.add(vertex);\n else\n await this.executeVertex(\n vertex,\n inContext,\n branchQue,\n executionQue,\n inContext.getFunctionRepository(),\n );\n }\n }\n\n private async processBranchQue(\n inContext: FunctionExecutionParameters,\n executionQue: LinkedList<GraphVertex<string, StatementExecution>>,\n branchQue: LinkedList<\n Tuple4<\n ExecutionGraph<string, StatementExecution>,\n Tuple2<string, string>[],\n FunctionOutput,\n GraphVertex<string, StatementExecution>\n >\n >,\n ) {\n if (branchQue.length) {\n let branch: Tuple4<\n ExecutionGraph<string, StatementExecution>,\n Tuple2<string, string>[],\n FunctionOutput,\n GraphVertex<string, StatementExecution>\n > = branchQue.pop();\n\n if (!(await this.allDependenciesResolvedTuples(branch.getT2(), inContext.getSteps()!)))\n branchQue.add(branch);\n else await this.executeBranch(inContext, executionQue, branch);\n }\n }\n\n private async executeBranch(\n inContext: FunctionExecutionParameters,\n executionQue: LinkedList<GraphVertex<string, StatementExecution>>,\n branch: Tuple4<\n ExecutionGraph<string, StatementExecution>,\n Tuple2<string, string>[],\n FunctionOutput,\n GraphVertex<string, StatementExecution>\n >,\n ) {\n let vertex: GraphVertex<string, StatementExecution> = branch.getT4();\n let nextOutput: EventResult | undefined = undefined;\n\n do {\n await this.executeGraph(branch.getT1(), inContext);\n nextOutput = branch.getT3().next();\n\n if (nextOutput) {\n if (!inContext.getSteps()?.has(vertex.getData().getStatement().getStatementName()))\n inContext\n .getSteps()\n ?.set(vertex.getData().getStatement().getStatementName(), new Map());\n\n inContext\n .getSteps()\n ?.get(vertex.getData().getStatement().getStatementName())\n ?.set(\n nextOutput.getName(),\n this.resolveInternalExpressions(nextOutput.getResult(), inContext),\n );\n\n if (this.debugMode) {\n const s = vertex.getData().getStatement();\n console.log(\n `EID: ${inContext.getExecutionId()} Step : ${s.getStatementName()} => ${s.getNamespace()}.${s.getName()}`,\n );\n console.log(\n `EID: ${inContext.getExecutionId()} Event : ${nextOutput.getName()} : `,\n inContext.getSteps()!.get(s.getStatementName())!.get(nextOutput.getName()),\n );\n }\n }\n } while (nextOutput && nextOutput.getName() != Event.OUTPUT);\n\n if (nextOutput?.getName() == Event.OUTPUT && vertex.getOutVertices().has(Event.OUTPUT)) {\n (vertex?.getOutVertices()?.get(Event.OUTPUT) ?? []).forEach(async (e) => {\n if (await this.allDependenciesResolvedVertex(e, inContext.getSteps()!))\n executionQue.add(e);\n });\n }\n }\n\n private async executeVertex(\n vertex: GraphVertex<string, StatementExecution>,\n inContext: FunctionExecutionParameters,\n branchQue: LinkedList<\n Tuple4<\n ExecutionGraph<string, StatementExecution>,\n Tuple2<string, string>[],\n FunctionOutput,\n GraphVertex<string, StatementExecution>\n >\n >,\n executionQue: LinkedList<GraphVertex<string, StatementExecution>>,\n fRepo: Repository<Function>,\n ) {\n let s: Statement = vertex.getData().getStatement();\n\n if (s.getExecuteIftrue().size) {\n const allTrue = (Array.from(s.getExecuteIftrue().entries()) ?? [])\n .filter((e) => e[1])\n .map(([e]) => {\n const v = new ExpressionEvaluator(e).evaluate(inContext.getValuesMap());\n return v;\n })\n .every((e) => !isNullValue(e) && e !== false);\n\n if (!allTrue) return;\n }\n\n let fun: Function | undefined = fRepo.find(s.getNamespace(), s.getName());\n\n if (!fun) {\n throw new KIRuntimeException(\n StringFormatter.format('$.$ function is not found.', s.getNamespace(), s.getName()),\n );\n }\n\n let paramSet: Map<string, Parameter> | undefined = fun?.getSignature().getParameters();\n\n let args: Map<string, any> = this.getArgumentsFromParametersMap(\n inContext,\n s,\n paramSet ?? new Map(),\n );\n\n if (this.debugMode) {\n console.log(\n `EID: ${inContext.getExecutionId()} Step : ${s.getStatementName()} => ${s.getNamespace()}.${s.getName()}`,\n );\n console.log(`EID: ${inContext.getExecutionId()} Arguments : `, args);\n }\n\n let context: Map<string, ContextElement> = inContext.getContext()!;\n let fep: FunctionExecutionParameters;\n\n if (fun instanceof KIRuntime) {\n fep = new FunctionExecutionParameters(\n inContext.getFunctionRepository(),\n inContext.getSchemaRepository(),\n `${inContext.getExecutionId()}_${s.getStatementName()}`,\n )\n .setArguments(args)\n .setValuesMap(\n new Map(\n Array.from(inContext.getValuesMap().values())\n .filter(\n (e) =>\n e.getPrefix() !== ArgumentsTokenValueExtractor.PREFIX &&\n e.getPrefix() !== OutputMapTokenValueExtractor.PREFIX &&\n e.getPrefix() !== ContextTokenValueExtractor.PREFIX,\n )\n .map((e) => [e.getPrefix(), e]),\n ),\n );\n } else {\n fep = new FunctionExecutionParameters(\n inContext.getFunctionRepository(),\n inContext.getSchemaRepository(),\n inContext.getExecutionId(),\n )\n .setValuesMap(inContext.getValuesMap())\n .setContext(context)\n .setArguments(args)\n .setEvents(inContext.getEvents()!)\n .setSteps(inContext.getSteps()!)\n .setStatementExecution(vertex.getData())\n .setCount(inContext.getCount())\n .setExecutionContext(inContext.getExecutionContext());\n }\n\n let result: FunctionOutput = await fun.execute(fep);\n\n let er: EventResult | undefined = result.next();\n\n if (!er)\n throw new KIRuntimeException(\n StringFormatter.format('Executing $ returned no events', s.getStatementName()),\n );\n\n let isOutput: boolean = er.getName() == Event.OUTPUT;\n\n if (!inContext.getSteps()?.has(s.getStatementName())) {\n inContext.getSteps()!.set(s.getStatementName(), new Map());\n }\n\n inContext\n .getSteps()!\n .get(s.getStatementName())!\n .set(er.getName(), this.resolveInternalExpressions(er.getResult(), inContext));\n\n if (this.debugMode) {\n console.log(\n `EID: ${inContext.getExecutionId()} Step : ${s.getStatementName()} => ${s.getNamespace()}.${s.getName()}`,\n );\n console.log(\n `EID: ${inContext.getExecutionId()} Event : ${er.getName()} : `,\n inContext.getSteps()!.get(s.getStatementName())!.get(er.getName()),\n );\n }\n\n if (!isOutput) {\n let subGraph = vertex.getSubGraphOfType(er.getName());\n let unResolvedDependencies: Tuple2<string, string>[] = this.makeEdges(subGraph).getT1();\n branchQue.push(new Tuple4(subGraph, unResolvedDependencies, result, vertex));\n } else {\n let out: Set<GraphVertex<string, StatementExecution>> | undefined = vertex\n .getOutVertices()\n .get(Event.OUTPUT);\n if (out)\n out.forEach(async (e) => {\n if (await this.allDependenciesResolvedVertex(e, inContext.getSteps()!))\n executionQue.add(e);\n });\n }\n }\n\n private resolveInternalExpressions(\n result: Map<string, any>,\n inContext: FunctionExecutionParameters,\n ): Map<string, any> {\n if (!result) return result;\n\n return Array.from(result.entries())\n .map((e) => new Tuple2(e[0], this.resolveInternalExpression(e[1], inContext)))\n .reduce((a, c) => {\n a.set(c.getT1(), c.getT2());\n return a;\n }, new Map());\n }\n\n private resolveInternalExpression(value: any, inContext: FunctionExecutionParameters): any {\n if (isNullValue(value) || typeof value != 'object') return value;\n\n if (value instanceof JsonExpression) {\n let exp: ExpressionEvaluator = new ExpressionEvaluator(\n (value as JsonExpression).getExpression(),\n );\n return exp.evaluate(inContext.getValuesMap());\n }\n\n if (Array.isArray(value)) {\n let retArray: any[] = [];\n\n for (let obj of value) {\n retArray.push(this.resolveInternalExpression(obj, inContext));\n }\n\n return retArray;\n }\n\n if (typeof value === 'object') {\n let retObject: any = {};\n\n for (let entry of Object.entries(value)) {\n retObject[entry[0]] = this.resolveInternalExpression(entry[1], inContext);\n }\n\n return retObject;\n }\n\n return undefined;\n }\n\n private allDependenciesResolvedTuples(\n unResolvedDependencies: Tuple2<string, string>[],\n output: Map<string, Map<string, Map<string, any>>>,\n ): boolean {\n for (let tup of unResolvedDependencies) {\n if (!output.has(tup.getT1())) return false;\n if (!output.get(tup.getT1())?.get(tup.getT2())) return false;\n }\n\n return true;\n }\n\n private allDependenciesResolvedVertex(\n vertex: GraphVertex<string, StatementExecution>,\n output: Map<string, Map<string, Map<string, any>>>,\n ): boolean {\n if (!vertex.getInVertices().size) return true;\n\n return (\n Array.from(vertex.getInVertices()).filter((e) => {\n let stepName: string = e.getT1().getData().getStatement().getStatementName();\n let type: string = e.getT2();\n\n return !(output.has(stepName) && output.get(stepName)?.has(type));\n }).length == 0\n );\n }\n\n private getArgumentsFromParametersMap(\n inContext: FunctionExecutionParameters,\n s: Statement,\n paramSet: Map<string, Parameter>,\n ): Map<string, any> {\n return Array.from(s.getParameterMap().entries())\n .map((e) => {\n let prList: ParameterReference[] = Array.from(e[1]?.values() ?? []);\n\n let ret: any = undefined;\n\n if (!prList?.length) return new Tuple2(e[0], ret);\n\n let pDef: Parameter | undefined = paramSet.get(e[0]);\n\n if (!pDef) return new Tuple2(e[0], undefined);\n\n if (pDef.isVariableArgument()) {\n ret = prList\n .sort((a, b) => (a.getOrder() ?? 0) - (b.getOrder() ?? 0))\n .filter((r) => !isNullValue(r))\n .map((r) => this.parameterReferenceEvaluation(inContext, r))\n .flatMap((r) => (Array.isArray(r) ? r : [r]));\n } else {\n ret = this.parameterReferenceEvaluation(inContext, prList[0]);\n }\n\n return new Tuple2(e[0], ret);\n })\n .filter((e) => !isNullValue(e.getT2()))\n .reduce((a, c) => {\n a.set(c.getT1(), c.getT2());\n return a;\n }, new Map());\n }\n\n private parameterReferenceEvaluation(\n inContext: FunctionExecutionParameters,\n ref: ParameterReference,\n ): any {\n let ret: any = undefined;\n\n if (ref.getType() == ParameterReferenceType.VALUE) {\n ret = this.resolveInternalExpression(ref.getValue(), inContext);\n } else if (\n ref.getType() == ParameterReferenceType.EXPRESSION &&\n !StringUtil.isNullOrBlank(ref.getExpression())\n ) {\n let exp: ExpressionEvaluator = new ExpressionEvaluator(ref.getExpression() ?? '');\n ret = exp.evaluate(inContext.getValuesMap());\n }\n return ret;\n }\n\n private prepareStatementExecution(\n s: Statement,\n fRepo: Repository<Function>,\n sRepo: Repository<Schema>,\n ): StatementExecution {\n let se: StatementExecution = new StatementExecution(s);\n\n let fun: Function | undefined = fRepo.find(s.getNamespace(), s.getName());\n\n if (!fun) {\n se.addMessage(\n StatementMessageType.ERROR,\n StringFormatter.format('$.$ is not available', s.getNamespace(), s.getName()),\n );\n return se;\n }\n\n let paramSet: Map<string, Parameter> = new Map(fun.getSignature().getParameters());\n if (!s.getParameterMap()) return se;\n for (let param of Array.from(s.getParameterMap().entries())) {\n let p: Parameter | undefined = paramSet.get(param[0]);\n if (!p) continue;\n\n let refList: ParameterReference[] = Array.from(param[1]?.values() ?? []);\n\n if (!refList.length && !p.isVariableArgument()) {\n if (!SchemaUtil.hasDefaultValueOrNullSchemaType(p.getSchema(), sRepo))\n se.addMessage(\n StatementMessageType.ERROR,\n StringFormatter.format(\n KIRuntime.PARAMETER_NEEDS_A_VALUE,\n p.getParameterName(),\n ),\n );\n paramSet.delete(p.getParameterName());\n continue;\n }\n\n if (p.isVariableArgument()) {\n refList.sort((a, b) => (a.getOrder() ?? 0) - (b.getOrder() ?? 0));\n for (let ref of refList) this.parameterReferenceValidation(se, p, ref, sRepo);\n } else if (refList.length) {\n let ref: ParameterReference = refList[0];\n this.parameterReferenceValidation(se, p, ref, sRepo);\n }\n\n paramSet.delete(p.getParameterName());\n }\n\n if (!isNullValue(se.getStatement().getDependentStatements())) {\n for (let statement of se.getStatement().getDependentStatements().entries())\n if (statement[1]) se.addDependency(statement[0]);\n }\n\n if (!isNullValue(se.getStatement().getExecuteIftrue())) {\n for (let statement of se.getStatement().getExecuteIftrue().entries())\n if (statement[1]) this.addDependencies(se, statement[0]);\n }\n\n if (paramSet.size) {\n for (let param of Array.from(paramSet.values())) {\n if (param.isVariableArgument()) continue;\n if (!SchemaUtil.hasDefaultValueOrNullSchemaType(param.getSchema(), sRepo))\n se.addMessage(\n StatementMessageType.ERROR,\n StringFormatter.format(\n KIRuntime.PARAMETER_NEEDS_A_VALUE,\n param.getParameterName(),\n ),\n );\n }\n }\n\n return se;\n }\n\n private parameterReferenceValidation(\n se: StatementExecution,\n p: Parameter,\n ref: ParameterReference,\n sRepo: Repository<Schema>,\n ): void {\n // Breaking this execution doesn't make sense.\n\n if (!ref) {\n if (isNullValue(SchemaUtil.getDefaultValue(p.getSchema(), sRepo)))\n se.addMessage(\n StatementMessageType.ERROR,\n StringFormatter.format(KIRuntime.PARAMETER_NEEDS_A_VALUE, p.getParameterName()),\n );\n } else if (ref.getType() == ParameterReferenceType.VALUE) {\n if (\n isNullValue(ref.getValue()) &&\n !SchemaUtil.hasDefaultValueOrNullSchemaType(p.getSchema(), sRepo)\n )\n se.addMessage(\n StatementMessageType.ERROR,\n StringFormatter.format(KIRuntime.PARAMETER_NEEDS_A_VALUE, p.getParameterName()),\n );\n\n if (isNullValue(ref.getValue())) return;\n\n let paramElements: LinkedList<Tuple2<Schema, any>> = new LinkedList();\n paramElements.push(new Tuple2(p.getSchema(), ref.getValue()));\n\n while (!paramElements.isEmpty()) {\n let e: Tuple2<Schema, any> = paramElements.pop();\n\n if (e.getT2() instanceof JsonExpression) {\n this.addDependencies(se, (e.getT2() as JsonExpression).getExpression());\n } else {\n if (isNullValue(e.getT1()) || isNullValue(e.getT1().getType())) continue;\n\n if (\n e.getT1().getType()?.contains(SchemaType.ARRAY) &&\n Array.isArray(e.getT2())\n ) {\n let ast: ArraySchemaType | undefined = e.getT1().getItems();\n if (!ast) {\n continue;\n }\n if (ast.isSingleType()) {\n for (let je of e.getT2())\n paramElements.push(new Tuple2(ast.getSingleSchema()!, je));\n } else {\n let array: any[] = e.getT2() as any[];\n for (let i = 0; i < array.length; i++) {\n paramElements.push(new Tuple2(ast.getTupleSchema()![i], array[i]));\n }\n }\n } else if (\n e.getT1().getType()?.contains(SchemaType.OBJECT) &&\n typeof e.getT2() == 'object'\n ) {\n let sch: Schema = e.getT1();\n\n if (\n sch.getName() === Parameter.EXPRESSION.getName() &&\n sch.getNamespace() === Parameter.EXPRESSION.getNamespace()\n ) {\n let obj = e.getT2();\n let isExpression: boolean = obj['isExpression'];\n if (isExpression) {\n this.addDependencies(se, obj['value']);\n }\n } else {\n if (sch.getProperties()) {\n for (let entry of Object.entries(e.getT2())) {\n if (!sch.getProperties()!.has(entry[0])) continue;\n paramElements.push(\n new Tuple2(sch.getProperties()!.get(entry[0])!, entry[1]),\n );\n }\n }\n }\n }\n }\n }\n } else if (ref.getType() == ParameterReferenceType.EXPRESSION) {\n if (StringUtil.isNullOrBlank(ref.getExpression())) {\n if (isNullValue(SchemaUtil.getDefaultValue(p.getSchema(), sRepo)))\n se.addMessage(\n StatementMessageType.ERROR,\n StringFormatter.format(\n KIRuntime.PARAMETER_NEEDS_A_VALUE,\n p.getParameterName(),\n ),\n );\n } else {\n try {\n // TODO: Type check for the resulting expression has to be done here...\n this.addDependencies(se, ref.getExpression());\n } catch (err) {\n se.addMessage(\n StatementMessageType.ERROR,\n StringFormatter.format('Error evaluating $ : $', ref.getExpression(), err),\n );\n }\n }\n }\n }\n\n private addDependencies(se: StatementExecution, expression: string | undefined): void {\n if (!expression) return;\n\n Array.from(expression.match(KIRuntime.STEP_REGEX_PATTERN) ?? []).forEach((e) =>\n se.addDependency(e),\n );\n }\n\n public makeEdges(\n graph: ExecutionGraph<string, StatementExecution>,\n ): Tuple2<Tuple2<string, string>[], Map<string, string>> {\n let values = graph.getNodeMap().values();\n\n let retValue: Tuple2<string, string>[] = [];\n let retMap: Map<string, string> = new Map();\n\n for (let e of Array.from(values)) {\n for (let d of e.getData().getDependencies()) {\n let secondDot: number = d.indexOf('.', 6);\n let step: string = d.substring(6, secondDot);\n let eventDot: number = d.indexOf('.', secondDot + 1);\n let event: string =\n eventDot == -1\n ? d.substring(secondDot + 1)\n : d.substring(secondDot + 1, eventDot);\n\n if (!graph.getNodeMap().has(step)) {\n retValue.push(new Tuple2(step, event));\n retMap.set(\n e.getData().getStatement().getStatementName(),\n\n StringFormatter.format('Unable to find the step with name $', step),\n );\n } else e.addInEdgeTo(graph.getNodeMap().get(step)!, event);\n }\n }\n\n return new Tuple2(retValue, retMap);\n }\n}\n","export class KIRunConstants {\n public static readonly NAMESPACE: String = 'namespace';\n public static readonly NAME: String = 'name';\n public static readonly ID: String = 'id';\n\n private constructor() {}\n}\n","import { Schema } from '../json/schema/Schema';\nimport { SchemaType } from '../json/schema/type/SchemaType';\nimport { TypeUtil } from '../json/schema/type/TypeUtil';\nimport { Namespaces } from '../namespaces/Namespaces';\n\nexport class Position {\n public static readonly SCHEMA_NAME: string = 'Position';\n public static readonly SCHEMA: Schema = new Schema()\n .setNamespace(Namespaces.SYSTEM)\n .setName(Position.SCHEMA_NAME)\n .setType(TypeUtil.of(SchemaType.OBJECT))\n .setProperties(\n new Map([\n ['left', Schema.ofFloat('left')],\n ['top', Schema.ofFloat('top')],\n ]),\n );\n private left: number;\n private top: number;\n\n public constructor(left: number, top: number) {\n this.left = left;\n this.top = top;\n }\n\n public getLeft(): number {\n return this.left;\n }\n public setLeft(left: number): Position {\n this.left = left;\n return this;\n }\n public getTop(): number {\n return this.top;\n }\n public setTop(top: number): Position {\n this.top = top;\n return this;\n }\n\n public static from(json: any): Position | undefined {\n if (!json) return undefined;\n return new Position(json.left, json.top);\n }\n}\n","import { Position } from './Position';\n\nexport class AbstractStatement {\n private comment?: string;\n private description?: string;\n private position?: Position;\n private override: boolean = false;\n\n public constructor(ast?: AbstractStatement) {\n if (!ast) return;\n this.comment = ast.comment;\n this.description = ast.description;\n this.position = ast.position\n ? new Position(ast.position.getLeft(), ast.position.getTop())\n : undefined;\n this.override = ast.override;\n }\n\n public getComment(): string | undefined {\n return this.comment;\n }\n public setComment(comment: string): AbstractStatement {\n this.comment = comment;\n return this;\n }\n public isOverride(): boolean {\n return this.override;\n }\n\n public setOverride(override: boolean): AbstractStatement {\n this.override = override;\n return this;\n }\n\n public getDescription(): string | undefined {\n return this.description;\n }\n public setDescription(description: string): AbstractStatement {\n this.description = description;\n return this;\n }\n public getPosition(): Position | undefined {\n return this.position;\n }\n public setPosition(position: Position | undefined): AbstractStatement {\n this.position = position;\n return this;\n }\n}\n","import { Schema } from '../json/schema/Schema';\nimport { SchemaType } from '../json/schema/type/SchemaType';\nimport { TypeUtil } from '../json/schema/type/TypeUtil';\nimport { Namespaces } from '../namespaces/Namespaces';\nimport { isNullValue } from '../util/NullCheck';\nimport UUID from '../util/UUID';\nimport { ParameterReferenceType } from './ParameterReferenceType';\n\nexport class ParameterReference {\n private static readonly SCHEMA_NAME: string = 'ParameterReference';\n public static readonly SCHEMA: Schema = new Schema()\n .setNamespace(Namespaces.SYSTEM)\n .setName(ParameterReference.SCHEMA_NAME)\n .setType(TypeUtil.of(SchemaType.OBJECT))\n .setProperties(\n new Map([\n ['key', Schema.ofString('key')],\n ['value', Schema.ofAny('value')],\n ['expression', Schema.ofString('expression')],\n ['type', Schema.ofString('type').setEnums(['EXPRESSION', 'VALUE'])],\n ['order', Schema.ofInteger('order')],\n ]),\n );\n\n private key: string;\n private type: ParameterReferenceType;\n private value: any;\n private expression?: string;\n private order?: number;\n\n constructor(type: ParameterReferenceType | ParameterReference) {\n if (type instanceof ParameterReference) {\n let pv = type as ParameterReference;\n this.key = pv.key;\n this.type = pv.type;\n this.value = isNullValue(pv.value) ? undefined : JSON.parse(JSON.stringify(pv.value));\n this.expression = pv.expression;\n this.order = pv.order;\n } else {\n this.type = type as ParameterReferenceType;\n this.key = UUID();\n }\n }\n\n public getType(): ParameterReferenceType {\n return this.type;\n }\n public setType(type: ParameterReferenceType): ParameterReference {\n this.type = type;\n return this;\n }\n\n public getKey(): string {\n return this.key;\n }\n public setKey(key: string): ParameterReference {\n this.key = key;\n return this;\n }\n\n public getValue(): any {\n return this.value;\n }\n public setValue(value: any): ParameterReference {\n this.value = value;\n return this;\n }\n public getExpression(): string | undefined {\n return this.expression;\n }\n public setExpression(expression: string): ParameterReference {\n this.expression = expression;\n return this;\n }\n\n public setOrder(order: number): ParameterReference {\n this.order = order;\n return this;\n }\n public getOrder(): number | undefined {\n return this.order;\n }\n\n public static ofExpression(value: any): [string, ParameterReference] {\n const param = new ParameterReference(ParameterReferenceType.EXPRESSION).setExpression(\n value,\n );\n return [param.getKey(), param];\n }\n\n public static ofValue(value: any): [string, ParameterReference] {\n const param = new ParameterReference(ParameterReferenceType.VALUE).setValue(value);\n return [param.getKey(), param];\n }\n\n public static from(e: any): ParameterReference {\n return new ParameterReference(e.type)\n .setValue(e.value)\n .setExpression(e.expression)\n .setKey(e.key)\n .setOrder(e.order);\n }\n}\n","import { AdditionalType, Schema } from '../json/schema/Schema';\nimport { SchemaType } from '../json/schema/type/SchemaType';\nimport { TypeUtil } from '../json/schema/type/TypeUtil';\nimport { Namespaces } from '../namespaces/Namespaces';\nimport { AbstractStatement } from './AbstractStatement';\nimport { ParameterReference } from './ParameterReference';\nimport { Position } from './Position';\n\nexport class Statement extends AbstractStatement {\n public static readonly SCHEMA_NAME: string = 'Statement';\n public static readonly SCHEMA: Schema = new Schema()\n .setNamespace(Namespaces.SYSTEM)\n .setName(Statement.SCHEMA_NAME)\n .setType(TypeUtil.of(SchemaType.OBJECT))\n .setProperties(\n new Map([\n ['statementName', Schema.ofString('statementName')],\n ['comment', Schema.ofString('comment')],\n ['description', Schema.ofString('description')],\n ['namespace', Schema.ofString('namespace')],\n ['name', Schema.ofString('name')],\n [\n 'dependentStatements',\n Schema.ofObject('dependentstatement')\n .setAdditionalProperties(\n new AdditionalType().setSchemaValue(Schema.ofBoolean('exists')),\n )\n .setDefaultValue({}),\n ],\n [\n 'executeIftrue',\n Schema.ofObject('executeIftrue')\n .setAdditionalProperties(\n new AdditionalType().setSchemaValue(Schema.ofBoolean('exists')),\n )\n .setDefaultValue({}),\n ],\n [\n 'parameterMap',\n new Schema()\n .setName('parameterMap')\n .setAdditionalProperties(\n new AdditionalType().setSchemaValue(\n Schema.ofObject('parameterReference').setAdditionalProperties(\n new AdditionalType().setSchemaValue(ParameterReference.SCHEMA),\n ),\n ),\n ),\n ],\n ['position', Position.SCHEMA],\n ]),\n );\n private statementName: string;\n private namespace: string;\n private name: string;\n private parameterMap?: Map<string, Map<string, ParameterReference>>;\n private dependentStatements?: Map<string, boolean>;\n private executeIftrue?: Map<string, boolean>;\n\n public constructor(sn: string | Statement, namespace?: string, name?: string) {\n super(sn instanceof Statement ? (sn as Statement) : undefined);\n\n if (sn instanceof Statement) {\n let x = sn as Statement;\n this.statementName = x.statementName;\n this.name = x.name;\n this.namespace = x.namespace;\n if (x.parameterMap)\n this.parameterMap = new Map(\n Array.from(x.parameterMap.entries()).map((f) => [\n f[0],\n new Map(\n Array.from(f[1].entries()).map((e) => [\n e[0],\n new ParameterReference(e[1]),\n ]),\n ),\n ]),\n );\n\n if (x.dependentStatements) {\n this.dependentStatements = new Map(Array.from(x.dependentStatements.entries()));\n }\n } else {\n this.statementName = sn;\n if (!name || !namespace) {\n throw new Error('Unknown constructor');\n }\n this.namespace = namespace;\n this.name = name;\n }\n }\n\n public getStatementName(): string {\n return this.statementName;\n }\n public setStatementName(statementName: string): Statement {\n this.statementName = statementName;\n return this;\n }\n public getNamespace(): string {\n return this.namespace;\n }\n public setNamespace(namespace: string): Statement {\n this.namespace = namespace;\n return this;\n }\n public getName(): string {\n return this.name;\n }\n public setName(name: string): Statement {\n this.name = name;\n return this;\n }\n public getParameterMap(): Map<string, Map<string, ParameterReference>> {\n if (!this.parameterMap) {\n this.parameterMap = new Map();\n }\n return this.parameterMap;\n }\n public setParameterMap(parameterMap: Map<string, Map<string, ParameterReference>>): Statement {\n this.parameterMap = parameterMap;\n return this;\n }\n\n public getDependentStatements(): Map<string, boolean> {\n return this.dependentStatements ?? new Map();\n }\n\n public setDependentStatements(dependentStatements: Map<string, boolean>): Statement {\n this.dependentStatements = dependentStatements;\n return this;\n }\n\n public getExecuteIftrue(): Map<string, boolean> {\n return this.executeIftrue ?? new Map();\n }\n\n public setExecuteIftrue(executeIftrue: Map<string, boolean>): Statement {\n this.executeIftrue = executeIftrue;\n return this;\n }\n\n public equals(obj: any): boolean {\n if (!(obj instanceof Statement)) return false;\n let s: Statement = obj as Statement;\n return s.statementName == this.statementName;\n }\n\n public static ofEntry(statement: Statement): [string, Statement] {\n return [statement.statementName, statement];\n }\n\n public static from(json: any): Statement {\n return new Statement(json.statementName, json.namespace, json.name)\n .setParameterMap(\n new Map<string, Map<string, ParameterReference>>(\n Object.entries(json.parameterMap ?? {}).map(([k, v]: [string, any]) => [\n k,\n new Map<string, ParameterReference>(\n Object.entries(v ?? {})\n .map(([_, iv]) => ParameterReference.from(iv))\n .map((e) => [e.getKey(), e]),\n ),\n ]),\n ),\n )\n .setDependentStatements(\n new Map<string, boolean>(Object.entries(json.dependentStatements ?? {})),\n )\n .setExecuteIftrue(new Map<string, boolean>(Object.entries(json.executeIftrue ?? {})))\n .setPosition(Position.from(json.position))\n .setComment(json.comment)\n .setDescription(json.description) as Statement;\n }\n}\n","import { Schema } from '../json/schema/Schema';\nimport { SchemaType } from '../json/schema/type/SchemaType';\nimport { TypeUtil } from '../json/schema/type/TypeUtil';\nimport { Namespaces } from '../namespaces/Namespaces';\nimport { AbstractStatement } from './AbstractStatement';\nimport { Position } from './Position';\nimport { Statement } from './Statement';\n\nexport class StatementGroup extends AbstractStatement {\n private static readonly SCHEMA_NAME: string = 'StatementGroup';\n public static readonly SCHEMA: Schema = new Schema()\n .setNamespace(Namespaces.SYSTEM)\n .setName(StatementGroup.SCHEMA_NAME)\n .setType(TypeUtil.of(SchemaType.OBJECT))\n .setProperties(\n new Map([\n ['statementGroupName', Schema.ofString('statementGroupName')],\n ['comment', Schema.ofString('comment')],\n ['description', Schema.ofString('description')],\n ['position', Position.SCHEMA],\n ]),\n );\n\n private statementGroupName: string;\n private statements: Map<string, boolean>;\n\n constructor(statementGroupName: string, statements: Map<string, boolean> = new Map()) {\n super();\n this.statementGroupName = statementGroupName;\n this.statements = statements;\n }\n\n public getStatementGroupName(): string {\n return this.statementGroupName;\n }\n public setStatementGroupName(statementGroupName: string): StatementGroup {\n this.statementGroupName = statementGroupName;\n return this;\n }\n\n public getStatements(): Map<string, boolean> {\n return this.statements;\n }\n\n public setStatements(statements: Map<string, boolean>): StatementGroup {\n this.statements = statements;\n return this;\n }\n\n public static from(json: any): StatementGroup {\n return new StatementGroup(\n json.statementGroupName,\n new Map(\n Object.entries(json.statements || {}).map(([k, v]) => [\n k,\n ('' + v)?.toLowerCase() == 'true',\n ]),\n ),\n )\n .setPosition(Position.from(json.position))\n .setComment(json.comment)\n .setDescription(json.description) as StatementGroup;\n }\n}\n","import { AdditionalType, Schema } from '../json/schema/Schema';\nimport { Namespaces } from '../namespaces/Namespaces';\nimport { Event } from './Event';\nimport { FunctionSignature } from './FunctionSignature';\nimport { Parameter } from './Parameter';\nimport { Statement } from './Statement';\nimport { StatementGroup } from './StatementGroup';\n\nconst SCHEMA_NAME1: string = 'FunctionDefinition';\nconst IN_SCHEMA = new Schema()\n .setNamespace(Namespaces.SYSTEM)\n .setName(SCHEMA_NAME1)\n .setProperties(\n new Map([\n ['name', Schema.ofString('name')],\n ['namespace', Schema.ofString('namespace')],\n ['parameters', Schema.ofArray('parameters', Parameter.SCHEMA)],\n [\n 'events',\n Schema.ofObject('events').setAdditionalProperties(\n new AdditionalType().setSchemaValue(Event.SCHEMA),\n ),\n ],\n [\n 'steps',\n Schema.ofObject('steps').setAdditionalProperties(\n new AdditionalType().setSchemaValue(Statement.SCHEMA),\n ),\n ],\n ]),\n );\n\nIN_SCHEMA.getProperties()?.set('parts', Schema.ofArray('parts', IN_SCHEMA));\n\nexport class FunctionDefinition extends FunctionSignature {\n public static readonly SCHEMA: Schema = IN_SCHEMA;\n private version: number = 1;\n private steps?: Map<string, Statement>;\n private stepGroups?: Map<string, StatementGroup>;\n private parts?: FunctionDefinition[];\n\n constructor(name: string) {\n super(name);\n }\n\n public getVersion(): number {\n return this.version;\n }\n public setVersion(version: number): FunctionDefinition {\n this.version = version;\n return this;\n }\n public getSteps(): Map<string, Statement> {\n return this.steps ?? new Map();\n }\n public setSteps(steps: Map<string, Statement>): FunctionDefinition {\n this.steps = steps;\n return this;\n }\n public getStepGroups(): Map<string, StatementGroup> | undefined {\n return this.stepGroups;\n }\n public setStepGroups(stepGroups: Map<string, StatementGroup>): FunctionDefinition {\n this.stepGroups = stepGroups;\n return this;\n }\n\n public getParts(): FunctionDefinition[] | undefined {\n return this.parts;\n }\n\n public setParts(parts: FunctionDefinition[]): FunctionDefinition {\n this.parts = parts;\n return this;\n }\n\n public static from(json: any): FunctionDefinition {\n if (!json) return new FunctionDefinition('unknown');\n return new FunctionDefinition(json.name)\n .setSteps(\n new Map(\n Object.values(json.steps ?? {})\n .filter((e) => !!e)\n .map((e: any) => [e.statementName, Statement.from(e)]),\n ),\n )\n .setStepGroups(\n new Map(\n Object.values(json.stepGroups ?? {})\n .filter((e) => !!e)\n .map((e: any) => [e.statementGroupName, StatementGroup.from(e)]),\n ),\n )\n .setParts(\n Array.from(json.parts ?? [])\n .filter((e) => !!e)\n .map((e: any) => FunctionDefinition.from(e)),\n )\n .setVersion(json.version ?? 1)\n .setEvents(\n new Map(\n Object.values(json.events ?? {})\n .filter((e) => !!e)\n .map((e: any) => [e.name, Event.from(e)]),\n ),\n )\n .setParameters(\n new Map(\n Object.values(json.parameters ?? {})\n .filter((e) => !!e)\n .map((e: any) => [e.parameterName, Parameter.from(e)]),\n ),\n ) as FunctionDefinition;\n }\n}\n","export class Argument {\n private argumentIndex: number = 0;\n private name: string;\n private value: any;\n\n public constructor(argumentIndex: number, name: string, value?: any) {\n this.argumentIndex = argumentIndex;\n this.name = name;\n this.value = value;\n }\n public getArgumentIndex(): number {\n return this.argumentIndex;\n }\n public setArgumentIndex(argumentIndex: number): Argument {\n this.argumentIndex = argumentIndex;\n return this;\n }\n public getName(): string {\n return this.name;\n }\n public setName(name: string): Argument {\n this.name = name;\n return this;\n }\n public getValue(): any {\n return this.value;\n }\n public setValue(value: any): Argument {\n this.value = value;\n return this;\n }\n\n public static of(name: string, value: any): Argument {\n return new Argument(0, name, value);\n }\n}\n"],"names":["$8a594d771b312e20$export$2f21297dc8e7cb72","static","constructor","$2a3a5f1ffee8cae2$export$5c8592849d7f8589","v","$9f1223c9d2401e57$export$656411a496f80a09","ast","this","singleSchema","$4f41b14dd9cc12a6$export$19342e026b58ebb7","undefined","tupleSchema","map","e","setSingleSchema","schema","setTupleSchema","schemas","getSingleSchema","getTupleSchema","isSingleType","length","obj","Array","isArray","fromListOfSchemas","keys","Object","indexOf","from","x","$76109b55f55caedc$export$a1ec97982bccfa9d","SchemaType","$0c150e18a67dfd68$export$92738401e1603719","$0c97b87b09709a28$export$6d6eb186deb81c4","type","super","Set","getType","setType","getAllowedSchemaTypes","contains","has","$969c09698447bf9e$export$c62c2a2bbb80b6fa","$fc9151614d56f2b0$export$75f4a5a37c7a0a0f","types","$4f41b14dd9cc12a6$export$cb559bfee05f190","apt","booleanValue","schemaValue","getBooleanValue","getSchemaValue","setBooleanValue","setSchemaValue","ad","setNamespace","SYSTEM","setName","of","NULL","setConstant","STRING","setEnums","OBJECT","setProperties","Map","setDefaultValue","ofString","INTEGER","setAnyOf","TYPE_SCHEMA","ofArray","ofRef","ofAny","ofInteger","ofLong","ofNumber","setAdditionalProperties","ofBoolean","ofObject","setRef","setRequired","id","FLOAT","LONG","DOUBLE","BOOLEAN","ARRAY","ref","itemSchemas","setItems","list","push","retMap","entries","forEach","k","value","set","isStringSchema","namespace","name","version","anyOf","allOf","oneOf","not","description","examples","defaultValue","comment","enums","constant","pattern","format","minLength","maxLength","multipleOf","minimum","maximum","exclusiveMinimum","exclusiveMaximum","properties","fromMapOfSchemas","additionalProperties","required","propertyNames","minProperties","maxProperties","patternProperties","items","additionalItems","minContains","maxContains","minItems","maxItems","uniqueItems","$defs","permission","JSON","parse","stringify","getTitle","getFullName","get$defs","set$defs","getNamespace","getName","getVersion","setVersion","getRef","getAnyOf","getAllOf","setAllOf","getOneOf","setOneOf","getNot","setNot","getDescription","setDescription","getExamples","setExamples","getDefaultValue","getComment","setComment","getEnums","getConstant","getPattern","setPattern","getFormat","setFormat","getMinLength","setMinLength","getMaxLength","setMaxLength","getMultipleOf","setMultipleOf","getMinimum","setMinimum","getMaximum","setMaximum","getExclusiveMinimum","setExclusiveMinimum","getExclusiveMaximum","setExclusiveMaximum","getProperties","getAdditionalProperties","getAdditionalItems","setAdditionalItems","getRequired","getPropertyNames","setPropertyNames","getMinProperties","setMinProperties","getMaxProperties","setMaxProperties","getPatternProperties","setPatternProperties","getItems","getContains","setContains","getMinContains","setMinContains","getMaxContains","setMaxContains","getMinItems","setMinItems","getMaxItems","setMaxItems","getUniqueItems","setUniqueItems","getPermission","setPermission","$7bbe9150367150f2$export$e5a11051fe746f8a","Error","schemaPath","message","err","trim","cause","getSchemaPath","getCause","$705493e3317d01c0$export$c6903b1fb9c4306f","ParameterType","$938bec755a6b75e6$export$f817523eebf7ee7f","SCHEMA_NAME","SCHEMA","variableArgument","EXPRESSION","pn","parameterName","getSchema","setSchema","getParameterName","setParameterName","isVariableArgument","setVariableArgument","json","paramSchema","variableArguments","$a071b2350aab183a$var$map","ofDouble","ofFloat","$a071b2350aab183a$var$filterableNames","values","$a071b2350aab183a$export$a0de004d4b269741","find","get","filter","toLowerCase","$dd4326c6e006da35$export$2e2bcd8739ae039","fun","getSignature","$7ecb487721af7c67$export$92eaabd025f1e921","k1","v1","k2","v2","k3","v3","k4","v4","k5","v5","k6","v6","k7","v7","k8","v8","k9","v9","k10","v10","entry","$7ecb487721af7c67$export$4758715d917352b9","eachEntry","i","$970f7bbcafb2c50d$export$d61e24a684f9e51","evn","parameters","getParameters","setParameters","eventMapEntry","OUTPUT","eventName","eventSchema","$8bed54297f17864d$export$c45be2437182b0e3","result","getResult","setResult","$28804be3f1c4834a$export$37b1b5eb4f4f5ada","$c10c9982d8b7a6b8$export$46c58e8ae2505a7d","index","arg","fo","generator","next","er","allResults","$2e21ebbbef520683$export$6ac699b48d627131","events","getEvents","setEvents","$ea8539f6d865ce04$export$5a7f7b467323cd66","formatString","params","sb","ind","chr","prevchar","charAt","substring","toString","$3cb6da8eee9f96c7$export$f0ef28713f767754","head","tail","t","node","$3cb6da8eee9f96c7$var$Node","previous","pop","isEmpty","size","str","toArray","arr","peek","peekLast","getFirst","removeFirst","removeLast","n","addAll","add","bind","callbackfn","thisArg","newList","$2b39939b69590d5c$export$9cb4719e2e525b7a","y","xa","yb","a","b","typeOfA","typeOfB","entriesOfA","entriesOfB","$c99e079d9bc86c78$export$592e033edf5fafe4","c","occurance","$52215c513713acac$export$50073dc6080ec093","f","s","getT1","getT2","setT1","setT2","$52215c513713acac$export$82dc29c19cc50d89","getT3","setT3","$52215c513713acac$export$c0401e7e2326d13b","fr","getT4","setT4","$0ad73ab1d75e3eb4$export$18db27caa68e620c","sve","reduce","$c64d9d969a282a82$export$7eb0095ad5663979","sRepository","getSchemaFromRef","hasDefaultValueOrNullSchemaType","iteration","CYCLIC_REFERENCE_LIMIT_COUNTER","isNullOrBlank","startsWith","tuple","resolveExternalSchema","parts","split","resolveInternalSchema","inSchema","UNABLE_TO_RETRIVE_SCHEMA_FROM_REFERENCED_PATH","inSchem","nms","splitAtFirstOccurance","nmspnm","$50bf6810e5f92609$export$54412d5419e3f99d","parents","repository","element","flag","validate","$d84452374c548781$export$5ea2dbb44eae89d6","path","$5cbc9dc65a90aa0c$export$a006ee8cc7b6580a","array","checkMinMaxItems","checkItems","checkUniqueItems","checkContains","count","countContains","stopOnFirst","newParents","checkItemsInTupleSchema","checkAdditionalItems","additionalSchemaType","anySchemaType","checkEachItemInAdditionalItems","schemaType","$f16a0327a17a34fc$export$d74a5d77bac81ab5","$3356a5c800d1131a$export$cd3b7079b2ac4000","$d8e1a543f29ba7d8$export$5464fb7e86e4a9f1","extractNumber","checkRange","checkMultipleOf","Math","round","numberCompare","n1","n2","$37975652d3bbb152$export$e97b0a585a2ce29f","jsonObject","checkMinMaxProperties","checkPropertyNameSchema","checkRequired","checkProperties","checkPatternProperties","checkAddtionalProperties","key","compiledPatterns","keyPattern","RegExp","test","delete","each","hasOwnProperty","$540088a715acffc2$export$f22e7fe56db8ae03","StringFormat","$5b487331eeaf33e7$export$312ff19fe6f84b5e","TIME","patternMatcher","DATE","DATETIME","EMAIL","$180899b5bb1efe85$export$9ced0f77dc6abfd7","constantValidation","enumCheck","typeValidation","valid","$a1225b4e7799ebbf$export$6138b597adfac7c","validateArguments","args","schemaRepository","statementExecution","param","validateArgument","signature","getStatement","getStatementName","jsonElement","async","context","setArguments","getArguments","getSchemaRepository","getStatementExecution","internalExecute","getProbableEventSignature","probableParameters","$2d10652ec26bbd34$export$d61d79577b849157","EVENT_INDEX_NAME","EVENT_RESULT_NAME","ofAnyNotNull","functionName","event","paramMap","SYSTEM_ARRAY","$6a207647bcd0ed26$export$e55b597c359d82cd","PARAMETER_ARRAY_SOURCE","PARAMETER_ARRAY_SECOND_SOURCE","EVENT_RESULT_ARRAY","source","secondSource","outputOf","$6464a6f7a4316278$export$fe845828af6718ad","PARAMETER_ANY","input","len","temp","$13a8559214d219e2$export$f33443386c43236a","$4e058298a8f3f696$export$50d5074000755e42","$99aa72cfcbe4f53f$export$3755dd8569265c2c","typof","findPrimitiveNumberType","num","Number","isInteger","cmp","compare","typofa","typofb","comparePrimitive","oa","ob","$8b01cb36cf71cf1b$export$72555ce28d3458cb","PARAMETER_ARRAY_SOURCE_PRIMITIVE","PARAMETER_INT_SOURCE_FROM","PARAMETER_FIND_PRIMITIVE","PARAMETER_INT_LENGTH","EVENT_INDEX","start","end","mid","floor","$4b7f15a0d24799be$export$bdb0fa2261d7dee1","removeList","splice","copy","$02a71c9f02060b30$export$2c1d9c1fe3e6577a","PARAMETER_ARRAY_FIND","PARAMETER_INT_FIND_FROM","EVENT_RESULT_INTEGER","srcfrom","findfrom","srcto","findto","x1","j","x2","typs","typf","s1","f1","$05e0e2201531b0c3$export$ecd5e8ace626722c","structuredClone","$683a51fb2e860fa2$export$92ce62e1201c4fc0","PARAMETER_BOOLEAN_DEEP_COPY","deep","ja","$2719b8ef5e705acc$export$bfadae053a633538","PARAMETER_ANY_VAR_ARGS","receivedArgs","indexes","$13cf821feb23b277$export$3ad0a854c98d807c","shift","$20230fd2dc2ebf87$export$334b60f35a6b2d04","$6a75f007df4ad210$export$e0c0e69e6a36c9bf","$a94dd374bdc82c19$export$831f01f9797c5e1c","PARAMETER_INT_SECOND_SOURCE_FROM","firstSource","first","second","set1","set2","i1","set3","$161e5ca788865d1d$export$cb7a6a5305d39b11","EVENT_RESULT_BOOLEAN","execute","$7a0ddf3599db7518$export$ffffe40bfa0649a3","EVENT_RESULT_EMPTY","$2472d1ed42bdbbd9$export$44c95d3770756ed2","frequency","$937d82a8ed0ca387$export$11f52f8c7c47867c","PARAMETER_ANY_NOT_NULL","$3211926905bf07e5$export$3785001429c275c5","secondSourceSize","$bec3a7b58f0ac762$export$327c387de36d5714","$a3882d72b8be5910$export$c76f1c324b4b4a49","$f41609569136f453$export$d36c09e5d02927e7","EVENT_RESULT_ANY","max","$f978ad0778c43ba9$export$dfed19fabc75a31d","min","$4eedb5794f908376$export$65b9f7c5b0c25350","firstFind","secondFind","$9d98aed9e61afd05$export$53c81f36b32e1bba","st","endpoint","last","$dc6c9870eeb65756$export$152db69a76b6b79e","PARAMETER_ROTATE_LENGTH","rotLen","rotate","elements","$2b23ce3a38e87f5c$export$f4f1f4c0f416ff4b","random","$61a700993053ef05$export$d43f91ac58cde147","PARAMETER_BOOLEAN_ASCENDING","ascending","slicedArray","slice","sort","$61a700993053ef05$var$compareFunction","$a5032aa4a964a9af$export$7350831561e48a8f","$ab50f5eee521ab3b$export$ff4c1a9d41c61c5b","PARAMETER_INT_OFFSET","offset","output","$829ee34eb750e28b$export$7033a60d5110317a","$7104972d887f8f1f$export$7127619039fca328","$fc4d9e77c2a45911$export$a76dbac5bd058d1b","append","setLength","deleteCharAt","checkIndex","insert","$8760f1cd91f30831$export$acb5fd6ef0dd45e7","expression","$e6642cbfb2fcba93$export$e67adacf2c583eeb","getExpression","$fec970ca78a92862$export$c3407419a51d8741","getTokenValue","getElement","$d4f8cb0bbe616941$export$ab5aad00225c5662","MULTIPLICATION","DIVISION","INTEGER_DIVISION","MOD","ADDITION","SUBTRACTION","NOT","AND","OR","LESS_THAN","LESS_THAN_EQUAL","GREATER_THAN","GREATER_THAN_EQUAL","EQUAL","NOT_EQUAL","BITWISE_AND","BITWISE_OR","BITWISE_XOR","BITWISE_COMPLEMENT","BITWISE_LEFT_SHIFT","BITWISE_RIGHT_SHIFT","BITWISE_UNSIGNED_RIGHT_SHIFT","UNARY_PLUS","UNARY_MINUS","UNARY_LOGICAL_NOT","UNARY_BITWISE_COMPLEMENT","ARRAY_OPERATOR","OBJECT_OPERATOR","NULLISH_COALESCING_OPERATOR","CONDITIONAL_TERNARY_OPERATOR","ARITHMETIC_OPERATORS","LOGICAL_OPERATORS","BITWISE_OPERATORS","CONDITIONAL_OPERATORS","getOperator","shouldBeWrappedInSpace","VALUE_OF","_","o","operator","operatorName","_shouldBeWrappedInSpace","getOperatorName","valueOf","$6b9ac145b9fcd5e8$export$bfe37c1342e5eb83","tokens","ops","l","r","op","evaluate","getTokens","getOperations","buff","isPrevOp","processTokenSepearator","processSubExpression","processStringLiteral","processTernaryOperator","result1","processOthers","process","result2","OPERATORS","strConstant","nextChar","cnt","BIGGEST_OPERATOR_SIZE","OPERATORS_WITHOUT_SPACE_WRAP","checkUnaryOperator","OPERATION_VALUE_OF","inChr","hasPrecedence","prev","UNARY_OPERATORS","l1","secondExp","subExp","UNARY_MAP","op1","op2","pre1","OPERATOR_PRIORITY","pre2","temp1","temp2","equals","$bbb484db7fdea9cc$export$d44091f0b447fefe","getValue","token","prefix","getPrefix","getValueInternal","retrieveElementFrom","partNumber","bElement","REGEX_SQUARE_BRACKETS","resolveForEachPartOfTokenWithBrackets","parseInt","isNaN","checkIfObject","endsWith","index1","err1","$b8fbfe560c8313b4$export$39519efb8a973bce","store","REGEX_DOT","getStore","setStore","setValue","overwrite","deleteOnNull","modifyStore","stringToken","exp","mem","el","getDataFromObject","getDataFromArray","putDataInObject","putDataInArray","nextOp","je","$955d4e7f0a55db24$export$4415edf560d625ce","keyPath","valuePath","ignoreNullValues","ignoreNullKeys","ignoreDuplicateKeys","ove","acc","cur","$79286da09543a41a$export$b1f76fbe3f585683","ofArrayEntries","repoMap","filterableNames","$0c4ac653cf8285f8$export$d249626f99a0976c","setElement","$1eb4b4d4afac7df7$var$SIGNATURE","SYSTEM_CTX","ofEntry","REGEX","CONSTANT","outputEventMapEntry","$e8e2ed47b53194a9$var$SIGNATURE","$d785d0d318022812$export$a5835aa4dc4a0f7","nullCheck","e1","e2","$cbe984a506d536a3$export$a8b4ac5cec7f3ef1","apply","u","$4da9fb38158791c8$export$f7d907e108ff5f5a","$7accff43740ada67$export$4429718dd207f524","$12d3b2b894cf9f8b$export$461eeaed4fd44d87","$4c09effe15aba9fa$export$a654a6b4708c47ae","$9bcdec1e4ad6de76$export$c6c786d90c00ccb3","isTTypeString","reverse","abs","times","chrs","rev","$6350aa1f5f9b2528$export$32cdc7b90c3f2772","$5d11864b386c89c3$export$2ce812ef1adfc7e8","$c44c3e46f03ba79c$export$a2a775190435bd33","$af532fb93de07b12$export$eeef83ab872ddce5","$6559aa2cc00492b5$export$57fe0f50165dd4cd","$0461a3f9c1d5afde$export$2e1886fc6d5eb776","$bc686fa46e4be1ed$export$3046494ab1cf73bb","$081ccc4559130c17$export$c5652d513ade8473","$8a7149a874759c44$export$e62aa8d75c9a4734","tType","findPrimitiveNullAsBoolean","uType","$26091549ef6770aa$export$cdf02df6bd75cc9","$f0ab4376036f3b51$export$264c8987e36a6d35","$d58ea5e4242a4950$export$7ebb65846541d315","$bcf6a6f56ad99125$export$fe2bbbd39de8094a","$e373832f0e9b06b0$export$fdc45f0fc8eb4207","$8f4627bb25c750bd$export$7b20a1536da8f25","$712cd2983455b122$export$42108e1134a52f27","$3cfa7ba83b1c0459$export$84c3ec415fb07dd3","$74507e9418b36497$export$e38febd6a9d11047","$f1ebee58c70b4bce$export$b2346ee46dfa8cbc","$b08b11e7dfc7f47e$export$874b037c929bb9a8","$e118f42b4e8b7423$export$6282ef6c70349edc","$a7e37e4ab4221e37$export$a4dd2a01c916cf79","$14f460c98179a8c1$var$KEYWORDS","$14f460c98179a8c1$export$439f57d66896a884","processString","processNumbers","$992dc32892df2d89$export$b9f061bcfab247ed","e3","$9927f930e460c1d1$export$d538ac16fbea0cfa","addValue","bIndex","fromIndex","PREFIX","$2d15a60196232a30$export$c24f16fac926e77f","UNARY_OPERATORS_MAP","internalTokenValueExtractor","valuesMap","processNestingExpression","evaluateExpression","tuples","newExpression","replaceNestingExpression","expStr","getExpressionString","UNARY_OPERATORS_MAP_KEY_SET","applyUnaryOperation","getValueFromToken","processObjectOrArrayOperator","token2","token3","applyTernaryOperation","token21","applyBinaryOperation","token1","objTokens","objOperations","objToken","Date","getTime","key1","INSTANCE","TERNARY_OPERATORS_MAP","typv1","typv2","BINARY_OPERATORS_MAP","pathPrefix","$c158d7c36a53803f$var$SIGNATURE","$4a42f66d6cf815af$var$SIGNATURE","$92902c8af8052351$export$1f9ff5f4a6c9361a","CONDITION","TRUE","FALSE","SIGNATURE","condition","$f7fd68e958c8e15d$var$SIGNATURE","SYSTEM_LOOP","$6f3bdb484a34414f$var$SIGNATURE","ITERATION","$f3943fa4b5e634ab$var$SIGNATURE","$f469a40df35836ae$var$SIGNATURE","$7cb20692a5bd7b0e$var$SIGNATURE","MATH","$01fa6744fa24471f$var$paramFunctions","$01fa6744fa24471f$export$dbb56c1f07bdf68c","mathFunction","parametersNumber","returnType","call","$406fb3da3e020552$export$73af47b8d41ff64","nums","sqrt","$7e32b13425d565a1$var$SIGNATURE","$c8aed76f3a52d884$var$SIGNATURE","$eb04fdf151798117$export$a92776769f460054","$735ce06ad515ff10$export$a678c665c69432d4","MIN_VALUE","MAX_VALUE","VALUE","$a60515d2decd881a$export$ab98da086df9ef00","$3c284c4fb188e285$var$functionObjectsIndex","Absolute","ACosine","acos","ASine","asin","ATangent","atan","Ceiling","ceil","Cosine","cos","CosineH","cosh","CubeRoot","cbrt","Exponential","Expm1","expm1","Floor","Log","log","Log10","log10","Round","Sine","sin","SineH","sinh","Tangent","tan","TangentH","tanh","ToDegrees","PI","ToRadians","SquareRoot","ArcTangent","atan2","Power","pow","Add","Hypotenuse","Maximum","Minimum","Random","RandomFloat","RandomInt","$3c284c4fb188e285$var$filterableNames","$3c284c4fb188e285$export$b52a470618d492ff","$1193986a17072166$export$2511477d495b2883","valueSchema","SYSTEM_OBJECT","$c561d9a350d0b846$var$functionObjectsIndex","ObjectValues","objectValues","localeCompare","ObjectKeys","ObjectEntries","ObjectDeleteKey","ObjectPutValue","deleteKeyOnNull","$c561d9a350d0b846$var$filterableNames","$c561d9a350d0b846$export$64f266808c8b139","$1e637ed6cb16c104$export$531cef85654f2406","VALUES","console","$2d9cc5db6fe5505e$export$14d8c90077fe987e","PARAMETER_STRING_NAME","PARAMETER_SECOND_STRING_NAME","PARAMETER_THIRD_STRING_NAME","PARAMETER_INDEX_NAME","PARAMETER_SECOND_INDEX_NAME","PARAMETER_SEARCH_STRING_NAME","parameter","ss","EVENT_BOOLEAN","PARAMETER_STRING","PARAMETER_SEARCH_STRING","EVENT_STRING","PARAMETER_INDEX","s2","EVENT_INT","ind1","ind2","PARAMETER_SECOND_INDEX","s3","PARAMETER_SECOND_STRING","PARAMETER_THIRD_STRING","$3d06710c82750f28$export$e55b597c359d82cd","contextArgs","concatenatedString","curr","$988fd152148851d3$export$b12ae3a6a3425008","PARAMETER_AT_START","PARAMETER_AT_START_NAME","PARAMETER_AT_END","PARAMETER_AT_END_NAME","inputString","startPosition","endPosition","outputString","$203c86f3acf1a1ee$export$ea0ae5b491c5c50a","PARAMETER_AT_POSITION","PARAMETER_AT_POSITION_NAME","PARAMETER_INSERT_STRING","PARAMETER_INSERT_STRING_NAME","at","insertString","$22e00e44f1087107$export$8b243d0520548581","PARAMETER_POSTPAD_STRING_NAME","PARAMETER_LENGTH_NAME","PARAMETER_POSTPAD_STRING","PARAMETER_LENGTH","postpadString","prepadStringLength","$d7d15655908058c7$export$faa1d9aa9e5514ee","PARAMETER_PREPAD_STRING_NAME","PARAMETER_PREPAD_STRING","prepadString","$5773b5710cfca515$export$5619d260fbac97b4","PARAMETER_OTHER_STRING_NAME","PARAMETER_FIRST_OFFSET_NAME","PARAMETER_SECOND_OFFSET_NAME","PARAMETER_INTEGER_NAME","PARAMETER_BOOLEAN_NAME","PARAMETER_BOOLEAN","PARAMETER_FIRST_OFFSET","PARAMETER_OTHER_STRING","PARAMETER_SECOND_OFFSET","PARAMETER_INTEGER","ignoreCase","toffSet","otherString","oOffSet","matches","toUpperCase","$a6a0c72755bdb13a$export$13c473626aed6671","PARAMETER_AT_LENGTH_NAME","PARAMETER_REPLACE_STRING_NAME","PARAMETER_AT_LENGTH","PARAMETER_REPLACE_STRING","replaceString","$093e2d5bba018a1f$export$53c81f36b32e1bba","acutalString","stringLength","reversedString","$e4b5254ae876bf0d$export$f836382419f64c98","PARAMETER_SPLIT_STRING_NAME","PARAMETER_SPLIT_STRING","EVENT_ARRAY","$f4a1108044d516ac$export$5f245f9a686b5058","PARAMETER_INPUT_ANYTYPE_NAME","PARAMETER_INPUT_ANYTYPE","$34ec91cae85dfacd$export$eca59ed5891f8e47","$e4c5c6809694afc6$export$ae09120a661eed3b","ofEntryString","toLocaleLowerCase","ofEntryStringBooleanOutput","ofEntryAsStringBooleanOutput","ofEntryAsStringIntegerOutput","lastIndexOf","ofEntryAsStringAndIntegerStringOutput","repeat","ofEntryAsStringStringIntegerIntegerOutput","ofEntryAsStringStringStringStringOutput","replace","ofEntryAsStringIntegerIntegerStringOutput","$324622009f29af48$export$d3f4bd7b80956108","repos","repo","$4cc75b374fd65488$var$map","getContext","contextToken","ex","getValuesMap","modifyContext","ce","to","step","forward","current","done","statementName","getExecutionContext","eve","stepName","isExpression","$4cc75b374fd65488$var$filterableNames","flatMap","$4cc75b374fd65488$export$1ef8ffe3d9ea2320","$0d543a3fb6de638f$export$1480fdc476e0600e","messageType","getMessageType","setMessageType","getMessage","setMessage","$c48a1514625daae5$export$f09f252875e413e8","messages","dependencies","statement","setStatement","getMessages","setMessages","getDependencies","setDependencies","getUniqueKey","addMessage","addDependency","dependency","getDepenedencies","$436e919276319ad5$export$6cebf62d32060adb","$7501649217d0c960$export$638a1889bcd4621c","eachEvent","bracket","evParamName","element1","$e1ae4251d09b5b92$export$ff42ca15b74921ee","$f66d02feffe2be20$export$8193dda3aa6e9a3","nodeMap","isSubGrph","getVerticesData","getData","addVertex","data","$46d6a104d1ab20b3$export$d6ecc3c8b1bdb677","getVertex","getVertexData","getVerticesWithNoIncomingEdges","hasIncomingEdges","isCyclic","vertex","visited","getKey","hasOutgoingEdges","getOutVertices","addVertices","getNodeMap","isSubGraph","join","outVertices","inVertices","graph","setData","setOutVertices","getInVertices","setInVertices","getGraph","setGraph","addOutEdgeTo","addInEdgeTo","getSubGraphOfType","subGraph","typeVertices","ins","outs","$aba720240ef6b64c$export$dab92e0058712b0b","$18472f1ececbbeef$export$1617e535b7cf20e","ParameterReferenceType","$61b2f8a2fd3dc93d$export$2e2bcd8739ae039","dt","$6ce4d447a2468596$export$c72d1e96aedc073d","executionContext","valueExtractors","functionRepository","executionId","getExecutionId","setContext","setStatementExecution","getSteps","steps","setSteps","getCount","setCount","getFunctionRepository","setFunctionRepository","setSchemaRepository","addTokenValueExtractor","extractors","tve","setValuesMap","setExecutionContext","$21114c98629ddba9$export$c72a235e9e048d37","StatementMessageType","$23413f16a9a7155c$export$454d8b636c7c716b","debugMode","fd","VERSION","fRepo","sRepo","g","prepareStatementExecution","unresolved","makeEdges","ERROR","inContext","eGraph","getExecutionPlan","executeGraph","executionQue","branchQue","processBranchQue","processExecutionQue","MAX_EXECUTION_ITERATIONS","eventMap","allDependenciesResolvedVertex","executeVertex","branch","allDependenciesResolvedTuples","executeBranch","nextOutput","resolveInternalExpressions","getExecuteIftrue","every","paramSet","getArgumentsFromParametersMap","fep","isOutput","out","unResolvedDependencies","resolveInternalExpression","retArray","retObject","tup","getParameterMap","ret","prList","pDef","getOrder","parameterReferenceEvaluation","se","p","refList","parameterReferenceValidation","ref1","PARAMETER_NEEDS_A_VALUE","getDependentStatements","statement1","addDependencies","param1","paramElements","sch","match","STEP_REGEX_PATTERN","retValue","d","secondDot","eventDot","$2445a1b8d6e618e9$export$594b6714aa88d0a1","$7ba619a412e19f83$export$13807d9ee5a34a42","left","top","getLeft","setLeft","getTop","setTop","$52fe4febcdaa5f60$export$7d81ad5ed2d0609","override","position","isOverride","setOverride","getPosition","setPosition","$ab247583f3916d44$export$6d35a6334b82887f","pv","order","setKey","setExpression","setOrder","$5557399e4b585930$export$c84356afd4299847","sn","parameterMap","dependentStatements","setStatementName","setParameterMap","setDependentStatements","executeIftrue","setExecuteIftrue","iv","$300b3f08c1962aad$export$bc161170aa8ed47b","statementGroupName","statements","getStatementGroupName","setStatementGroupName","getStatements","setStatements","$0841f6803da1feb1$var$IN_SCHEMA","$0841f6803da1feb1$export$ac28d24969149b5c","getStepGroups","stepGroups","setStepGroups","getParts","setParts","$035c8de64001252d$export$84637ea037d2e218","argumentIndex","getArgumentIndex","setArgumentIndex"],"version":3,"file":"index.js.map"}
1
+ {"mappings":"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","sources":["src/engine/namespaces/Namespaces.ts","src/engine/util/NullCheck.ts","src/engine/json/schema/array/ArraySchemaType.ts","src/engine/json/schema/type/SchemaType.ts","src/engine/json/schema/type/Type.ts","src/engine/json/schema/type/MultipleType.ts","src/engine/json/schema/type/SingleType.ts","src/engine/json/schema/type/TypeUtil.ts","src/engine/json/schema/Schema.ts","src/engine/json/schema/validator/exception/SchemaReferenceException.ts","src/engine/model/ParameterType.ts","src/engine/model/Parameter.ts","src/engine/repository/KIRunSchemaRepository.ts","src/engine/util/mapEntry.ts","src/engine/util/MapUtil.ts","src/engine/model/Event.ts","src/engine/model/EventResult.ts","src/engine/exception/KIRuntimeException.ts","src/engine/model/FunctionOutput.ts","src/engine/model/FunctionSignature.ts","src/engine/util/string/StringFormatter.ts","src/engine/util/LinkedList.ts","src/engine/util/deepEqual.ts","src/engine/util/string/StringUtil.ts","src/engine/util/Tuples.ts","src/engine/json/schema/validator/exception/SchemaValidationException.ts","src/engine/json/schema/SchemaUtil.ts","src/engine/json/schema/validator/AnyOfAllOfOneOfValidator.ts","src/engine/json/schema/validator/ArrayValidator.ts","src/engine/json/schema/validator/BooleanValidator.ts","src/engine/json/schema/validator/NullValidator.ts","src/engine/json/schema/validator/NumberValidator.ts","src/engine/json/schema/validator/ObjectValidator.ts","src/engine/json/schema/string/StringFormat.ts","src/engine/json/schema/validator/StringValidator.ts","src/engine/json/schema/validator/TypeValidator.ts","src/engine/json/schema/validator/SchemaValidator.ts","src/engine/function/AbstractFunction.ts","src/engine/function/system/array/AbstractArrayFunction.ts","src/engine/function/system/array/Concatenate.ts","src/engine/function/system/array/AddFirst.ts","src/engine/function/system/array/ArrayToArrayOfObjects.ts","src/engine/exception/ExecutionException.ts","src/engine/util/primitive/PrimitiveUtil.ts","src/engine/function/system/array/BinarySearch.ts","src/engine/util/ArrayUtil.ts","src/engine/function/system/array/Compare.ts","src/engine/util/duplicate.ts","src/engine/function/system/array/Copy.ts","src/engine/function/system/array/Delete.ts","src/engine/function/system/array/DeleteFirst.ts","src/engine/function/system/array/DeleteFrom.ts","src/engine/function/system/array/DeleteLast.ts","src/engine/function/system/array/Disjoint.ts","src/engine/function/system/array/Equals.ts","src/engine/function/system/array/Fill.ts","src/engine/function/system/array/Frequency.ts","src/engine/function/system/array/IndexOf.ts","src/engine/function/system/array/IndexOfArray.ts","src/engine/function/system/array/LastIndexOf.ts","src/engine/function/system/array/LastIndexOfArray.ts","src/engine/function/system/array/Max.ts","src/engine/function/system/array/Min.ts","src/engine/function/system/array/MisMatch.ts","src/engine/function/system/array/Reverse.ts","src/engine/function/system/array/Rotate.ts","src/engine/function/system/array/Shuffle.ts","src/engine/function/system/array/Sort.ts","src/engine/function/system/array/SubArray.ts","src/engine/function/system/array/Insert.ts","src/engine/function/system/array/InsertLast.ts","src/engine/function/system/array/RemoveDuplicates.ts","src/engine/util/string/StringBuilder.ts","src/engine/runtime/expression/exception/ExpressionEvaluationException.ts","src/engine/runtime/expression/ExpressionToken.ts","src/engine/runtime/expression/ExpressionTokenValue.ts","src/engine/runtime/expression/Operation.ts","src/engine/runtime/expression/Expression.ts","src/engine/runtime/expression/tokenextractor/TokenValueExtractor.ts","src/engine/runtime/expression/tokenextractor/ObjectValueSetterExtractor.ts","src/engine/function/system/array/ArrayToObject.ts","src/engine/function/system/array/ArrayFunctionRepository.ts","src/engine/runtime/ContextElement.ts","src/engine/function/system/context/Create.ts","src/engine/function/system/context/Get.ts","src/engine/runtime/expression/operators/binary/BinaryOperator.ts","src/engine/runtime/expression/operators/binary/LogicalNullishCoalescingOperator.ts","src/engine/runtime/expression/operators/binary/ArithmeticAdditionOperator.ts","src/engine/runtime/expression/operators/binary/ArithmeticDivisionOperator.ts","src/engine/runtime/expression/operators/binary/ArithmeticInetgerDivisionOperator.ts","src/engine/runtime/expression/operators/binary/ArithmeticModulusOperator.ts","src/engine/runtime/expression/operators/binary/ArithmeticMultiplicationOperator.ts","src/engine/runtime/expression/operators/binary/ArithmeticSubtractionOperator.ts","src/engine/runtime/expression/operators/binary/ArrayOperator.ts","src/engine/runtime/expression/operators/binary/BitwiseAndOperator.ts","src/engine/runtime/expression/operators/binary/BitwiseLeftShiftOperator.ts","src/engine/runtime/expression/operators/binary/BitwiseOrOperator.ts","src/engine/runtime/expression/operators/binary/BitwiseRightShiftOperator.ts","src/engine/runtime/expression/operators/binary/BitwiseUnsignedRightShiftOperator.ts","src/engine/runtime/expression/operators/binary/BitwiseXorOperator.ts","src/engine/runtime/expression/operators/binary/LogicalAndOperator.ts","src/engine/runtime/expression/operators/binary/LogicalEqualOperator.ts","src/engine/runtime/expression/operators/binary/LogicalGreaterThanEqualOperator.ts","src/engine/runtime/expression/operators/binary/LogicalGreaterThanOperator.ts","src/engine/runtime/expression/operators/binary/LogicalLessThanEqualOperator.ts","src/engine/runtime/expression/operators/binary/LogicalLessThanOperator.ts","src/engine/runtime/expression/operators/binary/LogicalNotEqualOperator.ts","src/engine/runtime/expression/operators/binary/LogicalOrOperator.ts","src/engine/runtime/expression/operators/binary/ObjectOperator.ts","src/engine/runtime/expression/operators/unary/UnaryOperator.ts","src/engine/runtime/expression/operators/unary/ArithmeticUnaryMinusOperator.ts","src/engine/runtime/expression/operators/unary/ArithmeticUnaryPlusOperator.ts","src/engine/runtime/expression/operators/unary/BitwiseComplementOperator.ts","src/engine/runtime/expression/operators/unary/LogicalNotOperator.ts","src/engine/runtime/expression/tokenextractor/LiteralTokenValueExtractor.ts","src/engine/runtime/expression/operators/ternary/ConditionalTernaryOperator.ts","src/engine/runtime/expression/operators/ternary/TernaryOperator.ts","src/engine/runtime/expression/tokenextractor/ExpressionInternalValueExtractor.ts","src/engine/runtime/expression/ExpressionEvaluator.ts","src/engine/function/system/context/SetFunction.ts","src/engine/function/system/GenerateEvent.ts","src/engine/function/system/If.ts","src/engine/function/system/loop/Break.ts","src/engine/function/system/loop/CountLoop.ts","src/engine/function/system/loop/ForEachLoop.ts","src/engine/function/system/loop/RangeLoop.ts","src/engine/function/system/math/Add.ts","src/engine/function/system/math/GenericMathFunction.ts","src/engine/function/system/math/Hypotenuse.ts","src/engine/function/system/math/Maximum.ts","src/engine/function/system/math/Minimum.ts","src/engine/function/system/math/Random.ts","src/engine/function/system/math/RandomFloat.ts","src/engine/function/system/math/RandomInt.ts","src/engine/function/system/math/MathFunctionRepository.ts","src/engine/function/system/object/AbstractObjectFunction.ts","src/engine/function/system/object/ObjectFunctionRepository.ts","src/engine/function/system/object/ObjectValues.ts","src/engine/function/system/object/ObjectKeys.ts","src/engine/function/system/object/ObjectEntries.ts","src/engine/function/system/object/ObjectDeleteKey.ts","src/engine/function/system/object/ObjectPutValue.ts","src/engine/function/system/Print.ts","src/engine/function/system/string/AbstractStringFunction.ts","src/engine/function/system/string/Concatenate.ts","src/engine/function/system/string/DeleteForGivenLength.ts","src/engine/function/system/string/InsertAtGivenPosition.ts","src/engine/function/system/string/PostPad.ts","src/engine/function/system/string/PrePad.ts","src/engine/function/system/string/RegionMatches.ts","src/engine/function/system/string/ReplaceAtGivenPosition.ts","src/engine/function/system/string/Reverse.ts","src/engine/function/system/string/Split.ts","src/engine/function/system/string/ToString.ts","src/engine/function/system/string/TrimTo.ts","src/engine/function/system/string/StringFunctionRepository.ts","src/engine/HybridRepository.ts","src/engine/repository/KIRunFunctionRepository.ts","src/engine/runtime/StatementMessage.ts","src/engine/runtime/StatementExecution.ts","src/engine/runtime/tokenextractor/ContextTokenValueExtractor.ts","src/engine/runtime/tokenextractor/OutputMapTokenValueExtractor.ts","src/engine/runtime/tokenextractor/ArgumentsTokenValueExtractor.ts","src/engine/runtime/graph/ExecutionGraph.ts","src/engine/runtime/graph/GraphVertex.ts","src/engine/json/JsonExpression.ts","src/engine/model/ParameterReferenceType.ts","src/engine/util/UUID.ts","src/engine/runtime/FunctionExecutionParameters.ts","src/engine/runtime/StatementMessageType.ts","src/engine/runtime/KIRuntime.ts","src/engine/constant/KIRunConstants.ts","src/engine/model/Position.ts","src/engine/model/AbstractStatement.ts","src/engine/model/ParameterReference.ts","src/engine/model/Statement.ts","src/engine/model/StatementGroup.ts","src/engine/model/FunctionDefinition.ts","src/engine/model/Argument.ts"],"sourcesContent":["export class Namespaces {\n public static readonly SYSTEM: string = 'System';\n public static readonly SYSTEM_CTX: string = 'System.Context';\n public static readonly SYSTEM_LOOP: string = 'System.Loop';\n public static readonly SYSTEM_ARRAY: string = 'System.Array';\n public static readonly SYSTEM_OBJECT: string = 'System.Object';\n\n public static readonly MATH: string = 'System.Math';\n public static readonly STRING: string = 'System.String';\n\n private constructor() {}\n}\n","export function isNullValue(v: any): boolean {\n return v === null || v === undefined;\n}\n","import { isNullValue } from '../../../util/NullCheck';\nimport { Schema } from '../Schema';\n\nexport class ArraySchemaType {\n private singleSchema: Schema | undefined;\n private tupleSchema: Schema[] | undefined;\n\n public constructor(ast?: ArraySchemaType) {\n if (!ast) return;\n this.singleSchema = ast.singleSchema ? new Schema(ast.singleSchema) : undefined;\n this.tupleSchema = ast.tupleSchema ? ast.tupleSchema.map((e) => new Schema(e)) : undefined;\n }\n\n public setSingleSchema(schema: Schema): ArraySchemaType {\n this.singleSchema = schema;\n return this;\n }\n\n public setTupleSchema(schemas: Schema[]): ArraySchemaType {\n this.tupleSchema = schemas;\n return this;\n }\n\n public getSingleSchema(): Schema | undefined {\n return this.singleSchema;\n }\n\n public getTupleSchema(): Schema[] | undefined {\n return this.tupleSchema;\n }\n\n public isSingleType(): boolean {\n return !isNullValue(this.singleSchema);\n }\n\n public static of(...schemas: Schema[]): ArraySchemaType {\n if (schemas.length == 1) return new ArraySchemaType().setSingleSchema(schemas[0]);\n\n return new ArraySchemaType().setTupleSchema(schemas);\n }\n\n public static from(obj: any): ArraySchemaType | undefined {\n if (!obj) return undefined;\n if (Array.isArray(obj))\n return new ArraySchemaType().setTupleSchema(Schema.fromListOfSchemas(obj)!);\n\n let keys: any[] = Object.keys(obj);\n\n if (keys.indexOf('singleSchema') != -1) {\n return new ArraySchemaType().setSingleSchema(Schema.from(obj['singleSchema'])!);\n } else if (keys.indexOf('tupleSchema') != -1) {\n return new ArraySchemaType().setTupleSchema(\n Schema.fromListOfSchemas(obj['tupleSchema'])!,\n );\n }\n\n let x = Schema.from(obj);\n if (!x) return undefined;\n return new ArraySchemaType().setSingleSchema(x);\n }\n}\n","export enum SchemaType {\n INTEGER = 'Integer',\n LONG = 'Long',\n FLOAT = 'Float',\n DOUBLE = 'Double',\n STRING = 'String',\n OBJECT = 'Object',\n ARRAY = 'Array',\n BOOLEAN = 'Boolean',\n NULL = 'Null',\n}\n","import { SchemaType } from './SchemaType';\n\nexport abstract class Type {\n public abstract getAllowedSchemaTypes(): Set<SchemaType>;\n public abstract contains(type: SchemaType): boolean;\n}\n","import { SchemaType } from './SchemaType';\nimport { Type } from './Type';\n\nexport class MultipleType extends Type {\n private type: Set<SchemaType>;\n\n public constructor(type: Set<SchemaType> | MultipleType) {\n super();\n\n if (type instanceof MultipleType)\n this.type = new Set(Array.from((type as MultipleType).type));\n else this.type = new Set(Array.from(type));\n }\n\n public getType(): Set<SchemaType> {\n return this.type;\n }\n\n public setType(type: Set<SchemaType>): MultipleType {\n this.type = type;\n return this;\n }\n\n public getAllowedSchemaTypes(): Set<SchemaType> {\n return this.type;\n }\n\n public contains(type: SchemaType): boolean {\n return this.type?.has(type);\n }\n}\n","import { SchemaType } from './SchemaType';\nimport { Type } from './Type';\n\nexport class SingleType extends Type {\n private type: SchemaType;\n\n public constructor(type: SchemaType | SingleType) {\n super();\n\n if (type instanceof SingleType) this.type = (type as SingleType).type;\n else this.type = type as SchemaType;\n }\n\n public getType(): SchemaType {\n return this.type;\n }\n\n public getAllowedSchemaTypes(): Set<SchemaType> {\n return new Set([this.type]);\n }\n\n public contains(type: SchemaType): boolean {\n return this.type == type;\n }\n}\n","import { MultipleType } from './MultipleType';\nimport { SchemaType } from './SchemaType';\nimport { SingleType } from './SingleType';\nimport { Type } from './Type';\n\nexport class TypeUtil {\n public static of(...types: SchemaType[]): Type {\n if (types.length == 1) return new SingleType(types[0]);\n\n return new MultipleType(new Set(types));\n }\n\n public static from(types: any): Type | undefined {\n if (typeof types === 'string') {\n return new SingleType(SchemaType[types as keyof typeof SchemaType]);\n } else if (Array.isArray(types)) {\n return new MultipleType(\n new Set(types.map((e) => e as keyof typeof SchemaType).map((e) => SchemaType[e])),\n );\n }\n return undefined;\n }\n}\n","import { Namespaces } from '../../namespaces/Namespaces';\nimport { ArraySchemaType } from './array/ArraySchemaType';\nimport { StringFormat } from './string/StringFormat';\nimport { SchemaType } from './type/SchemaType';\nimport { TypeUtil } from './type/TypeUtil';\nimport { Type } from './type/Type';\nimport { isNullValue } from '../../util/NullCheck';\nimport { SingleType } from './type/SingleType';\nimport { MultipleType } from './type/MultipleType';\n\nconst ADDITIONAL_PROPERTY: string = 'additionalProperty';\nconst ADDITIONAL_ITEMS: string = 'additionalItems';\nconst ENUMS: string = 'enums';\nconst ITEMS_STRING: string = 'items';\nconst SCHEMA_ROOT_PATH: string = 'System.Schema';\nconst REQUIRED_STRING: string = 'required';\nconst VERSION_STRING: string = 'version';\nconst NAMESPACE_STRING: string = 'namespace';\nconst TEMPORARY: string = '_';\n\nexport class AdditionalType {\n private booleanValue?: boolean;\n private schemaValue?: Schema;\n\n constructor(apt: AdditionalType | undefined = undefined) {\n if (!apt) return;\n this.booleanValue = apt.booleanValue;\n if (!apt.schemaValue) return;\n this.schemaValue = new Schema(apt.schemaValue);\n }\n\n public getBooleanValue(): boolean | undefined {\n return this.booleanValue;\n }\n\n public getSchemaValue(): Schema | undefined {\n return this.schemaValue;\n }\n\n public setBooleanValue(booleanValue: boolean): AdditionalType {\n this.booleanValue = booleanValue;\n return this;\n }\n\n public setSchemaValue(schemaValue: Schema): AdditionalType {\n this.schemaValue = schemaValue;\n return this;\n }\n\n public static from(obj: any): AdditionalType | undefined {\n if (isNullValue(obj)) return undefined;\n const ad = new AdditionalType();\n if (typeof obj === 'boolean') ad.booleanValue = obj;\n else {\n let keys = Object.keys(obj);\n if (keys.indexOf('booleanValue') != -1) ad.booleanValue = obj.booleanValue;\n else if (keys.indexOf('schemaValue') != -1)\n ad.schemaValue = Schema.from(obj.schemaValue);\n else ad.schemaValue = Schema.from(obj);\n }\n return ad;\n }\n}\n\nexport class Schema {\n public static readonly NULL: Schema = new Schema()\n .setNamespace(Namespaces.SYSTEM)\n .setName('Null')\n .setType(TypeUtil.of(SchemaType.NULL))\n .setConstant(undefined);\n\n private static readonly TYPE_SCHEMA: Schema = new Schema()\n .setType(TypeUtil.of(SchemaType.STRING))\n .setEnums([\n 'INTEGER',\n 'LONG',\n 'FLOAT',\n 'DOUBLE',\n 'STRING',\n 'OBJECT',\n 'ARRAY',\n 'BOOLEAN',\n 'NULL',\n ]);\n\n public static readonly SCHEMA: Schema = new Schema()\n .setNamespace(Namespaces.SYSTEM)\n .setName('Schema')\n .setType(TypeUtil.of(SchemaType.OBJECT))\n .setProperties(\n new Map<string, Schema>([\n [\n NAMESPACE_STRING,\n Schema.of(NAMESPACE_STRING, SchemaType.STRING).setDefaultValue(TEMPORARY),\n ],\n ['name', Schema.ofString('name')],\n [VERSION_STRING, Schema.of(VERSION_STRING, SchemaType.INTEGER).setDefaultValue(1)],\n ['ref', Schema.ofString('ref')],\n [\n 'type',\n new Schema().setAnyOf([\n Schema.TYPE_SCHEMA,\n Schema.ofArray('type', Schema.TYPE_SCHEMA),\n ]),\n ],\n ['anyOf', Schema.ofArray('anyOf', Schema.ofRef(SCHEMA_ROOT_PATH))],\n ['allOf', Schema.ofArray('allOf', Schema.ofRef(SCHEMA_ROOT_PATH))],\n ['oneOf', Schema.ofArray('oneOf', Schema.ofRef(SCHEMA_ROOT_PATH))],\n\n ['not', Schema.ofRef(SCHEMA_ROOT_PATH)],\n ['title', Schema.ofString('title')],\n ['description', Schema.ofString('description')],\n ['id', Schema.ofString('id')],\n ['examples', Schema.ofAny('examples')],\n ['defaultValue', Schema.ofAny('defaultValue')],\n ['comment', Schema.ofString('comment')],\n [ENUMS, Schema.ofArray(ENUMS, Schema.ofString(ENUMS))],\n ['constant', Schema.ofAny('constant')],\n\n ['pattern', Schema.ofString('pattern')],\n [\n 'format',\n Schema.of('format', SchemaType.STRING).setEnums([\n 'DATETIME',\n 'TIME',\n 'DATE',\n 'EMAIL',\n 'REGEX',\n ]),\n ],\n ['minLength', Schema.ofInteger('minLength')],\n ['maxLength', Schema.ofInteger('maxLength')],\n\n ['multipleOf', Schema.ofLong('multipleOf')],\n ['minimum', Schema.ofNumber('minimum')],\n ['maximum', Schema.ofNumber('maximum')],\n ['exclusiveMinimum', Schema.ofNumber('exclusiveMinimum')],\n ['exclusiveMaximum', Schema.ofNumber('exclusiveMaximum')],\n\n [\n 'properties',\n Schema.of('properties', SchemaType.OBJECT).setAdditionalProperties(\n new AdditionalType().setSchemaValue(Schema.ofRef(SCHEMA_ROOT_PATH)),\n ),\n ],\n [\n 'additionalProperties',\n new Schema()\n .setName(ADDITIONAL_PROPERTY)\n .setNamespace(Namespaces.SYSTEM)\n .setAnyOf([\n Schema.ofBoolean(ADDITIONAL_PROPERTY),\n Schema.ofObject(ADDITIONAL_PROPERTY).setRef(SCHEMA_ROOT_PATH),\n ])\n .setDefaultValue(true),\n ],\n [\n REQUIRED_STRING,\n Schema.ofArray(\n REQUIRED_STRING,\n Schema.ofString(REQUIRED_STRING),\n ).setDefaultValue([]),\n ],\n ['propertyNames', Schema.ofRef(SCHEMA_ROOT_PATH)],\n ['minProperties', Schema.ofInteger('minProperties')],\n ['maxProperties', Schema.ofInteger('maxProperties')],\n [\n 'patternProperties',\n Schema.of('patternProperties', SchemaType.OBJECT).setAdditionalProperties(\n new AdditionalType().setSchemaValue(Schema.ofRef(SCHEMA_ROOT_PATH)),\n ),\n ],\n\n [\n ITEMS_STRING,\n new Schema()\n .setName(ITEMS_STRING)\n .setAnyOf([\n Schema.ofRef(SCHEMA_ROOT_PATH).setName('item'),\n Schema.ofArray('tuple', Schema.ofRef(SCHEMA_ROOT_PATH)),\n ]),\n ],\n\n ['contains', Schema.ofRef(SCHEMA_ROOT_PATH)],\n ['minContains', Schema.ofInteger('minContains')],\n ['maxContains', Schema.ofInteger('maxContains')],\n ['minItems', Schema.ofInteger('minItems')],\n ['maxItems', Schema.ofInteger('maxItems')],\n ['uniqueItems', Schema.ofBoolean('uniqueItems')],\n [\n 'additionalItems',\n new Schema()\n .setName(ADDITIONAL_ITEMS)\n .setNamespace(Namespaces.SYSTEM)\n .setAnyOf([\n Schema.ofBoolean(ADDITIONAL_ITEMS),\n Schema.ofObject(ADDITIONAL_ITEMS).setRef(SCHEMA_ROOT_PATH),\n ]),\n ],\n [\n '$defs',\n Schema.of('$defs', SchemaType.OBJECT).setAdditionalProperties(\n new AdditionalType().setSchemaValue(Schema.ofRef(SCHEMA_ROOT_PATH)),\n ),\n ],\n\n ['permission', Schema.ofString('permission')],\n ]),\n )\n .setRequired([]);\n\n public static ofString(id: string): Schema {\n return new Schema().setType(TypeUtil.of(SchemaType.STRING)).setName(id);\n }\n\n public static ofInteger(id: string): Schema {\n return new Schema().setType(TypeUtil.of(SchemaType.INTEGER)).setName(id);\n }\n\n public static ofFloat(id: string): Schema {\n return new Schema().setType(TypeUtil.of(SchemaType.FLOAT)).setName(id);\n }\n\n public static ofLong(id: string): Schema {\n return new Schema().setType(TypeUtil.of(SchemaType.LONG)).setName(id);\n }\n\n public static ofDouble(id: string): Schema {\n return new Schema().setType(TypeUtil.of(SchemaType.DOUBLE)).setName(id);\n }\n\n public static ofAny(id: string): Schema {\n return new Schema()\n .setType(\n TypeUtil.of(\n SchemaType.INTEGER,\n SchemaType.LONG,\n SchemaType.FLOAT,\n SchemaType.DOUBLE,\n SchemaType.STRING,\n SchemaType.BOOLEAN,\n SchemaType.ARRAY,\n SchemaType.NULL,\n SchemaType.OBJECT,\n ),\n )\n .setName(id);\n }\n\n public static ofAnyNotNull(id: string): Schema {\n return new Schema()\n .setType(\n TypeUtil.of(\n SchemaType.INTEGER,\n SchemaType.LONG,\n SchemaType.FLOAT,\n SchemaType.DOUBLE,\n SchemaType.STRING,\n SchemaType.BOOLEAN,\n SchemaType.ARRAY,\n SchemaType.OBJECT,\n ),\n )\n .setName(id);\n }\n\n public static ofNumber(id: string): Schema {\n return new Schema()\n .setType(\n TypeUtil.of(\n SchemaType.INTEGER,\n SchemaType.LONG,\n SchemaType.FLOAT,\n SchemaType.DOUBLE,\n ),\n )\n .setName(id);\n }\n\n public static ofBoolean(id: string): Schema {\n return new Schema().setType(TypeUtil.of(SchemaType.BOOLEAN)).setName(id);\n }\n\n public static of(id: string, ...types: SchemaType[]): Schema {\n return new Schema().setType(TypeUtil.of(...types)).setName(id);\n }\n\n public static ofObject(id: string): Schema {\n return new Schema().setType(TypeUtil.of(SchemaType.OBJECT)).setName(id);\n }\n\n public static ofRef(ref: string): Schema {\n return new Schema().setRef(ref);\n }\n\n public static ofArray(id: string, ...itemSchemas: Schema[]): Schema {\n return new Schema()\n .setType(TypeUtil.of(SchemaType.ARRAY))\n .setName(id)\n .setItems(ArraySchemaType.of(...itemSchemas));\n }\n\n public static fromListOfSchemas(list: any): Schema[] | undefined {\n if (isNullValue(list) && !Array.isArray(list)) return undefined;\n let x: Schema[] = [];\n for (let e of Array.from(list)) {\n let v = Schema.from(e);\n if (!v) continue;\n x.push(v);\n }\n\n return x;\n }\n\n public static fromMapOfSchemas(map: any): Map<string, Schema> | undefined {\n if (isNullValue(map)) return undefined;\n const retMap = new Map<string, Schema>();\n\n Object.entries(map).forEach(([k, v]) => {\n let value = Schema.from(v);\n if (!value) return;\n retMap.set(k, value);\n });\n\n return retMap;\n }\n\n public static from(obj: any, isStringSchema: boolean = false): Schema | undefined {\n if (isNullValue(obj)) return undefined;\n\n let schema: Schema = new Schema();\n schema.namespace = obj.namespace ?? TEMPORARY;\n schema.name = obj.name;\n\n schema.version = obj.version ?? 1;\n\n schema.ref = obj.ref;\n\n if (!isStringSchema) schema.type = TypeUtil.from(obj.type);\n else schema.type = new SingleType(SchemaType.STRING);\n\n schema.anyOf = Schema.fromListOfSchemas(obj.anyOf);\n schema.allOf = Schema.fromListOfSchemas(obj.allOf);\n schema.oneOf = Schema.fromListOfSchemas(obj.oneOf);\n schema.not = Schema.from(obj.not);\n\n schema.description = obj.description;\n schema.examples = obj.examples ? [...obj.examples] : undefined;\n schema.defaultValue = obj.defaultValue;\n schema.comment = obj.comment;\n schema.enums = obj.enums ? [...obj.enums] : undefined;\n schema.constant = obj.constant;\n\n // String\n schema.pattern = obj.pattern;\n schema.format = obj.format;\n schema.minLength = obj.minLength;\n schema.maxLength = obj.maxLength;\n\n // Number\n schema.multipleOf = obj.multipleOf;\n schema.minimum = obj.minimum;\n schema.maximum = obj.maximum;\n schema.exclusiveMinimum = obj.exclusiveMinimum;\n schema.exclusiveMaximum = obj.exclusiveMaximum;\n\n // Object\n schema.properties = Schema.fromMapOfSchemas(obj.properties);\n schema.additionalProperties = AdditionalType.from(obj.additionalProperties);\n schema.required = obj.required;\n schema.propertyNames = Schema.from(obj.propertyNames, true);\n schema.minProperties = obj.minProperties;\n schema.maxProperties = obj.maxProperties;\n schema.patternProperties = Schema.fromMapOfSchemas(obj.patternProperties);\n\n // Array\n schema.items = ArraySchemaType.from(obj.items);\n schema.additionalItems = AdditionalType.from(obj.additionalItems);\n schema.contains = Schema.from(obj.contains);\n schema.minContains = obj.minContains;\n schema.maxContains = obj.maxContains;\n schema.minItems = obj.minItems;\n schema.maxItems = obj.maxItems;\n schema.uniqueItems = obj.uniqueItems;\n\n schema.$defs = Schema.fromMapOfSchemas(obj.$defs);\n schema.permission = obj.permission;\n\n return schema;\n }\n\n private namespace: string = TEMPORARY;\n private name?: string;\n\n private version: number = 1;\n\n private ref?: string;\n\n private type?: Type;\n private anyOf?: Schema[];\n private allOf?: Schema[];\n private oneOf?: Schema[];\n private not?: Schema;\n\n private description?: string;\n private examples?: any[];\n private defaultValue?: any;\n private comment?: string;\n private enums?: any[];\n private constant?: any;\n\n // String\n private pattern?: string;\n private format?: StringFormat;\n private minLength?: number;\n private maxLength?: number;\n\n // Number\n private multipleOf?: number;\n private minimum?: number;\n private maximum?: number;\n private exclusiveMinimum?: number;\n private exclusiveMaximum?: number;\n\n // Object\n private properties?: Map<string, Schema>;\n private additionalProperties?: AdditionalType;\n private required?: string[];\n private propertyNames?: Schema;\n private minProperties?: number;\n private maxProperties?: number;\n private patternProperties?: Map<string, Schema>;\n\n // Array\n private items?: ArraySchemaType;\n private additionalItems?: AdditionalType;\n private contains?: Schema;\n private minContains?: number;\n private maxContains?: number;\n private minItems?: number;\n private maxItems?: number;\n private uniqueItems?: boolean;\n\n private $defs?: Map<string, Schema>;\n private permission?: string;\n\n public constructor(schema?: Schema) {\n if (!schema) return;\n\n this.namespace = schema.namespace;\n this.name = schema.name;\n\n this.version = schema.version;\n this.ref = schema.ref;\n\n this.type =\n schema.type instanceof SingleType\n ? new SingleType(schema.type as SingleType)\n : new MultipleType(schema.type as MultipleType);\n\n this.anyOf = schema.anyOf?.map((x) => new Schema(x));\n\n this.allOf = schema.allOf?.map((x) => new Schema(x));\n this.oneOf = schema.oneOf?.map((x) => new Schema(x));\n\n this.not = this.not ? new Schema(this.not) : undefined;\n\n this.description = schema.description;\n this.examples = schema.examples ? JSON.parse(JSON.stringify(schema.examples)) : undefined;\n\n this.defaultValue = schema.defaultValue\n ? JSON.parse(JSON.stringify(schema.defaultValue))\n : undefined;\n this.comment = schema.comment;\n this.enums = schema.enums ? [...schema.enums] : undefined;\n this.constant = schema.constant ? JSON.parse(JSON.stringify(schema.constant)) : undefined;\n\n this.pattern = schema.pattern;\n this.format = schema.format;\n\n this.minLength = schema.minLength;\n this.maxLength = schema.maxLength;\n\n this.multipleOf = schema.multipleOf;\n this.minimum = schema.minimum;\n this.maximum = schema.maximum;\n this.exclusiveMinimum = schema.exclusiveMinimum;\n this.exclusiveMaximum = schema.exclusiveMaximum;\n\n this.properties = schema.properties\n ? new Map(Array.from(schema.properties.entries()).map((e) => [e[0], new Schema(e[1])]))\n : undefined;\n\n this.additionalProperties = schema.additionalProperties\n ? new AdditionalType(schema.additionalProperties)\n : undefined;\n\n this.required = schema.required ? [...schema.required] : undefined;\n\n this.propertyNames = schema.propertyNames ? new Schema(schema.propertyNames) : undefined;\n this.minProperties = schema.minProperties;\n this.maxProperties = schema.maxProperties;\n\n this.patternProperties = schema.patternProperties\n ? new Map(\n Array.from(schema.patternProperties.entries()).map((e) => [\n e[0],\n new Schema(e[1]),\n ]),\n )\n : undefined;\n\n this.items = schema.items ? new ArraySchemaType(schema.items) : undefined;\n this.contains = schema.contains ? new Schema(this.contains) : undefined;\n this.minContains = schema.minContains;\n this.maxContains = schema.maxContains;\n this.minItems = schema.minItems;\n this.maxItems = schema.maxItems;\n this.uniqueItems = schema.uniqueItems;\n this.additionalItems = schema.additionalItems\n ? new AdditionalType(schema.additionalItems)\n : undefined;\n\n this.$defs = schema.$defs\n ? new Map(Array.from(schema.$defs.entries()).map((e) => [e[0], new Schema(e[1])]))\n : undefined;\n\n this.permission = schema.permission;\n }\n\n public getTitle(): string | undefined {\n if (!this.namespace || this.namespace == TEMPORARY) return this.name;\n\n return this.namespace + '.' + this.name;\n }\n\n public getFullName(): string {\n return this.namespace + '.' + this.name;\n }\n\n public get$defs(): Map<string, Schema> | undefined {\n return this.$defs;\n }\n\n public set$defs($defs: Map<string, Schema>): Schema {\n this.$defs = $defs;\n return this;\n }\n\n public getNamespace(): string {\n return this.namespace;\n }\n public setNamespace(namespace: string): Schema {\n this.namespace = namespace;\n return this;\n }\n public getName(): string | undefined {\n return this.name;\n }\n public setName(name: string): Schema {\n this.name = name;\n return this;\n }\n public getVersion(): number {\n return this.version;\n }\n public setVersion(version: number): Schema {\n this.version = version;\n return this;\n }\n public getRef(): string | undefined {\n return this.ref;\n }\n public setRef(ref: string): Schema {\n this.ref = ref;\n return this;\n }\n public getType(): Type | undefined {\n return this.type;\n }\n public setType(type: Type): Schema {\n this.type = type;\n return this;\n }\n public getAnyOf(): Schema[] | undefined {\n return this.anyOf;\n }\n public setAnyOf(anyOf: Schema[]): Schema {\n this.anyOf = anyOf;\n return this;\n }\n public getAllOf(): Schema[] | undefined {\n return this.allOf;\n }\n public setAllOf(allOf: Schema[]): Schema {\n this.allOf = allOf;\n return this;\n }\n public getOneOf(): Schema[] | undefined {\n return this.oneOf;\n }\n public setOneOf(oneOf: Schema[]): Schema {\n this.oneOf = oneOf;\n return this;\n }\n public getNot(): Schema | undefined {\n return this.not;\n }\n public setNot(not: Schema): Schema {\n this.not = not;\n return this;\n }\n public getDescription(): string | undefined {\n return this.description;\n }\n public setDescription(description: string): Schema {\n this.description = description;\n return this;\n }\n public getExamples(): any[] | undefined {\n return this.examples;\n }\n public setExamples(examples: any[]): Schema {\n this.examples = examples;\n return this;\n }\n public getDefaultValue(): any {\n return this.defaultValue;\n }\n public setDefaultValue(defaultValue: any): Schema {\n this.defaultValue = defaultValue;\n return this;\n }\n public getComment(): string | undefined {\n return this.comment;\n }\n public setComment(comment: string): Schema {\n this.comment = comment;\n return this;\n }\n public getEnums(): any[] | undefined {\n return this.enums;\n }\n public setEnums(enums: any[]): Schema {\n this.enums = enums;\n return this;\n }\n public getConstant(): any {\n return this.constant;\n }\n public setConstant(constant: any): Schema {\n this.constant = constant;\n return this;\n }\n public getPattern(): string | undefined {\n return this.pattern;\n }\n public setPattern(pattern: string): Schema {\n this.pattern = pattern;\n return this;\n }\n public getFormat(): StringFormat | undefined {\n return this.format;\n }\n public setFormat(format: StringFormat): Schema {\n this.format = format;\n return this;\n }\n public getMinLength(): number | undefined {\n return this.minLength;\n }\n public setMinLength(minLength: number): Schema {\n this.minLength = minLength;\n return this;\n }\n public getMaxLength(): number | undefined {\n return this.maxLength;\n }\n public setMaxLength(maxLength: number): Schema {\n this.maxLength = maxLength;\n return this;\n }\n public getMultipleOf(): number | undefined {\n return this.multipleOf;\n }\n public setMultipleOf(multipleOf: number): Schema {\n this.multipleOf = multipleOf;\n return this;\n }\n public getMinimum(): number | undefined {\n return this.minimum;\n }\n public setMinimum(minimum: number): Schema {\n this.minimum = minimum;\n return this;\n }\n public getMaximum(): number | undefined {\n return this.maximum;\n }\n public setMaximum(maximum: number): Schema {\n this.maximum = maximum;\n return this;\n }\n public getExclusiveMinimum(): number | undefined {\n return this.exclusiveMinimum;\n }\n public setExclusiveMinimum(exclusiveMinimum: number): Schema {\n this.exclusiveMinimum = exclusiveMinimum;\n return this;\n }\n public getExclusiveMaximum(): number | undefined {\n return this.exclusiveMaximum;\n }\n public setExclusiveMaximum(exclusiveMaximum: number): Schema {\n this.exclusiveMaximum = exclusiveMaximum;\n return this;\n }\n public getProperties(): Map<string, Schema> | undefined {\n return this.properties;\n }\n public setProperties(properties: Map<string, Schema>): Schema {\n this.properties = properties;\n return this;\n }\n public getAdditionalProperties(): AdditionalType | undefined {\n return this.additionalProperties;\n }\n public setAdditionalProperties(additionalProperties: AdditionalType): Schema {\n this.additionalProperties = additionalProperties;\n return this;\n }\n\n public getAdditionalItems(): AdditionalType | undefined {\n return this.additionalItems;\n }\n public setAdditionalItems(additionalItems: AdditionalType): Schema {\n this.additionalItems = additionalItems;\n return this;\n }\n\n public getRequired(): string[] | undefined {\n return this.required;\n }\n public setRequired(required: string[]): Schema {\n this.required = required;\n return this;\n }\n public getPropertyNames(): Schema | undefined {\n return this.propertyNames;\n }\n public setPropertyNames(propertyNames: Schema): Schema {\n this.propertyNames = propertyNames;\n this.propertyNames.type = new SingleType(SchemaType.STRING);\n return this;\n }\n public getMinProperties(): number | undefined {\n return this.minProperties;\n }\n public setMinProperties(minProperties: number): Schema {\n this.minProperties = minProperties;\n return this;\n }\n public getMaxProperties(): number | undefined {\n return this.maxProperties;\n }\n public setMaxProperties(maxProperties: number): Schema {\n this.maxProperties = maxProperties;\n return this;\n }\n public getPatternProperties(): Map<string, Schema> | undefined {\n return this.patternProperties;\n }\n public setPatternProperties(patternProperties: Map<string, Schema>): Schema {\n this.patternProperties = patternProperties;\n return this;\n }\n public getItems(): ArraySchemaType | undefined {\n return this.items;\n }\n public setItems(items: ArraySchemaType): Schema {\n this.items = items;\n return this;\n }\n public getContains(): Schema | undefined {\n return this.contains;\n }\n public setContains(contains: Schema): Schema {\n this.contains = contains;\n return this;\n }\n\n public getMinContains(): number | undefined {\n return this.minContains;\n }\n\n public setMinContains(minContains: number): Schema {\n this.minContains = minContains;\n return this;\n }\n\n public getMaxContains(): number | undefined {\n return this.maxContains;\n }\n\n public setMaxContains(maxContains: number): Schema {\n this.maxContains = maxContains;\n return this;\n }\n\n public getMinItems(): number | undefined {\n return this.minItems;\n }\n public setMinItems(minItems: number): Schema {\n this.minItems = minItems;\n return this;\n }\n public getMaxItems(): number | undefined {\n return this.maxItems;\n }\n public setMaxItems(maxItems: number): Schema {\n this.maxItems = maxItems;\n return this;\n }\n public getUniqueItems(): boolean | undefined {\n return this.uniqueItems;\n }\n public setUniqueItems(uniqueItems: boolean): Schema {\n this.uniqueItems = uniqueItems;\n return this;\n }\n public getPermission(): string | undefined {\n return this.permission;\n }\n public setPermission(permission: string): Schema {\n this.permission = permission;\n return this;\n }\n}\n","export class SchemaReferenceException extends Error {\n private schemaPath: string;\n private cause?: Error;\n\n constructor(schemaPath: string, message: string, err?: Error) {\n super(schemaPath.trim() ? schemaPath + '-' + message : message);\n\n this.schemaPath = schemaPath;\n this.cause = err;\n }\n\n public getSchemaPath(): string {\n return this.schemaPath;\n }\n\n public getCause(): Error | undefined {\n return this.cause;\n }\n}\n","export enum ParameterType {\n CONSTANT = 'CONSTANT',\n EXPRESSION = 'EXPRESSION',\n}\n","import { Schema } from '../json/schema/Schema';\nimport { SchemaType } from '../json/schema/type/SchemaType';\nimport { TypeUtil } from '../json/schema/type/TypeUtil';\nimport { SchemaReferenceException } from '../json/schema/validator/exception/SchemaReferenceException';\nimport { Namespaces } from '../namespaces/Namespaces';\nimport { ParameterType } from './ParameterType';\n\nconst VALUE: string = 'value';\n\nexport class Parameter {\n private static readonly SCHEMA_NAME: string = 'Parameter';\n\n public static readonly SCHEMA: Schema = new Schema()\n .setNamespace(Namespaces.SYSTEM)\n .setName(Parameter.SCHEMA_NAME)\n .setProperties(\n new Map([\n ['schema', Schema.SCHEMA],\n ['parameterName', Schema.ofString('parameterName')],\n [\n 'variableArgument',\n Schema.of('variableArgument', SchemaType.BOOLEAN).setDefaultValue(false),\n ],\n ['type', Schema.ofString('type').setEnums(['EXPRESSION', 'CONSTANT'])],\n ]),\n );\n\n // Place holder for the expression parameter when required to represent an expression in the value.\n public static readonly EXPRESSION: Schema = new Schema()\n .setNamespace(Namespaces.SYSTEM)\n .setName('ParameterExpression')\n .setType(TypeUtil.of(SchemaType.OBJECT))\n .setProperties(\n new Map([\n ['isExpression', Schema.ofBoolean('isExpression').setDefaultValue(true)],\n [VALUE, Schema.ofAny(VALUE)],\n ]),\n );\n\n private schema: Schema;\n\n private parameterName: string;\n private variableArgument: boolean = false;\n private type: ParameterType = ParameterType.EXPRESSION;\n\n constructor(pn: string | Parameter, schema?: Schema) {\n if (pn instanceof Parameter) {\n this.schema = new Schema(pn.schema);\n this.parameterName = pn.parameterName;\n this.variableArgument = pn.variableArgument;\n this.type = pn.type;\n } else {\n if (!schema) {\n throw new Error('Unknown constructor signature');\n }\n this.schema = schema;\n this.parameterName = pn;\n }\n }\n\n public getSchema(): Schema {\n return this.schema;\n }\n public setSchema(schema: Schema): Parameter {\n this.schema = schema;\n return this;\n }\n public getParameterName(): string {\n return this.parameterName;\n }\n public setParameterName(parameterName: string): Parameter {\n this.parameterName = parameterName;\n return this;\n }\n public isVariableArgument(): boolean {\n return this.variableArgument;\n }\n public setVariableArgument(variableArgument: boolean): Parameter {\n this.variableArgument = variableArgument;\n return this;\n }\n public getType(): ParameterType {\n return this.type;\n }\n public setType(type: ParameterType): Parameter {\n this.type = type;\n return this;\n }\n\n public static ofEntry(\n name: string,\n schema: Schema,\n variableArgument: boolean = false,\n type: ParameterType = ParameterType.EXPRESSION,\n ): [string, Parameter] {\n return [\n name,\n new Parameter(name, schema).setType(type).setVariableArgument(variableArgument),\n ];\n }\n\n public static of(\n name: string,\n schema: Schema,\n variableArgument: boolean = false,\n type: ParameterType = ParameterType.EXPRESSION,\n ): Parameter {\n return new Parameter(name, schema).setType(type).setVariableArgument(variableArgument);\n }\n\n public static from(json: any): Parameter {\n const paramSchema = Schema.from(json.schema);\n if (!paramSchema) throw new SchemaReferenceException('', 'Parameter requires Schema');\n return new Parameter(json.parameterName, paramSchema)\n .setVariableArgument(!!json.variableArguments)\n .setType(json.type ?? ParameterType.EXPRESSION);\n }\n}\n","import { Schema } from '../json/schema/Schema';\nimport { Parameter } from '../model/Parameter';\nimport { Namespaces } from '../namespaces/Namespaces';\nimport { Repository } from '../Repository';\n\nconst map: Map<string, Schema> = new Map([\n ['any', Schema.ofAny('any').setNamespace(Namespaces.SYSTEM)],\n ['boolean', Schema.ofBoolean('boolean').setNamespace(Namespaces.SYSTEM)],\n ['double', Schema.ofDouble('double').setNamespace(Namespaces.SYSTEM)],\n ['float', Schema.ofFloat('float').setNamespace(Namespaces.SYSTEM)],\n ['integer', Schema.ofInteger('integer').setNamespace(Namespaces.SYSTEM)],\n ['long', Schema.ofLong('long').setNamespace(Namespaces.SYSTEM)],\n ['number', Schema.ofNumber('number').setNamespace(Namespaces.SYSTEM)],\n ['string', Schema.ofString('string').setNamespace(Namespaces.SYSTEM)],\n [Parameter.EXPRESSION.getName()!, Parameter.EXPRESSION],\n [Schema.NULL.getName()!, Schema.NULL],\n [Schema.SCHEMA.getName()!, Schema.SCHEMA],\n]);\n\nconst filterableNames = Array.from(map.values()).map((e) => e.getFullName());\n\nexport class KIRunSchemaRepository implements Repository<Schema> {\n public async find(namespace: string, name: string): Promise<Schema | undefined> {\n if (Namespaces.SYSTEM != namespace) return Promise.resolve(undefined);\n\n return Promise.resolve(map.get(name));\n }\n\n public async filter(name: string): Promise<string[]> {\n return Promise.resolve(\n filterableNames.filter((e) => e.toLowerCase().indexOf(name.toLowerCase()) !== -1),\n );\n }\n}\n","import { Function } from '../function/Function';\n\nexport default function mapEntry(fun: Function): [string, Function] {\n return [fun.getSignature().getName(), fun];\n}\n","import { isNullValue } from './NullCheck';\n\nexport class MapUtil {\n public static of<K, V>(\n k1?: K,\n v1?: V,\n k2?: K,\n v2?: V,\n k3?: K,\n v3?: V,\n k4?: K,\n v4?: V,\n k5?: K,\n v5?: V,\n k6?: K,\n v6?: V,\n k7?: K,\n v7?: V,\n k8?: K,\n v8?: V,\n k9?: K,\n v9?: V,\n k10?: K,\n v10?: V,\n ): Map<K, V> {\n const map: Map<K, V> = new Map();\n\n if (!isNullValue(k1) && !isNullValue(v1)) map.set(k1!, v1!);\n\n if (!isNullValue(k2) && !isNullValue(v2)) map.set(k2!, v2!);\n\n if (!isNullValue(k3) && !isNullValue(v3)) map.set(k3!, v3!);\n\n if (!isNullValue(k4) && !isNullValue(v4)) map.set(k4!, v4!);\n\n if (!isNullValue(k5) && !isNullValue(v5)) map.set(k5!, v5!);\n\n if (!isNullValue(k6) && !isNullValue(v6)) map.set(k6!, v6!);\n\n if (!isNullValue(k7) && !isNullValue(v7)) map.set(k7!, v7!);\n\n if (!isNullValue(k8) && !isNullValue(v8)) map.set(k8!, v8!);\n\n if (!isNullValue(k9) && !isNullValue(v9)) map.set(k9!, v9!);\n\n if (!isNullValue(k10) && !isNullValue(v10)) map.set(k10!, v10!);\n\n return map;\n }\n\n public static ofArrayEntries<K, V>(...entry: [K, V][]): Map<K, V> {\n const map: Map<K, V> = new Map();\n\n for (const [k, v] of entry) {\n map.set(k, v);\n }\n\n return map;\n }\n\n public static entry<K, V>(k: K, v: V): MapEntry<K, V> {\n return new MapEntry(k, v);\n }\n\n public static ofEntries<K, V>(...entry: MapEntry<K, V>[]): Map<K, V> {\n const map: Map<K, V> = new Map();\n\n for (const eachEntry of entry) {\n map.set(eachEntry.k, eachEntry.v);\n }\n\n return map;\n }\n\n public static ofEntriesArray<K, V>(...entry: [K, V][]): Map<K, V> {\n const map: Map<K, V> = new Map();\n\n for (let i = 0; i < entry.length; i++) {\n map.set(entry[i][0], entry[i][1]);\n }\n\n return map;\n }\n\n private constructor() {}\n}\n\nexport class MapEntry<K, V> {\n k: K;\n v: V;\n\n public constructor(k: K, v: V) {\n this.k = k;\n this.v = v;\n }\n}\n","import { AdditionalType, Schema } from '../json/schema/Schema';\nimport { SchemaType } from '../json/schema/type/SchemaType';\nimport { TypeUtil } from '../json/schema/type/TypeUtil';\nimport { SchemaReferenceException } from '../json/schema/validator/exception/SchemaReferenceException';\nimport { Namespaces } from '../namespaces/Namespaces';\n\nexport class Event {\n public static readonly OUTPUT: string = 'output';\n public static readonly ERROR: string = 'error';\n public static readonly ITERATION: string = 'iteration';\n public static readonly TRUE: string = 'true';\n public static readonly FALSE: string = 'false';\n public static readonly SCHEMA_NAME: string = 'Event';\n public static readonly SCHEMA: Schema = new Schema()\n .setNamespace(Namespaces.SYSTEM)\n .setName(Event.SCHEMA_NAME)\n .setType(TypeUtil.of(SchemaType.OBJECT))\n .setProperties(\n new Map([\n ['name', Schema.ofString('name')],\n [\n 'parameters',\n Schema.ofObject('parameter').setAdditionalProperties(\n new AdditionalType().setSchemaValue(Schema.SCHEMA),\n ),\n ],\n ]),\n );\n private name: string;\n private parameters: Map<string, Schema>;\n\n constructor(evn: string | Event, parameters?: Map<string, Schema>) {\n if (evn instanceof Event) {\n this.name = evn.name;\n this.parameters = new Map(\n Array.from(evn.parameters.entries()).map((e) => [e[0], new Schema(e[1])]),\n );\n } else {\n this.name = evn;\n if (!parameters) throw new Error('Unknown constructor format');\n this.parameters = parameters;\n }\n }\n\n public getName(): string {\n return this.name;\n }\n public setName(name: string): Event {\n this.name = name;\n return this;\n }\n public getParameters(): Map<string, Schema> {\n return this.parameters;\n }\n public setParameters(parameters: Map<string, Schema>): Event {\n this.parameters = parameters;\n return this;\n }\n\n public static outputEventMapEntry(parameters: Map<string, Schema>): [string, Event] {\n return Event.eventMapEntry(Event.OUTPUT, parameters);\n }\n\n public static eventMapEntry(\n eventName: string,\n parameters: Map<string, Schema>,\n ): [string, Event] {\n return [eventName, new Event(eventName, parameters)];\n }\n\n public static from(json: any): Event {\n return new Event(\n json.name,\n new Map(\n Object.entries(json.parameters ?? {}).map((e: any) => {\n const eventSchema = Schema.from(e[1]);\n if (!eventSchema)\n throw new SchemaReferenceException('', 'Event expects a schema');\n return [e[0], eventSchema];\n }),\n ),\n );\n }\n}\n","import { Event } from './Event';\n\nexport class EventResult {\n private name: string;\n private result: Map<string, any>;\n\n constructor(name: string, result: Map<string, any>) {\n this.name = name;\n this.result = result;\n }\n\n public getName(): string {\n return this.name;\n }\n public setName(name: string): EventResult {\n this.name = name;\n return this;\n }\n public getResult(): Map<string, any> {\n return this.result;\n }\n public setResult(result: Map<string, any>): EventResult {\n this.result = result;\n return this;\n }\n\n public static outputOf(result: Map<string, any>): EventResult {\n return EventResult.of(Event.OUTPUT, result);\n }\n\n public static of(eventName: string, result: Map<string, any>): EventResult {\n return new EventResult(eventName, result);\n }\n}\n","export class KIRuntimeException extends Error {\n private cause?: Error;\n\n constructor(message: string, err?: Error) {\n super(message);\n this.cause = err;\n }\n\n public getCause(): Error | undefined {\n return this.cause;\n }\n}\n","import { KIRuntimeException } from '../exception/KIRuntimeException';\nimport { isNullValue } from '../util/NullCheck';\nimport { EventResult } from './EventResult';\nimport { FunctionOutputGenerator } from './FunctionOutputGenerator';\n\nexport class FunctionOutput {\n private fo: EventResult[];\n\n private index: number = 0;\n private generator?: FunctionOutputGenerator;\n\n public constructor(arg: EventResult[] | FunctionOutputGenerator) {\n if (isNullValue(arg)) throw new KIRuntimeException('Function output is generating null');\n\n if (Array.isArray(arg) && arg.length && arg[0] instanceof EventResult) {\n this.fo = arg as EventResult[];\n } else {\n this.fo = [];\n if (!Array.isArray(arg)) this.generator = arg as FunctionOutputGenerator;\n }\n }\n\n public next(): EventResult | undefined {\n if (!this.generator) {\n if (this.index < this.fo.length) return this.fo[this.index++];\n return undefined;\n }\n\n const er: EventResult | undefined = this.generator.next();\n if (er) this.fo.push(er);\n return er;\n }\n\n public allResults(): EventResult[] {\n return this.fo;\n }\n}\n","import { AdditionalType, Schema } from '../json/schema/Schema';\nimport { Namespaces } from '../namespaces/Namespaces';\nimport { Event } from './Event';\nimport { Parameter } from './Parameter';\n\nexport class FunctionSignature {\n private static readonly SCHEMA_NAME: string = 'FunctionSignature';\n public static readonly SCHEMA: Schema = new Schema()\n .setNamespace(Namespaces.SYSTEM)\n .setName(FunctionSignature.SCHEMA_NAME)\n .setProperties(\n new Map([\n ['name', Schema.ofString('name')],\n ['namespace', Schema.ofString('namespace')],\n [\n 'parameters',\n Schema.ofObject('parameters').setAdditionalProperties(\n new AdditionalType().setSchemaValue(Parameter.SCHEMA),\n ),\n ],\n [\n 'events',\n Schema.ofObject('events').setAdditionalProperties(\n new AdditionalType().setSchemaValue(Event.SCHEMA),\n ),\n ],\n ]),\n );\n private namespace: string = '_';\n private name: string;\n private parameters: Map<string, Parameter> = new Map();\n private events: Map<string, Event> = new Map();\n\n constructor(value: string | FunctionSignature) {\n if (value instanceof FunctionSignature) {\n this.name = value.name;\n this.namespace = value.namespace;\n this.parameters = new Map(\n Array.from(value.parameters.entries()).map((e) => [e[0], new Parameter(e[1])]),\n );\n this.events = new Map(\n Array.from(value.events.entries()).map((e) => [e[0], new Event(e[1])]),\n );\n } else {\n this.name = value;\n }\n }\n\n public getNamespace(): string {\n return this.namespace;\n }\n public setNamespace(namespace: string): FunctionSignature {\n this.namespace = namespace;\n return this;\n }\n public getName(): string {\n return this.name;\n }\n public setName(name: string): FunctionSignature {\n this.name = name;\n return this;\n }\n public getParameters(): Map<string, Parameter> {\n return this.parameters;\n }\n public setParameters(parameters: Map<string, Parameter>): FunctionSignature {\n this.parameters = parameters;\n return this;\n }\n public getEvents(): Map<string, Event> {\n return this.events;\n }\n public setEvents(events: Map<string, Event>): FunctionSignature {\n this.events = events;\n return this;\n }\n public getFullName(): string {\n return this.namespace + '.' + this.name;\n }\n}\n","export class StringFormatter {\n public static format(formatString: string, ...params: any[]): string {\n if (!params || params.length == 0) return formatString;\n\n let sb: string = '';\n let ind: number = 0;\n let chr: string = '';\n let prevchar: string = chr;\n let length: number = formatString.length;\n\n for (let i = 0; i < length; i++) {\n chr = formatString.charAt(i);\n\n if (chr == '$' && prevchar == '\\\\') sb = sb.substring(0, i - 1) + chr;\n else if (chr == '$' && ind < params.length) sb += params[ind++];\n else sb += chr;\n\n prevchar = chr;\n }\n\n return sb.toString();\n }\n\n private constructor() {}\n}\n","import { KIRuntimeException } from '../exception/KIRuntimeException';\nimport { deepEqual } from './deepEqual';\nimport { StringFormatter } from './string/StringFormatter';\n\nexport class LinkedList<T> {\n private head?: Node<T> = undefined;\n private tail?: Node<T> = undefined;\n public length: number = 0;\n\n public constructor(list?: T[]) {\n if (list?.length) {\n for (const t of list) {\n if (!this.head) {\n this.tail = this.head = new Node(t);\n } else {\n const node = new Node(t, this.tail);\n this.tail!.next = node;\n this.tail = node;\n }\n }\n this.length = list.length;\n }\n }\n\n public push(value: T) {\n const node = new Node(value, undefined, this.head);\n if (!this.head) {\n this.tail = this.head = node;\n } else {\n this.head.previous = node;\n this.head = node;\n }\n this.length++;\n }\n\n public pop(): T {\n if (!this.head) {\n throw Error('List is empty and cannot pop further.');\n }\n const value: T = this.head!.value;\n this.length--;\n\n if (this.head == this.tail) {\n this.head = this.tail = undefined;\n return value;\n }\n\n const node: Node<T> = this.head!;\n\n this.head = node.next;\n node.next = undefined;\n node.previous = undefined;\n this.head!.previous = undefined;\n return value;\n }\n\n public isEmpty(): boolean {\n return !this.length;\n }\n\n public size(): number {\n return this.length;\n }\n\n public get(index: number): T {\n if (index < 0 || index >= this.length) {\n throw new Error(`${index} is out of bounds [0,${this.length}]`);\n }\n\n let x = this.head;\n while (index > 0) {\n x = this.head!.next;\n --index;\n }\n\n return x!.value;\n }\n\n public set(index: number, value: T): LinkedList<T> {\n if (index < 0 || index >= this.length)\n throw new KIRuntimeException(\n StringFormatter.format(\n 'Index $ out of bound to set the value in linked list.',\n index,\n ),\n );\n\n let x = this.head;\n while (index > 0) {\n x = this.head!.next;\n --index;\n }\n x!.value = value;\n return this;\n }\n\n public toString(): string {\n let x = this.head;\n let str: string = '';\n\n while (x) {\n str += x.value;\n x = x.next;\n if (x) str += ', ';\n }\n\n return `[${str}]`;\n }\n\n public toArray(): T[] {\n let arr: T[] = [];\n\n let x = this.head;\n\n while (x) {\n arr.push(x.value);\n x = x.next;\n }\n\n return arr;\n }\n\n public peek(): T {\n if (!this.head) {\n throw new Error('List is empty so cannot peak');\n }\n\n return this.head.value;\n }\n\n public peekLast(): T {\n if (!this.tail) {\n throw new Error('List is empty so cannot peak');\n }\n return this.tail.value;\n }\n\n public getFirst(): T {\n if (!this.head) {\n throw new Error('List is empty so cannot get first');\n }\n return this.head.value;\n }\n\n public removeFirst(): T {\n return this.pop();\n }\n\n public removeLast(): T {\n if (!this.tail) {\n throw new Error('List is empty so cannot remove');\n }\n --this.length;\n const v: T = this.tail.value;\n if (this.length == 0) {\n this.head = this.tail = undefined;\n } else {\n const n = this.tail.previous;\n n!.next = undefined;\n this.tail.previous = undefined;\n this.tail = n;\n }\n\n return v;\n }\n\n public addAll(list: T[]): LinkedList<T> {\n if (!list || !list.length) return this;\n list.forEach(this.add.bind(this));\n return this;\n }\n\n public add(t: T): LinkedList<T> {\n ++this.length;\n if (!this.tail && !this.head) {\n this.head = this.tail = new Node(t);\n } else if (this.head === this.tail) {\n this.tail = new Node(t, this.head);\n this.head!.next = this.tail;\n } else {\n this.tail = new Node(t, this.tail);\n this.tail.previous!.next = this.tail;\n }\n return this;\n }\n\n public map<U>(callbackfn: (value: T, index: number) => U, thisArg?: any): LinkedList<U> {\n let newList: LinkedList<U> = new LinkedList();\n\n let x = this.head;\n\n let index: number = 0;\n while (x) {\n newList.add(callbackfn(x.value, index));\n x = x.next;\n ++index;\n }\n\n return newList;\n }\n\n public indexOf(value: T): number {\n let x = this.head;\n\n let index: number = 0;\n while (x) {\n if (deepEqual(x.value, value)) return index;\n x = x.next;\n ++index;\n }\n\n return -1;\n }\n\n public forEach(callbackfn: (value: T, index: number) => void, thisArg?: any): void {\n let x = this.head;\n let index: number = 0;\n while (x) {\n callbackfn(x.value, index);\n x = x.next;\n ++index;\n }\n }\n}\n\nclass Node<T> {\n public value: T;\n public next?: Node<T>;\n public previous?: Node<T>;\n\n constructor(t: T, previous?: Node<T>, next?: Node<T>) {\n this.value = t;\n this.next = next;\n this.previous = previous;\n }\n\n public toString(): string {\n return '' + this.value;\n }\n}\n","import { LinkedList } from './LinkedList';\n\nexport function deepEqual(x: any, y: any) {\n let xa = new LinkedList();\n xa.push(x);\n let yb = new LinkedList();\n yb.push(y);\n\n while (!xa.isEmpty() && !yb.isEmpty()) {\n const a: any = xa.pop();\n const b: any = yb.pop();\n\n if (a === b) continue;\n\n const typeOfA = typeof a;\n const typeOfB = typeof b;\n\n if (typeOfA === 'undefined' || typeOfB === 'undefined') {\n if (!a && !b) continue;\n return false;\n }\n\n if (typeOfA !== typeOfB) return false;\n\n if (Array.isArray(a)) {\n if (!Array.isArray(b) || a.length != b.length) return false;\n for (let i = 0; i < a.length; i++) {\n xa.push(a[i]);\n yb.push(b[i]);\n }\n continue;\n }\n\n if (typeOfA === 'object') {\n const entriesOfA = Object.entries(a);\n const entriesOfB = Object.entries(b);\n if (entriesOfA.length !== entriesOfB.length) return false;\n for (const [k, v] of entriesOfA) {\n xa.push(v);\n yb.push(b[k]);\n }\n\n continue;\n }\n return false;\n }\n\n return true;\n}\n","import { KIRuntimeException } from '../../exception/KIRuntimeException';\nimport { StringFormatter } from './StringFormatter';\n\nexport class StringUtil {\n private constructor() {}\n\n public static nthIndex(str: string, c: string, from: number = 0, occurance: number): number {\n if (!str) throw new KIRuntimeException('String cannot be null');\n\n if (from < 0 || from >= str.length)\n throw new KIRuntimeException(\n StringFormatter.format('Cannot search from index : $', from),\n );\n\n if (occurance <= 0 || occurance > str.length)\n throw new KIRuntimeException(\n StringFormatter.format('Cannot search for occurance : $', occurance),\n );\n\n while (from < str.length) {\n if (str.charAt(from) == c) {\n --occurance;\n if (occurance == 0) return from;\n }\n\n ++from;\n }\n\n return -1;\n }\n\n public static splitAtFirstOccurance(\n str: string,\n c: string,\n ): [string | undefined, string | undefined] {\n if (!str) return [undefined, undefined];\n\n let index: number = str.indexOf(c);\n\n if (index == -1) return [str, undefined];\n\n return [str.substring(0, index), str.substring(index + 1)];\n }\n\n public static isNullOrBlank(str: string | undefined): boolean {\n return !str || str.trim() == '';\n }\n}\n","export class Tuple2<F, S> {\n protected f: F;\n protected s: S;\n\n constructor(f: F, s: S) {\n this.f = f;\n this.s = s;\n }\n\n public getT1(): F {\n return this.f;\n }\n\n public getT2(): S {\n return this.s;\n }\n\n public setT1(f: F): Tuple2<F, S> {\n this.f = f;\n return this;\n }\n\n public setT2(s: S): Tuple2<F, S> {\n this.s = s;\n return this;\n }\n}\n\nexport class Tuple3<F, S, T> extends Tuple2<F, S> {\n protected t: T;\n\n constructor(f: F, s: S, t: T) {\n super(f, s);\n this.t = t;\n }\n\n public getT3(): T {\n return this.t;\n }\n\n public setT1(f: F): Tuple3<F, S, T> {\n this.f = f;\n return this;\n }\n\n public setT2(s: S): Tuple3<F, S, T> {\n this.s = s;\n return this;\n }\n\n public setT3(t: T): Tuple3<F, S, T> {\n this.t = t;\n return this;\n }\n}\n\nexport class Tuple4<F, S, T, FR> extends Tuple3<F, S, T> {\n protected fr: FR;\n\n constructor(f: F, s: S, t: T, fr: FR) {\n super(f, s, t);\n this.fr = fr;\n }\n\n public getT4(): FR {\n return this.fr;\n }\n\n public setT1(f: F): Tuple4<F, S, T, FR> {\n this.f = f;\n return this;\n }\n\n public setT2(s: S): Tuple4<F, S, T, FR> {\n this.s = s;\n return this;\n }\n\n public setT3(t: T): Tuple4<F, S, T, FR> {\n this.t = t;\n return this;\n }\n\n public setT4(fr: FR): Tuple4<F, S, T, FR> {\n this.fr = fr;\n return this;\n }\n}\n","export class SchemaValidationException extends Error {\n private schemaPath: string;\n private cause?: Error;\n constructor(\n schemaPath: string,\n message: string,\n sve: SchemaValidationException[] = [],\n err?: Error,\n ) {\n super(message + (sve ? sve.map((e) => e.message).reduce((a, c) => a + '\\n' + c, '') : ''));\n this.schemaPath = schemaPath;\n this.cause = err;\n }\n\n public getSchemaPath(): string {\n return this.schemaPath;\n }\n\n public getCause(): Error | undefined {\n return this.cause;\n }\n}\n","import { Repository } from '../../Repository';\nimport { isNullValue } from '../../util/NullCheck';\nimport { StringUtil } from '../../util/string/StringUtil';\nimport { Tuple2 } from '../../util/Tuples';\nimport { Schema } from './Schema';\nimport { SchemaType } from './type/SchemaType';\nimport { SchemaReferenceException } from './validator/exception/SchemaReferenceException';\nimport { SchemaValidationException } from './validator/exception/SchemaValidationException';\n\nexport class SchemaUtil {\n private static readonly UNABLE_TO_RETRIVE_SCHEMA_FROM_REFERENCED_PATH: string =\n 'Unable to retrive schema from referenced path';\n\n private static readonly CYCLIC_REFERENCE_LIMIT_COUNTER: number = 20;\n\n public static async getDefaultValue(\n s: Schema | undefined,\n sRepository: Repository<Schema> | undefined,\n ): Promise<any> {\n if (!s) return undefined;\n\n if (s.getConstant()) return s.getConstant();\n\n if (!isNullValue(s.getDefaultValue())) return s.getDefaultValue();\n\n return SchemaUtil.getDefaultValue(\n await SchemaUtil.getSchemaFromRef(s, sRepository, s.getRef()),\n sRepository,\n );\n }\n\n public static async hasDefaultValueOrNullSchemaType(\n s: Schema | undefined,\n sRepository: Repository<Schema> | undefined,\n ): Promise<boolean> {\n if (!s) return Promise.resolve(false);\n if (s.getConstant()) return Promise.resolve(true);\n\n if (!isNullValue(s.getDefaultValue())) return Promise.resolve(true);\n\n if (isNullValue(s.getRef())) {\n if (s.getType()?.getAllowedSchemaTypes().has(SchemaType.NULL))\n return Promise.resolve(true);\n return Promise.resolve(false);\n }\n\n return this.hasDefaultValueOrNullSchemaType(\n await SchemaUtil.getSchemaFromRef(s, sRepository, s.getRef()),\n sRepository,\n );\n }\n\n public static async getSchemaFromRef(\n schema: Schema,\n sRepository: Repository<Schema> | undefined,\n ref: string | undefined,\n iteration: number = 0,\n ): Promise<Schema | undefined> {\n iteration++;\n if (iteration == SchemaUtil.CYCLIC_REFERENCE_LIMIT_COUNTER)\n throw new SchemaValidationException(ref ?? '', 'Schema has a cyclic reference');\n\n if (!schema || !ref || StringUtil.isNullOrBlank(ref)) return Promise.resolve(undefined);\n\n if (!ref.startsWith('#')) {\n var tuple = await SchemaUtil.resolveExternalSchema(schema, sRepository, ref);\n if (tuple) {\n schema = tuple.getT1();\n ref = tuple.getT2();\n }\n }\n\n let parts: string[] = ref.split('/');\n let i: number = 1;\n\n if (i === parts.length) return Promise.resolve(schema);\n\n return Promise.resolve(\n SchemaUtil.resolveInternalSchema(schema, sRepository, ref, iteration, parts, i),\n );\n }\n\n private static async resolveInternalSchema(\n inSchema: Schema,\n sRepository: Repository<Schema> | undefined,\n ref: string,\n iteration: number,\n parts: string[],\n i: number,\n ): Promise<Schema | undefined> {\n let schema: Schema | undefined = inSchema;\n if (i === parts.length) return undefined;\n while (i < parts.length) {\n if (parts[i] === '$defs') {\n i++;\n\n if (i >= parts.length || !schema.get$defs())\n throw new SchemaReferenceException(\n ref,\n SchemaUtil.UNABLE_TO_RETRIVE_SCHEMA_FROM_REFERENCED_PATH,\n );\n\n schema = schema.get$defs()?.get(parts[i]);\n } else {\n if (\n schema &&\n (!schema.getType()?.contains(SchemaType.OBJECT) || !schema.getProperties())\n )\n throw new SchemaReferenceException(\n ref,\n 'Cannot retrievie schema from non Object type schemas',\n );\n\n schema = schema.getProperties()?.get(parts[i]);\n }\n\n i++;\n\n if (!schema)\n throw new SchemaReferenceException(\n ref,\n SchemaUtil.UNABLE_TO_RETRIVE_SCHEMA_FROM_REFERENCED_PATH,\n );\n\n if (!StringUtil.isNullOrBlank(schema.getRef())) {\n schema = await SchemaUtil.getSchemaFromRef(\n schema,\n sRepository,\n schema.getRef(),\n iteration,\n );\n if (!schema)\n throw new SchemaReferenceException(\n ref,\n SchemaUtil.UNABLE_TO_RETRIVE_SCHEMA_FROM_REFERENCED_PATH,\n );\n }\n }\n return Promise.resolve(schema);\n }\n\n private static async resolveExternalSchema(\n inSchem: Schema,\n sRepository: Repository<Schema> | undefined,\n ref: string,\n ): Promise<Tuple2<Schema, string> | undefined> {\n if (!sRepository) return Promise.resolve(undefined);\n\n let nms = StringUtil.splitAtFirstOccurance(ref ?? '', '/');\n if (!nms[0]) return Promise.resolve(undefined);\n\n let nmspnm = StringUtil.splitAtFirstOccurance(nms[0], '.');\n if (!nmspnm[0] || !nmspnm[1]) return Promise.resolve(undefined);\n\n let schema = await sRepository.find(nmspnm[0], nmspnm[1]);\n if (!schema) return Promise.resolve(undefined);\n if (!nms[1] || nms[1] === '') return Promise.resolve(new Tuple2(schema, ref));\n\n ref = '#/' + nms[1];\n\n if (!schema)\n throw new SchemaReferenceException(\n ref,\n SchemaUtil.UNABLE_TO_RETRIVE_SCHEMA_FROM_REFERENCED_PATH,\n );\n\n return Promise.resolve(new Tuple2(schema, ref));\n }\n\n private constructor() {}\n}\n","import { Repository } from '../../../Repository';\nimport { Schema } from '../Schema';\nimport { SchemaValidationException } from './exception/SchemaValidationException';\nimport { SchemaValidator } from './SchemaValidator';\n\nexport class AnyOfAllOfOneOfValidator {\n public static validate(\n parents: Schema[],\n schema: Schema,\n repository: Repository<Schema> | undefined,\n element: any,\n ): any {\n let list: SchemaValidationException[] = [];\n if (schema.getOneOf() && !schema.getOneOf()) {\n AnyOfAllOfOneOfValidator.oneOf(parents, schema, repository, element, list);\n } else if (schema.getAllOf() && !schema.getAllOf()) {\n AnyOfAllOfOneOfValidator.allOf(parents, schema, repository, element, list);\n } else if (schema.getAnyOf() && !schema.getAnyOf()) {\n AnyOfAllOfOneOfValidator.anyOf(parents, schema, repository, element, list);\n }\n\n return element;\n }\n\n private static anyOf(\n parents: Schema[],\n schema: Schema,\n repository: Repository<Schema> |undefined,\n element: any,\n list: SchemaValidationException[],\n ) {\n let flag: boolean = false;\n for (let s of schema.getAnyOf() ?? []) {\n try {\n AnyOfAllOfOneOfValidator.validate(parents, s, repository, element);\n flag = true;\n break;\n } catch (err: any) {\n flag = false;\n list.push(err);\n }\n }\n\n if (!flag) {\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n \"The value don't satisfy any of the schemas.\",\n list,\n );\n }\n }\n\n private static allOf(\n parents: Schema[],\n schema: Schema,\n repository: Repository<Schema> | undefined,\n element: any,\n list: SchemaValidationException[],\n ) {\n let flag: number = 0;\n for (let s of schema.getAllOf() ?? []) {\n try {\n AnyOfAllOfOneOfValidator.validate(parents, s, repository, element);\n flag++;\n } catch (err: any) {\n list.push(err);\n }\n }\n\n if (flag !== schema.getAllOf()?.length) {\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n \"The value doesn't satisfy some of the schemas.\",\n list,\n );\n }\n }\n\n private static oneOf(\n parents: Schema[],\n schema: Schema,\n repository: Repository<Schema> | undefined,\n element: any,\n list: SchemaValidationException[],\n ) {\n let flag: number = 0;\n for (let s of schema.getOneOf() ?? []) {\n try {\n AnyOfAllOfOneOfValidator.validate(parents, s, repository, element);\n flag++;\n } catch (err : any) {\n list.push(err);\n }\n }\n\n if (flag != 1) {\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n flag == 0\n ? 'The value does not satisfy any schema'\n : 'The value satisfy more than one schema',\n list,\n );\n }\n }\n\n private constructor() {}\n}\n","import { Repository } from '../../../Repository';\nimport { isNullValue } from '../../../util/NullCheck';\nimport { ArraySchemaType } from '../array/ArraySchemaType';\nimport { Schema } from '../Schema';\nimport { SchemaValidationException } from './exception/SchemaValidationException';\nimport { SchemaValidator } from './SchemaValidator';\n\nexport class ArrayValidator {\n public static async validate(\n parents: Schema[],\n schema: Schema,\n repository: Repository<Schema> | undefined,\n element: any,\n ): Promise<any> {\n if (isNullValue(element))\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n 'Expected an array but found null',\n );\n\n if (!Array.isArray(element))\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n element.toString() + ' is not an Array',\n );\n\n let array: any[] = element as any[];\n\n ArrayValidator.checkMinMaxItems(parents, schema, array);\n\n await ArrayValidator.checkItems(parents, schema, repository, array);\n\n ArrayValidator.checkUniqueItems(parents, schema, array);\n\n await ArrayValidator.checkContains(schema, parents, repository, array);\n\n return element;\n }\n\n private static async checkContains(\n schema: Schema,\n parents: Schema[],\n repository: Repository<Schema> | undefined,\n array: any[],\n ) {\n if (isNullValue(schema.getContains())) return;\n\n let count = await ArrayValidator.countContains(\n parents,\n schema,\n repository,\n array,\n isNullValue(schema.getMinContains()) && isNullValue(schema.getMaxContains()),\n );\n\n if (count === 0) {\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n 'None of the items are of type contains schema',\n );\n }\n\n if (!isNullValue(schema.getMinContains()) && schema.getMinContains()! > count)\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n 'The minimum number of the items of type contains schema should be ' +\n schema.getMinContains() +\n ' but found ' +\n count,\n );\n\n if (!isNullValue(schema.getMaxContains()) && schema.getMaxContains()! < count)\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n 'The maximum number of the items of type contains schema should be ' +\n schema.getMaxContains() +\n ' but found ' +\n count,\n );\n }\n\n public static async countContains(\n parents: Schema[],\n schema: Schema,\n repository: Repository<Schema> | undefined,\n array: any[],\n stopOnFirst?: boolean,\n ): Promise<number> {\n let count = 0;\n for (let i = 0; i < array.length; i++) {\n let newParents: Schema[] = !parents ? [] : [...parents];\n\n try {\n await SchemaValidator.validate(\n newParents,\n schema.getContains(),\n repository,\n array[i],\n );\n count++;\n if (stopOnFirst) break;\n } catch (err) {}\n }\n return count;\n }\n\n public static checkUniqueItems(parents: Schema[], schema: Schema, array: any[]): void {\n if (schema.getUniqueItems() && schema.getUniqueItems()) {\n let set: Set<any> = new Set<any>(array);\n\n if (set.size !== array.length)\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n 'Items on the array are not unique',\n );\n }\n }\n\n public static checkMinMaxItems(parents: Schema[], schema: Schema, array: any[]): void {\n if (schema.getMinItems() && schema.getMinItems()! > array.length) {\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n 'Array should have minimum of ' + schema.getMinItems() + ' elements',\n );\n }\n\n if (schema.getMaxItems() && schema.getMaxItems()! < array.length) {\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n 'Array can have maximum of ' + schema.getMaxItems() + ' elements',\n );\n }\n }\n\n public static async checkItems(\n parents: Schema[],\n schema: Schema,\n repository: Repository<Schema> | undefined,\n array: any[],\n ) {\n if (!schema.getItems()) return;\n\n let type: ArraySchemaType = schema.getItems()!;\n\n if (type.getSingleSchema()) {\n for (let i = 0; i < array.length; i++) {\n let newParents: Schema[] = !parents ? [] : [...parents];\n let element: any = await SchemaValidator.validate(\n newParents,\n type.getSingleSchema(),\n repository,\n array[i],\n );\n array[i] = element;\n }\n }\n\n if (type.getTupleSchema()) {\n if (\n type.getTupleSchema()!.length !== array.length &&\n isNullValue(schema?.getAdditionalItems())\n ) {\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n 'Expected an array with only ' +\n type.getTupleSchema()!.length +\n ' but found ' +\n array.length,\n );\n }\n\n await this.checkItemsInTupleSchema(parents, repository, array, type);\n\n await this.checkAdditionalItems(parents, schema, repository, array, type);\n }\n }\n\n private static async checkItemsInTupleSchema(\n parents: Schema[],\n repository: Repository<Schema> | undefined,\n array: any[],\n type: ArraySchemaType,\n ) {\n for (let i = 0; i < type.getTupleSchema()?.length!; i++) {\n let newParents: Schema[] = !parents ? [] : [...parents];\n let element: any = await SchemaValidator.validate(\n newParents,\n type.getTupleSchema()![i],\n repository,\n array[i],\n );\n array[i] = element;\n }\n }\n\n private static async checkAdditionalItems(\n parents: Schema[],\n schema: Schema,\n repository: Repository<Schema> | undefined,\n array: any[],\n type: ArraySchemaType,\n ) {\n if (!isNullValue(schema.getAdditionalItems())) {\n let additionalSchemaType = schema.getAdditionalItems();\n if (additionalSchemaType?.getBooleanValue()) {\n //validate the additional items whether schema is valid or not\n let anySchemaType = Schema.ofAny('item'); // as additional items is true it should validate against any valid schema defined in the system\n if (\n additionalSchemaType?.getBooleanValue() === false &&\n array.length > type.getTupleSchema()?.length!\n )\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n 'No Additional Items are defined',\n );\n\n await this.checkEachItemInAdditionalItems(\n parents,\n schema,\n repository,\n array,\n type,\n anySchemaType,\n );\n } else if (additionalSchemaType?.getSchemaValue()) {\n let schemaType = additionalSchemaType.getSchemaValue();\n await this.checkEachItemInAdditionalItems(\n parents,\n schema,\n repository,\n array,\n type,\n schemaType,\n );\n }\n }\n }\n\n private static async checkEachItemInAdditionalItems(\n parents: Schema[],\n schema: Schema,\n repository: Repository<Schema> | undefined,\n array: any[],\n type: ArraySchemaType,\n schemaType: Schema | undefined,\n ) {\n for (let i = type.getTupleSchema()?.length!; i < array.length; i++) {\n let newParents: Schema[] = !parents ? [] : [...parents];\n let element: any = await SchemaValidator.validate(\n newParents,\n schemaType!,\n repository,\n array[i],\n );\n array[i] = element;\n }\n return;\n }\n\n private constructor() {}\n}\n","import { isNullValue } from '../../../util/NullCheck';\nimport { Schema } from '../Schema';\nimport { SchemaValidationException } from './exception/SchemaValidationException';\nimport { SchemaValidator } from './SchemaValidator';\n\nexport class BooleanValidator {\n public static validate(parents: Schema[], schema: Schema, element: any): any {\n if (isNullValue(element))\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n 'Expected a boolean but found null',\n );\n\n if (typeof element !== 'boolean')\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n element.toString() + ' is not a boolean',\n );\n\n return element;\n }\n\n private constructor() {}\n}\n","import { isNullValue } from '../../../util/NullCheck';\nimport { Schema } from '../Schema';\nimport { SchemaValidationException } from './exception/SchemaValidationException';\nimport { SchemaValidator } from './SchemaValidator';\n\nexport class NullValidator {\n public static validate(parents: Schema[], schema: Schema, element: any): any {\n if (isNullValue(element)) return element;\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n 'Expected a null but found ' + element,\n );\n }\n\n private constructor() {}\n}\n","import { isNullValue } from '../../../util/NullCheck';\nimport { Schema } from '../Schema';\nimport { SchemaType } from '../type/SchemaType';\nimport { SchemaValidationException } from './exception/SchemaValidationException';\nimport { SchemaValidator } from './SchemaValidator';\n\nexport class NumberValidator {\n public static validate(type: SchemaType, parents: Schema[], schema: Schema, element: any): any {\n if (isNullValue(element))\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n 'Expected a number but found null',\n );\n\n if (typeof element !== 'number')\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n element.toString() + ' is not a ' + type,\n );\n\n let n: number = NumberValidator.extractNumber(type, parents, schema, element);\n\n NumberValidator.checkRange(parents, schema, element, n);\n\n NumberValidator.checkMultipleOf(parents, schema, element, n);\n\n return element;\n }\n\n private static extractNumber(\n type: SchemaType,\n parents: Schema[],\n schema: Schema,\n element: any,\n ): number {\n let n = element;\n\n try {\n if (type == SchemaType.LONG || type == SchemaType.INTEGER) n = Math.round(n);\n } catch (err: any) {\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n element + ' is not a number of type ' + type,\n err,\n );\n }\n\n if (\n isNullValue(n) ||\n ((type == SchemaType.LONG || type == SchemaType.INTEGER) && n != element)\n ) {\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n element.toString() + ' is not a number of type ' + type,\n );\n }\n\n return n;\n }\n\n private static checkMultipleOf(parents: Schema[], schema: Schema, element: any, n: number) {\n if (schema.getMultipleOf()) {\n let l1: number = n;\n let l2: number = schema.getMultipleOf()!;\n\n if (l1 % l2 != 0)\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n element.toString() + ' is not multiple of ' + schema.getMultipleOf(),\n );\n }\n }\n\n private static checkRange(parents: Schema[], schema: Schema, element: any, n: number) {\n if (schema.getMinimum() && NumberValidator.numberCompare(n, schema.getMinimum()!) < 0) {\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n element.toString() + ' should be greater than or equal to ' + schema.getMinimum(),\n );\n }\n\n if (schema.getMaximum() && NumberValidator.numberCompare(n, schema.getMaximum()!) > 0) {\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n element.toString() + ' should be less than or equal to ' + schema.getMaximum(),\n );\n }\n\n if (\n schema.getExclusiveMinimum() &&\n NumberValidator.numberCompare(n, schema.getExclusiveMinimum()!) <= 0\n ) {\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n element.toString() + ' should be greater than ' + schema.getExclusiveMinimum(),\n );\n }\n\n if (\n schema.getExclusiveMaximum() &&\n NumberValidator.numberCompare(n, schema.getExclusiveMaximum()!) > 0\n ) {\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n element.toString() + ' should be less than ' + schema.getExclusiveMaximum(),\n );\n }\n }\n\n private static numberCompare(n1: number, n2: number): number {\n return n1 - n2;\n }\n\n private constructor() {}\n}\n","import { Repository } from '../../../Repository';\nimport { isNullValue } from '../../../util/NullCheck';\nimport { AdditionalType, Schema } from '../Schema';\nimport { SchemaUtil } from '../SchemaUtil';\nimport { SchemaValidationException } from './exception/SchemaValidationException';\nimport { SchemaValidator } from './SchemaValidator';\n\nexport class ObjectValidator {\n public static async validate(\n parents: Schema[],\n schema: Schema,\n repository: Repository<Schema> | undefined,\n element: any,\n ) {\n if (isNullValue(element))\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n 'Expected an object but found null',\n );\n\n if (typeof element !== 'object' || Array.isArray(element))\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n element.toString() + ' is not an Object',\n );\n\n let jsonObject: any = element;\n let keys: Set<string> = new Set<string>(Object.keys(jsonObject));\n\n ObjectValidator.checkMinMaxProperties(parents, schema, keys);\n\n if (schema.getPropertyNames()) {\n await ObjectValidator.checkPropertyNameSchema(parents, schema, repository, keys);\n }\n\n if (schema.getRequired()) {\n ObjectValidator.checkRequired(parents, schema, jsonObject);\n }\n\n if (schema.getProperties()) {\n await ObjectValidator.checkProperties(parents, schema, repository, jsonObject, keys);\n }\n\n if (schema.getPatternProperties()) {\n await ObjectValidator.checkPatternProperties(\n parents,\n schema,\n repository,\n jsonObject,\n keys,\n );\n }\n\n if (schema.getAdditionalProperties()) {\n await ObjectValidator.checkAddtionalProperties(\n parents,\n schema,\n repository,\n jsonObject,\n keys,\n );\n }\n }\n\n private static async checkPropertyNameSchema(\n parents: Schema[],\n schema: Schema,\n repository: Repository<Schema> | undefined,\n keys: Set<String>,\n ) {\n for (let key of Array.from(keys.values())) {\n try {\n await SchemaValidator.validate(\n parents,\n schema.getPropertyNames() as Schema,\n repository,\n key,\n );\n } catch (err) {\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n \"Property name '\" + key + \"' does not fit the property schema\",\n );\n }\n }\n }\n\n private static checkRequired(parents: Schema[], schema: Schema, jsonObject: any) {\n for (const key of schema.getRequired() ?? []) {\n if (isNullValue(jsonObject[key])) {\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n key + ' is mandatory',\n );\n }\n }\n }\n\n private static async checkAddtionalProperties(\n parents: Schema[],\n schema: Schema,\n repository: Repository<Schema> | undefined,\n jsonObject: any,\n keys: Set<string>,\n ) {\n let apt: AdditionalType = schema.getAdditionalProperties()!;\n if (apt.getSchemaValue()) {\n for (let key of Array.from(keys.values())) {\n let newParents: Schema[] = !parents ? [] : [...parents];\n\n let element: any = await SchemaValidator.validate(\n newParents,\n apt.getSchemaValue(),\n repository,\n jsonObject[key],\n );\n jsonObject[key] = element;\n }\n } else {\n if (apt.getBooleanValue() === false && keys.size) {\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n Array.from(keys) + ' is/are additional properties which are not allowed.',\n );\n }\n }\n }\n\n private static async checkPatternProperties(\n parents: Schema[],\n schema: Schema,\n repository: Repository<Schema> | undefined,\n jsonObject: any,\n keys: Set<string>,\n ) {\n const compiledPatterns: Map<string, RegExp> = new Map<string, RegExp>();\n for (const keyPattern of Array.from(schema.getPatternProperties()!.keys()))\n compiledPatterns.set(keyPattern, new RegExp(keyPattern));\n\n let goodKeys: string[] = [];\n\n for (const key of Array.from(keys.values())) {\n const newParents: Schema[] = !parents ? [] : [...parents];\n\n for (const e of Array.from(compiledPatterns.entries())) {\n if (e[1].test(key)) {\n const element: any = await SchemaValidator.validate(\n newParents,\n schema.getPatternProperties()!.get(e[0]),\n repository,\n jsonObject[key],\n );\n jsonObject[key] = element;\n keys.delete(key);\n break;\n }\n }\n }\n }\n\n private static async checkProperties(\n parents: Schema[],\n schema: Schema,\n repository: Repository<Schema> | undefined,\n jsonObject: any,\n keys: Set<string>,\n ) {\n for (const each of Array.from(schema.getProperties()!)) {\n let value: any = jsonObject[each[0]];\n\n if (!jsonObject.hasOwnProperty(each[0]) && isNullValue(value)) {\n const defValue = await SchemaUtil.getDefaultValue(each[1], repository);\n if (isNullValue(defValue)) continue;\n }\n\n let newParents: Schema[] = !parents ? [] : [...parents];\n let element: any = await SchemaValidator.validate(\n newParents,\n each[1],\n repository,\n value,\n );\n\n jsonObject[each[0]] = element;\n keys.delete(each[0]);\n }\n }\n\n private static checkMinMaxProperties(parents: Schema[], schema: Schema, keys: Set<string>) {\n if (schema.getMinProperties() && keys.size < schema.getMinProperties()!) {\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n 'Object should have minimum of ' + schema.getMinProperties() + ' properties',\n );\n }\n\n if (schema.getMaxProperties() && keys.size > schema.getMaxProperties()!) {\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n 'Object can have maximum of ' + schema.getMaxProperties() + ' properties',\n );\n }\n }\n\n private constructor() {}\n}\n","export enum StringFormat {\n DATETIME = 'DATETIME',\n TIME = 'TIME',\n DATE = 'DATE',\n EMAIL = 'EMAIL',\n REGEX = 'REGEX',\n}\n","import { isNullValue } from '../../../util/NullCheck';\nimport { Schema } from '../Schema';\nimport { StringFormat } from '../string/StringFormat';\nimport { SchemaValidationException } from './exception/SchemaValidationException';\nimport { SchemaValidator } from './SchemaValidator';\n\nexport class StringValidator {\n private static readonly TIME: RegExp =\n /^([01]?[0-9]|2[0-3]):[0-5][0-9](:[0-5][0-9])?([+-][01][0-9]:[0-5][0-9])?$/;\n\n private static readonly DATE: RegExp =\n /^[0-9]{4,4}-([0][0-9]|[1][0-2])-(0[1-9]|[1-2][1-9]|3[01])$/;\n\n private static readonly DATETIME: RegExp =\n /^[0-9]{4,4}-([0][0-9]|[1][0-2])-(0[1-9]|[1-2][1-9]|3[01])T([01]?[0-9]|2[0-3]):[0-5][0-9](:[0-5][0-9])?([+-][01][0-9]:[0-5][0-9])?$/;\n\n private static readonly EMAIL: RegExp =\n /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*$/;\n\n public static validate(parents: Schema[], schema: Schema, element: any): any {\n if (isNullValue(element))\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n 'Expected a string but found ' + element,\n );\n\n if (typeof element !== 'string')\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n element.toString() + ' is not String',\n );\n\n if (schema.getFormat() == StringFormat.TIME) {\n StringValidator.patternMatcher(\n parents,\n schema,\n element,\n StringValidator.TIME,\n 'time pattern',\n );\n } else if (schema.getFormat() == StringFormat.DATE) {\n StringValidator.patternMatcher(\n parents,\n schema,\n element,\n StringValidator.DATE,\n 'date pattern',\n );\n } else if (schema.getFormat() == StringFormat.DATETIME) {\n StringValidator.patternMatcher(\n parents,\n schema,\n element,\n StringValidator.DATETIME,\n 'date time pattern',\n );\n } else if (schema.getFormat() == StringFormat.EMAIL) {\n StringValidator.patternMatcher(\n parents,\n schema,\n element,\n StringValidator.EMAIL,\n 'email pattern',\n );\n } else if (schema.getPattern()) {\n StringValidator.patternMatcher(\n parents,\n schema,\n element,\n new RegExp(schema.getPattern()!),\n 'pattern ' + schema.getPattern(),\n );\n }\n\n let length: number = element.length;\n if (schema.getMinLength() && length < schema.getMinLength()!) {\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n 'Expected a minimum of ' + schema.getMinLength() + ' characters',\n );\n } else if (schema.getMaxLength() && length > schema.getMaxLength()!) {\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n 'Expected a maximum of ' + schema.getMaxLength() + ' characters',\n );\n }\n\n return element;\n }\n\n private static patternMatcher(\n parents: Schema[],\n schema: Schema,\n element: any,\n pattern: RegExp,\n message: string,\n ) {\n let matched: boolean = pattern.test(element);\n if (!matched) {\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n element.toString() + ' is not matched with the ' + message,\n );\n }\n }\n\n private constructor() {}\n}\n","import { Repository } from '../../../Repository';\nimport { Schema } from '../Schema';\nimport { SchemaType } from '../type/SchemaType';\nimport { ArrayValidator } from './ArrayValidator';\nimport { BooleanValidator } from './BooleanValidator';\nimport { SchemaValidationException } from './exception/SchemaValidationException';\nimport { NullValidator } from './NullValidator';\nimport { NumberValidator } from './NumberValidator';\nimport { ObjectValidator } from './ObjectValidator';\nimport { SchemaValidator } from './SchemaValidator';\nimport { StringValidator } from './StringValidator';\n\nexport class TypeValidator {\n public static async validate(\n parents: Schema[],\n type: SchemaType,\n schema: Schema,\n repository: Repository<Schema> | undefined,\n element: any,\n ): Promise<any> {\n if (type == SchemaType.STRING) {\n StringValidator.validate(parents, schema, element);\n } else if (\n type == SchemaType.LONG ||\n type == SchemaType.INTEGER ||\n type == SchemaType.DOUBLE ||\n type == SchemaType.FLOAT\n ) {\n NumberValidator.validate(type, parents, schema, element);\n } else if (type == SchemaType.BOOLEAN) {\n BooleanValidator.validate(parents, schema, element);\n } else if (type == SchemaType.OBJECT) {\n await ObjectValidator.validate(parents, schema, repository, element);\n } else if (type == SchemaType.ARRAY) {\n await ArrayValidator.validate(parents, schema, repository, element);\n } else if (type == SchemaType.NULL) {\n NullValidator.validate(parents, schema, element);\n } else {\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n type + ' is not a valid type.',\n );\n }\n\n return element;\n }\n\n private constructor() {}\n}\n","import { Repository } from '../../../Repository';\nimport { deepEqual } from '../../../util/deepEqual';\nimport { isNullValue } from '../../../util/NullCheck';\nimport { StringUtil } from '../../../util/string/StringUtil';\nimport { Schema } from '../Schema';\nimport { SchemaUtil } from '../SchemaUtil';\nimport { AnyOfAllOfOneOfValidator } from './AnyOfAllOfOneOfValidator';\nimport { SchemaValidationException } from './exception/SchemaValidationException';\nimport { TypeValidator } from './TypeValidator';\n\nexport class SchemaValidator {\n public static path(parents: Schema[] | undefined): string {\n if (!parents) return '';\n\n return parents\n .map((e) => e.getTitle() ?? '')\n .filter((e) => !!e)\n .reduce((a, c, i) => a + (i === 0 ? '' : '.') + c, '');\n }\n\n public static async validate(\n parents: Schema[] | undefined,\n schema: Schema | undefined,\n repository: Repository<Schema> | undefined,\n element: any,\n ): Promise<any> {\n if (!schema) {\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n 'No schema found to validate',\n );\n }\n\n if (!parents) {\n parents = new Array();\n }\n parents.push(schema);\n\n if (isNullValue(element) && !isNullValue(schema.getDefaultValue())) {\n return JSON.parse(JSON.stringify(schema.getDefaultValue()));\n }\n\n if (!isNullValue(schema.getConstant())) {\n return SchemaValidator.constantValidation(parents, schema, element);\n }\n\n if (schema.getEnums() && !schema.getEnums()?.length) {\n return SchemaValidator.enumCheck(parents, schema, element);\n }\n\n if (schema.getFormat() && isNullValue(schema.getType()))\n throw new SchemaValidationException(\n this.path(parents),\n 'Type is missing in schema for declared ' +\n schema.getFormat()?.toString() +\n ' format.',\n );\n\n if (schema.getType()) {\n await SchemaValidator.typeValidation(parents, schema, repository, element);\n }\n\n if (!StringUtil.isNullOrBlank(schema.getRef())) {\n return await SchemaValidator.validate(\n parents,\n await SchemaUtil.getSchemaFromRef(parents[0], repository, schema.getRef()),\n repository,\n element,\n );\n }\n\n if (schema.getOneOf() || schema.getAllOf() || schema.getAnyOf()) {\n AnyOfAllOfOneOfValidator.validate(parents, schema, repository, element);\n }\n\n if (schema.getNot()) {\n let flag: boolean = false;\n try {\n let x = await SchemaValidator.validate(\n parents,\n schema.getNot(),\n repository,\n element,\n );\n flag = true;\n } catch (err) {\n flag = false;\n }\n if (flag)\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n 'Schema validated value in not condition.',\n );\n }\n\n return element;\n }\n\n public static constantValidation(parents: Schema[], schema: Schema, element: any): any {\n if (!deepEqual(schema.getConstant(), element)) {\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n 'Expecting a constant value : ' + element,\n );\n }\n return element;\n }\n\n public static enumCheck(parents: Schema[], schema: Schema, element: any): any {\n let x: boolean = false;\n for (let e of schema.getEnums() ?? []) {\n if (e === element) {\n x = true;\n break;\n }\n }\n\n if (x) return element;\n else {\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n 'Value is not one of ' + schema.getEnums(),\n );\n }\n }\n\n public static async typeValidation(\n parents: Schema[],\n schema: Schema,\n repository: Repository<Schema> | undefined,\n element: any,\n ) {\n let valid: boolean = false;\n let list: SchemaValidationException[] = [];\n let type;\n for (type of Array.from(schema.getType()?.getAllowedSchemaTypes()?.values() ?? [])) {\n try {\n await TypeValidator.validate(parents, type, schema, repository, element);\n valid = true;\n break;\n } catch (err: any) {\n valid = false;\n list.push(err);\n }\n }\n\n if (!valid) {\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n 'Value ' + JSON.stringify(element) + ' is not of valid type(s)',\n list,\n );\n }\n }\n\n private constructor() {}\n}\n","import { KIRuntimeException } from '../exception/KIRuntimeException';\nimport { Schema } from '../json/schema/Schema';\nimport { SchemaValidator } from '../json/schema/validator/SchemaValidator';\nimport { Event } from '../model/Event';\nimport { FunctionOutput } from '../model/FunctionOutput';\nimport { FunctionSignature } from '../model/FunctionSignature';\nimport { Parameter } from '../model/Parameter';\nimport { Repository } from '../Repository';\nimport { FunctionExecutionParameters } from '../runtime/FunctionExecutionParameters';\nimport { StatementExecution } from '../runtime/StatementExecution';\nimport { isNullValue } from '../util/NullCheck';\nimport { Tuple2 } from '../util/Tuples';\nimport { Function } from './Function';\n\nexport abstract class AbstractFunction implements Function {\n protected async validateArguments(\n args: Map<string, any>,\n schemaRepository: Repository<Schema>,\n statementExecution: StatementExecution | undefined,\n ): Promise<Map<string, any>> {\n const retmap = new Map<string, any>();\n\n for (let e of Array.from(this.getSignature().getParameters().entries())) {\n let param: Parameter = e[1];\n try {\n let tup = await this.validateArgument(args, schemaRepository, e, param);\n retmap.set(tup.getT1(), tup.getT2());\n } catch (err: any) {\n const signature = this.getSignature();\n throw new KIRuntimeException(\n `Error while executing the function ${signature.getNamespace()}.${signature.getName()}'s parameter ${param.getParameterName()} with step name '${\n statementExecution?.getStatement().getStatementName() ?? 'Unknown Step'\n }' with error : ${err?.message}`,\n );\n }\n }\n\n return retmap;\n }\n\n private async validateArgument(\n args: Map<string, any>,\n schemaRepository: Repository<Schema>,\n e: [string, Parameter],\n param: Parameter,\n ): Promise<Tuple2<string, any>> {\n let key: string = e[0];\n let jsonElement: any = args.get(e[0]);\n\n if (isNullValue(jsonElement) && !param.isVariableArgument()) {\n return new Tuple2(\n key,\n await SchemaValidator.validate(\n undefined,\n param.getSchema(),\n schemaRepository,\n undefined,\n ),\n );\n }\n\n if (!param?.isVariableArgument())\n return new Tuple2(\n key,\n await SchemaValidator.validate(\n undefined,\n param.getSchema(),\n schemaRepository,\n jsonElement,\n ),\n );\n\n let array: any[] | undefined = undefined;\n\n if (Array.isArray(jsonElement)) array = jsonElement as any[];\n else {\n array = [];\n if (!isNullValue(jsonElement)) array.push(jsonElement);\n else if (!isNullValue(param.getSchema().getDefaultValue()))\n array.push(param.getSchema().getDefaultValue());\n }\n\n for (let i = 0; i < array.length; i++) {\n array[i] = await SchemaValidator.validate(\n undefined,\n param.getSchema(),\n schemaRepository,\n array[i],\n );\n }\n\n return new Tuple2(key, array);\n }\n\n public async execute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n const args: Map<string, any> = await this.validateArguments(\n context.getArguments() ?? new Map(),\n context.getSchemaRepository(),\n context.getStatementExecution(),\n );\n context.setArguments(args);\n try {\n return this.internalExecute(context);\n } catch (err: any) {\n const signature = this.getSignature();\n throw new KIRuntimeException(\n `Error while executing the function ${signature.getNamespace()}.${signature.getName()} with step name '${\n context.getStatementExecution()?.getStatement().getStatementName() ??\n 'Unknown Step'\n }' with error : ${err?.message}`,\n );\n }\n }\n\n public getProbableEventSignature(\n probableParameters: Map<string, Schema[]>,\n ): Map<string, Event> {\n return this.getSignature().getEvents();\n }\n\n protected abstract internalExecute(\n context: FunctionExecutionParameters,\n ): Promise<FunctionOutput>;\n public abstract getSignature(): FunctionSignature;\n}\n","import { Schema } from '../../../json/schema/Schema';\nimport { SchemaType } from '../../../json/schema/type/SchemaType';\nimport { TypeUtil } from '../../../json/schema/type/TypeUtil';\nimport { Event } from '../../../model/Event';\nimport { FunctionSignature } from '../../../model/FunctionSignature';\nimport { Parameter } from '../../../model/Parameter';\nimport { Namespaces } from '../../../namespaces/Namespaces';\nimport { MapUtil } from '../../../util/MapUtil';\nimport { AbstractFunction } from '../../AbstractFunction';\n\nexport abstract class AbstractArrayFunction extends AbstractFunction {\n public static readonly EVENT_INDEX_NAME: string = 'index';\n public static readonly EVENT_RESULT_NAME: string = 'result';\n\n public static readonly EVENT_INDEX: Event = new Event(\n Event.OUTPUT,\n MapUtil.of(\n AbstractArrayFunction.EVENT_INDEX_NAME,\n Schema.ofInteger(AbstractArrayFunction.EVENT_INDEX_NAME),\n ),\n );\n\n public static readonly EVENT_RESULT_INTEGER: Event = new Event(\n Event.OUTPUT,\n MapUtil.of(\n AbstractArrayFunction.EVENT_RESULT_NAME,\n Schema.ofInteger(AbstractArrayFunction.EVENT_RESULT_NAME),\n ),\n );\n\n public static readonly EVENT_RESULT_BOOLEAN: Event = new Event(\n Event.OUTPUT,\n MapUtil.of(\n AbstractArrayFunction.EVENT_RESULT_NAME,\n Schema.ofBoolean(AbstractArrayFunction.EVENT_RESULT_NAME),\n ),\n );\n\n public static readonly EVENT_RESULT_ARRAY: Event = new Event(\n Event.OUTPUT,\n MapUtil.of(\n AbstractArrayFunction.EVENT_RESULT_NAME,\n Schema.ofArray(\n AbstractArrayFunction.EVENT_RESULT_NAME,\n Schema.ofAny(AbstractArrayFunction.EVENT_RESULT_NAME),\n ),\n ),\n );\n\n public static readonly EVENT_RESULT_EMPTY: Event = new Event(Event.OUTPUT, MapUtil.of());\n\n public static readonly EVENT_RESULT_ANY: Event = new Event(\n Event.OUTPUT,\n MapUtil.of(this.EVENT_RESULT_NAME, Schema.ofAny(this.EVENT_RESULT_NAME)),\n );\n\n public static readonly EVENT_RESULT_OBJECT: Event = new Event(\n Event.OUTPUT,\n MapUtil.of(this.EVENT_RESULT_NAME, Schema.ofObject(this.EVENT_RESULT_NAME)),\n );\n\n public static readonly PARAMETER_INT_LENGTH: Parameter = Parameter.of(\n 'length',\n Schema.ofInteger('length').setDefaultValue(-1),\n );\n public static readonly PARAMETER_ARRAY_FIND: Parameter = Parameter.of(\n 'find',\n Schema.ofArray('eachFind', Schema.ofAny('eachFind')),\n );\n public static readonly PARAMETER_INT_SOURCE_FROM: Parameter = Parameter.of(\n 'srcFrom',\n Schema.ofInteger('srcFrom').setDefaultValue(0).setMinimum(0),\n );\n public static readonly PARAMETER_INT_SECOND_SOURCE_FROM: Parameter = Parameter.of(\n 'secondSrcFrom',\n Schema.ofInteger('secondSrcFrom').setDefaultValue(0),\n );\n public static readonly PARAMETER_INT_FIND_FROM: Parameter = Parameter.of(\n 'findFrom',\n Schema.ofInteger('findFrom').setDefaultValue(0),\n );\n\n public static readonly PARAMETER_INT_OFFSET: Parameter = Parameter.of(\n 'offset',\n Schema.ofInteger('offset').setDefaultValue(0),\n );\n\n public static readonly PARAMETER_ROTATE_LENGTH: Parameter = Parameter.of(\n 'rotateLength',\n Schema.ofInteger('rotateLength').setDefaultValue(1).setMinimum(1),\n );\n\n public static readonly PARAMETER_BOOLEAN_ASCENDING: Parameter = Parameter.of(\n 'ascending',\n Schema.ofBoolean('ascending').setDefaultValue(false),\n );\n\n public static readonly PARAMETER_FIND_PRIMITIVE: Parameter = Parameter.of(\n 'findPrimitive',\n Schema.of(\n 'findPrimitive',\n SchemaType.STRING,\n SchemaType.DOUBLE,\n SchemaType.FLOAT,\n SchemaType.INTEGER,\n SchemaType.LONG,\n ),\n );\n\n public static readonly PARAMETER_ARRAY_SOURCE: Parameter = Parameter.of(\n 'source',\n Schema.ofArray('eachSource', Schema.ofAny('eachSource')),\n );\n\n public static readonly PARAMETER_ARRAY_SECOND_SOURCE: Parameter = Parameter.of(\n 'secondSource',\n Schema.ofArray('eachSecondSource', Schema.ofAny('eachSecondSource')),\n );\n\n public static readonly PARAMETER_ARRAY_SOURCE_PRIMITIVE: Parameter = Parameter.of(\n 'source',\n Schema.ofArray(\n 'eachSource',\n new Schema()\n .setName('eachSource')\n .setType(\n TypeUtil.of(\n SchemaType.STRING,\n SchemaType.NULL,\n SchemaType.INTEGER,\n SchemaType.FLOAT,\n SchemaType.DOUBLE,\n SchemaType.LONG,\n ),\n ),\n ),\n );\n\n public static readonly PARAMETER_BOOLEAN_DEEP_COPY: Parameter = Parameter.of(\n 'deepCopy',\n Schema.ofBoolean('deepCopy').setDefaultValue(true),\n );\n public static readonly PARAMETER_ANY: Parameter = Parameter.of(\n 'element',\n Schema.ofAny('element'),\n );\n\n public static readonly PARAMETER_ANY_NOT_NULL: Parameter = Parameter.of(\n 'elementObject',\n Schema.ofAnyNotNull('elementObject'),\n );\n\n public static readonly PARAMETER_ANY_VAR_ARGS: Parameter = Parameter.of(\n 'element',\n Schema.ofAny('element'),\n ).setVariableArgument(true);\n\n public static readonly PARAMETER_ARRAY_RESULT: Parameter = Parameter.of(\n AbstractArrayFunction.EVENT_RESULT_NAME,\n Schema.ofArray('eachResult', Schema.ofAny('eachResult')),\n );\n\n private signature: FunctionSignature;\n\n protected constructor(functionName: string, parameters: Parameter[], event: Event) {\n super();\n\n const paramMap: Map<string, Parameter> = new Map();\n for (const param of parameters) paramMap.set(param.getParameterName(), param);\n\n this.signature = new FunctionSignature(functionName)\n .setNamespace(Namespaces.SYSTEM_ARRAY)\n .setParameters(paramMap)\n .setEvents(MapUtil.of(event.getName(), event));\n }\n\n public getSignature(): FunctionSignature {\n return this.signature;\n }\n}\n","import { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { AbstractArrayFunction } from './AbstractArrayFunction';\n\nexport class Concatenate extends AbstractArrayFunction {\n public constructor() {\n super(\n 'Concatenate',\n [\n AbstractArrayFunction.PARAMETER_ARRAY_SOURCE,\n AbstractArrayFunction.PARAMETER_ARRAY_SECOND_SOURCE,\n ],\n AbstractArrayFunction.EVENT_RESULT_ARRAY,\n );\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let source: any[] = context\n ?.getArguments()\n ?.get(AbstractArrayFunction.PARAMETER_ARRAY_SOURCE.getParameterName());\n\n let secondSource: any[] = context\n ?.getArguments()\n ?.get(AbstractArrayFunction.PARAMETER_ARRAY_SECOND_SOURCE.getParameterName());\n\n return new FunctionOutput([\n EventResult.outputOf(\n new Map([[AbstractArrayFunction.EVENT_RESULT_NAME, [...source, ...secondSource]]]),\n ),\n ]);\n }\n}\n","import { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { AbstractArrayFunction } from './AbstractArrayFunction';\n\nexport class AddFirst extends AbstractArrayFunction {\n public constructor() {\n super(\n 'AddFirst',\n [AbstractArrayFunction.PARAMETER_ARRAY_SOURCE, AbstractArrayFunction.PARAMETER_ANY],\n AbstractArrayFunction.EVENT_RESULT_ARRAY,\n );\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let source: any[] = context\n ?.getArguments()\n ?.get(AbstractArrayFunction.PARAMETER_ARRAY_SOURCE.getParameterName());\n\n let input: any = context\n ?.getArguments()\n ?.get(AbstractArrayFunction.PARAMETER_ANY.getParameterName());\n\n source = [...source];\n\n if (source.length == 0) {\n source.push(input);\n return new FunctionOutput([EventResult.outputOf(new Map([]))]);\n }\n\n source.push(input);\n\n let len: number = source.length - 1;\n\n while (len > 0) {\n let temp: any = source[len - 1];\n source[len - 1] = source[len];\n source[len--] = temp;\n }\n\n return new FunctionOutput([\n EventResult.outputOf(new Map([[AbstractArrayFunction.EVENT_RESULT_NAME, source]])),\n ]);\n }\n}\n","import { Schema } from '../../../json/schema/Schema';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { Parameter } from '../../../model/Parameter';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { AbstractArrayFunction } from './AbstractArrayFunction';\n\nconst KEY_NAME = 'keyName';\n\nexport class ArrayToArrayOfObjects extends AbstractArrayFunction {\n public constructor() {\n super(\n 'ArrayToArrayOfObjects',\n [\n AbstractArrayFunction.PARAMETER_ARRAY_SOURCE,\n Parameter.of(KEY_NAME, Schema.ofString(KEY_NAME), true),\n ],\n AbstractArrayFunction.EVENT_RESULT_ARRAY,\n );\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let source: any[] = context\n ?.getArguments()\n ?.get(ArrayToArrayOfObjects.PARAMETER_ARRAY_SOURCE.getParameterName());\n\n let keys: string[] = context?.getArguments()?.get(KEY_NAME);\n\n if (!source?.length) {\n return new FunctionOutput([\n EventResult.outputOf(new Map([[AbstractArrayFunction.EVENT_RESULT_NAME, []]])),\n ]);\n }\n\n let result: any[] = source.map((e) => {\n const obj: any = {};\n if (Array.isArray(e)) {\n if (keys.length) {\n keys.forEach((key, index) => {\n obj[key] = e[index];\n });\n } else {\n for (let i = 0; i < e.length; i++) {\n obj[`value${i + 1}`] = e[i];\n }\n }\n } else {\n obj[keys.length ? keys[0] : 'value'] = e;\n }\n\n return obj;\n });\n\n return new FunctionOutput([\n EventResult.outputOf(new Map([[AbstractArrayFunction.EVENT_RESULT_NAME, result]])),\n ]);\n }\n}\n","export class ExecutionException extends Error {\n private cause?: Error;\n\n constructor(message: string, err?: Error) {\n super(message);\n this.cause = err;\n }\n\n public getCause(): Error | undefined {\n return this.cause;\n }\n}\n","import { ExecutionException } from '../../exception/ExecutionException';\nimport { KIRuntimeException } from '../../exception/KIRuntimeException';\nimport { JsonExpression } from '../../json/JsonExpression';\nimport { SchemaType } from '../../json/schema/type/SchemaType';\nimport { isNullValue } from '../NullCheck';\nimport { StringFormatter } from '../string/StringFormatter';\nimport { Tuple2 } from '../Tuples';\n\nexport class PrimitiveUtil {\n public static findPrimitiveNullAsBoolean(element: any): Tuple2<SchemaType, any> {\n if (isNullValue(element)) return new Tuple2(SchemaType.BOOLEAN, false);\n\n let typof: string = typeof element;\n if (typof === 'object')\n throw new ExecutionException(\n StringFormatter.format('$ is not a primitive type', element),\n );\n\n let value: any = element;\n\n if (typof === 'boolean') return new Tuple2(SchemaType.BOOLEAN, value);\n\n if (typof === 'string') return new Tuple2(SchemaType.STRING, value);\n\n return PrimitiveUtil.findPrimitiveNumberType(value);\n }\n\n public static findPrimitive(element: any): Tuple2<SchemaType, any> {\n if (isNullValue(element)) return new Tuple2(SchemaType.NULL, undefined);\n\n let typof: string = typeof element;\n\n if (typof === 'object')\n throw new ExecutionException(\n StringFormatter.format('$ is not a primitive type', element),\n );\n\n let value: any = element;\n\n if (typof === 'boolean') return new Tuple2(SchemaType.BOOLEAN, value);\n\n if (typof === 'string') return new Tuple2(SchemaType.STRING, value);\n\n return PrimitiveUtil.findPrimitiveNumberType(value);\n }\n\n public static findPrimitiveNumberType(element: any): Tuple2<SchemaType, any> {\n if (isNullValue(element) || Array.isArray(element) || typeof element == 'object')\n throw new ExecutionException(\n StringFormatter.format('Unable to convert $ to a number.', element),\n );\n\n let value: any = element;\n\n // I think we should not forcibly convert a string to number, it was needed in java as we were using GSON.\n // if (typeof value === \"string\") {\n // if (!/^[\\d]{0,}[.]{0,1}[\\d]{1,}$/.test(value)) //Don't do this, I need to enhance to accommadate the exponent form.\n // throw new ExecutionException(StringFormatter.format(\"Unable to convert $ to a number.\", value));\n // let fv = parseFloat(value);\n // let iv = parseInt(value);\n\n // if (iv === fv)\n // return new Tuple2(SchemaType.LONG, iv);\n // else\n // return new Tuple2(SchemaType.DOUBLE, fv);\n // }\n\n try {\n let num: number = value as number;\n if (Number.isInteger(num)) return new Tuple2(SchemaType.LONG, num);\n else return new Tuple2(SchemaType.DOUBLE, num);\n } catch (err: any) {\n throw new ExecutionException(\n StringFormatter.format('Unable to convert $ to a number.', value),\n err,\n );\n }\n }\n\n public static compare(a: any, b: any): number {\n if (a == b) return 0;\n\n if (isNullValue(a) || isNullValue(b)) return isNullValue(a) ? -1 : 1;\n\n if (Array.isArray(a) || Array.isArray(b)) {\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length != b.length) return a.length - b.length;\n for (let i = 0; i < a.length; i++) {\n let cmp: number = this.compare(a[i], b[i]);\n if (cmp != 0) return cmp;\n }\n return 0;\n }\n return Array.isArray(a) ? -1 : 1;\n }\n\n const typofa = typeof a;\n const typofb = typeof b;\n\n if (typofa === 'object' || typofb === 'object') {\n if (typofa === 'object' && typofb === 'object') {\n Object.keys(a).forEach((key) => {\n let cmp = this.compare(a[key], b[key]);\n if (cmp != 0) return cmp;\n });\n }\n return typofa === 'object' ? -1 : 1;\n }\n\n return this.comparePrimitive(a, b);\n }\n\n public static comparePrimitive(oa: any, ob: any): number {\n if (isNullValue(oa) || isNullValue(ob)) {\n if (isNullValue(oa) && isNullValue(ob)) return 0;\n return isNullValue(oa) ? -1 : 1;\n }\n\n if (oa == ob) return 0;\n\n if (typeof oa == 'boolean' || typeof ob == 'boolean') return oa ? -1 : 1;\n\n if (typeof oa == 'string' || typeof ob == 'string') {\n return oa + '' < ob + '' ? -1 : 1;\n }\n\n if (typeof oa == 'number' || typeof ob == 'number') {\n return oa - ob;\n }\n\n return 0;\n }\n\n private static baseNumberType(num: number): SchemaType {\n if (Number.isInteger(num)) return SchemaType.LONG;\n else return SchemaType.DOUBLE;\n }\n\n public static toPrimitiveType(e: any): number {\n return e as number;\n }\n\n private constructor() {}\n}\n","import { KIRuntimeException } from '../../../exception/KIRuntimeException';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { PrimitiveUtil } from '../../../util/primitive/PrimitiveUtil';\nimport { AbstractArrayFunction } from './AbstractArrayFunction';\n\nexport class BinarySearch extends AbstractArrayFunction {\n public constructor() {\n super(\n 'BinarySearch',\n [\n BinarySearch.PARAMETER_ARRAY_SOURCE_PRIMITIVE,\n BinarySearch.PARAMETER_INT_SOURCE_FROM,\n BinarySearch.PARAMETER_FIND_PRIMITIVE,\n BinarySearch.PARAMETER_INT_LENGTH,\n ],\n BinarySearch.EVENT_INDEX,\n );\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let source: any[] = context\n ?.getArguments()\n ?.get(BinarySearch.PARAMETER_ARRAY_SOURCE.getParameterName());\n\n let start: number = context\n ?.getArguments()\n ?.get(BinarySearch.PARAMETER_INT_SOURCE_FROM.getParameterName());\n\n let find: any = context\n ?.getArguments()\n ?.get(BinarySearch.PARAMETER_FIND_PRIMITIVE.getParameterName());\n\n let end: number = context\n ?.getArguments()\n ?.get(BinarySearch.PARAMETER_INT_LENGTH.getParameterName());\n\n if (source.length == 0 || start < 0 || start > source.length)\n throw new KIRuntimeException('Search source array cannot be empty');\n\n if (end == -1) end = source.length - start;\n\n end = start + end;\n\n if (end > source.length)\n throw new KIRuntimeException(\n 'End point for array cannot be more than the size of the source array',\n );\n\n let index: number = -1;\n\n while (start <= end) {\n let mid: number = Math.floor((start + end) / 2);\n if (PrimitiveUtil.compare(source[mid], find) == 0) {\n index = mid;\n break;\n } else if (PrimitiveUtil.compare(source[mid], find) > 0) end = mid - 1;\n else start = mid + 1;\n }\n\n return new FunctionOutput([\n EventResult.outputOf(new Map([[BinarySearch.EVENT_INDEX_NAME, index]])),\n ]);\n }\n}\n","export class ArrayUtil {\n public static removeAListFrom(source: any[], removeList: any[]): void {\n if (!removeList || !source || !source.length || !removeList.length) return;\n\n const e: Set<any> = new Set<any>(removeList);\n\n for (let i = 0; i < source.length; i++) {\n if (!e.has(source[i])) continue;\n source.splice(i, 1);\n i--;\n }\n }\n\n public static of<K>(...k: K[]): K[] {\n const copy: K[] = new Array(k.length);\n\n for (let i = 0; i < k.length; i++) copy[i] = k[i];\n\n return copy;\n }\n\n private constructor() {}\n}\n","import { KIRuntimeException } from '../../../exception/KIRuntimeException';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { ArrayUtil } from '../../../util/ArrayUtil';\nimport { MapUtil } from '../../../util/MapUtil';\nimport { isNullValue } from '../../../util/NullCheck';\nimport { StringFormatter } from '../../../util/string/StringFormatter';\nimport { AbstractArrayFunction } from './AbstractArrayFunction';\n\nexport class Compare extends AbstractArrayFunction {\n public constructor() {\n super(\n 'Compare',\n ArrayUtil.of(\n Compare.PARAMETER_ARRAY_SOURCE,\n Compare.PARAMETER_INT_SOURCE_FROM,\n Compare.PARAMETER_ARRAY_FIND,\n Compare.PARAMETER_INT_FIND_FROM,\n Compare.PARAMETER_INT_LENGTH,\n ),\n Compare.EVENT_RESULT_INTEGER,\n );\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n var source = context\n ?.getArguments()\n ?.get(Compare.PARAMETER_ARRAY_SOURCE.getParameterName());\n var srcfrom = context\n ?.getArguments()\n ?.get(Compare.PARAMETER_INT_SOURCE_FROM.getParameterName());\n var find = context?.getArguments()?.get(Compare.PARAMETER_ARRAY_FIND.getParameterName());\n var findfrom = context\n ?.getArguments()\n ?.get(Compare.PARAMETER_INT_FIND_FROM.getParameterName());\n var length = context?.getArguments()?.get(Compare.PARAMETER_INT_LENGTH.getParameterName());\n\n if (source.length == 0) {\n throw new KIRuntimeException('Compare source array cannot be empty');\n }\n\n if (find.length == 0) {\n throw new KIRuntimeException('Compare find array cannot be empty');\n }\n\n if (length == -1) length = source.length - srcfrom;\n\n if (srcfrom + length > source.length)\n throw new KIRuntimeException(\n StringFormatter.format(\n 'Source array size $ is less than comparing size $',\n source.length,\n srcfrom + length,\n ),\n );\n\n if (findfrom + length > find.length)\n throw new KIRuntimeException(\n StringFormatter.format(\n 'Find array size $ is less than comparing size $',\n find.length,\n findfrom + length,\n ),\n );\n\n return new FunctionOutput(\n ArrayUtil.of(\n EventResult.outputOf(\n MapUtil.of(\n Compare.EVENT_RESULT_NAME,\n this.compare(\n source,\n srcfrom,\n srcfrom + length,\n find,\n findfrom,\n findfrom + length,\n ),\n ),\n ),\n ),\n );\n }\n\n public compare(\n source: any[],\n srcfrom: number,\n srcto: number,\n find: any[],\n findfrom: number,\n findto: number,\n ): number {\n if (srcto < srcfrom) {\n let x: number = srcfrom;\n srcfrom = srcto;\n srcto = x;\n }\n\n if (findto < findfrom) {\n let x: number = findfrom;\n findfrom = findto;\n findto = x;\n }\n\n if (srcto - srcfrom != findto - findfrom) {\n throw new KIRuntimeException(\n StringFormatter.format(\n 'Cannot compare uneven arrays from $ to $ in source array with $ to $ in find array',\n srcto,\n srcfrom,\n findto,\n findfrom,\n ),\n );\n }\n\n for (let i = srcfrom, j = findfrom; i < srcto; i++, j++) {\n let x: number = 1;\n\n if (isNullValue(source[i]) || isNullValue(find[j])) {\n let s: boolean = isNullValue(source[i]);\n let f: boolean = isNullValue(find[j]);\n\n if (s == f) x = 0;\n else if (s) x = -1;\n } else {\n let typs: string = typeof source[i];\n let typf: string = typeof find[j];\n\n if (typs === 'object' || typf === 'object') {\n x = 1;\n } else if (typs === 'string' || typf === 'string') {\n let s = '' + source[i];\n let f = '' + find[j];\n if (s === f) x = 0;\n else if (s < f) x = -1;\n } else if (typs === 'boolean' || typf === 'boolean') {\n x = typs == typf ? 0 : 1;\n } else if (typs === 'number' && typf === 'number') {\n x = source[i] - find[j];\n }\n }\n\n if (x != 0) return x;\n }\n\n return 0;\n }\n}\n","export function duplicate(obj: any): any {\n if (!obj) return obj;\n if (globalThis.structuredClone) return globalThis.structuredClone(obj);\n return JSON.parse(JSON.stringify(obj));\n}\n","import { KIRuntimeException } from '../../../exception/KIRuntimeException';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { MapUtil } from '../../../util/MapUtil';\nimport { isNullValue } from '../../../util/NullCheck';\nimport { duplicate } from '../../../util/duplicate';\nimport { StringFormatter } from '../../../util/string/StringFormatter';\nimport { AbstractArrayFunction } from './AbstractArrayFunction';\n\nexport class Copy extends AbstractArrayFunction {\n public constructor() {\n super(\n 'Copy',\n [\n Copy.PARAMETER_ARRAY_SOURCE,\n Copy.PARAMETER_INT_SOURCE_FROM,\n Copy.PARAMETER_INT_LENGTH,\n Copy.PARAMETER_BOOLEAN_DEEP_COPY,\n ],\n Copy.EVENT_RESULT_ARRAY,\n );\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n var source = context?.getArguments()?.get(Copy.PARAMETER_ARRAY_SOURCE.getParameterName());\n var srcfrom = context\n ?.getArguments()\n ?.get(Copy.PARAMETER_INT_SOURCE_FROM.getParameterName());\n var length = context?.getArguments()?.get(Copy.PARAMETER_INT_LENGTH.getParameterName());\n\n if (length == -1) length = source.length - srcfrom;\n\n if (srcfrom + length > source.length)\n throw new KIRuntimeException(\n StringFormatter.format(\n 'Array has no elements from $ to $ as the array size is $',\n srcfrom,\n srcfrom + length,\n source.length,\n ),\n );\n\n var deep = context\n ?.getArguments()\n ?.get(Copy.PARAMETER_BOOLEAN_DEEP_COPY.getParameterName());\n\n const ja: any[] = new Array(length);\n\n for (let i = srcfrom; i < srcfrom + length; i++) {\n if (!isNullValue(source[i])) ja[i - srcfrom] = deep ? duplicate(source[i]) : source[i];\n }\n\n return new FunctionOutput([EventResult.outputOf(MapUtil.of(Copy.EVENT_RESULT_NAME, ja))]);\n }\n}\n","import { KIRuntimeException } from '../../../exception/KIRuntimeException';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { AbstractArrayFunction } from './AbstractArrayFunction';\nimport { PrimitiveUtil } from '../../../util/primitive/PrimitiveUtil';\n\nexport class Delete extends AbstractArrayFunction {\n public constructor() {\n super(\n 'Delete',\n [\n AbstractArrayFunction.PARAMETER_ARRAY_SOURCE,\n AbstractArrayFunction.PARAMETER_ANY_VAR_ARGS,\n ],\n AbstractArrayFunction.EVENT_RESULT_ARRAY,\n );\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let source: any[] = context\n ?.getArguments()\n ?.get(Delete.PARAMETER_ARRAY_SOURCE.getParameterName());\n\n let receivedArgs: any[] = context\n ?.getArguments()\n ?.get(Delete.PARAMETER_ANY_VAR_ARGS.getParameterName());\n\n if (receivedArgs === null || typeof receivedArgs === 'undefined')\n throw new KIRuntimeException(\n 'The deletable var args are empty. So cannot be proceeded further.',\n );\n\n if (source.length == 0 || receivedArgs.length == 0)\n throw new KIRuntimeException(\n 'Expected a source or deletable for an array but not found any',\n );\n\n let indexes = new Set<number>();\n\n for (let i: number = source.length - 1; i >= 0; i--) {\n for (let j: number = 0; j < receivedArgs.length; j++) {\n if (!indexes.has(i) && PrimitiveUtil.compare(source[i], receivedArgs[j]) == 0)\n indexes.add(source[i]);\n }\n }\n\n return new FunctionOutput([\n EventResult.outputOf(\n new Map([\n [\n AbstractArrayFunction.EVENT_RESULT_NAME,\n source.filter((value) => !indexes.has(value)),\n ],\n ]),\n ),\n ]);\n }\n}\n","import { KIRuntimeException } from '../../../exception/KIRuntimeException';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { AbstractArrayFunction } from './AbstractArrayFunction';\n\nexport class DeleteFirst extends AbstractArrayFunction {\n public constructor() {\n super('DeleteFirst', [DeleteFirst.PARAMETER_ARRAY_SOURCE], DeleteFirst.EVENT_RESULT_ARRAY);\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let source: any[] = context\n ?.getArguments()\n ?.get(DeleteFirst.PARAMETER_ARRAY_SOURCE.getParameterName());\n\n if (source.length == 0) throw new KIRuntimeException('Given source array is empty');\n\n source = [...source];\n source.shift();\n return new FunctionOutput([\n EventResult.outputOf(new Map([[AbstractArrayFunction.EVENT_RESULT_NAME, source]])),\n ]);\n }\n}\n","import { KIRuntimeException } from '../../../exception/KIRuntimeException';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { AbstractArrayFunction } from './AbstractArrayFunction';\n\nexport class DeleteFrom extends AbstractArrayFunction {\n public constructor() {\n super(\n 'DeleteFrom',\n [\n DeleteFrom.PARAMETER_ARRAY_SOURCE,\n DeleteFrom.PARAMETER_INT_SOURCE_FROM,\n DeleteFrom.PARAMETER_INT_LENGTH,\n ],\n DeleteFrom.EVENT_RESULT_ARRAY,\n );\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let source: any[] = context\n ?.getArguments()\n ?.get(DeleteFrom.PARAMETER_ARRAY_SOURCE.getParameterName());\n\n let start: number = context\n ?.getArguments()\n ?.get(DeleteFrom.PARAMETER_INT_SOURCE_FROM.getParameterName());\n\n let len: number = context\n ?.getArguments()\n ?.get(DeleteFrom.PARAMETER_INT_LENGTH.getParameterName());\n\n if (source.length == 0) throw new KIRuntimeException('There are no elements to be deleted');\n\n source = [...source];\n if (start >= source.length || start < 0)\n throw new KIRuntimeException(\n 'The int source for the array should be in between 0 and length of the array ',\n );\n\n if (len == -1) len = source.length - start;\n\n if (start + len > source.length)\n throw new KIRuntimeException(\n 'Requested length to be deleted is more than the size of array ',\n );\n\n source.splice(start, len);\n\n return new FunctionOutput([\n EventResult.outputOf(new Map([[AbstractArrayFunction.EVENT_RESULT_NAME, source]])),\n ]);\n }\n}\n","import { KIRuntimeException } from '../../../exception/KIRuntimeException';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { AbstractArrayFunction } from './AbstractArrayFunction';\n\nexport class DeleteLast extends AbstractArrayFunction {\n public constructor() {\n super('DeleteLast', [DeleteLast.PARAMETER_ARRAY_SOURCE], DeleteLast.EVENT_RESULT_ARRAY);\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let source: any[] = context\n ?.getArguments()\n ?.get(DeleteLast.PARAMETER_ARRAY_SOURCE.getParameterName());\n\n if (source.length == 0) throw new KIRuntimeException('Given source array is empty');\n\n source = [...source];\n source.pop();\n\n return new FunctionOutput([\n EventResult.outputOf(new Map([[AbstractArrayFunction.EVENT_RESULT_NAME, source]])),\n ]);\n }\n}\n","import { KIRuntimeException } from '../../../exception/KIRuntimeException';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { AbstractArrayFunction } from './AbstractArrayFunction';\n\nexport class Disjoint extends AbstractArrayFunction {\n public constructor() {\n super(\n 'Disjoint',\n [\n Disjoint.PARAMETER_ARRAY_SOURCE,\n Disjoint.PARAMETER_INT_SOURCE_FROM,\n Disjoint.PARAMETER_ARRAY_SECOND_SOURCE,\n Disjoint.PARAMETER_INT_SECOND_SOURCE_FROM,\n Disjoint.PARAMETER_INT_LENGTH,\n ],\n Disjoint.EVENT_RESULT_ARRAY,\n );\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let firstSource: any[] = context\n ?.getArguments()\n ?.get(Disjoint.PARAMETER_ARRAY_SOURCE.getParameterName());\n\n let first: number = context\n ?.getArguments()\n ?.get(Disjoint.PARAMETER_INT_SOURCE_FROM.getParameterName());\n\n let secondSource: any[] = context\n ?.getArguments()\n ?.get(Disjoint.PARAMETER_ARRAY_SECOND_SOURCE.getParameterName());\n\n let second: number = context\n ?.getArguments()\n ?.get(Disjoint.PARAMETER_INT_SECOND_SOURCE_FROM.getParameterName());\n\n let len: number = context\n ?.getArguments()\n ?.get(Disjoint.PARAMETER_INT_LENGTH.getParameterName());\n\n if (len == -1)\n len =\n firstSource.length <= secondSource.length\n ? firstSource.length - first\n : secondSource.length - second;\n\n if (\n len > firstSource.length ||\n len > secondSource.length ||\n first + len > firstSource.length ||\n second + len > secondSource.length\n )\n throw new KIRuntimeException(\n 'The length which was being requested is more than than the size either source array or second source array',\n );\n\n let set1: Set<any> = new Set<any>();\n let set2: Set<any> = new Set<any>();\n\n for (let i: number = 0; i < len; i++) set1.add(firstSource[i + first]);\n\n for (let i: number = 0; i < len; i++) set2.add(secondSource[i + second]);\n\n let set3: Set<any> = new Set<any>();\n\n set1.forEach((element) => {\n if (set2.has(element)) set2.delete(element);\n else set3.add(element);\n });\n\n set2.forEach((element) => {\n if (!set1.has(element)) set3.add(element);\n });\n\n return new FunctionOutput([\n EventResult.outputOf(new Map([[Disjoint.EVENT_RESULT_NAME, [...set3]]])),\n ]);\n }\n}\n","import { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { MapUtil } from '../../../util/MapUtil';\nimport { AbstractArrayFunction } from './AbstractArrayFunction';\nimport { Compare } from './Compare';\n\nexport class Equals extends AbstractArrayFunction {\n public constructor() {\n super(\n 'Equals',\n [\n Equals.PARAMETER_ARRAY_SOURCE,\n Equals.PARAMETER_INT_SOURCE_FROM,\n Equals.PARAMETER_ARRAY_FIND,\n Equals.PARAMETER_INT_FIND_FROM,\n Equals.PARAMETER_INT_LENGTH,\n ],\n Equals.EVENT_RESULT_BOOLEAN,\n );\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let compare: Compare = new Compare();\n\n let fo: FunctionOutput = await compare.execute(context);\n\n let resultMap: Map<string, any> = fo.allResults()[0].getResult();\n\n let v: number = resultMap.get(Equals.EVENT_RESULT_NAME);\n\n return new FunctionOutput([\n EventResult.outputOf(MapUtil.of(Equals.EVENT_RESULT_NAME, v == 0)),\n ]);\n }\n}\n","import { KIRuntimeException } from '../../../exception/KIRuntimeException';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { MapUtil } from '../../../util/MapUtil';\nimport { isNullValue } from '../../../util/NullCheck';\nimport { duplicate } from '../../../util/duplicate';\nimport { StringFormatter } from '../../../util/string/StringFormatter';\nimport { AbstractArrayFunction } from './AbstractArrayFunction';\n\nexport class Fill extends AbstractArrayFunction {\n public constructor() {\n super(\n 'Fill',\n [\n Fill.PARAMETER_ARRAY_SOURCE,\n Fill.PARAMETER_INT_SOURCE_FROM,\n Fill.PARAMETER_INT_LENGTH,\n Fill.PARAMETER_ANY,\n ],\n Fill.EVENT_RESULT_EMPTY,\n );\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n var source = context?.getArguments()?.get(Fill.PARAMETER_ARRAY_SOURCE.getParameterName());\n var srcfrom = context\n ?.getArguments()\n ?.get(Fill.PARAMETER_INT_SOURCE_FROM.getParameterName());\n var length = context?.getArguments()?.get(Fill.PARAMETER_INT_LENGTH.getParameterName());\n var element = context?.getArguments()?.get(Fill.PARAMETER_ANY.getParameterName());\n\n if (srcfrom < 0)\n throw new KIRuntimeException(\n StringFormatter.format('Arrays out of bound trying to access $ index', srcfrom),\n );\n\n if (length == -1) length = source.length - srcfrom;\n\n let add = srcfrom + length - source.length;\n\n source = [...source];\n if (add > 0) {\n for (let i = 0; i < add; i++) source.push();\n }\n\n for (let i = srcfrom; i < srcfrom + length; i++) {\n source[i] = isNullValue(element) ? element : duplicate(element);\n }\n\n return new FunctionOutput([\n EventResult.outputOf(MapUtil.of(AbstractArrayFunction.EVENT_RESULT_NAME, source)),\n ]);\n }\n}\n","import { KIRuntimeException } from '../../../exception/KIRuntimeException';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { isNullValue } from '../../../util/NullCheck';\nimport { PrimitiveUtil } from '../../../util/primitive/PrimitiveUtil';\nimport { AbstractArrayFunction } from './AbstractArrayFunction';\n\nexport class Frequency extends AbstractArrayFunction {\n FunctionOutput: any;\n\n public constructor() {\n super(\n 'Frequency',\n [\n Frequency.PARAMETER_ARRAY_SOURCE,\n Frequency.PARAMETER_ANY,\n Frequency.PARAMETER_INT_SOURCE_FROM,\n Frequency.PARAMETER_INT_LENGTH,\n ],\n Frequency.EVENT_RESULT_INTEGER,\n );\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let source: any[] = context\n ?.getArguments()\n ?.get(Frequency.PARAMETER_ARRAY_SOURCE.getParameterName());\n\n let find: any = context?.getArguments()?.get(Frequency.PARAMETER_ANY.getParameterName());\n\n let start: number = context\n ?.getArguments()\n ?.get(Frequency.PARAMETER_INT_SOURCE_FROM.getParameterName());\n\n let length: number = context\n ?.getArguments()\n ?.get(Frequency.PARAMETER_INT_LENGTH.getParameterName());\n\n if (source.length == 0)\n return new FunctionOutput([\n EventResult.outputOf(new Map([[Frequency.EVENT_RESULT_NAME, 0]])),\n ]);\n\n if (start > source.length)\n throw new KIRuntimeException('Given start point is more than the size of source');\n\n let end: number = start + length;\n\n if (length == -1) end = source.length - start;\n\n if (end > source.length)\n throw new KIRuntimeException('Given length is more than the size of source');\n\n let frequency: number = 0;\n\n for (let i: number = start; i < end && i < source.length; i++) {\n if (PrimitiveUtil.compare(source[i], find) == 0) frequency++;\n }\n\n return new FunctionOutput([\n EventResult.outputOf(new Map([[Frequency.EVENT_RESULT_NAME, frequency]])),\n ]);\n }\n}\n","import { KIRuntimeException } from '../../../exception/KIRuntimeException';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { isNullValue } from '../../../util/NullCheck';\nimport { PrimitiveUtil } from '../../../util/primitive/PrimitiveUtil';\nimport { AbstractArrayFunction } from './AbstractArrayFunction';\n\nexport class IndexOf extends AbstractArrayFunction {\n public constructor() {\n super(\n 'IndexOf',\n [\n IndexOf.PARAMETER_ARRAY_SOURCE,\n IndexOf.PARAMETER_ANY_NOT_NULL,\n IndexOf.PARAMETER_INT_FIND_FROM,\n ],\n IndexOf.EVENT_RESULT_INTEGER,\n );\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let source: any[] = context\n ?.getArguments()\n ?.get(IndexOf.PARAMETER_ARRAY_SOURCE.getParameterName());\n\n var find = context?.getArguments()?.get(IndexOf.PARAMETER_ANY_NOT_NULL.getParameterName());\n\n let len: number = context\n ?.getArguments()\n ?.get(IndexOf.PARAMETER_INT_FIND_FROM.getParameterName());\n\n if (source.length == 0)\n return new FunctionOutput([\n EventResult.outputOf(new Map([[IndexOf.EVENT_RESULT_NAME, -1]])),\n ]);\n\n if (len < 0 || len > source.length)\n throw new KIRuntimeException(\n 'The size of the search index of the array is greater than the size of the array',\n );\n\n let index: number = -1;\n\n for (let i: number = len; i < source.length; i++) {\n if (PrimitiveUtil.compare(source[i], find) == 0) {\n index = i;\n break;\n }\n }\n\n return new FunctionOutput([\n EventResult.outputOf(new Map([[IndexOf.EVENT_RESULT_NAME, index]])),\n ]);\n }\n}\n","import { KIRuntimeException } from '../../../exception/KIRuntimeException';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { PrimitiveUtil } from '../../../util/primitive/PrimitiveUtil';\nimport { AbstractArrayFunction } from './AbstractArrayFunction';\n\nexport class IndexOfArray extends AbstractArrayFunction {\n public constructor() {\n super(\n 'IndexOfArray',\n [\n IndexOfArray.PARAMETER_ARRAY_SOURCE,\n IndexOfArray.PARAMETER_ARRAY_SECOND_SOURCE,\n IndexOfArray.PARAMETER_INT_FIND_FROM,\n ],\n IndexOfArray.EVENT_RESULT_INTEGER,\n );\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let source: any[] = context\n ?.getArguments()\n ?.get(IndexOfArray.PARAMETER_ARRAY_SOURCE.getParameterName());\n\n let secondSource: any[] = context\n ?.getArguments()\n ?.get(IndexOfArray.PARAMETER_ARRAY_SECOND_SOURCE.getParameterName());\n\n let from: number = context\n ?.getArguments()\n ?.get(IndexOfArray.PARAMETER_INT_FIND_FROM.getParameterName());\n\n if (source.length == 0 || secondSource.length == 0)\n return new FunctionOutput([\n EventResult.outputOf(new Map([[IndexOfArray.EVENT_RESULT_NAME, -1]])),\n ]);\n\n if (from < 0 || from > source.length || source.length < secondSource.length)\n throw new KIRuntimeException(\n 'Given from second source is more than the size of the source array',\n );\n\n let secondSourceSize: number = secondSource.length;\n let index: number = -1;\n\n for (let i: number = from; i < source.length; i++) {\n let j: number = 0;\n if (PrimitiveUtil.compare(source[i], secondSource[j]) == 0) {\n while (j < secondSourceSize) {\n if (PrimitiveUtil.compare(source[i + j], secondSource[j]) != 0) {\n break;\n }\n j++;\n }\n if (j == secondSourceSize) {\n index = i;\n break;\n }\n }\n }\n\n return new FunctionOutput([\n EventResult.outputOf(new Map([[IndexOfArray.EVENT_RESULT_NAME, index]])),\n ]);\n }\n}\n","import { KIRuntimeException } from '../../../exception/KIRuntimeException';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { PrimitiveUtil } from '../../../util/primitive/PrimitiveUtil';\nimport { AbstractArrayFunction } from './AbstractArrayFunction';\n\nexport class LastIndexOf extends AbstractArrayFunction {\n public constructor() {\n super(\n 'LastIndexOf',\n [\n LastIndexOf.PARAMETER_ARRAY_SOURCE,\n LastIndexOf.PARAMETER_ANY_NOT_NULL,\n LastIndexOf.PARAMETER_INT_FIND_FROM,\n ],\n LastIndexOf.EVENT_RESULT_INTEGER,\n );\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let source: any[] = context\n ?.getArguments()\n ?.get(LastIndexOf.PARAMETER_ARRAY_SOURCE.getParameterName());\n\n var find = context\n ?.getArguments()\n ?.get(LastIndexOf.PARAMETER_ANY_NOT_NULL.getParameterName());\n\n let len = context\n ?.getArguments()\n ?.get(LastIndexOf.PARAMETER_INT_FIND_FROM.getParameterName());\n\n if (source.length == 0)\n return new FunctionOutput([\n EventResult.outputOf(new Map([[LastIndexOf.EVENT_RESULT_NAME, -1]])),\n ]);\n\n if (len < 0 || len > source.length)\n throw new KIRuntimeException(\n \"The value of length shouldn't the exceed the size of the array or shouldn't be in terms\",\n );\n\n let index: number = -1;\n\n for (let i: number = source.length - 1; i >= len; i--) {\n if (PrimitiveUtil.compare(source[i], find) == 0) {\n index = i;\n break;\n }\n }\n\n return new FunctionOutput([\n EventResult.outputOf(new Map([[LastIndexOf.EVENT_RESULT_NAME, index]])),\n ]);\n }\n}\n","import { KIRuntimeException } from '../../../exception/KIRuntimeException';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { PrimitiveUtil } from '../../../util/primitive/PrimitiveUtil';\nimport { AbstractArrayFunction } from './AbstractArrayFunction';\n\nexport class LastIndexOfArray extends AbstractArrayFunction {\n public constructor() {\n super(\n 'LastIndexOfArray',\n [\n LastIndexOfArray.PARAMETER_ARRAY_SOURCE,\n LastIndexOfArray.PARAMETER_ARRAY_SECOND_SOURCE,\n LastIndexOfArray.PARAMETER_INT_FIND_FROM,\n ],\n LastIndexOfArray.EVENT_RESULT_INTEGER,\n );\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let source: any[] = context\n ?.getArguments()\n ?.get(LastIndexOfArray.PARAMETER_ARRAY_SOURCE.getParameterName());\n\n let secondSource: any[] = context\n ?.getArguments()\n ?.get(LastIndexOfArray.PARAMETER_ARRAY_SECOND_SOURCE.getParameterName());\n\n let from: any = context\n ?.getArguments()\n ?.get(LastIndexOfArray.PARAMETER_INT_FIND_FROM.getParameterName());\n\n if (source.length == 0)\n return new FunctionOutput([\n EventResult.outputOf(new Map([[LastIndexOfArray.EVENT_RESULT_NAME, -1]])),\n ]);\n\n if (from < 0 || from > source.length || secondSource.length > source.length)\n throw new KIRuntimeException(\n 'Given from index is more than the size of the source array',\n );\n\n let secondSourceSize: number = secondSource.length;\n let index: number = -1;\n\n for (let i: number = from; i < source.length; i++) {\n let j: number = 0;\n if (PrimitiveUtil.compare(source[i], secondSource[j]) == 0) {\n while (j < secondSourceSize) {\n if (PrimitiveUtil.compare(source[i + j], secondSource[j]) != 0) {\n break;\n }\n j++;\n }\n if (j == secondSourceSize) {\n index = i;\n }\n }\n }\n\n return new FunctionOutput([\n EventResult.outputOf(new Map([[LastIndexOfArray.EVENT_RESULT_NAME, index]])),\n ]);\n }\n}\n","import { KIRuntimeException } from '../../../exception/KIRuntimeException';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { AbstractArrayFunction } from './AbstractArrayFunction';\nimport { PrimitiveUtil } from '../../../util/primitive/PrimitiveUtil';\n\nexport class Max extends AbstractArrayFunction {\n public constructor() {\n super('Max', [Max.PARAMETER_ARRAY_SOURCE_PRIMITIVE], Max.EVENT_RESULT_ANY);\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let source: any[] = context\n ?.getArguments()\n ?.get(Max.PARAMETER_ARRAY_SOURCE_PRIMITIVE.getParameterName());\n\n if (source.length == 0) throw new KIRuntimeException('Search source array cannot be empty');\n\n let max: any = source[0];\n for (let i: number = 1; i < source.length; i++) {\n let y: any = source[i];\n if (PrimitiveUtil.comparePrimitive(max, y) >= 0) continue;\n max = y;\n }\n\n return new FunctionOutput([EventResult.outputOf(new Map([[Max.EVENT_RESULT_NAME, max]]))]);\n }\n}\n","import { KIRuntimeException } from '../../../exception/KIRuntimeException';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { AbstractArrayFunction } from './AbstractArrayFunction';\nimport { PrimitiveUtil } from '../../../util/primitive/PrimitiveUtil';\nimport { isNullValue } from '../../../util/NullCheck';\n\nexport class Min extends AbstractArrayFunction {\n public constructor() {\n super('Min', [Min.PARAMETER_ARRAY_SOURCE_PRIMITIVE], Min.EVENT_RESULT_ANY);\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let source: any[] = context\n ?.getArguments()\n ?.get(Min.PARAMETER_ARRAY_SOURCE_PRIMITIVE.getParameterName());\n\n if (source.length == 0) throw new KIRuntimeException('Search source array cannot be empty');\n\n let min: any = undefined;\n for (let i: number = 0; i < source.length; i++) {\n if (isNullValue(source[i])) continue;\n if (min === undefined || PrimitiveUtil.comparePrimitive(source[i], min) < 0)\n min = source[i];\n }\n\n return new FunctionOutput([EventResult.outputOf(new Map([[Min.EVENT_RESULT_NAME, min]]))]);\n }\n}\n","import { KIRuntimeException } from '../../../exception/KIRuntimeException';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { AbstractArrayFunction } from './AbstractArrayFunction';\n\nexport class MisMatch extends AbstractArrayFunction {\n public constructor() {\n super(\n 'MisMatch',\n [\n MisMatch.PARAMETER_ARRAY_SOURCE,\n MisMatch.PARAMETER_INT_FIND_FROM,\n MisMatch.PARAMETER_ARRAY_SECOND_SOURCE,\n MisMatch.PARAMETER_INT_SECOND_SOURCE_FROM,\n MisMatch.PARAMETER_INT_LENGTH,\n ],\n MisMatch.EVENT_RESULT_INTEGER,\n );\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let firstSource: any[] = context\n ?.getArguments()\n ?.get(MisMatch.PARAMETER_ARRAY_SOURCE.getParameterName());\n\n let firstFind: number = context\n ?.getArguments()\n ?.get(MisMatch.PARAMETER_INT_FIND_FROM.getParameterName());\n\n let secondSource: any[] = context\n ?.getArguments()\n ?.get(MisMatch.PARAMETER_ARRAY_SECOND_SOURCE.getParameterName());\n\n let secondFind: number = context\n ?.getArguments()\n ?.get(MisMatch.PARAMETER_INT_SECOND_SOURCE_FROM.getParameterName());\n\n let length: number = context\n ?.getArguments()\n ?.get(MisMatch.PARAMETER_INT_LENGTH.getParameterName());\n\n // write check conditions\n\n let first: number = firstFind < firstSource.length && firstFind > 0 ? firstFind : 0;\n let second: number = secondFind < secondSource.length && secondFind > 0 ? secondFind : 0;\n\n if (first + length >= firstSource.length || second + length > secondSource.length)\n throw new KIRuntimeException(\n 'The size of the array for first and second which was being requested is more than size of the given array',\n );\n\n let index: number = -1;\n\n for (let i: number = 0; i < length; i++) {\n if (firstSource[first + i] != secondSource[second + i]) {\n index = i;\n break;\n }\n }\n\n return new FunctionOutput([\n EventResult.outputOf(new Map([[MisMatch.EVENT_RESULT_NAME, index]])),\n ]);\n }\n}\n","import { KIRuntimeException } from '../../../exception/KIRuntimeException';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { AbstractArrayFunction } from './AbstractArrayFunction';\n\nexport class Reverse extends AbstractArrayFunction {\n public constructor() {\n super(\n 'Reverse',\n [\n Reverse.PARAMETER_ARRAY_SOURCE,\n Reverse.PARAMETER_INT_SOURCE_FROM,\n Reverse.PARAMETER_INT_LENGTH,\n ],\n Reverse.EVENT_RESULT_ARRAY,\n );\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let source: any[] = context\n ?.getArguments()\n ?.get(Reverse.PARAMETER_ARRAY_SOURCE.getParameterName());\n\n let st: number = context\n ?.getArguments()\n ?.get(Reverse.PARAMETER_INT_SOURCE_FROM.getParameterName());\n\n let len: number = context\n ?.getArguments()\n ?.get(Reverse.PARAMETER_INT_LENGTH.getParameterName());\n\n if (len == -1) len = source.length - st;\n\n if (len >= source.length || len < 0 || st < 0)\n throw new KIRuntimeException(\n 'Please provide start point between the start and end indexes or provide the length which was less than the source size ',\n );\n\n source = [...source];\n\n let endpoint: number = st + len - 1;\n while (st <= endpoint) {\n let first: any = source[st];\n let last: any = source[endpoint];\n source[st++] = last;\n source[endpoint--] = first;\n }\n\n return new FunctionOutput([\n EventResult.outputOf(new Map([[Reverse.EVENT_RESULT_NAME, source]])),\n ]);\n }\n}\n","import { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { AbstractArrayFunction } from './AbstractArrayFunction';\n\nexport class Rotate extends AbstractArrayFunction {\n public constructor() {\n super(\n 'Rotate',\n [Rotate.PARAMETER_ARRAY_SOURCE, Rotate.PARAMETER_ROTATE_LENGTH],\n Rotate.EVENT_RESULT_ANY,\n );\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let source: any[] = context\n ?.getArguments()\n ?.get(Rotate.PARAMETER_ARRAY_SOURCE.getParameterName());\n\n let rotLen: number = context\n ?.getArguments()\n ?.get(Rotate.PARAMETER_ROTATE_LENGTH.getParameterName());\n\n if (source.length == 0)\n return new FunctionOutput([\n EventResult.outputOf(new Map([[AbstractArrayFunction.EVENT_RESULT_NAME, source]])),\n ]);\n\n source = [...source];\n\n let size: number = source.length;\n rotLen = rotLen % size;\n\n this.rotate(source, 0, rotLen - 1);\n this.rotate(source, rotLen, size - 1);\n this.rotate(source, 0, size - 1);\n\n return new FunctionOutput([\n EventResult.outputOf(new Map([[AbstractArrayFunction.EVENT_RESULT_NAME, source]])),\n ]);\n }\n\n private rotate(elements: any[], start: number, end: number): void {\n while (start < end) {\n let temp: any = elements[start];\n elements[start++] = elements[end];\n elements[end--] = temp;\n }\n }\n}\n","import { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { AbstractArrayFunction } from './AbstractArrayFunction';\n\nexport class Shuffle extends AbstractArrayFunction {\n public constructor() {\n super('Shuffle', [Shuffle.PARAMETER_ARRAY_SOURCE], Shuffle.EVENT_RESULT_ANY);\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let source: any[] = context\n ?.getArguments()\n ?.get(Shuffle.PARAMETER_ARRAY_SOURCE.getParameterName());\n\n if (source.length <= 1)\n return new FunctionOutput([\n EventResult.outputOf(new Map([[AbstractArrayFunction.EVENT_RESULT_NAME, source]])),\n ]);\n\n source = [...source];\n let x: number = 0;\n let size: number = source.length;\n\n for (let i: number = 0; i < size; i++) {\n let y: number = Math.floor(Math.random() * size) % size;\n let temp: any = source[x];\n source[x] = source[y];\n source[y] = temp;\n x = y;\n }\n\n return new FunctionOutput([\n EventResult.outputOf(new Map([[AbstractArrayFunction.EVENT_RESULT_NAME, source]])),\n ]);\n }\n}\n","import { KIRuntimeException } from '../../../exception/KIRuntimeException';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\n\nimport { AbstractArrayFunction } from './AbstractArrayFunction';\n\nexport class Sort extends AbstractArrayFunction {\n public constructor() {\n super(\n 'Sort',\n [\n Sort.PARAMETER_ARRAY_SOURCE_PRIMITIVE,\n Sort.PARAMETER_INT_FIND_FROM,\n Sort.PARAMETER_INT_LENGTH,\n Sort.PARAMETER_BOOLEAN_ASCENDING,\n ],\n Sort.EVENT_RESULT_ANY,\n );\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let source: any[] = context\n ?.getArguments()\n ?.get(Sort.PARAMETER_ARRAY_SOURCE_PRIMITIVE.getParameterName());\n\n let start: number = context\n ?.getArguments()\n ?.get(Sort.PARAMETER_INT_FIND_FROM.getParameterName());\n\n let len: number = context\n ?.getArguments()\n ?.get(Sort.PARAMETER_INT_LENGTH.getParameterName());\n\n let ascending: boolean = context\n ?.getArguments()\n ?.get(Sort.PARAMETER_BOOLEAN_ASCENDING.getParameterName());\n\n if (source.length == 0)\n return new FunctionOutput([\n EventResult.outputOf(new Map([[AbstractArrayFunction.EVENT_RESULT_NAME, source]])),\n ]);\n\n source = [...source];\n if (len == -1) len = source.length - start;\n\n if (start < 0 || start >= source.length || start + len > source.length)\n throw new KIRuntimeException(\n 'Given start point is more than the size of the array or not available at that point',\n );\n\n let slicedArray: any[] = source.slice(start, start + len + 1);\n\n slicedArray.sort((a, b) => compareFunction(a, b, ascending));\n\n source.splice(start, len, ...slicedArray);\n\n return new FunctionOutput([\n EventResult.outputOf(new Map([[AbstractArrayFunction.EVENT_RESULT_NAME, source]])),\n ]);\n }\n}\n\nfunction compareFunction(a: any, b: any, ascending: boolean): number {\n if (a === b) return 0;\n if (a === null) return 1;\n if (b === null) return -1;\n if (!ascending) return a < b ? -1 : 1;\n\n return a < b ? 1 : -1;\n}\n","import { KIRuntimeException } from '../../../exception/KIRuntimeException';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { AbstractArrayFunction } from './AbstractArrayFunction';\n\nexport class SubArray extends AbstractArrayFunction {\n public constructor() {\n super(\n 'SubArray',\n [\n SubArray.PARAMETER_ARRAY_SOURCE,\n SubArray.PARAMETER_INT_FIND_FROM,\n SubArray.PARAMETER_INT_LENGTH,\n ],\n SubArray.EVENT_RESULT_ARRAY,\n );\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let source: any[] = context\n ?.getArguments()\n ?.get(SubArray.PARAMETER_ARRAY_SOURCE.getParameterName());\n\n let start: number = context\n ?.getArguments()\n ?.get(SubArray.PARAMETER_INT_FIND_FROM.getParameterName());\n\n let len: number = context\n ?.getArguments()\n ?.get(SubArray.PARAMETER_INT_LENGTH.getParameterName());\n\n if (len == -1) len = source.length - start;\n\n if (len <= 0) return new FunctionOutput([EventResult.outputOf(new Map([]))]);\n\n if (!(start >= 0 && start < source.length) || start + len > source.length)\n throw new KIRuntimeException(\n 'Given find from point is more than the source size array or the Requested length for the subarray was more than the source size',\n );\n\n let slicedArray: any[] = source.slice(start, start + len);\n\n return new FunctionOutput([\n EventResult.outputOf(new Map([[SubArray.EVENT_RESULT_NAME, slicedArray]])),\n ]);\n }\n}\n","import { KIRuntimeException } from '../../../exception/KIRuntimeException';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { isNullValue } from '../../../util/NullCheck';\nimport { AbstractArrayFunction } from './AbstractArrayFunction';\n\nexport class Insert extends AbstractArrayFunction {\n public constructor() {\n super(\n 'Insert',\n [Insert.PARAMETER_ARRAY_SOURCE, Insert.PARAMETER_INT_OFFSET, Insert.PARAMETER_ANY],\n Insert.EVENT_RESULT_ARRAY,\n );\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let source: any[] = context\n ?.getArguments()\n ?.get(Insert.PARAMETER_ARRAY_SOURCE.getParameterName());\n\n let offset: number = context\n ?.getArguments()\n ?.get(Insert.PARAMETER_INT_OFFSET.getParameterName());\n\n var output = context?.getArguments()?.get(Insert.PARAMETER_ANY.getParameterName());\n\n if (isNullValue(output) || isNullValue(offset) || offset > source.length)\n throw new KIRuntimeException('Please valid resouces to insert at the correct location');\n\n source = [...source];\n\n if (source.length == 0) {\n if (offset == 0) source.push(output);\n return new FunctionOutput([\n EventResult.outputOf(new Map([[AbstractArrayFunction.EVENT_RESULT_NAME, source]])),\n ]);\n }\n\n source.push(output);\n let len: number = source.length - 1;\n offset++; // to insert at that point\n\n while (len >= offset) {\n let temp: any = source[len - 1];\n source[len - 1] = source[len];\n source[len--] = temp;\n }\n\n return new FunctionOutput([\n EventResult.outputOf(new Map([[AbstractArrayFunction.EVENT_RESULT_NAME, source]])),\n ]);\n }\n}\n","import { KIRuntimeException } from '../../../exception/KIRuntimeException';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { isNullValue } from '../../../util/NullCheck';\nimport { AbstractArrayFunction } from './AbstractArrayFunction';\n\nexport class InsertLast extends AbstractArrayFunction {\n public constructor() {\n super(\n 'InsertLast',\n [InsertLast.PARAMETER_ARRAY_SOURCE, InsertLast.PARAMETER_ANY],\n InsertLast.EVENT_RESULT_ARRAY,\n );\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let source: any[] = context\n ?.getArguments()\n ?.get(InsertLast.PARAMETER_ARRAY_SOURCE.getParameterName());\n\n var output = context?.getArguments()?.get(InsertLast.PARAMETER_ANY.getParameterName());\n\n source = [...source];\n\n source.push(output);\n return new FunctionOutput([\n EventResult.outputOf(new Map([[AbstractArrayFunction.EVENT_RESULT_NAME, source]])),\n ]);\n }\n}\n","import { KIRuntimeException } from '../../../exception/KIRuntimeException';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { MapUtil } from '../../../util/MapUtil';\nimport { isNullValue } from '../../../util/NullCheck';\nimport { deepEqual } from '../../../util/deepEqual';\nimport { duplicate } from '../../../util/duplicate';\nimport { StringFormatter } from '../../../util/string/StringFormatter';\nimport { AbstractArrayFunction } from './AbstractArrayFunction';\n\nexport class RemoveDuplicates extends AbstractArrayFunction {\n public constructor() {\n super(\n 'RemoveDuplicates',\n [\n RemoveDuplicates.PARAMETER_ARRAY_SOURCE,\n RemoveDuplicates.PARAMETER_INT_SOURCE_FROM,\n RemoveDuplicates.PARAMETER_INT_LENGTH,\n ],\n RemoveDuplicates.EVENT_RESULT_ARRAY,\n );\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n var source = context\n ?.getArguments()\n ?.get(RemoveDuplicates.PARAMETER_ARRAY_SOURCE.getParameterName());\n var srcfrom = context\n ?.getArguments()\n ?.get(RemoveDuplicates.PARAMETER_INT_SOURCE_FROM.getParameterName());\n var length = context\n ?.getArguments()\n ?.get(RemoveDuplicates.PARAMETER_INT_LENGTH.getParameterName());\n\n if (length == -1) length = source.length - srcfrom;\n\n if (srcfrom + length > source.length)\n throw new KIRuntimeException(\n StringFormatter.format(\n 'Array has no elements from $ to $ as the array size is $',\n srcfrom,\n srcfrom + length,\n source.length,\n ),\n );\n\n const ja: any[] = [...source];\n const to = srcfrom + length;\n\n for (let i = to - 1; i >= srcfrom; i--) {\n for (let j = i - 1; j >= srcfrom; j--) {\n if (deepEqual(ja[i], ja[j])) {\n ja.splice(i, 1);\n break;\n }\n }\n }\n\n return new FunctionOutput([\n EventResult.outputOf(MapUtil.of(RemoveDuplicates.EVENT_RESULT_NAME, ja)),\n ]);\n }\n}\n","import { KIRunConstants } from '../../constant/KIRunConstants';\nimport { KIRuntimeException } from '../../exception/KIRuntimeException';\n\nexport class StringBuilder {\n private str: string;\n\n public constructor(str?: string) {\n this.str = str ?? '';\n }\n\n public append(x: any): StringBuilder {\n this.str += x;\n return this;\n }\n\n public toString(): string {\n return '' + this.str;\n }\n\n public trim(): StringBuilder {\n this.str = this.str.trim();\n return this;\n }\n\n public setLength(num: number): StringBuilder {\n this.str = this.str.substring(0, num);\n return this;\n }\n\n public length(): number {\n return this.str.length;\n }\n\n public charAt(index: number): string {\n return this.str.charAt(index);\n }\n\n public deleteCharAt(index: number): StringBuilder {\n this.checkIndex(index);\n this.str = this.str.substring(0, index) + this.str.substring(index + 1);\n return this;\n }\n\n public insert(index: number, str: string): StringBuilder {\n this.str = this.str.substring(0, index) + str + this.str.substring(index);\n return this;\n }\n\n private checkIndex(index: number): void {\n if (index >= this.str.length)\n throw new KIRuntimeException(\n `Index ${index} is greater than or equal to ${this.str.length}`,\n );\n }\n\n public substring(start: number, end: number): string {\n return this.str.substring(start, end);\n }\n}\n","import { StringFormatter } from '../../../util/string/StringFormatter';\n\nexport class ExpressionEvaluationException extends Error {\n private cause?: Error;\n\n constructor(expression: string, message: string, err?: Error) {\n super(StringFormatter.format('$ : $', expression, message));\n\n this.cause = err;\n }\n\n public getCause(): Error | undefined {\n return this.cause;\n }\n}\n","export class ExpressionToken {\n expression: string;\n\n public constructor(expression: string) {\n this.expression = expression;\n }\n\n public getExpression(): string {\n return this.expression;\n }\n\n public toString(): string {\n return this.expression;\n }\n}\n","import { StringFormatter } from '../../util/string/StringFormatter';\nimport { ExpressionToken } from './ExpressionToken';\n\nexport class ExpressionTokenValue extends ExpressionToken {\n private element: any;\n\n public constructor(expression: string, element: any) {\n super(expression);\n this.element = element;\n }\n\n public getTokenValue(): any {\n return this.element;\n }\n\n public getElement(): any {\n return this.element;\n }\n\n public toString(): string {\n return StringFormatter.format('$: $', this.expression, this.element);\n }\n}\n","export class Operation {\n public static readonly MULTIPLICATION: Operation = new Operation('*');\n public static readonly DIVISION: Operation = new Operation('/');\n public static readonly INTEGER_DIVISION: Operation = new Operation('//');\n public static readonly MOD: Operation = new Operation('%');\n public static readonly ADDITION: Operation = new Operation('+');\n public static readonly SUBTRACTION: Operation = new Operation('-');\n\n public static readonly NOT: Operation = new Operation('not', undefined, true);\n public static readonly AND: Operation = new Operation('and', undefined, true);\n public static readonly OR: Operation = new Operation('or', undefined, true);\n public static readonly LESS_THAN: Operation = new Operation('<');\n public static readonly LESS_THAN_EQUAL: Operation = new Operation('<=');\n public static readonly GREATER_THAN: Operation = new Operation('>');\n public static readonly GREATER_THAN_EQUAL: Operation = new Operation('>=');\n public static readonly EQUAL: Operation = new Operation('=');\n public static readonly NOT_EQUAL: Operation = new Operation('!=');\n\n public static readonly BITWISE_AND: Operation = new Operation('&');\n public static readonly BITWISE_OR: Operation = new Operation('|');\n public static readonly BITWISE_XOR: Operation = new Operation('^');\n public static readonly BITWISE_COMPLEMENT: Operation = new Operation('~');\n public static readonly BITWISE_LEFT_SHIFT: Operation = new Operation('<<');\n public static readonly BITWISE_RIGHT_SHIFT: Operation = new Operation('>>');\n public static readonly BITWISE_UNSIGNED_RIGHT_SHIFT: Operation = new Operation('>>>');\n\n public static readonly UNARY_PLUS: Operation = new Operation('UN: +', '+');\n public static readonly UNARY_MINUS: Operation = new Operation('UN: -', '-');\n public static readonly UNARY_LOGICAL_NOT: Operation = new Operation('UN: not', 'not');\n public static readonly UNARY_BITWISE_COMPLEMENT: Operation = new Operation('UN: ~', '~');\n\n public static readonly ARRAY_OPERATOR: Operation = new Operation('[');\n public static readonly OBJECT_OPERATOR: Operation = new Operation('.');\n\n public static readonly NULLISH_COALESCING_OPERATOR: Operation = new Operation('??');\n\n public static readonly CONDITIONAL_TERNARY_OPERATOR: Operation = new Operation('?');\n\n private static readonly VALUE_OF: Map<string, Operation> = new Map([\n ['MULTIPLICATION', Operation.MULTIPLICATION],\n ['DIVISION', Operation.DIVISION],\n ['INTEGER_DIVISON', Operation.INTEGER_DIVISION],\n ['MOD', Operation.MOD],\n ['ADDITION', Operation.ADDITION],\n ['SUBTRACTION', Operation.SUBTRACTION],\n ['NOT', Operation.NOT],\n ['AND', Operation.AND],\n ['OR', Operation.OR],\n ['LESS_THAN', Operation.LESS_THAN],\n ['LESS_THAN_EQUAL', Operation.LESS_THAN_EQUAL],\n ['GREATER_THAN', Operation.GREATER_THAN],\n ['GREATER_THAN_EQUAL', Operation.GREATER_THAN_EQUAL],\n ['EQUAL', Operation.EQUAL],\n ['NOT_EQUAL', Operation.NOT_EQUAL],\n ['BITWISE_AND', Operation.BITWISE_AND],\n ['BITWISE_OR', Operation.BITWISE_OR],\n ['BITWISE_XOR', Operation.BITWISE_XOR],\n ['BITWISE_COMPLEMENT', Operation.BITWISE_COMPLEMENT],\n ['BITWISE_LEFT_SHIFT', Operation.BITWISE_LEFT_SHIFT],\n ['BITWISE_RIGHT_SHIFT', Operation.BITWISE_RIGHT_SHIFT],\n ['BITWISE_UNSIGNED_RIGHT_SHIFT', Operation.BITWISE_UNSIGNED_RIGHT_SHIFT],\n ['UNARY_PLUS', Operation.UNARY_PLUS],\n ['UNARY_MINUS', Operation.UNARY_MINUS],\n ['UNARY_LOGICAL_NOT', Operation.UNARY_LOGICAL_NOT],\n ['UNARY_BITWISE_COMPLEMENT', Operation.UNARY_BITWISE_COMPLEMENT],\n ['ARRAY_OPERATOR', Operation.ARRAY_OPERATOR],\n ['OBJECT_OPERATOR', Operation.OBJECT_OPERATOR],\n ['NULLISH_COALESCING_OPERATOR', Operation.NULLISH_COALESCING_OPERATOR],\n ['CONDITIONAL_TERNARY_OPERATOR', Operation.CONDITIONAL_TERNARY_OPERATOR],\n ]);\n\n public static readonly UNARY_OPERATORS: Set<Operation> = new Set([\n Operation.ADDITION,\n Operation.SUBTRACTION,\n Operation.NOT,\n Operation.BITWISE_COMPLEMENT,\n Operation.UNARY_PLUS,\n Operation.UNARY_MINUS,\n Operation.UNARY_LOGICAL_NOT,\n Operation.UNARY_BITWISE_COMPLEMENT,\n ]);\n\n public static readonly ARITHMETIC_OPERATORS: Set<Operation> = new Set([\n Operation.MULTIPLICATION,\n Operation.DIVISION,\n Operation.INTEGER_DIVISION,\n Operation.MOD,\n Operation.ADDITION,\n Operation.SUBTRACTION,\n ]);\n\n public static readonly LOGICAL_OPERATORS: Set<Operation> = new Set([\n Operation.NOT,\n Operation.AND,\n Operation.OR,\n Operation.LESS_THAN,\n Operation.LESS_THAN_EQUAL,\n Operation.GREATER_THAN,\n Operation.GREATER_THAN_EQUAL,\n Operation.EQUAL,\n Operation.NOT_EQUAL,\n Operation.NULLISH_COALESCING_OPERATOR,\n ]);\n\n public static readonly BITWISE_OPERATORS: Set<Operation> = new Set([\n Operation.BITWISE_AND,\n Operation.BITWISE_COMPLEMENT,\n Operation.BITWISE_LEFT_SHIFT,\n Operation.BITWISE_OR,\n Operation.BITWISE_RIGHT_SHIFT,\n Operation.BITWISE_UNSIGNED_RIGHT_SHIFT,\n Operation.BITWISE_XOR,\n ]);\n\n public static readonly CONDITIONAL_OPERATORS: Set<Operation> = new Set([\n Operation.CONDITIONAL_TERNARY_OPERATOR,\n ]);\n\n public static readonly OPERATOR_PRIORITY: Map<Operation, number> = new Map([\n [Operation.UNARY_PLUS, 1],\n [Operation.UNARY_MINUS, 1],\n [Operation.UNARY_LOGICAL_NOT, 1],\n [Operation.UNARY_BITWISE_COMPLEMENT, 1],\n [Operation.ARRAY_OPERATOR, 1],\n [Operation.OBJECT_OPERATOR, 1],\n [Operation.MULTIPLICATION, 2],\n [Operation.DIVISION, 2],\n [Operation.INTEGER_DIVISION, 2],\n [Operation.MOD, 2],\n [Operation.ADDITION, 3],\n [Operation.SUBTRACTION, 3],\n [Operation.BITWISE_LEFT_SHIFT, 4],\n [Operation.BITWISE_RIGHT_SHIFT, 4],\n [Operation.BITWISE_UNSIGNED_RIGHT_SHIFT, 4],\n [Operation.LESS_THAN, 5],\n [Operation.LESS_THAN_EQUAL, 5],\n [Operation.GREATER_THAN, 5],\n [Operation.GREATER_THAN_EQUAL, 5],\n [Operation.EQUAL, 6],\n [Operation.NOT_EQUAL, 6],\n [Operation.BITWISE_AND, 7],\n [Operation.BITWISE_XOR, 8],\n [Operation.BITWISE_OR, 9],\n [Operation.AND, 10],\n [Operation.OR, 11],\n [Operation.NULLISH_COALESCING_OPERATOR, 11],\n [Operation.CONDITIONAL_TERNARY_OPERATOR, 12],\n ]);\n\n public static readonly OPERATORS: Set<string> = new Set(\n [\n ...Array.from(Operation.ARITHMETIC_OPERATORS),\n ...Array.from(Operation.LOGICAL_OPERATORS),\n ...Array.from(Operation.BITWISE_OPERATORS),\n Operation.ARRAY_OPERATOR,\n Operation.OBJECT_OPERATOR,\n ...Array.from(Operation.CONDITIONAL_OPERATORS),\n ].map((e) => e.getOperator()),\n );\n\n public static readonly OPERATORS_WITHOUT_SPACE_WRAP: Set<string> = new Set(\n [\n ...Array.from(Operation.ARITHMETIC_OPERATORS),\n ...Array.from(Operation.LOGICAL_OPERATORS),\n ...Array.from(Operation.BITWISE_OPERATORS),\n Operation.ARRAY_OPERATOR,\n Operation.OBJECT_OPERATOR,\n ...Array.from(Operation.CONDITIONAL_OPERATORS),\n ]\n .filter((e) => !e.shouldBeWrappedInSpace())\n .map((e) => e.getOperator()),\n );\n\n public static readonly OPERATION_VALUE_OF: Map<string, Operation> = new Map(\n Array.from(Operation.VALUE_OF.entries()).map(([_, o]) => [o.getOperator(), o]),\n );\n\n public static readonly UNARY_MAP: Map<Operation, Operation> = new Map([\n [Operation.ADDITION, Operation.UNARY_PLUS],\n [Operation.SUBTRACTION, Operation.UNARY_MINUS],\n [Operation.NOT, Operation.UNARY_LOGICAL_NOT],\n [Operation.BITWISE_COMPLEMENT, Operation.UNARY_BITWISE_COMPLEMENT],\n [Operation.UNARY_PLUS, Operation.UNARY_PLUS],\n [Operation.UNARY_MINUS, Operation.UNARY_MINUS],\n [Operation.UNARY_LOGICAL_NOT, Operation.UNARY_LOGICAL_NOT],\n [Operation.UNARY_BITWISE_COMPLEMENT, Operation.UNARY_BITWISE_COMPLEMENT],\n ]);\n\n public static readonly BIGGEST_OPERATOR_SIZE: number = Array.from(Operation.VALUE_OF.values())\n .map((e) => e.getOperator())\n .filter((e) => !e.startsWith('UN: '))\n .map((e) => e.length)\n .reduce((a, c) => (a > c ? a : c), 0);\n\n private operator: string;\n private operatorName: string;\n private _shouldBeWrappedInSpace: boolean;\n public constructor(\n operator: string,\n operatorName?: string,\n shouldBeWrappedInSpace: boolean = false,\n ) {\n this.operator = operator;\n this.operatorName = operatorName ?? operator;\n this._shouldBeWrappedInSpace = shouldBeWrappedInSpace;\n }\n\n public getOperator(): string {\n return this.operator;\n }\n\n public getOperatorName(): string {\n return this.operatorName;\n }\n\n public shouldBeWrappedInSpace(): boolean {\n return this._shouldBeWrappedInSpace;\n }\n\n public valueOf(str: string): Operation | undefined {\n return Operation.VALUE_OF.get(str);\n }\n\n public toString(): string {\n return this.operator;\n }\n}\n","import { LinkedList } from '../../util/LinkedList';\nimport { StringBuilder } from '../../util/string/StringBuilder';\nimport { StringFormatter } from '../../util/string/StringFormatter';\nimport { StringUtil } from '../../util/string/StringUtil';\nimport { Tuple2 } from '../../util/Tuples';\nimport { ExpressionEvaluationException } from './exception/ExpressionEvaluationException';\nimport { ExpressionToken } from './ExpressionToken';\nimport { ExpressionTokenValue } from './ExpressionTokenValue';\nimport { Operation } from './Operation';\n\nexport class Expression extends ExpressionToken {\n // Data structure for storing tokens\n private tokens: LinkedList<ExpressionToken> = new LinkedList();\n // Data structure for storing operations\n private ops: LinkedList<Operation> = new LinkedList();\n\n public constructor(\n expression?: string,\n l?: ExpressionToken,\n r?: ExpressionToken,\n op?: Operation,\n ) {\n super(expression ? expression : '');\n if (l) this.tokens.push(l);\n if (r) this.tokens.push(r);\n if (op) this.ops.push(op);\n this.evaluate();\n }\n\n public getTokens(): LinkedList<ExpressionToken> {\n return this.tokens;\n }\n\n public getOperations(): LinkedList<Operation> {\n return this.ops;\n }\n\n private evaluate(): void {\n const length: number = this.expression.length;\n let chr: string = '';\n\n let sb: StringBuilder = new StringBuilder('');\n let buff: string | undefined = undefined;\n let i: number = 0;\n let isPrevOp: boolean = false;\n\n while (i < length) {\n chr = this.expression[i];\n buff = sb.toString();\n\n switch (chr) {\n case ' ': {\n isPrevOp = this.processTokenSepearator(sb, buff, isPrevOp);\n break;\n }\n case '(': {\n i = this.processSubExpression(length, sb, buff, i, isPrevOp);\n isPrevOp = false;\n break;\n }\n case ')': {\n throw new ExpressionEvaluationException(\n this.expression,\n 'Extra closing parenthesis found',\n );\n }\n case ']': {\n throw new ExpressionEvaluationException(\n this.expression,\n 'Extra closing square bracket found',\n );\n }\n case \"'\":\n case '\"': {\n let result: Tuple2<number, boolean> = this.processStringLiteral(length, chr, i);\n i = result.getT1();\n isPrevOp = result.getT2();\n break;\n }\n case '?': {\n if (\n i + 1 < length &&\n this.expression.charAt(i + 1) != '?' &&\n i != 0 &&\n this.expression.charAt(i - 1) != '?'\n ) {\n i = this.processTernaryOperator(length, sb, buff, i, isPrevOp);\n } else {\n let result: Tuple2<number, boolean> = this.processOthers(\n chr,\n length,\n sb,\n buff,\n i,\n isPrevOp,\n );\n i = result.getT1();\n isPrevOp = result.getT2();\n if (isPrevOp && this.ops.peek() == Operation.ARRAY_OPERATOR) {\n result = this.process(length, sb, i);\n i = result.getT1();\n isPrevOp = result.getT2();\n }\n }\n break;\n }\n default:\n let result: Tuple2<number, boolean> = this.processOthers(\n chr,\n length,\n sb,\n buff,\n i,\n isPrevOp,\n );\n i = result.getT1();\n isPrevOp = result.getT2();\n if (isPrevOp && this.ops.peek() == Operation.ARRAY_OPERATOR) {\n result = this.process(length, sb, i);\n i = result.getT1();\n isPrevOp = result.getT2();\n }\n }\n\n ++i;\n }\n\n buff = sb.toString();\n if (!StringUtil.isNullOrBlank(buff)) {\n if (Operation.OPERATORS.has(buff)) {\n throw new ExpressionEvaluationException(\n this.expression,\n 'Expression is ending with an operator',\n );\n } else {\n this.tokens.push(new ExpressionToken(buff));\n }\n }\n }\n\n private processStringLiteral(length: number, chr: string, i: number): Tuple2<number, boolean> {\n let strConstant: string = '';\n\n let j: number = i + 1;\n for (; j < length; j++) {\n let nextChar = this.expression.charAt(j);\n\n if (nextChar == chr && this.expression.charAt(j - 1) != '\\\\') break;\n\n strConstant += nextChar;\n }\n\n if (j == length && this.expression.charAt(j - 1) != chr) {\n throw new ExpressionEvaluationException(\n this.expression,\n 'Missing string ending marker ' + chr,\n );\n }\n\n let result = new Tuple2(j, false);\n\n this.tokens.push(new ExpressionTokenValue(strConstant, strConstant));\n return result;\n }\n\n private process(length: number, sb: StringBuilder, i: number): Tuple2<number, boolean> {\n let cnt: number = 1;\n ++i;\n while (i < length && cnt != 0) {\n let c: string = this.expression.charAt(i);\n if (c == ']') --cnt;\n else if (c == '[') ++cnt;\n if (cnt != 0) {\n sb.append(c);\n i++;\n }\n }\n this.tokens.push(new Expression(sb.toString()));\n sb.setLength(0);\n\n return new Tuple2(i, false);\n }\n\n private processOthers(\n chr: string,\n length: number,\n sb: StringBuilder,\n buff: string,\n i: number,\n isPrevOp: boolean,\n ): Tuple2<number, boolean> {\n let start: number = length - i;\n start = start < Operation.BIGGEST_OPERATOR_SIZE ? start : Operation.BIGGEST_OPERATOR_SIZE;\n\n for (let size = start; size > 0; size--) {\n let op: string = this.expression.substring(i, i + size);\n if (Operation.OPERATORS_WITHOUT_SPACE_WRAP.has(op)) {\n if (!StringUtil.isNullOrBlank(buff)) {\n this.tokens.push(new ExpressionToken(buff));\n isPrevOp = false;\n }\n this.checkUnaryOperator(\n this.tokens,\n this.ops,\n Operation.OPERATION_VALUE_OF.get(op),\n isPrevOp,\n );\n isPrevOp = true;\n sb.setLength(0);\n return new Tuple2(i + size - 1, isPrevOp);\n }\n }\n\n sb.append(chr);\n return new Tuple2(i, false);\n }\n\n private processTernaryOperator(\n length: number,\n sb: StringBuilder,\n buff: string,\n i: number,\n isPrevOp: boolean,\n ): number {\n if (isPrevOp) {\n throw new ExpressionEvaluationException(\n this.expression,\n 'Ternary operator is followed by an operator',\n );\n }\n\n if (buff.trim() != '') {\n this.tokens.push(new Expression(buff));\n sb.setLength(0);\n }\n\n ++i;\n let cnt: number = 1;\n let inChr = '';\n const start = i;\n while (i < length && cnt > 0) {\n inChr = this.expression.charAt(i);\n if (inChr == '?') ++cnt;\n else if (inChr == ':') --cnt;\n ++i;\n }\n\n if (inChr != ':') {\n throw new ExpressionEvaluationException(this.expression, \"':' operater is missing\");\n }\n\n if (i >= length) {\n throw new ExpressionEvaluationException(\n this.expression,\n 'Third part of the ternary expression is missing',\n );\n }\n\n while (\n !this.ops.isEmpty() &&\n this.hasPrecedence(Operation.CONDITIONAL_TERNARY_OPERATOR, this.ops.peek())\n ) {\n let prev: Operation = this.ops.pop();\n\n if (Operation.UNARY_OPERATORS.has(prev)) {\n const l: ExpressionToken = this.tokens.pop();\n this.tokens.push(new Expression('', l, undefined, prev));\n } else {\n let r = this.tokens.pop();\n let l = this.tokens.pop();\n\n this.tokens.push(new Expression('', l, r, prev));\n }\n }\n\n this.ops.push(Operation.CONDITIONAL_TERNARY_OPERATOR);\n this.tokens.push(new Expression(this.expression.substring(start, i - 1)));\n\n const secondExp: string = this.expression.substring(i);\n if (secondExp.trim() === '') {\n throw new ExpressionEvaluationException(\n this.expression,\n 'Third part of the ternary expression is missing',\n );\n }\n\n this.tokens.push(new Expression(secondExp));\n\n return length - 1;\n }\n\n private processSubExpression(\n length: number,\n sb: StringBuilder,\n buff: string,\n i: number,\n isPrevOp: boolean,\n ): number {\n if (Operation.OPERATORS.has(buff)) {\n this.checkUnaryOperator(\n this.tokens,\n this.ops,\n Operation.OPERATION_VALUE_OF.get(buff),\n isPrevOp,\n );\n sb.setLength(0);\n } else if (!StringUtil.isNullOrBlank(buff)) {\n throw new ExpressionEvaluationException(\n this.expression,\n StringFormatter.format('Unkown token : $ found.', buff),\n );\n }\n\n let cnt: number = 1;\n const subExp: StringBuilder = new StringBuilder();\n let inChr: string = this.expression.charAt(i);\n i++;\n while (i < length && cnt > 0) {\n inChr = this.expression.charAt(i);\n if (inChr == '(') cnt++;\n else if (inChr == ')') cnt--;\n if (cnt != 0) {\n subExp.append(inChr);\n i++;\n }\n }\n\n if (inChr != ')')\n throw new ExpressionEvaluationException(\n this.expression,\n 'Missing a closed parenthesis',\n );\n\n while (\n subExp.length() > 2 &&\n subExp.charAt(0) == '(' &&\n subExp.charAt(subExp.length() - 1) == ')'\n ) {\n subExp.deleteCharAt(0);\n subExp.setLength(subExp.length() - 1);\n }\n\n this.tokens.push(new Expression(subExp.toString().trim()));\n return i;\n }\n\n private processTokenSepearator(sb: StringBuilder, buff: string, isPrevOp: boolean): boolean {\n if (!StringUtil.isNullOrBlank(buff)) {\n if (Operation.OPERATORS.has(buff)) {\n this.checkUnaryOperator(\n this.tokens,\n this.ops,\n Operation.OPERATION_VALUE_OF.get(buff),\n isPrevOp,\n );\n isPrevOp = true;\n } else {\n this.tokens.push(new ExpressionToken(buff));\n isPrevOp = false;\n }\n }\n sb.setLength(0);\n\n return isPrevOp;\n }\n\n private checkUnaryOperator(\n tokens: LinkedList<ExpressionToken>,\n ops: LinkedList<Operation>,\n op: Operation | undefined,\n isPrevOp: boolean,\n ): void {\n if (!op) return;\n if (isPrevOp || tokens.isEmpty()) {\n if (Operation.UNARY_OPERATORS.has(op)) {\n const x = Operation.UNARY_MAP.get(op);\n if (x) ops.push(x);\n } else\n throw new ExpressionEvaluationException(\n this.expression,\n StringFormatter.format('Extra operator $ found.', op),\n );\n } else {\n while (!ops.isEmpty() && this.hasPrecedence(op, ops.peek())) {\n let prev: Operation = ops.pop();\n\n if (Operation.UNARY_OPERATORS.has(prev)) {\n let l: ExpressionToken = tokens.pop();\n tokens.push(new Expression('', l, undefined, prev));\n } else {\n let r: ExpressionToken = tokens.pop();\n let l: ExpressionToken = tokens.pop();\n\n tokens.push(new Expression('', l, r, prev));\n }\n }\n ops.push(op);\n }\n }\n\n private hasPrecedence(op1: Operation, op2: Operation): boolean {\n let pre1: number | undefined = Operation.OPERATOR_PRIORITY.get(op1);\n let pre2: number | undefined = Operation.OPERATOR_PRIORITY.get(op2);\n if (!pre1 || !pre2) {\n throw new Error('Unknown operators provided');\n }\n return pre2 < pre1;\n }\n\n public toString(): string {\n if (this.ops.isEmpty()) {\n if (this.tokens.size() == 1) return this.tokens.get(0).toString();\n return 'Error: No tokens';\n }\n\n let sb: StringBuilder = new StringBuilder();\n let ind: number = 0;\n\n const ops: Operation[] = this.ops.toArray();\n const tokens: ExpressionToken[] = this.tokens.toArray();\n\n for (let i = 0; i < ops.length; i++) {\n if (ops[i].getOperator().startsWith('UN: ')) {\n sb.append('(')\n .append(ops[i].getOperator().substring(4))\n .append(\n tokens[ind] instanceof Expression\n ? (tokens[ind] as Expression).toString()\n : tokens[ind],\n )\n .append(')');\n ind++;\n } else if (ops[i] == Operation.CONDITIONAL_TERNARY_OPERATOR) {\n let temp: ExpressionToken = tokens[ind++];\n sb.insert(\n 0,\n temp instanceof Expression ? (temp as Expression).toString() : temp.toString(),\n );\n sb.insert(0, ':');\n temp = tokens[ind++];\n sb.insert(\n 0,\n temp instanceof Expression ? (temp as Expression).toString() : temp.toString(),\n );\n sb.insert(0, '?');\n temp = tokens[ind++];\n sb.insert(\n 0,\n temp instanceof Expression ? (temp as Expression).toString() : temp.toString(),\n ).append(')');\n sb.insert(0, '(');\n } else {\n if (ind == 0) {\n const temp: ExpressionToken = tokens[ind++];\n sb.insert(\n 0,\n temp instanceof Expression\n ? (temp as Expression).toString()\n : temp.toString(),\n );\n }\n const temp: ExpressionToken = tokens[ind++];\n sb.insert(0, ops[i].getOperator())\n .insert(\n 0,\n temp instanceof Expression\n ? (temp as Expression).toString()\n : temp.toString(),\n )\n .insert(0, '(')\n .append(')');\n }\n }\n\n return sb.toString();\n }\n\n public equals(o: Expression): boolean {\n return this.expression == o.expression;\n }\n}\n","import { KIRuntimeException } from '../../../exception/KIRuntimeException';\nimport { isNullValue } from '../../../util/NullCheck';\nimport { StringFormatter } from '../../../util/string/StringFormatter';\nimport { StringUtil } from '../../../util/string/StringUtil';\nimport { ExpressionEvaluationException } from '../exception/ExpressionEvaluationException';\n\nexport abstract class TokenValueExtractor {\n public static readonly REGEX_SQUARE_BRACKETS: RegExp = /[\\[\\]]/;\n public static readonly REGEX_DOT: RegExp = /\\./;\n\n public getValue(token: string): any {\n let prefix: string = this.getPrefix();\n\n if (!token.startsWith(prefix))\n throw new KIRuntimeException(\n StringFormatter.format(\"Token $ doesn't start with $\", token, prefix),\n );\n\n return this.getValueInternal(token);\n }\n\n protected retrieveElementFrom(\n token: string,\n parts: string[],\n partNumber: number,\n jsonElement: any,\n ): any {\n if (isNullValue(jsonElement)) return undefined;\n\n if (parts.length == partNumber) return jsonElement;\n\n let bElement: any = parts[partNumber]\n .split(TokenValueExtractor.REGEX_SQUARE_BRACKETS)\n .map((e) => e.trim())\n .filter((e) => !StringUtil.isNullOrBlank(e))\n .reduce(\n (a, c, i) =>\n this.resolveForEachPartOfTokenWithBrackets(token, parts, partNumber, c, a, i),\n jsonElement,\n );\n\n return this.retrieveElementFrom(token, parts, partNumber + 1, bElement);\n }\n\n protected resolveForEachPartOfTokenWithBrackets(\n token: string,\n parts: string[],\n partNumber: number,\n c: string,\n a: any,\n i: any,\n ): any {\n if (isNullValue(a)) return undefined;\n\n if (i === 0) {\n if (c === 'length' && typeof a === 'string') {\n return a.length;\n }\n if (Array.isArray(a)) {\n if (c === 'length') return a.length;\n try {\n let index: number = parseInt(c);\n if (isNaN(index)) {\n throw new Error(StringFormatter.format('$ is not a number', index));\n }\n if (index >= a.length) return undefined;\n\n return a[index];\n } catch (err: any) {\n throw new ExpressionEvaluationException(\n token,\n StringFormatter.format(\"$ couldn't be parsed into integer in $\", c, token),\n err,\n );\n }\n }\n\n this.checkIfObject(token, parts, partNumber, a);\n return a[c];\n } else if (c?.startsWith('\"')) {\n if (!c.endsWith('\"') || c.length == 1 || c.length == 2)\n throw new ExpressionEvaluationException(\n token,\n StringFormatter.format('$ is missing a double quote or empty key found', token),\n );\n\n this.checkIfObject(token, parts, partNumber, a);\n return a[c.substring(1, c.length - 1)];\n }\n\n try {\n let index: number = parseInt(c);\n if (isNaN(index)) {\n throw new Error(StringFormatter.format('$ is not a number', index));\n }\n if (!Array.isArray(a))\n throw new ExpressionEvaluationException(\n token,\n StringFormatter.format(\n 'Expecting an array with index $ while processing the expression',\n index,\n token,\n ),\n );\n\n if (index >= a.length) return undefined;\n\n return a[index];\n } catch (err: any) {\n throw new ExpressionEvaluationException(\n token,\n StringFormatter.format(\"$ couldn't be parsed into integer in $\", c, token),\n err,\n );\n }\n }\n\n protected checkIfObject(\n token: string,\n parts: string[],\n partNumber: number,\n jsonElement: any,\n ): void {\n if (typeof jsonElement != 'object' || Array.isArray(jsonElement))\n throw new ExpressionEvaluationException(\n token,\n StringFormatter.format(\n 'Unable to retrive $ from $ in the path $',\n parts[partNumber],\n jsonElement.toString(),\n token,\n ),\n );\n }\n\n protected abstract getValueInternal(token: string): any;\n\n public abstract getPrefix(): string;\n}\n","import { KIRuntimeException } from '../../../exception/KIRuntimeException';\nimport { isNullValue } from '../../../util/NullCheck';\nimport { duplicate } from '../../../util/duplicate';\nimport { StringFormatter } from '../../../util/string/StringFormatter';\nimport { StringUtil } from '../../../util/string/StringUtil';\nimport { Expression } from '../Expression';\nimport { ExpressionTokenValue } from '../ExpressionTokenValue';\nimport { Operation } from '../Operation';\nimport { ExpressionEvaluationException } from '../exception/ExpressionEvaluationException';\nimport { TokenValueExtractor } from './TokenValueExtractor';\n\nexport class ObjectValueSetterExtractor extends TokenValueExtractor {\n private store: any;\n private prefix: string;\n constructor(store: any, prefix: string) {\n super();\n this.store = store;\n this.prefix = prefix;\n }\n protected getValueInternal(token: string) {\n let parts: string[] = token.split(TokenValueExtractor.REGEX_DOT);\n return this.retrieveElementFrom(token, parts, 1, this.store);\n }\n\n public getStore(): any {\n return this.store;\n }\n public setStore(store: any): ObjectValueSetterExtractor {\n this.store = store;\n return this;\n }\n\n public setValue(\n token: string,\n value: any,\n overwrite: boolean = true,\n deleteOnNull: boolean = false,\n ) {\n this.store = duplicate(this.store);\n this.modifyStore(token, value, overwrite, deleteOnNull);\n }\n\n private modifyStore(\n stringToken: string,\n value: any,\n overwrite: boolean,\n deleteOnNull: boolean,\n ) {\n const exp = new Expression(stringToken);\n const tokens = exp.getTokens();\n tokens.removeLast();\n const ops = exp.getOperations();\n\n let op = ops.removeLast();\n let token = tokens.removeLast();\n let mem =\n token instanceof ExpressionTokenValue\n ? (token as ExpressionTokenValue).getElement()\n : token.getExpression();\n\n let el = this.store;\n\n while (!ops.isEmpty()) {\n if (op == Operation.OBJECT_OPERATOR) {\n el = this.getDataFromObject(el, mem, ops.peekLast());\n } else {\n el = this.getDataFromArray(el, mem, ops.peekLast());\n }\n\n op = ops.removeLast();\n token = tokens.removeLast();\n mem =\n token instanceof ExpressionTokenValue\n ? (token as ExpressionTokenValue).getElement()\n : token.getExpression();\n }\n\n if (op == Operation.OBJECT_OPERATOR)\n this.putDataInObject(el, mem, value, overwrite, deleteOnNull);\n else this.putDataInArray(el, mem, value, overwrite, deleteOnNull);\n }\n\n private getDataFromArray(el: any, mem: string, nextOp: Operation): any {\n if (!Array.isArray(el))\n throw new KIRuntimeException(\n StringFormatter.format('Expected an array but found $', el),\n );\n\n const index = parseInt(mem);\n if (isNaN(index))\n throw new KIRuntimeException(\n StringFormatter.format('Expected an array index but found $', mem),\n );\n if (index < 0)\n throw new KIRuntimeException(\n StringFormatter.format('Array index is out of bound - $', mem),\n );\n\n let je = el[index];\n\n if (isNullValue(je)) {\n je = nextOp == Operation.OBJECT_OPERATOR ? {} : [];\n el[index] = je;\n }\n return je;\n }\n\n private getDataFromObject(el: any, mem: string, nextOp: Operation): any {\n if (Array.isArray(el) || typeof el !== 'object')\n throw new KIRuntimeException(\n StringFormatter.format('Expected an object but found $', el),\n );\n\n let je = el[mem];\n\n if (isNullValue(je)) {\n je = nextOp == Operation.OBJECT_OPERATOR ? {} : [];\n el[mem] = je;\n }\n return je;\n }\n\n private putDataInArray(\n el: any,\n mem: string,\n value: any,\n overwrite: boolean,\n deleteOnNull: boolean,\n ): void {\n if (!Array.isArray(el))\n throw new KIRuntimeException(\n StringFormatter.format('Expected an array but found $', el),\n );\n\n const index = parseInt(mem);\n if (isNaN(index))\n throw new KIRuntimeException(\n StringFormatter.format('Expected an array index but found $', mem),\n );\n if (index < 0)\n throw new KIRuntimeException(\n StringFormatter.format('Array index is out of bound - $', mem),\n );\n\n if (overwrite || isNullValue(el[index])) {\n if (deleteOnNull && isNullValue(value)) el.splice(index, 1);\n else el[index] = value;\n }\n }\n\n private putDataInObject(\n el: any,\n mem: string,\n value: any,\n overwrite: boolean,\n deleteOnNull: boolean,\n ): void {\n if (Array.isArray(el) || typeof el !== 'object')\n throw new KIRuntimeException(\n StringFormatter.format('Expected an object but found $', el),\n );\n\n if (overwrite || isNullValue(el[mem])) {\n if (deleteOnNull && isNullValue(value)) delete el[mem];\n else el[mem] = value;\n }\n }\n\n getPrefix(): string {\n return this.prefix;\n }\n}\n","import { Schema } from '../../../json/schema/Schema';\nimport { SchemaType } from '../../../json/schema/type/SchemaType';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { Parameter } from '../../../model/Parameter';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { ObjectValueSetterExtractor } from '../../../runtime/expression/tokenextractor/ObjectValueSetterExtractor';\nimport { isNullValue } from '../../../util/NullCheck';\nimport { AbstractArrayFunction } from './AbstractArrayFunction';\n\nconst KEY_PATH = 'keyPath';\nconst VALUE_PATH = 'valuePath';\nconst IGNORE_NULL_VALUES = 'ignoreNullValues';\nconst IGNORE_NULL_KEYS = 'ignoreNullKeys';\nconst IGNORE_DUPLICATE_KEYS = 'ignoreDuplicateKeys';\n\nexport class ArrayToObject extends AbstractArrayFunction {\n public constructor() {\n super(\n 'ArrayToObjects',\n [\n AbstractArrayFunction.PARAMETER_ARRAY_SOURCE,\n Parameter.of(KEY_PATH, Schema.ofString(KEY_PATH)),\n Parameter.of(VALUE_PATH, Schema.of(VALUE_PATH, SchemaType.STRING, SchemaType.NULL)),\n Parameter.of(\n IGNORE_NULL_VALUES,\n Schema.ofBoolean(IGNORE_NULL_VALUES).setDefaultValue(false),\n ),\n Parameter.of(\n IGNORE_NULL_KEYS,\n Schema.ofBoolean(IGNORE_NULL_KEYS).setDefaultValue(true),\n ),\n Parameter.of(\n IGNORE_DUPLICATE_KEYS,\n Schema.ofBoolean(IGNORE_DUPLICATE_KEYS).setDefaultValue(false),\n ),\n ],\n AbstractArrayFunction.EVENT_RESULT_ANY,\n );\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let source: any[] = context\n ?.getArguments()\n ?.get(AbstractArrayFunction.PARAMETER_ARRAY_SOURCE.getParameterName());\n\n let keyPath: string = context?.getArguments()?.get(KEY_PATH);\n let valuePath: string = context?.getArguments()?.get(VALUE_PATH) ?? '';\n\n let ignoreNullValues: boolean = context?.getArguments()?.get(IGNORE_NULL_VALUES);\n let ignoreNullKeys: boolean = context?.getArguments()?.get(IGNORE_NULL_KEYS);\n let ignoreDuplicateKeys: boolean = context?.getArguments()?.get(IGNORE_DUPLICATE_KEYS);\n\n const ove: ObjectValueSetterExtractor = new ObjectValueSetterExtractor({}, 'Data.');\n\n const result: any = source\n .filter((e) => !isNullValue(e))\n .reduce((acc: any, cur: any) => {\n ove.setStore(cur);\n\n const key = ove.getValue('Data.' + keyPath);\n if (ignoreNullKeys && isNullValue(key)) return acc;\n\n const value = valuePath ? ove.getValue('Data.' + valuePath) : cur;\n if (ignoreNullValues && isNullValue(value)) return acc;\n\n if (ignoreDuplicateKeys && acc.hasOwnProperty(key)) return acc;\n\n acc[key] = value;\n return acc;\n }, {});\n\n return new FunctionOutput([\n EventResult.outputOf(new Map([[AbstractArrayFunction.EVENT_RESULT_NAME, result]])),\n ]);\n }\n}\n","import { Namespaces } from '../../../namespaces/Namespaces';\nimport { Repository } from '../../../Repository';\nimport mapEntry from '../../../util/mapEntry';\nimport { MapUtil } from '../../../util/MapUtil';\nimport { Function } from '../../Function';\nimport { Concatenate } from './Concatenate';\nimport { AddFirst } from './AddFirst';\nimport { ArrayToArrayOfObjects } from './ArrayToArrayOfObjects';\nimport { BinarySearch } from './BinarySearch';\nimport { Compare } from './Compare';\nimport { Copy } from './Copy';\nimport { Delete } from './Delete';\nimport { DeleteFirst } from './DeleteFirst';\nimport { DeleteFrom } from './DeleteFrom';\nimport { DeleteLast } from './DeleteLast';\nimport { Disjoint } from './Disjoint';\nimport { Equals } from './Equals';\nimport { Fill } from './Fill';\nimport { Frequency } from './Frequency';\nimport { IndexOf } from './IndexOf';\nimport { IndexOfArray } from './IndexOfArray';\nimport { LastIndexOf } from './LastIndexOf';\nimport { LastIndexOfArray } from './LastIndexOfArray';\nimport { Max } from './Max';\nimport { Min } from './Min';\nimport { MisMatch } from './MisMatch';\nimport { Reverse } from './Reverse';\nimport { Rotate } from './Rotate';\nimport { Shuffle } from './Shuffle';\nimport { Sort } from './Sort';\nimport { SubArray } from './SubArray';\nimport { Insert } from './Insert';\nimport { InsertLast } from './InsertLast';\nimport { RemoveDuplicates } from './RemoveDuplicates';\nimport { ArrayToObject } from './ArrayToObject';\n\nexport class ArrayFunctionRepository implements Repository<Function> {\n private static readonly repoMap: Map<string, Function> = MapUtil.ofArrayEntries(\n mapEntry(new Concatenate()),\n mapEntry(new AddFirst()),\n mapEntry(new BinarySearch()),\n mapEntry(new Compare()),\n mapEntry(new Copy()),\n mapEntry(new Delete()),\n mapEntry(new DeleteFirst()),\n mapEntry(new DeleteFrom()),\n mapEntry(new DeleteLast()),\n mapEntry(new Disjoint()),\n mapEntry(new Equals()),\n mapEntry(new Fill()),\n mapEntry(new Frequency()),\n mapEntry(new IndexOf()),\n mapEntry(new IndexOfArray()),\n mapEntry(new LastIndexOf()),\n mapEntry(new LastIndexOfArray()),\n mapEntry(new Max()),\n mapEntry(new Min()),\n mapEntry(new MisMatch()),\n mapEntry(new Reverse()),\n mapEntry(new Rotate()),\n mapEntry(new Shuffle()),\n mapEntry(new Sort()),\n mapEntry(new SubArray()),\n mapEntry(new ArrayToArrayOfObjects()),\n mapEntry(new Insert()),\n mapEntry(new InsertLast()),\n mapEntry(new RemoveDuplicates()),\n mapEntry(new ArrayToObject()),\n );\n\n private static readonly filterableNames = Array.from(\n ArrayFunctionRepository.repoMap.values(),\n ).map((e) => e.getSignature().getFullName());\n\n public async find(namespace: string, name: string): Promise<Function | undefined> {\n if (namespace != Namespaces.SYSTEM_ARRAY) {\n return Promise.resolve(undefined);\n }\n\n return Promise.resolve(ArrayFunctionRepository.repoMap.get(name));\n }\n\n public async filter(name: string): Promise<string[]> {\n return Promise.resolve(\n ArrayFunctionRepository.filterableNames.filter(\n (e) => e.toLowerCase().indexOf(name.toLowerCase()) !== -1,\n ),\n );\n }\n}\n","import { Schema } from '../json/schema/Schema';\n\nexport class ContextElement {\n public static readonly NULL: ContextElement = new ContextElement(Schema.NULL, undefined);\n\n private schema?: Schema;\n private element: any;\n\n public constructor(schema?: Schema, element?: any) {\n this.schema = schema;\n this.element = element;\n }\n\n public getSchema(): Schema | undefined {\n return this.schema;\n }\n public setSchema(schema: Schema): ContextElement {\n this.schema = schema;\n return this;\n }\n public getElement(): any {\n return this.element;\n }\n public setElement(element: any): ContextElement {\n this.element = element;\n return this;\n }\n}\n","import { KIRuntimeException } from '../../../exception/KIRuntimeException';\nimport { Schema } from '../../../json/schema/Schema';\nimport { StringFormat } from '../../../json/schema/string/StringFormat';\nimport { SchemaType } from '../../../json/schema/type/SchemaType';\nimport { TypeUtil } from '../../../json/schema/type/TypeUtil';\nimport { Event } from '../../../model/Event';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionSignature } from '../../../model/FunctionSignature';\nimport { Parameter } from '../../../model/Parameter';\nimport { ParameterType } from '../../../model/ParameterType';\nimport { Namespaces } from '../../../namespaces/Namespaces';\nimport { ContextElement } from '../../../runtime/ContextElement';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { isNullValue } from '../../../util/NullCheck';\nimport { StringFormatter } from '../../../util/string/StringFormatter';\nimport { AbstractFunction } from '../../AbstractFunction';\n\nconst NAME = 'name';\nconst SCHEMA = 'schema';\n\nconst SIGNATURE: FunctionSignature = new FunctionSignature('Create')\n .setNamespace(Namespaces.SYSTEM_CTX)\n .setParameters(\n new Map([\n Parameter.ofEntry(\n NAME,\n new Schema()\n .setName(NAME)\n .setType(TypeUtil.of(SchemaType.STRING))\n .setMinLength(1)\n .setFormat(StringFormat.REGEX)\n .setPattern('^[a-zA-Z_$][a-zA-Z_$0-9]*$'),\n false,\n ParameterType.CONSTANT,\n ),\n Parameter.ofEntry(SCHEMA, Schema.SCHEMA, false, ParameterType.CONSTANT),\n ]),\n )\n .setEvents(new Map([Event.outputEventMapEntry(new Map())]));\n\nexport class Create extends AbstractFunction {\n public getSignature(): FunctionSignature {\n return SIGNATURE;\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n const name: string = context?.getArguments()?.get(NAME);\n\n if (context?.getContext()?.has(name))\n throw new KIRuntimeException(\n StringFormatter.format(\"Context already has an element for '$' \", name),\n );\n\n let s: Schema | undefined = Schema.from(context?.getArguments()?.get(SCHEMA));\n\n if (!s) {\n throw new KIRuntimeException('Schema is not supplied.');\n }\n\n context\n .getContext()!\n .set(\n name,\n new ContextElement(\n s,\n isNullValue(s.getDefaultValue()) ? undefined : s.getDefaultValue(),\n ),\n );\n\n return new FunctionOutput([EventResult.outputOf(new Map())]);\n }\n}\n","import { KIRuntimeException } from '../../../exception/KIRuntimeException';\nimport { Schema } from '../../../json/schema/Schema';\nimport { StringFormat } from '../../../json/schema/string/StringFormat';\nimport { SchemaType } from '../../../json/schema/type/SchemaType';\nimport { TypeUtil } from '../../../json/schema/type/TypeUtil';\nimport { Event } from '../../../model/Event';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionSignature } from '../../../model/FunctionSignature';\nimport { Parameter } from '../../../model/Parameter';\nimport { ParameterType } from '../../../model/ParameterType';\nimport { Namespaces } from '../../../namespaces/Namespaces';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { StringFormatter } from '../../../util/string/StringFormatter';\nimport { AbstractFunction } from '../../AbstractFunction';\n\nconst NAME = 'name';\nconst VALUE = 'value';\nconst SIGNATURE = new FunctionSignature('Get')\n .setNamespace(Namespaces.SYSTEM_CTX)\n .setParameters(\n new Map([\n Parameter.ofEntry(\n NAME,\n new Schema()\n .setName(NAME)\n .setType(TypeUtil.of(SchemaType.STRING))\n .setMinLength(1)\n .setFormat(StringFormat.REGEX)\n .setPattern('^[a-zA-Z_$][a-zA-Z_$0-9]*$'),\n false,\n ParameterType.CONSTANT,\n ),\n ]),\n )\n .setEvents(new Map([Event.outputEventMapEntry(new Map([[VALUE, Schema.ofAny(VALUE)]]))]));\n\nexport class Get extends AbstractFunction {\n public getSignature(): FunctionSignature {\n return SIGNATURE;\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n const name: string = context?.getArguments()?.get(NAME);\n\n if (!context.getContext()?.has(name))\n throw new KIRuntimeException(\n StringFormatter.format(\"Context don't have an element for '$' \", name),\n );\n\n return new FunctionOutput([\n EventResult.outputOf(new Map([VALUE, context.getContext()?.get(name)?.getElement()])),\n ]);\n }\n}\n","import { ExecutionException } from '../../../../exception/ExecutionException';\nimport { isNullValue } from '../../../../util/NullCheck';\nimport { StringFormatter } from '../../../../util/string/StringFormatter';\nimport { Operation } from '../../Operation';\n\nexport abstract class BinaryOperator {\n public abstract apply(t: any, u: any): any;\n\n public nullCheck(e1: any, e2: any, op: Operation): void {\n if (isNullValue(e1) || isNullValue(e2))\n throw new ExecutionException(\n StringFormatter.format('$ cannot be applied to a null value', op.getOperatorName()),\n );\n }\n}\n","import { isNullValue } from '../../../../util/NullCheck';\nimport { BinaryOperator } from './BinaryOperator';\n\nexport class LogicalNullishCoalescingOperator extends BinaryOperator {\n public apply(t: any, u: any): any {\n return isNullValue(t) ? u : t;\n }\n}\n","import { isNullValue } from '../../../../util/NullCheck';\nimport { BinaryOperator } from './BinaryOperator';\n\nexport class ArithmeticAdditionOperator extends BinaryOperator {\n public apply(t: any, u: any): any {\n if (isNullValue(t)) return u;\n else if (isNullValue(u)) return t;\n return t + u;\n }\n}\n","import { Operation } from '../../Operation';\nimport { BinaryOperator } from './BinaryOperator';\n\nexport class ArithmeticDivisionOperator extends BinaryOperator {\n public apply(t: any, u: any): any {\n this.nullCheck(t, u, Operation.DIVISION);\n return t / u;\n }\n}\n","import { Operation } from '../../Operation';\nimport { BinaryOperator } from './BinaryOperator';\n\nexport class ArithmeticIntegerDivisionOperator extends BinaryOperator {\n public apply(t: any, u: any): any {\n this.nullCheck(t, u, Operation.DIVISION);\n return Math.floor(t / u);\n }\n}\n","import { Operation } from '../../Operation';\nimport { BinaryOperator } from './BinaryOperator';\n\nexport class ArithmeticModulusOperator extends BinaryOperator {\n public apply(t: any, u: any): any {\n this.nullCheck(t, u, Operation.MOD);\n return t % u;\n }\n}\n","import { Operation } from '../../Operation';\nimport { BinaryOperator } from './BinaryOperator';\n\nexport class ArithmeticMultiplicationOperator extends BinaryOperator {\n public apply(t: any, u: any): any {\n this.nullCheck(t, u, Operation.MULTIPLICATION);\n\n const isTTypeString = typeof t === 'string';\n const uType = typeof u;\n\n if (isTTypeString || uType === 'string') {\n let str: string = isTTypeString ? t : u;\n let num: number = isTTypeString ? u : t;\n\n let sb: string = '';\n\n let reverse: boolean = num < 0;\n num = Math.abs(num);\n\n let times = Math.floor(num);\n while (times-- > 0) sb += str;\n\n let chrs = Math.floor(str.length * (num - Math.floor(num)));\n if (chrs < 0) chrs = -chrs;\n\n if (chrs != 0) sb += str.substring(0, chrs);\n\n if (reverse) {\n let rev = '';\n for (let i = sb.length - 1; i >= 0; i--) {\n rev += sb[i];\n }\n return rev;\n }\n\n return sb;\n }\n\n return t * u;\n }\n}\n","import { Operation } from '../../Operation';\nimport { BinaryOperator } from './BinaryOperator';\n\nexport class ArithmeticSubtractionOperator extends BinaryOperator {\n public apply(t: any, u: any): any {\n this.nullCheck(t, u, Operation.SUBTRACTION);\n return t - u;\n }\n}\n","import { ExecutionException } from '../../../../exception/ExecutionException';\nimport { StringFormatter } from '../../../../util/string/StringFormatter';\nimport { BinaryOperator } from './BinaryOperator';\n\nexport class ArrayOperator extends BinaryOperator {\n public apply(t: any, u: any): any {\n if (!t) {\n throw new ExecutionException('Cannot apply array operator on a null value');\n }\n\n if (!u) {\n throw new ExecutionException('Cannot retrive null index value');\n }\n\n if (!Array.isArray(t) && typeof t != 'string') {\n throw new ExecutionException(\n StringFormatter.format('Cannot retrieve value from a primitive value $', t),\n );\n }\n if (u >= t.length)\n throw new ExecutionException(\n StringFormatter.format(\n 'Cannot retrieve index $ from the array of length $',\n u,\n t.length,\n ),\n );\n\n return t[u];\n }\n}\n","import { Operation } from '../../Operation';\nimport { BinaryOperator } from './BinaryOperator';\n\nexport class BitwiseAndOperator extends BinaryOperator {\n public apply(t: any, u: any): any {\n this.nullCheck(t, u, Operation.BITWISE_AND);\n return t & u;\n }\n}\n","import { Operation } from '../../Operation';\nimport { BinaryOperator } from './BinaryOperator';\n\nexport class BitwiseLeftShiftOperator extends BinaryOperator {\n public apply(t: any, u: any): any {\n this.nullCheck(t, u, Operation.BITWISE_LEFT_SHIFT);\n return t << u;\n }\n}\n","import { Operation } from '../../Operation';\nimport { BinaryOperator } from './BinaryOperator';\n\nexport class BitwiseOrOperator extends BinaryOperator {\n public apply(t: any, u: any): any {\n this.nullCheck(t, u, Operation.BITWISE_OR);\n return t | u;\n }\n}\n","import { Operation } from '../../Operation';\nimport { BinaryOperator } from './BinaryOperator';\n\nexport class BitwiseRightShiftOperator extends BinaryOperator {\n public apply(t: any, u: any): any {\n this.nullCheck(t, u, Operation.BITWISE_RIGHT_SHIFT);\n return t >> u;\n }\n}\n","import { Operation } from '../../Operation';\nimport { BinaryOperator } from './BinaryOperator';\n\nexport class BitwiseUnsignedRightShiftOperator extends BinaryOperator {\n public apply(t: any, u: any): any {\n this.nullCheck(t, u, Operation.BITWISE_UNSIGNED_RIGHT_SHIFT);\n return t >>> u;\n }\n}\n","import { Operation } from '../../Operation';\nimport { BinaryOperator } from './BinaryOperator';\n\nexport class BitwiseXorOperator extends BinaryOperator {\n public apply(t: any, u: any): any {\n this.nullCheck(t, u, Operation.BITWISE_XOR);\n return t ^ u;\n }\n}\n","import { ExecutionException } from '../../../../exception/ExecutionException';\nimport { SchemaType } from '../../../../json/schema/type/SchemaType';\nimport { PrimitiveUtil } from '../../../../util/primitive/PrimitiveUtil';\nimport { StringFormatter } from '../../../../util/string/StringFormatter';\nimport { Tuple2 } from '../../../../util/Tuples';\nimport { BinaryOperator } from './BinaryOperator';\n\nexport class LogicalAndOperator extends BinaryOperator {\n public apply(t: any, u: any): any {\n const tType: Tuple2<SchemaType, any> = PrimitiveUtil.findPrimitiveNullAsBoolean(t);\n const uType: Tuple2<SchemaType, any> = PrimitiveUtil.findPrimitiveNullAsBoolean(u);\n\n if (tType.getT1() != SchemaType.BOOLEAN)\n throw new ExecutionException(\n StringFormatter.format('Boolean value expected but found $', tType.getT2()),\n );\n\n if (uType.getT1() != SchemaType.BOOLEAN)\n throw new ExecutionException(\n StringFormatter.format('Boolean value expected but found $', uType.getT2()),\n );\n\n return tType.getT2() && uType.getT2();\n }\n}\n","import { deepEqual } from '../../../../util/deepEqual';\nimport { BinaryOperator } from './BinaryOperator';\n\nexport class LogicalEqualOperator extends BinaryOperator {\n public apply(t: any, u: any): any {\n return deepEqual(t, u);\n }\n}\n","import { ExecutionException } from '../../../../exception/ExecutionException';\nimport { SchemaType } from '../../../../json/schema/type/SchemaType';\nimport { PrimitiveUtil } from '../../../../util/primitive/PrimitiveUtil';\nimport { StringFormatter } from '../../../../util/string/StringFormatter';\nimport { Tuple2 } from '../../../../util/Tuples';\nimport { BinaryOperator } from './BinaryOperator';\n\nexport class LogicalGreaterThanEqualOperator extends BinaryOperator {\n public apply(t: any, u: any): any {\n const tType: Tuple2<SchemaType, any> = PrimitiveUtil.findPrimitiveNullAsBoolean(t);\n const uType: Tuple2<SchemaType, any> = PrimitiveUtil.findPrimitiveNullAsBoolean(u);\n\n if (tType.getT1() == SchemaType.BOOLEAN || uType.getT1() == SchemaType.BOOLEAN)\n throw new ExecutionException(\n StringFormatter.format(\n 'Cannot compare >= with the values $ and $',\n tType.getT2(),\n uType.getT2(),\n ),\n );\n\n return tType.getT2() >= uType.getT2();\n }\n}\n","import { ExecutionException } from '../../../../exception/ExecutionException';\nimport { SchemaType } from '../../../../json/schema/type/SchemaType';\nimport { PrimitiveUtil } from '../../../../util/primitive/PrimitiveUtil';\nimport { StringFormatter } from '../../../../util/string/StringFormatter';\nimport { Tuple2 } from '../../../../util/Tuples';\nimport { BinaryOperator } from './BinaryOperator';\n\nexport class LogicalGreaterThanOperator extends BinaryOperator {\n public apply(t: any, u: any): any {\n const tType: Tuple2<SchemaType, any> = PrimitiveUtil.findPrimitiveNullAsBoolean(t);\n const uType: Tuple2<SchemaType, any> = PrimitiveUtil.findPrimitiveNullAsBoolean(u);\n\n if (tType.getT1() == SchemaType.BOOLEAN || uType.getT1() == SchemaType.BOOLEAN)\n throw new ExecutionException(\n StringFormatter.format(\n 'Cannot compare > with the values $ and $',\n tType.getT2(),\n uType.getT2(),\n ),\n );\n\n return tType.getT2() > uType.getT2();\n }\n}\n","import { ExecutionException } from '../../../../exception/ExecutionException';\nimport { SchemaType } from '../../../../json/schema/type/SchemaType';\nimport { PrimitiveUtil } from '../../../../util/primitive/PrimitiveUtil';\nimport { StringFormatter } from '../../../../util/string/StringFormatter';\nimport { Tuple2 } from '../../../../util/Tuples';\nimport { BinaryOperator } from './BinaryOperator';\n\nexport class LogicalLessThanEqualOperator extends BinaryOperator {\n public apply(t: any, u: any): any {\n const tType: Tuple2<SchemaType, any> = PrimitiveUtil.findPrimitiveNullAsBoolean(t);\n const uType: Tuple2<SchemaType, any> = PrimitiveUtil.findPrimitiveNullAsBoolean(u);\n\n if (tType.getT1() == SchemaType.BOOLEAN || uType.getT1() == SchemaType.BOOLEAN)\n throw new ExecutionException(\n StringFormatter.format(\n 'Cannot compare <= with the values $ and $',\n tType.getT2(),\n uType.getT2(),\n ),\n );\n\n return tType.getT2() <= uType.getT2();\n }\n}\n","import { ExecutionException } from '../../../../exception/ExecutionException';\nimport { SchemaType } from '../../../../json/schema/type/SchemaType';\nimport { PrimitiveUtil } from '../../../../util/primitive/PrimitiveUtil';\nimport { StringFormatter } from '../../../../util/string/StringFormatter';\nimport { Tuple2 } from '../../../../util/Tuples';\nimport { BinaryOperator } from './BinaryOperator';\n\nexport class LogicalLessThanOperator extends BinaryOperator {\n public apply(t: any, u: any): any {\n const tType: Tuple2<SchemaType, any> = PrimitiveUtil.findPrimitiveNullAsBoolean(t);\n const uType: Tuple2<SchemaType, any> = PrimitiveUtil.findPrimitiveNullAsBoolean(u);\n\n if (tType.getT1() == SchemaType.BOOLEAN || uType.getT1() == SchemaType.BOOLEAN)\n throw new ExecutionException(\n StringFormatter.format(\n 'Cannot compare < with the values $ and $',\n tType.getT2(),\n uType.getT2(),\n ),\n );\n\n return tType.getT2() < uType.getT2();\n }\n}\n","import { deepEqual } from '../../../../util/deepEqual';\nimport { BinaryOperator } from './BinaryOperator';\n\nexport class LogicalNotEqualOperator extends BinaryOperator {\n public apply(t: any, u: any): any {\n return !deepEqual(t, u);\n }\n}\n","import { ExecutionException } from '../../../../exception/ExecutionException';\nimport { SchemaType } from '../../../../json/schema/type/SchemaType';\nimport { PrimitiveUtil } from '../../../../util/primitive/PrimitiveUtil';\nimport { StringFormatter } from '../../../../util/string/StringFormatter';\nimport { Tuple2 } from '../../../../util/Tuples';\nimport { BinaryOperator } from './BinaryOperator';\n\nexport class LogicalOrOperator extends BinaryOperator {\n public apply(t: any, u: any): any {\n const tType: Tuple2<SchemaType, any> = PrimitiveUtil.findPrimitiveNullAsBoolean(t);\n const uType: Tuple2<SchemaType, any> = PrimitiveUtil.findPrimitiveNullAsBoolean(u);\n\n if (tType.getT1() != SchemaType.BOOLEAN)\n throw new ExecutionException(\n StringFormatter.format('Boolean value expected but found $', tType.getT2()),\n );\n\n if (uType.getT1() != SchemaType.BOOLEAN)\n throw new ExecutionException(\n StringFormatter.format('Boolean value expected but found $', uType.getT2()),\n );\n\n return tType.getT2() || uType.getT2();\n }\n}\n","import { ExecutionException } from '../../../../exception/ExecutionException';\nimport { StringFormatter } from '../../../../util/string/StringFormatter';\nimport { BinaryOperator } from './BinaryOperator';\n\nexport class ObjectOperator extends BinaryOperator {\n public apply(t: any, u: any): any {\n if (!t) {\n throw new ExecutionException('Cannot apply array operator on a null value');\n }\n\n if (!u) {\n throw new ExecutionException('Cannot retrive null property value');\n }\n\n const x: string = typeof t;\n\n if (!Array.isArray(t) && x != 'string' && x != 'object') {\n throw new ExecutionException(\n StringFormatter.format('Cannot retrieve value from a primitive value $', t),\n );\n }\n return t[u];\n }\n}\n","import { ExecutionException } from '../../../../exception/ExecutionException';\nimport { isNullValue } from '../../../../util/NullCheck';\nimport { StringFormatter } from '../../../../util/string/StringFormatter';\nimport { Operation } from '../../Operation';\n\nexport abstract class UnaryOperator {\n public abstract apply(t: any): any;\n\n public nullCheck(e1: any, op: Operation): void {\n if (isNullValue(e1))\n throw new ExecutionException(\n StringFormatter.format('$ cannot be applied to a null value', op.getOperatorName()),\n );\n }\n}\n","import { PrimitiveUtil } from '../../../../util/primitive/PrimitiveUtil';\nimport { Operation } from '../../Operation';\nimport { UnaryOperator } from './UnaryOperator';\n\nexport class ArithmeticUnaryMinusOperator extends UnaryOperator {\n public apply(t: any): any {\n this.nullCheck(t, Operation.UNARY_MINUS);\n\n PrimitiveUtil.findPrimitiveNumberType(t);\n\n return -t;\n }\n}\n","import { PrimitiveUtil } from '../../../../util/primitive/PrimitiveUtil';\nimport { Operation } from '../../Operation';\nimport { UnaryOperator } from './UnaryOperator';\n\nexport class ArithmeticUnaryPlusOperator extends UnaryOperator {\n public apply(t: any): any {\n this.nullCheck(t, Operation.UNARY_PLUS);\n\n PrimitiveUtil.findPrimitiveNumberType(t);\n\n return t;\n }\n}\n","import { ExecutionException } from '../../../../exception/ExecutionException';\nimport { SchemaType } from '../../../../json/schema/type/SchemaType';\nimport { PrimitiveUtil } from '../../../../util/primitive/PrimitiveUtil';\nimport { StringFormatter } from '../../../../util/string/StringFormatter';\nimport { Tuple2 } from '../../../../util/Tuples';\nimport { Operation } from '../../Operation';\nimport { UnaryOperator } from './UnaryOperator';\n\nexport class BitwiseComplementOperator extends UnaryOperator {\n public apply(t: any): any {\n this.nullCheck(t, Operation.UNARY_BITWISE_COMPLEMENT);\n\n let tType: Tuple2<SchemaType, any> = PrimitiveUtil.findPrimitiveNumberType(t);\n\n if (tType.getT1() != SchemaType.INTEGER && tType.getT1() != SchemaType.LONG)\n throw new ExecutionException(\n StringFormatter.format('Unable to apply bitwise operator on $', t),\n );\n\n return ~t;\n }\n}\n","import { UnaryOperator } from './UnaryOperator';\n\nexport class LogicalNotOperator extends UnaryOperator {\n public apply(t: any): any {\n return !t && t !== '';\n }\n}\n","import { StringFormatter } from '../../../util/string/StringFormatter';\nimport { StringUtil } from '../../../util/string/StringUtil';\nimport { ExpressionEvaluationException } from '../exception/ExpressionEvaluationException';\nimport { TokenValueExtractor } from './TokenValueExtractor';\n\nconst KEYWORDS: Map<string, any> = new Map([\n ['true', true],\n ['false', false],\n ['null', undefined],\n ['undefined', undefined],\n]);\n\nexport class LiteralTokenValueExtractor extends TokenValueExtractor {\n public static readonly INSTANCE: LiteralTokenValueExtractor = new LiteralTokenValueExtractor();\n\n protected getValueInternal(token: string): any {\n if (StringUtil.isNullOrBlank(token)) return undefined;\n\n token = token.trim();\n\n if (KEYWORDS.has(token)) return KEYWORDS.get(token);\n\n if (token.startsWith('\"')) {\n return this.processString(token);\n }\n\n return this.processNumbers(token);\n }\n\n private processNumbers(token: string): any {\n try {\n let v = Number(token);\n\n if (isNaN(v)) throw new Error('Parse number error');\n\n return v;\n } catch (err: any) {\n throw new ExpressionEvaluationException(\n token,\n StringFormatter.format('Unable to parse the literal or expression $', token),\n err,\n );\n }\n }\n\n private processString(token: string): any {\n if (!token.endsWith('\"'))\n throw new ExpressionEvaluationException(\n token,\n StringFormatter.format('String literal $ is not closed properly', token),\n );\n\n return token.substring(1, token.length - 1);\n }\n\n public getPrefix(): string {\n return '';\n }\n}\n","import { TernaryOperator } from './TernaryOperator';\n\nexport class ConditionalTernaryOperator extends TernaryOperator {\n public apply(t: any, u: any, v: any): any {\n return t ? u : v;\n }\n}\n","import { ExecutionException } from '../../../../exception/ExecutionException';\nimport { isNullValue } from '../../../../util/NullCheck';\nimport { StringFormatter } from '../../../../util/string/StringFormatter';\nimport { Operation } from '../../Operation';\n\nexport abstract class TernaryOperator {\n public abstract apply(t: any, u: any, v: any): any;\n\n public nullCheck(e1: any, e2: any, e3: any, op: Operation): void {\n if (isNullValue(e1) || isNullValue(e2) || isNullValue(e3))\n throw new ExecutionException(\n StringFormatter.format('$ cannot be applied to a null value', op.getOperatorName()),\n );\n }\n}\n","import { TokenValueExtractor } from './TokenValueExtractor';\n\nexport class ExpressionInternalValueExtractor extends TokenValueExtractor {\n public static readonly PREFIX: string = '_internal.';\n\n private values: Map<string, any> = new Map();\n\n public addValue(key: string, value: any) {\n this.values.set(key, value);\n }\n\n public getValueInternal(token: string): any {\n let parts: string[] = token.split(TokenValueExtractor.REGEX_DOT);\n\n let key: string = parts[1];\n let bIndex: number = key.indexOf('[');\n let fromIndex = 2;\n if (bIndex != -1) {\n key = parts[1].substring(0, bIndex);\n parts[1] = parts[1].substring(bIndex);\n fromIndex = 1;\n }\n return this.retrieveElementFrom(token, parts, fromIndex, this.values.get(key));\n }\n\n public getPrefix(): string {\n return ExpressionInternalValueExtractor.PREFIX;\n }\n}\n","import { ExecutionException } from '../../exception/ExecutionException';\nimport { LinkedList } from '../../util/LinkedList';\nimport { StringBuilder } from '../../util/string/StringBuilder';\nimport { StringFormatter } from '../../util/string/StringFormatter';\nimport { FunctionExecutionParameters } from '../FunctionExecutionParameters';\nimport { ExpressionEvaluationException } from './exception/ExpressionEvaluationException';\nimport { Expression } from './Expression';\nimport { ExpressionToken } from './ExpressionToken';\nimport { ExpressionTokenValue } from './ExpressionTokenValue';\nimport { Operation } from './Operation';\nimport { LogicalNullishCoalescingOperator } from './operators/binary/LogicalNullishCoalescingOperator';\nimport { ArithmeticAdditionOperator } from './operators/binary/ArithmeticAdditionOperator';\nimport { ArithmeticDivisionOperator } from './operators/binary/ArithmeticDivisionOperator';\nimport { ArithmeticIntegerDivisionOperator } from './operators/binary/ArithmeticInetgerDivisionOperator';\nimport { ArithmeticModulusOperator } from './operators/binary/ArithmeticModulusOperator';\nimport { ArithmeticMultiplicationOperator } from './operators/binary/ArithmeticMultiplicationOperator';\nimport { ArithmeticSubtractionOperator } from './operators/binary/ArithmeticSubtractionOperator';\nimport { ArrayOperator } from './operators/binary/ArrayOperator';\nimport { BinaryOperator } from './operators/binary/BinaryOperator';\nimport { BitwiseAndOperator } from './operators/binary/BitwiseAndOperator';\nimport { BitwiseLeftShiftOperator } from './operators/binary/BitwiseLeftShiftOperator';\nimport { BitwiseOrOperator } from './operators/binary/BitwiseOrOperator';\nimport { BitwiseRightShiftOperator } from './operators/binary/BitwiseRightShiftOperator';\nimport { BitwiseUnsignedRightShiftOperator } from './operators/binary/BitwiseUnsignedRightShiftOperator';\nimport { BitwiseXorOperator } from './operators/binary/BitwiseXorOperator';\nimport { LogicalAndOperator } from './operators/binary/LogicalAndOperator';\nimport { LogicalEqualOperator } from './operators/binary/LogicalEqualOperator';\nimport { LogicalGreaterThanEqualOperator } from './operators/binary/LogicalGreaterThanEqualOperator';\nimport { LogicalGreaterThanOperator } from './operators/binary/LogicalGreaterThanOperator';\nimport { LogicalLessThanEqualOperator } from './operators/binary/LogicalLessThanEqualOperator';\nimport { LogicalLessThanOperator } from './operators/binary/LogicalLessThanOperator';\nimport { LogicalNotEqualOperator } from './operators/binary/LogicalNotEqualOperator';\nimport { LogicalOrOperator } from './operators/binary/LogicalOrOperator';\nimport { ObjectOperator } from './operators/binary/ObjectOperator';\nimport { ArithmeticUnaryMinusOperator } from './operators/unary/ArithmeticUnaryMinusOperator';\nimport { ArithmeticUnaryPlusOperator } from './operators/unary/ArithmeticUnaryPlusOperator';\nimport { BitwiseComplementOperator } from './operators/unary/BitwiseComplementOperator';\nimport { LogicalNotOperator } from './operators/unary/LogicalNotOperator';\nimport { UnaryOperator } from './operators/unary/UnaryOperator';\nimport { LiteralTokenValueExtractor } from './tokenextractor/LiteralTokenValueExtractor';\nimport { TokenValueExtractor } from './tokenextractor/TokenValueExtractor';\nimport { Tuple2 } from '../../util/Tuples';\nimport { ConditionalTernaryOperator } from './operators/ternary';\nimport { TernaryOperator } from './operators/ternary/TernaryOperator';\nimport { ExpressionInternalValueExtractor } from './tokenextractor/ExpressionInternalValueExtractor';\n\nexport class ExpressionEvaluator {\n private static readonly UNARY_OPERATORS_MAP: Map<Operation, UnaryOperator> = new Map([\n [Operation.UNARY_BITWISE_COMPLEMENT, new BitwiseComplementOperator()],\n [Operation.UNARY_LOGICAL_NOT, new LogicalNotOperator()],\n [Operation.UNARY_MINUS, new ArithmeticUnaryMinusOperator()],\n [Operation.UNARY_PLUS, new ArithmeticUnaryPlusOperator()],\n ]);\n\n private static readonly TERNARY_OPERATORS_MAP: Map<Operation, TernaryOperator> = new Map([\n [Operation.CONDITIONAL_TERNARY_OPERATOR, new ConditionalTernaryOperator()],\n ]);\n\n private static readonly BINARY_OPERATORS_MAP: Map<Operation, BinaryOperator> = new Map([\n [Operation.ADDITION, new ArithmeticAdditionOperator()],\n [Operation.DIVISION, new ArithmeticDivisionOperator()],\n [Operation.INTEGER_DIVISION, new ArithmeticIntegerDivisionOperator()],\n [Operation.MOD, new ArithmeticModulusOperator()],\n [Operation.MULTIPLICATION, new ArithmeticMultiplicationOperator()],\n [Operation.SUBTRACTION, new ArithmeticSubtractionOperator()],\n\n [Operation.BITWISE_AND, new BitwiseAndOperator()],\n [Operation.BITWISE_LEFT_SHIFT, new BitwiseLeftShiftOperator()],\n [Operation.BITWISE_OR, new BitwiseOrOperator()],\n [Operation.BITWISE_RIGHT_SHIFT, new BitwiseRightShiftOperator()],\n [Operation.BITWISE_UNSIGNED_RIGHT_SHIFT, new BitwiseUnsignedRightShiftOperator()],\n [Operation.BITWISE_XOR, new BitwiseXorOperator()],\n\n [Operation.AND, new LogicalAndOperator()],\n [Operation.EQUAL, new LogicalEqualOperator()],\n [Operation.GREATER_THAN, new LogicalGreaterThanOperator()],\n [Operation.GREATER_THAN_EQUAL, new LogicalGreaterThanEqualOperator()],\n [Operation.LESS_THAN, new LogicalLessThanOperator()],\n [Operation.LESS_THAN_EQUAL, new LogicalLessThanEqualOperator()],\n [Operation.OR, new LogicalOrOperator()],\n [Operation.NOT_EQUAL, new LogicalNotEqualOperator()],\n [Operation.NULLISH_COALESCING_OPERATOR, new LogicalNullishCoalescingOperator()],\n\n [Operation.ARRAY_OPERATOR, new ArrayOperator()],\n [Operation.OBJECT_OPERATOR, new ObjectOperator()],\n ]);\n\n private static readonly UNARY_OPERATORS_MAP_KEY_SET: Set<Operation> = new Set(\n ExpressionEvaluator.UNARY_OPERATORS_MAP.keys(),\n );\n\n private expression: string;\n private exp?: Expression;\n private internalTokenValueExtractor: ExpressionInternalValueExtractor =\n new ExpressionInternalValueExtractor();\n\n public constructor(exp: Expression | string) {\n if (exp instanceof Expression) {\n this.exp = exp as Expression;\n this.expression = this.exp.getExpression();\n } else {\n this.expression = exp;\n }\n }\n\n public evaluate(valuesMap: Map<string, TokenValueExtractor>): any {\n const tuple: Tuple2<string, Expression> = this.processNestingExpression(\n this.expression,\n valuesMap,\n );\n this.expression = tuple.getT1();\n this.exp = tuple.getT2();\n valuesMap = new Map(valuesMap.entries());\n valuesMap.set(\n this.internalTokenValueExtractor.getPrefix(),\n this.internalTokenValueExtractor,\n );\n\n return this.evaluateExpression(this.exp, valuesMap);\n }\n\n private processNestingExpression(\n expression: string,\n valuesMap: Map<string, TokenValueExtractor>,\n ): Tuple2<string, Expression> {\n let start = 0;\n let i = 0;\n\n const tuples: LinkedList<Tuple2<number, number>> = new LinkedList();\n\n while (i < expression.length - 1) {\n if (expression.charAt(i) == '{' && expression.charAt(i + 1) == '{') {\n if (start == 0) tuples.push(new Tuple2(i + 2, -1));\n\n start++;\n i++;\n } else if (expression.charAt(i) == '}' && expression.charAt(i + 1) == '}') {\n start--;\n\n if (start < 0)\n throw new ExpressionEvaluationException(\n expression,\n 'Expecting {{ nesting path operator to be started before closing',\n );\n\n if (start == 0) {\n tuples.push(tuples.pop().setT2(i));\n }\n i++;\n }\n i++;\n }\n\n let newExpression = this.replaceNestingExpression(expression, valuesMap, tuples);\n\n return new Tuple2(newExpression, new Expression(newExpression));\n }\n\n private replaceNestingExpression(\n expression: string,\n valuesMap: Map<string, TokenValueExtractor>,\n tuples: LinkedList<Tuple2<number, number>>,\n ): string {\n let newExpression = expression;\n\n for (var tuple of tuples.toArray()) {\n if (tuple.getT2() == -1)\n throw new ExpressionEvaluationException(\n expression,\n 'Expecting }} nesting path operator to be closed',\n );\n\n let expStr: string = new ExpressionEvaluator(\n newExpression.substring(tuple.getT1(), tuple.getT2()),\n ).evaluate(valuesMap);\n\n newExpression =\n newExpression.substring(0, tuple.getT1() - 2) +\n expStr +\n newExpression.substring(tuple.getT2() + 2);\n }\n return newExpression;\n }\n\n public getExpression(): Expression {\n if (!this.exp) this.exp = new Expression(this.expression);\n\n return this.exp;\n }\n\n public getExpressionString(): string {\n return this.expression;\n }\n\n private evaluateExpression(exp: Expression, valuesMap: Map<string, TokenValueExtractor>): any {\n let ops: LinkedList<Operation> = exp.getOperations();\n let tokens: LinkedList<ExpressionToken> = exp.getTokens();\n\n while (!ops.isEmpty()) {\n let operator: Operation = ops.pop();\n let token: ExpressionToken = tokens.pop();\n\n if (ExpressionEvaluator.UNARY_OPERATORS_MAP_KEY_SET.has(operator)) {\n tokens.push(\n this.applyUnaryOperation(operator, this.getValueFromToken(valuesMap, token)),\n );\n } else if (\n operator == Operation.OBJECT_OPERATOR ||\n operator == Operation.ARRAY_OPERATOR\n ) {\n this.processObjectOrArrayOperator(valuesMap, ops, tokens, operator, token);\n } else if (operator == Operation.CONDITIONAL_TERNARY_OPERATOR) {\n const token2: ExpressionToken = tokens.pop();\n const token3: ExpressionToken = tokens.pop();\n var v1 = this.getValueFromToken(valuesMap, token3);\n var v2 = this.getValueFromToken(valuesMap, token2);\n var v3 = this.getValueFromToken(valuesMap, token);\n tokens.push(this.applyTernaryOperation(operator, v1, v2, v3));\n } else {\n const token2: ExpressionToken = tokens.pop();\n var v1 = this.getValueFromToken(valuesMap, token2);\n var v2 = this.getValueFromToken(valuesMap, token);\n tokens.push(this.applyBinaryOperation(operator, v1, v2));\n }\n }\n\n if (tokens.isEmpty())\n throw new ExecutionException(\n StringFormatter.format('Expression : $ evaluated to null', exp),\n );\n\n if (tokens.size() != 1)\n throw new ExecutionException(\n StringFormatter.format('Expression : $ evaluated multiple values $', exp, tokens),\n );\n\n const token: ExpressionToken = tokens.get(0);\n if (token instanceof ExpressionTokenValue)\n return (token as ExpressionTokenValue).getElement();\n else if (!(token instanceof Expression)) return this.getValueFromToken(valuesMap, token);\n\n throw new ExecutionException(\n StringFormatter.format('Expression : $ evaluated to $', exp, tokens.get(0)),\n );\n }\n\n private processObjectOrArrayOperator(\n valuesMap: Map<string, TokenValueExtractor>,\n ops: LinkedList<Operation>,\n tokens: LinkedList<ExpressionToken>,\n operator?: Operation,\n token?: ExpressionToken,\n ): void {\n const objTokens: LinkedList<ExpressionToken> = new LinkedList();\n const objOperations: LinkedList<Operation> = new LinkedList();\n\n if (!operator || !token) return;\n\n do {\n objOperations.push(operator);\n if (token instanceof Expression)\n objTokens.push(\n new ExpressionTokenValue(\n token.toString(),\n this.evaluateExpression(token as Expression, valuesMap),\n ),\n );\n else if (token) objTokens.push(token);\n token = tokens.isEmpty() ? undefined : tokens.pop();\n operator = ops.isEmpty() ? undefined : ops.pop();\n } while (operator == Operation.OBJECT_OPERATOR || operator == Operation.ARRAY_OPERATOR);\n\n if (token) {\n if (token instanceof Expression)\n objTokens.push(\n new ExpressionTokenValue(\n token.toString(),\n this.evaluateExpression(token as Expression, valuesMap),\n ),\n );\n else objTokens.push(token);\n }\n\n if (operator) ops.push(operator);\n\n let objToken: ExpressionToken = objTokens.pop();\n\n if (\n objToken instanceof ExpressionTokenValue &&\n typeof objToken.getTokenValue() === 'object'\n ) {\n const key = new Date().getTime() + '' + Math.round(Math.random() * 1000);\n this.internalTokenValueExtractor.addValue(key, objToken.getTokenValue());\n objToken = new ExpressionToken(ExpressionInternalValueExtractor.PREFIX + key);\n }\n\n let sb: StringBuilder = new StringBuilder(\n objToken instanceof ExpressionTokenValue\n ? (objToken as ExpressionTokenValue).getTokenValue()\n : objToken.toString(),\n );\n\n while (!objTokens.isEmpty()) {\n objToken = objTokens.pop();\n operator = objOperations.pop();\n sb.append(operator.getOperator()).append(\n objToken instanceof ExpressionTokenValue\n ? (objToken as ExpressionTokenValue).getTokenValue()\n : objToken.toString(),\n );\n if (operator == Operation.ARRAY_OPERATOR) sb.append(']');\n }\n\n let str: string = sb.toString();\n let key: string = str.substring(0, str.indexOf('.') + 1);\n if (key.length > 2 && valuesMap.has(key))\n tokens.push(new ExpressionTokenValue(str, this.getValue(str, valuesMap)));\n else {\n let v: any = undefined;\n try {\n v = LiteralTokenValueExtractor.INSTANCE.getValue(str);\n } catch (err) {\n v = str;\n }\n tokens.push(new ExpressionTokenValue(str, v));\n }\n }\n\n private applyTernaryOperation(operator: Operation, v1: any, v2: any, v3: any): ExpressionToken {\n let op: TernaryOperator | undefined =\n ExpressionEvaluator.TERNARY_OPERATORS_MAP.get(operator);\n\n if (!op)\n throw new ExpressionEvaluationException(\n this.expression,\n StringFormatter.format('No operator found to evaluate $', this.getExpression()),\n );\n\n return new ExpressionTokenValue(operator.toString(), op.apply(v1, v2, v3));\n }\n\n private applyBinaryOperation(operator: Operation, v1: any, v2: any): ExpressionToken {\n let typv1: string = typeof v1;\n let typv2: string = typeof v2;\n\n let op: BinaryOperator | undefined = ExpressionEvaluator.BINARY_OPERATORS_MAP.get(operator);\n\n if (\n (typv1 === 'object' || typv2 === 'object') &&\n operator !== Operation.EQUAL &&\n operator !== Operation.NOT_EQUAL &&\n operator !== Operation.NULLISH_COALESCING_OPERATOR\n )\n throw new ExpressionEvaluationException(\n this.expression,\n StringFormatter.format(\n 'Cannot evaluate expression $ $ $',\n v1,\n operator.getOperator(),\n v2,\n ),\n );\n\n if (!op)\n throw new ExpressionEvaluationException(\n this.expression,\n StringFormatter.format(\n 'No operator found to evaluate $ $ $',\n v1,\n operator.getOperator(),\n v2,\n ),\n );\n\n return new ExpressionTokenValue(operator.toString(), op.apply(v1, v2));\n }\n\n private applyUnaryOperation(operator: Operation, value: any): ExpressionToken {\n let typv: string = typeof value;\n\n if (typv === 'object' || Array.isArray(value))\n throw new ExpressionEvaluationException(\n this.expression,\n StringFormatter.format(\n 'The operator $ cannot be applied to $',\n operator.getOperator(),\n value,\n ),\n );\n\n let op: UnaryOperator | undefined = ExpressionEvaluator.UNARY_OPERATORS_MAP.get(operator);\n\n if (!op)\n throw new ExpressionEvaluationException(\n this.expression,\n StringFormatter.format(\n 'No Unary operator $ is found to apply on $',\n operator.getOperator(),\n value,\n ),\n );\n\n return new ExpressionTokenValue(operator.toString(), op.apply(value));\n }\n\n private getValueFromToken(\n valuesMap: Map<string, TokenValueExtractor>,\n token: ExpressionToken,\n ): any {\n if (token instanceof Expression) {\n return this.evaluateExpression(token as Expression, valuesMap);\n } else if (token instanceof ExpressionTokenValue) {\n return (token as ExpressionTokenValue).getElement();\n }\n return this.getValue(token.getExpression(), valuesMap);\n }\n\n private getValue(path: string, valuesMap: Map<string, TokenValueExtractor>): any {\n if (path.length <= 5) return LiteralTokenValueExtractor.INSTANCE.getValue(path);\n\n const pathPrefix: string = path.substring(0, path.indexOf('.') + 1);\n return (valuesMap.get(pathPrefix) ?? LiteralTokenValueExtractor.INSTANCE).getValue(path);\n }\n}\n","import { ExecutionException } from '../../../exception/ExecutionException';\nimport { KIRuntimeException } from '../../../exception/KIRuntimeException';\nimport { Schema } from '../../../json/schema/Schema';\nimport { SchemaType } from '../../../json/schema/type/SchemaType';\nimport { TypeUtil } from '../../../json/schema/type/TypeUtil';\nimport { Event } from '../../../model/Event';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionSignature } from '../../../model/FunctionSignature';\nimport { Parameter } from '../../../model/Parameter';\nimport { ParameterType } from '../../../model/ParameterType';\nimport { Namespaces } from '../../../namespaces/Namespaces';\nimport { ContextElement } from '../../../runtime/ContextElement';\nimport { Expression } from '../../../runtime/expression/Expression';\nimport { ExpressionEvaluator } from '../../../runtime/expression/ExpressionEvaluator';\nimport { ExpressionToken } from '../../../runtime/expression/ExpressionToken';\nimport { ExpressionTokenValue } from '../../../runtime/expression/ExpressionTokenValue';\nimport { Operation } from '../../../runtime/expression/Operation';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { LinkedList } from '../../../util/LinkedList';\nimport { isNullValue } from '../../../util/NullCheck';\nimport { PrimitiveUtil } from '../../../util/primitive/PrimitiveUtil';\nimport { StringFormatter } from '../../../util/string/StringFormatter';\nimport { StringUtil } from '../../../util/string/StringUtil';\nimport { Tuple2 } from '../../../util/Tuples';\nimport { AbstractFunction } from '../../AbstractFunction';\n\nconst NAME = 'name';\nconst VALUE = 'value';\nconst SIGNATURE = new FunctionSignature('Set')\n .setNamespace(Namespaces.SYSTEM_CTX)\n .setParameters(\n new Map([\n Parameter.ofEntry(\n NAME,\n new Schema().setName(NAME).setType(TypeUtil.of(SchemaType.STRING)).setMinLength(1),\n false,\n ParameterType.CONSTANT,\n ),\n Parameter.ofEntry(VALUE, Schema.ofAny(VALUE)),\n ]),\n )\n .setEvents(new Map([Event.outputEventMapEntry(new Map())]));\n\nexport class SetFunction extends AbstractFunction {\n public getSignature(): FunctionSignature {\n return SIGNATURE;\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let key: string = context?.getArguments()?.get(NAME);\n\n if (StringUtil.isNullOrBlank(key)) {\n throw new KIRuntimeException(\n 'Empty string is not a valid name for the context element',\n );\n }\n\n let value: any = context?.getArguments()?.get(VALUE);\n\n const exp: Expression = new Expression(key);\n\n const contextToken: ExpressionToken = exp.getTokens().peekLast();\n\n if (\n !contextToken.getExpression().startsWith('Context') ||\n contextToken instanceof Expression ||\n (contextToken instanceof ExpressionTokenValue &&\n !(contextToken as ExpressionTokenValue)\n .getElement()\n .toString()\n .startsWith('Context'))\n ) {\n throw new ExecutionException(\n StringFormatter.format('The context path $ is not a valid path in context', key),\n );\n }\n\n for (const op of exp.getOperations().toArray()) {\n if (op == Operation.ARRAY_OPERATOR || op == Operation.OBJECT_OPERATOR) continue;\n\n throw new ExecutionException(\n StringFormatter.format(\n 'Expected a reference to the context location, but found an expression $',\n key,\n ),\n );\n }\n\n for (let i = 0; i < exp.getTokens().size(); i++) {\n let ex = exp.getTokens().get(i);\n if (ex instanceof Expression)\n exp.getTokens().set(\n i,\n new ExpressionTokenValue(\n key,\n new ExpressionEvaluator(ex as Expression).evaluate(context.getValuesMap()),\n ),\n );\n }\n return this.modifyContext(context, key, value, exp);\n }\n\n private modifyContext(\n context: FunctionExecutionParameters,\n key: string,\n value: any,\n exp: Expression,\n ): FunctionOutput {\n const tokens = exp.getTokens();\n tokens.removeLast();\n const ops = exp.getOperations();\n ops.removeLast();\n let ce: ContextElement | undefined = context\n .getContext()\n ?.get(tokens.removeLast().getExpression());\n\n if (isNullValue(ce)) {\n throw new KIRuntimeException(\n StringFormatter.format(\"Context doesn't have any element with name '$' \", key),\n );\n }\n\n if (ops.isEmpty()) {\n ce!.setElement(value);\n return new FunctionOutput([EventResult.outputOf(new Map())]);\n }\n\n let el: any = ce!.getElement();\n\n let op = ops.removeLast();\n let token = tokens.removeLast();\n let mem =\n token instanceof ExpressionTokenValue\n ? (token as ExpressionTokenValue).getElement()\n : token.getExpression();\n\n if (isNullValue(el)) {\n el = op == Operation.OBJECT_OPERATOR ? {} : [];\n ce!.setElement(el);\n }\n\n while (!ops.isEmpty()) {\n if (op == Operation.OBJECT_OPERATOR) {\n el = this.getDataFromObject(el, mem, ops.peekLast());\n } else {\n el = this.getDataFromArray(el, mem, ops.peekLast());\n }\n\n op = ops.removeLast();\n token = tokens.removeLast();\n mem =\n token instanceof ExpressionTokenValue\n ? (token as ExpressionTokenValue).getElement()\n : token.getExpression();\n }\n\n if (op == Operation.OBJECT_OPERATOR) this.putDataInObject(el, mem, value);\n else this.putDataInArray(el, mem, value);\n\n return new FunctionOutput([EventResult.outputOf(new Map())]);\n }\n\n private getDataFromArray(el: any, mem: string, nextOp: Operation): any {\n if (!Array.isArray(el))\n throw new KIRuntimeException(\n StringFormatter.format('Expected an array but found $', el),\n );\n\n const index = parseInt(mem);\n if (isNaN(index))\n throw new KIRuntimeException(\n StringFormatter.format('Expected an array index but found $', mem),\n );\n if (index < 0)\n throw new KIRuntimeException(\n StringFormatter.format('Array index is out of bound - $', mem),\n );\n\n let je = el[index];\n\n if (isNullValue(je)) {\n je = nextOp == Operation.OBJECT_OPERATOR ? {} : [];\n el[index] = je;\n }\n return je;\n }\n\n private getDataFromObject(el: any, mem: string, nextOp: Operation): any {\n if (Array.isArray(el) || typeof el !== 'object')\n throw new KIRuntimeException(\n StringFormatter.format('Expected an object but found $', el),\n );\n\n let je = el[mem];\n\n if (isNullValue(je)) {\n je = nextOp == Operation.OBJECT_OPERATOR ? {} : [];\n el[mem] = je;\n }\n return je;\n }\n\n private putDataInArray(el: any, mem: string, value: any): void {\n if (!Array.isArray(el))\n throw new KIRuntimeException(\n StringFormatter.format('Expected an array but found $', el),\n );\n\n const index = parseInt(mem);\n if (isNaN(index))\n throw new KIRuntimeException(\n StringFormatter.format('Expected an array index but found $', mem),\n );\n if (index < 0)\n throw new KIRuntimeException(\n StringFormatter.format('Array index is out of bound - $', mem),\n );\n\n el[index] = value;\n }\n\n private putDataInObject(el: any, mem: string, value: any): void {\n if (Array.isArray(el) || typeof el !== 'object')\n throw new KIRuntimeException(\n StringFormatter.format('Expected an object but found $', el),\n );\n\n el[mem] = value;\n }\n}\n","import { KIRuntimeException } from '../../exception/KIRuntimeException';\nimport { Schema } from '../../json/schema/Schema';\nimport { Event } from '../../model/Event';\nimport { EventResult } from '../../model/EventResult';\nimport { FunctionOutput } from '../../model/FunctionOutput';\nimport { FunctionSignature } from '../../model/FunctionSignature';\nimport { Parameter } from '../../model/Parameter';\nimport { Namespaces } from '../../namespaces/Namespaces';\nimport { ExpressionEvaluator } from '../../runtime/expression/ExpressionEvaluator';\nimport { FunctionExecutionParameters } from '../../runtime/FunctionExecutionParameters';\nimport { KIRuntime } from '../../runtime/KIRuntime';\nimport { isNullValue } from '../../util/NullCheck';\nimport { AbstractFunction } from '../AbstractFunction';\n\nconst VALUE = 'value';\nconst EVENT_NAME = 'eventName';\nconst RESULTS = 'results';\n\nconst SIGNATURE: FunctionSignature = new FunctionSignature('GenerateEvent')\n .setNamespace(Namespaces.SYSTEM)\n .setParameters(\n new Map([\n Parameter.ofEntry(EVENT_NAME, Schema.ofString(EVENT_NAME).setDefaultValue('output')),\n Parameter.ofEntry(\n RESULTS,\n Schema.ofObject(RESULTS).setProperties(\n new Map([\n ['name', Schema.ofString('name')],\n [VALUE, Parameter.EXPRESSION],\n ]),\n ),\n true,\n ),\n ]),\n )\n .setEvents(new Map([Event.outputEventMapEntry(new Map())]));\n\ninterface ResultType {\n name: string;\n value: any;\n}\n\nexport class GenerateEvent extends AbstractFunction {\n public getSignature(): FunctionSignature {\n return SIGNATURE;\n }\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n const events: Map<string, Map<string, any>[]> | undefined = context.getEvents();\n const args: Map<string, any> | undefined = context.getArguments();\n\n const eventName: string = args?.get(EVENT_NAME);\n const map: Map<string, any> = context\n ?.getArguments()\n ?.get(RESULTS)\n .map((e: ResultType) => {\n let je: any = e[VALUE];\n\n if (isNullValue(je)) throw new KIRuntimeException('Expect a value object');\n\n let v: any = je.value;\n if (je.isExpression)\n v = new ExpressionEvaluator(v).evaluate(context.getValuesMap());\n return [e.name, v];\n })\n .reduce((a: Map<string, any>, c: [string, any]) => {\n a.set(c[0], c[1]);\n return a;\n }, new Map());\n\n if (!events?.has(eventName)) events?.set(eventName, []);\n events?.get(eventName)?.push(map);\n\n return new FunctionOutput([EventResult.outputOf(new Map())]);\n }\n}\n","import { Schema } from '../../json/schema/Schema';\nimport { SchemaType } from '../../json/schema/type/SchemaType';\nimport { Event } from '../../model/Event';\nimport { EventResult } from '../../model/EventResult';\nimport { FunctionOutput } from '../../model/FunctionOutput';\nimport { FunctionSignature } from '../../model/FunctionSignature';\nimport { Parameter } from '../../model/Parameter';\nimport { Namespaces } from '../../namespaces/Namespaces';\nimport { FunctionExecutionParameters } from '../../runtime/FunctionExecutionParameters';\nimport { AbstractFunction } from '../AbstractFunction';\n\nexport class If extends AbstractFunction {\n private static readonly CONDITION: string = 'condition';\n\n private static readonly SIGNATURE: FunctionSignature = new FunctionSignature('If')\n .setNamespace(Namespaces.SYSTEM)\n .setParameters(\n new Map([Parameter.ofEntry(If.CONDITION, Schema.of(If.CONDITION, SchemaType.BOOLEAN))]),\n )\n .setEvents(\n new Map([\n Event.eventMapEntry(Event.TRUE, new Map()),\n Event.eventMapEntry(Event.FALSE, new Map()),\n Event.outputEventMapEntry(new Map()),\n ]),\n );\n\n public getSignature(): FunctionSignature {\n return If.SIGNATURE;\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n var condition = context.getArguments()?.get(If.CONDITION);\n\n return new FunctionOutput([\n EventResult.of(condition ? Event.TRUE : Event.FALSE, new Map()),\n EventResult.outputOf(new Map()),\n ]);\n }\n}\n","import { Schema } from '../../../json/schema/Schema';\nimport { SchemaType } from '../../../json/schema/type/SchemaType';\nimport { Event } from '../../../model/Event';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionSignature } from '../../../model/FunctionSignature';\nimport { Parameter } from '../../../model/Parameter';\nimport { Namespaces } from '../../../namespaces/Namespaces';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { AbstractFunction } from '../../AbstractFunction';\n\nconst STEP_NAME = 'stepName';\n\nconst SIGNATURE = new FunctionSignature('Break')\n .setNamespace(Namespaces.SYSTEM_LOOP)\n .setParameters(new Map([Parameter.ofEntry(STEP_NAME, Schema.of(STEP_NAME, SchemaType.STRING))]))\n .setEvents(new Map([Event.outputEventMapEntry(new Map([]))]));\n\nexport class Break extends AbstractFunction {\n public getSignature(): FunctionSignature {\n return SIGNATURE;\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let stepName: string = context.getArguments()?.get(STEP_NAME);\n\n context.getExecutionContext().set(stepName, true);\n\n return new FunctionOutput([EventResult.outputOf(new Map())]);\n }\n}\n","import { Schema } from '../../../json/schema/Schema';\nimport { SchemaType } from '../../../json/schema/type/SchemaType';\nimport { Event } from '../../../model/Event';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionSignature } from '../../../model/FunctionSignature';\nimport { Parameter } from '../../../model/Parameter';\nimport { Namespaces } from '../../../namespaces/Namespaces';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { AbstractFunction } from '../../AbstractFunction';\n\nconst COUNT = 'count';\nconst VALUE = 'value';\nconst INDEX = 'index';\n\nconst SIGNATURE = new FunctionSignature('CountLoop')\n .setNamespace(Namespaces.SYSTEM_LOOP)\n .setParameters(new Map([Parameter.ofEntry(COUNT, Schema.of(COUNT, SchemaType.INTEGER))]))\n .setEvents(\n new Map([\n Event.eventMapEntry(\n Event.ITERATION,\n new Map([[INDEX, Schema.of(INDEX, SchemaType.INTEGER)]]),\n ),\n Event.outputEventMapEntry(new Map([[VALUE, Schema.of(VALUE, SchemaType.INTEGER)]])),\n ]),\n );\n\nexport class CountLoop extends AbstractFunction {\n public getSignature(): FunctionSignature {\n return SIGNATURE;\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let count: number = context.getArguments()?.get(COUNT);\n let current = 0;\n let statementName = context.getStatementExecution()?.getStatement()?.getStatementName();\n\n return new FunctionOutput({\n next(): EventResult {\n if (\n current >= count ||\n (statementName && context.getExecutionContext()?.get(statementName))\n ) {\n // check for break;\n if (statementName) context.getExecutionContext()?.delete(statementName);\n return EventResult.outputOf(new Map([[VALUE, current]]));\n }\n\n const eve = EventResult.of(Event.ITERATION, new Map([[INDEX, current]]));\n ++current;\n\n return eve;\n },\n });\n }\n}\n","import { Schema } from '../../../json/schema/Schema';\nimport { SchemaType } from '../../../json/schema/type/SchemaType';\nimport { Event } from '../../../model/Event';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionSignature } from '../../../model/FunctionSignature';\nimport { Parameter } from '../../../model/Parameter';\nimport { Namespaces } from '../../../namespaces/Namespaces';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { AbstractFunction } from '../../AbstractFunction';\n\nconst SOURCE = 'source';\nconst EACH = 'each';\nconst INDEX = 'index';\nconst VALUE = 'value';\n\nconst SIGNATURE = new FunctionSignature('ForEachLoop')\n .setNamespace(Namespaces.SYSTEM_LOOP)\n .setParameters(\n new Map([Parameter.ofEntry(SOURCE, Schema.ofArray(SOURCE, Schema.ofAny(SOURCE)))]),\n )\n .setEvents(\n new Map([\n Event.eventMapEntry(\n Event.ITERATION,\n new Map([\n [INDEX, Schema.of(INDEX, SchemaType.INTEGER)],\n [EACH, Schema.ofAny(EACH)],\n ]),\n ),\n Event.outputEventMapEntry(new Map([[VALUE, Schema.of(VALUE, SchemaType.INTEGER)]])),\n ]),\n );\n\nexport class ForEachLoop extends AbstractFunction {\n public getSignature(): FunctionSignature {\n return SIGNATURE;\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let source: any[] = context.getArguments()?.get(SOURCE);\n\n let current = 0;\n\n let statementName = context.getStatementExecution()?.getStatement()?.getStatementName();\n\n return new FunctionOutput({\n next(): EventResult {\n if (\n current >= source.length ||\n (statementName && context.getExecutionContext()?.get(statementName)) //check for breaks;\n ) {\n if (statementName) context.getExecutionContext()?.delete(statementName);\n return EventResult.outputOf(new Map([[VALUE, current]]));\n }\n\n const eve = EventResult.of(\n Event.ITERATION,\n new Map([\n [INDEX, current],\n [EACH, source[current]],\n ]),\n );\n ++current;\n\n return eve;\n },\n });\n }\n}\n","import { Schema } from '../../../json/schema/Schema';\nimport { SchemaType } from '../../../json/schema/type/SchemaType';\nimport { Event } from '../../../model/Event';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionSignature } from '../../../model/FunctionSignature';\nimport { Parameter } from '../../../model/Parameter';\nimport { Namespaces } from '../../../namespaces/Namespaces';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { AbstractFunction } from '../../AbstractFunction';\n\nconst FROM = 'from';\nconst TO = 'to';\nconst STEP = 'step';\nconst VALUE = 'value';\nconst INDEX = 'index';\n\nconst SIGNATURE = new FunctionSignature('RangeLoop')\n .setNamespace(Namespaces.SYSTEM_LOOP)\n .setParameters(\n new Map([\n Parameter.ofEntry(\n FROM,\n Schema.of(\n FROM,\n SchemaType.INTEGER,\n SchemaType.LONG,\n SchemaType.FLOAT,\n SchemaType.DOUBLE,\n ).setDefaultValue(0),\n ),\n Parameter.ofEntry(\n TO,\n Schema.of(\n TO,\n SchemaType.INTEGER,\n SchemaType.LONG,\n SchemaType.FLOAT,\n SchemaType.DOUBLE,\n ).setDefaultValue(1),\n ),\n Parameter.ofEntry(\n STEP,\n Schema.of(\n STEP,\n SchemaType.INTEGER,\n SchemaType.LONG,\n SchemaType.FLOAT,\n SchemaType.DOUBLE,\n )\n .setDefaultValue(1)\n .setNot(new Schema().setConstant(0)),\n ),\n ]),\n )\n .setEvents(\n new Map([\n Event.eventMapEntry(\n Event.ITERATION,\n new Map([\n [\n INDEX,\n Schema.of(\n INDEX,\n SchemaType.INTEGER,\n SchemaType.LONG,\n SchemaType.FLOAT,\n SchemaType.DOUBLE,\n ),\n ],\n ]),\n ),\n Event.outputEventMapEntry(\n new Map([\n [\n VALUE,\n Schema.of(\n VALUE,\n SchemaType.INTEGER,\n SchemaType.LONG,\n SchemaType.FLOAT,\n SchemaType.DOUBLE,\n ),\n ],\n ]),\n ),\n ]),\n );\n\nexport class RangeLoop extends AbstractFunction {\n public getSignature(): FunctionSignature {\n return SIGNATURE;\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let from: number = context.getArguments()?.get(FROM);\n let to: number = context.getArguments()?.get(TO);\n let step: number = context.getArguments()?.get(STEP);\n\n const forward = step > 0;\n let current: number = from;\n let done: boolean = false;\n let statementName = context.getStatementExecution()?.getStatement()?.getStatementName();\n\n return new FunctionOutput({\n next(): EventResult | undefined {\n if (done) return undefined;\n\n if (\n (forward && current >= to) ||\n (!forward && current <= to) ||\n (statementName && context.getExecutionContext()?.get(statementName)) //Check for break;\n ) {\n done = true;\n if (statementName) context.getExecutionContext()?.delete(statementName);\n return EventResult.outputOf(new Map([[VALUE, current]]));\n }\n\n const eve = EventResult.of(Event.ITERATION, new Map([[INDEX, current]]));\n current += step;\n\n return eve;\n },\n });\n }\n}\n","import { Schema } from '../../../json/schema/Schema';\nimport { Event } from '../../../model/Event';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionSignature } from '../../../model/FunctionSignature';\nimport { Parameter } from '../../../model/Parameter';\nimport { Namespaces } from '../../../namespaces/Namespaces';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { AbstractFunction } from '../../AbstractFunction';\n\nconst VALUE = 'value';\n\nconst SIGNATURE = new FunctionSignature('Add')\n .setNamespace(Namespaces.MATH)\n .setParameters(\n new Map([[VALUE, new Parameter(VALUE, Schema.ofNumber(VALUE)).setVariableArgument(true)]]),\n )\n .setEvents(new Map([Event.outputEventMapEntry(new Map([[VALUE, Schema.ofNumber(VALUE)]]))]));\n\nexport class Add extends AbstractFunction {\n public getSignature(): FunctionSignature {\n return SIGNATURE;\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let nums: number[] = context.getArguments()?.get(VALUE);\n\n return new FunctionOutput([\n EventResult.outputOf(new Map([[VALUE, nums.reduce((a, c) => (a += c), 0)]])),\n ]);\n }\n}\n","import { Schema } from '../../../json/schema/Schema';\nimport { SchemaType } from '../../../json/schema/type/SchemaType';\nimport { TypeUtil } from '../../../json/schema/type/TypeUtil';\nimport { Event } from '../../../model/Event';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionSignature } from '../../../model/FunctionSignature';\nimport { Parameter } from '../../../model/Parameter';\nimport { Namespaces } from '../../../namespaces/Namespaces';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { PrimitiveUtil } from '../../../util/primitive/PrimitiveUtil';\nimport { AbstractFunction } from '../../AbstractFunction';\n\nconst VALUE = 'value';\nconst VALUE1 = 'value1';\nconst VALUE2 = 'value2';\n\nconst paramFunctions = [\n () => {\n return new Map([[VALUE, new Parameter(VALUE, Schema.ofNumber(VALUE))]]);\n },\n () => {\n return new Map([\n [VALUE1, new Parameter(VALUE1, Schema.ofNumber(VALUE1))],\n [VALUE2, new Parameter(VALUE2, Schema.ofNumber(VALUE2))],\n ]);\n },\n];\n\nexport class GenericMathFunction extends AbstractFunction {\n private signature: FunctionSignature;\n private parametersNumber: number;\n private mathFunction: (v1: number, v2?: number) => number;\n\n public constructor(\n functionName: string,\n mathFunction: (v1: number, v2?: number) => number,\n parametersNumber: number = 1,\n ...returnType: SchemaType[]\n ) {\n super();\n if (!returnType || !returnType.length) returnType = [SchemaType.DOUBLE];\n this.parametersNumber = parametersNumber;\n this.mathFunction = mathFunction;\n this.signature = new FunctionSignature(functionName)\n .setNamespace(Namespaces.MATH)\n .setParameters(paramFunctions[parametersNumber - 1]())\n .setEvents(\n new Map([\n Event.outputEventMapEntry(\n new Map([\n [\n VALUE,\n new Schema().setType(TypeUtil.of(...returnType)).setName(VALUE),\n ],\n ]),\n ) as [string, Event],\n ]),\n );\n }\n\n public getSignature(): FunctionSignature {\n return this.signature;\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let v1 = PrimitiveUtil.findPrimitiveNumberType(\n context.getArguments()?.get(this.parametersNumber == 1 ? VALUE : VALUE1),\n ).getT2();\n let v2;\n if (this.parametersNumber == 2)\n v2 = PrimitiveUtil.findPrimitiveNumberType(context.getArguments()?.get(VALUE2)).getT2();\n\n return new FunctionOutput([\n EventResult.outputOf(new Map([[VALUE, this.mathFunction.call(this, v1, v2)]])),\n ]);\n }\n}\n","import { Schema } from '../../../json/schema/Schema';\nimport { SchemaType } from '../../../json/schema/type/SchemaType';\nimport { TypeUtil } from '../../../json/schema/type/TypeUtil';\nimport { Event } from '../../../model/Event';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionSignature } from '../../../model/FunctionSignature';\nimport { Parameter } from '../../../model/Parameter';\nimport { Namespaces } from '../../../namespaces/Namespaces';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { AbstractFunction } from '../../AbstractFunction';\n\nconst VALUE = 'value';\n\nexport class Hypotenuse extends AbstractFunction {\n private static readonly SIGNATURE: FunctionSignature = new FunctionSignature('Hypotenuse')\n .setNamespace(Namespaces.MATH)\n .setParameters(\n new Map([\n [VALUE, new Parameter(VALUE, Schema.ofNumber(VALUE)).setVariableArgument(true)],\n ]),\n )\n .setEvents(\n new Map([\n Event.outputEventMapEntry(\n new Map([\n [\n VALUE,\n new Schema().setType(TypeUtil.of(SchemaType.DOUBLE)).setName(VALUE),\n ],\n ]),\n ) as [string, Event],\n ]),\n );\n\n public constructor() {\n super();\n }\n\n public getSignature(): FunctionSignature {\n return Hypotenuse.SIGNATURE;\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let nums: number[] = context.getArguments()?.get(VALUE);\n\n return new FunctionOutput([\n EventResult.outputOf(\n new Map([[VALUE, Math.sqrt(nums.reduce((a, c) => (a += c * c), 0))]]),\n ),\n ]);\n }\n}\n","import { Schema } from '../../../json/schema/Schema';\nimport { Event } from '../../../model/Event';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionSignature } from '../../../model/FunctionSignature';\nimport { Parameter } from '../../../model/Parameter';\nimport { Namespaces } from '../../../namespaces/Namespaces';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { AbstractFunction } from '../../AbstractFunction';\n\nconst VALUE = 'value';\n\nconst SIGNATURE = new FunctionSignature('Maximum')\n .setNamespace(Namespaces.MATH)\n .setParameters(\n new Map([[VALUE, new Parameter(VALUE, Schema.ofNumber(VALUE)).setVariableArgument(true)]]),\n )\n .setEvents(new Map([Event.outputEventMapEntry(new Map([[VALUE, Schema.ofNumber(VALUE)]]))]));\n\nexport class Maximum extends AbstractFunction {\n public getSignature(): FunctionSignature {\n return SIGNATURE;\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let nums: number[] = context.getArguments()?.get(VALUE);\n\n return new FunctionOutput([\n EventResult.outputOf(\n new Map([\n [VALUE, nums.reduce((a, c) => ((!a && a !== 0) || c > a ? c : a))],\n ]),\n ),\n ]);\n }\n}\n","import { Schema } from '../../../json/schema/Schema';\nimport { Event } from '../../../model/Event';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionSignature } from '../../../model/FunctionSignature';\nimport { Parameter } from '../../../model/Parameter';\nimport { Namespaces } from '../../../namespaces/Namespaces';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { AbstractFunction } from '../../AbstractFunction';\n\nconst VALUE = 'value';\n\nconst SIGNATURE = new FunctionSignature('Minimum')\n .setNamespace(Namespaces.MATH)\n .setParameters(\n new Map([[VALUE, new Parameter(VALUE, Schema.ofNumber(VALUE)).setVariableArgument(true)]]),\n )\n .setEvents(new Map([Event.outputEventMapEntry(new Map([[VALUE, Schema.ofNumber(VALUE)]]))]));\n\nexport class Minimum extends AbstractFunction {\n public getSignature(): FunctionSignature {\n return SIGNATURE;\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let nums: number[] = context.getArguments()?.get(VALUE);\n\n return new FunctionOutput([\n EventResult.outputOf(\n new Map([\n [VALUE, nums.reduce((a, c) => ((!a && a !== 0) || c < a ? c : a))],\n ]),\n ),\n ]);\n }\n}\n","import { Schema } from '../../../json/schema/Schema';\nimport { Event } from '../../../model/Event';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionSignature } from '../../../model/FunctionSignature';\nimport { Namespaces } from '../../../namespaces/Namespaces';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { MapUtil } from '../../../util/MapUtil';\nimport { AbstractFunction } from '../../AbstractFunction';\n\nconst VALUE = 'value';\nexport class Random extends AbstractFunction {\n private static readonly SIGNATURE: FunctionSignature = new FunctionSignature('Random')\n .setNamespace(Namespaces.MATH)\n .setEvents(\n new Map<string, Event>([\n Event.outputEventMapEntry(MapUtil.of(VALUE, Schema.ofDouble(VALUE))),\n ]),\n );\n\n public getSignature(): FunctionSignature {\n return Random.SIGNATURE;\n }\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n return new FunctionOutput([EventResult.outputOf(new Map([[VALUE, Math.random()]]))]);\n }\n}\n","import { Schema } from '../../../json/schema/Schema';\nimport { Event } from '../../../model/Event';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionSignature } from '../../../model/FunctionSignature';\nimport { Parameter } from '../../../model/Parameter';\nimport { Namespaces } from '../../../namespaces/Namespaces';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { MapUtil } from '../../../util/MapUtil';\nimport { AbstractFunction } from '../../AbstractFunction';\n\nexport class RandomFloat extends AbstractFunction {\n public static readonly MIN_VALUE = 'minValue';\n\n public static readonly MAX_VALUE = 'maxValue';\n\n public static readonly VALUE = 'value';\n\n private static readonly SIGNATURE: FunctionSignature = new FunctionSignature('RandomFloat')\n .setParameters(\n MapUtil.of(\n RandomFloat.MIN_VALUE,\n Parameter.of(\n RandomFloat.MIN_VALUE,\n Schema.ofFloat(RandomFloat.MIN_VALUE).setDefaultValue(0),\n ),\n RandomFloat.MAX_VALUE,\n Parameter.of(\n RandomFloat.MAX_VALUE,\n Schema.ofFloat(RandomFloat.MAX_VALUE).setDefaultValue(2147483647),\n ),\n ),\n )\n .setNamespace(Namespaces.MATH)\n .setEvents(\n new Map<string, Event>([\n Event.outputEventMapEntry(\n MapUtil.of(RandomFloat.VALUE, Schema.ofFloat(RandomFloat.VALUE)),\n ),\n ]),\n );\n\n public getSignature(): FunctionSignature {\n return RandomFloat.SIGNATURE;\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let min: number = context.getArguments()?.get(RandomFloat.MIN_VALUE);\n\n let max: number = context.getArguments()?.get(RandomFloat.MAX_VALUE);\n\n let num: number = Math.random() * (max - min) + min;\n\n return new FunctionOutput([EventResult.outputOf(new Map([[RandomFloat.VALUE, num]]))]);\n }\n}\n","import { Schema } from '../../../json/schema/Schema';\nimport { Event } from '../../../model/Event';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionSignature } from '../../../model/FunctionSignature';\nimport { Parameter } from '../../../model/Parameter';\nimport { Namespaces } from '../../../namespaces/Namespaces';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { MapUtil } from '../../../util/MapUtil';\nimport { AbstractFunction } from '../../AbstractFunction';\n\nexport class RandomInt extends AbstractFunction {\n public static readonly MIN_VALUE = 'minValue';\n\n public static readonly MAX_VALUE = 'maxValue';\n\n public static readonly VALUE = 'value';\n\n private static readonly SIGNATURE: FunctionSignature = new FunctionSignature('RandomInt')\n .setParameters(\n MapUtil.of(\n RandomInt.MIN_VALUE,\n Parameter.of(\n RandomInt.MIN_VALUE,\n Schema.ofInteger(RandomInt.MIN_VALUE).setDefaultValue(0),\n ),\n RandomInt.MAX_VALUE,\n Parameter.of(\n RandomInt.MAX_VALUE,\n Schema.ofInteger(RandomInt.MAX_VALUE).setDefaultValue(2147483647),\n ),\n ),\n )\n .setNamespace(Namespaces.MATH)\n .setEvents(\n new Map<string, Event>([\n Event.outputEventMapEntry(\n MapUtil.of(RandomInt.VALUE, Schema.ofInteger(RandomInt.VALUE)),\n ),\n ]),\n );\n\n public getSignature(): FunctionSignature {\n return RandomInt.SIGNATURE;\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let min: number = context.getArguments()?.get(RandomInt.MIN_VALUE);\n\n let max: number = context.getArguments()?.get(RandomInt.MAX_VALUE);\n\n let num: number = Math.floor(Math.random() * (max - min) + min);\n\n return new FunctionOutput([EventResult.outputOf(new Map([[RandomInt.VALUE, num]]))]);\n }\n}\n","import { SchemaType } from '../../../json/schema/type/SchemaType';\nimport { Namespaces } from '../../../namespaces/Namespaces';\nimport { Repository } from '../../../Repository';\nimport { AbstractFunction } from '../../AbstractFunction';\nimport { Function } from '../../Function';\nimport { Add } from './Add';\nimport { GenericMathFunction } from './GenericMathFunction';\nimport { Hypotenuse } from './Hypotenuse';\nimport { Maximum } from './Maximum';\nimport { Minimum } from './Minimum';\nimport { Random } from './Random';\nimport { RandomFloat } from './RandomFloat';\nimport { RandomInt } from './RandomInt';\n\nconst functionObjectsIndex: { [key: string]: AbstractFunction } = {\n Absolute: new GenericMathFunction(\n 'Absolute',\n (v) => Math.abs(v),\n 1,\n SchemaType.INTEGER,\n SchemaType.LONG,\n SchemaType.FLOAT,\n SchemaType.DOUBLE,\n ),\n ACosine: new GenericMathFunction('ArcCosine', (v) => Math.acos(v)),\n ASine: new GenericMathFunction('ArcSine', (v) => Math.asin(v)),\n ATangent: new GenericMathFunction('ArcTangent', (v) => Math.atan(v)),\n Ceiling: new GenericMathFunction('Ceiling', (v) => Math.ceil(v)),\n Cosine: new GenericMathFunction('Cosine', (v) => Math.cos(v)),\n CosineH: new GenericMathFunction('HyperbolicCosine', (v) => Math.cosh(v)),\n CubeRoot: new GenericMathFunction('CubeRoot', (v) => Math.cbrt(v)),\n Exponential: new GenericMathFunction('Exponential', (v) => Math.exp(v)),\n Expm1: new GenericMathFunction('ExponentialMinus1', (v) => Math.expm1(v)),\n Floor: new GenericMathFunction('Floor', (v) => Math.floor(v)),\n Log: new GenericMathFunction('LogNatural', (v) => Math.log(v)),\n Log10: new GenericMathFunction('Log10', (v) => Math.log10(v)),\n Round: new GenericMathFunction(\n 'Round',\n (v) => Math.round(v),\n 1,\n SchemaType.INTEGER,\n SchemaType.LONG,\n ),\n Sine: new GenericMathFunction('Sine', (v) => Math.sin(v)),\n SineH: new GenericMathFunction('HyperbolicSine', (v) => Math.sinh(v)),\n Tangent: new GenericMathFunction('Tangent', (v) => Math.tan(v)),\n TangentH: new GenericMathFunction('HyperbolicTangent', (v) => Math.tanh(v)),\n ToDegrees: new GenericMathFunction('ToDegrees', (v) => v * (Math.PI / 180)),\n ToRadians: new GenericMathFunction('ToRadians', (v) => v * (180 / Math.PI)),\n SquareRoot: new GenericMathFunction('SquareRoot', (v) => Math.sqrt(v)),\n ArcTangent: new GenericMathFunction('ArcTangent2', (v1, v2) => Math.atan2(v1, v2!), 2),\n Power: new GenericMathFunction('Power', (v1, v2) => Math.pow(v1, v2!), 2),\n Add: new Add(),\n Hypotenuse: new Hypotenuse(),\n Maximum: new Maximum(),\n Minimum: new Minimum(),\n Random: new Random(),\n RandomFloat: new RandomFloat(),\n RandomInt: new RandomInt(),\n};\n\nconst filterableNames = Object.values(functionObjectsIndex).map((e) =>\n e.getSignature().getFullName(),\n);\n\nexport class MathFunctionRepository implements Repository<Function> {\n public async find(namespace: string, name: string): Promise<Function | undefined> {\n if (namespace != Namespaces.MATH) return Promise.resolve(undefined);\n\n return Promise.resolve(functionObjectsIndex[name]);\n }\n\n public async filter(name: string): Promise<string[]> {\n return Promise.resolve(\n filterableNames.filter((e) => e.toLowerCase().indexOf(name.toLowerCase()) !== -1),\n );\n }\n}\n","import { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionSignature } from '../../../model/FunctionSignature';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { AbstractFunction } from '../../AbstractFunction';\n\nimport { Namespaces } from '../../../namespaces/Namespaces';\nimport { Event } from '../../../model/Event';\nimport { Schema } from '../../../json/schema/Schema';\nimport { Parameter } from '../../../model/Parameter';\n\nconst VALUE = 'value';\n\nconst SOURCE = 'source';\n\nexport abstract class AbstractObjectFunction extends AbstractFunction {\n private signature: FunctionSignature;\n\n protected constructor(functionName: string, valueSchema: Schema) {\n super();\n this.signature = new FunctionSignature(functionName)\n .setNamespace(Namespaces.SYSTEM_OBJECT)\n .setParameters(new Map([Parameter.ofEntry(SOURCE, Schema.ofAny(SOURCE))]))\n .setEvents(new Map([Event.outputEventMapEntry(new Map([[VALUE, valueSchema]]))]));\n }\n\n public getSignature(): FunctionSignature {\n return this.signature;\n }\n}\n","import { SchemaType } from '../../../json/schema/type/SchemaType';\nimport { Namespaces } from '../../../namespaces/Namespaces';\nimport { Repository } from '../../../Repository';\nimport { AbstractFunction } from '../../AbstractFunction';\nimport { Function } from '../../Function';\nimport { ObjectDeleteKey } from './ObjectDeleteKey';\nimport { ObjectEntries } from './ObjectEntries';\nimport { ObjectKeys } from './ObjectKeys';\nimport { ObjectPutValue } from './ObjectPutValue';\nimport { ObjectValues } from './ObjectValues';\n\nconst functionObjectsIndex: { [key: string]: AbstractFunction } = {\n ObjectValues: new ObjectValues(),\n ObjectKeys: new ObjectKeys(),\n ObjectEntries: new ObjectEntries(),\n ObjectDeleteKey: new ObjectDeleteKey(),\n ObjectPutValue: new ObjectPutValue(),\n};\n\nconst filterableNames = Object.values(functionObjectsIndex).map((e) =>\n e.getSignature().getFullName(),\n);\n\nexport class ObjectFunctionRepository implements Repository<Function> {\n public async find(namespace: string, name: string): Promise<Function | undefined> {\n if (namespace != Namespaces.SYSTEM_OBJECT) return Promise.resolve(undefined);\n\n return Promise.resolve(functionObjectsIndex[name]);\n }\n\n public async filter(name: string): Promise<string[]> {\n return Promise.resolve(\n filterableNames.filter((e) => e.toLowerCase().indexOf(name.toLowerCase()) !== -1),\n );\n }\n}\n","import { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\n\nimport { isNullValue } from '../../../util/NullCheck';\nimport { EventResult } from '../../../model/EventResult';\nimport { AbstractObjectFunction } from './AbstractObjectFunction';\nimport { Schema } from '../../../json/schema/Schema';\nimport { duplicate } from '../../../util/duplicate';\n\nconst VALUE = 'value';\n\nexport class ObjectValues extends AbstractObjectFunction {\n public constructor() {\n super('ObjectValues', Schema.ofArray(VALUE, Schema.ofAny(VALUE)));\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n var source = context.getArguments()?.get('source');\n\n if (isNullValue(source))\n return new FunctionOutput([EventResult.outputOf(new Map([[VALUE, []]]))]);\n\n let objectValues: any[] = Object.entries(duplicate(source))\n .sort((a, b) => a[0].localeCompare(b[0]))\n .map((e) => e[1]);\n\n return new FunctionOutput([EventResult.outputOf(new Map([[VALUE, objectValues]]))]);\n }\n}\n","import { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\n\nimport { isNullValue } from '../../../util/NullCheck';\nimport { EventResult } from '../../../model/EventResult';\nimport { AbstractObjectFunction } from './AbstractObjectFunction';\nimport { Schema } from '../../../json/schema/Schema';\nimport { duplicate } from '../../../util/duplicate';\n\nconst VALUE = 'value';\n\nexport class ObjectKeys extends AbstractObjectFunction {\n public constructor() {\n super('ObjectKeys', Schema.ofArray(VALUE, Schema.ofString(VALUE)));\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n var source = context.getArguments()?.get('source');\n\n if (isNullValue(source))\n return new FunctionOutput([EventResult.outputOf(new Map([[VALUE, []]]))]);\n\n let keys: string[] = Object.keys(duplicate(source)).sort((a, b) => a.localeCompare(b));\n\n return new FunctionOutput([EventResult.outputOf(new Map([[VALUE, keys]]))]);\n }\n}\n","import { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\n\nimport { isNullValue } from '../../../util/NullCheck';\nimport { EventResult } from '../../../model/EventResult';\nimport { AbstractObjectFunction } from './AbstractObjectFunction';\nimport { Schema } from '../../../json/schema/Schema';\nimport { duplicate } from '../../../util/duplicate';\n\nconst VALUE = 'value';\n\nexport class ObjectEntries extends AbstractObjectFunction {\n public constructor() {\n super(\n 'ObjectEntries',\n Schema.ofArray(\n VALUE,\n Schema.ofArray('tuple', Schema.ofString('key'), Schema.ofAny('value')),\n ),\n );\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n var source = context.getArguments()?.get('source');\n\n if (isNullValue(source))\n return new FunctionOutput([EventResult.outputOf(new Map([[VALUE, []]]))]);\n\n let entries = Object.entries(duplicate(source)).sort((a, b) => a[0].localeCompare(b[0]));\n\n return new FunctionOutput([EventResult.outputOf(new Map([[VALUE, entries]]))]);\n }\n}\n","import { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\n\nimport { Schema } from '../../../json/schema/Schema';\nimport { Event } from '../../../model/Event';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionSignature } from '../../../model/FunctionSignature';\nimport { Parameter } from '../../../model/Parameter';\nimport { Namespaces } from '../../../namespaces/Namespaces';\nimport { isNullValue } from '../../../util/NullCheck';\nimport { duplicate } from '../../../util/duplicate';\nimport { AbstractFunction } from '../../AbstractFunction';\n\nconst VALUE = 'value';\nconst SOURCE = 'source';\nconst KEY = 'key';\n\nexport class ObjectDeleteKey extends AbstractFunction {\n private signature: FunctionSignature;\n\n public constructor() {\n super();\n this.signature = new FunctionSignature('ObjectDeleteKey')\n .setNamespace(Namespaces.SYSTEM_OBJECT)\n .setParameters(\n new Map([\n Parameter.ofEntry(SOURCE, Schema.ofAny(SOURCE)),\n Parameter.ofEntry(KEY, Schema.ofString(KEY)),\n ]),\n )\n .setEvents(\n new Map([Event.outputEventMapEntry(new Map([[VALUE, Schema.ofAny(VALUE)]]))]),\n );\n }\n\n public getSignature(): FunctionSignature {\n return this.signature;\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let source = context.getArguments()?.get(SOURCE);\n let key = context.getArguments()?.get(KEY);\n\n if (isNullValue(source))\n return new FunctionOutput([EventResult.outputOf(new Map([[VALUE, undefined]]))]);\n\n source = duplicate(source);\n delete source[key];\n\n return new FunctionOutput([EventResult.outputOf(new Map([[VALUE, source]]))]);\n }\n}\n","import { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\n\nimport { Schema } from '../../../json/schema/Schema';\nimport { Event } from '../../../model/Event';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionSignature } from '../../../model/FunctionSignature';\nimport { Parameter } from '../../../model/Parameter';\nimport { Namespaces } from '../../../namespaces/Namespaces';\nimport { duplicate } from '../../../util/duplicate';\nimport { AbstractFunction } from '../../AbstractFunction';\nimport { isNullValue } from '../../../util/NullCheck';\nimport { ObjectValueSetterExtractor } from '../../../runtime/expression/tokenextractor/ObjectValueSetterExtractor';\n\nconst VALUE = 'value';\nconst SOURCE = 'source';\nconst KEY = 'key';\nconst OVERWRITE = 'overwrite';\nconst DELETE_KEY_ON_NULL = 'deleteKeyOnNull';\n\nexport class ObjectPutValue extends AbstractFunction {\n private signature: FunctionSignature;\n\n public constructor() {\n super();\n this.signature = new FunctionSignature('ObjectPutValue')\n .setNamespace(Namespaces.SYSTEM_OBJECT)\n .setParameters(\n new Map([\n Parameter.ofEntry(SOURCE, Schema.ofObject(SOURCE)),\n Parameter.ofEntry(KEY, Schema.ofString(KEY)),\n Parameter.ofEntry(VALUE, Schema.ofAny(VALUE)),\n Parameter.ofEntry(OVERWRITE, Schema.ofBoolean(OVERWRITE).setDefaultValue(true)),\n Parameter.ofEntry(\n DELETE_KEY_ON_NULL,\n Schema.ofBoolean(DELETE_KEY_ON_NULL).setDefaultValue(false),\n ),\n ]),\n )\n .setEvents(\n new Map([Event.outputEventMapEntry(new Map([[VALUE, Schema.ofObject(VALUE)]]))]),\n );\n }\n\n public getSignature(): FunctionSignature {\n return this.signature;\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let source = context.getArguments()?.get(SOURCE);\n let key = context.getArguments()?.get(KEY);\n let value = context.getArguments()?.get(VALUE);\n let overwrite = context.getArguments()?.get(OVERWRITE);\n let deleteKeyOnNull = context.getArguments()?.get(DELETE_KEY_ON_NULL);\n\n const ove = new ObjectValueSetterExtractor(source, 'Data.');\n ove.setValue(key, value, overwrite, deleteKeyOnNull);\n\n return new FunctionOutput([EventResult.outputOf(new Map([[VALUE, ove.getStore()]]))]);\n }\n}\n","import { Schema } from '../../json/schema/Schema';\nimport { SchemaType } from '../../json/schema/type/SchemaType';\nimport { Event } from '../../model/Event';\nimport { EventResult } from '../../model/EventResult';\nimport { FunctionOutput } from '../../model/FunctionOutput';\nimport { FunctionSignature } from '../../model/FunctionSignature';\nimport { Parameter } from '../../model/Parameter';\nimport { Namespaces } from '../../namespaces/Namespaces';\nimport { FunctionExecutionParameters } from '../../runtime/FunctionExecutionParameters';\nimport { AbstractFunction } from '../AbstractFunction';\n\nexport class Print extends AbstractFunction {\n private static readonly VALUES: string = 'values';\n\n private static readonly SIGNATURE: FunctionSignature = new FunctionSignature('Print')\n .setNamespace(Namespaces.SYSTEM)\n .setParameters(\n new Map([Parameter.ofEntry(Print.VALUES, Schema.ofAny(Print.VALUES), true)]),\n );\n\n public getSignature(): FunctionSignature {\n return Print.SIGNATURE;\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n var values = context.getArguments()?.get(Print.VALUES);\n\n console?.log(...values);\n\n return new FunctionOutput([EventResult.outputOf(new Map())]);\n }\n}\n","import { Schema } from '../../../json/schema/Schema';\nimport { Event } from '../../../model/Event';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionSignature } from '../../../model/FunctionSignature';\nimport { Parameter } from '../../../model/Parameter';\nimport { Function } from '../../Function';\nimport { Namespaces } from '../../../namespaces/Namespaces';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { MapUtil } from '../../../util/MapUtil';\nimport { AbstractFunction } from '../../AbstractFunction';\n\nexport abstract class AbstractStringFunction extends AbstractFunction {\n public static readonly PARAMETER_STRING_NAME: string = 'string';\n\n public static readonly PARAMETER_SEARCH_STRING_NAME: string = 'searchString';\n\n public static readonly PARAMETER_SECOND_STRING_NAME: string = 'secondString';\n\n public static readonly PARAMETER_THIRD_STRING_NAME: string = 'thirdString';\n\n public static readonly PARAMETER_INDEX_NAME: string = 'index';\n\n public static readonly PARAMETER_SECOND_INDEX_NAME: string = 'secondIndex';\n\n public static readonly EVENT_RESULT_NAME: string = 'result';\n\n protected static readonly PARAMETER_STRING: Parameter = new Parameter(\n AbstractStringFunction.PARAMETER_STRING_NAME,\n Schema.ofString(AbstractStringFunction.PARAMETER_STRING_NAME),\n );\n\n protected static readonly PARAMETER_SECOND_STRING: Parameter = new Parameter(\n AbstractStringFunction.PARAMETER_SECOND_STRING_NAME,\n Schema.ofString(AbstractStringFunction.PARAMETER_SECOND_STRING_NAME),\n );\n\n protected static readonly PARAMETER_THIRD_STRING: Parameter = new Parameter(\n AbstractStringFunction.PARAMETER_THIRD_STRING_NAME,\n Schema.ofString(AbstractStringFunction.PARAMETER_THIRD_STRING_NAME),\n );\n\n protected static readonly PARAMETER_INDEX: Parameter = new Parameter(\n AbstractStringFunction.PARAMETER_INDEX_NAME,\n Schema.ofInteger(AbstractStringFunction.PARAMETER_INDEX_NAME),\n );\n\n protected static readonly PARAMETER_SECOND_INDEX: Parameter = new Parameter(\n AbstractStringFunction.PARAMETER_SECOND_INDEX_NAME,\n Schema.ofInteger(AbstractStringFunction.PARAMETER_SECOND_INDEX_NAME),\n );\n\n protected static readonly PARAMETER_SEARCH_STRING: Parameter = new Parameter(\n AbstractStringFunction.PARAMETER_SEARCH_STRING_NAME,\n Schema.ofString(AbstractStringFunction.PARAMETER_STRING_NAME),\n );\n\n protected static readonly EVENT_STRING: Event = new Event(\n Event.OUTPUT,\n MapUtil.of(\n AbstractStringFunction.EVENT_RESULT_NAME,\n Schema.ofString(AbstractStringFunction.EVENT_RESULT_NAME),\n ),\n );\n\n protected static readonly EVENT_BOOLEAN: Event = new Event(\n Event.OUTPUT,\n MapUtil.of(\n AbstractStringFunction.EVENT_RESULT_NAME,\n Schema.ofBoolean(AbstractStringFunction.EVENT_RESULT_NAME),\n ),\n );\n\n protected static readonly EVENT_INT: Event = new Event(\n Event.OUTPUT,\n MapUtil.of(\n AbstractStringFunction.EVENT_RESULT_NAME,\n Schema.ofInteger(AbstractStringFunction.EVENT_RESULT_NAME),\n ),\n );\n\n protected static readonly EVENT_ARRAY: Event = new Event(\n Event.OUTPUT,\n MapUtil.of(\n AbstractStringFunction.EVENT_RESULT_NAME,\n Schema.ofArray(AbstractStringFunction.EVENT_RESULT_NAME),\n ),\n );\n\n private signature: FunctionSignature;\n\n constructor(namespace: string, functionName: string, event: Event, ...parameter: Parameter[]) {\n super();\n const paramMap: Map<string, Parameter> = new Map();\n parameter.forEach((e) => paramMap.set(e.getParameterName(), e));\n\n this.signature = new FunctionSignature(functionName)\n .setNamespace(namespace)\n .setParameters(paramMap)\n .setEvents(MapUtil.of(event.getName(), event));\n }\n\n public getSignature(): FunctionSignature {\n return this.signature;\n }\n\n public static ofEntryAsStringBooleanOutput(\n name: string,\n fun: (a: string, b: string) => boolean,\n ): [string, Function] {\n return [\n name,\n new (class extends AbstractStringFunction {\n constructor(\n namespace: string,\n functionName: string,\n event: Event,\n ...parameter: Parameter[]\n ) {\n super(namespace, functionName, event, ...parameter);\n }\n\n protected async internalExecute(\n context: FunctionExecutionParameters,\n ): Promise<FunctionOutput> {\n let s: string = context\n ?.getArguments()\n ?.get(AbstractStringFunction.PARAMETER_STRING_NAME);\n let ss: string = context\n ?.getArguments()\n ?.get(AbstractStringFunction.PARAMETER_SEARCH_STRING_NAME);\n\n return new FunctionOutput([\n EventResult.outputOf(\n MapUtil.of(AbstractStringFunction.EVENT_RESULT_NAME, fun(s, ss)),\n ),\n ]);\n }\n })(\n Namespaces.STRING,\n name,\n AbstractStringFunction.EVENT_BOOLEAN,\n AbstractStringFunction.PARAMETER_STRING,\n AbstractStringFunction.PARAMETER_SEARCH_STRING,\n ),\n ];\n }\n\n public static ofEntryAsStringAndIntegerStringOutput(\n name: string,\n fun: (a: string, b: number) => string,\n ): [string, Function] {\n return [\n name,\n new (class extends AbstractStringFunction {\n constructor(\n namespace: string,\n functionName: string,\n event: Event,\n ...parameter: Parameter[]\n ) {\n super(namespace, functionName, event, ...parameter);\n }\n\n protected async internalExecute(\n context: FunctionExecutionParameters,\n ): Promise<FunctionOutput> {\n let s: string = context\n ?.getArguments()\n ?.get(AbstractStringFunction.PARAMETER_STRING_NAME);\n let count: number = context\n ?.getArguments()\n ?.get(AbstractStringFunction.PARAMETER_INDEX_NAME);\n\n return new FunctionOutput([\n EventResult.outputOf(\n MapUtil.of(AbstractStringFunction.EVENT_RESULT_NAME, fun(s, count)),\n ),\n ]);\n }\n })(\n Namespaces.STRING,\n name,\n AbstractStringFunction.EVENT_STRING,\n AbstractStringFunction.PARAMETER_STRING,\n AbstractStringFunction.PARAMETER_INDEX,\n ),\n ];\n }\n\n public static ofEntryAsStringIntegerOutput(\n name: string,\n fun: (a: string, b: string) => number,\n ): [string, Function] {\n return [\n name,\n new (class extends AbstractStringFunction {\n constructor(\n namespace: string,\n functionName: string,\n event: Event,\n ...parameter: Parameter[]\n ) {\n super(namespace, functionName, event, ...parameter);\n }\n\n protected async internalExecute(\n context: FunctionExecutionParameters,\n ): Promise<FunctionOutput> {\n let s1: string = context\n ?.getArguments()\n ?.get(AbstractStringFunction.PARAMETER_STRING_NAME);\n let s2: string = context\n ?.getArguments()\n ?.get(AbstractStringFunction.PARAMETER_SEARCH_STRING_NAME);\n\n return new FunctionOutput([\n EventResult.outputOf(\n MapUtil.of(AbstractStringFunction.EVENT_RESULT_NAME, fun(s1, s2)),\n ),\n ]);\n }\n })(\n Namespaces.STRING,\n name,\n AbstractStringFunction.EVENT_INT,\n AbstractStringFunction.PARAMETER_STRING,\n AbstractStringFunction.PARAMETER_SEARCH_STRING,\n ),\n ];\n }\n\n public static ofEntryString(name: string, fun: (a: string) => string): [string, Function] {\n return [\n name,\n new (class extends AbstractStringFunction {\n constructor(\n namespace: string,\n functionName: string,\n event: Event,\n ...parameter: Parameter[]\n ) {\n super(namespace, functionName, event, ...parameter);\n }\n\n protected async internalExecute(\n context: FunctionExecutionParameters,\n ): Promise<FunctionOutput> {\n let s: string = context\n ?.getArguments()\n ?.get(AbstractStringFunction.PARAMETER_STRING_NAME);\n\n return new FunctionOutput([\n EventResult.outputOf(\n MapUtil.of(AbstractStringFunction.EVENT_RESULT_NAME, fun(s)),\n ),\n ]);\n }\n })(\n Namespaces.STRING,\n name,\n AbstractStringFunction.EVENT_STRING,\n AbstractStringFunction.PARAMETER_STRING,\n ),\n ];\n }\n public static ofEntryStringBooleanOutput(\n name: string,\n fun: (a: string) => boolean,\n ): [string, Function] {\n return [\n name,\n new (class extends AbstractStringFunction {\n constructor(\n namespace: string,\n functionName: string,\n event: Event,\n ...parameter: Parameter[]\n ) {\n super(namespace, functionName, event, ...parameter);\n }\n\n protected async internalExecute(\n context: FunctionExecutionParameters,\n ): Promise<FunctionOutput> {\n let s: string = context\n ?.getArguments()\n ?.get(AbstractStringFunction.PARAMETER_STRING_NAME);\n\n return new FunctionOutput([\n EventResult.outputOf(\n MapUtil.of(AbstractStringFunction.EVENT_RESULT_NAME, fun(s)),\n ),\n ]);\n }\n })(\n Namespaces.STRING,\n name,\n AbstractStringFunction.EVENT_BOOLEAN,\n AbstractStringFunction.PARAMETER_STRING,\n ),\n ];\n }\n\n public static ofEntryAsStringStringIntegerIntegerOutput(\n name: string,\n fun: (a: string, b: string, c: number) => number,\n ): [string, Function] {\n return [\n name,\n new (class extends AbstractStringFunction {\n constructor(\n namespace: string,\n functionName: string,\n event: Event,\n ...parameter: Parameter[]\n ) {\n super(namespace, functionName, event, ...parameter);\n }\n\n protected async internalExecute(\n context: FunctionExecutionParameters,\n ): Promise<FunctionOutput> {\n let s: string = context\n ?.getArguments()\n ?.get(AbstractStringFunction.PARAMETER_STRING_NAME);\n let ss: string = context\n ?.getArguments()\n ?.get(AbstractStringFunction.PARAMETER_SEARCH_STRING_NAME);\n\n let ind: number = context\n ?.getArguments()\n ?.get(AbstractStringFunction.PARAMETER_INDEX_NAME);\n\n return new FunctionOutput([\n EventResult.outputOf(\n MapUtil.of(AbstractStringFunction.EVENT_RESULT_NAME, fun(s, ss, ind)),\n ),\n ]);\n }\n })(\n Namespaces.STRING,\n name,\n AbstractStringFunction.EVENT_INT,\n AbstractStringFunction.PARAMETER_STRING,\n AbstractStringFunction.PARAMETER_SEARCH_STRING,\n AbstractStringFunction.PARAMETER_INDEX,\n ),\n ];\n }\n\n public static ofEntryAsStringIntegerIntegerStringOutput(\n name: string,\n fun: (a: string, b: number, c: number) => string,\n ): [string, Function] {\n return [\n name,\n new (class extends AbstractStringFunction {\n constructor(\n namespace: string,\n functionName: string,\n event: Event,\n ...parameter: Parameter[]\n ) {\n super(namespace, functionName, event, ...parameter);\n }\n\n protected async internalExecute(\n context: FunctionExecutionParameters,\n ): Promise<FunctionOutput> {\n let s: string = context\n ?.getArguments()\n ?.get(AbstractStringFunction.PARAMETER_STRING_NAME);\n let ind1: number = context\n ?.getArguments()\n ?.get(AbstractStringFunction.PARAMETER_INDEX_NAME);\n\n let ind2: number = context\n ?.getArguments()\n ?.get(AbstractStringFunction.PARAMETER_SECOND_INDEX_NAME);\n\n return new FunctionOutput([\n EventResult.outputOf(\n MapUtil.of(\n AbstractStringFunction.EVENT_RESULT_NAME,\n fun(s, ind1, ind2),\n ),\n ),\n ]);\n }\n })(\n Namespaces.STRING,\n name,\n AbstractStringFunction.EVENT_INT,\n AbstractStringFunction.PARAMETER_STRING,\n AbstractStringFunction.PARAMETER_INDEX,\n AbstractStringFunction.PARAMETER_SECOND_INDEX,\n ),\n ];\n }\n\n public static ofEntryAsStringStringStringStringOutput(\n name: string,\n fun: (a: string, b: string, c: string) => string,\n ): [string, Function] {\n return [\n name,\n new (class extends AbstractStringFunction {\n constructor(\n namespace: string,\n functionName: string,\n event: Event,\n ...parameter: Parameter[]\n ) {\n super(namespace, functionName, event, ...parameter);\n }\n\n protected async internalExecute(\n context: FunctionExecutionParameters,\n ): Promise<FunctionOutput> {\n let s1: string = context\n ?.getArguments()\n ?.get(AbstractStringFunction.PARAMETER_STRING_NAME);\n let s2: string = context\n ?.getArguments()\n ?.get(AbstractStringFunction.PARAMETER_SECOND_STRING_NAME);\n let s3: string = context\n ?.getArguments()\n ?.get(AbstractStringFunction.PARAMETER_THIRD_STRING_NAME);\n\n return new FunctionOutput([\n EventResult.outputOf(\n MapUtil.of(AbstractStringFunction.EVENT_RESULT_NAME, fun(s1, s2, s3)),\n ),\n ]);\n }\n })(\n Namespaces.STRING,\n name,\n AbstractStringFunction.EVENT_STRING,\n AbstractStringFunction.PARAMETER_STRING,\n AbstractStringFunction.PARAMETER_SECOND_STRING,\n AbstractStringFunction.PARAMETER_THIRD_STRING,\n ),\n ];\n }\n}\n","import { Schema } from '../../../json/schema/Schema';\nimport { SchemaType } from '../../../json/schema/type/SchemaType';\nimport { SingleType } from '../../../json/schema/type/SingleType';\nimport { Event } from '../../../model/Event';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionSignature } from '../../../model/FunctionSignature';\nimport { Parameter } from '../../../model/Parameter';\nimport { Namespaces } from '../../../namespaces/Namespaces';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { AbstractFunction } from '../../AbstractFunction';\n\nexport class Concatenate extends AbstractFunction {\n public static VALUE: string = 'value';\n\n private static SCHEMA: Schema = new Schema()\n .setName(Concatenate.VALUE)\n .setType(new SingleType(SchemaType.STRING));\n\n private static SIGNATURE: FunctionSignature = new FunctionSignature('Concatenate')\n .setNamespace(Namespaces.STRING)\n .setParameters(\n new Map([\n [\n Concatenate.VALUE,\n new Parameter(Concatenate.VALUE, Concatenate.SCHEMA).setVariableArgument(true),\n ],\n ]),\n )\n .setEvents(\n new Map([\n Event.outputEventMapEntry(\n new Map([[Concatenate.VALUE, Schema.ofString(Concatenate.VALUE)]]),\n ),\n ]),\n );\n\n public constructor() {\n super();\n }\n\n public getSignature(): FunctionSignature {\n return Concatenate.SIGNATURE;\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let contextArgs: string[] = context.getArguments()?.get(Concatenate.VALUE);\n\n let concatenatedString: string = '';\n\n contextArgs.reduce((curr, next) => (concatenatedString = curr + next), concatenatedString);\n\n return new FunctionOutput([\n EventResult.outputOf(new Map([[Concatenate.VALUE, concatenatedString]])),\n ]);\n }\n}\n","import { Schema } from '../../../json/schema/Schema';\nimport { Event } from '../../../model/Event';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionSignature } from '../../../model/FunctionSignature';\nimport { Parameter } from '../../../model/Parameter';\nimport { Namespaces } from '../../../namespaces/Namespaces';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { AbstractFunction } from '../../AbstractFunction';\n\nexport class DeleteForGivenLength extends AbstractFunction {\n public static readonly PARAMETER_STRING_NAME: string = 'string';\n\n public static readonly PARAMETER_AT_START_NAME: string = 'startPosition';\n\n public static readonly PARAMETER_AT_END_NAME: string = 'endPosition';\n\n public static readonly EVENT_RESULT_NAME: string = 'result';\n\n protected readonly PARAMETER_STRING: Parameter = new Parameter(\n DeleteForGivenLength.PARAMETER_STRING_NAME,\n Schema.ofString(DeleteForGivenLength.PARAMETER_STRING_NAME),\n );\n\n protected readonly PARAMETER_AT_START: Parameter = new Parameter(\n DeleteForGivenLength.PARAMETER_AT_START_NAME,\n Schema.ofInteger(DeleteForGivenLength.PARAMETER_AT_START_NAME),\n );\n\n protected readonly PARAMETER_AT_END: Parameter = new Parameter(\n DeleteForGivenLength.PARAMETER_AT_END_NAME,\n Schema.ofInteger(DeleteForGivenLength.PARAMETER_AT_END_NAME),\n );\n\n protected readonly EVENT_STRING: Event = new Event(\n Event.OUTPUT,\n new Map([\n [\n DeleteForGivenLength.EVENT_RESULT_NAME,\n Schema.ofString(DeleteForGivenLength.EVENT_RESULT_NAME),\n ],\n ]),\n );\n\n private signature: FunctionSignature = new FunctionSignature('DeleteForGivenLength')\n .setNamespace(Namespaces.STRING)\n .setParameters(\n new Map([\n [this.PARAMETER_STRING.getParameterName(), this.PARAMETER_STRING],\n [this.PARAMETER_AT_START.getParameterName(), this.PARAMETER_AT_START],\n [this.PARAMETER_AT_END.getParameterName(), this.PARAMETER_AT_END],\n ]),\n )\n .setEvents(new Map([[this.EVENT_STRING.getName(), this.EVENT_STRING]]));\n\n public constructor() {\n super();\n }\n\n public getSignature(): FunctionSignature {\n return this.signature;\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let inputString: string = context\n ?.getArguments()\n ?.get(DeleteForGivenLength.PARAMETER_STRING_NAME);\n let startPosition: number = context\n ?.getArguments()\n ?.get(DeleteForGivenLength.PARAMETER_AT_START_NAME);\n let endPosition: number = context\n ?.getArguments()\n ?.get(DeleteForGivenLength.PARAMETER_AT_END_NAME);\n\n if (endPosition >= startPosition) {\n let outputString: string = '';\n\n outputString += inputString.substring(0, startPosition);\n outputString += inputString.substring(endPosition);\n\n return new FunctionOutput([\n EventResult.outputOf(\n new Map([[DeleteForGivenLength.EVENT_RESULT_NAME, outputString.toString()]]),\n ),\n ]);\n }\n\n return new FunctionOutput([\n EventResult.outputOf(new Map([[DeleteForGivenLength.EVENT_RESULT_NAME, inputString]])),\n ]);\n }\n}\n","import { Schema } from '../../../json/schema/Schema';\nimport { Event } from '../../../model/Event';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionSignature } from '../../../model/FunctionSignature';\nimport { Parameter } from '../../../model/Parameter';\nimport { Namespaces } from '../../../namespaces/Namespaces';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { AbstractFunction } from '../../AbstractFunction';\n\nexport class InsertAtGivenPosition extends AbstractFunction {\n public static readonly PARAMETER_STRING_NAME: string = 'string';\n\n public static readonly PARAMETER_AT_POSITION_NAME: string = 'position';\n\n public static readonly PARAMETER_INSERT_STRING_NAME: string = 'insertString';\n\n protected readonly EVENT_RESULT_NAME: string = 'result';\n\n protected readonly PARAMETER_STRING: Parameter = new Parameter(\n InsertAtGivenPosition.PARAMETER_STRING_NAME,\n Schema.ofString(InsertAtGivenPosition.PARAMETER_STRING_NAME),\n );\n\n protected readonly PARAMETER_AT_POSITION: Parameter = new Parameter(\n InsertAtGivenPosition.PARAMETER_AT_POSITION_NAME,\n Schema.ofInteger(InsertAtGivenPosition.PARAMETER_AT_POSITION_NAME),\n );\n\n protected readonly PARAMETER_INSERT_STRING: Parameter = new Parameter(\n InsertAtGivenPosition.PARAMETER_INSERT_STRING_NAME,\n Schema.ofString(InsertAtGivenPosition.PARAMETER_INSERT_STRING_NAME),\n );\n\n protected readonly EVENT_STRING: Event = new Event(\n Event.OUTPUT,\n new Map([[this.EVENT_RESULT_NAME, Schema.ofString(this.EVENT_RESULT_NAME)]]),\n );\n\n private signature: FunctionSignature = new FunctionSignature('InsertAtGivenPosition')\n .setNamespace(Namespaces.STRING)\n .setParameters(\n new Map([\n [this.PARAMETER_STRING.getParameterName(), this.PARAMETER_STRING],\n [this.PARAMETER_AT_POSITION.getParameterName(), this.PARAMETER_AT_POSITION],\n [this.PARAMETER_INSERT_STRING.getParameterName(), this.PARAMETER_INSERT_STRING],\n ]),\n )\n .setEvents(\n new Map([\n Event.outputEventMapEntry(\n new Map([[this.EVENT_RESULT_NAME, Schema.ofString(this.EVENT_RESULT_NAME)]]),\n ),\n ]),\n );\n\n public getSignature(): FunctionSignature {\n return this.signature;\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let inputString: string = context\n ?.getArguments()\n ?.get(InsertAtGivenPosition.PARAMETER_STRING_NAME);\n let at: number = context\n ?.getArguments()\n ?.get(InsertAtGivenPosition.PARAMETER_AT_POSITION_NAME);\n let insertString: string = context\n ?.getArguments()\n ?.get(InsertAtGivenPosition.PARAMETER_INSERT_STRING_NAME);\n\n let outputString: string = '';\n\n outputString += inputString.substring(0, at);\n outputString += insertString;\n outputString += inputString.substring(at);\n\n return new FunctionOutput([\n EventResult.outputOf(new Map([[this.EVENT_RESULT_NAME, outputString]])),\n ]);\n }\n}\n","import { Schema } from '../../../json/schema/Schema';\nimport { Event } from '../../../model/Event';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionSignature } from '../../../model/FunctionSignature';\nimport { Parameter } from '../../../model/Parameter';\nimport { Namespaces } from '../../../namespaces/Namespaces';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { AbstractFunction } from '../../AbstractFunction';\n\nexport class PostPad extends AbstractFunction {\n protected static readonly PARAMETER_STRING_NAME: string = 'string';\n\n protected static readonly PARAMETER_POSTPAD_STRING_NAME: string = 'postpadString';\n\n protected static readonly PARAMETER_LENGTH_NAME: string = 'length';\n\n protected static readonly EVENT_RESULT_NAME: string = 'result';\n\n protected static PARAMETER_STRING: Parameter = new Parameter(\n PostPad.PARAMETER_STRING_NAME,\n Schema.ofString(PostPad.PARAMETER_STRING_NAME),\n );\n\n protected static PARAMETER_POSTPAD_STRING: Parameter = new Parameter(\n PostPad.PARAMETER_POSTPAD_STRING_NAME,\n Schema.ofString(PostPad.PARAMETER_POSTPAD_STRING_NAME),\n );\n\n protected static PARAMETER_LENGTH: Parameter = new Parameter(\n PostPad.PARAMETER_LENGTH_NAME,\n Schema.ofInteger(PostPad.PARAMETER_LENGTH_NAME),\n );\n\n protected static EVENT_STRING: Event = new Event(\n Event.OUTPUT,\n new Map([[PostPad.EVENT_RESULT_NAME, Schema.ofString(PostPad.EVENT_RESULT_NAME)]]),\n );\n\n private signature: FunctionSignature = new FunctionSignature('PostPad')\n .setNamespace(Namespaces.STRING)\n .setParameters(\n new Map([\n [PostPad.PARAMETER_STRING.getParameterName(), PostPad.PARAMETER_STRING],\n [\n PostPad.PARAMETER_POSTPAD_STRING.getParameterName(),\n PostPad.PARAMETER_POSTPAD_STRING,\n ],\n [PostPad.PARAMETER_LENGTH.getParameterName(), PostPad.PARAMETER_LENGTH],\n ]),\n )\n .setEvents(new Map([[PostPad.EVENT_STRING.getName(), PostPad.EVENT_STRING]]));\n\n public constructor() {\n super();\n }\n\n public getSignature(): FunctionSignature {\n return this.signature;\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let inputString: string = context.getArguments()?.get(PostPad.PARAMETER_STRING_NAME);\n let postpadString: string = context\n ?.getArguments()\n ?.get(PostPad.PARAMETER_POSTPAD_STRING_NAME);\n\n let length: number = context.getArguments()?.get(PostPad.PARAMETER_LENGTH_NAME);\n let outputString: string = '';\n let prepadStringLength: number = postpadString.length;\n\n outputString += inputString;\n\n while (prepadStringLength <= length) {\n outputString += postpadString;\n prepadStringLength += postpadString.length;\n }\n\n if (outputString.length - inputString.length < length) {\n outputString += postpadString.substring(\n 0,\n length - (outputString.length - inputString.length),\n );\n }\n\n return new FunctionOutput([\n EventResult.of(\n PostPad.EVENT_RESULT_NAME,\n new Map([[PostPad.EVENT_RESULT_NAME, outputString.toString()]]),\n ),\n ]);\n }\n}\n","import { Schema } from '../../../json/schema/Schema';\nimport { Event } from '../../../model/Event';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionSignature } from '../../../model/FunctionSignature';\nimport { Parameter } from '../../../model/Parameter';\nimport { Namespaces } from '../../../namespaces/Namespaces';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { AbstractFunction } from '../../AbstractFunction';\n\nexport class PrePad extends AbstractFunction {\n public static readonly PARAMETER_STRING_NAME: string = 'string';\n\n public static readonly PARAMETER_PREPAD_STRING_NAME: string = 'prepadString';\n\n public static readonly PARAMETER_LENGTH_NAME: string = 'length';\n\n public static readonly EVENT_RESULT_NAME: string = 'result';\n\n protected static readonly PARAMETER_STRING: Parameter = new Parameter(\n PrePad.PARAMETER_STRING_NAME,\n Schema.ofString(PrePad.PARAMETER_STRING_NAME),\n );\n\n protected static readonly PARAMETER_PREPAD_STRING: Parameter = new Parameter(\n PrePad.PARAMETER_PREPAD_STRING_NAME,\n Schema.ofString(PrePad.PARAMETER_PREPAD_STRING_NAME),\n );\n\n protected static readonly PARAMETER_LENGTH: Parameter = new Parameter(\n PrePad.PARAMETER_LENGTH_NAME,\n Schema.ofInteger(PrePad.PARAMETER_LENGTH_NAME),\n );\n\n protected static readonly EVENT_STRING: Event = new Event(\n Event.OUTPUT,\n new Map([[PrePad.EVENT_RESULT_NAME, Schema.ofString(PrePad.EVENT_RESULT_NAME)]]),\n );\n\n private readonly signature: FunctionSignature = new FunctionSignature('PrePad')\n .setNamespace(Namespaces.STRING)\n .setParameters(\n new Map([\n [PrePad.PARAMETER_STRING.getParameterName(), PrePad.PARAMETER_STRING],\n [PrePad.PARAMETER_PREPAD_STRING.getParameterName(), PrePad.PARAMETER_PREPAD_STRING],\n [PrePad.PARAMETER_LENGTH.getParameterName(), PrePad.PARAMETER_LENGTH],\n ]),\n )\n .setEvents(new Map([[PrePad.EVENT_STRING.getName(), PrePad.EVENT_STRING]]));\n\n public getSignature(): FunctionSignature {\n return this.signature;\n }\n\n public constructor() {\n super();\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let inputString: string = context.getArguments()?.get(PrePad.PARAMETER_STRING_NAME);\n let prepadString: string = context.getArguments()?.get(PrePad.PARAMETER_PREPAD_STRING_NAME);\n let length: number = context.getArguments()?.get(PrePad.PARAMETER_LENGTH_NAME);\n let outputString: string = '';\n let prepadStringLength: number = prepadString.length;\n\n while (prepadStringLength <= length) {\n outputString += prepadString;\n prepadStringLength += prepadString.length;\n }\n\n if (outputString.length < length) {\n outputString += prepadString.substring(0, length - outputString.length);\n }\n\n outputString += inputString;\n return new FunctionOutput([\n EventResult.of(\n PrePad.EVENT_RESULT_NAME,\n new Map([[PrePad.EVENT_RESULT_NAME, outputString]]),\n ),\n ]);\n }\n}\n","import { Schema } from '../../../json/schema/Schema';\nimport { Event } from '../../../model/Event';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionSignature } from '../../../model/FunctionSignature';\nimport { Parameter } from '../../../model/Parameter';\nimport { Namespaces } from '../../../namespaces/Namespaces';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { AbstractFunction } from '../../AbstractFunction';\n\nexport class RegionMatches extends AbstractFunction {\n public static readonly PARAMETER_STRING_NAME: string = 'string';\n\n public static readonly PARAMETER_BOOLEAN_NAME: string = 'boolean';\n\n public static readonly PARAMETER_FIRST_OFFSET_NAME: string = 'firstOffset';\n\n public static readonly PARAMETER_OTHER_STRING_NAME: string = 'otherString';\n\n public static readonly PARAMETER_SECOND_OFFSET_NAME: string = 'secondOffset';\n\n public static readonly PARAMETER_INTEGER_NAME: string = 'length';\n\n public static readonly EVENT_RESULT_NAME: string = 'result';\n\n public static PARAMETER_STRING: Parameter = new Parameter(\n RegionMatches.PARAMETER_STRING_NAME,\n Schema.ofString(RegionMatches.PARAMETER_STRING_NAME),\n );\n\n protected static PARAMETER_OTHER_STRING: Parameter = new Parameter(\n RegionMatches.PARAMETER_OTHER_STRING_NAME,\n Schema.ofString(RegionMatches.PARAMETER_OTHER_STRING_NAME),\n );\n\n protected static PARAMETER_FIRST_OFFSET: Parameter = new Parameter(\n RegionMatches.PARAMETER_FIRST_OFFSET_NAME,\n Schema.ofInteger(RegionMatches.PARAMETER_FIRST_OFFSET_NAME),\n );\n\n protected static PARAMETER_SECOND_OFFSET: Parameter = new Parameter(\n RegionMatches.PARAMETER_SECOND_OFFSET_NAME,\n Schema.ofInteger(RegionMatches.PARAMETER_SECOND_OFFSET_NAME),\n );\n\n protected static PARAMETER_INTEGER: Parameter = new Parameter(\n RegionMatches.PARAMETER_INTEGER_NAME,\n Schema.ofInteger(RegionMatches.PARAMETER_INTEGER_NAME),\n );\n\n protected static PARAMETER_BOOLEAN: Parameter = new Parameter(\n RegionMatches.PARAMETER_BOOLEAN_NAME,\n Schema.ofBoolean(RegionMatches.PARAMETER_BOOLEAN_NAME),\n );\n\n protected static EVENT_BOOLEAN: Event = new Event(\n Event.OUTPUT,\n new Map([\n [RegionMatches.EVENT_RESULT_NAME, Schema.ofBoolean(RegionMatches.EVENT_RESULT_NAME)],\n ]),\n );\n\n private signature: FunctionSignature = new FunctionSignature('RegionMatches')\n .setNamespace(Namespaces.STRING)\n .setParameters(\n new Map([\n [RegionMatches.PARAMETER_STRING.getParameterName(), RegionMatches.PARAMETER_STRING],\n [\n RegionMatches.PARAMETER_BOOLEAN.getParameterName(),\n RegionMatches.PARAMETER_BOOLEAN,\n ],\n [\n RegionMatches.PARAMETER_FIRST_OFFSET.getParameterName(),\n RegionMatches.PARAMETER_FIRST_OFFSET,\n ],\n [\n RegionMatches.PARAMETER_OTHER_STRING.getParameterName(),\n RegionMatches.PARAMETER_OTHER_STRING,\n ],\n [\n RegionMatches.PARAMETER_SECOND_OFFSET.getParameterName(),\n RegionMatches.PARAMETER_SECOND_OFFSET,\n ],\n [\n RegionMatches.PARAMETER_INTEGER.getParameterName(),\n RegionMatches.PARAMETER_INTEGER,\n ],\n ]),\n )\n .setEvents(new Map([[RegionMatches.EVENT_BOOLEAN.getName(), RegionMatches.EVENT_BOOLEAN]]));\n\n public getSignature(): FunctionSignature {\n return this.signature;\n }\n\n public constructor() {\n super();\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let inputString: string = context.getArguments()?.get(RegionMatches.PARAMETER_STRING_NAME);\n let ignoreCase: boolean = context.getArguments()?.get(RegionMatches.PARAMETER_BOOLEAN_NAME);\n let toffSet: number = context\n .getArguments()\n ?.get(RegionMatches.PARAMETER_FIRST_OFFSET_NAME);\n let otherString: string = context\n ?.getArguments()\n ?.get(RegionMatches.PARAMETER_OTHER_STRING_NAME);\n let oOffSet: number = context\n ?.getArguments()\n ?.get(RegionMatches.PARAMETER_SECOND_OFFSET_NAME);\n let length: number = context.getArguments()?.get(RegionMatches.PARAMETER_INTEGER_NAME);\n\n let matches: boolean = false;\n\n if (\n toffSet < 0 ||\n oOffSet < 0 ||\n toffSet + length > inputString.length ||\n oOffSet + length > otherString.length\n )\n matches = false;\n else if (ignoreCase) {\n inputString = inputString.substring(toffSet, toffSet + length).toUpperCase();\n let s2: string = otherString.substring(oOffSet, oOffSet + length).toUpperCase();\n matches = inputString == s2;\n } else {\n inputString = inputString.substring(toffSet, toffSet + length);\n let s2: string = otherString.substring(oOffSet, length);\n matches = inputString == s2;\n }\n\n return new FunctionOutput([\n EventResult.outputOf(new Map([[RegionMatches.EVENT_RESULT_NAME, matches]])),\n ]);\n }\n}\n","import { Schema } from '../../../json/schema/Schema';\nimport { Event } from '../../../model/Event';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionSignature } from '../../../model/FunctionSignature';\nimport { Parameter } from '../../../model/Parameter';\nimport { Namespaces } from '../../../namespaces/Namespaces';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\n\nimport { AbstractFunction } from '../../AbstractFunction';\n\nexport class ReplaceAtGivenPosition extends AbstractFunction {\n protected static readonly PARAMETER_STRING_NAME: string = 'string';\n\n protected static readonly PARAMETER_AT_START_NAME: string = 'startPosition';\n\n protected static readonly PARAMETER_AT_LENGTH_NAME: string = 'lengthPosition';\n\n protected static readonly PARAMETER_REPLACE_STRING_NAME: string = 'replaceString';\n\n protected static readonly EVENT_RESULT_NAME: string = 'result';\n\n protected static PARAMETER_STRING: Parameter = new Parameter(\n ReplaceAtGivenPosition.PARAMETER_STRING_NAME,\n Schema.ofString(ReplaceAtGivenPosition.PARAMETER_STRING_NAME),\n );\n\n protected static PARAMETER_AT_START: Parameter = new Parameter(\n ReplaceAtGivenPosition.PARAMETER_AT_START_NAME,\n Schema.ofInteger(ReplaceAtGivenPosition.PARAMETER_AT_START_NAME),\n );\n\n protected static PARAMETER_AT_LENGTH: Parameter = new Parameter(\n ReplaceAtGivenPosition.PARAMETER_AT_LENGTH_NAME,\n Schema.ofInteger(ReplaceAtGivenPosition.PARAMETER_AT_LENGTH_NAME),\n );\n\n protected static PARAMETER_REPLACE_STRING: Parameter = new Parameter(\n ReplaceAtGivenPosition.PARAMETER_REPLACE_STRING_NAME,\n Schema.ofString(ReplaceAtGivenPosition.PARAMETER_REPLACE_STRING_NAME),\n );\n\n protected static EVENT_STRING: Event = new Event(\n Event.OUTPUT,\n new Map([\n [\n ReplaceAtGivenPosition.EVENT_RESULT_NAME,\n Schema.ofString(ReplaceAtGivenPosition.EVENT_RESULT_NAME),\n ],\n ]),\n );\n\n public constructor() {\n super();\n }\n\n private signature: FunctionSignature = new FunctionSignature('ReplaceAtGivenPosition')\n .setNamespace(Namespaces.STRING)\n .setParameters(\n new Map([\n [\n ReplaceAtGivenPosition.PARAMETER_STRING.getParameterName(),\n ReplaceAtGivenPosition.PARAMETER_STRING,\n ],\n [\n ReplaceAtGivenPosition.PARAMETER_AT_START.getParameterName(),\n ReplaceAtGivenPosition.PARAMETER_AT_START,\n ],\n [\n ReplaceAtGivenPosition.PARAMETER_AT_LENGTH.getParameterName(),\n ReplaceAtGivenPosition.PARAMETER_AT_LENGTH,\n ],\n [\n ReplaceAtGivenPosition.PARAMETER_REPLACE_STRING.getParameterName(),\n ReplaceAtGivenPosition.PARAMETER_REPLACE_STRING,\n ],\n ]),\n )\n .setEvents(\n new Map([\n [\n ReplaceAtGivenPosition.EVENT_STRING.getName(),\n ReplaceAtGivenPosition.EVENT_STRING,\n ],\n ]),\n );\n\n public getSignature(): FunctionSignature {\n return this.signature;\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let inputString: string = context\n ?.getArguments()\n ?.get(ReplaceAtGivenPosition.PARAMETER_STRING_NAME);\n let startPosition: number = context\n ?.getArguments()\n ?.get(ReplaceAtGivenPosition.PARAMETER_AT_START_NAME);\n let length: number = context\n ?.getArguments()\n ?.get(ReplaceAtGivenPosition.PARAMETER_AT_LENGTH_NAME);\n let replaceString: string = context\n ?.getArguments()\n ?.get(ReplaceAtGivenPosition.PARAMETER_REPLACE_STRING_NAME);\n let inputStringLength: number = inputString.length;\n\n if (startPosition < length) {\n let outputString: string = '';\n outputString += inputString.substring(0, startPosition);\n outputString += replaceString;\n outputString += inputString.substring(startPosition + length);\n }\n\n return new FunctionOutput([\n EventResult.outputOf(\n new Map([[ReplaceAtGivenPosition.EVENT_RESULT_NAME, inputString]]),\n ),\n ]);\n }\n}\n","import { Schema } from '../../../json/schema/Schema';\nimport { Event } from '../../../model/Event';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionSignature } from '../../../model/FunctionSignature';\nimport { Parameter } from '../../../model/Parameter';\nimport { Namespaces } from '../../../namespaces/Namespaces';\nimport { AbstractFunction } from '../../AbstractFunction';\nimport { MapUtil } from '../../../util/MapUtil';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { TypeUtil } from '../../../json/schema/type/TypeUtil';\nimport { SchemaType } from '../../../json/schema/type/SchemaType';\n\nexport class Reverse extends AbstractFunction {\n protected readonly VALUE: string = 'value';\n\n private readonly SIGNATURE: FunctionSignature = new FunctionSignature('Reverse')\n .setNamespace(Namespaces.STRING)\n .setParameters(\n new Map([\n [\n this.VALUE,\n new Parameter(this.VALUE, Schema.ofString(this.VALUE)).setVariableArgument(\n false,\n ),\n ],\n ]),\n )\n .setEvents(\n new Map([\n Event.outputEventMapEntry(\n new Map([\n [\n this.VALUE,\n new Schema()\n .setType(TypeUtil.of(SchemaType.STRING))\n .setName(this.VALUE),\n ],\n ]),\n ),\n ]),\n );\n\n public constructor() {\n super();\n }\n\n public getSignature(): FunctionSignature {\n return this.SIGNATURE;\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let acutalString: string = context.getArguments()?.get(this.VALUE);\n let stringLength: number = acutalString.length - 1;\n let reversedString: string = '';\n\n while (stringLength >= 0) {\n reversedString += acutalString.charAt(stringLength--);\n }\n\n return new FunctionOutput([EventResult.outputOf(MapUtil.of(this.VALUE, reversedString))]);\n }\n}\n","import { Schema } from '../../../json/schema/Schema';\nimport { Event } from '../../../model/Event';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionSignature } from '../../../model/FunctionSignature';\nimport { Parameter } from '../../../model/Parameter';\nimport { Namespaces } from '../../../namespaces/Namespaces';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { MapUtil } from '../../../util/MapUtil';\nimport { AbstractFunction } from '../../AbstractFunction';\n\nexport class Split extends AbstractFunction {\n protected readonly PARAMETER_STRING_NAME: string = 'string';\n protected readonly PARAMETER_SPLIT_STRING_NAME: string = 'searchString';\n protected readonly EVENT_RESULT_NAME: string = 'result';\n\n protected readonly PARAMETER_STRING: Parameter = new Parameter(\n this.PARAMETER_STRING_NAME,\n Schema.ofString(this.PARAMETER_STRING_NAME),\n );\n\n protected readonly PARAMETER_SPLIT_STRING: Parameter = new Parameter(\n this.PARAMETER_SPLIT_STRING_NAME,\n Schema.ofString(this.PARAMETER_SPLIT_STRING_NAME),\n );\n\n protected readonly EVENT_ARRAY: Event = new Event(\n Event.OUTPUT,\n MapUtil.of(this.EVENT_RESULT_NAME, Schema.ofArray(this.EVENT_RESULT_NAME)),\n );\n\n public getSignature(): FunctionSignature {\n return new FunctionSignature('Split')\n .setNamespace(Namespaces.STRING)\n .setParameters(\n new Map([\n [this.PARAMETER_STRING_NAME, this.PARAMETER_STRING],\n [this.PARAMETER_SPLIT_STRING_NAME, this.PARAMETER_SPLIT_STRING],\n ]),\n )\n .setEvents(\n new Map([\n Event.outputEventMapEntry(\n new Map([[this.EVENT_RESULT_NAME, Schema.ofArray(this.EVENT_RESULT_NAME)]]),\n ) as [string, Event],\n ]),\n );\n }\n\n public constructor() {\n super();\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let s1: string = context.getArguments()?.get(this.PARAMETER_STRING_NAME);\n let s2: string = context.getArguments()?.get(this.PARAMETER_SPLIT_STRING_NAME);\n\n return new FunctionOutput([\n EventResult.outputOf(MapUtil.of(this.EVENT_RESULT_NAME, s1.split(s2))),\n ]);\n }\n}\n","import { Schema } from '../../../json/schema/Schema';\nimport { Event } from '../../../model/Event';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionSignature } from '../../../model/FunctionSignature';\nimport { Parameter } from '../../../model/Parameter';\nimport { Namespaces } from '../../../namespaces/Namespaces';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { AbstractFunction } from '../../AbstractFunction';\n\nexport class ToString extends AbstractFunction {\n protected readonly PARAMETER_INPUT_ANYTYPE_NAME: string = 'anytype';\n\n protected readonly EVENT_RESULT_NAME: string = 'result';\n\n protected readonly PARAMETER_INPUT_ANYTYPE: Parameter = new Parameter(\n this.PARAMETER_INPUT_ANYTYPE_NAME,\n Schema.ofAny(this.PARAMETER_INPUT_ANYTYPE_NAME),\n );\n\n protected readonly EVENT_STRING: Event = new Event(\n Event.OUTPUT,\n new Map([[this.EVENT_RESULT_NAME, Schema.ofString(this.EVENT_RESULT_NAME)]]),\n );\n\n public getSignature(): FunctionSignature {\n return new FunctionSignature('ToString')\n .setNamespace(Namespaces.STRING)\n .setParameters(\n new Map([\n [this.PARAMETER_INPUT_ANYTYPE.getParameterName(), this.PARAMETER_INPUT_ANYTYPE],\n ]),\n )\n .setEvents(new Map([[this.EVENT_STRING.getName(), this.EVENT_STRING]]));\n }\n\n public constructor() {\n super();\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let input: any = context.getArguments()?.get(this.PARAMETER_INPUT_ANYTYPE_NAME);\n let output: string = '';\n\n if (typeof input === 'object') {\n output = JSON.stringify(input, undefined, 2);\n } else {\n output = '' + input;\n }\n\n return new FunctionOutput([\n EventResult.outputOf(new Map([[this.EVENT_RESULT_NAME, output]])),\n ]);\n }\n}\n","import { Schema } from '../../../json/schema/Schema';\nimport { Event } from '../../../model/Event';\nimport { EventResult } from '../../../model/EventResult';\nimport { FunctionOutput } from '../../../model/FunctionOutput';\nimport { FunctionSignature } from '../../../model/FunctionSignature';\nimport { Parameter } from '../../../model/Parameter';\nimport { Namespaces } from '../../../namespaces/Namespaces';\nimport { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';\nimport { AbstractFunction } from '../../AbstractFunction';\n\nexport class TrimTo extends AbstractFunction {\n public static readonly PARAMETER_STRING_NAME: string = 'string';\n\n public static readonly PARAMETER_LENGTH_NAME: string = 'length';\n\n public static readonly EVENT_RESULT_NAME: string = 'result';\n\n protected static readonly PARAMETER_STRING: Parameter = new Parameter(\n TrimTo.PARAMETER_STRING_NAME,\n Schema.ofString(TrimTo.PARAMETER_STRING_NAME),\n );\n\n protected static readonly PARAMETER_LENGTH: Parameter = new Parameter(\n TrimTo.PARAMETER_LENGTH_NAME,\n Schema.ofInteger(TrimTo.PARAMETER_LENGTH_NAME),\n );\n\n protected static readonly EVENT_STRING: Event = new Event(\n Event.OUTPUT,\n new Map([[TrimTo.EVENT_RESULT_NAME, Schema.ofString(TrimTo.EVENT_RESULT_NAME)]]),\n );\n\n private signature: FunctionSignature = new FunctionSignature('TrimTo')\n .setNamespace(Namespaces.STRING)\n .setParameters(\n new Map([\n [TrimTo.PARAMETER_STRING.getParameterName(), TrimTo.PARAMETER_STRING],\n [TrimTo.PARAMETER_LENGTH.getParameterName(), TrimTo.PARAMETER_LENGTH],\n ]),\n )\n .setEvents(new Map([[TrimTo.EVENT_STRING.getName(), TrimTo.EVENT_STRING]]));\n\n public getSignature(): FunctionSignature {\n return this.signature;\n }\n\n public constructor() {\n super();\n }\n\n protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {\n let inputString: string = context.getArguments()?.get(TrimTo.PARAMETER_STRING_NAME);\n let length: number = context.getArguments()?.get(TrimTo.PARAMETER_LENGTH_NAME);\n\n return new FunctionOutput([\n EventResult.of(\n TrimTo.EVENT_RESULT_NAME,\n new Map([[TrimTo.EVENT_RESULT_NAME, inputString.substring(0, length)]]),\n ),\n ]);\n }\n}\n","import { Namespaces } from '../../../namespaces/Namespaces';\nimport { Repository } from '../../../Repository';\nimport mapEntry from '../../../util/mapEntry';\nimport { MapUtil } from '../../../util/MapUtil';\nimport { Function } from '../../Function';\nimport { AbstractStringFunction } from './AbstractStringFunction';\nimport { Concatenate } from './Concatenate';\nimport { DeleteForGivenLength } from './DeleteForGivenLength';\nimport { InsertAtGivenPosition } from './InsertAtGivenPosition';\nimport { PostPad } from './PostPad';\nimport { PrePad } from './PrePad';\nimport { RegionMatches } from './RegionMatches';\nimport { ReplaceAtGivenPosition } from './ReplaceAtGivenPosition';\nimport { Reverse } from './Reverse';\nimport { Split } from './Split';\nimport { ToString } from './ToString';\nimport { TrimTo } from './TrimTo';\n\nexport class StringFunctionRepository implements Repository<Function> {\n private static readonly repoMap: Map<string, Function> = MapUtil.ofArrayEntries(\n AbstractStringFunction.ofEntryString('Trim', (e) => e.trim()),\n AbstractStringFunction.ofEntryString('LowerCase', (e) => e.toLocaleLowerCase()),\n AbstractStringFunction.ofEntryString('UpperCase', (e) => e.toUpperCase()),\n AbstractStringFunction.ofEntryStringBooleanOutput('IsBlank', (e) => e.trim() === ''),\n AbstractStringFunction.ofEntryStringBooleanOutput('IsEmpty', (e) => e === ''),\n\n AbstractStringFunction.ofEntryAsStringBooleanOutput(\n 'Contains',\n (a, b) => a.indexOf(b) != -1,\n ),\n AbstractStringFunction.ofEntryAsStringBooleanOutput('EndsWith', (a, b) => a.endsWith(b)),\n AbstractStringFunction.ofEntryAsStringBooleanOutput(\n 'EqualsIgnoreCase',\n (a, b) => a.toUpperCase() == b.toUpperCase(),\n ),\n AbstractStringFunction.ofEntryAsStringBooleanOutput('Matches', (a, b) =>\n new RegExp(b).test(a),\n ),\n AbstractStringFunction.ofEntryAsStringIntegerOutput('IndexOf', (a, b) => a.indexOf(b)),\n AbstractStringFunction.ofEntryAsStringIntegerOutput('LastIndexOf', (a, b) =>\n a.lastIndexOf(b),\n ),\n AbstractStringFunction.ofEntryAsStringAndIntegerStringOutput('Repeat', (a, b) =>\n a.repeat(b),\n ),\n\n AbstractStringFunction.ofEntryAsStringStringIntegerIntegerOutput(\n 'IndexOfWithStartPoint',\n (a, b, c) => a.indexOf(b, c),\n ),\n AbstractStringFunction.ofEntryAsStringStringIntegerIntegerOutput(\n 'LastIndexOfWithStartPoint',\n (a, b, c) => a.lastIndexOf(b, c),\n ),\n AbstractStringFunction.ofEntryAsStringStringStringStringOutput('Replace', (a, b, c) => {\n return a;\n }),\n AbstractStringFunction.ofEntryAsStringStringStringStringOutput('ReplaceFirst', (a, b, c) =>\n a.replace(b, c),\n ),\n AbstractStringFunction.ofEntryAsStringIntegerIntegerStringOutput('SubString', (a, b, c) =>\n a.substring(b, c),\n ),\n mapEntry(new Concatenate()),\n mapEntry(new DeleteForGivenLength()),\n mapEntry(new InsertAtGivenPosition()),\n mapEntry(new PostPad()),\n mapEntry(new PrePad()),\n mapEntry(new RegionMatches()),\n mapEntry(new ReplaceAtGivenPosition()),\n mapEntry(new Reverse()),\n mapEntry(new Split()),\n mapEntry(new ToString()),\n mapEntry(new TrimTo()),\n );\n\n private static readonly filterableNames = Array.from(\n StringFunctionRepository.repoMap.values(),\n ).map((e) => e.getSignature().getFullName());\n\n public async find(namespace: string, name: string): Promise<Function | undefined> {\n if (namespace != Namespaces.STRING) {\n return Promise.resolve(undefined);\n }\n return Promise.resolve(StringFunctionRepository.repoMap.get(name));\n }\n\n public async filter(name: string): Promise<string[]> {\n return Promise.resolve(\n StringFunctionRepository.filterableNames.filter(\n (e) => e.toLowerCase().indexOf(name.toLowerCase()) !== -1,\n ),\n );\n }\n}\n","import { Repository } from './Repository';\n\nexport class HybridRepository<T> implements Repository<T> {\n repos: Repository<T>[];\n\n constructor(...repos: Repository<T>[]) {\n this.repos = repos;\n }\n\n public async find(namespace: string, name: string): Promise<T | undefined> {\n for (let repo of this.repos) {\n let s = await repo.find(namespace, name);\n if (s) return s;\n }\n\n return undefined;\n }\n\n public async filter(name: string): Promise<string[]> {\n let result = new Set<string>();\n for (let repo of this.repos) {\n (await repo.filter(name)).forEach((e) => result.add(e));\n }\n return Array.from(result);\n }\n}\n","import { Function } from '../function/Function';\nimport { ArrayFunctionRepository } from '../function/system/array/ArrayFunctionRepository';\nimport { Create } from '../function/system/context/Create';\nimport { Get } from '../function/system/context/Get';\nimport { SetFunction } from '../function/system/context/SetFunction';\nimport { GenerateEvent } from '../function/system/GenerateEvent';\nimport { If } from '../function/system/If';\nimport { Break } from '../function/system/loop/Break';\nimport { CountLoop } from '../function/system/loop/CountLoop';\nimport { ForEachLoop } from '../function/system/loop/ForEachLoop';\nimport { RangeLoop } from '../function/system/loop/RangeLoop';\nimport { MathFunctionRepository } from '../function/system/math/MathFunctionRepository';\nimport { ObjectFunctionRepository } from '../function/system/object/ObjectFunctionRepository';\nimport { Print } from '../function/system/Print';\nimport { StringFunctionRepository } from '../function/system/string/StringFunctionRepository';\nimport { HybridRepository } from '../HybridRepository';\nimport { Namespaces } from '../namespaces/Namespaces';\nimport mapEntry from '../util/mapEntry';\n\nconst map: Map<string, Map<string, Function>> = new Map([\n [\n Namespaces.SYSTEM_CTX,\n new Map([mapEntry(new Create()), mapEntry(new Get()), mapEntry(new SetFunction())]),\n ],\n [\n Namespaces.SYSTEM_LOOP,\n new Map([\n mapEntry(new RangeLoop()),\n mapEntry(new CountLoop()),\n mapEntry(new Break()),\n mapEntry(new ForEachLoop()),\n ]),\n ],\n [\n Namespaces.SYSTEM,\n new Map([mapEntry(new If()), mapEntry(new GenerateEvent()), mapEntry(new Print())]),\n ],\n]);\n\nconst filterableNames = Array.from(map.values())\n .flatMap((e) => Array.from(e.values()))\n .map((e) => e.getSignature().getFullName());\n\nexport class KIRunFunctionRepository extends HybridRepository<Function> {\n public constructor() {\n super(\n {\n async find(namespace: string, name: string): Promise<Function | undefined> {\n return map.get(namespace)?.get(name);\n },\n\n async filter(name: string): Promise<string[]> {\n return Array.from(filterableNames).filter(\n (e) => e.toLowerCase().indexOf(name.toLowerCase()) !== -1,\n );\n },\n },\n new MathFunctionRepository(),\n new StringFunctionRepository(),\n new ArrayFunctionRepository(),\n new ObjectFunctionRepository(),\n );\n }\n}\n","import { StatementMessageType } from './StatementMessageType';\n\nexport class StatementMessage {\n private messageType?: StatementMessageType;\n private message?: string;\n\n public constructor(messageType?: StatementMessageType, message?: string) {\n this.message = message;\n this.messageType = messageType;\n }\n\n public getMessageType(): StatementMessageType | undefined {\n return this.messageType;\n }\n public setMessageType(messageType: StatementMessageType): StatementMessage {\n this.messageType = messageType;\n return this;\n }\n public getMessage(): string | undefined {\n return this.message;\n }\n public setMessage(message: string): StatementMessage {\n this.message = message;\n return this;\n }\n\n public toString(): string {\n return `${this.messageType} : ${this.message}`;\n }\n}\n","import { Statement } from '../model/Statement';\nimport { GraphVertexType } from './graph/GraphVertexType';\nimport { StatementMessage } from './StatementMessage';\nimport { StatementMessageType } from './StatementMessageType';\n\n// @EqualsAndHashCode(exclude = { \"messages\", \"dependencies\" })\nexport class StatementExecution implements GraphVertexType<String> {\n private statement: Statement;\n private messages: StatementMessage[] = new Array();\n private dependencies: Set<string> = new Set();\n\n public constructor(statement: Statement) {\n this.statement = statement;\n }\n\n public getStatement(): Statement {\n return this.statement;\n }\n public setStatement(statement: Statement): StatementExecution {\n this.statement = statement;\n return this;\n }\n public getMessages(): StatementMessage[] {\n return this.messages;\n }\n public setMessages(messages: StatementMessage[]): StatementExecution {\n this.messages = messages;\n return this;\n }\n public getDependencies(): Set<string> {\n return this.dependencies;\n }\n public setDependencies(dependencies: Set<string>): StatementExecution {\n this.dependencies = dependencies;\n return this;\n }\n\n public getUniqueKey(): string {\n return this.statement.getStatementName();\n }\n\n public addMessage(type: StatementMessageType, message: string): void {\n this.messages.push(new StatementMessage(type, message));\n }\n\n public addDependency(dependency: string): void {\n this.dependencies.add(dependency);\n }\n\n public getDepenedencies(): Set<string> {\n return this.dependencies;\n }\n\n public equals(obj: Object): boolean {\n if (!(obj instanceof StatementExecution)) return false;\n\n let se: StatementExecution = obj as StatementExecution;\n\n return se.statement.equals(this.statement);\n }\n}\n","import { ContextElement } from '../ContextElement';\nimport { TokenValueExtractor } from '../expression/tokenextractor/TokenValueExtractor';\n\nexport class ContextTokenValueExtractor extends TokenValueExtractor {\n public static readonly PREFIX: string = 'Context.';\n\n private context: Map<string, ContextElement>;\n\n public constructor(context: Map<string, ContextElement>) {\n super();\n this.context = context;\n }\n\n protected getValueInternal(token: string): any {\n let parts: string[] = token.split(TokenValueExtractor.REGEX_DOT);\n\n let key: string = parts[1];\n let bIndex: number = key.indexOf('[');\n let fromIndex = 2;\n if (bIndex != -1) {\n key = parts[1].substring(0, bIndex);\n parts[1] = parts[1].substring(bIndex);\n fromIndex = 1;\n }\n\n return this.retrieveElementFrom(\n token,\n parts,\n fromIndex,\n this.context.get(key)?.getElement(),\n );\n }\n\n public getPrefix(): string {\n return ContextTokenValueExtractor.PREFIX;\n }\n}\n","import { TokenValueExtractor } from '../expression/tokenextractor/TokenValueExtractor';\n\nexport class OutputMapTokenValueExtractor extends TokenValueExtractor {\n public static readonly PREFIX: string = 'Steps.';\n\n private output: Map<string, Map<string, Map<string, any>>>;\n\n public constructor(output: Map<string, Map<string, Map<string, any>>>) {\n super();\n this.output = output;\n }\n\n protected getValueInternal(token: string): any {\n let parts: string[] = token.split(TokenValueExtractor.REGEX_DOT);\n\n let ind: number = 1;\n\n let events: Map<string, Map<string, any>> | undefined = this.output.get(parts[ind++]);\n if (!events || ind >= parts.length) return undefined;\n\n let eachEvent: Map<string, any> | undefined = events.get(parts[ind++]);\n if (!eachEvent || ind > parts.length) return undefined;\n if (ind === parts.length) return eachEvent;\n\n const bracket = parts[ind].indexOf('[');\n\n if (bracket === -1) {\n let element: any = eachEvent.get(parts[ind++]);\n return this.retrieveElementFrom(token, parts, ind, element);\n }\n\n const evParamName = parts[ind].substring(0, bracket);\n let element: any = eachEvent.get(evParamName);\n return this.retrieveElementFrom(token, parts, ind, { [evParamName]: element });\n }\n\n public getPrefix(): string {\n return OutputMapTokenValueExtractor.PREFIX;\n }\n}\n","import { TokenValueExtractor } from '../expression/tokenextractor/TokenValueExtractor';\n\nexport class ArgumentsTokenValueExtractor extends TokenValueExtractor {\n public static readonly PREFIX: string = 'Arguments.';\n\n private args: Map<string, any>;\n\n public constructor(args: Map<string, any>) {\n super();\n this.args = args;\n }\n\n protected getValueInternal(token: string): any {\n let parts: string[] = token.split(TokenValueExtractor.REGEX_DOT);\n\n let key: string = parts[1];\n let bIndex: number = key.indexOf('[');\n let fromIndex = 2;\n if (bIndex != -1) {\n key = parts[1].substring(0, bIndex);\n parts[1] = parts[1].substring(bIndex);\n fromIndex = 1;\n }\n return this.retrieveElementFrom(token, parts, fromIndex, this.args.get(key));\n }\n\n public getPrefix(): string {\n return ArgumentsTokenValueExtractor.PREFIX;\n }\n}\n","import { LinkedList } from '../../util/LinkedList';\nimport { GraphVertex } from './GraphVertex';\nimport { GraphVertexType } from './GraphVertexType';\n\nexport class ExecutionGraph<K, T extends GraphVertexType<K>> {\n private nodeMap: Map<K, GraphVertex<K, T>> = new Map();\n private isSubGrph: boolean;\n\n public constructor(isSubGrph: boolean = false) {\n this.isSubGrph = isSubGrph;\n }\n\n public getVerticesData(): T[] {\n return Array.from(this.nodeMap.values()).map((e) => e.getData());\n }\n\n public addVertex(data: T): GraphVertex<K, T> {\n if (!this.nodeMap.has(data.getUniqueKey())) {\n let t = new GraphVertex(this, data);\n this.nodeMap.set(data.getUniqueKey(), t);\n }\n return this.nodeMap.get(data.getUniqueKey())!;\n }\n\n public getVertex(key: K): GraphVertex<K, T> | undefined {\n return this.nodeMap.get(key);\n }\n\n public getVertexData(key: K): T | undefined {\n if (this.nodeMap.has(key)) return this.nodeMap.get(key)!.getData();\n return undefined;\n }\n\n public getVerticesWithNoIncomingEdges(): GraphVertex<K, T>[] {\n return Array.from(this.nodeMap.values()).filter((e) => !e.hasIncomingEdges());\n }\n\n public isCyclic(): boolean {\n let list: LinkedList<GraphVertex<K, T>> = new LinkedList(\n this.getVerticesWithNoIncomingEdges(),\n );\n let visited: Set<K> = new Set();\n\n let vertex: GraphVertex<K, T>;\n while (!list.isEmpty()) {\n if (visited.has(list.getFirst().getKey())) return true;\n\n vertex = list.removeFirst();\n\n visited.add(vertex.getKey());\n if (vertex.hasOutgoingEdges())\n list.addAll(\n Array.from(vertex.getOutVertices().values()).flatMap((e) => Array.from(e)),\n );\n }\n\n return false;\n }\n\n public addVertices(values: T[]): void {\n for (const value of values) this.addVertex(value);\n }\n\n public getNodeMap(): Map<K, GraphVertex<K, T>> {\n return this.nodeMap;\n }\n\n public isSubGraph(): boolean {\n return this.isSubGrph;\n }\n\n public toString(): string {\n return (\n 'Execution Graph : \\n' +\n Array.from(this.nodeMap.values())\n\n .map((e) => e.toString())\n .join('\\n')\n );\n }\n}\n","import { LinkedList } from '../../util/LinkedList';\nimport { Tuple2 } from '../../util/Tuples';\nimport { ExecutionGraph } from './ExecutionGraph';\nimport { GraphVertexType } from './GraphVertexType';\n\nexport class GraphVertex<K, T extends GraphVertexType<K>> {\n private data: T;\n private outVertices: Map<string, Set<GraphVertex<K, T>>> = new Map();\n private inVertices: Set<Tuple2<GraphVertex<K, T>, string>> = new Set();\n private graph: ExecutionGraph<K, T>;\n\n public constructor(graph: ExecutionGraph<K, T>, data: T) {\n this.data = data;\n this.graph = graph;\n }\n\n public getData(): T {\n return this.data;\n }\n public setData(data: T): GraphVertex<K, T> {\n this.data = data;\n return this;\n }\n public getOutVertices(): Map<string, Set<GraphVertex<K, T>>> {\n return this.outVertices;\n }\n public setOutVertices(outVertices: Map<string, Set<GraphVertex<K, T>>>): GraphVertex<K, T> {\n this.outVertices = outVertices;\n return this;\n }\n public getInVertices(): Set<Tuple2<GraphVertex<K, T>, string>> {\n return this.inVertices;\n }\n public setInVertices(inVertices: Set<Tuple2<GraphVertex<K, T>, string>>): GraphVertex<K, T> {\n this.inVertices = inVertices;\n return this;\n }\n public getGraph(): ExecutionGraph<K, T> {\n return this.graph;\n }\n public setGraph(graph: ExecutionGraph<K, T>): GraphVertex<K, T> {\n this.graph = graph;\n return this;\n }\n\n public getKey(): K {\n return this.data.getUniqueKey();\n }\n\n // public addOutEdgeTo(type: string, data:T) :GraphVertex<K, T> {\n // \treturn this.addOutEdgeTo(type, this.graph.addVertex(data));\n // }\n\n // public GraphVertex<K, T> addInEdgeTo(T data, String type) {\n // \treturn this.addInEdgeTo(this.graph.addVertex(data), type);\n // }\n\n public addOutEdgeTo(type: string, vertex: GraphVertex<K, T>): GraphVertex<K, T> {\n if (!this.outVertices.has(type)) this.outVertices.set(type, new Set());\n this.outVertices.get(type)!.add(vertex);\n vertex.inVertices.add(new Tuple2(this, type));\n return vertex;\n }\n\n public addInEdgeTo(vertex: GraphVertex<K, T>, type: string): GraphVertex<K, T> {\n this.inVertices.add(new Tuple2(vertex, type));\n if (!vertex.outVertices.has(type)) vertex.outVertices.set(type, new Set());\n vertex.outVertices.get(type)!.add(this);\n return vertex;\n }\n\n public hasIncomingEdges(): boolean {\n return !!this.inVertices.size;\n }\n\n public hasOutgoingEdges(): boolean {\n return !!this.outVertices.size;\n }\n\n public getSubGraphOfType(type: string): ExecutionGraph<K, T> {\n let subGraph: ExecutionGraph<K, T> = new ExecutionGraph(true);\n\n var typeVertices = new LinkedList(Array.from(this.outVertices.get(type) ?? []));\n\n typeVertices.map((e) => e.getData()).forEach((e) => subGraph.addVertex(e));\n\n while (!typeVertices.isEmpty()) {\n var vertex = typeVertices.pop();\n Array.from(vertex.outVertices.values())\n .flatMap((e) => Array.from(e))\n .forEach((e) => {\n subGraph.addVertex(e.getData());\n typeVertices.add(e);\n });\n }\n\n return subGraph;\n }\n\n public toString(): string {\n var ins = Array.from(this.getInVertices())\n .map((e) => e.getT1().getKey() + '(' + e.getT2() + ')')\n .join(', ');\n\n var outs = Array.from(this.outVertices.entries())\n .map(\n ([key, value]) =>\n key +\n ': ' +\n Array.from(value)\n .map((e) => e.getKey())\n .join(','),\n )\n .join('\\n\\t\\t');\n\n return this.getKey() + ':\\n\\tIn: ' + ins + '\\n\\tOut: \\n\\t\\t' + outs;\n }\n}\n","export class JsonExpression {\n private expression: string;\n\n public constructor(expression: string) {\n this.expression = expression;\n }\n\n public getExpression(): string {\n return this.expression;\n }\n}\n","export enum ParameterReferenceType {\n VALUE = 'VALUE',\n EXPRESSION = 'EXPRESSION',\n}\n","export default function UUID() {\n var dt = new Date().getTime();\n var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n var r = (dt + Math.random() * 16) % 16 | 0;\n dt = Math.floor(dt / 16);\n return (c == 'x' ? r : (r & 0x3) | 0x8).toString(16);\n });\n return uuid;\n}\n","import { Function } from '../function/Function';\nimport { Schema } from '../json/schema/Schema';\nimport { Repository } from '../Repository';\nimport UUID from '../util/UUID';\nimport { ContextElement } from './ContextElement';\nimport { TokenValueExtractor } from './expression/tokenextractor/TokenValueExtractor';\nimport { StatementExecution } from './StatementExecution';\nimport { ContextTokenValueExtractor } from './tokenextractor/ContextTokenValueExtractor';\nimport { OutputMapTokenValueExtractor } from './tokenextractor/OutputMapTokenValueExtractor';\n\nexport class FunctionExecutionParameters {\n private context?: Map<string, ContextElement>;\n private args?: Map<string, any>;\n private events?: Map<string, Map<string, any>[]>;\n private statementExecution?: StatementExecution;\n private steps?: Map<string, Map<string, Map<string, any>>>;\n private count: number = 0;\n private functionRepository: Repository<Function>;\n private schemaRepository: Repository<Schema>;\n private executionId: string;\n private executionContext: Map<string, any> = new Map();\n\n private valueExtractors: Map<string, TokenValueExtractor> = new Map();\n\n public constructor(\n functionRepository: Repository<Function>,\n schemaRepository: Repository<Schema>,\n executionId?: string,\n ) {\n this.functionRepository = functionRepository;\n this.schemaRepository = schemaRepository;\n this.executionId = executionId ?? UUID();\n }\n\n public getExecutionId(): string {\n return this.executionId;\n }\n\n public getContext(): Map<string, ContextElement> | undefined {\n return this.context;\n }\n public setContext(context: Map<string, ContextElement>): FunctionExecutionParameters {\n this.context = context;\n let x: TokenValueExtractor = new ContextTokenValueExtractor(context);\n this.valueExtractors.set(x.getPrefix(), x);\n return this;\n }\n public getArguments(): Map<string, any> | undefined {\n return this.args;\n }\n public setArguments(args: Map<string, any>): FunctionExecutionParameters {\n this.args = args;\n return this;\n }\n\n public getEvents(): Map<string, Map<string, any>[]> | undefined {\n return this.events;\n }\n public setEvents(events: Map<string, Map<string, any>[]>): FunctionExecutionParameters {\n this.events = events;\n return this;\n }\n public getStatementExecution(): StatementExecution | undefined {\n return this.statementExecution;\n }\n public setStatementExecution(\n statementExecution: StatementExecution,\n ): FunctionExecutionParameters {\n this.statementExecution = statementExecution;\n return this;\n }\n public getSteps(): Map<string, Map<string, Map<string, any>>> | undefined {\n return this.steps;\n }\n public setSteps(\n steps: Map<string, Map<string, Map<string, any>>>,\n ): FunctionExecutionParameters {\n this.steps = steps;\n let x: TokenValueExtractor = new OutputMapTokenValueExtractor(steps);\n this.valueExtractors.set(x.getPrefix(), x);\n return this;\n }\n public getCount(): number {\n return this.count;\n }\n public setCount(count: number): FunctionExecutionParameters {\n this.count = count;\n return this;\n }\n\n public getValuesMap(): Map<string, TokenValueExtractor> {\n return this.valueExtractors;\n }\n\n public getFunctionRepository(): Repository<Function> {\n return this.functionRepository;\n }\n public setFunctionRepository(\n functionRepository: Repository<Function>,\n ): FunctionExecutionParameters {\n this.functionRepository = functionRepository;\n return this;\n }\n public getSchemaRepository(): Repository<Schema> {\n return this.schemaRepository;\n }\n public setSchemaRepository(schemaRepository: Repository<Schema>): FunctionExecutionParameters {\n this.schemaRepository = schemaRepository;\n return this;\n }\n\n public addTokenValueExtractor(\n ...extractors: TokenValueExtractor[]\n ): FunctionExecutionParameters {\n for (const tve of extractors) this.valueExtractors.set(tve.getPrefix(), tve);\n return this;\n }\n\n public setValuesMap(valuesMap: Map<string, TokenValueExtractor>): FunctionExecutionParameters {\n for (const [k, v] of valuesMap.entries()) this.valueExtractors.set(k, v);\n\n return this;\n }\n\n public setExecutionContext(executionContext: Map<string, any>): FunctionExecutionParameters {\n this.executionContext = executionContext;\n return this;\n }\n\n public getExecutionContext(): Map<string, any> {\n return this.executionContext;\n }\n}\n","export enum StatementMessageType {\n ERROR = 'ERROR',\n WARNING = 'WARNING',\n MESSAGE = 'MESSAGE',\n}\n","import { KIRuntimeException } from '../exception/KIRuntimeException';\nimport { AbstractFunction } from '../function/AbstractFunction';\nimport { Function } from '../function/Function';\nimport { Repository } from '../Repository';\nimport { JsonExpression } from '../json/JsonExpression';\nimport { Schema } from '../json/schema/Schema';\nimport { SchemaUtil } from '../json/schema/SchemaUtil';\nimport { Event } from '../model/Event';\nimport { EventResult } from '../model/EventResult';\nimport { FunctionDefinition } from '../model/FunctionDefinition';\nimport { FunctionOutput } from '../model/FunctionOutput';\nimport { FunctionSignature } from '../model/FunctionSignature';\nimport { Parameter } from '../model/Parameter';\nimport { ParameterReference } from '../model/ParameterReference';\nimport { ParameterReferenceType } from '../model/ParameterReferenceType';\nimport { Statement } from '../model/Statement';\nimport { LinkedList } from '../util/LinkedList';\nimport { StringFormatter } from '../util/string/StringFormatter';\nimport { StringUtil } from '../util/string/StringUtil';\nimport { Tuple4, Tuple2 } from '../util/Tuples';\nimport { ContextElement } from './ContextElement';\nimport { ExpressionEvaluator } from './expression/ExpressionEvaluator';\nimport { FunctionExecutionParameters } from './FunctionExecutionParameters';\nimport { ExecutionGraph } from './graph/ExecutionGraph';\nimport { GraphVertex } from './graph/GraphVertex';\nimport { StatementExecution } from './StatementExecution';\nimport { StatementMessageType } from './StatementMessageType';\nimport { isNullValue } from '../util/NullCheck';\nimport { SchemaType } from '../json/schema/type/SchemaType';\nimport { ArraySchemaType } from '../json/schema/array/ArraySchemaType';\nimport { ArgumentsTokenValueExtractor } from './tokenextractor/ArgumentsTokenValueExtractor';\nimport { OutputMapTokenValueExtractor } from './tokenextractor/OutputMapTokenValueExtractor';\nimport { ContextTokenValueExtractor } from './tokenextractor/ContextTokenValueExtractor';\n\nexport class KIRuntime extends AbstractFunction {\n private static readonly PARAMETER_NEEDS_A_VALUE: string = 'Parameter \"$\" needs a value';\n\n private static readonly STEP_REGEX_PATTERN: RegExp = new RegExp(\n 'Steps\\\\.([a-zA-Z0-9\\\\\\\\-]{1,})\\\\.([a-zA-Z0-9\\\\\\\\-]{1,})',\n 'g',\n );\n\n private static readonly VERSION: number = 1;\n\n private static readonly MAX_EXECUTION_ITERATIONS: number = 10000000;\n\n private fd: FunctionDefinition;\n\n private debugMode: boolean = false;\n\n public constructor(fd: FunctionDefinition, debugMode: boolean = false) {\n super();\n this.debugMode = debugMode;\n this.fd = fd;\n if (this.fd.getVersion() > KIRuntime.VERSION) {\n throw new KIRuntimeException(\n 'Runtime is at a lower version ' +\n KIRuntime.VERSION +\n ' and trying to run code from version ' +\n this.fd.getVersion() +\n '.',\n );\n }\n }\n\n public getSignature(): FunctionSignature {\n return this.fd;\n }\n\n public async getExecutionPlan(\n fRepo: Repository<Function>,\n sRepo: Repository<Schema>,\n ): Promise<ExecutionGraph<string, StatementExecution>> {\n let g: ExecutionGraph<string, StatementExecution> = new ExecutionGraph();\n for (let s of Array.from(this.fd.getSteps().values()))\n g.addVertex(await this.prepareStatementExecution(s, fRepo, sRepo));\n\n let unresolved = this.makeEdges(g);\n\n Array.from(unresolved.getT2().entries()).forEach((e) => {\n let ex = g.getNodeMap().get(e[0])?.getData();\n if (!ex) return;\n ex.addMessage(StatementMessageType.ERROR, e[1]);\n });\n\n return g;\n }\n\n protected async internalExecute(\n inContext: FunctionExecutionParameters,\n ): Promise<FunctionOutput> {\n if (!inContext.getContext()) inContext.setContext(new Map());\n\n if (!inContext.getEvents()) inContext.setEvents(new Map());\n\n if (!inContext.getSteps()) inContext.setSteps(new Map());\n\n if (inContext.getArguments()) {\n inContext.addTokenValueExtractor(\n new ArgumentsTokenValueExtractor(inContext.getArguments()!),\n );\n }\n\n if (this.debugMode) {\n console.log(\n `EID: ${inContext.getExecutionId()} Executing: ${this.fd.getNamespace()}.${this.fd.getName()}`,\n );\n console.log(`EID: ${inContext.getExecutionId()} Parameters: `, inContext);\n }\n\n let eGraph: ExecutionGraph<string, StatementExecution> = await this.getExecutionPlan(\n inContext.getFunctionRepository(),\n inContext.getSchemaRepository(),\n );\n\n if (this.debugMode) {\n console.log(`EID: ${inContext.getExecutionId()} ${eGraph?.toString()}`);\n }\n\n // if (logger.isDebugEnabled()) {\n // \tlogger.debug(StringFormatter.format(\"Executing : $.$\", this.fd.getNamespace(), this.fd.getName()));\n // \tlogger.debug(eGraph.toString());\n // }\n\n let messages: string[] = eGraph\n .getVerticesData()\n .filter((e) => e.getMessages().length)\n .map((e) => e.getStatement().getStatementName() + ': \\n' + e.getMessages().join(','));\n\n if (messages?.length) {\n throw new KIRuntimeException(\n 'Please fix the errors in the function definition before execution : \\n' +\n messages.join(',\\n'),\n );\n }\n\n return await this.executeGraph(eGraph, inContext);\n }\n\n private async executeGraph(\n eGraph: ExecutionGraph<string, StatementExecution>,\n inContext: FunctionExecutionParameters,\n ): Promise<FunctionOutput> {\n let executionQue: LinkedList<GraphVertex<string, StatementExecution>> = new LinkedList();\n executionQue.addAll(eGraph.getVerticesWithNoIncomingEdges());\n\n let branchQue: LinkedList<\n Tuple4<\n ExecutionGraph<string, StatementExecution>,\n Tuple2<string, string>[],\n FunctionOutput,\n GraphVertex<string, StatementExecution>\n >\n > = new LinkedList();\n\n while (\n (!executionQue.isEmpty() || !branchQue.isEmpty()) &&\n !inContext.getEvents()?.has(Event.OUTPUT)\n ) {\n await this.processBranchQue(inContext, executionQue, branchQue);\n await this.processExecutionQue(inContext, executionQue, branchQue);\n\n inContext.setCount(inContext.getCount() + 1);\n\n if (inContext.getCount() == KIRuntime.MAX_EXECUTION_ITERATIONS)\n throw new KIRuntimeException('Execution locked in an infinite loop');\n }\n\n if (!eGraph.isSubGraph() && !inContext.getEvents()?.size) {\n const eventMap = this.getSignature().getEvents();\n if (eventMap.size && eventMap.get(Event.OUTPUT)?.getParameters()?.size)\n throw new KIRuntimeException('No events raised');\n }\n\n const er: EventResult[] = Array.from(inContext.getEvents()?.entries() ?? []).flatMap((e) =>\n e[1].map((v) => EventResult.of(e[0], v)),\n );\n\n if (er.length || eGraph.isSubGraph()) return new FunctionOutput(er);\n else return new FunctionOutput([EventResult.of(Event.OUTPUT, new Map<string, any>())]);\n }\n\n private async processExecutionQue(\n inContext: FunctionExecutionParameters,\n executionQue: LinkedList<GraphVertex<string, StatementExecution>>,\n branchQue: LinkedList<\n Tuple4<\n ExecutionGraph<string, StatementExecution>,\n Tuple2<string, string>[],\n FunctionOutput,\n GraphVertex<string, StatementExecution>\n >\n >,\n ) {\n if (!executionQue.isEmpty()) {\n let vertex: GraphVertex<string, StatementExecution> = executionQue.pop();\n\n if (!(await this.allDependenciesResolvedVertex(vertex, inContext.getSteps()!)))\n executionQue.add(vertex);\n else\n await this.executeVertex(\n vertex,\n inContext,\n branchQue,\n executionQue,\n inContext.getFunctionRepository(),\n );\n }\n }\n\n private async processBranchQue(\n inContext: FunctionExecutionParameters,\n executionQue: LinkedList<GraphVertex<string, StatementExecution>>,\n branchQue: LinkedList<\n Tuple4<\n ExecutionGraph<string, StatementExecution>,\n Tuple2<string, string>[],\n FunctionOutput,\n GraphVertex<string, StatementExecution>\n >\n >,\n ) {\n if (branchQue.length) {\n let branch: Tuple4<\n ExecutionGraph<string, StatementExecution>,\n Tuple2<string, string>[],\n FunctionOutput,\n GraphVertex<string, StatementExecution>\n > = branchQue.pop();\n\n if (!(await this.allDependenciesResolvedTuples(branch.getT2(), inContext.getSteps()!)))\n branchQue.add(branch);\n else await this.executeBranch(inContext, executionQue, branch);\n }\n }\n\n private async executeBranch(\n inContext: FunctionExecutionParameters,\n executionQue: LinkedList<GraphVertex<string, StatementExecution>>,\n branch: Tuple4<\n ExecutionGraph<string, StatementExecution>,\n Tuple2<string, string>[],\n FunctionOutput,\n GraphVertex<string, StatementExecution>\n >,\n ) {\n let vertex: GraphVertex<string, StatementExecution> = branch.getT4();\n let nextOutput: EventResult | undefined = undefined;\n\n do {\n await this.executeGraph(branch.getT1(), inContext);\n nextOutput = branch.getT3().next();\n\n if (nextOutput) {\n if (!inContext.getSteps()?.has(vertex.getData().getStatement().getStatementName()))\n inContext\n .getSteps()\n ?.set(vertex.getData().getStatement().getStatementName(), new Map());\n\n inContext\n .getSteps()\n ?.get(vertex.getData().getStatement().getStatementName())\n ?.set(\n nextOutput.getName(),\n this.resolveInternalExpressions(nextOutput.getResult(), inContext),\n );\n\n if (this.debugMode) {\n const s = vertex.getData().getStatement();\n console.log(\n `EID: ${inContext.getExecutionId()} Step : ${s.getStatementName()} => ${s.getNamespace()}.${s.getName()}`,\n );\n console.log(\n `EID: ${inContext.getExecutionId()} Event : ${nextOutput.getName()} : `,\n inContext.getSteps()!.get(s.getStatementName())!.get(nextOutput.getName()),\n );\n }\n }\n } while (nextOutput && nextOutput.getName() != Event.OUTPUT);\n\n if (nextOutput?.getName() == Event.OUTPUT && vertex.getOutVertices().has(Event.OUTPUT)) {\n (vertex?.getOutVertices()?.get(Event.OUTPUT) ?? []).forEach(async (e) => {\n if (await this.allDependenciesResolvedVertex(e, inContext.getSteps()!))\n executionQue.add(e);\n });\n }\n }\n\n private async executeVertex(\n vertex: GraphVertex<string, StatementExecution>,\n inContext: FunctionExecutionParameters,\n branchQue: LinkedList<\n Tuple4<\n ExecutionGraph<string, StatementExecution>,\n Tuple2<string, string>[],\n FunctionOutput,\n GraphVertex<string, StatementExecution>\n >\n >,\n executionQue: LinkedList<GraphVertex<string, StatementExecution>>,\n fRepo: Repository<Function>,\n ) {\n let s: Statement = vertex.getData().getStatement();\n\n if (s.getExecuteIftrue().size) {\n const allTrue = (Array.from(s.getExecuteIftrue().entries()) ?? [])\n .filter((e) => e[1])\n .map(([e]) => {\n const v = new ExpressionEvaluator(e).evaluate(inContext.getValuesMap());\n return v;\n })\n .every((e) => !isNullValue(e) && e !== false);\n\n if (!allTrue) return;\n }\n\n let fun: Function | undefined = await fRepo.find(s.getNamespace(), s.getName());\n\n if (!fun) {\n throw new KIRuntimeException(\n StringFormatter.format('$.$ function is not found.', s.getNamespace(), s.getName()),\n );\n }\n\n let paramSet: Map<string, Parameter> | undefined = fun?.getSignature().getParameters();\n\n let args: Map<string, any> = this.getArgumentsFromParametersMap(\n inContext,\n s,\n paramSet ?? new Map(),\n );\n\n if (this.debugMode) {\n console.log(\n `EID: ${inContext.getExecutionId()} Step : ${s.getStatementName()} => ${s.getNamespace()}.${s.getName()}`,\n );\n console.log(`EID: ${inContext.getExecutionId()} Arguments : `, args);\n }\n\n let context: Map<string, ContextElement> = inContext.getContext()!;\n let fep: FunctionExecutionParameters;\n\n if (fun instanceof KIRuntime) {\n fep = new FunctionExecutionParameters(\n inContext.getFunctionRepository(),\n inContext.getSchemaRepository(),\n `${inContext.getExecutionId()}_${s.getStatementName()}`,\n )\n .setArguments(args)\n .setValuesMap(\n new Map(\n Array.from(inContext.getValuesMap().values())\n .filter(\n (e) =>\n e.getPrefix() !== ArgumentsTokenValueExtractor.PREFIX &&\n e.getPrefix() !== OutputMapTokenValueExtractor.PREFIX &&\n e.getPrefix() !== ContextTokenValueExtractor.PREFIX,\n )\n .map((e) => [e.getPrefix(), e]),\n ),\n );\n } else {\n fep = new FunctionExecutionParameters(\n inContext.getFunctionRepository(),\n inContext.getSchemaRepository(),\n inContext.getExecutionId(),\n )\n .setValuesMap(inContext.getValuesMap())\n .setContext(context)\n .setArguments(args)\n .setEvents(inContext.getEvents()!)\n .setSteps(inContext.getSteps()!)\n .setStatementExecution(vertex.getData())\n .setCount(inContext.getCount())\n .setExecutionContext(inContext.getExecutionContext());\n }\n\n let result: FunctionOutput = await fun.execute(fep);\n\n let er: EventResult | undefined = result.next();\n\n if (!er)\n throw new KIRuntimeException(\n StringFormatter.format('Executing $ returned no events', s.getStatementName()),\n );\n\n let isOutput: boolean = er.getName() == Event.OUTPUT;\n\n if (!inContext.getSteps()?.has(s.getStatementName())) {\n inContext.getSteps()!.set(s.getStatementName(), new Map());\n }\n\n inContext\n .getSteps()!\n .get(s.getStatementName())!\n .set(er.getName(), this.resolveInternalExpressions(er.getResult(), inContext));\n\n if (this.debugMode) {\n console.log(\n `EID: ${inContext.getExecutionId()} Step : ${s.getStatementName()} => ${s.getNamespace()}.${s.getName()}`,\n );\n console.log(\n `EID: ${inContext.getExecutionId()} Event : ${er.getName()} : `,\n inContext.getSteps()!.get(s.getStatementName())!.get(er.getName()),\n );\n }\n\n if (!isOutput) {\n let subGraph = vertex.getSubGraphOfType(er.getName());\n let unResolvedDependencies: Tuple2<string, string>[] = this.makeEdges(subGraph).getT1();\n branchQue.push(new Tuple4(subGraph, unResolvedDependencies, result, vertex));\n } else {\n let out: Set<GraphVertex<string, StatementExecution>> | undefined = vertex\n .getOutVertices()\n .get(Event.OUTPUT);\n if (out)\n out.forEach(async (e) => {\n if (await this.allDependenciesResolvedVertex(e, inContext.getSteps()!))\n executionQue.add(e);\n });\n }\n }\n\n private resolveInternalExpressions(\n result: Map<string, any>,\n inContext: FunctionExecutionParameters,\n ): Map<string, any> {\n if (!result) return result;\n\n return Array.from(result.entries())\n .map((e) => new Tuple2(e[0], this.resolveInternalExpression(e[1], inContext)))\n .reduce((a, c) => {\n a.set(c.getT1(), c.getT2());\n return a;\n }, new Map());\n }\n\n private resolveInternalExpression(value: any, inContext: FunctionExecutionParameters): any {\n if (isNullValue(value) || typeof value != 'object') return value;\n\n if (value instanceof JsonExpression) {\n let exp: ExpressionEvaluator = new ExpressionEvaluator(\n (value as JsonExpression).getExpression(),\n );\n return exp.evaluate(inContext.getValuesMap());\n }\n\n if (Array.isArray(value)) {\n let retArray: any[] = [];\n\n for (let obj of value) {\n retArray.push(this.resolveInternalExpression(obj, inContext));\n }\n\n return retArray;\n }\n\n if (typeof value === 'object') {\n let retObject: any = {};\n\n for (let entry of Object.entries(value)) {\n retObject[entry[0]] = this.resolveInternalExpression(entry[1], inContext);\n }\n\n return retObject;\n }\n\n return undefined;\n }\n\n private allDependenciesResolvedTuples(\n unResolvedDependencies: Tuple2<string, string>[],\n output: Map<string, Map<string, Map<string, any>>>,\n ): boolean {\n for (let tup of unResolvedDependencies) {\n if (!output.has(tup.getT1())) return false;\n if (!output.get(tup.getT1())?.get(tup.getT2())) return false;\n }\n\n return true;\n }\n\n private allDependenciesResolvedVertex(\n vertex: GraphVertex<string, StatementExecution>,\n output: Map<string, Map<string, Map<string, any>>>,\n ): boolean {\n if (!vertex.getInVertices().size) return true;\n\n return (\n Array.from(vertex.getInVertices()).filter((e) => {\n let stepName: string = e.getT1().getData().getStatement().getStatementName();\n let type: string = e.getT2();\n\n return !(output.has(stepName) && output.get(stepName)?.has(type));\n }).length == 0\n );\n }\n\n private getArgumentsFromParametersMap(\n inContext: FunctionExecutionParameters,\n s: Statement,\n paramSet: Map<string, Parameter>,\n ): Map<string, any> {\n return Array.from(s.getParameterMap().entries())\n .map((e) => {\n let prList: ParameterReference[] = Array.from(e[1]?.values() ?? []);\n\n let ret: any = undefined;\n\n if (!prList?.length) return new Tuple2(e[0], ret);\n\n let pDef: Parameter | undefined = paramSet.get(e[0]);\n\n if (!pDef) return new Tuple2(e[0], undefined);\n\n if (pDef.isVariableArgument()) {\n ret = prList\n .sort((a, b) => (a.getOrder() ?? 0) - (b.getOrder() ?? 0))\n .filter((r) => !isNullValue(r))\n .map((r) => this.parameterReferenceEvaluation(inContext, r))\n .flatMap((r) => (Array.isArray(r) ? r : [r]));\n } else {\n ret = this.parameterReferenceEvaluation(inContext, prList[0]);\n }\n\n return new Tuple2(e[0], ret);\n })\n .filter((e) => !isNullValue(e.getT2()))\n .reduce((a, c) => {\n a.set(c.getT1(), c.getT2());\n return a;\n }, new Map());\n }\n\n private parameterReferenceEvaluation(\n inContext: FunctionExecutionParameters,\n ref: ParameterReference,\n ): any {\n let ret: any = undefined;\n\n if (ref.getType() == ParameterReferenceType.VALUE) {\n ret = this.resolveInternalExpression(ref.getValue(), inContext);\n } else if (\n ref.getType() == ParameterReferenceType.EXPRESSION &&\n !StringUtil.isNullOrBlank(ref.getExpression())\n ) {\n let exp: ExpressionEvaluator = new ExpressionEvaluator(ref.getExpression() ?? '');\n ret = exp.evaluate(inContext.getValuesMap());\n }\n return ret;\n }\n\n private async prepareStatementExecution(\n s: Statement,\n fRepo: Repository<Function>,\n sRepo: Repository<Schema>,\n ): Promise<StatementExecution> {\n let se: StatementExecution = new StatementExecution(s);\n\n let fun: Function | undefined = await fRepo.find(s.getNamespace(), s.getName());\n\n if (!fun) {\n se.addMessage(\n StatementMessageType.ERROR,\n StringFormatter.format('$.$ is not available', s.getNamespace(), s.getName()),\n );\n return Promise.resolve(se);\n }\n\n let paramSet: Map<string, Parameter> = new Map(fun.getSignature().getParameters());\n if (!s.getParameterMap()) return Promise.resolve(se);\n for (let param of Array.from(s.getParameterMap().entries())) {\n let p: Parameter | undefined = paramSet.get(param[0]);\n if (!p) continue;\n\n let refList: ParameterReference[] = Array.from(param[1]?.values() ?? []);\n\n if (!refList.length && !p.isVariableArgument()) {\n if (!(await SchemaUtil.hasDefaultValueOrNullSchemaType(p.getSchema(), sRepo)))\n se.addMessage(\n StatementMessageType.ERROR,\n StringFormatter.format(\n KIRuntime.PARAMETER_NEEDS_A_VALUE,\n p.getParameterName(),\n ),\n );\n paramSet.delete(p.getParameterName());\n continue;\n }\n\n if (p.isVariableArgument()) {\n refList.sort((a, b) => (a.getOrder() ?? 0) - (b.getOrder() ?? 0));\n for (let ref of refList) this.parameterReferenceValidation(se, p, ref, sRepo);\n } else if (refList.length) {\n let ref: ParameterReference = refList[0];\n this.parameterReferenceValidation(se, p, ref, sRepo);\n }\n\n paramSet.delete(p.getParameterName());\n }\n\n if (!isNullValue(se.getStatement().getDependentStatements())) {\n for (let statement of se.getStatement().getDependentStatements().entries())\n if (statement[1]) se.addDependency(statement[0]);\n }\n\n if (!isNullValue(se.getStatement().getExecuteIftrue())) {\n for (let statement of se.getStatement().getExecuteIftrue().entries())\n if (statement[1]) this.addDependencies(se, statement[0]);\n }\n\n if (paramSet.size) {\n for (let param of Array.from(paramSet.values())) {\n if (param.isVariableArgument()) continue;\n if (!(await SchemaUtil.hasDefaultValueOrNullSchemaType(param.getSchema(), sRepo)))\n se.addMessage(\n StatementMessageType.ERROR,\n StringFormatter.format(\n KIRuntime.PARAMETER_NEEDS_A_VALUE,\n param.getParameterName(),\n ),\n );\n }\n }\n\n return Promise.resolve(se);\n }\n\n private async parameterReferenceValidation(\n se: StatementExecution,\n p: Parameter,\n ref: ParameterReference,\n sRepo: Repository<Schema>,\n ): Promise<void> {\n // Breaking this execution doesn't make sense.\n\n if (!ref) {\n if (isNullValue(await SchemaUtil.getDefaultValue(p.getSchema(), sRepo)))\n se.addMessage(\n StatementMessageType.ERROR,\n StringFormatter.format(KIRuntime.PARAMETER_NEEDS_A_VALUE, p.getParameterName()),\n );\n } else if (ref.getType() == ParameterReferenceType.VALUE) {\n if (\n isNullValue(ref.getValue()) &&\n !(await SchemaUtil.hasDefaultValueOrNullSchemaType(p.getSchema(), sRepo))\n )\n se.addMessage(\n StatementMessageType.ERROR,\n StringFormatter.format(KIRuntime.PARAMETER_NEEDS_A_VALUE, p.getParameterName()),\n );\n\n if (isNullValue(ref.getValue())) return;\n\n let paramElements: LinkedList<Tuple2<Schema, any>> = new LinkedList();\n paramElements.push(new Tuple2(p.getSchema(), ref.getValue()));\n\n while (!paramElements.isEmpty()) {\n let e: Tuple2<Schema, any> = paramElements.pop();\n\n if (e.getT2() instanceof JsonExpression) {\n this.addDependencies(se, (e.getT2() as JsonExpression).getExpression());\n } else {\n if (isNullValue(e.getT1()) || isNullValue(e.getT1().getType())) continue;\n\n if (\n e.getT1().getType()?.contains(SchemaType.ARRAY) &&\n Array.isArray(e.getT2())\n ) {\n let ast: ArraySchemaType | undefined = e.getT1().getItems();\n if (!ast) {\n continue;\n }\n if (ast.isSingleType()) {\n for (let je of e.getT2())\n paramElements.push(new Tuple2(ast.getSingleSchema()!, je));\n } else {\n let array: any[] = e.getT2() as any[];\n for (let i = 0; i < array.length; i++) {\n paramElements.push(new Tuple2(ast.getTupleSchema()![i], array[i]));\n }\n }\n } else if (\n e.getT1().getType()?.contains(SchemaType.OBJECT) &&\n typeof e.getT2() == 'object'\n ) {\n let sch: Schema = e.getT1();\n\n if (\n sch.getName() === Parameter.EXPRESSION.getName() &&\n sch.getNamespace() === Parameter.EXPRESSION.getNamespace()\n ) {\n let obj = e.getT2();\n let isExpression: boolean = obj['isExpression'];\n if (isExpression) {\n this.addDependencies(se, obj['value']);\n }\n } else {\n if (sch.getProperties()) {\n for (let entry of Object.entries(e.getT2())) {\n if (!sch.getProperties()!.has(entry[0])) continue;\n paramElements.push(\n new Tuple2(sch.getProperties()!.get(entry[0])!, entry[1]),\n );\n }\n }\n }\n }\n }\n }\n } else if (ref.getType() == ParameterReferenceType.EXPRESSION) {\n if (StringUtil.isNullOrBlank(ref.getExpression())) {\n if (isNullValue(SchemaUtil.getDefaultValue(p.getSchema(), sRepo)))\n se.addMessage(\n StatementMessageType.ERROR,\n StringFormatter.format(\n KIRuntime.PARAMETER_NEEDS_A_VALUE,\n p.getParameterName(),\n ),\n );\n } else {\n try {\n // TODO: Type check for the resulting expression has to be done here...\n this.addDependencies(se, ref.getExpression());\n } catch (err) {\n se.addMessage(\n StatementMessageType.ERROR,\n StringFormatter.format('Error evaluating $ : $', ref.getExpression(), err),\n );\n }\n }\n }\n }\n\n private addDependencies(se: StatementExecution, expression: string | undefined): void {\n if (!expression) return;\n\n Array.from(expression.match(KIRuntime.STEP_REGEX_PATTERN) ?? []).forEach((e) =>\n se.addDependency(e),\n );\n }\n\n public makeEdges(\n graph: ExecutionGraph<string, StatementExecution>,\n ): Tuple2<Tuple2<string, string>[], Map<string, string>> {\n let values = graph.getNodeMap().values();\n\n let retValue: Tuple2<string, string>[] = [];\n let retMap: Map<string, string> = new Map();\n\n for (let e of Array.from(values)) {\n for (let d of e.getData().getDependencies()) {\n let secondDot: number = d.indexOf('.', 6);\n let step: string = d.substring(6, secondDot);\n let eventDot: number = d.indexOf('.', secondDot + 1);\n let event: string =\n eventDot == -1\n ? d.substring(secondDot + 1)\n : d.substring(secondDot + 1, eventDot);\n\n if (!graph.getNodeMap().has(step)) {\n retValue.push(new Tuple2(step, event));\n retMap.set(\n e.getData().getStatement().getStatementName(),\n\n StringFormatter.format('Unable to find the step with name $', step),\n );\n } else e.addInEdgeTo(graph.getNodeMap().get(step)!, event);\n }\n }\n\n return new Tuple2(retValue, retMap);\n }\n}\n","export class KIRunConstants {\n public static readonly NAMESPACE: String = 'namespace';\n public static readonly NAME: String = 'name';\n public static readonly ID: String = 'id';\n\n private constructor() {}\n}\n","import { Schema } from '../json/schema/Schema';\nimport { SchemaType } from '../json/schema/type/SchemaType';\nimport { TypeUtil } from '../json/schema/type/TypeUtil';\nimport { Namespaces } from '../namespaces/Namespaces';\n\nexport class Position {\n public static readonly SCHEMA_NAME: string = 'Position';\n public static readonly SCHEMA: Schema = new Schema()\n .setNamespace(Namespaces.SYSTEM)\n .setName(Position.SCHEMA_NAME)\n .setType(TypeUtil.of(SchemaType.OBJECT))\n .setProperties(\n new Map([\n ['left', Schema.ofFloat('left')],\n ['top', Schema.ofFloat('top')],\n ]),\n );\n private left: number;\n private top: number;\n\n public constructor(left: number, top: number) {\n this.left = left;\n this.top = top;\n }\n\n public getLeft(): number {\n return this.left;\n }\n public setLeft(left: number): Position {\n this.left = left;\n return this;\n }\n public getTop(): number {\n return this.top;\n }\n public setTop(top: number): Position {\n this.top = top;\n return this;\n }\n\n public static from(json: any): Position | undefined {\n if (!json) return undefined;\n return new Position(json.left, json.top);\n }\n}\n","import { Position } from './Position';\n\nexport class AbstractStatement {\n private comment?: string;\n private description?: string;\n private position?: Position;\n private override: boolean = false;\n\n public constructor(ast?: AbstractStatement) {\n if (!ast) return;\n this.comment = ast.comment;\n this.description = ast.description;\n this.position = ast.position\n ? new Position(ast.position.getLeft(), ast.position.getTop())\n : undefined;\n this.override = ast.override;\n }\n\n public getComment(): string | undefined {\n return this.comment;\n }\n public setComment(comment: string): AbstractStatement {\n this.comment = comment;\n return this;\n }\n public isOverride(): boolean {\n return this.override;\n }\n\n public setOverride(override: boolean): AbstractStatement {\n this.override = override;\n return this;\n }\n\n public getDescription(): string | undefined {\n return this.description;\n }\n public setDescription(description: string): AbstractStatement {\n this.description = description;\n return this;\n }\n public getPosition(): Position | undefined {\n return this.position;\n }\n public setPosition(position: Position | undefined): AbstractStatement {\n this.position = position;\n return this;\n }\n}\n","import { Schema } from '../json/schema/Schema';\nimport { SchemaType } from '../json/schema/type/SchemaType';\nimport { TypeUtil } from '../json/schema/type/TypeUtil';\nimport { Namespaces } from '../namespaces/Namespaces';\nimport { isNullValue } from '../util/NullCheck';\nimport UUID from '../util/UUID';\nimport { ParameterReferenceType } from './ParameterReferenceType';\n\nexport class ParameterReference {\n private static readonly SCHEMA_NAME: string = 'ParameterReference';\n public static readonly SCHEMA: Schema = new Schema()\n .setNamespace(Namespaces.SYSTEM)\n .setName(ParameterReference.SCHEMA_NAME)\n .setType(TypeUtil.of(SchemaType.OBJECT))\n .setProperties(\n new Map([\n ['key', Schema.ofString('key')],\n ['value', Schema.ofAny('value')],\n ['expression', Schema.ofString('expression')],\n ['type', Schema.ofString('type').setEnums(['EXPRESSION', 'VALUE'])],\n ['order', Schema.ofInteger('order')],\n ]),\n );\n\n private key: string;\n private type: ParameterReferenceType;\n private value: any;\n private expression?: string;\n private order?: number;\n\n constructor(type: ParameterReferenceType | ParameterReference) {\n if (type instanceof ParameterReference) {\n let pv = type as ParameterReference;\n this.key = pv.key;\n this.type = pv.type;\n this.value = isNullValue(pv.value) ? undefined : JSON.parse(JSON.stringify(pv.value));\n this.expression = pv.expression;\n this.order = pv.order;\n } else {\n this.type = type as ParameterReferenceType;\n this.key = UUID();\n }\n }\n\n public getType(): ParameterReferenceType {\n return this.type;\n }\n public setType(type: ParameterReferenceType): ParameterReference {\n this.type = type;\n return this;\n }\n\n public getKey(): string {\n return this.key;\n }\n public setKey(key: string): ParameterReference {\n this.key = key;\n return this;\n }\n\n public getValue(): any {\n return this.value;\n }\n public setValue(value: any): ParameterReference {\n this.value = value;\n return this;\n }\n public getExpression(): string | undefined {\n return this.expression;\n }\n public setExpression(expression: string): ParameterReference {\n this.expression = expression;\n return this;\n }\n\n public setOrder(order: number): ParameterReference {\n this.order = order;\n return this;\n }\n public getOrder(): number | undefined {\n return this.order;\n }\n\n public static ofExpression(value: any): [string, ParameterReference] {\n const param = new ParameterReference(ParameterReferenceType.EXPRESSION).setExpression(\n value,\n );\n return [param.getKey(), param];\n }\n\n public static ofValue(value: any): [string, ParameterReference] {\n const param = new ParameterReference(ParameterReferenceType.VALUE).setValue(value);\n return [param.getKey(), param];\n }\n\n public static from(e: any): ParameterReference {\n return new ParameterReference(e.type)\n .setValue(e.value)\n .setExpression(e.expression)\n .setKey(e.key)\n .setOrder(e.order);\n }\n}\n","import { AdditionalType, Schema } from '../json/schema/Schema';\nimport { SchemaType } from '../json/schema/type/SchemaType';\nimport { TypeUtil } from '../json/schema/type/TypeUtil';\nimport { Namespaces } from '../namespaces/Namespaces';\nimport { AbstractStatement } from './AbstractStatement';\nimport { ParameterReference } from './ParameterReference';\nimport { Position } from './Position';\n\nexport class Statement extends AbstractStatement {\n public static readonly SCHEMA_NAME: string = 'Statement';\n public static readonly SCHEMA: Schema = new Schema()\n .setNamespace(Namespaces.SYSTEM)\n .setName(Statement.SCHEMA_NAME)\n .setType(TypeUtil.of(SchemaType.OBJECT))\n .setProperties(\n new Map([\n ['statementName', Schema.ofString('statementName')],\n ['comment', Schema.ofString('comment')],\n ['description', Schema.ofString('description')],\n ['namespace', Schema.ofString('namespace')],\n ['name', Schema.ofString('name')],\n [\n 'dependentStatements',\n Schema.ofObject('dependentstatement')\n .setAdditionalProperties(\n new AdditionalType().setSchemaValue(Schema.ofBoolean('exists')),\n )\n .setDefaultValue({}),\n ],\n [\n 'executeIftrue',\n Schema.ofObject('executeIftrue')\n .setAdditionalProperties(\n new AdditionalType().setSchemaValue(Schema.ofBoolean('exists')),\n )\n .setDefaultValue({}),\n ],\n [\n 'parameterMap',\n new Schema()\n .setName('parameterMap')\n .setAdditionalProperties(\n new AdditionalType().setSchemaValue(\n Schema.ofObject('parameterReference').setAdditionalProperties(\n new AdditionalType().setSchemaValue(ParameterReference.SCHEMA),\n ),\n ),\n ),\n ],\n ['position', Position.SCHEMA],\n ]),\n );\n private statementName: string;\n private namespace: string;\n private name: string;\n private parameterMap?: Map<string, Map<string, ParameterReference>>;\n private dependentStatements?: Map<string, boolean>;\n private executeIftrue?: Map<string, boolean>;\n\n public constructor(sn: string | Statement, namespace?: string, name?: string) {\n super(sn instanceof Statement ? (sn as Statement) : undefined);\n\n if (sn instanceof Statement) {\n let x = sn as Statement;\n this.statementName = x.statementName;\n this.name = x.name;\n this.namespace = x.namespace;\n if (x.parameterMap)\n this.parameterMap = new Map(\n Array.from(x.parameterMap.entries()).map((f) => [\n f[0],\n new Map(\n Array.from(f[1].entries()).map((e) => [\n e[0],\n new ParameterReference(e[1]),\n ]),\n ),\n ]),\n );\n\n if (x.dependentStatements) {\n this.dependentStatements = new Map(Array.from(x.dependentStatements.entries()));\n }\n } else {\n this.statementName = sn;\n if (!name || !namespace) {\n throw new Error('Unknown constructor');\n }\n this.namespace = namespace;\n this.name = name;\n }\n }\n\n public getStatementName(): string {\n return this.statementName;\n }\n public setStatementName(statementName: string): Statement {\n this.statementName = statementName;\n return this;\n }\n public getNamespace(): string {\n return this.namespace;\n }\n public setNamespace(namespace: string): Statement {\n this.namespace = namespace;\n return this;\n }\n public getName(): string {\n return this.name;\n }\n public setName(name: string): Statement {\n this.name = name;\n return this;\n }\n public getParameterMap(): Map<string, Map<string, ParameterReference>> {\n if (!this.parameterMap) {\n this.parameterMap = new Map();\n }\n return this.parameterMap;\n }\n public setParameterMap(parameterMap: Map<string, Map<string, ParameterReference>>): Statement {\n this.parameterMap = parameterMap;\n return this;\n }\n\n public getDependentStatements(): Map<string, boolean> {\n return this.dependentStatements ?? new Map();\n }\n\n public setDependentStatements(dependentStatements: Map<string, boolean>): Statement {\n this.dependentStatements = dependentStatements;\n return this;\n }\n\n public getExecuteIftrue(): Map<string, boolean> {\n return this.executeIftrue ?? new Map();\n }\n\n public setExecuteIftrue(executeIftrue: Map<string, boolean>): Statement {\n this.executeIftrue = executeIftrue;\n return this;\n }\n\n public equals(obj: any): boolean {\n if (!(obj instanceof Statement)) return false;\n let s: Statement = obj as Statement;\n return s.statementName == this.statementName;\n }\n\n public static ofEntry(statement: Statement): [string, Statement] {\n return [statement.statementName, statement];\n }\n\n public static from(json: any): Statement {\n return new Statement(json.statementName, json.namespace, json.name)\n .setParameterMap(\n new Map<string, Map<string, ParameterReference>>(\n Object.entries(json.parameterMap ?? {}).map(([k, v]: [string, any]) => [\n k,\n new Map<string, ParameterReference>(\n Object.entries(v ?? {})\n .map(([_, iv]) => ParameterReference.from(iv))\n .map((e) => [e.getKey(), e]),\n ),\n ]),\n ),\n )\n .setDependentStatements(\n new Map<string, boolean>(Object.entries(json.dependentStatements ?? {})),\n )\n .setExecuteIftrue(new Map<string, boolean>(Object.entries(json.executeIftrue ?? {})))\n .setPosition(Position.from(json.position))\n .setComment(json.comment)\n .setDescription(json.description) as Statement;\n }\n}\n","import { Schema } from '../json/schema/Schema';\nimport { SchemaType } from '../json/schema/type/SchemaType';\nimport { TypeUtil } from '../json/schema/type/TypeUtil';\nimport { Namespaces } from '../namespaces/Namespaces';\nimport { AbstractStatement } from './AbstractStatement';\nimport { Position } from './Position';\nimport { Statement } from './Statement';\n\nexport class StatementGroup extends AbstractStatement {\n private static readonly SCHEMA_NAME: string = 'StatementGroup';\n public static readonly SCHEMA: Schema = new Schema()\n .setNamespace(Namespaces.SYSTEM)\n .setName(StatementGroup.SCHEMA_NAME)\n .setType(TypeUtil.of(SchemaType.OBJECT))\n .setProperties(\n new Map([\n ['statementGroupName', Schema.ofString('statementGroupName')],\n ['comment', Schema.ofString('comment')],\n ['description', Schema.ofString('description')],\n ['position', Position.SCHEMA],\n ]),\n );\n\n private statementGroupName: string;\n private statements: Map<string, boolean>;\n\n constructor(statementGroupName: string, statements: Map<string, boolean> = new Map()) {\n super();\n this.statementGroupName = statementGroupName;\n this.statements = statements;\n }\n\n public getStatementGroupName(): string {\n return this.statementGroupName;\n }\n public setStatementGroupName(statementGroupName: string): StatementGroup {\n this.statementGroupName = statementGroupName;\n return this;\n }\n\n public getStatements(): Map<string, boolean> {\n return this.statements;\n }\n\n public setStatements(statements: Map<string, boolean>): StatementGroup {\n this.statements = statements;\n return this;\n }\n\n public static from(json: any): StatementGroup {\n return new StatementGroup(\n json.statementGroupName,\n new Map(\n Object.entries(json.statements || {}).map(([k, v]) => [\n k,\n ('' + v)?.toLowerCase() == 'true',\n ]),\n ),\n )\n .setPosition(Position.from(json.position))\n .setComment(json.comment)\n .setDescription(json.description) as StatementGroup;\n }\n}\n","import { AdditionalType, Schema } from '../json/schema/Schema';\nimport { Namespaces } from '../namespaces/Namespaces';\nimport { Event } from './Event';\nimport { FunctionSignature } from './FunctionSignature';\nimport { Parameter } from './Parameter';\nimport { Statement } from './Statement';\nimport { StatementGroup } from './StatementGroup';\n\nconst SCHEMA_NAME1: string = 'FunctionDefinition';\nconst IN_SCHEMA = new Schema()\n .setNamespace(Namespaces.SYSTEM)\n .setName(SCHEMA_NAME1)\n .setProperties(\n new Map([\n ['name', Schema.ofString('name')],\n ['namespace', Schema.ofString('namespace')],\n ['parameters', Schema.ofArray('parameters', Parameter.SCHEMA)],\n [\n 'events',\n Schema.ofObject('events').setAdditionalProperties(\n new AdditionalType().setSchemaValue(Event.SCHEMA),\n ),\n ],\n [\n 'steps',\n Schema.ofObject('steps').setAdditionalProperties(\n new AdditionalType().setSchemaValue(Statement.SCHEMA),\n ),\n ],\n ]),\n );\n\nIN_SCHEMA.getProperties()?.set('parts', Schema.ofArray('parts', IN_SCHEMA));\n\nexport class FunctionDefinition extends FunctionSignature {\n public static readonly SCHEMA: Schema = IN_SCHEMA;\n private version: number = 1;\n private steps?: Map<string, Statement>;\n private stepGroups?: Map<string, StatementGroup>;\n private parts?: FunctionDefinition[];\n\n constructor(name: string) {\n super(name);\n }\n\n public getVersion(): number {\n return this.version;\n }\n public setVersion(version: number): FunctionDefinition {\n this.version = version;\n return this;\n }\n public getSteps(): Map<string, Statement> {\n return this.steps ?? new Map();\n }\n public setSteps(steps: Map<string, Statement>): FunctionDefinition {\n this.steps = steps;\n return this;\n }\n public getStepGroups(): Map<string, StatementGroup> | undefined {\n return this.stepGroups;\n }\n public setStepGroups(stepGroups: Map<string, StatementGroup>): FunctionDefinition {\n this.stepGroups = stepGroups;\n return this;\n }\n\n public getParts(): FunctionDefinition[] | undefined {\n return this.parts;\n }\n\n public setParts(parts: FunctionDefinition[]): FunctionDefinition {\n this.parts = parts;\n return this;\n }\n\n public static from(json: any): FunctionDefinition {\n if (!json) return new FunctionDefinition('unknown');\n return new FunctionDefinition(json.name)\n .setSteps(\n new Map(\n Object.values(json.steps ?? {})\n .filter((e) => !!e)\n .map((e: any) => [e.statementName, Statement.from(e)]),\n ),\n )\n .setStepGroups(\n new Map(\n Object.values(json.stepGroups ?? {})\n .filter((e) => !!e)\n .map((e: any) => [e.statementGroupName, StatementGroup.from(e)]),\n ),\n )\n .setParts(\n Array.from(json.parts ?? [])\n .filter((e) => !!e)\n .map((e: any) => FunctionDefinition.from(e)),\n )\n .setVersion(json.version ?? 1)\n .setEvents(\n new Map(\n Object.values(json.events ?? {})\n .filter((e) => !!e)\n .map((e: any) => [e.name, Event.from(e)]),\n ),\n )\n .setParameters(\n new Map(\n Object.values(json.parameters ?? {})\n .filter((e) => !!e)\n .map((e: any) => [e.parameterName, Parameter.from(e)]),\n ),\n ) as FunctionDefinition;\n }\n}\n","export class Argument {\n private argumentIndex: number = 0;\n private name: string;\n private value: any;\n\n public constructor(argumentIndex: number, name: string, value?: any) {\n this.argumentIndex = argumentIndex;\n this.name = name;\n this.value = value;\n }\n public getArgumentIndex(): number {\n return this.argumentIndex;\n }\n public setArgumentIndex(argumentIndex: number): Argument {\n this.argumentIndex = argumentIndex;\n return this;\n }\n public getName(): string {\n return this.name;\n }\n public setName(name: string): Argument {\n this.name = name;\n return this;\n }\n public getValue(): any {\n return this.value;\n }\n public setValue(value: any): Argument {\n this.value = value;\n return this;\n }\n\n public static of(name: string, value: any): Argument {\n return new Argument(0, name, value);\n }\n}\n"],"names":["$8a594d771b312e20$export$2f21297dc8e7cb72","static","constructor","$2a3a5f1ffee8cae2$export$5c8592849d7f8589","v","$9f1223c9d2401e57$export$656411a496f80a09","ast","this","singleSchema","$4f41b14dd9cc12a6$export$19342e026b58ebb7","undefined","tupleSchema","map","e","setSingleSchema","schema","setTupleSchema","schemas","getSingleSchema","getTupleSchema","isSingleType","length","obj","Array","isArray","fromListOfSchemas","keys","Object","indexOf","from","x","$76109b55f55caedc$export$a1ec97982bccfa9d","SchemaType","$0c150e18a67dfd68$export$92738401e1603719","$0c97b87b09709a28$export$6d6eb186deb81c4","type","super","Set","getType","setType","getAllowedSchemaTypes","contains","has","$969c09698447bf9e$export$c62c2a2bbb80b6fa","$fc9151614d56f2b0$export$75f4a5a37c7a0a0f","types","$4f41b14dd9cc12a6$export$cb559bfee05f190","apt","booleanValue","schemaValue","getBooleanValue","getSchemaValue","setBooleanValue","setSchemaValue","ad","setNamespace","SYSTEM","setName","of","NULL","setConstant","STRING","setEnums","OBJECT","setProperties","Map","setDefaultValue","ofString","INTEGER","setAnyOf","TYPE_SCHEMA","ofArray","ofRef","ofAny","ofInteger","ofLong","ofNumber","setAdditionalProperties","ofBoolean","ofObject","setRef","setRequired","id","FLOAT","LONG","DOUBLE","BOOLEAN","ARRAY","ref","itemSchemas","setItems","list","push","retMap","entries","forEach","k","value","set","isStringSchema","namespace","name","version","anyOf","allOf","oneOf","not","description","examples","defaultValue","comment","enums","constant","pattern","format","minLength","maxLength","multipleOf","minimum","maximum","exclusiveMinimum","exclusiveMaximum","properties","fromMapOfSchemas","additionalProperties","required","propertyNames","minProperties","maxProperties","patternProperties","items","additionalItems","minContains","maxContains","minItems","maxItems","uniqueItems","$defs","permission","JSON","parse","stringify","getTitle","getFullName","get$defs","set$defs","getNamespace","getName","getVersion","setVersion","getRef","getAnyOf","getAllOf","setAllOf","getOneOf","setOneOf","getNot","setNot","getDescription","setDescription","getExamples","setExamples","getDefaultValue","getComment","setComment","getEnums","getConstant","getPattern","setPattern","getFormat","setFormat","getMinLength","setMinLength","getMaxLength","setMaxLength","getMultipleOf","setMultipleOf","getMinimum","setMinimum","getMaximum","setMaximum","getExclusiveMinimum","setExclusiveMinimum","getExclusiveMaximum","setExclusiveMaximum","getProperties","getAdditionalProperties","getAdditionalItems","setAdditionalItems","getRequired","getPropertyNames","setPropertyNames","getMinProperties","setMinProperties","getMaxProperties","setMaxProperties","getPatternProperties","setPatternProperties","getItems","getContains","setContains","getMinContains","setMinContains","getMaxContains","setMaxContains","getMinItems","setMinItems","getMaxItems","setMaxItems","getUniqueItems","setUniqueItems","getPermission","setPermission","$7bbe9150367150f2$export$e5a11051fe746f8a","Error","schemaPath","message","err","trim","cause","getSchemaPath","getCause","$705493e3317d01c0$export$c6903b1fb9c4306f","ParameterType","$938bec755a6b75e6$export$f817523eebf7ee7f","SCHEMA_NAME","SCHEMA","variableArgument","EXPRESSION","pn","parameterName","getSchema","setSchema","getParameterName","setParameterName","isVariableArgument","setVariableArgument","json","paramSchema","variableArguments","$a071b2350aab183a$var$map","ofDouble","ofFloat","$a071b2350aab183a$var$filterableNames","values","$a071b2350aab183a$export$a0de004d4b269741","async","Promise","resolve","get","filter","toLowerCase","$dd4326c6e006da35$export$2e2bcd8739ae039","fun","getSignature","$7ecb487721af7c67$export$92eaabd025f1e921","k1","v1","k2","v2","k3","v3","k4","v4","k5","v5","k6","v6","k7","v7","k8","v8","k9","v9","k10","v10","entry","$7ecb487721af7c67$export$4758715d917352b9","eachEntry","i","$970f7bbcafb2c50d$export$d61e24a684f9e51","evn","parameters","getParameters","setParameters","eventMapEntry","OUTPUT","eventName","eventSchema","$8bed54297f17864d$export$c45be2437182b0e3","result","getResult","setResult","$28804be3f1c4834a$export$37b1b5eb4f4f5ada","$c10c9982d8b7a6b8$export$46c58e8ae2505a7d","index","arg","fo","generator","next","er","allResults","$2e21ebbbef520683$export$6ac699b48d627131","events","getEvents","setEvents","$ea8539f6d865ce04$export$5a7f7b467323cd66","formatString","params","sb","ind","chr","prevchar","charAt","substring","toString","$3cb6da8eee9f96c7$export$f0ef28713f767754","head","tail","t","node","$3cb6da8eee9f96c7$var$Node","previous","pop","isEmpty","size","str","toArray","arr","peek","peekLast","getFirst","removeFirst","removeLast","n","addAll","add","bind","callbackfn","thisArg","newList","$2b39939b69590d5c$export$9cb4719e2e525b7a","y","xa","yb","a","b","typeOfA","typeOfB","entriesOfA","entriesOfB","$c99e079d9bc86c78$export$592e033edf5fafe4","c","occurance","$52215c513713acac$export$50073dc6080ec093","f","s","getT1","getT2","setT1","setT2","$52215c513713acac$export$82dc29c19cc50d89","getT3","setT3","$52215c513713acac$export$c0401e7e2326d13b","fr","getT4","setT4","$0ad73ab1d75e3eb4$export$18db27caa68e620c","sve","reduce","$c64d9d969a282a82$export$7eb0095ad5663979","sRepository","getSchemaFromRef","hasDefaultValueOrNullSchemaType","iteration","CYCLIC_REFERENCE_LIMIT_COUNTER","isNullOrBlank","startsWith","tuple","resolveExternalSchema","parts","split","resolveInternalSchema","inSchema","UNABLE_TO_RETRIVE_SCHEMA_FROM_REFERENCED_PATH","inSchem","nms","splitAtFirstOccurance","nmspnm","find","$50bf6810e5f92609$export$54412d5419e3f99d","parents","repository","element","flag","validate","$d84452374c548781$export$5ea2dbb44eae89d6","path","$5cbc9dc65a90aa0c$export$a006ee8cc7b6580a","array","checkMinMaxItems","checkItems","checkUniqueItems","checkContains","count","countContains","stopOnFirst","newParents","checkItemsInTupleSchema","checkAdditionalItems","additionalSchemaType","anySchemaType","checkEachItemInAdditionalItems","schemaType","$f16a0327a17a34fc$export$d74a5d77bac81ab5","$3356a5c800d1131a$export$cd3b7079b2ac4000","$d8e1a543f29ba7d8$export$5464fb7e86e4a9f1","extractNumber","checkRange","checkMultipleOf","Math","round","numberCompare","n1","n2","$37975652d3bbb152$export$e97b0a585a2ce29f","jsonObject","checkMinMaxProperties","checkPropertyNameSchema","checkRequired","checkProperties","checkPatternProperties","checkAddtionalProperties","key","compiledPatterns","keyPattern","RegExp","test","delete","each","hasOwnProperty","$540088a715acffc2$export$f22e7fe56db8ae03","StringFormat","$5b487331eeaf33e7$export$312ff19fe6f84b5e","TIME","patternMatcher","DATE","DATETIME","EMAIL","$180899b5bb1efe85$export$9ced0f77dc6abfd7","constantValidation","enumCheck","typeValidation","valid","$a1225b4e7799ebbf$export$6138b597adfac7c","args","schemaRepository","statementExecution","retmap","param","tup","validateArgument","signature","getStatement","getStatementName","jsonElement","context","validateArguments","getArguments","getSchemaRepository","getStatementExecution","setArguments","internalExecute","getProbableEventSignature","probableParameters","$2d10652ec26bbd34$export$d61d79577b849157","EVENT_INDEX_NAME","EVENT_RESULT_NAME","ofAnyNotNull","functionName","event","paramMap","SYSTEM_ARRAY","$6a207647bcd0ed26$export$e55b597c359d82cd","PARAMETER_ARRAY_SOURCE","PARAMETER_ARRAY_SECOND_SOURCE","EVENT_RESULT_ARRAY","source","secondSource","outputOf","$6464a6f7a4316278$export$fe845828af6718ad","PARAMETER_ANY","input","len","temp","$13a8559214d219e2$export$f33443386c43236a","$4e058298a8f3f696$export$50d5074000755e42","$99aa72cfcbe4f53f$export$3755dd8569265c2c","typof","findPrimitiveNumberType","num","Number","isInteger","cmp","compare","typofa","typofb","comparePrimitive","oa","ob","$8b01cb36cf71cf1b$export$72555ce28d3458cb","PARAMETER_ARRAY_SOURCE_PRIMITIVE","PARAMETER_INT_SOURCE_FROM","PARAMETER_FIND_PRIMITIVE","PARAMETER_INT_LENGTH","EVENT_INDEX","start","end","mid","floor","$4b7f15a0d24799be$export$bdb0fa2261d7dee1","removeList","splice","copy","$02a71c9f02060b30$export$2c1d9c1fe3e6577a","PARAMETER_ARRAY_FIND","PARAMETER_INT_FIND_FROM","EVENT_RESULT_INTEGER","srcfrom","findfrom","srcto","findto","x1","j","x2","typs","typf","s1","f1","$05e0e2201531b0c3$export$ecd5e8ace626722c","globalThis","structuredClone","$683a51fb2e860fa2$export$92ce62e1201c4fc0","PARAMETER_BOOLEAN_DEEP_COPY","deep","ja","$2719b8ef5e705acc$export$bfadae053a633538","PARAMETER_ANY_VAR_ARGS","receivedArgs","indexes","$13cf821feb23b277$export$3ad0a854c98d807c","shift","$20230fd2dc2ebf87$export$334b60f35a6b2d04","$6a75f007df4ad210$export$e0c0e69e6a36c9bf","$a94dd374bdc82c19$export$831f01f9797c5e1c","PARAMETER_INT_SECOND_SOURCE_FROM","firstSource","first","second","set1","set2","i1","set3","$161e5ca788865d1d$export$cb7a6a5305d39b11","EVENT_RESULT_BOOLEAN","execute","$7a0ddf3599db7518$export$ffffe40bfa0649a3","EVENT_RESULT_EMPTY","$2472d1ed42bdbbd9$export$44c95d3770756ed2","frequency","$937d82a8ed0ca387$export$11f52f8c7c47867c","PARAMETER_ANY_NOT_NULL","$3211926905bf07e5$export$3785001429c275c5","secondSourceSize","$bec3a7b58f0ac762$export$327c387de36d5714","$a3882d72b8be5910$export$c76f1c324b4b4a49","$f41609569136f453$export$d36c09e5d02927e7","EVENT_RESULT_ANY","max","$f978ad0778c43ba9$export$dfed19fabc75a31d","min","$4eedb5794f908376$export$65b9f7c5b0c25350","firstFind","secondFind","$9d98aed9e61afd05$export$53c81f36b32e1bba","st","endpoint","last","$dc6c9870eeb65756$export$152db69a76b6b79e","PARAMETER_ROTATE_LENGTH","rotLen","rotate","elements","$2b23ce3a38e87f5c$export$f4f1f4c0f416ff4b","random","$61a700993053ef05$export$d43f91ac58cde147","PARAMETER_BOOLEAN_ASCENDING","ascending","slicedArray","slice","sort","$61a700993053ef05$var$compareFunction","$a5032aa4a964a9af$export$7350831561e48a8f","$ab50f5eee521ab3b$export$ff4c1a9d41c61c5b","PARAMETER_INT_OFFSET","offset","output","$829ee34eb750e28b$export$7033a60d5110317a","$7104972d887f8f1f$export$7127619039fca328","$fc4d9e77c2a45911$export$a76dbac5bd058d1b","append","setLength","deleteCharAt","checkIndex","insert","$8760f1cd91f30831$export$acb5fd6ef0dd45e7","expression","$e6642cbfb2fcba93$export$e67adacf2c583eeb","getExpression","$fec970ca78a92862$export$c3407419a51d8741","getTokenValue","getElement","$d4f8cb0bbe616941$export$ab5aad00225c5662","MULTIPLICATION","DIVISION","INTEGER_DIVISION","MOD","ADDITION","SUBTRACTION","NOT","AND","OR","LESS_THAN","LESS_THAN_EQUAL","GREATER_THAN","GREATER_THAN_EQUAL","EQUAL","NOT_EQUAL","BITWISE_AND","BITWISE_OR","BITWISE_XOR","BITWISE_COMPLEMENT","BITWISE_LEFT_SHIFT","BITWISE_RIGHT_SHIFT","BITWISE_UNSIGNED_RIGHT_SHIFT","UNARY_PLUS","UNARY_MINUS","UNARY_LOGICAL_NOT","UNARY_BITWISE_COMPLEMENT","ARRAY_OPERATOR","OBJECT_OPERATOR","NULLISH_COALESCING_OPERATOR","CONDITIONAL_TERNARY_OPERATOR","ARITHMETIC_OPERATORS","LOGICAL_OPERATORS","BITWISE_OPERATORS","CONDITIONAL_OPERATORS","getOperator","shouldBeWrappedInSpace","VALUE_OF","_","o","operator","operatorName","_shouldBeWrappedInSpace","getOperatorName","valueOf","$6b9ac145b9fcd5e8$export$bfe37c1342e5eb83","tokens","ops","l","r","op","evaluate","getTokens","getOperations","buff","isPrevOp","processTokenSepearator","processSubExpression","processStringLiteral","processTernaryOperator","result1","processOthers","process","result2","OPERATORS","strConstant","nextChar","cnt","BIGGEST_OPERATOR_SIZE","OPERATORS_WITHOUT_SPACE_WRAP","checkUnaryOperator","OPERATION_VALUE_OF","inChr","hasPrecedence","prev","UNARY_OPERATORS","l1","secondExp","subExp","UNARY_MAP","op1","op2","pre1","OPERATOR_PRIORITY","pre2","temp1","temp2","equals","$bbb484db7fdea9cc$export$d44091f0b447fefe","getValue","token","prefix","getPrefix","getValueInternal","retrieveElementFrom","partNumber","bElement","REGEX_SQUARE_BRACKETS","resolveForEachPartOfTokenWithBrackets","parseInt","isNaN","checkIfObject","endsWith","index1","err1","$b8fbfe560c8313b4$export$39519efb8a973bce","store","REGEX_DOT","getStore","setStore","setValue","overwrite","deleteOnNull","modifyStore","stringToken","exp","mem","el","getDataFromObject","getDataFromArray","putDataInObject","putDataInArray","nextOp","je","$955d4e7f0a55db24$export$4415edf560d625ce","keyPath","valuePath","ignoreNullValues","ignoreNullKeys","ignoreDuplicateKeys","ove","acc","cur","$79286da09543a41a$export$b1f76fbe3f585683","ofArrayEntries","repoMap","filterableNames","$0c4ac653cf8285f8$export$d249626f99a0976c","setElement","$1eb4b4d4afac7df7$var$SIGNATURE","SYSTEM_CTX","ofEntry","REGEX","CONSTANT","outputEventMapEntry","$e8e2ed47b53194a9$var$SIGNATURE","$d785d0d318022812$export$a5835aa4dc4a0f7","nullCheck","e1","e2","$cbe984a506d536a3$export$a8b4ac5cec7f3ef1","apply","u","$4da9fb38158791c8$export$f7d907e108ff5f5a","$7accff43740ada67$export$4429718dd207f524","$12d3b2b894cf9f8b$export$461eeaed4fd44d87","$4c09effe15aba9fa$export$a654a6b4708c47ae","$9bcdec1e4ad6de76$export$c6c786d90c00ccb3","isTTypeString","reverse","abs","times","chrs","rev","$6350aa1f5f9b2528$export$32cdc7b90c3f2772","$5d11864b386c89c3$export$2ce812ef1adfc7e8","$c44c3e46f03ba79c$export$a2a775190435bd33","$af532fb93de07b12$export$eeef83ab872ddce5","$6559aa2cc00492b5$export$57fe0f50165dd4cd","$0461a3f9c1d5afde$export$2e1886fc6d5eb776","$bc686fa46e4be1ed$export$3046494ab1cf73bb","$081ccc4559130c17$export$c5652d513ade8473","$8a7149a874759c44$export$e62aa8d75c9a4734","tType","findPrimitiveNullAsBoolean","uType","$26091549ef6770aa$export$cdf02df6bd75cc9","$f0ab4376036f3b51$export$264c8987e36a6d35","$d58ea5e4242a4950$export$7ebb65846541d315","$bcf6a6f56ad99125$export$fe2bbbd39de8094a","$e373832f0e9b06b0$export$fdc45f0fc8eb4207","$8f4627bb25c750bd$export$7b20a1536da8f25","$712cd2983455b122$export$42108e1134a52f27","$3cfa7ba83b1c0459$export$84c3ec415fb07dd3","$74507e9418b36497$export$e38febd6a9d11047","$f1ebee58c70b4bce$export$b2346ee46dfa8cbc","$b08b11e7dfc7f47e$export$874b037c929bb9a8","$e118f42b4e8b7423$export$6282ef6c70349edc","$a7e37e4ab4221e37$export$a4dd2a01c916cf79","$14f460c98179a8c1$var$KEYWORDS","$14f460c98179a8c1$export$439f57d66896a884","processString","processNumbers","$992dc32892df2d89$export$b9f061bcfab247ed","e3","$9927f930e460c1d1$export$d538ac16fbea0cfa","addValue","bIndex","fromIndex","PREFIX","$2d15a60196232a30$export$c24f16fac926e77f","UNARY_OPERATORS_MAP","internalTokenValueExtractor","valuesMap","processNestingExpression","evaluateExpression","tuples","newExpression","replaceNestingExpression","expStr","getExpressionString","UNARY_OPERATORS_MAP_KEY_SET","applyUnaryOperation","getValueFromToken","processObjectOrArrayOperator","token2","token3","applyTernaryOperation","token21","applyBinaryOperation","token1","objTokens","objOperations","objToken","Date","getTime","key1","INSTANCE","TERNARY_OPERATORS_MAP","typv1","typv2","BINARY_OPERATORS_MAP","pathPrefix","$c158d7c36a53803f$var$SIGNATURE","$4a42f66d6cf815af$var$SIGNATURE","$92902c8af8052351$export$1f9ff5f4a6c9361a","CONDITION","TRUE","FALSE","SIGNATURE","condition","$f7fd68e958c8e15d$var$SIGNATURE","SYSTEM_LOOP","$6f3bdb484a34414f$var$SIGNATURE","ITERATION","$f3943fa4b5e634ab$var$SIGNATURE","$f469a40df35836ae$var$SIGNATURE","$7cb20692a5bd7b0e$var$SIGNATURE","MATH","$01fa6744fa24471f$var$paramFunctions","$01fa6744fa24471f$export$dbb56c1f07bdf68c","mathFunction","parametersNumber","returnType","call","$406fb3da3e020552$export$73af47b8d41ff64","nums","sqrt","$7e32b13425d565a1$var$SIGNATURE","$c8aed76f3a52d884$var$SIGNATURE","$eb04fdf151798117$export$a92776769f460054","$735ce06ad515ff10$export$a678c665c69432d4","MIN_VALUE","MAX_VALUE","VALUE","$a60515d2decd881a$export$ab98da086df9ef00","$3c284c4fb188e285$var$functionObjectsIndex","Absolute","ACosine","acos","ASine","asin","ATangent","atan","Ceiling","ceil","Cosine","cos","CosineH","cosh","CubeRoot","cbrt","Exponential","Expm1","expm1","Floor","Log","log","Log10","log10","Round","Sine","sin","SineH","sinh","Tangent","tan","TangentH","tanh","ToDegrees","PI","ToRadians","SquareRoot","ArcTangent","atan2","Power","pow","Add","Hypotenuse","Maximum","Minimum","Random","RandomFloat","RandomInt","$3c284c4fb188e285$var$filterableNames","$3c284c4fb188e285$export$b52a470618d492ff","$1193986a17072166$export$2511477d495b2883","valueSchema","SYSTEM_OBJECT","$c561d9a350d0b846$var$functionObjectsIndex","ObjectValues","objectValues","localeCompare","ObjectKeys","ObjectEntries","ObjectDeleteKey","ObjectPutValue","deleteKeyOnNull","$c561d9a350d0b846$var$filterableNames","$c561d9a350d0b846$export$64f266808c8b139","$1e637ed6cb16c104$export$531cef85654f2406","VALUES","console","$2d9cc5db6fe5505e$export$14d8c90077fe987e","PARAMETER_STRING_NAME","PARAMETER_SECOND_STRING_NAME","PARAMETER_THIRD_STRING_NAME","PARAMETER_INDEX_NAME","PARAMETER_SECOND_INDEX_NAME","PARAMETER_SEARCH_STRING_NAME","parameter","ss","EVENT_BOOLEAN","PARAMETER_STRING","PARAMETER_SEARCH_STRING","EVENT_STRING","PARAMETER_INDEX","s2","EVENT_INT","ind1","ind2","PARAMETER_SECOND_INDEX","s3","PARAMETER_SECOND_STRING","PARAMETER_THIRD_STRING","$3d06710c82750f28$export$e55b597c359d82cd","contextArgs","concatenatedString","curr","$988fd152148851d3$export$b12ae3a6a3425008","PARAMETER_AT_START","PARAMETER_AT_START_NAME","PARAMETER_AT_END","PARAMETER_AT_END_NAME","inputString","startPosition","endPosition","outputString","$203c86f3acf1a1ee$export$ea0ae5b491c5c50a","PARAMETER_AT_POSITION","PARAMETER_AT_POSITION_NAME","PARAMETER_INSERT_STRING","PARAMETER_INSERT_STRING_NAME","at","insertString","$22e00e44f1087107$export$8b243d0520548581","PARAMETER_POSTPAD_STRING_NAME","PARAMETER_LENGTH_NAME","PARAMETER_POSTPAD_STRING","PARAMETER_LENGTH","postpadString","prepadStringLength","$d7d15655908058c7$export$faa1d9aa9e5514ee","PARAMETER_PREPAD_STRING_NAME","PARAMETER_PREPAD_STRING","prepadString","$5773b5710cfca515$export$5619d260fbac97b4","PARAMETER_OTHER_STRING_NAME","PARAMETER_FIRST_OFFSET_NAME","PARAMETER_SECOND_OFFSET_NAME","PARAMETER_INTEGER_NAME","PARAMETER_BOOLEAN_NAME","PARAMETER_BOOLEAN","PARAMETER_FIRST_OFFSET","PARAMETER_OTHER_STRING","PARAMETER_SECOND_OFFSET","PARAMETER_INTEGER","ignoreCase","toffSet","otherString","oOffSet","matches","toUpperCase","$a6a0c72755bdb13a$export$13c473626aed6671","PARAMETER_AT_LENGTH_NAME","PARAMETER_REPLACE_STRING_NAME","PARAMETER_AT_LENGTH","PARAMETER_REPLACE_STRING","replaceString","$093e2d5bba018a1f$export$53c81f36b32e1bba","acutalString","stringLength","reversedString","$e4b5254ae876bf0d$export$f836382419f64c98","PARAMETER_SPLIT_STRING_NAME","PARAMETER_SPLIT_STRING","EVENT_ARRAY","$f4a1108044d516ac$export$5f245f9a686b5058","PARAMETER_INPUT_ANYTYPE_NAME","PARAMETER_INPUT_ANYTYPE","$34ec91cae85dfacd$export$eca59ed5891f8e47","$e4c5c6809694afc6$export$ae09120a661eed3b","ofEntryString","toLocaleLowerCase","ofEntryStringBooleanOutput","ofEntryAsStringBooleanOutput","ofEntryAsStringIntegerOutput","lastIndexOf","ofEntryAsStringAndIntegerStringOutput","repeat","ofEntryAsStringStringIntegerIntegerOutput","ofEntryAsStringStringStringStringOutput","replace","ofEntryAsStringIntegerIntegerStringOutput","$324622009f29af48$export$d3f4bd7b80956108","repos","repo","$4cc75b374fd65488$var$map","getContext","contextToken","ex","getValuesMap","modifyContext","ce","to","step","forward","current","done","statementName","getExecutionContext","eve","stepName","isExpression","$4cc75b374fd65488$var$filterableNames","flatMap","$4cc75b374fd65488$export$1ef8ffe3d9ea2320","$0d543a3fb6de638f$export$1480fdc476e0600e","messageType","getMessageType","setMessageType","getMessage","setMessage","$c48a1514625daae5$export$f09f252875e413e8","messages","dependencies","statement","setStatement","getMessages","setMessages","getDependencies","setDependencies","getUniqueKey","addMessage","addDependency","dependency","getDepenedencies","$436e919276319ad5$export$6cebf62d32060adb","$7501649217d0c960$export$638a1889bcd4621c","eachEvent","bracket","evParamName","element1","$e1ae4251d09b5b92$export$ff42ca15b74921ee","$f66d02feffe2be20$export$8193dda3aa6e9a3","nodeMap","isSubGrph","getVerticesData","getData","addVertex","data","$46d6a104d1ab20b3$export$d6ecc3c8b1bdb677","getVertex","getVertexData","getVerticesWithNoIncomingEdges","hasIncomingEdges","isCyclic","vertex","visited","getKey","hasOutgoingEdges","getOutVertices","addVertices","getNodeMap","isSubGraph","join","outVertices","inVertices","graph","setData","setOutVertices","getInVertices","setInVertices","getGraph","setGraph","addOutEdgeTo","addInEdgeTo","getSubGraphOfType","subGraph","typeVertices","ins","outs","$aba720240ef6b64c$export$dab92e0058712b0b","$18472f1ececbbeef$export$1617e535b7cf20e","ParameterReferenceType","$61b2f8a2fd3dc93d$export$2e2bcd8739ae039","dt","$6ce4d447a2468596$export$c72d1e96aedc073d","executionContext","valueExtractors","functionRepository","executionId","getExecutionId","setContext","setStatementExecution","getSteps","steps","setSteps","getCount","setCount","getFunctionRepository","setFunctionRepository","setSchemaRepository","addTokenValueExtractor","extractors","tve","setValuesMap","setExecutionContext","$21114c98629ddba9$export$c72a235e9e048d37","StatementMessageType","$23413f16a9a7155c$export$454d8b636c7c716b","debugMode","fd","VERSION","fRepo","sRepo","g","prepareStatementExecution","unresolved","makeEdges","ERROR","inContext","eGraph","getExecutionPlan","executeGraph","executionQue","branchQue","processBranchQue","processExecutionQue","MAX_EXECUTION_ITERATIONS","eventMap","allDependenciesResolvedVertex","executeVertex","branch","allDependenciesResolvedTuples","executeBranch","nextOutput","resolveInternalExpressions","getExecuteIftrue","every","paramSet","getArgumentsFromParametersMap","fep","isOutput","out","unResolvedDependencies","resolveInternalExpression","retArray","retObject","getParameterMap","ret","prList","pDef","getOrder","parameterReferenceEvaluation","se","p","refList","parameterReferenceValidation","ref1","PARAMETER_NEEDS_A_VALUE","getDependentStatements","statement1","addDependencies","param1","paramElements","sch","match","STEP_REGEX_PATTERN","retValue","d","secondDot","eventDot","$2445a1b8d6e618e9$export$594b6714aa88d0a1","$7ba619a412e19f83$export$13807d9ee5a34a42","left","top","getLeft","setLeft","getTop","setTop","$52fe4febcdaa5f60$export$7d81ad5ed2d0609","override","position","isOverride","setOverride","getPosition","setPosition","$ab247583f3916d44$export$6d35a6334b82887f","pv","order","setKey","setExpression","setOrder","$5557399e4b585930$export$c84356afd4299847","sn","parameterMap","dependentStatements","setStatementName","setParameterMap","setDependentStatements","executeIftrue","setExecuteIftrue","iv","$300b3f08c1962aad$export$bc161170aa8ed47b","statementGroupName","statements","getStatementGroupName","setStatementGroupName","getStatements","setStatements","$0841f6803da1feb1$var$IN_SCHEMA","$0841f6803da1feb1$export$ac28d24969149b5c","getStepGroups","stepGroups","setStepGroups","getParts","setParts","$035c8de64001252d$export$84637ea037d2e218","argumentIndex","getArgumentIndex","setArgumentIndex"],"version":3,"file":"index.js.map"}