@fincity/kirun-js 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (217) hide show
  1. package/.prettierrc +9 -0
  2. package/__tests__/engine/function/system/array/AddFirstTest.ts +235 -0
  3. package/__tests__/engine/function/system/array/AddTest.ts +126 -0
  4. package/__tests__/engine/function/system/array/BinarySearchTest.ts +135 -0
  5. package/__tests__/engine/function/system/array/CompareTest.ts +48 -0
  6. package/__tests__/engine/function/system/array/CopyTest.ts +86 -0
  7. package/__tests__/engine/function/system/array/DeleteFirstTest.ts +103 -0
  8. package/__tests__/engine/function/system/array/DeleteFromTest.ts +232 -0
  9. package/__tests__/engine/function/system/array/DeleteLastTest.ts +103 -0
  10. package/__tests__/engine/function/system/array/DeleteTest.ts +110 -0
  11. package/__tests__/engine/function/system/array/DisjointTest.ts +184 -0
  12. package/__tests__/engine/function/system/array/Equals.ts +67 -0
  13. package/__tests__/engine/function/system/array/FillTest.ts +36 -0
  14. package/__tests__/engine/function/system/array/FrequencyTest.ts +97 -0
  15. package/__tests__/engine/function/system/array/IndexOfArrayTest.ts +347 -0
  16. package/__tests__/engine/function/system/array/IndexOfTest.ts +267 -0
  17. package/__tests__/engine/function/system/array/InsertTest.ts +229 -0
  18. package/__tests__/engine/function/system/array/LastIndexOfArrayTest.ts +213 -0
  19. package/__tests__/engine/function/system/array/LastIndexOfTest.ts +253 -0
  20. package/__tests__/engine/function/system/array/MaxTest.ts +98 -0
  21. package/__tests__/engine/function/system/array/MinTest.ts +99 -0
  22. package/__tests__/engine/function/system/array/MisMatchTest.ts +215 -0
  23. package/__tests__/engine/function/system/array/ReverseTest.ts +235 -0
  24. package/__tests__/engine/function/system/array/RotateTest.ts +137 -0
  25. package/__tests__/engine/function/system/array/ShuffleTest.ts +154 -0
  26. package/__tests__/engine/function/system/array/SortTest.ts +130 -0
  27. package/__tests__/engine/function/system/array/SubArrayTest.ts +236 -0
  28. package/__tests__/engine/function/system/math/AddTest.ts +12 -0
  29. package/__tests__/engine/function/system/string/ConcatenateTest.ts +46 -0
  30. package/__tests__/engine/function/system/string/DeleteForGivenLengthTest.ts +38 -0
  31. package/__tests__/engine/function/system/string/InsertAtGivenPositionTest.ts +53 -0
  32. package/__tests__/engine/function/system/string/PostPadTest.ts +54 -0
  33. package/__tests__/engine/function/system/string/PrePadTest.ts +54 -0
  34. package/__tests__/engine/function/system/string/RegionMatchesTest.ts +78 -0
  35. package/__tests__/engine/function/system/string/ReverseTest.ts +36 -0
  36. package/__tests__/engine/function/system/string/SplitTest.ts +61 -0
  37. package/__tests__/engine/function/system/string/StringFunctionRepoTest2.ts +126 -0
  38. package/__tests__/engine/function/system/string/StringFunctionRepoTest3.ts +54 -0
  39. package/__tests__/engine/function/system/string/StringFunctionRepositoryTest.ts +146 -0
  40. package/__tests__/engine/function/system/string/ToStringTest.ts +43 -0
  41. package/__tests__/engine/function/system/string/TrimToTest.ts +28 -0
  42. package/__tests__/engine/json/schema/validator/SchemaValidatorTest.ts +26 -0
  43. package/__tests__/engine/runtime/KIRuntimeTest.ts +351 -0
  44. package/__tests__/engine/runtime/expression/ExpressionEvaluationTest.ts +128 -0
  45. package/__tests__/engine/runtime/expression/ExpressionTest.ts +33 -0
  46. package/__tests__/engine/runtime/expression/tokenextractor/OutputMapTokenValueExtractorTest.ts +44 -0
  47. package/__tests__/engine/runtime/expression/tokenextractor/TokenValueExtractorTest.ts +72 -0
  48. package/__tests__/engine/util/LinkedListTest.ts +29 -0
  49. package/__tests__/engine/util/string/StringFormatterTest.ts +17 -0
  50. package/__tests__/indexTest.ts +33 -0
  51. package/dist/index.js +2 -0
  52. package/dist/index.js.map +1 -0
  53. package/dist/module.js +2 -0
  54. package/dist/module.js.map +1 -0
  55. package/dist/types.d.ts +430 -0
  56. package/dist/types.d.ts.map +1 -0
  57. package/package.json +54 -0
  58. package/src/engine/HybridRepository.ts +18 -0
  59. package/src/engine/Repository.ts +3 -0
  60. package/src/engine/constant/KIRunConstants.ts +7 -0
  61. package/src/engine/exception/ExecutionException.ts +12 -0
  62. package/src/engine/exception/KIRuntimeException.ts +12 -0
  63. package/src/engine/function/AbstractFunction.ts +76 -0
  64. package/src/engine/function/Function.ts +13 -0
  65. package/src/engine/function/system/GenerateEvent.ts +76 -0
  66. package/src/engine/function/system/If.ts +40 -0
  67. package/src/engine/function/system/array/AbstractArrayFunction.ts +158 -0
  68. package/src/engine/function/system/array/Add.ts +31 -0
  69. package/src/engine/function/system/array/AddFirst.ts +44 -0
  70. package/src/engine/function/system/array/BinarySearch.ts +66 -0
  71. package/src/engine/function/system/array/Compare.ts +150 -0
  72. package/src/engine/function/system/array/Copy.ts +56 -0
  73. package/src/engine/function/system/array/Delete.ts +63 -0
  74. package/src/engine/function/system/array/DeleteFirst.ts +22 -0
  75. package/src/engine/function/system/array/DeleteFrom.ts +51 -0
  76. package/src/engine/function/system/array/DeleteLast.ts +23 -0
  77. package/src/engine/function/system/array/Disjoint.ts +85 -0
  78. package/src/engine/function/system/array/Equals.ts +36 -0
  79. package/src/engine/function/system/array/Fill.ts +51 -0
  80. package/src/engine/function/system/array/Frequency.ts +68 -0
  81. package/src/engine/function/system/array/IndexOf.ts +56 -0
  82. package/src/engine/function/system/array/IndexOfArray.ts +67 -0
  83. package/src/engine/function/system/array/Insert.ts +48 -0
  84. package/src/engine/function/system/array/LastIndexOf.ts +62 -0
  85. package/src/engine/function/system/array/LastIndexOfArray.ts +70 -0
  86. package/src/engine/function/system/array/Max.ts +31 -0
  87. package/src/engine/function/system/array/Min.ts +32 -0
  88. package/src/engine/function/system/array/MisMatch.ts +66 -0
  89. package/src/engine/function/system/array/Reverse.ts +50 -0
  90. package/src/engine/function/system/array/Rotate.ts +43 -0
  91. package/src/engine/function/system/array/Shuffle.ts +31 -0
  92. package/src/engine/function/system/array/Sort.ts +70 -0
  93. package/src/engine/function/system/array/SubArray.ts +48 -0
  94. package/src/engine/function/system/context/Create.ts +73 -0
  95. package/src/engine/function/system/context/Get.ts +55 -0
  96. package/src/engine/function/system/context/SetFunction.ts +244 -0
  97. package/src/engine/function/system/loop/CountLoop.ts +55 -0
  98. package/src/engine/function/system/loop/RangeLoop.ts +120 -0
  99. package/src/engine/function/system/math/Add.ts +34 -0
  100. package/src/engine/function/system/math/GenericMathFunction.ts +80 -0
  101. package/src/engine/function/system/math/Hypotenuse.ts +57 -0
  102. package/src/engine/function/system/math/MathFunctionRepository.ts +63 -0
  103. package/src/engine/function/system/math/Maximum.ts +38 -0
  104. package/src/engine/function/system/math/Minimum.ts +38 -0
  105. package/src/engine/function/system/math/Random.ts +27 -0
  106. package/src/engine/function/system/string/AbstractStringFunction.ts +409 -0
  107. package/src/engine/function/system/string/Concatenate.ts +57 -0
  108. package/src/engine/function/system/string/DeleteForGivenLength.ts +82 -0
  109. package/src/engine/function/system/string/InsertAtGivenPosition.ts +72 -0
  110. package/src/engine/function/system/string/PostPad.ts +83 -0
  111. package/src/engine/function/system/string/PrePad.ts +73 -0
  112. package/src/engine/function/system/string/RegionMatches.ts +119 -0
  113. package/src/engine/function/system/string/ReplaceAtGivenPosition.ts +101 -0
  114. package/src/engine/function/system/string/Reverse.ts +62 -0
  115. package/src/engine/function/system/string/Split.ts +53 -0
  116. package/src/engine/function/system/string/StringFunctionRepository.ts +60 -0
  117. package/src/engine/function/system/string/ToString.ts +45 -0
  118. package/src/engine/function/system/string/TrimTo.ts +55 -0
  119. package/src/engine/json/JsonExpression.ts +11 -0
  120. package/src/engine/json/schema/Schema.ts +670 -0
  121. package/src/engine/json/schema/SchemaUtil.ts +145 -0
  122. package/src/engine/json/schema/array/ArraySchemaType.ts +44 -0
  123. package/src/engine/json/schema/object/AdditionalPropertiesType.ts +32 -0
  124. package/src/engine/json/schema/string/StringFormat.ts +7 -0
  125. package/src/engine/json/schema/type/MultipleType.ts +28 -0
  126. package/src/engine/json/schema/type/SchemaType.ts +11 -0
  127. package/src/engine/json/schema/type/SingleType.ts +23 -0
  128. package/src/engine/json/schema/type/Type.ts +6 -0
  129. package/src/engine/json/schema/type/TypeUtil.ts +25 -0
  130. package/src/engine/json/schema/validator/AnyOfAllOfOneOfValidator.ts +108 -0
  131. package/src/engine/json/schema/validator/ArrayValidator.ts +145 -0
  132. package/src/engine/json/schema/validator/BooleanValidator.ts +24 -0
  133. package/src/engine/json/schema/validator/NullValidator.ts +17 -0
  134. package/src/engine/json/schema/validator/NumberValidator.ts +115 -0
  135. package/src/engine/json/schema/validator/ObjectValidator.ts +184 -0
  136. package/src/engine/json/schema/validator/SchemaValidator.ts +141 -0
  137. package/src/engine/json/schema/validator/StringValidator.ts +97 -0
  138. package/src/engine/json/schema/validator/TypeValidator.ts +49 -0
  139. package/src/engine/json/schema/validator/exception/SchemaReferenceException.ts +19 -0
  140. package/src/engine/json/schema/validator/exception/SchemaValidationException.ts +22 -0
  141. package/src/engine/model/AbstractStatement.ts +29 -0
  142. package/src/engine/model/Argument.ts +36 -0
  143. package/src/engine/model/Event.ts +62 -0
  144. package/src/engine/model/EventResult.ts +34 -0
  145. package/src/engine/model/FunctionDefinition.ts +69 -0
  146. package/src/engine/model/FunctionOutput.ts +37 -0
  147. package/src/engine/model/FunctionOutputGenerator.ts +5 -0
  148. package/src/engine/model/FunctionSignature.ts +67 -0
  149. package/src/engine/model/Parameter.ts +97 -0
  150. package/src/engine/model/ParameterReference.ts +57 -0
  151. package/src/engine/model/ParameterReferenceType.ts +4 -0
  152. package/src/engine/model/ParameterType.ts +4 -0
  153. package/src/engine/model/Position.ts +40 -0
  154. package/src/engine/model/Statement.ts +101 -0
  155. package/src/engine/model/StatementGroup.ts +37 -0
  156. package/src/engine/namespaces/Namespaces.ts +11 -0
  157. package/src/engine/repository/KIRunFunctionRepository.ts +37 -0
  158. package/src/engine/repository/KIRunSchemaRepository.ts +24 -0
  159. package/src/engine/runtime/ContextElement.ts +28 -0
  160. package/src/engine/runtime/FunctionExecutionParameters.ts +74 -0
  161. package/src/engine/runtime/KIRuntime.ts +653 -0
  162. package/src/engine/runtime/StatementExecution.ts +61 -0
  163. package/src/engine/runtime/StatementMessage.ts +30 -0
  164. package/src/engine/runtime/StatementMessageType.ts +5 -0
  165. package/src/engine/runtime/expression/Expression.ts +330 -0
  166. package/src/engine/runtime/expression/ExpressionEvaluator.ts +305 -0
  167. package/src/engine/runtime/expression/ExpressionToken.ts +15 -0
  168. package/src/engine/runtime/expression/ExpressionTokenValue.ts +23 -0
  169. package/src/engine/runtime/expression/Operation.ts +190 -0
  170. package/src/engine/runtime/expression/exception/ExpressionEvaluationException.ts +15 -0
  171. package/src/engine/runtime/expression/operators/binary/ArithmeticAdditionOperator.ts +9 -0
  172. package/src/engine/runtime/expression/operators/binary/ArithmeticDivisionOperator.ts +9 -0
  173. package/src/engine/runtime/expression/operators/binary/ArithmeticInetgerDivisionOperator.ts +9 -0
  174. package/src/engine/runtime/expression/operators/binary/ArithmeticModulusOperator.ts +9 -0
  175. package/src/engine/runtime/expression/operators/binary/ArithmeticMultiplicationOperator.ts +9 -0
  176. package/src/engine/runtime/expression/operators/binary/ArithmeticSubtractionOperator.ts +9 -0
  177. package/src/engine/runtime/expression/operators/binary/ArrayOperator.ts +31 -0
  178. package/src/engine/runtime/expression/operators/binary/BinaryOperator.ts +15 -0
  179. package/src/engine/runtime/expression/operators/binary/BitwiseAndOperator.ts +9 -0
  180. package/src/engine/runtime/expression/operators/binary/BitwiseLeftShiftOperator.ts +9 -0
  181. package/src/engine/runtime/expression/operators/binary/BitwiseOrOperator.ts +9 -0
  182. package/src/engine/runtime/expression/operators/binary/BitwiseRightShiftOperator.ts +9 -0
  183. package/src/engine/runtime/expression/operators/binary/BitwiseUnsignedRightShiftOperator.ts +9 -0
  184. package/src/engine/runtime/expression/operators/binary/BitwiseXorOperator.ts +9 -0
  185. package/src/engine/runtime/expression/operators/binary/LogicalAndOperator.ts +25 -0
  186. package/src/engine/runtime/expression/operators/binary/LogicalEqualOperator.ts +13 -0
  187. package/src/engine/runtime/expression/operators/binary/LogicalGreaterThanEqualOperator.ts +24 -0
  188. package/src/engine/runtime/expression/operators/binary/LogicalGreaterThanOperator.ts +24 -0
  189. package/src/engine/runtime/expression/operators/binary/LogicalLessThanEqualOperator.ts +24 -0
  190. package/src/engine/runtime/expression/operators/binary/LogicalLessThanOperator.ts +24 -0
  191. package/src/engine/runtime/expression/operators/binary/LogicalNotEqualOperator.ts +13 -0
  192. package/src/engine/runtime/expression/operators/binary/LogicalOrOperator.ts +25 -0
  193. package/src/engine/runtime/expression/operators/binary/ObjectOperator.ts +24 -0
  194. package/src/engine/runtime/expression/operators/unary/ArithmeticUnaryMinusOperator.ts +13 -0
  195. package/src/engine/runtime/expression/operators/unary/ArithmeticUnaryPlusOperator.ts +13 -0
  196. package/src/engine/runtime/expression/operators/unary/BitwiseComplementOperator.ts +22 -0
  197. package/src/engine/runtime/expression/operators/unary/LogicalNotOperator.ts +22 -0
  198. package/src/engine/runtime/expression/operators/unary/UnaryOperator.ts +15 -0
  199. package/src/engine/runtime/expression/tokenextractor/LiteralTokenValueExtractor.ts +64 -0
  200. package/src/engine/runtime/expression/tokenextractor/TokenValueExtractor.ts +136 -0
  201. package/src/engine/runtime/graph/ExecutionGraph.ts +81 -0
  202. package/src/engine/runtime/graph/GraphVertex.ts +118 -0
  203. package/src/engine/runtime/graph/GraphVertexType.ts +4 -0
  204. package/src/engine/runtime/tokenextractor/ArgumentsTokenValueExtractor.ts +22 -0
  205. package/src/engine/runtime/tokenextractor/ContextTokenValueExtractor.ts +37 -0
  206. package/src/engine/runtime/tokenextractor/OutputMapTokenValueExtractor.ts +32 -0
  207. package/src/engine/util/ArrayUtil.ts +23 -0
  208. package/src/engine/util/LinkedList.ts +229 -0
  209. package/src/engine/util/MapUtil.ts +86 -0
  210. package/src/engine/util/NullCheck.ts +3 -0
  211. package/src/engine/util/Tuples.ts +43 -0
  212. package/src/engine/util/primitive/PrimitiveUtil.ts +143 -0
  213. package/src/engine/util/string/StringBuilder.ts +59 -0
  214. package/src/engine/util/string/StringFormatter.ts +25 -0
  215. package/src/engine/util/string/StringUtil.ts +48 -0
  216. package/src/index.ts +13 -0
  217. package/tsconfig.json +6 -0
