@fincity/kirun-js 1.1.7 → 1.3.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.
- package/__tests__/engine/function/system/math/RandomIntTest.ts +0 -1
- package/__tests__/engine/runtime/KIRuntimeTest.ts +75 -26
- package/__tests__/engine/runtime/KIRuntimeWithDefinitionTest.ts +10 -9
- package/__tests__/engine/runtime/expression/ExpressionEvaluationTest.ts +82 -1
- package/__tests__/engine/util/deepEqualTest.ts +13 -0
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/module.js +1 -1
- package/dist/module.js.map +1 -1
- package/dist/types.d.ts +28 -7
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/engine/model/ParameterReference.ts +27 -9
- package/src/engine/model/Statement.ts +25 -13
- package/src/engine/runtime/KIRuntime.ts +4 -4
- package/src/engine/runtime/expression/ExpressionEvaluator.ts +82 -8
- package/src/engine/runtime/expression/Operation.ts +5 -0
- package/src/engine/runtime/expression/operators/binary/LogicalEqualOperator.ts +2 -7
- package/src/engine/runtime/expression/operators/binary/LogicalNotEqualOperator.ts +2 -7
- package/src/engine/runtime/expression/operators/binary/LogicalNullishCoalescingOperator.ts +8 -0
- package/src/engine/runtime/expression/operators/binary/index.ts +1 -0
- package/src/engine/util/MapUtil.ts +10 -0
- package/src/engine/util/Tuples.ts +49 -4
- package/src/engine/util/deepEqual.ts +49 -0
- package/src/index.ts +1 -0
|
@@ -20,6 +20,7 @@ import { AbstractFunction } from '../../../src/engine/function/AbstractFunction'
|
|
|
20
20
|
import { FunctionOutput } from '../../../src/engine/model/FunctionOutput';
|
|
21
21
|
import { HybridRepository } from '../../../src/engine/HybridRepository';
|
|
22
22
|
import { Function } from '../../../src/engine/function/Function';
|
|
23
|
+
import { MapUtil } from '../../../src';
|
|
23
24
|
|
|
24
25
|
test('KIRuntime Test 1', async () => {
|
|
25
26
|
let start = new Date().getTime();
|
|
@@ -50,8 +51,8 @@ test('KIRuntime Test 1', async () => {
|
|
|
50
51
|
create.getName(),
|
|
51
52
|
).setParameterMap(
|
|
52
53
|
new Map([
|
|
53
|
-
['name',
|
|
54
|
-
['schema',
|
|
54
|
+
['name', MapUtil.ofEntriesArray(ParameterReference.ofValue('a'))],
|
|
55
|
+
['schema', MapUtil.ofEntriesArray(ParameterReference.ofValue(arrayOfIntegerSchema))],
|
|
55
56
|
]),
|
|
56
57
|
);
|
|
57
58
|
|
|
@@ -59,11 +60,11 @@ test('KIRuntime Test 1', async () => {
|
|
|
59
60
|
var loop = new Statement('loop', rangeLoop.getNamespace(), rangeLoop.getName())
|
|
60
61
|
.setParameterMap(
|
|
61
62
|
new Map([
|
|
62
|
-
['from',
|
|
63
|
-
['to',
|
|
63
|
+
['from', MapUtil.ofEntriesArray(ParameterReference.ofValue(0))],
|
|
64
|
+
['to', MapUtil.ofEntriesArray(ParameterReference.ofExpression('Arguments.Count'))],
|
|
64
65
|
]),
|
|
65
66
|
)
|
|
66
|
-
.setDependentStatements(
|
|
67
|
+
.setDependentStatements(MapUtil.of('Steps.createArray.output', true));
|
|
67
68
|
|
|
68
69
|
var resultObj = { name: 'result', value: { isExpression: true, value: 'Context.a' } };
|
|
69
70
|
|
|
@@ -71,11 +72,11 @@ test('KIRuntime Test 1', async () => {
|
|
|
71
72
|
var outputGenerate = new Statement('outputStep', generate.getNamespace(), generate.getName())
|
|
72
73
|
.setParameterMap(
|
|
73
74
|
new Map([
|
|
74
|
-
['eventName',
|
|
75
|
-
['results',
|
|
75
|
+
['eventName', MapUtil.ofEntriesArray(ParameterReference.ofValue('output'))],
|
|
76
|
+
['results', MapUtil.ofEntriesArray(ParameterReference.ofValue(resultObj))],
|
|
76
77
|
]),
|
|
77
78
|
)
|
|
78
|
-
.setDependentStatements(
|
|
79
|
+
.setDependentStatements(MapUtil.of('Steps.loop.output', true));
|
|
79
80
|
|
|
80
81
|
var ifFunction = new If().getSignature();
|
|
81
82
|
var ifStep = new Statement(
|
|
@@ -86,11 +87,11 @@ test('KIRuntime Test 1', async () => {
|
|
|
86
87
|
new Map([
|
|
87
88
|
[
|
|
88
89
|
'condition',
|
|
89
|
-
|
|
90
|
+
MapUtil.ofEntriesArray(
|
|
90
91
|
ParameterReference.ofExpression(
|
|
91
92
|
'Steps.loop.iteration.index = 0 or Steps.loop.iteration.index = 1',
|
|
92
93
|
),
|
|
93
|
-
|
|
94
|
+
),
|
|
94
95
|
],
|
|
95
96
|
]),
|
|
96
97
|
);
|
|
@@ -99,26 +100,41 @@ test('KIRuntime Test 1', async () => {
|
|
|
99
100
|
var set1 = new Statement('setOnTrue', set.getNamespace(), set.getName())
|
|
100
101
|
.setParameterMap(
|
|
101
102
|
new Map([
|
|
102
|
-
[
|
|
103
|
-
|
|
103
|
+
[
|
|
104
|
+
'name',
|
|
105
|
+
MapUtil.ofEntriesArray(
|
|
106
|
+
ParameterReference.ofValue('Context.a[Steps.loop.iteration.index]'),
|
|
107
|
+
),
|
|
108
|
+
],
|
|
109
|
+
[
|
|
110
|
+
'value',
|
|
111
|
+
MapUtil.ofEntriesArray(
|
|
112
|
+
ParameterReference.ofExpression('Steps.loop.iteration.index'),
|
|
113
|
+
),
|
|
114
|
+
],
|
|
104
115
|
]),
|
|
105
116
|
)
|
|
106
|
-
.setDependentStatements(
|
|
117
|
+
.setDependentStatements(MapUtil.of('Steps.if.true', true));
|
|
107
118
|
var set2 = new Statement('setOnFalse', set.getNamespace(), set.getName())
|
|
108
119
|
.setParameterMap(
|
|
109
120
|
new Map([
|
|
110
|
-
[
|
|
121
|
+
[
|
|
122
|
+
'name',
|
|
123
|
+
MapUtil.ofEntriesArray(
|
|
124
|
+
ParameterReference.ofValue('Context.a[Steps.loop.iteration.index]'),
|
|
125
|
+
),
|
|
126
|
+
],
|
|
111
127
|
[
|
|
112
128
|
'value',
|
|
113
|
-
|
|
129
|
+
MapUtil.ofEntriesArray(
|
|
114
130
|
ParameterReference.ofExpression(
|
|
115
131
|
'Context.a[Steps.loop.iteration.index - 1] + Context.a[Steps.loop.iteration.index - 2]',
|
|
116
132
|
),
|
|
117
|
-
|
|
133
|
+
),
|
|
118
134
|
],
|
|
119
135
|
]),
|
|
120
136
|
)
|
|
121
|
-
.setDependentStatements(
|
|
137
|
+
.setDependentStatements(MapUtil.of('Steps.if.false', true));
|
|
122
138
|
|
|
123
139
|
start = new Date().getTime();
|
|
124
140
|
let out: EventResult[] = (
|
|
@@ -178,7 +194,12 @@ test('KIRuntime Test 2', async () => {
|
|
|
178
194
|
Statement.ofEntry(
|
|
179
195
|
new Statement('first', Namespaces.MATH, 'Absolute').setParameterMap(
|
|
180
196
|
new Map([
|
|
181
|
-
[
|
|
197
|
+
[
|
|
198
|
+
'value',
|
|
199
|
+
MapUtil.ofEntriesArray(
|
|
200
|
+
ParameterReference.ofExpression('Arguments.Value'),
|
|
201
|
+
),
|
|
202
|
+
],
|
|
182
203
|
]),
|
|
183
204
|
),
|
|
184
205
|
),
|
|
@@ -189,8 +210,14 @@ test('KIRuntime Test 2', async () => {
|
|
|
189
210
|
genEvent.getName(),
|
|
190
211
|
).setParameterMap(
|
|
191
212
|
new Map([
|
|
192
|
-
[
|
|
193
|
-
|
|
213
|
+
[
|
|
214
|
+
'eventName',
|
|
215
|
+
MapUtil.ofEntriesArray(ParameterReference.ofValue('output')),
|
|
216
|
+
],
|
|
217
|
+
[
|
|
218
|
+
'results',
|
|
219
|
+
MapUtil.ofEntriesArray(ParameterReference.ofValue(resultObj)),
|
|
220
|
+
],
|
|
194
221
|
]),
|
|
195
222
|
),
|
|
196
223
|
),
|
|
@@ -226,7 +253,12 @@ test('KIRuntime Test 3', async () => {
|
|
|
226
253
|
Statement.ofEntry(
|
|
227
254
|
new Statement('first', Namespaces.MATH, 'CubeRoot').setParameterMap(
|
|
228
255
|
new Map([
|
|
229
|
-
[
|
|
256
|
+
[
|
|
257
|
+
'value',
|
|
258
|
+
MapUtil.ofEntriesArray(
|
|
259
|
+
ParameterReference.ofExpression('Arguments.Value'),
|
|
260
|
+
),
|
|
261
|
+
],
|
|
230
262
|
]),
|
|
231
263
|
),
|
|
232
264
|
),
|
|
@@ -237,8 +269,14 @@ test('KIRuntime Test 3', async () => {
|
|
|
237
269
|
genEvent.getName(),
|
|
238
270
|
).setParameterMap(
|
|
239
271
|
new Map([
|
|
240
|
-
[
|
|
241
|
-
|
|
272
|
+
[
|
|
273
|
+
'eventName',
|
|
274
|
+
MapUtil.ofEntriesArray(ParameterReference.ofValue('output')),
|
|
275
|
+
],
|
|
276
|
+
[
|
|
277
|
+
'results',
|
|
278
|
+
MapUtil.ofEntriesArray(ParameterReference.ofValue(resultObj)),
|
|
279
|
+
],
|
|
242
280
|
]),
|
|
243
281
|
),
|
|
244
282
|
),
|
|
@@ -326,7 +364,12 @@ test('KIRuntime Test 4', async () => {
|
|
|
326
364
|
'asdf',
|
|
327
365
|
).setParameterMap(
|
|
328
366
|
new Map([
|
|
329
|
-
[
|
|
367
|
+
[
|
|
368
|
+
'value',
|
|
369
|
+
MapUtil.ofEntriesArray(
|
|
370
|
+
ParameterReference.ofExpression('Arguments.Value'),
|
|
371
|
+
),
|
|
372
|
+
],
|
|
330
373
|
]),
|
|
331
374
|
),
|
|
332
375
|
),
|
|
@@ -337,8 +380,14 @@ test('KIRuntime Test 4', async () => {
|
|
|
337
380
|
genEvent.getName(),
|
|
338
381
|
).setParameterMap(
|
|
339
382
|
new Map([
|
|
340
|
-
[
|
|
341
|
-
|
|
383
|
+
[
|
|
384
|
+
'eventName',
|
|
385
|
+
MapUtil.ofEntriesArray(ParameterReference.ofValue('output')),
|
|
386
|
+
],
|
|
387
|
+
[
|
|
388
|
+
'results',
|
|
389
|
+
MapUtil.ofEntriesArray(ParameterReference.ofValue(resultObj)),
|
|
390
|
+
],
|
|
342
391
|
]),
|
|
343
392
|
),
|
|
344
393
|
),
|
|
@@ -42,11 +42,11 @@ test('KIRuntime With Definition 1', async () => {
|
|
|
42
42
|
namespace: Namespaces.MATH,
|
|
43
43
|
name: 'Add',
|
|
44
44
|
parameterMap: {
|
|
45
|
-
value:
|
|
46
|
-
{ type: 'EXPRESSION', expression: 'Arguments.a' },
|
|
47
|
-
{ type: 'EXPRESSION', expression: '10 + 1' },
|
|
48
|
-
{ type: 'EXPRESSION', expression: 'Arguments.c' },
|
|
49
|
-
|
|
45
|
+
value: {
|
|
46
|
+
one: { key: 'one', type: 'EXPRESSION', expression: 'Arguments.a' },
|
|
47
|
+
two: { key: 'two', type: 'EXPRESSION', expression: '10 + 1' },
|
|
48
|
+
three: { key: 'three', type: 'EXPRESSION', expression: 'Arguments.c' },
|
|
49
|
+
},
|
|
50
50
|
},
|
|
51
51
|
},
|
|
52
52
|
genOutput: {
|
|
@@ -54,16 +54,17 @@ test('KIRuntime With Definition 1', async () => {
|
|
|
54
54
|
namespace: Namespaces.SYSTEM,
|
|
55
55
|
name: 'GenerateEvent',
|
|
56
56
|
parameterMap: {
|
|
57
|
-
eventName:
|
|
58
|
-
results:
|
|
59
|
-
{
|
|
57
|
+
eventName: { one: { key: 'one', type: 'VALUE', value: 'output' } },
|
|
58
|
+
results: {
|
|
59
|
+
one: {
|
|
60
|
+
key: 'one',
|
|
60
61
|
type: 'VALUE',
|
|
61
62
|
value: {
|
|
62
63
|
name: 'additionResult',
|
|
63
64
|
value: { isExpression: true, value: 'Steps.add.output.value' },
|
|
64
65
|
},
|
|
65
66
|
},
|
|
66
|
-
|
|
67
|
+
},
|
|
67
68
|
},
|
|
68
69
|
},
|
|
69
70
|
},
|
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
ArgumentsTokenValueExtractor,
|
|
3
|
+
KIRunFunctionRepository,
|
|
4
|
+
KIRunSchemaRepository,
|
|
5
|
+
MapUtil,
|
|
6
|
+
TokenValueExtractor,
|
|
7
|
+
} from '../../../../src';
|
|
2
8
|
import { Schema } from '../../../../src/engine/json/schema/Schema';
|
|
3
9
|
import { ContextElement } from '../../../../src/engine/runtime/ContextElement';
|
|
4
10
|
import { ExpressionEvaluator } from '../../../../src/engine/runtime/expression/ExpressionEvaluator';
|
|
@@ -130,3 +136,78 @@ test('Expression Test', () => {
|
|
|
130
136
|
17.3533,
|
|
131
137
|
);
|
|
132
138
|
});
|
|
139
|
+
|
|
140
|
+
test('ExpressionEvaluation deep tests', () => {
|
|
141
|
+
let atv: ArgumentsTokenValueExtractor = new ArgumentsTokenValueExtractor(
|
|
142
|
+
new Map<string, any>([
|
|
143
|
+
['a', 'kirun '],
|
|
144
|
+
['b', 2],
|
|
145
|
+
['c', { a: 2, b: [true, false], c: { x: 'kiran' } }],
|
|
146
|
+
['d', { a: 2, b: [true, false], c: { x: 'kiran' } }],
|
|
147
|
+
]),
|
|
148
|
+
);
|
|
149
|
+
let valuesMap: Map<string, TokenValueExtractor> = MapUtil.of(atv.getPrefix(), atv);
|
|
150
|
+
|
|
151
|
+
let ev = new ExpressionEvaluator('Arguments.a = Arugments.b');
|
|
152
|
+
expect(ev.evaluate(valuesMap)).toBeFalsy();
|
|
153
|
+
|
|
154
|
+
ev = new ExpressionEvaluator('Arguments.c = Arguments.d');
|
|
155
|
+
expect(ev.evaluate(valuesMap)).toBeTruthy();
|
|
156
|
+
|
|
157
|
+
ev = new ExpressionEvaluator('Arguments.e = null');
|
|
158
|
+
expect(ev.evaluate(valuesMap)).toBeTruthy();
|
|
159
|
+
|
|
160
|
+
ev = new ExpressionEvaluator('Arguments.e != null');
|
|
161
|
+
expect(ev.evaluate(valuesMap)).toBeFalsy();
|
|
162
|
+
|
|
163
|
+
ev = new ExpressionEvaluator('Arguments.e = false');
|
|
164
|
+
expect(ev.evaluate(valuesMap)).toBeTruthy();
|
|
165
|
+
|
|
166
|
+
ev = new ExpressionEvaluator('Arguments.c != null');
|
|
167
|
+
expect(ev.evaluate(valuesMap)).toBeTruthy();
|
|
168
|
+
});
|
|
169
|
+
|
|
170
|
+
test('Expression Evaluation nullish coalescing', () => {
|
|
171
|
+
let atv: ArgumentsTokenValueExtractor = new ArgumentsTokenValueExtractor(
|
|
172
|
+
new Map<string, any>([
|
|
173
|
+
['a', 'kirun '],
|
|
174
|
+
['b', 2],
|
|
175
|
+
['b1', 4],
|
|
176
|
+
['c', { a: 2, b: [true, false], c: { x: 'kiran' } }],
|
|
177
|
+
['d', { a: 2, b: [true, false], c: { x: 'kiran' } }],
|
|
178
|
+
]),
|
|
179
|
+
);
|
|
180
|
+
let valuesMap: Map<string, TokenValueExtractor> = MapUtil.of(atv.getPrefix(), atv);
|
|
181
|
+
|
|
182
|
+
let ev = new ExpressionEvaluator('(Arguments.e ?? Arguments.b ?? Arguments.b1) + 4');
|
|
183
|
+
expect(ev.evaluate(valuesMap)).toBe(6);
|
|
184
|
+
|
|
185
|
+
ev = new ExpressionEvaluator('(Arguments.e ?? Arguments.b2 ?? Arguments.b1) + 4');
|
|
186
|
+
expect(ev.evaluate(valuesMap)).toBe(8);
|
|
187
|
+
});
|
|
188
|
+
|
|
189
|
+
test('Expression Evaluation nesting expression', () => {
|
|
190
|
+
let atv: ArgumentsTokenValueExtractor = new ArgumentsTokenValueExtractor(
|
|
191
|
+
new Map<string, any>([
|
|
192
|
+
['a', 'kirun '],
|
|
193
|
+
['b', 2],
|
|
194
|
+
['b1', 4],
|
|
195
|
+
['b2', 4],
|
|
196
|
+
['c', { a: 2, b: [true, false], c: { x: 'Arguments.b2' } }],
|
|
197
|
+
['d', 'c'],
|
|
198
|
+
]),
|
|
199
|
+
);
|
|
200
|
+
let valuesMap: Map<string, TokenValueExtractor> = MapUtil.of(atv.getPrefix(), atv);
|
|
201
|
+
|
|
202
|
+
let ev = new ExpressionEvaluator(
|
|
203
|
+
'Arguments.{{Arguments.d}}.a + {{Arguments.{{Arguments.d}}.c.x}}',
|
|
204
|
+
);
|
|
205
|
+
expect(ev.evaluate(valuesMap)).toBe(6);
|
|
206
|
+
|
|
207
|
+
ev = new ExpressionEvaluator(
|
|
208
|
+
"'There are {{{{Arguments.{{Arguments.d}}.c.x}}}} boys in the class room...' * Arguments.b",
|
|
209
|
+
);
|
|
210
|
+
expect(ev.evaluate(valuesMap)).toBe(
|
|
211
|
+
'There are 4 boys in the class room...There are 4 boys in the class room...',
|
|
212
|
+
);
|
|
213
|
+
});
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { deepEqual } from '../../../src/engine/util/deepEqual';
|
|
2
|
+
|
|
3
|
+
test('deepEqual', () => {
|
|
4
|
+
expect(deepEqual(true, false)).toBeFalsy();
|
|
5
|
+
expect(deepEqual(2, 2)).toBeTruthy();
|
|
6
|
+
expect(deepEqual(null, undefined)).toBeTruthy();
|
|
7
|
+
expect(deepEqual([1, 2, 3, { a: [3, 4] }], [1, 2, 3, { a: [3, 4] }])).toBeTruthy();
|
|
8
|
+
expect(deepEqual([1, 2, 3, { a: [3, 4] }], [1, 2, 3, { a: [3] }])).toBeFalsy();
|
|
9
|
+
expect(deepEqual([1, 2, 3, { a: [3, 4] }], [1, 2, 3, { a: [3, '4'] }])).toBeFalsy();
|
|
10
|
+
expect(
|
|
11
|
+
deepEqual([1, 2, 3, { a: [3, 4], b: null }], [1, 2, 3, { a: [3, 4], b: undefined }]),
|
|
12
|
+
).toBeTruthy();
|
|
13
|
+
});
|