@fincity/kirun-js 1.4.2 → 1.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/__tests__/engine/runtime/KIRuntimeTest.ts +4 -4
- package/__tests__/engine/runtime/expression/ExpressionEvaluationTest.ts +32 -0
- package/__tests__/engine/runtime/expression/ExpressionEvaluatorStringLiteralTest.ts +3 -0
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/module.js +1 -1
- package/dist/module.js.map +1 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/engine/runtime/expression/Expression.ts +1 -1
- package/src/engine/runtime/expression/ExpressionEvaluator.ts +20 -1
- package/src/engine/runtime/expression/tokenextractor/ExpressionInternalValueExtractor.ts +29 -0
- package/src/engine/runtime/expression/tokenextractor/LiteralTokenValueExtractor.ts +1 -7
- package/src/engine/runtime/tokenextractor/ArgumentsTokenValueExtractor.ts +9 -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/exception/KIRuntimeException.ts","src/engine/json/schema/string/StringFormat.ts","src/engine/model/Event.ts","src/engine/model/EventResult.ts","src/engine/model/FunctionOutput.ts","src/engine/model/FunctionSignature.ts","src/engine/runtime/ContextElement.ts","src/engine/util/string/StringFormatter.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/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/context/Create.ts","src/engine/function/system/context/Get.ts","src/engine/exception/ExecutionException.ts","src/engine/util/LinkedList.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/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/util/primitive/PrimitiveUtil.ts","src/engine/runtime/expression/operators/binary/LogicalAndOperator.ts","src/engine/util/deepEqual.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/TokenValueExtractor.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/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/CountLoop.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/util/MapUtil.ts","src/engine/function/system/math/Random.ts","src/engine/function/system/math/MathFunctionRepository.ts","src/engine/HybridRepository.ts","src/engine/repository/KIRunFunctionRepository.ts","src/engine/util/ArrayUtil.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\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)) ArraySchemaType.of(...Schema.fromListOfSchemas(obj));\n\n let x = Schema.from(obj);\n if (!x) return undefined;\n return ArraySchemaType.of(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(types as SchemaType);\n } else if (Array.isArray(types)) {\n return new MultipleType(\n new Set(types.map((e) => e as any).map((e) => e as SchemaType)),\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 ENUMS: string = 'enums';\nconst ITEMS_STRING: string = 'items';\nconst SCHEMA_ROOT_PATH: string = '#/';\nconst REQUIRED_STRING: string = 'required';\nconst VERSION_STRING: string = 'version';\nconst NAMESPACE_STRING: string = 'namespace';\nconst TEMPORARY: string = '_';\n\nexport class AdditionalPropertiesType {\n private booleanValue?: boolean;\n private schemaValue?: Schema;\n\n constructor(apt: AdditionalPropertiesType | 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): AdditionalPropertiesType {\n this.booleanValue = booleanValue;\n return this;\n }\n\n public setSchemaValue(schemaValue: Schema): AdditionalPropertiesType {\n this.schemaValue = schemaValue;\n return this;\n }\n\n public static from(obj: any): AdditionalPropertiesType | undefined {\n if (!obj) return undefined;\n const ad = new AdditionalPropertiesType();\n ad.booleanValue = obj.booleanValue;\n ad.schemaValue = obj.schemaValue;\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 AdditionalPropertiesType().setSchemaValue(\n Schema.ofRef(SCHEMA_ROOT_PATH),\n ),\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 AdditionalPropertiesType().setSchemaValue(\n Schema.ofRef(SCHEMA_ROOT_PATH),\n ),\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 ['minItems', Schema.ofInteger('minItems')],\n ['maxItems', Schema.ofInteger('maxItems')],\n ['uniqueItems', Schema.ofBoolean('uniqueItems')],\n\n [\n '$defs',\n Schema.of('$defs', SchemaType.OBJECT).setAdditionalProperties(\n new AdditionalPropertiesType().setSchemaValue(\n Schema.ofRef(SCHEMA_ROOT_PATH),\n ),\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[] {\n if (isNullValue(list) && !Array.isArray(list)) return [];\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 = AdditionalPropertiesType.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.contains = Schema.from(obj.contains);\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?: AdditionalPropertiesType;\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 contains?: Schema;\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 AdditionalPropertiesType(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\n this.minItems = schema.minItems;\n this.maxItems = schema.maxItems;\n this.uniqueItems = schema.uniqueItems;\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 return this.getFullName();\n }\n\n private getFullName(): string | undefined {\n if (!this.namespace || this.namespace == TEMPORARY) return this.name;\n\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(): AdditionalPropertiesType | undefined {\n return this.additionalProperties;\n }\n public setAdditionalProperties(additionalProperties: AdditionalPropertiesType): Schema {\n this.additionalProperties = additionalProperties;\n return this;\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 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]);\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","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","export enum StringFormat {\n DATETIME = 'DATETIME',\n TIME = 'TIME',\n DATE = 'DATE',\n EMAIL = 'EMAIL',\n REGEX = 'REGEX',\n}\n","import { AdditionalPropertiesType, 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 AdditionalPropertiesType().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","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 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 { AdditionalPropertiesType, 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 AdditionalPropertiesType().setSchemaValue(Parameter.SCHEMA),\n ),\n ],\n [\n 'events',\n Schema.ofObject('events').setAdditionalProperties(\n new AdditionalPropertiesType().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}\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","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 { 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 { 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(s: Schema | undefined, sRepository: Repository<Schema>): any {\n if (!s) return undefined;\n\n if (s.getConstant()) return s.getConstant();\n\n if (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 getSchemaFromRef(\n schema: Schema,\n sRepository: Repository<Schema> | undefined,\n ref: string | undefined,\n iteration: number = 0,\n ): Schema | undefined {\n iteration++;\n\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(parents, schema, repository, array);\n\n return element;\n }\n\n public static checkContains(\n parents: Schema[],\n schema: Schema,\n repository: Repository<Schema> | undefined,\n array: any[],\n ) {\n if (!schema.getContains()) return;\n\n let flag: boolean = false;\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 flag = true;\n break;\n } catch (err) {\n flag = false;\n }\n }\n\n if (!flag) {\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n 'None of the items are of type contains schema',\n );\n }\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 (type.getTupleSchema()!.length !== array.length) {\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 for (let i = 0; i < array.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\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 { 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 (element)\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n 'Expected a null but found ' + element,\n );\n\n return element;\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 { AdditionalPropertiesType, Schema } from '../Schema';\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: AdditionalPropertiesType = 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 keys.toString() + ' 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 if (isNullValue(value)) continue;\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","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 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.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.getMinLength()!) {\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 { 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 (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.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 (!schema.getConstant().equals(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 { 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","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 { KIRuntimeException } from '../exception/KIRuntimeException';\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>(\n callbackfn: (value: T, index: number) => U,\n thisArg?: any,\n ): 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 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 { 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 (this.ops.get(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 { 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 { Operation } from '../../Operation';\nimport { BinaryOperator } from './BinaryOperator';\n\nexport class ArithmeticAdditionOperator extends BinaryOperator {\n public apply(t: any, u: any): any {\n this.nullCheck(t, u, Operation.ADDITION);\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 { 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 (!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 { 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 { 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 { 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 { 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 LogicalNotOperator extends UnaryOperator {\n public apply(t: any): any {\n this.nullCheck(t, Operation.UNARY_LOGICAL_NOT);\n\n let tType: Tuple2<SchemaType, any> = PrimitiveUtil.findPrimitiveNumberType(t);\n\n if (tType.getT1() != SchemaType.BOOLEAN)\n throw new ExecutionException(\n StringFormatter.format('Unable to apply bitwise operator on $', t),\n );\n\n return !t;\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 private 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 (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 private 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 { 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]);\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 ind: number = token.indexOf('.');\n let v: number;\n if (ind == -1) {\n v = parseInt(token);\n } else {\n v = parseFloat(token);\n }\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 { 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';\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\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\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 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 )\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 COUNT = 'count';\nconst VALUE = 'value';\nconst INDEX = 'index';\n\nconst SIGNATURE = new FunctionSignature('CountLoop')\n .setNamespace(Namespaces.SYSTEM_LOOP)\n .setParameters(\n new Map([\n Parameter.ofEntry(COUNT, Schema.of(COUNT, SchemaType.INTEGER).setDefaultValue(1)),\n ]),\n )\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\n return new FunctionOutput({\n next(): EventResult {\n if (current >= count) {\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 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\n return new FunctionOutput({\n next(): EventResult | undefined {\n if (done) return undefined;\n\n if ((forward && current >= to) || (!forward && current <= to)) {\n done = true;\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 { 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 { 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 { SchemaType } from '../../../json/schema/type/SchemaType';\nimport { Namespaces } from '../../../namespaces/Namespaces';\nimport { Repository } from '../../../Repository';\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';\n\nconst functionObjectsIndex: any = {\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};\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","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","import { Function } from '../function/Function';\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 { CountLoop } from '../function/system/loop/CountLoop';\nimport { RangeLoop } from '../function/system/loop/RangeLoop';\nimport { MathFunctionRepository } from '../function/system/math/MathFunctionRepository';\nimport { HybridRepository } from '../HybridRepository';\nimport { Namespaces } from '../namespaces/Namespaces';\n\nfunction entry(fun: Function): [string, Function] {\n return [fun.getSignature().getName(), fun];\n}\n\nconst map: Map<string, Map<string, Function>> = new Map([\n [\n Namespaces.SYSTEM_CTX,\n new Map([entry(new Create()), entry(new Get()), entry(new SetFunction())]),\n ],\n [Namespaces.SYSTEM_LOOP, new Map([entry(new RangeLoop()), entry(new CountLoop())])],\n [Namespaces.SYSTEM, new Map([entry(new If()), entry(new GenerateEvent())])],\n]);\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 },\n new MathFunctionRepository(),\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 { 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\n let element: any = eachEvent.get(parts[ind++]);\n\n return this.retrieveElementFrom(token, parts, ind, 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 return this.retrieveElementFrom(token, parts, 2, this.args.get(parts[1]));\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 { ArgumentsTokenValueExtractor } from './tokenextractor/ArgumentsTokenValueExtractor';\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\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 let x: TokenValueExtractor = new ArgumentsTokenValueExtractor(args);\n this.valueExtractors.set(x.getPrefix(), x);\n return this;\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","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';\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 public constructor(fd: FunctionDefinition) {\n super();\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 fep: FunctionExecutionParameters,\n ): Promise<Tuple2<Tuple2<string, string>[], 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(\n this.prepareStatementExecution(\n s,\n fep.getFunctionRepository(),\n fep.getSchemaRepository(),\n ),\n );\n\n return new Tuple2(this.makeEdges(g), 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 let eGraph: Tuple2<\n Tuple2<string, string>[],\n ExecutionGraph<string, StatementExecution>\n > = await this.getExecutionPlan(inContext);\n\n let unresolvedList: Tuple2<string, string>[] = eGraph.getT1();\n\n if (unresolvedList.length) {\n throw new KIRuntimeException(\n StringFormatter.format(\n 'Found these unresolved dependencies : $ ',\n unresolvedList.map((e) =>\n StringFormatter.format('Steps.$.$', e.getT1(), e.getT2()),\n ),\n ),\n );\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 .getT2()\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.getT2(), 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 throw new KIRuntimeException('No events raised');\n }\n\n return new FunctionOutput(\n Array.from(inContext.getEvents()?.entries() ?? []).flatMap((e) =>\n e[1].map((v) => EventResult.of(e[0], v)),\n ),\n );\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 await this.resolveInternalExpressions(nextOutput.getResult(), inContext),\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((e) => executionQue.add(e));\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 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 let context: Map<string, ContextElement> = inContext.getContext()!;\n\n let result: FunctionOutput = await fun.execute(\n 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 );\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 inContext\n .getSteps()!\n .get(s.getStatementName())!\n .set(er.getName(), this.resolveInternalExpressions(er.getResult(), inContext));\n\n if (!isOutput) {\n let subGraph = vertex.getSubGraphOfType(er.getName());\n let unResolvedDependencies: Tuple2<string, string>[] = this.makeEdges(subGraph);\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) out.forEach((e) => executionQue.add(e));\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 .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 throw new KIRuntimeException(\n StringFormatter.format('$.$ was not available', s.getNamespace(), s.getName()),\n );\n }\n\n let paramSet: Map<string, Parameter> = new Map(fun.getSignature().getParameters());\n\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 (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 paramSet.delete(p.getParameterName());\n continue;\n }\n\n if (p.isVariableArgument()) {\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 (paramSet.size) {\n for (let param of Array.from(paramSet.values())) {\n if (param.isVariableArgument()) continue;\n if (isNullValue(SchemaUtil.getDefaultValue(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 isNullValue(SchemaUtil.getDefaultValue(p.getSchema(), sRepo))\n )\n se.addMessage(\n StatementMessageType.ERROR,\n StringFormatter.format(KIRuntime.PARAMETER_NEEDS_A_VALUE, p.getParameterName()),\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(graph: ExecutionGraph<string, StatementExecution>): Tuple2<string, string>[] {\n let values = graph.getNodeMap().values();\n\n let retValue: Tuple2<string, string>[] = [];\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)) retValue.push(new Tuple2(step, event));\n\n let st = graph.getNodeMap()!.get(step);\n if (st) e.addInEdgeTo(st, event);\n }\n }\n\n return retValue;\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 {\n if (!json) return new Position(-1, -1);\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): 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 ]),\n );\n\n private key: string;\n private type: ParameterReferenceType;\n private value: any;\n private expression?: string;\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 } 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 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 }\n}\n","import { AdditionalPropertiesType, 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').setAdditionalProperties(\n new AdditionalPropertiesType().setSchemaValue(Schema.ofBoolean('exists')),\n ),\n ],\n [\n 'parameterMap',\n new Schema()\n .setName('parameterMap')\n .setAdditionalProperties(\n new AdditionalPropertiesType().setSchemaValue(\n Schema.ofObject('parameterReference').setAdditionalProperties(\n new AdditionalPropertiesType().setSchemaValue(\n ParameterReference.SCHEMA,\n ),\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\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 public getDependentStatements(): Map<string, boolean> {\n return this.dependentStatements ?? new Map();\n }\n public setDependentStatements(dependentStatements: Map<string, boolean>): Statement {\n this.dependentStatements = dependentStatements;\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 .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 { AdditionalPropertiesType, 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 AdditionalPropertiesType().setSchemaValue(Event.SCHEMA),\n ),\n ],\n [\n 'steps',\n Schema.ofObject('steps').setAdditionalProperties(\n new AdditionalPropertiesType().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","of","fromListOfSchemas","x","from","$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$34a8e14a3ac7d480","apt","booleanValue","schemaValue","getBooleanValue","getSchemaValue","setBooleanValue","setSchemaValue","ad","setNamespace","SYSTEM","setName","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","Object","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","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","getRequired","getPropertyNames","setPropertyNames","getMinProperties","setMinProperties","getMaxProperties","setMaxProperties","getPatternProperties","setPatternProperties","getItems","getContains","setContains","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$export$a0de004d4b269741","find","get","$28804be3f1c4834a$export$37b1b5eb4f4f5ada","$540088a715acffc2$export$f22e7fe56db8ae03","StringFormat","$970f7bbcafb2c50d$export$d61e24a684f9e51","evn","parameters","getParameters","setParameters","eventMapEntry","OUTPUT","eventName","eventSchema","$8bed54297f17864d$export$c45be2437182b0e3","result","getResult","setResult","$c10c9982d8b7a6b8$export$46c58e8ae2505a7d","index","arg","fo","generator","next","er","allResults","$2e21ebbbef520683$export$6ac699b48d627131","events","getEvents","setEvents","$0c4ac653cf8285f8$export$d249626f99a0976c","element","getElement","setElement","$ea8539f6d865ce04$export$5a7f7b467323cd66","formatString","params","sb","ind","chr","prevchar","i","charAt","substring","toString","$c99e079d9bc86c78$export$592e033edf5fafe4","str","c","occurance","indexOf","$52215c513713acac$export$50073dc6080ec093","f","s","getT1","getT2","setT1","setT2","$52215c513713acac$export$82dc29c19cc50d89","t","getT3","setT3","$52215c513713acac$export$c0401e7e2326d13b","fr","getT4","setT4","$0ad73ab1d75e3eb4$export$18db27caa68e620c","sve","reduce","a","$c64d9d969a282a82$export$7eb0095ad5663979","sRepository","getSchemaFromRef","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","flag","validate","$d84452374c548781$export$5ea2dbb44eae89d6","path","$5cbc9dc65a90aa0c$export$a006ee8cc7b6580a","array","checkMinMaxItems","checkItems","checkUniqueItems","checkContains","newParents","size","i1","newParents1","element1","$f16a0327a17a34fc$export$d74a5d77bac81ab5","$3356a5c800d1131a$export$cd3b7079b2ac4000","$d8e1a543f29ba7d8$export$5464fb7e86e4a9f1","n","extractNumber","checkRange","checkMultipleOf","Math","round","numberCompare","n1","n2","$37975652d3bbb152$export$e97b0a585a2ce29f","jsonObject","keys","checkMinMaxProperties","checkPropertyNameSchema","checkRequired","checkProperties","checkPatternProperties","checkAddtionalProperties","key","values","compiledPatterns","keyPattern","RegExp","test","delete","each","$5b487331eeaf33e7$export$312ff19fe6f84b5e","TIME","patternMatcher","DATE","DATETIME","$180899b5bb1efe85$export$9ced0f77dc6abfd7","filter","constantValidation","enumCheck","typeValidation","equals","valid","$a1225b4e7799ebbf$export$6138b597adfac7c","validateArguments","args","schemaRepository","statementExecution","getSignature","param","validateArgument","signature","getStatement","getStatementName","jsonElement","async","context","setArguments","getArguments","getSchemaRepository","getStatementExecution","internalExecute","getProbableEventSignature","probableParameters","$1eb4b4d4afac7df7$var$SIGNATURE","SYSTEM_CTX","ofEntry","REGEX","CONSTANT","outputEventMapEntry","$e8e2ed47b53194a9$var$SIGNATURE","$4e058298a8f3f696$export$50d5074000755e42","$3cb6da8eee9f96c7$export$f0ef28713f767754","head","tail","node","$3cb6da8eee9f96c7$var$Node","previous","pop","isEmpty","toArray","arr","peek","peekLast","getFirst","removeFirst","removeLast","addAll","add","bind","callbackfn","thisArg","newList","$fc4d9e77c2a45911$export$a76dbac5bd058d1b","append","setLength","num","deleteCharAt","checkIndex","insert","start","end","$8760f1cd91f30831$export$acb5fd6ef0dd45e7","expression","$e6642cbfb2fcba93$export$e67adacf2c583eeb","getExpression","$fec970ca78a92862$export$c3407419a51d8741","getTokenValue","$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","j","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","temp","temp1","temp2","$d785d0d318022812$export$a5835aa4dc4a0f7","nullCheck","e1","e2","$cbe984a506d536a3$export$a8b4ac5cec7f3ef1","apply","u","$4da9fb38158791c8$export$f7d907e108ff5f5a","$7accff43740ada67$export$4429718dd207f524","$12d3b2b894cf9f8b$export$461eeaed4fd44d87","floor","$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","$99aa72cfcbe4f53f$export$3755dd8569265c2c","typof","findPrimitiveNumberType","Number","isInteger","b","cmp","compare","typofa","typofb","comparePrimitive","oa","ob","$8a7149a874759c44$export$e62aa8d75c9a4734","tType","findPrimitiveNullAsBoolean","uType","$2b39939b69590d5c$export$9cb4719e2e525b7a","y","xa","yb","typeOfA","typeOfB","entriesOfA","entriesOfB","$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","$bbb484db7fdea9cc$export$d44091f0b447fefe","getValue","token","prefix","getPrefix","getValueInternal","retrieveElementFrom","partNumber","bElement","REGEX_SQUARE_BRACKETS","resolveForEachPartOfTokenWithBrackets","parseInt","isNaN","checkIfObject","endsWith","index1","err1","$14f460c98179a8c1$var$KEYWORDS","$14f460c98179a8c1$export$439f57d66896a884","processString","processNumbers","parseFloat","$992dc32892df2d89$export$b9f061bcfab247ed","e3","$2d15a60196232a30$export$c24f16fac926e77f","UNARY_OPERATORS_MAP","exp","valuesMap","processNestingExpression","evaluateExpression","tuples","newExpression","replaceNestingExpression","expStr","getExpressionString","UNARY_OPERATORS_MAP_KEY_SET","applyUnaryOperation","getValueFromToken","processObjectOrArrayOperator","token2","token3","v1","v2","v3","applyTernaryOperation","token21","applyBinaryOperation","token1","objTokens","objOperations","objToken","INSTANCE","TERNARY_OPERATORS_MAP","typv1","typv2","BINARY_OPERATORS_MAP","pathPrefix","$c158d7c36a53803f$var$SIGNATURE","$4a42f66d6cf815af$var$SIGNATURE","$92902c8af8052351$export$1f9ff5f4a6c9361a","CONDITION","TRUE","FALSE","SIGNATURE","condition","outputOf","$6f3bdb484a34414f$var$SIGNATURE","SYSTEM_LOOP","ITERATION","$f469a40df35836ae$var$SIGNATURE","$7cb20692a5bd7b0e$var$SIGNATURE","MATH","$01fa6744fa24471f$var$paramFunctions","$01fa6744fa24471f$export$dbb56c1f07bdf68c","functionName","mathFunction","parametersNumber","returnType","call","$406fb3da3e020552$export$73af47b8d41ff64","nums","sqrt","$7e32b13425d565a1$var$SIGNATURE","$c8aed76f3a52d884$var$SIGNATURE","$7ecb487721af7c67$export$92eaabd025f1e921","k1","k2","k3","k4","v4","k5","v5","k6","v6","k7","v7","k8","v8","k9","v9","k10","v10","entry","$7ecb487721af7c67$export$4758715d917352b9","eachEntry","$eb04fdf151798117$export$a92776769f460054","random","$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","$3c284c4fb188e285$export$b52a470618d492ff","$324622009f29af48$export$d3f4bd7b80956108","repos","repo","$4cc75b374fd65488$var$entry","fun","$4cc75b374fd65488$var$map","getContext","contextToken","ex","getValuesMap","modifyContext","ce","el","mem","getDataFromObject","getDataFromArray","putDataInObject","putDataInArray","nextOp","je","to","step","forward","current","done","eve","count","isExpression","$4cc75b374fd65488$export$1ef8ffe3d9ea2320","$4b7f15a0d24799be$export$bdb0fa2261d7dee1","source","removeList","splice","copy","$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","REGEX_DOT","bIndex","fromIndex","PREFIX","$7501649217d0c960$export$638a1889bcd4621c","output","eachEvent","$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","flatMap","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","Date","getTime","replace","$6ce4d447a2468596$export$c72d1e96aedc073d","valueExtractors","functionRepository","executionId","getExecutionId","setContext","setStatementExecution","getSteps","steps","setSteps","getCount","setCount","getFunctionRepository","setFunctionRepository","setSchemaRepository","addTokenValueExtractor","extractors","tve","setValuesMap","$21114c98629ddba9$export$c72a235e9e048d37","StatementMessageType","$23413f16a9a7155c$export$454d8b636c7c716b","fd","VERSION","fep","g","prepareStatementExecution","makeEdges","inContext","eGraph","getExecutionPlan","unresolvedList","executeGraph","executionQue","branchQue","processBranchQue","processExecutionQue","MAX_EXECUTION_ITERATIONS","allDependenciesResolvedVertex","executeVertex","branch","allDependenciesResolvedTuples","executeBranch","nextOutput","resolveInternalExpressions","fRepo","paramSet","getArgumentsFromParametersMap","execute","isOutput","out","unResolvedDependencies","resolveInternalExpression","retArray","retObject","tup","stepName","getParameterMap","ret","prList","pDef","parameterReferenceEvaluation","VALUE","sRepo","se","p","refList","parameterReferenceValidation","ref1","ERROR","PARAMETER_NEEDS_A_VALUE","getDependentStatements","param1","paramElements","addDependencies","sch","match","STEP_REGEX_PATTERN","retValue","d","secondDot","eventDot","event","st","$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","setKey","setValue","setExpression","$5557399e4b585930$export$c84356afd4299847","sn","statementName","parameterMap","dependentStatements","setStatementName","setParameterMap","setDependentStatements","iv","$300b3f08c1962aad$export$bc161170aa8ed47b","statementGroupName","statements","getStatementGroupName","setStatementGroupName","getStatements","setStatements","toLowerCase","$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/exception/KIRuntimeException.ts","src/engine/json/schema/string/StringFormat.ts","src/engine/model/Event.ts","src/engine/model/EventResult.ts","src/engine/model/FunctionOutput.ts","src/engine/model/FunctionSignature.ts","src/engine/runtime/ContextElement.ts","src/engine/util/string/StringFormatter.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/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/context/Create.ts","src/engine/function/system/context/Get.ts","src/engine/exception/ExecutionException.ts","src/engine/util/LinkedList.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/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/util/primitive/PrimitiveUtil.ts","src/engine/runtime/expression/operators/binary/LogicalAndOperator.ts","src/engine/util/deepEqual.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/TokenValueExtractor.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/CountLoop.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/util/MapUtil.ts","src/engine/function/system/math/Random.ts","src/engine/function/system/math/MathFunctionRepository.ts","src/engine/HybridRepository.ts","src/engine/repository/KIRunFunctionRepository.ts","src/engine/util/ArrayUtil.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\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)) ArraySchemaType.of(...Schema.fromListOfSchemas(obj));\n\n let x = Schema.from(obj);\n if (!x) return undefined;\n return ArraySchemaType.of(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(types as SchemaType);\n } else if (Array.isArray(types)) {\n return new MultipleType(\n new Set(types.map((e) => e as any).map((e) => e as SchemaType)),\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 ENUMS: string = 'enums';\nconst ITEMS_STRING: string = 'items';\nconst SCHEMA_ROOT_PATH: string = '#/';\nconst REQUIRED_STRING: string = 'required';\nconst VERSION_STRING: string = 'version';\nconst NAMESPACE_STRING: string = 'namespace';\nconst TEMPORARY: string = '_';\n\nexport class AdditionalPropertiesType {\n private booleanValue?: boolean;\n private schemaValue?: Schema;\n\n constructor(apt: AdditionalPropertiesType | 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): AdditionalPropertiesType {\n this.booleanValue = booleanValue;\n return this;\n }\n\n public setSchemaValue(schemaValue: Schema): AdditionalPropertiesType {\n this.schemaValue = schemaValue;\n return this;\n }\n\n public static from(obj: any): AdditionalPropertiesType | undefined {\n if (!obj) return undefined;\n const ad = new AdditionalPropertiesType();\n ad.booleanValue = obj.booleanValue;\n ad.schemaValue = obj.schemaValue;\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 AdditionalPropertiesType().setSchemaValue(\n Schema.ofRef(SCHEMA_ROOT_PATH),\n ),\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 AdditionalPropertiesType().setSchemaValue(\n Schema.ofRef(SCHEMA_ROOT_PATH),\n ),\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 ['minItems', Schema.ofInteger('minItems')],\n ['maxItems', Schema.ofInteger('maxItems')],\n ['uniqueItems', Schema.ofBoolean('uniqueItems')],\n\n [\n '$defs',\n Schema.of('$defs', SchemaType.OBJECT).setAdditionalProperties(\n new AdditionalPropertiesType().setSchemaValue(\n Schema.ofRef(SCHEMA_ROOT_PATH),\n ),\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[] {\n if (isNullValue(list) && !Array.isArray(list)) return [];\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 = AdditionalPropertiesType.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.contains = Schema.from(obj.contains);\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?: AdditionalPropertiesType;\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 contains?: Schema;\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 AdditionalPropertiesType(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\n this.minItems = schema.minItems;\n this.maxItems = schema.maxItems;\n this.uniqueItems = schema.uniqueItems;\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 return this.getFullName();\n }\n\n private getFullName(): string | undefined {\n if (!this.namespace || this.namespace == TEMPORARY) return this.name;\n\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(): AdditionalPropertiesType | undefined {\n return this.additionalProperties;\n }\n public setAdditionalProperties(additionalProperties: AdditionalPropertiesType): Schema {\n this.additionalProperties = additionalProperties;\n return this;\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 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]);\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","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","export enum StringFormat {\n DATETIME = 'DATETIME',\n TIME = 'TIME',\n DATE = 'DATE',\n EMAIL = 'EMAIL',\n REGEX = 'REGEX',\n}\n","import { AdditionalPropertiesType, 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 AdditionalPropertiesType().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","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 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 { AdditionalPropertiesType, 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 AdditionalPropertiesType().setSchemaValue(Parameter.SCHEMA),\n ),\n ],\n [\n 'events',\n Schema.ofObject('events').setAdditionalProperties(\n new AdditionalPropertiesType().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}\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","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 { 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 { 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(s: Schema | undefined, sRepository: Repository<Schema>): any {\n if (!s) return undefined;\n\n if (s.getConstant()) return s.getConstant();\n\n if (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 getSchemaFromRef(\n schema: Schema,\n sRepository: Repository<Schema> | undefined,\n ref: string | undefined,\n iteration: number = 0,\n ): Schema | undefined {\n iteration++;\n\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(parents, schema, repository, array);\n\n return element;\n }\n\n public static checkContains(\n parents: Schema[],\n schema: Schema,\n repository: Repository<Schema> | undefined,\n array: any[],\n ) {\n if (!schema.getContains()) return;\n\n let flag: boolean = false;\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 flag = true;\n break;\n } catch (err) {\n flag = false;\n }\n }\n\n if (!flag) {\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n 'None of the items are of type contains schema',\n );\n }\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 (type.getTupleSchema()!.length !== array.length) {\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 for (let i = 0; i < array.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\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 { 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 (element)\n throw new SchemaValidationException(\n SchemaValidator.path(parents),\n 'Expected a null but found ' + element,\n );\n\n return element;\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 { AdditionalPropertiesType, Schema } from '../Schema';\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: AdditionalPropertiesType = 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 keys.toString() + ' 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 if (isNullValue(value)) continue;\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","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 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.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.getMinLength()!) {\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 { 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 (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.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 (!schema.getConstant().equals(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 { 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","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 { KIRuntimeException } from '../exception/KIRuntimeException';\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>(\n callbackfn: (value: T, index: number) => U,\n thisArg?: any,\n ): 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 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 { 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 { 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 { Operation } from '../../Operation';\nimport { BinaryOperator } from './BinaryOperator';\n\nexport class ArithmeticAdditionOperator extends BinaryOperator {\n public apply(t: any, u: any): any {\n this.nullCheck(t, u, Operation.ADDITION);\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 { 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 (!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 { 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 { 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 { 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 { 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 LogicalNotOperator extends UnaryOperator {\n public apply(t: any): any {\n this.nullCheck(t, Operation.UNARY_LOGICAL_NOT);\n\n let tType: Tuple2<SchemaType, any> = PrimitiveUtil.findPrimitiveNumberType(t);\n\n if (tType.getT1() != SchemaType.BOOLEAN)\n throw new ExecutionException(\n StringFormatter.format('Unable to apply bitwise operator on $', t),\n );\n\n return !t;\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 private 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 (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 private 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 { 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]);\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 COUNT = 'count';\nconst VALUE = 'value';\nconst INDEX = 'index';\n\nconst SIGNATURE = new FunctionSignature('CountLoop')\n .setNamespace(Namespaces.SYSTEM_LOOP)\n .setParameters(\n new Map([\n Parameter.ofEntry(COUNT, Schema.of(COUNT, SchemaType.INTEGER).setDefaultValue(1)),\n ]),\n )\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\n return new FunctionOutput({\n next(): EventResult {\n if (current >= count) {\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 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\n return new FunctionOutput({\n next(): EventResult | undefined {\n if (done) return undefined;\n\n if ((forward && current >= to) || (!forward && current <= to)) {\n done = true;\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 { 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 { 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 { SchemaType } from '../../../json/schema/type/SchemaType';\nimport { Namespaces } from '../../../namespaces/Namespaces';\nimport { Repository } from '../../../Repository';\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';\n\nconst functionObjectsIndex: any = {\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};\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","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","import { Function } from '../function/Function';\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 { CountLoop } from '../function/system/loop/CountLoop';\nimport { RangeLoop } from '../function/system/loop/RangeLoop';\nimport { MathFunctionRepository } from '../function/system/math/MathFunctionRepository';\nimport { HybridRepository } from '../HybridRepository';\nimport { Namespaces } from '../namespaces/Namespaces';\n\nfunction entry(fun: Function): [string, Function] {\n return [fun.getSignature().getName(), fun];\n}\n\nconst map: Map<string, Map<string, Function>> = new Map([\n [\n Namespaces.SYSTEM_CTX,\n new Map([entry(new Create()), entry(new Get()), entry(new SetFunction())]),\n ],\n [Namespaces.SYSTEM_LOOP, new Map([entry(new RangeLoop()), entry(new CountLoop())])],\n [Namespaces.SYSTEM, new Map([entry(new If()), entry(new GenerateEvent())])],\n]);\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 },\n new MathFunctionRepository(),\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 { 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\n let element: any = eachEvent.get(parts[ind++]);\n\n return this.retrieveElementFrom(token, parts, ind, 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 { ArgumentsTokenValueExtractor } from './tokenextractor/ArgumentsTokenValueExtractor';\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\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 let x: TokenValueExtractor = new ArgumentsTokenValueExtractor(args);\n this.valueExtractors.set(x.getPrefix(), x);\n return this;\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","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';\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 public constructor(fd: FunctionDefinition) {\n super();\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 fep: FunctionExecutionParameters,\n ): Promise<Tuple2<Tuple2<string, string>[], 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(\n this.prepareStatementExecution(\n s,\n fep.getFunctionRepository(),\n fep.getSchemaRepository(),\n ),\n );\n\n return new Tuple2(this.makeEdges(g), 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 let eGraph: Tuple2<\n Tuple2<string, string>[],\n ExecutionGraph<string, StatementExecution>\n > = await this.getExecutionPlan(inContext);\n\n let unresolvedList: Tuple2<string, string>[] = eGraph.getT1();\n\n if (unresolvedList.length) {\n throw new KIRuntimeException(\n StringFormatter.format(\n 'Found these unresolved dependencies : $ ',\n unresolvedList.map((e) =>\n StringFormatter.format('Steps.$.$', e.getT1(), e.getT2()),\n ),\n ),\n );\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 .getT2()\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.getT2(), 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 throw new KIRuntimeException('No events raised');\n }\n\n return new FunctionOutput(\n Array.from(inContext.getEvents()?.entries() ?? []).flatMap((e) =>\n e[1].map((v) => EventResult.of(e[0], v)),\n ),\n );\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 await this.resolveInternalExpressions(nextOutput.getResult(), inContext),\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((e) => executionQue.add(e));\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 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 let context: Map<string, ContextElement> = inContext.getContext()!;\n\n let result: FunctionOutput = await fun.execute(\n 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 );\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 inContext\n .getSteps()!\n .get(s.getStatementName())!\n .set(er.getName(), this.resolveInternalExpressions(er.getResult(), inContext));\n\n if (!isOutput) {\n let subGraph = vertex.getSubGraphOfType(er.getName());\n let unResolvedDependencies: Tuple2<string, string>[] = this.makeEdges(subGraph);\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) out.forEach((e) => executionQue.add(e));\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 .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 throw new KIRuntimeException(\n StringFormatter.format('$.$ was not available', s.getNamespace(), s.getName()),\n );\n }\n\n let paramSet: Map<string, Parameter> = new Map(fun.getSignature().getParameters());\n\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 (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 paramSet.delete(p.getParameterName());\n continue;\n }\n\n if (p.isVariableArgument()) {\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 (paramSet.size) {\n for (let param of Array.from(paramSet.values())) {\n if (param.isVariableArgument()) continue;\n if (isNullValue(SchemaUtil.getDefaultValue(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 isNullValue(SchemaUtil.getDefaultValue(p.getSchema(), sRepo))\n )\n se.addMessage(\n StatementMessageType.ERROR,\n StringFormatter.format(KIRuntime.PARAMETER_NEEDS_A_VALUE, p.getParameterName()),\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(graph: ExecutionGraph<string, StatementExecution>): Tuple2<string, string>[] {\n let values = graph.getNodeMap().values();\n\n let retValue: Tuple2<string, string>[] = [];\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)) retValue.push(new Tuple2(step, event));\n\n let st = graph.getNodeMap()!.get(step);\n if (st) e.addInEdgeTo(st, event);\n }\n }\n\n return retValue;\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 {\n if (!json) return new Position(-1, -1);\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): 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 ]),\n );\n\n private key: string;\n private type: ParameterReferenceType;\n private value: any;\n private expression?: string;\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 } 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 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 }\n}\n","import { AdditionalPropertiesType, 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').setAdditionalProperties(\n new AdditionalPropertiesType().setSchemaValue(Schema.ofBoolean('exists')),\n ),\n ],\n [\n 'parameterMap',\n new Schema()\n .setName('parameterMap')\n .setAdditionalProperties(\n new AdditionalPropertiesType().setSchemaValue(\n Schema.ofObject('parameterReference').setAdditionalProperties(\n new AdditionalPropertiesType().setSchemaValue(\n ParameterReference.SCHEMA,\n ),\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\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 public getDependentStatements(): Map<string, boolean> {\n return this.dependentStatements ?? new Map();\n }\n public setDependentStatements(dependentStatements: Map<string, boolean>): Statement {\n this.dependentStatements = dependentStatements;\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 .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 { AdditionalPropertiesType, 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 AdditionalPropertiesType().setSchemaValue(Event.SCHEMA),\n ),\n ],\n [\n 'steps',\n Schema.ofObject('steps').setAdditionalProperties(\n new AdditionalPropertiesType().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","of","fromListOfSchemas","x","from","$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$34a8e14a3ac7d480","apt","booleanValue","schemaValue","getBooleanValue","getSchemaValue","setBooleanValue","setSchemaValue","ad","setNamespace","SYSTEM","setName","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","Object","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","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","getRequired","getPropertyNames","setPropertyNames","getMinProperties","setMinProperties","getMaxProperties","setMaxProperties","getPatternProperties","setPatternProperties","getItems","getContains","setContains","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$export$a0de004d4b269741","find","get","$28804be3f1c4834a$export$37b1b5eb4f4f5ada","$540088a715acffc2$export$f22e7fe56db8ae03","StringFormat","$970f7bbcafb2c50d$export$d61e24a684f9e51","evn","parameters","getParameters","setParameters","eventMapEntry","OUTPUT","eventName","eventSchema","$8bed54297f17864d$export$c45be2437182b0e3","result","getResult","setResult","$c10c9982d8b7a6b8$export$46c58e8ae2505a7d","index","arg","fo","generator","next","er","allResults","$2e21ebbbef520683$export$6ac699b48d627131","events","getEvents","setEvents","$0c4ac653cf8285f8$export$d249626f99a0976c","element","getElement","setElement","$ea8539f6d865ce04$export$5a7f7b467323cd66","formatString","params","sb","ind","chr","prevchar","i","charAt","substring","toString","$c99e079d9bc86c78$export$592e033edf5fafe4","str","c","occurance","indexOf","$52215c513713acac$export$50073dc6080ec093","f","s","getT1","getT2","setT1","setT2","$52215c513713acac$export$82dc29c19cc50d89","t","getT3","setT3","$52215c513713acac$export$c0401e7e2326d13b","fr","getT4","setT4","$0ad73ab1d75e3eb4$export$18db27caa68e620c","sve","reduce","a","$c64d9d969a282a82$export$7eb0095ad5663979","sRepository","getSchemaFromRef","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","flag","validate","$d84452374c548781$export$5ea2dbb44eae89d6","path","$5cbc9dc65a90aa0c$export$a006ee8cc7b6580a","array","checkMinMaxItems","checkItems","checkUniqueItems","checkContains","newParents","size","i1","newParents1","element1","$f16a0327a17a34fc$export$d74a5d77bac81ab5","$3356a5c800d1131a$export$cd3b7079b2ac4000","$d8e1a543f29ba7d8$export$5464fb7e86e4a9f1","n","extractNumber","checkRange","checkMultipleOf","Math","round","numberCompare","n1","n2","$37975652d3bbb152$export$e97b0a585a2ce29f","jsonObject","keys","checkMinMaxProperties","checkPropertyNameSchema","checkRequired","checkProperties","checkPatternProperties","checkAddtionalProperties","key","values","compiledPatterns","keyPattern","RegExp","test","delete","each","$5b487331eeaf33e7$export$312ff19fe6f84b5e","TIME","patternMatcher","DATE","DATETIME","$180899b5bb1efe85$export$9ced0f77dc6abfd7","filter","constantValidation","enumCheck","typeValidation","equals","valid","$a1225b4e7799ebbf$export$6138b597adfac7c","validateArguments","args","schemaRepository","statementExecution","getSignature","param","validateArgument","signature","getStatement","getStatementName","jsonElement","async","context","setArguments","getArguments","getSchemaRepository","getStatementExecution","internalExecute","getProbableEventSignature","probableParameters","$1eb4b4d4afac7df7$var$SIGNATURE","SYSTEM_CTX","ofEntry","REGEX","CONSTANT","outputEventMapEntry","$e8e2ed47b53194a9$var$SIGNATURE","$4e058298a8f3f696$export$50d5074000755e42","$3cb6da8eee9f96c7$export$f0ef28713f767754","head","tail","node","$3cb6da8eee9f96c7$var$Node","previous","pop","isEmpty","toArray","arr","peek","peekLast","getFirst","removeFirst","removeLast","addAll","add","bind","callbackfn","thisArg","newList","$fc4d9e77c2a45911$export$a76dbac5bd058d1b","append","setLength","num","deleteCharAt","checkIndex","insert","start","end","$8760f1cd91f30831$export$acb5fd6ef0dd45e7","expression","$e6642cbfb2fcba93$export$e67adacf2c583eeb","getExpression","$fec970ca78a92862$export$c3407419a51d8741","getTokenValue","$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","j","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","temp","temp1","temp2","$d785d0d318022812$export$a5835aa4dc4a0f7","nullCheck","e1","e2","$cbe984a506d536a3$export$a8b4ac5cec7f3ef1","apply","u","$4da9fb38158791c8$export$f7d907e108ff5f5a","$7accff43740ada67$export$4429718dd207f524","$12d3b2b894cf9f8b$export$461eeaed4fd44d87","floor","$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","$99aa72cfcbe4f53f$export$3755dd8569265c2c","typof","findPrimitiveNumberType","Number","isInteger","b","cmp","compare","typofa","typofb","comparePrimitive","oa","ob","$8a7149a874759c44$export$e62aa8d75c9a4734","tType","findPrimitiveNullAsBoolean","uType","$2b39939b69590d5c$export$9cb4719e2e525b7a","y","xa","yb","typeOfA","typeOfB","entriesOfA","entriesOfB","$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","$bbb484db7fdea9cc$export$d44091f0b447fefe","getValue","token","prefix","getPrefix","getValueInternal","retrieveElementFrom","partNumber","bElement","REGEX_SQUARE_BRACKETS","resolveForEachPartOfTokenWithBrackets","parseInt","isNaN","checkIfObject","endsWith","index1","err1","$14f460c98179a8c1$var$KEYWORDS","$14f460c98179a8c1$export$439f57d66896a884","processString","processNumbers","$992dc32892df2d89$export$b9f061bcfab247ed","e3","$9927f930e460c1d1$export$d538ac16fbea0cfa","addValue","REGEX_DOT","bIndex","fromIndex","PREFIX","$2d15a60196232a30$export$c24f16fac926e77f","UNARY_OPERATORS_MAP","internalTokenValueExtractor","exp","valuesMap","processNestingExpression","evaluateExpression","tuples","newExpression","replaceNestingExpression","expStr","getExpressionString","UNARY_OPERATORS_MAP_KEY_SET","applyUnaryOperation","getValueFromToken","processObjectOrArrayOperator","token2","token3","v1","v2","v3","applyTernaryOperation","token21","applyBinaryOperation","token1","objTokens","objOperations","objToken","Date","getTime","random","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","outputOf","$6f3bdb484a34414f$var$SIGNATURE","SYSTEM_LOOP","ITERATION","$f469a40df35836ae$var$SIGNATURE","$7cb20692a5bd7b0e$var$SIGNATURE","MATH","$01fa6744fa24471f$var$paramFunctions","$01fa6744fa24471f$export$dbb56c1f07bdf68c","functionName","mathFunction","parametersNumber","returnType","call","$406fb3da3e020552$export$73af47b8d41ff64","nums","sqrt","$7e32b13425d565a1$var$SIGNATURE","$c8aed76f3a52d884$var$SIGNATURE","$7ecb487721af7c67$export$92eaabd025f1e921","k1","k2","k3","k4","v4","k5","v5","k6","v6","k7","v7","k8","v8","k9","v9","k10","v10","entry","$7ecb487721af7c67$export$4758715d917352b9","eachEntry","$eb04fdf151798117$export$a92776769f460054","$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","$3c284c4fb188e285$export$b52a470618d492ff","$324622009f29af48$export$d3f4bd7b80956108","repos","repo","$4cc75b374fd65488$var$entry","fun","$4cc75b374fd65488$var$map","getContext","contextToken","ex","getValuesMap","modifyContext","ce","el","mem","getDataFromObject","getDataFromArray","putDataInObject","putDataInArray","nextOp","je","to","step","forward","current","done","eve","count","isExpression","$4cc75b374fd65488$export$1ef8ffe3d9ea2320","$4b7f15a0d24799be$export$bdb0fa2261d7dee1","source","removeList","splice","copy","$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","output","eachEvent","$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","flatMap","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","replace","$6ce4d447a2468596$export$c72d1e96aedc073d","valueExtractors","functionRepository","executionId","getExecutionId","setContext","setStatementExecution","getSteps","steps","setSteps","getCount","setCount","getFunctionRepository","setFunctionRepository","setSchemaRepository","addTokenValueExtractor","extractors","tve","setValuesMap","$21114c98629ddba9$export$c72a235e9e048d37","StatementMessageType","$23413f16a9a7155c$export$454d8b636c7c716b","fd","VERSION","fep","g","prepareStatementExecution","makeEdges","inContext","eGraph","getExecutionPlan","unresolvedList","executeGraph","executionQue","branchQue","processBranchQue","processExecutionQue","MAX_EXECUTION_ITERATIONS","allDependenciesResolvedVertex","executeVertex","branch","allDependenciesResolvedTuples","executeBranch","nextOutput","resolveInternalExpressions","fRepo","paramSet","getArgumentsFromParametersMap","execute","isOutput","out","unResolvedDependencies","resolveInternalExpression","retArray","retObject","tup","stepName","getParameterMap","ret","prList","pDef","parameterReferenceEvaluation","VALUE","sRepo","se","p","refList","parameterReferenceValidation","ref1","ERROR","PARAMETER_NEEDS_A_VALUE","getDependentStatements","param1","paramElements","addDependencies","sch","match","STEP_REGEX_PATTERN","retValue","d","secondDot","eventDot","event","st","$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","setKey","setValue","setExpression","$5557399e4b585930$export$c84356afd4299847","sn","statementName","parameterMap","dependentStatements","setStatementName","setParameterMap","setDependentStatements","iv","$300b3f08c1962aad$export$bc161170aa8ed47b","statementGroupName","statements","getStatementGroupName","setStatementGroupName","getStatements","setStatements","toLowerCase","$0841f6803da1feb1$var$IN_SCHEMA","$0841f6803da1feb1$export$ac28d24969149b5c","getStepGroups","stepGroups","setStepGroups","getParts","setParts","$035c8de64001252d$export$84637ea037d2e218","argumentIndex","getArgumentIndex","setArgumentIndex"],"version":3,"file":"index.js.map"}
|