@@ -0,0 +1 @@
1
+ {"mappings":"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","sources":["src/engine/util/Tuples.ts","src/engine/HybridRepository.ts","src/engine/namespaces/Namespaces.ts","src/engine/util/NullCheck.ts","src/engine/json/schema/array/ArraySchemaType.ts","src/engine/json/schema/object/AdditionalPropertiesType.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/exception/KIRuntimeException.ts","src/engine/util/string/StringFormatter.ts","src/engine/util/string/StringUtil.ts","src/engine/json/schema/validator/exception/SchemaReferenceException.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/NumberValidator.ts","src/engine/json/schema/validator/ObjectValidator.ts","src/engine/json/schema/string/StringFormat.ts","src/engine/json/schema/validator/StringValidator.ts","src/engine/json/schema/validator/TypeValidator.ts","src/engine/json/schema/validator/BooleanValidator.ts","src/engine/json/schema/validator/NullValidator.ts","src/engine/json/schema/validator/SchemaValidator.ts","src/engine/constant/KIRunConstants.ts","src/engine/exception/ExecutionException.ts","src/engine/function/AbstractFunction.ts","src/engine/json/JsonExpression.ts","src/engine/model/Event.ts","src/engine/model/EventResult.ts","src/engine/model/FunctionOutput.ts","src/engine/model/ParameterType.ts","src/engine/model/Parameter.ts","src/engine/model/ParameterReferenceType.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/Operation.ts","src/engine/runtime/expression/Expression.ts","src/engine/runtime/expression/ExpressionTokenValue.ts","src/engine/runtime/expression/operators/binary/BinaryOperator.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/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/ExpressionEvaluator.ts","src/engine/runtime/tokenextractor/ArgumentsTokenValueExtractor.ts","src/engine/runtime/tokenextractor/ContextTokenValueExtractor.ts","src/engine/runtime/tokenextractor/OutputMapTokenValueExtractor.ts","src/engine/runtime/FunctionExecutionParameters.ts","src/engine/runtime/graph/GraphVertex.ts","src/engine/runtime/graph/ExecutionGraph.ts","src/engine/runtime/StatementMessage.ts","src/engine/runtime/StatementExecution.ts","src/engine/runtime/StatementMessageType.ts","src/engine/runtime/KIRuntime.ts"],"sourcesContent":["export class Tuple2<F, S> {\n private f: F;\n private 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\nexport class Tuple3<F, S, T> extends Tuple2<F, S> {\n private 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\nexport class Tuple4<F, S, T, FR> extends Tuple3<F, S, T> {\n private 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","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","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 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","import { Schema } from '../Schema';\n\nexport class AdditionalPropertiesType {\n private booleanValue?: boolean;\n private schemaValue?: Schema;\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","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 constructor(type: Set<SchemaType>) {\n super();\n this.type = 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 constructor(type: SchemaType) {\n super();\n this.type = type;\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 TypeUtil.of(types as SchemaType);\n } else if (Array.isArray(types)) {\n return TypeUtil.of(\n ...Array.of(types)\n .map((e) => e as any)\n .map((e) => e as SchemaType),\n );\n }\n return undefined;\n }\n}\n","import { Namespaces } from '../../namespaces/Namespaces';\nimport { ArraySchemaType } from './array/ArraySchemaType';\nimport { AdditionalPropertiesType } from './object/AdditionalPropertiesType';\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';\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 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;\n schema.name = obj.name;\n\n schema.version = obj.version;\n\n schema.ref = obj.ref;\n\n if (!isStringSchema) schema.type = TypeUtil.from(schema.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 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 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 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 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 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 schema = SchemaUtil.resolveInternalSchema(schema, sRepository, ref, iteration, parts, i);\n\n return schema;\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 {\n let schema: Schema | undefined = inSchema;\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\n if (!sRepository) return undefined;\n\n let nms = StringUtil.splitAtFirstOccurance(inSchem?.getRef() ?? '', '/');\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 { 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 } from '../object/AdditionalPropertiesType';\nimport { 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.get(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","export enum StringFormat {\n DATETIME = 'DATETIME',\n TIME = 'TIME',\n DATE = 'DATE',\n EMAIL = 'EMAIL',\n REGEX = 'REGEX',\n}\n","import { isNullValue } from '../../../util/NullCheck';\nimport { Schema } from '../Schema';\nimport { StringFormat } from '../string/StringFormat';\nimport { SchemaValidationException } from './exception/SchemaValidationException';\nimport { SchemaValidator } from './SchemaValidator';\n\nexport class StringValidator {\n private static readonly TIME: RegExp =\n /^([01]?[0-9]|2[0-3]):[0-5][0-9](:[0-5][0-9])?([+-][01][0-9]:[0-5][0-9])?$/;\n\n private static readonly DATE: RegExp =\n /^[0-9]{4,4}-([0][0-9]|[1][0-2])-(0[1-9]|[1-2][1-9]|3[01])$/;\n\n private static readonly DATETIME: RegExp =\n /^[0-9]{4,4}-([0][0-9]|[1][0-2])-(0[1-9]|[1-2][1-9]|3[01])T([01]?[0-9]|2[0-3]):[0-5][0-9](:[0-5][0-9])?([+-][01][0-9]:[0-5][0-9])?$/;\n\n 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 null',\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 { 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 { 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 return element;\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","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","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 { 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 { FunctionExecutionParameters } from '../runtime/FunctionExecutionParameters';\nimport { isNullValue } from '../util/NullCheck';\nimport { Tuple2 } from '../util/Tuples';\nimport { Function } from './Function';\n\nexport abstract class AbstractFunction implements Function {\n protected validateArguments(args: Map<string, any>): Map<string, any> {\n return Array.from(this.getSignature().getParameters().entries())\n .map((e) => {\n let key: string = e[0];\n let param: Parameter = e[1];\n let jsonElement: any = args.get(e[0]);\n\n if (isNullValue(jsonElement)) {\n return new Tuple2(\n key,\n SchemaValidator.validate(\n undefined,\n param.getSchema(),\n undefined,\n undefined,\n ),\n );\n }\n\n if (!param?.isVariableArgument())\n return new Tuple2(\n key,\n SchemaValidator.validate(\n undefined,\n param.getSchema(),\n undefined,\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 array.push(jsonElement);\n }\n\n for (const je of array) {\n SchemaValidator.validate(undefined, param.getSchema(), undefined, je);\n }\n\n return new Tuple2(key, jsonElement);\n })\n .reduce((a, c) => {\n a.set(c.getT1(), c.getT2());\n return a;\n }, new Map<string, any>());\n }\n\n public execute(context: FunctionExecutionParameters): FunctionOutput {\n context.setArguments(this.validateArguments(context.getArguments()??new Map()));\n return this.internalExecute(context);\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(context: FunctionExecutionParameters): FunctionOutput;\n public abstract getSignature(): FunctionSignature;\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","import { AdditionalPropertiesType } from '../json/schema/object/AdditionalPropertiesType';\nimport { 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 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(name: string, parameters: Map<string, Schema>) {\n this.name = name;\n this.parameters = parameters;\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","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","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 { 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 ]),\n );\n\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(parameterName: string, schema: Schema) {\n this.schema = schema;\n this.parameterName = parameterName;\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","export enum ParameterReferenceType {\n VALUE = 'VALUE',\n EXPRESSION = 'EXPRESSION',\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","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');\n public static readonly AND: Operation = new Operation('and');\n public static readonly OR: Operation = new Operation('or');\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 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 ]);\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 ]);\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 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 ]);\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 ].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 public constructor(operator: string, operatorName?: string) {\n this.operator = operator;\n this.operatorName = operatorName ?? operator;\n }\n\n public getOperator(): string {\n return this.operator;\n }\n\n public getOperatorName(): string {\n return this.operatorName;\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 { 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 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 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.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 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)\n ops.push(x); \n } \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 {\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 { 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","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 { 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 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 }\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 { SchemaType } from '../../../../json/schema/type/SchemaType';\nimport { PrimitiveUtil } from '../../../../util/primitive/PrimitiveUtil';\nimport { Tuple2 } from '../../../../util/Tuples';\nimport { BinaryOperator } from './BinaryOperator';\n\nexport class LogicalEqualOperator 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 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 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 { SchemaType } from '../../../../json/schema/type/SchemaType';\nimport { PrimitiveUtil } from '../../../../util/primitive/PrimitiveUtil';\nimport { Tuple2 } from '../../../../util/Tuples';\nimport { BinaryOperator } from './BinaryOperator';\n\nexport class LogicalNotEqualOperator 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 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 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 { 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 { 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';\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 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\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 if (!this.exp) this.exp = new Expression(this.expression);\n return this.evaluateExpression(this.exp, valuesMap);\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 {\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)\n 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)\n 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 applyBinaryOperation(operator: Operation, v1: any, v2: any): ExpressionToken {\n let typv1: string = typeof v1;\n let typv2: string = typeof v2;\n\n if (typv1 === 'object' || typv2 === 'object' || Array.isArray(v1) || Array.isArray(v2))\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 let op: BinaryOperator | undefined = ExpressionEvaluator.BINARY_OPERATORS_MAP.get(operator);\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 { 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 { 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 { 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\n private valueExtractors: Map<string, TokenValueExtractor> = new Map();\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","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","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 { 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","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 private fRepo: Repository<Function>;\n\n private sRepo: Repository<Schema>;\n\n public constructor(\n fd: FunctionDefinition,\n functionRepository: Repository<Function>,\n schemaRepository: Repository<Schema>,\n ) {\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 this.fRepo = functionRepository;\n this.sRepo = schemaRepository;\n }\n\n public getSignature(): FunctionSignature {\n return this.fd;\n }\n\n private getExecutionPlan(\n context: Map<string, ContextElement>,\n ): ExecutionGraph<string, StatementExecution> {\n let g: ExecutionGraph<string, StatementExecution> = new ExecutionGraph();\n for (let s of Array.from(this.fd.getSteps().values()))\n g.addVertex(this.prepareStatementExecution(context, s));\n\n let unresolvedList: Tuple2<string, string>[] = this.makeEdges(g);\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 return g;\n }\n\n protected internalExecute(inContext: FunctionExecutionParameters): 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: ExecutionGraph<string, StatementExecution> = this.getExecutionPlan(\n inContext.getContext()!,\n );\n\n // if (logger.isDebugEnabled()) {\n // \tlogger.debug(StringFormatter.format(\"Executing : $.$\", this.fd.getNamespace(), this.fd.getName()));\n // \tlogger.debug(eGraph.toString());\n // }\n\n let messages: string[] = eGraph\n .getVerticesData()\n .filter((e) => e.getMessages().length)\n .map((e) => e.getStatement().getStatementName() + ': \\n' + e.getMessages().join(','));\n\n if (messages?.length) {\n throw new KIRuntimeException(\n 'Please fix the errors in the function definition before execution : \\n' +\n messages.join(',\\n'),\n );\n }\n\n return this.executeGraph(eGraph, inContext);\n }\n\n private executeGraph(\n eGraph: ExecutionGraph<string, StatementExecution>,\n inContext: FunctionExecutionParameters,\n ): 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 this.processBranchQue(inContext, executionQue, branchQue);\n 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 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 ): void {\n if (!executionQue.isEmpty()) {\n let vertex: GraphVertex<string, StatementExecution> = executionQue.pop();\n\n if (!this.allDependenciesResolvedVertex(vertex, inContext.getSteps()!))\n executionQue.add(vertex);\n else this.executeVertex(vertex, inContext, branchQue, executionQue);\n }\n }\n\n private 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 ): void {\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 (!this.allDependenciesResolvedTuples(branch.getT2(), inContext.getSteps()!))\n branchQue.add(branch);\n else this.executeBranch(inContext, executionQue, branch);\n }\n }\n\n private 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 ): void {\n let vertex: GraphVertex<string, StatementExecution> = branch.getT4();\n let nextOutput: EventResult | undefined = undefined;\n\n do {\n this.executeGraph(branch.getT1(), inContext);\n nextOutput = branch.getT3().next();\n\n if (nextOutput) {\n if (!inContext.getSteps()?.has(vertex.getData().getStatement().getStatementName()))\n inContext\n .getSteps()\n ?.set(vertex.getData().getStatement().getStatementName(), new Map());\n\n inContext\n .getSteps()\n ?.get(vertex.getData().getStatement().getStatementName())\n ?.set(\n nextOutput.getName(),\n this.resolveInternalExpressions(nextOutput.getResult(), inContext),\n );\n }\n } 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 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 ): void {\n let s: Statement = vertex.getData().getStatement();\n\n let fun: Function | undefined = this.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 = fun.execute(\n new FunctionExecutionParameters()\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[] = e[1];\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 context: Map<string, ContextElement>,\n s: Statement,\n ): StatementExecution {\n let se: StatementExecution = new StatementExecution(s);\n\n let fun: Function | undefined = this.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[] = param[1];\n\n if (!refList.length) {\n if (isNullValue(SchemaUtil.getDefaultValue(p.getSchema(), this.sRepo)))\n se.addMessage(\n StatementMessageType.ERROR,\n StringFormatter.format(\n KIRuntime.PARAMETER_NEEDS_A_VALUE,\n p.getParameterName(),\n ),\n );\n continue;\n }\n\n if (p.isVariableArgument()) {\n for (let ref of refList) this.parameterReferenceValidation(context, se, p, ref);\n } else {\n let ref: ParameterReference = refList[0];\n this.parameterReferenceValidation(context, se, p, ref);\n }\n\n paramSet.delete(p.getParameterName());\n }\n\n if (!isNullValue(se.getStatement().getDependentStatements())) {\n for (let statement of se.getStatement().getDependentStatements())\n se.addDependency(statement);\n }\n\n if (paramSet.size) {\n for (let param of Array.from(paramSet.values())) {\n if (isNullValue(SchemaUtil.getDefaultValue(param.getSchema(), this.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 context: Map<string, ContextElement>,\n se: StatementExecution,\n p: Parameter,\n ref: ParameterReference,\n ): void {\n // Breaking this execution doesn't make sense.\n\n if (!ref) {\n if (isNullValue(SchemaUtil.getDefaultValue(p.getSchema(), this.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(), this.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(), this.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"],"names":["$c99ef5fdcdd87c68$export$50073dc6080ec093","constructor","f","s","this","getT1","getT2","$c99ef5fdcdd87c68$export$82dc29c19cc50d89","t","super","getT3","$c99ef5fdcdd87c68$export$c0401e7e2326d13b","fr","getT4","$e9dc56365edfc654$export$d3f4bd7b80956108","repos","find","namespace","name","repo","$a30e155e99df653c$export$2f21297dc8e7cb72","static","$de0b4b41e4746a17$export$5c8592849d7f8589","v","$e2b63cc6becde023$export$656411a496f80a09","setSingleSchema","schema","singleSchema","setTupleSchema","schemas","tupleSchema","getSingleSchema","getTupleSchema","isSingleType","length","obj","Array","isArray","of","$d7c5c93abc5e1799$export$19342e026b58ebb7","fromListOfSchemas","x","from","$5e84b77989be8dbf$export$34a8e14a3ac7d480","getBooleanValue","booleanValue","getSchemaValue","schemaValue","setBooleanValue","setSchemaValue","ad","$27a266817081df60$export$a1ec97982bccfa9d","SchemaType","$142932961419ab1e$export$92738401e1603719","$076409438f64fdac$export$6d6eb186deb81c4","type","getType","setType","getAllowedSchemaTypes","contains","has","$65a368db7d612009$export$c62c2a2bbb80b6fa","Set","$2765bc54f8b669a6$export$75f4a5a37c7a0a0f","types","map","e","setNamespace","SYSTEM","setName","NULL","setConstant","undefined","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","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","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","$9636755452e5d904$export$37b1b5eb4f4f5ada","Error","message","err","cause","getCause","$63bc73db1cd0d7b4$export$5a7f7b467323cd66","formatString","params","sb","ind","chr","prevchar","i","charAt","substring","toString","$50631448b653142f$export$592e033edf5fafe4","str","c","occurance","index","indexOf","trim","$a486fd967920975f$export$e5a11051fe746f8a","schemaPath","getSchemaPath","$aab6c44f1d62c175$export$18db27caa68e620c","sve","reduce","a","$f6510250b30384da$export$7eb0095ad5663979","sRepository","getSchemaFromRef","iteration","CYCLIC_REFERENCE_LIMIT_COUNTER","isNullOrBlank","startsWith","tuple","resolveExternalSchema","parts","split","resolveInternalSchema","inSchema","UNABLE_TO_RETRIVE_SCHEMA_FROM_REFERENCED_PATH","get","inSchem","nms","splitAtFirstOccurance","nmspnm","$3c5135d4cdc6af8d$export$54412d5419e3f99d","parents","repository","element","flag","validate","$08afff7ea76110b2$export$5ea2dbb44eae89d6","path","$233a72ac0061bd00$export$a006ee8cc7b6580a","array","checkMinMaxItems","checkItems","checkUniqueItems","checkContains","newParents","size","i1","newParents1","element1","$87ee46d58b32280a$export$5464fb7e86e4a9f1","n","extractNumber","checkRange","checkMultipleOf","Math","round","numberCompare","n1","n2","$f0ae3dce2d7b23bc$export$e97b0a585a2ce29f","jsonObject","keys","checkMinMaxProperties","checkPropertyNameSchema","checkRequired","checkProperties","checkPatternProperties","checkAddtionalProperties","key","values","apt","compiledPatterns","keyPattern","RegExp","test","delete","each","$a48009af08cbd1f1$export$f22e7fe56db8ae03","StringFormat","$8484e3bddcb80901$export$312ff19fe6f84b5e","TIME","patternMatcher","DATE","DATETIME","$9f48b52c76faa34a$export$9ced0f77dc6abfd7","filter","JSON","parse","stringify","constantValidation","enumCheck","typeValidation","equals","valid","$1d046e4ff8522cd9$export$594b6714aa88d0a1","$e61ebbdca83688e9$export$50d5074000755e42","$ead3a8cc1fb7823c$export$6138b597adfac7c","validateArguments","args","getSignature","getParameters","param","jsonElement","getSchema","isVariableArgument","je","execute","context","setArguments","getArguments","internalExecute","getProbableEventSignature","probableParameters","getEvents","$bfb6f5b09094a63c$export$dab92e0058712b0b","expression","getExpression","$d92bb6acd4c9a5eb$export$d61e24a684f9e51","SCHEMA_NAME","SCHEMA","parameters","setParameters","eventMapEntry","OUTPUT","eventName","$e445db59e11a2252$export$c45be2437182b0e3","result","getResult","setResult","$c83f443dff95747f$export$46c58e8ae2505a7d","arg","fo","generator","next","er","allResults","$8cf01b2a122088fe$export$c6903b1fb9c4306f","ParameterType","$b5031b8f71f18ed8$export$f817523eebf7ee7f","variableArgument","EXPRESSION","parameterName","setSchema","getParameterName","setParameterName","setVariableArgument","$c7de3d56bb767194$export$1617e535b7cf20e","ParameterReferenceType","$07e02f38923c0b4c$export$f0ef28713f767754","head","tail","node","$07e02f38923c0b4c$var$Node","previous","pop","isEmpty","toArray","arr","peek","peekLast","getFirst","removeFirst","removeLast","addAll","add","bind","callbackfn","thisArg","newList","$be62d217e50dbeec$export$a76dbac5bd058d1b","append","setLength","num","deleteCharAt","checkIndex","insert","start","end","$d58cc34cdb765248$export$acb5fd6ef0dd45e7","$3a73b19f5a9d3311$export$e67adacf2c583eeb","$5b99fb16f2ad3a42$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","ARITHMETIC_OPERATORS","LOGICAL_OPERATORS","BITWISE_OPERATORS","getOperator","VALUE_OF","_","o","operator","operatorName","getOperatorName","valueOf","$6b23ed074dafa43f$export$bfe37c1342e5eb83","tokens","ops","l","r","op","evaluate","getTokens","getOperations","buff","isPrevOp","processTokenSepearator","processSubExpression","processOthers","process","OPERATORS","cnt","BIGGEST_OPERATOR_SIZE","checkUnaryOperator","OPERATION_VALUE_OF","subExp","inChr","UNARY_OPERATORS","UNARY_MAP","hasPrecedence","prev","l1","op1","op2","pre1","OPERATOR_PRIORITY","pre2","temp","temp1","$613eb413a07c8f59$export$c3407419a51d8741","getTokenValue","getElement","$51a3743a4dff1a45$export$a5835aa4dc4a0f7","nullCheck","e1","e2","$b68d219228eaaaf4$export$f7d907e108ff5f5a","apply","u","$f6ac6c072b139075$export$4429718dd207f524","$6c80d73b0945e438$export$461eeaed4fd44d87","floor","$be3ce12116482e90$export$a654a6b4708c47ae","$a2511671546286b3$export$c6c786d90c00ccb3","$06c3e93d233b1212$export$32cdc7b90c3f2772","$94d6bfcd7c29b7e5$export$2ce812ef1adfc7e8","$60a8f504ba44e900$export$a2a775190435bd33","$de6d0890546cee33$export$eeef83ab872ddce5","$f051c38045c23f1c$export$57fe0f50165dd4cd","$9809b03a0700e0f5$export$2e1886fc6d5eb776","$36bc5549114275e4$export$3046494ab1cf73bb","$efb38fd4b4315257$export$c5652d513ade8473","$03cab56c0c40e1a2$export$3755dd8569265c2c","typof","findPrimitiveNumberType","Number","isInteger","b","cmp","compare","typofa","typofb","comparePrimitive","oa","ob","$dd5658eb718434e8$export$e62aa8d75c9a4734","tType","findPrimitiveNullAsBoolean","uType","$7d5f0915f3becddf$export$cdf02df6bd75cc9","$06a2425b50455bbb$export$264c8987e36a6d35","$31ea1aab902efed5$export$7ebb65846541d315","$582db28e066a18e7$export$fe2bbbd39de8094a","$987956f6677c2251$export$fdc45f0fc8eb4207","$3986cc2d76a07224$export$7b20a1536da8f25","$8f7d873a8fa19c61$export$42108e1134a52f27","$dcbd9e25cc38f200$export$84c3ec415fb07dd3","$07ae298d200db400$export$e38febd6a9d11047","$5950bf437bddd326$export$b2346ee46dfa8cbc","$6566601b6a7062df$export$874b037c929bb9a8","$86449b1ee58231e2$export$6282ef6c70349edc","$a7227e66ed3e8807$export$a4dd2a01c916cf79","$5575335d796dbeb4$export$d44091f0b447fefe","getValue","token","prefix","getPrefix","getValueInternal","retrieveElementFrom","partNumber","bElement","REGEX_SQUARE_BRACKETS","resolveForEachPartOfTokenWithBrackets","parseInt","isNaN","checkIfObject","endsWith","index1","err1","$10c32ecaa7972757$var$KEYWORDS","$10c32ecaa7972757$export$439f57d66896a884","processString","processNumbers","parseFloat","$8d0f8328f51c2219$export$c24f16fac926e77f","UNARY_OPERATORS_MAP","exp","valuesMap","evaluateExpression","getExpressionString","UNARY_OPERATORS_MAP_KEY_SET","applyUnaryOperation","getValueFromToken","processObjectOrArrayOperator","token2","v1","v2","applyBinaryOperation","token1","objTokens","objOperations","objToken","INSTANCE","BINARY_OPERATORS_MAP","pathPrefix","$1729a9f4799da7ac$export$ff42ca15b74921ee","REGEX_DOT","PREFIX","$511cbfc015cdbf6a$export$6cebf62d32060adb","bIndex","fromIndex","$7b1c5de622922cdc$export$638a1889bcd4621c","output","events","eachEvent","$ff0fbbfc90b01f44$export$c72d1e96aedc073d","count","valueExtractors","getContext","setContext","setEvents","getStatementExecution","statementExecution","setStatementExecution","getSteps","steps","setSteps","getCount","setCount","getValuesMap","$ca1e15a6ad410f7e$export$d6ecc3c8b1bdb677","outVertices","inVertices","graph","data","getData","setData","getOutVertices","setOutVertices","getInVertices","setInVertices","getGraph","setGraph","getKey","getUniqueKey","addOutEdgeTo","vertex","addInEdgeTo","hasIncomingEdges","hasOutgoingEdges","getSubGraphOfType","subGraph","$aeb8af0a0193139e$export$8193dda3aa6e9a3","typeVertices","addVertex","flatMap","ins","join","outs","nodeMap","isSubGrph","getVerticesData","getVertex","getVertexData","getVerticesWithNoIncomingEdges","isCyclic","visited","addVertices","getNodeMap","isSubGraph","$d335be29d204110b$export$1480fdc476e0600e","messageType","getMessageType","setMessageType","getMessage","setMessage","$3c47f1bc7c66f182$export$f09f252875e413e8","messages","dependencies","statement","getStatement","setStatement","getMessages","setMessages","getDependencies","setDependencies","getStatementName","addMessage","addDependency","dependency","getDepenedencies","$fe3fa5e51cec00a8$export$c72a235e9e048d37","StatementMessageType","$0a9ef75d837c6929$export$454d8b636c7c716b","fd","functionRepository","schemaRepository","VERSION","fRepo","sRepo","getExecutionPlan","g","prepareStatementExecution","unresolvedList","makeEdges","inContext","eGraph","executeGraph","executionQue","branchQue","processBranchQue","processExecutionQue","MAX_EXECUTION_ITERATIONS","allDependenciesResolvedVertex","executeVertex","branch","allDependenciesResolvedTuples","executeBranch","nextOutput","resolveInternalExpressions","fun","paramSet","getArgumentsFromParametersMap","isOutput","out","unResolvedDependencies","resolveInternalExpression","retArray","retObject","entry","tup","stepName","getParameterMap","ret","prList","pDef","parameterReferenceEvaluation","VALUE","se","p","refList","parameterReferenceValidation","ref1","ERROR","PARAMETER_NEEDS_A_VALUE","getDependentStatements","param1","paramElements","addDependencies","ast","sch","match","STEP_REGEX_PATTERN","retValue","d","secondDot","step","eventDot","event","st"],"version":3,"file":"module.js.map"}