@fincity/kirun-js 1.3.1 → 1.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/__tests__/engine/json/schema/validator/SchemaValidatorTest.ts +51 -1
  2. package/__tests__/engine/runtime/KIRuntimeWithDefinitionTest.ts +37 -0
  3. package/__tests__/engine/runtime/expression/ExpressionEvaluatorTernaryOperatorTest.ts +42 -0
  4. package/dist/index.js +1 -1
  5. package/dist/index.js.map +1 -1
  6. package/dist/module.js +1 -1
  7. package/dist/module.js.map +1 -1
  8. package/dist/types.d.ts +34 -19
  9. package/dist/types.d.ts.map +1 -1
  10. package/package.json +1 -1
  11. package/src/engine/function/AbstractFunction.ts +12 -5
  12. package/src/engine/function/system/GenerateEvent.ts +1 -2
  13. package/src/engine/function/system/string/Reverse.ts +1 -1
  14. package/src/engine/json/schema/Schema.ts +119 -2
  15. package/src/engine/json/schema/SchemaUtil.ts +1 -1
  16. package/src/engine/json/schema/array/ArraySchemaType.ts +6 -0
  17. package/src/engine/json/schema/type/MultipleType.ts +5 -2
  18. package/src/engine/json/schema/type/SingleType.ts +4 -2
  19. package/src/engine/json/schema/validator/ObjectValidator.ts +2 -3
  20. package/src/engine/model/AbstractStatement.ts +10 -0
  21. package/src/engine/model/Event.ts +12 -5
  22. package/src/engine/model/FunctionDefinition.ts +1 -2
  23. package/src/engine/model/FunctionSignature.ts +14 -4
  24. package/src/engine/model/Parameter.ts +13 -3
  25. package/src/engine/model/ParameterReference.ts +12 -3
  26. package/src/engine/model/Position.ts +1 -1
  27. package/src/engine/model/Statement.ts +33 -7
  28. package/src/engine/model/StatementGroup.ts +22 -2
  29. package/src/engine/runtime/KIRuntime.ts +3 -2
  30. package/src/engine/runtime/expression/Expression.ts +120 -0
  31. package/src/engine/runtime/expression/ExpressionEvaluator.ts +26 -0
  32. package/src/engine/runtime/expression/Operation.ts +10 -0
  33. package/src/engine/runtime/expression/operators/ternary/ConditionalTernaryOperator.ts +7 -0
  34. package/src/engine/runtime/expression/operators/ternary/TernaryOperator.ts +15 -0
  35. package/src/engine/runtime/expression/operators/ternary/index.ts +1 -0
  36. package/src/index.ts +1 -1
  37. package/src/engine/json/schema/object/AdditionalPropertiesType.ts +0 -32
@@ -1,4 +1,4 @@
1
- import { HybridRepository } from '../../../../../src';
1
+ import { AdditionalPropertiesType, HybridRepository } from '../../../../../src';
2
2
  import { Schema } from '../../../../../src/engine/json/schema/Schema';
3
3
  import { SchemaType } from '../../../../../src/engine/json/schema/type/SchemaType';
4
4
  import { TypeUtil } from '../../../../../src/engine/json/schema/type/TypeUtil';
@@ -26,6 +26,56 @@ test('Schema Validator Test 1', () => {
26
26
  // expect(SchemaValidator.validate([], schema, repo, 2.5)).toThrowError(new SchemaValidationException('', '2.5 is not a number of type Integer'));
27
27
  });
28
28
 
