@fincity/kirun-js 2.7.0 → 2.8.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/__tests__/engine/function/system/WaitTest.ts +1 -1
- package/__tests__/engine/function/system/array/AddFirstTest.ts +2 -6
- package/__tests__/engine/function/system/array/IndexOfTest.ts +8 -13
- package/__tests__/engine/function/system/array/LastIndexOfTest.ts +9 -28
- package/__tests__/engine/function/system/date/AddSubtractTimeTest.ts +93 -0
- package/__tests__/engine/function/system/date/DateFunctionRepositoryTest.ts +96 -0
- package/__tests__/engine/function/system/date/DifferenceTest.ts +93 -0
- package/__tests__/engine/function/system/date/EpochToTimestampTest.ts +133 -0
- package/__tests__/engine/function/system/date/FromDateStringTest.ts +51 -0
- package/__tests__/engine/function/system/date/FromNowTest.ts +71 -0
- package/__tests__/engine/function/system/date/GetCurrentTimeStampTest.ts +19 -27
- package/__tests__/engine/function/system/date/GetNamesTest.ts +105 -0
- package/__tests__/engine/function/system/date/IsBetweenTest.ts +53 -0
- package/__tests__/engine/function/system/date/IsValidISODateTest.ts +42 -54
- package/__tests__/engine/function/system/date/LastFirstOfTest.ts +64 -0
- package/__tests__/engine/function/system/date/SetTimeZoneTest.ts +48 -0
- package/__tests__/engine/function/system/date/StartEndOfTest.ts +53 -0
- package/__tests__/engine/function/system/date/TimeAsTest.ts +24 -0
- package/__tests__/engine/function/system/date/TimestampToEpochTest.ts +45 -0
- package/__tests__/engine/function/system/date/ToDateStringTest.ts +48 -0
- package/__tests__/engine/function/system/math/RandomFloatTest.ts +21 -22
- package/__tests__/engine/function/system/math/RandomIntTest.ts +5 -4
- package/__tests__/engine/repository/RepositoryFilterTest.ts +4 -1
- package/__tests__/engine/runtime/expression/ExpressionEqualityTest.ts +76 -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 +14 -13
- package/dist/types.d.ts.map +1 -1
- package/generator/generateValidationCSV.ts +51 -42
- package/generator/validation-js.csv +0 -0
- package/package.json +9 -7
- package/src/engine/function/AbstractFunction.ts +1 -1
- package/src/engine/function/system/Print.ts +19 -5
- package/src/engine/function/system/Wait.ts +1 -1
- package/src/engine/function/system/array/AbstractArrayFunction.ts +3 -3
- package/src/engine/function/system/array/Fill.ts +1 -1
- package/src/engine/function/system/array/Frequency.ts +0 -1
- package/src/engine/function/system/array/IndexOf.ts +4 -4
- package/src/engine/function/system/array/LastIndexOf.ts +3 -3
- package/src/engine/function/system/array/Rotate.ts +1 -1
- package/src/engine/function/system/array/Shuffle.ts +1 -1
- package/src/engine/function/system/array/Sort.ts +1 -1
- package/src/engine/function/system/date/AbstractDateFunction.ts +229 -111
- package/src/engine/function/system/date/AddSubtractTime.ts +99 -0
- package/src/engine/function/system/date/DateFunctionRepository.ts +228 -122
- package/src/engine/function/system/date/EpochToTimestamp.ts +75 -0
- package/src/engine/function/system/date/FromDateString.ts +44 -0
- package/src/engine/function/system/date/FromNow.ts +77 -0
- package/src/engine/function/system/date/GetCurrent.ts +20 -0
- package/src/engine/function/system/date/GetNames.ts +74 -0
- package/src/engine/function/system/date/IsBetween.ts +62 -0
- package/src/engine/function/system/date/IsValidISODate.ts +54 -40
- package/src/engine/function/system/date/LastFirstOf.ts +72 -0
- package/src/engine/function/system/date/SetTimeZone.ts +43 -0
- package/src/engine/function/system/date/StartEndOf.ts +44 -0
- package/src/engine/function/system/date/TimeAs.ts +64 -0
- package/src/engine/function/system/date/TimestampToEpoch.ts +54 -0
- package/src/engine/function/system/date/ToDateString.ts +49 -0
- package/src/engine/function/system/date/common.ts +9 -0
- package/src/engine/function/system/math/MathFunctionRepository.ts +43 -4
- package/src/engine/function/system/math/RandomAny.ts +57 -0
- package/src/engine/function/system/object/ObjectConvert.ts +45 -19
- package/src/engine/function/system/object/ObjectFunctionRepository.ts +2 -1
- package/src/engine/function/system/string/AbstractStringFunction.ts +42 -82
- package/src/engine/function/system/string/StringFunctionRepository.ts +39 -20
- package/src/engine/json/schema/SchemaUtil.ts +1 -1
- package/src/engine/repository/KIRunSchemaRepository.ts +57 -3
- package/src/engine/runtime/expression/tokenextractor/TokenValueExtractor.ts +14 -21
- package/src/engine/util/string/StringUtil.ts +12 -0
- package/tsconfig.json +1 -2
- package/__tests__/engine/function/system/date/AddTimeTest.ts +0 -115
- package/__tests__/engine/function/system/date/DateToEpochTest.ts +0 -74
- package/__tests__/engine/function/system/date/DifferenceOfTimestampsTest.ts +0 -53
- package/__tests__/engine/function/system/date/EpochToDateTest.ts +0 -105
- package/__tests__/engine/function/system/date/GetDateTest.ts +0 -85
- package/__tests__/engine/function/system/date/GetDayTest.ts +0 -85
- package/__tests__/engine/function/system/date/GetFullYearTest.ts +0 -85
- package/__tests__/engine/function/system/date/GetHoursTest.ts +0 -85
- package/__tests__/engine/function/system/date/GetMilliSecondsTest.ts +0 -85
- package/__tests__/engine/function/system/date/GetMinutesTest.ts +0 -85
- package/__tests__/engine/function/system/date/GetMonthTest.ts +0 -85
- package/__tests__/engine/function/system/date/GetSecondsTest.ts +0 -85
- package/__tests__/engine/function/system/date/GetTimeAsArrayTest.ts +0 -59
- package/__tests__/engine/function/system/date/GetTimeAsObjectTest.ts +0 -83
- package/__tests__/engine/function/system/date/GetTimeTest.ts +0 -86
- package/__tests__/engine/function/system/date/IsLeapYearTest.ts +0 -85
- package/__tests__/engine/function/system/date/MaximumTimestampTest.ts +0 -55
- package/__tests__/engine/function/system/date/MinimumTimestampTest.ts +0 -54
- package/__tests__/engine/function/system/date/SubtractTimeTest.ts +0 -95
- package/src/engine/function/system/date/DateToEpoch.ts +0 -39
- package/src/engine/function/system/date/DifferenceOfTimestamps.ts +0 -45
- package/src/engine/function/system/date/EpochToDate.ts +0 -76
- package/src/engine/function/system/date/GetCurrentTimeStamp.ts +0 -36
- package/src/engine/function/system/date/GetTimeAsArray.ts +0 -48
- package/src/engine/function/system/date/GetTimeAsObject.ts +0 -66
- package/src/engine/function/system/date/MaximumTimestamp.ts +0 -73
- package/src/engine/function/system/date/MinimumTimestamp.ts +0 -74
- package/src/engine/function/system/math/RandomFloat.ts +0 -56
- package/src/engine/function/system/math/RandomInt.ts +0 -56
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { Parameter } from '../../../model/Parameter';
|
|
2
|
+
import { AbstractDateFunction } from './AbstractDateFunction';
|
|
3
|
+
import { Event } from '../../../model/Event';
|
|
4
|
+
import { Schema } from '../../../json/schema/Schema';
|
|
5
|
+
import { MapUtil } from '../../../util/MapUtil';
|
|
6
|
+
import { FunctionOutput } from '../../../model/FunctionOutput';
|
|
7
|
+
import { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';
|
|
8
|
+
import { DateTime } from 'luxon';
|
|
9
|
+
import { EventResult } from '../../../model/EventResult';
|
|
10
|
+
|
|
11
|
+
export class GetNames extends AbstractDateFunction {
|
|
12
|
+
public static readonly EVENT_NAMES_NAME = 'names';
|
|
13
|
+
public static readonly PARAMETER_UNIT_NAME = 'unit';
|
|
14
|
+
public static readonly PARAMETER_LOCALE_NAME = 'locale';
|
|
15
|
+
|
|
16
|
+
constructor() {
|
|
17
|
+
super(
|
|
18
|
+
'GetNames',
|
|
19
|
+
new Event(
|
|
20
|
+
GetNames.EVENT_NAMES_NAME,
|
|
21
|
+
MapUtil.of(
|
|
22
|
+
GetNames.EVENT_NAMES_NAME,
|
|
23
|
+
Schema.ofArray(
|
|
24
|
+
GetNames.EVENT_NAMES_NAME,
|
|
25
|
+
Schema.ofString(GetNames.EVENT_NAMES_NAME),
|
|
26
|
+
),
|
|
27
|
+
),
|
|
28
|
+
),
|
|
29
|
+
new Parameter(
|
|
30
|
+
GetNames.PARAMETER_UNIT_NAME,
|
|
31
|
+
Schema.ofString(GetNames.PARAMETER_UNIT_NAME).setEnums([
|
|
32
|
+
'TIMEZONES',
|
|
33
|
+
'MONTHS',
|
|
34
|
+
'WEEKDAYS',
|
|
35
|
+
]),
|
|
36
|
+
),
|
|
37
|
+
new Parameter(
|
|
38
|
+
GetNames.PARAMETER_LOCALE_NAME,
|
|
39
|
+
Schema.ofString(GetNames.PARAMETER_LOCALE_NAME).setDefaultValue('system'),
|
|
40
|
+
),
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {
|
|
45
|
+
const unit = context.getArguments()?.get(GetNames.PARAMETER_UNIT_NAME);
|
|
46
|
+
const locale = context.getArguments()?.get(GetNames.PARAMETER_LOCALE_NAME);
|
|
47
|
+
|
|
48
|
+
return new FunctionOutput([
|
|
49
|
+
EventResult.outputOf(
|
|
50
|
+
MapUtil.of(GetNames.EVENT_NAMES_NAME, this.getNames(unit, locale)),
|
|
51
|
+
),
|
|
52
|
+
]);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
private getNames(unit: string, locale: string): string[] {
|
|
56
|
+
if (unit === 'TIMEZONES') {
|
|
57
|
+
return Intl.supportedValuesOf('timeZone');
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
if (unit === 'MONTHS') {
|
|
61
|
+
return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12].map((month) =>
|
|
62
|
+
DateTime.now().setLocale(locale).set({ month }).toFormat('MMMM'),
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
if (unit === 'WEEKDAYS') {
|
|
67
|
+
return [1, 2, 3, 4, 5, 6, 7].map((day) =>
|
|
68
|
+
DateTime.now().setLocale(locale).set({ month: 7, day }).toFormat('EEEE'),
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
return [];
|
|
73
|
+
}
|
|
74
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { Schema } from '../../../json/schema/Schema';
|
|
2
|
+
import { EventResult } from '../../../model/EventResult';
|
|
3
|
+
import { FunctionOutput } from '../../../model/FunctionOutput';
|
|
4
|
+
import { Parameter } from '../../../model/Parameter';
|
|
5
|
+
import { Namespaces } from '../../../namespaces/Namespaces';
|
|
6
|
+
import { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';
|
|
7
|
+
import { MapUtil } from '../../../util/MapUtil';
|
|
8
|
+
import { AbstractDateFunction } from './AbstractDateFunction';
|
|
9
|
+
import { getDateTime } from './common';
|
|
10
|
+
|
|
11
|
+
export class IsBetween extends AbstractDateFunction {
|
|
12
|
+
public static readonly PARAMETER_START_TIMESTAMP_NAME = 'startTimestamp';
|
|
13
|
+
public static readonly PARAMETER_END_TIMESTAMP_NAME = 'endTimestamp';
|
|
14
|
+
|
|
15
|
+
public static readonly PARAMETER_CHECK_TIMESTAMP_NAME = 'checkTimestamp';
|
|
16
|
+
|
|
17
|
+
constructor() {
|
|
18
|
+
super(
|
|
19
|
+
'IsBetween',
|
|
20
|
+
IsBetween.EVENT_BOOLEAN,
|
|
21
|
+
Parameter.of(
|
|
22
|
+
IsBetween.PARAMETER_START_TIMESTAMP_NAME,
|
|
23
|
+
Schema.ofRef(Namespaces.DATE + '.Timestamp'),
|
|
24
|
+
),
|
|
25
|
+
Parameter.of(
|
|
26
|
+
IsBetween.PARAMETER_END_TIMESTAMP_NAME,
|
|
27
|
+
Schema.ofRef(Namespaces.DATE + '.Timestamp'),
|
|
28
|
+
),
|
|
29
|
+
Parameter.of(
|
|
30
|
+
IsBetween.PARAMETER_CHECK_TIMESTAMP_NAME,
|
|
31
|
+
Schema.ofRef(Namespaces.DATE + '.Timestamp'),
|
|
32
|
+
),
|
|
33
|
+
);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {
|
|
37
|
+
const startTimestamp = context
|
|
38
|
+
.getArguments()
|
|
39
|
+
?.get(IsBetween.PARAMETER_START_TIMESTAMP_NAME);
|
|
40
|
+
const endTimestamp = context.getArguments()?.get(IsBetween.PARAMETER_END_TIMESTAMP_NAME);
|
|
41
|
+
const checkTimestamp = context
|
|
42
|
+
.getArguments()
|
|
43
|
+
?.get(IsBetween.PARAMETER_CHECK_TIMESTAMP_NAME);
|
|
44
|
+
|
|
45
|
+
let startDateTime = getDateTime(startTimestamp);
|
|
46
|
+
let endDateTime = getDateTime(endTimestamp);
|
|
47
|
+
const checkDateTime = getDateTime(checkTimestamp);
|
|
48
|
+
|
|
49
|
+
if (startDateTime > endDateTime) {
|
|
50
|
+
[startDateTime, endDateTime] = [endDateTime, startDateTime];
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
return new FunctionOutput([
|
|
54
|
+
EventResult.outputOf(
|
|
55
|
+
MapUtil.of(
|
|
56
|
+
IsBetween.EVENT_RESULT_NAME,
|
|
57
|
+
startDateTime <= checkDateTime && checkDateTime <= endDateTime,
|
|
58
|
+
),
|
|
59
|
+
),
|
|
60
|
+
]);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
@@ -1,43 +1,57 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { Schema } from "../../../json/schema/Schema";
|
|
1
|
+
import { Schema } from '../../../json/schema/Schema';
|
|
3
2
|
import { Event } from '../../../model/Event';
|
|
4
|
-
import { EventResult } from
|
|
5
|
-
import { FunctionOutput } from
|
|
6
|
-
import { FunctionSignature } from
|
|
7
|
-
import { Parameter } from
|
|
8
|
-
import { Namespaces } from
|
|
9
|
-
import { FunctionExecutionParameters } from
|
|
10
|
-
import { MapUtil } from
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
.
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
3
|
+
import { EventResult } from '../../../model/EventResult';
|
|
4
|
+
import { FunctionOutput } from '../../../model/FunctionOutput';
|
|
5
|
+
import { FunctionSignature } from '../../../model/FunctionSignature';
|
|
6
|
+
import { Parameter } from '../../../model/Parameter';
|
|
7
|
+
import { Namespaces } from '../../../namespaces/Namespaces';
|
|
8
|
+
import { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';
|
|
9
|
+
import { MapUtil } from '../../../util/MapUtil';
|
|
10
|
+
import { AbstractFunction } from '../../AbstractFunction';
|
|
11
|
+
import { AbstractDateFunction } from './AbstractDateFunction';
|
|
12
|
+
import { DateTime } from 'luxon';
|
|
13
|
+
|
|
14
|
+
export class IsValidISODate extends AbstractFunction {
|
|
15
|
+
private static readonly SIGNATURE = new FunctionSignature('IsValidISODate')
|
|
16
|
+
.setNamespace(Namespaces.DATE)
|
|
17
|
+
.setParameters(
|
|
18
|
+
new Map([
|
|
19
|
+
Parameter.ofEntry(
|
|
20
|
+
AbstractDateFunction.PARAMETER_TIMESTAMP_NAME,
|
|
21
|
+
Schema.ofString(AbstractDateFunction.PARAMETER_TIMESTAMP_NAME),
|
|
22
|
+
),
|
|
23
|
+
]),
|
|
24
|
+
)
|
|
25
|
+
.setEvents(
|
|
26
|
+
new Map([
|
|
27
|
+
Event.outputEventMapEntry(
|
|
28
|
+
MapUtil.of(
|
|
29
|
+
AbstractDateFunction.EVENT_RESULT_NAME,
|
|
30
|
+
Schema.ofBoolean(AbstractDateFunction.EVENT_RESULT_NAME),
|
|
31
|
+
),
|
|
32
|
+
),
|
|
33
|
+
]),
|
|
34
|
+
);
|
|
35
|
+
|
|
36
|
+
protected internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {
|
|
37
|
+
const timestamp = context
|
|
38
|
+
.getArguments()
|
|
39
|
+
?.get(AbstractDateFunction.PARAMETER_TIMESTAMP_NAME);
|
|
40
|
+
|
|
41
|
+
const dt = DateTime.fromISO(timestamp);
|
|
42
|
+
|
|
43
|
+
return Promise.resolve(
|
|
44
|
+
new FunctionOutput([
|
|
45
|
+
EventResult.outputOf(
|
|
46
|
+
MapUtil.of(
|
|
47
|
+
AbstractDateFunction.EVENT_RESULT_NAME,
|
|
48
|
+
dt.isValid,
|
|
49
|
+
),
|
|
50
|
+
),
|
|
51
|
+
]),
|
|
52
|
+
);
|
|
29
53
|
}
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
var date = context.getArguments()?.get(VALUE);
|
|
34
|
-
|
|
35
|
-
if(isNullValue(date))
|
|
36
|
-
throw new KIRuntimeException("Please provide a valid date object");
|
|
37
|
-
|
|
38
|
-
return new FunctionOutput([ EventResult.of(OUTPUT , MapUtil.of( OUTPUT , ValidDateTimeUtil.validate(date)))]);
|
|
39
|
-
|
|
54
|
+
public getSignature(): FunctionSignature {
|
|
55
|
+
return IsValidISODate.SIGNATURE;
|
|
40
56
|
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
}
|
|
57
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { DateTime } from 'luxon';
|
|
2
|
+
import { EventResult } from '../../../model/EventResult';
|
|
3
|
+
import { FunctionOutput } from '../../../model/FunctionOutput';
|
|
4
|
+
import { FunctionSignature } from '../../../model/FunctionSignature';
|
|
5
|
+
import { Namespaces } from '../../../namespaces/Namespaces';
|
|
6
|
+
import { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';
|
|
7
|
+
import { MapUtil } from '../../../util/MapUtil';
|
|
8
|
+
import { AbstractFunction } from '../../AbstractFunction';
|
|
9
|
+
import { AbstractDateFunction } from './AbstractDateFunction';
|
|
10
|
+
import { Parameter } from '../../../model/Parameter';
|
|
11
|
+
import { Schema } from '../../../json/schema/Schema';
|
|
12
|
+
import { getDateTime } from './common';
|
|
13
|
+
|
|
14
|
+
export class LastFirstOf extends AbstractFunction {
|
|
15
|
+
private readonly signature: FunctionSignature;
|
|
16
|
+
private readonly isLast: boolean;
|
|
17
|
+
|
|
18
|
+
constructor(isLast: boolean) {
|
|
19
|
+
super();
|
|
20
|
+
|
|
21
|
+
this.isLast = isLast;
|
|
22
|
+
this.signature = new FunctionSignature(isLast ? 'LastOf' : 'FirstOf')
|
|
23
|
+
.setNamespace(Namespaces.DATE)
|
|
24
|
+
.setParameters(
|
|
25
|
+
new Map([
|
|
26
|
+
[
|
|
27
|
+
AbstractDateFunction.PARAMETER_TIMESTAMP_NAME,
|
|
28
|
+
new Parameter(
|
|
29
|
+
AbstractDateFunction.PARAMETER_TIMESTAMP_NAME,
|
|
30
|
+
Schema.ofRef(Namespaces.DATE + '.Timestamp'),
|
|
31
|
+
).setVariableArgument(true),
|
|
32
|
+
],
|
|
33
|
+
]),
|
|
34
|
+
)
|
|
35
|
+
.setEvents(
|
|
36
|
+
new Map([
|
|
37
|
+
[
|
|
38
|
+
AbstractDateFunction.EVENT_TIMESTAMP_NAME,
|
|
39
|
+
AbstractDateFunction.EVENT_TIMESTAMP,
|
|
40
|
+
],
|
|
41
|
+
]),
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
public getSignature(): FunctionSignature {
|
|
46
|
+
return this.signature;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
protected internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {
|
|
50
|
+
const timestamps = context
|
|
51
|
+
.getArguments()
|
|
52
|
+
?.get(AbstractDateFunction.PARAMETER_TIMESTAMP_NAME);
|
|
53
|
+
|
|
54
|
+
if (!timestamps?.length) {
|
|
55
|
+
throw new Error('No timestamps provided');
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
const dateTimes: DateTime[] = timestamps.map((ts: string) => getDateTime(ts));
|
|
59
|
+
dateTimes.sort((a, b) => a.toMillis() - b.toMillis());
|
|
60
|
+
|
|
61
|
+
return Promise.resolve(
|
|
62
|
+
new FunctionOutput([
|
|
63
|
+
EventResult.outputOf(
|
|
64
|
+
MapUtil.of(
|
|
65
|
+
AbstractDateFunction.EVENT_TIMESTAMP_NAME,
|
|
66
|
+
dateTimes[this.isLast ? dateTimes.length - 1 : 0].toISO(),
|
|
67
|
+
),
|
|
68
|
+
),
|
|
69
|
+
]),
|
|
70
|
+
);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { Schema } from '../../../json/schema/Schema';
|
|
2
|
+
import { EventResult } from '../../../model/EventResult';
|
|
3
|
+
import { FunctionOutput } from '../../../model/FunctionOutput';
|
|
4
|
+
import { Parameter } from '../../../model/Parameter';
|
|
5
|
+
import { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';
|
|
6
|
+
import { MapUtil } from '../../../util/MapUtil';
|
|
7
|
+
import { AbstractDateFunction } from './AbstractDateFunction';
|
|
8
|
+
import { getDateTime } from './common';
|
|
9
|
+
|
|
10
|
+
export class SetTimeZone extends AbstractDateFunction {
|
|
11
|
+
public static readonly PARAMETER_TIMEZONE_NAME: string = 'timezone';
|
|
12
|
+
|
|
13
|
+
constructor() {
|
|
14
|
+
super(
|
|
15
|
+
'SetTimeZone',
|
|
16
|
+
AbstractDateFunction.EVENT_TIMESTAMP,
|
|
17
|
+
AbstractDateFunction.PARAMETER_TIMESTAMP,
|
|
18
|
+
Parameter.of(
|
|
19
|
+
SetTimeZone.PARAMETER_TIMEZONE_NAME,
|
|
20
|
+
Schema.ofString(SetTimeZone.PARAMETER_TIMEZONE_NAME),
|
|
21
|
+
),
|
|
22
|
+
);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {
|
|
26
|
+
const timestamp = context
|
|
27
|
+
.getArguments()
|
|
28
|
+
?.get(AbstractDateFunction.PARAMETER_TIMESTAMP_NAME);
|
|
29
|
+
|
|
30
|
+
const dateTime = getDateTime(timestamp);
|
|
31
|
+
|
|
32
|
+
const timeZone = context.getArguments()?.get(SetTimeZone.PARAMETER_TIMEZONE_NAME);
|
|
33
|
+
|
|
34
|
+
return new FunctionOutput([
|
|
35
|
+
EventResult.outputOf(
|
|
36
|
+
MapUtil.of(
|
|
37
|
+
AbstractDateFunction.EVENT_RESULT_NAME,
|
|
38
|
+
dateTime.setZone(timeZone).toISO()!,
|
|
39
|
+
),
|
|
40
|
+
),
|
|
41
|
+
]);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { DurationLikeObject } from 'luxon';
|
|
2
|
+
import { Schema } from '../../../json/schema/Schema';
|
|
3
|
+
import { EventResult } from '../../../model/EventResult';
|
|
4
|
+
import { FunctionOutput } from '../../../model/FunctionOutput';
|
|
5
|
+
import { Parameter } from '../../../model/Parameter';
|
|
6
|
+
import { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';
|
|
7
|
+
import { MapUtil } from '../../../util/MapUtil';
|
|
8
|
+
import { AbstractDateFunction } from './AbstractDateFunction';
|
|
9
|
+
import { getDateTime } from './common';
|
|
10
|
+
|
|
11
|
+
export class StartEndOf extends AbstractDateFunction {
|
|
12
|
+
private readonly isStart: boolean;
|
|
13
|
+
|
|
14
|
+
constructor(isStart: boolean) {
|
|
15
|
+
super(
|
|
16
|
+
isStart ? 'StartOf' : 'EndOf',
|
|
17
|
+
AbstractDateFunction.EVENT_TIMESTAMP,
|
|
18
|
+
AbstractDateFunction.PARAMETER_TIMESTAMP,
|
|
19
|
+
AbstractDateFunction.PARAMETER_UNIT,
|
|
20
|
+
);
|
|
21
|
+
|
|
22
|
+
this.isStart = isStart;
|
|
23
|
+
}
|
|
24
|
+
protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {
|
|
25
|
+
const timestamp = context
|
|
26
|
+
.getArguments()
|
|
27
|
+
?.get(AbstractDateFunction.PARAMETER_TIMESTAMP_NAME);
|
|
28
|
+
|
|
29
|
+
const dateTime = getDateTime(timestamp);
|
|
30
|
+
|
|
31
|
+
const unit = context
|
|
32
|
+
.getArguments()
|
|
33
|
+
?.get(AbstractDateFunction.PARAMETER_UNIT_NAME)
|
|
34
|
+
?.toLowerCase();
|
|
35
|
+
|
|
36
|
+
const newDateTime = this.isStart ? dateTime.startOf(unit) : dateTime.endOf(unit);
|
|
37
|
+
|
|
38
|
+
return new FunctionOutput([
|
|
39
|
+
EventResult.outputOf(
|
|
40
|
+
MapUtil.of(AbstractDateFunction.EVENT_TIMESTAMP_NAME, newDateTime.toISO()),
|
|
41
|
+
),
|
|
42
|
+
]);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { FunctionOutput } from '../../../model/FunctionOutput';
|
|
2
|
+
import { Namespaces } from '../../../namespaces/Namespaces';
|
|
3
|
+
import { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';
|
|
4
|
+
import { MapUtil } from '../../../util/MapUtil';
|
|
5
|
+
import { Event } from '../../../model/Event';
|
|
6
|
+
import { EventResult } from '../../../model/EventResult';
|
|
7
|
+
|
|
8
|
+
import { AbstractDateFunction } from './AbstractDateFunction';
|
|
9
|
+
import { getDateTime } from './common';
|
|
10
|
+
import { Schema } from '../../../json/schema/Schema';
|
|
11
|
+
|
|
12
|
+
export class TimeAs extends AbstractDateFunction {
|
|
13
|
+
public static readonly EVENT_TIME_OBJECT_NAME = 'object';
|
|
14
|
+
public static readonly EVENT_TIME_ARRAY_NAME = 'array';
|
|
15
|
+
|
|
16
|
+
private readonly isArray: boolean;
|
|
17
|
+
|
|
18
|
+
constructor(isArray: boolean) {
|
|
19
|
+
super(
|
|
20
|
+
isArray ? 'TimeAsArray' : 'TimeAsObject',
|
|
21
|
+
new Event(
|
|
22
|
+
Event.OUTPUT,
|
|
23
|
+
MapUtil.of(
|
|
24
|
+
isArray ? TimeAs.EVENT_TIME_ARRAY_NAME : TimeAs.EVENT_TIME_OBJECT_NAME,
|
|
25
|
+
isArray
|
|
26
|
+
? Schema.ofArray(
|
|
27
|
+
TimeAs.EVENT_TIME_ARRAY_NAME,
|
|
28
|
+
Schema.ofInteger('timeParts'),
|
|
29
|
+
)
|
|
30
|
+
: Schema.ofRef(Namespaces.DATE + '.TimeObject'),
|
|
31
|
+
),
|
|
32
|
+
),
|
|
33
|
+
AbstractDateFunction.PARAMETER_TIMESTAMP,
|
|
34
|
+
);
|
|
35
|
+
|
|
36
|
+
this.isArray = isArray;
|
|
37
|
+
}
|
|
38
|
+
protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {
|
|
39
|
+
const timestamp = context
|
|
40
|
+
.getArguments()
|
|
41
|
+
?.get(AbstractDateFunction.PARAMETER_TIMESTAMP_NAME);
|
|
42
|
+
|
|
43
|
+
const dateTime = getDateTime(timestamp).toObject();
|
|
44
|
+
|
|
45
|
+
return new FunctionOutput([
|
|
46
|
+
EventResult.outputOf(
|
|
47
|
+
MapUtil.of(
|
|
48
|
+
this.isArray ? TimeAs.EVENT_TIME_ARRAY_NAME : TimeAs.EVENT_TIME_OBJECT_NAME,
|
|
49
|
+
this.isArray
|
|
50
|
+
? [
|
|
51
|
+
dateTime.year,
|
|
52
|
+
dateTime.month,
|
|
53
|
+
dateTime.day,
|
|
54
|
+
dateTime.hour,
|
|
55
|
+
dateTime.minute,
|
|
56
|
+
dateTime.second,
|
|
57
|
+
dateTime.millisecond,
|
|
58
|
+
]
|
|
59
|
+
: dateTime,
|
|
60
|
+
),
|
|
61
|
+
),
|
|
62
|
+
]);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { DateTime } from 'luxon';
|
|
2
|
+
import { EventResult } from '../../../model/EventResult';
|
|
3
|
+
import { FunctionOutput } from '../../../model/FunctionOutput';
|
|
4
|
+
import { FunctionSignature } from '../../../model/FunctionSignature';
|
|
5
|
+
import { Namespaces } from '../../../namespaces/Namespaces';
|
|
6
|
+
import { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';
|
|
7
|
+
import { MapUtil } from '../../../util/MapUtil';
|
|
8
|
+
import { AbstractFunction } from '../../AbstractFunction';
|
|
9
|
+
import { AbstractDateFunction } from './AbstractDateFunction';
|
|
10
|
+
|
|
11
|
+
export class TimestampToEpoch extends AbstractFunction {
|
|
12
|
+
private readonly signature: FunctionSignature;
|
|
13
|
+
private readonly isSeconds: boolean;
|
|
14
|
+
|
|
15
|
+
constructor(name: string, isSeconds: boolean) {
|
|
16
|
+
super();
|
|
17
|
+
|
|
18
|
+
this.isSeconds = isSeconds;
|
|
19
|
+
this.signature = new FunctionSignature(name)
|
|
20
|
+
.setNamespace(Namespaces.DATE)
|
|
21
|
+
.setParameters(
|
|
22
|
+
new Map([
|
|
23
|
+
[
|
|
24
|
+
AbstractDateFunction.PARAMETER_TIMESTAMP_NAME,
|
|
25
|
+
AbstractDateFunction.PARAMETER_TIMESTAMP,
|
|
26
|
+
],
|
|
27
|
+
]),
|
|
28
|
+
)
|
|
29
|
+
.setEvents(
|
|
30
|
+
new Map([
|
|
31
|
+
[AbstractDateFunction.EVENT_RESULT_NAME, AbstractDateFunction.EVENT_LONG],
|
|
32
|
+
]),
|
|
33
|
+
);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
public getSignature(): FunctionSignature {
|
|
37
|
+
return this.signature;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
protected internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {
|
|
41
|
+
const timestamp = context
|
|
42
|
+
.getArguments()
|
|
43
|
+
?.get(AbstractDateFunction.PARAMETER_TIMESTAMP_NAME);
|
|
44
|
+
const epoch = this.isSeconds
|
|
45
|
+
? DateTime.fromISO(timestamp).toSeconds()
|
|
46
|
+
: DateTime.fromISO(timestamp).toMillis();
|
|
47
|
+
|
|
48
|
+
return Promise.resolve(
|
|
49
|
+
new FunctionOutput([
|
|
50
|
+
EventResult.outputOf(MapUtil.of(AbstractDateFunction.EVENT_RESULT_NAME, epoch)),
|
|
51
|
+
]),
|
|
52
|
+
);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { Schema } from '../../../json/schema/Schema';
|
|
2
|
+
import { EventResult } from '../../../model/EventResult';
|
|
3
|
+
import { FunctionOutput } from '../../../model/FunctionOutput';
|
|
4
|
+
import { Parameter } from '../../../model/Parameter';
|
|
5
|
+
import { FunctionExecutionParameters } from '../../../runtime/FunctionExecutionParameters';
|
|
6
|
+
import { MapUtil } from '../../../util/MapUtil';
|
|
7
|
+
import { AbstractDateFunction } from './AbstractDateFunction';
|
|
8
|
+
import { getDateTime } from './common';
|
|
9
|
+
|
|
10
|
+
export class ToDateString extends AbstractDateFunction {
|
|
11
|
+
public static readonly PARAMETER_FORMAT_NAME = 'format';
|
|
12
|
+
public static readonly PARAMETER_LOCALE_NAME = 'locale';
|
|
13
|
+
|
|
14
|
+
constructor() {
|
|
15
|
+
super(
|
|
16
|
+
'ToDateString',
|
|
17
|
+
AbstractDateFunction.EVENT_STRING,
|
|
18
|
+
AbstractDateFunction.PARAMETER_TIMESTAMP,
|
|
19
|
+
Parameter.of(
|
|
20
|
+
ToDateString.PARAMETER_FORMAT_NAME,
|
|
21
|
+
Schema.ofString(ToDateString.PARAMETER_FORMAT_NAME),
|
|
22
|
+
),
|
|
23
|
+
Parameter.of(
|
|
24
|
+
ToDateString.PARAMETER_LOCALE_NAME,
|
|
25
|
+
Schema.ofString(ToDateString.PARAMETER_LOCALE_NAME).setDefaultValue(''),
|
|
26
|
+
),
|
|
27
|
+
);
|
|
28
|
+
}
|
|
29
|
+
protected async internalExecute(context: FunctionExecutionParameters): Promise<FunctionOutput> {
|
|
30
|
+
const timestamp = context
|
|
31
|
+
.getArguments()
|
|
32
|
+
?.get(AbstractDateFunction.PARAMETER_TIMESTAMP_NAME);
|
|
33
|
+
|
|
34
|
+
const dateTime = getDateTime(timestamp);
|
|
35
|
+
|
|
36
|
+
const format = context.getArguments()?.get(ToDateString.PARAMETER_FORMAT_NAME);
|
|
37
|
+
let locale = context.getArguments()?.get(ToDateString.PARAMETER_LOCALE_NAME);
|
|
38
|
+
if (locale === '') locale = 'system';
|
|
39
|
+
|
|
40
|
+
return new FunctionOutput([
|
|
41
|
+
EventResult.outputOf(
|
|
42
|
+
MapUtil.of(
|
|
43
|
+
AbstractDateFunction.EVENT_RESULT_NAME,
|
|
44
|
+
dateTime.toFormat(format, { locale }),
|
|
45
|
+
),
|
|
46
|
+
),
|
|
47
|
+
]);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import { Schema } from '../../../json/schema/Schema';
|
|
1
2
|
import { SchemaType } from '../../../json/schema/type/SchemaType';
|
|
3
|
+
import { Parameter } from '../../../model/Parameter';
|
|
2
4
|
import { Namespaces } from '../../../namespaces/Namespaces';
|
|
3
5
|
import { Repository } from '../../../Repository';
|
|
4
6
|
import { AbstractFunction } from '../../AbstractFunction';
|
|
@@ -9,8 +11,7 @@ import { Hypotenuse } from './Hypotenuse';
|
|
|
9
11
|
import { Maximum } from './Maximum';
|
|
10
12
|
import { Minimum } from './Minimum';
|
|
11
13
|
import { Random } from './Random';
|
|
12
|
-
import {
|
|
13
|
-
import { RandomInt } from './RandomInt';
|
|
14
|
+
import { RandomAny } from './RandomAny';
|
|
14
15
|
|
|
15
16
|
const functionObjectsIndex: { [key: string]: AbstractFunction } = {
|
|
16
17
|
Absolute: new GenericMathFunction(
|
|
@@ -55,8 +56,46 @@ const functionObjectsIndex: { [key: string]: AbstractFunction } = {
|
|
|
55
56
|
Maximum: new Maximum(),
|
|
56
57
|
Minimum: new Minimum(),
|
|
57
58
|
Random: new Random(),
|
|
58
|
-
RandomFloat: new
|
|
59
|
-
|
|
59
|
+
RandomFloat: new RandomAny(
|
|
60
|
+
'RandomFloat',
|
|
61
|
+
Parameter.of(RandomAny.MIN_VALUE, Schema.ofFloat(RandomAny.MIN_VALUE).setDefaultValue(0)),
|
|
62
|
+
Parameter.of(
|
|
63
|
+
RandomAny.MAX_VALUE,
|
|
64
|
+
Schema.ofFloat(RandomAny.MAX_VALUE).setDefaultValue(2147483647),
|
|
65
|
+
),
|
|
66
|
+
Schema.ofFloat(RandomAny.VALUE),
|
|
67
|
+
(min, max) => Math.random() * (max - min) + min,
|
|
68
|
+
),
|
|
69
|
+
RandomInt: new RandomAny(
|
|
70
|
+
'RandomInt',
|
|
71
|
+
Parameter.of(RandomAny.MIN_VALUE, Schema.ofInteger(RandomAny.MIN_VALUE).setDefaultValue(0)),
|
|
72
|
+
Parameter.of(
|
|
73
|
+
RandomAny.MAX_VALUE,
|
|
74
|
+
Schema.ofInteger(RandomAny.MAX_VALUE).setDefaultValue(2147483647),
|
|
75
|
+
),
|
|
76
|
+
Schema.ofInteger(RandomAny.VALUE),
|
|
77
|
+
(min, max) => Math.round(Math.random() * (max - min) + min),
|
|
78
|
+
),
|
|
79
|
+
RandomLong: new RandomAny(
|
|
80
|
+
'RandomLong',
|
|
81
|
+
Parameter.of(RandomAny.MIN_VALUE, Schema.ofLong(RandomAny.MIN_VALUE).setDefaultValue(0)),
|
|
82
|
+
Parameter.of(
|
|
83
|
+
RandomAny.MAX_VALUE,
|
|
84
|
+
Schema.ofLong(RandomAny.MAX_VALUE).setDefaultValue(Number.MAX_SAFE_INTEGER),
|
|
85
|
+
),
|
|
86
|
+
Schema.ofLong(RandomAny.VALUE),
|
|
87
|
+
(min, max) => Math.round(Math.random() * (max - min) + min),
|
|
88
|
+
),
|
|
89
|
+
RandomDouble: new RandomAny(
|
|
90
|
+
'RandomDouble',
|
|
91
|
+
Parameter.of(RandomAny.MIN_VALUE, Schema.ofDouble(RandomAny.MIN_VALUE).setDefaultValue(0)),
|
|
92
|
+
Parameter.of(
|
|
93
|
+
RandomAny.MAX_VALUE,
|
|
94
|
+
Schema.ofDouble(RandomAny.MAX_VALUE).setDefaultValue(Number.MAX_VALUE),
|
|
95
|
+
),
|
|
96
|
+
Schema.ofDouble(RandomAny.VALUE),
|
|
97
|
+
(min, max) => Math.random() * (max - min) + min,
|
|
98
|
+
),
|
|
60
99
|
};
|
|
61
100
|
|
|
62
101
|
const filterableNames = Object.values(functionObjectsIndex).map((e) =>
|