29
+ test('Schema validation when ref of ref', () => {
30
+ const locationSchema = Schema.from({
31
+ name: 'Location',
32
+ namespace: 'Test',
33
+ type: 'Object',
34
+ properties: {
35
+ url: { name: 'url', type: 'String' },
36
+ },
37
+ required: ['url'],
38
+ });
39
+
40
+ const urlParamsSchema = Schema.ofObject('UrlParameters')
41
+ .setNamespace('Test')
42
+ .setAdditionalProperties(
43
+ new AdditionalPropertiesType().setSchemaValue(Schema.ofRef(`Test.Location`)),
44
+ )
45
+ .setDefaultValue({});
46
+
47
+ const testSchema = Schema.ofObject('TestSchema')
48
+ .setNamespace('Test')
49
+ .setAdditionalProperties(
50
+ new AdditionalPropertiesType().setSchemaValue(Schema.ofRef(`Test.UrlParameters`)),
51
+ )
52
+ .setDefaultValue({});
53
+
54
+ const schemaMap = new Map([
55
+ ['Location', locationSchema],
56
+ ['UrlParameters', urlParamsSchema],
57
+ ['TestSchema', testSchema],
58
+ ]);
59
+
60
+ const repo = new HybridRepository<Schema>(
61
+ {
62
+ find(namespace: string, name: string): Schema | undefined {
63
+ if (namespace !== 'Test') return undefined;
64
+ return schemaMap.get(name);
65
+ },
66
+ },
67
+ new KIRunSchemaRepository(),
68
+ );
69
+ const obj = { url: 'http://xxxxxx.com' };
70
+ const queryParams = {
71
+ obj: { obj: { url: 'http://xxxxxx.com' } },
72
+ };
73
+
74
+ expect(
75
+ SchemaValidator.validate(undefined, Schema.ofRef('Test.TestSchema'), repo, queryParams),
76
+ ).toBe(queryParams);
77
+ });
78
+
29
79
  test('Schema Validator Test 2', () => {
30
80
  const locationSchema = Schema.from({
31
81
  name: 'Location',
@@ -87,3 +87,40 @@ test('KIRuntime With Definition 1', async () => {
87
87
 
88
88
  expect(result.allResults()[0].getResult().get('additionResult')).toBe(31);
89
89
  });
90
+
91
+ test('KIRuntime With Definition 2', async () => {
92
+ var def = {
93
+ name: 'checkWithNoParamsOrEvents',
94
+ namespace: 'UIApp',
95
+ steps: {
96
+ add: {
97
+ statementName: 'add',
98
+ namespace: Namespaces.MATH,
99
+ name: 'Add',
100
+ parameterMap: {
101
+ value: {
102
+ one: { key: 'one', type: 'VALUE', value: 2 },
103
+ two: { key: 'two', type: 'VALUE', value: 5 },
104
+ },
105
+ },
106
+ },
107
+ genOutput: {
108
+ statementName: 'genOutput',
109
+ namespace: Namespaces.SYSTEM,
110
+ name: 'GenerateEvent',
111
+ dependentStatements: { 'Steps.add.output': true },
112
+ },
113
+ },
114
+ };
115
+
116
+ const fd = FunctionDefinition.from(def);
117
+
118
+ let result = await new KIRuntime(fd).execute(
119
+ new FunctionExecutionParameters(
120
+ new KIRunFunctionRepository(),
121
+ new KIRunSchemaRepository(),
122
+ ).setArguments(new Map()),
123
+ );
124
+
125
+ expect(result.allResults()[0].getResult()).toMatchObject({});
126
+ });
@@ -0,0 +1,42 @@
1
+ import {
2
+ ArgumentsTokenValueExtractor,
3
+ Expression,
4
+ MapUtil,
5
+ TokenValueExtractor,
6
+ } from '../../../../src';
7
+ import { ExpressionEvaluator } from '../../../../src/engine/runtime/expression/ExpressionEvaluator';
8
+
9
+ test('Expression with Ternary Operator - 1 ', () => {
10
+ var exp = new Expression('a > 10 ? a - 2 : a + 3'.replace(' ', ''));
11
+ expect(exp.toString()).toBe('((a>10)?(a-2):(a+3))');
12
+
13
+ exp = new Expression('a > 10 ? a - 2 : a + 3');
14
+ expect(exp.toString()).toBe('((a>10)?(a-2):(a+3))');
15
+
16
+ exp = new Expression('a > 10 ? a > 15 ? a + 2 : a - 2 : a + 3');
17
+ expect(exp.toString()).toBe('((a>10)?((a>15)?(a+2):(a-2)):(a+3))');
18
+ });
19
+
20
+ test('Expression Evaluation with Ternary Operator - 1 ', () => {
21
+ let x = { a: 2, b: [true, false], c: { x: 'Arguments.b2' } };
22
+ let atv: ArgumentsTokenValueExtractor = new ArgumentsTokenValueExtractor(
23
+ new Map<string, any>([
24
+ ['a', 'kirun '],
25
+ ['b', 2],
26
+ ['b1', 4],
27
+ ['b2', 4],
28
+ ['c', x],
29
+ ['d', 'c'],
30
+ ]),
31
+ );
32
+ let valuesMap: Map<string, TokenValueExtractor> = MapUtil.of(atv.getPrefix(), atv);
33
+
34
+ var ev = new ExpressionEvaluator('Arguments.e = null ? Arguments.c.a : 3 ');
35
+ expect(ev.evaluate(valuesMap)).toBe(2);
36
+
37
+ ev = new ExpressionEvaluator('Arguments.f ? Arguments.c.a : 3 ');
38
+ expect(ev.evaluate(valuesMap)).toBe(3);
39
+
40
+ ev = new ExpressionEvaluator('Arguments.e = null ? Arguments.c : 3 ');
41
+ expect(ev.evaluate(valuesMap)).toMatchObject(x);
42
+ });