@hotmeshio/hotmesh 0.0.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/LICENSE +214 -0
- package/README.md +241 -0
- package/build/index.d.ts +4 -0
- package/build/index.js +7 -0
- package/build/modules/errors.d.ts +28 -0
- package/build/modules/errors.js +50 -0
- package/build/modules/key.d.ts +75 -0
- package/build/modules/key.js +116 -0
- package/build/modules/utils.d.ts +34 -0
- package/build/modules/utils.js +173 -0
- package/build/package.json +73 -0
- package/build/services/activities/activity.d.ts +59 -0
- package/build/services/activities/activity.js +396 -0
- package/build/services/activities/await.d.ts +16 -0
- package/build/services/activities/await.js +143 -0
- package/build/services/activities/emit.d.ts +9 -0
- package/build/services/activities/emit.js +13 -0
- package/build/services/activities/index.d.ts +15 -0
- package/build/services/activities/index.js +16 -0
- package/build/services/activities/iterate.d.ts +9 -0
- package/build/services/activities/iterate.js +13 -0
- package/build/services/activities/trigger.d.ts +22 -0
- package/build/services/activities/trigger.js +161 -0
- package/build/services/activities/worker.d.ts +17 -0
- package/build/services/activities/worker.js +164 -0
- package/build/services/collator/index.d.ts +54 -0
- package/build/services/collator/index.js +171 -0
- package/build/services/compiler/deployer.d.ts +35 -0
- package/build/services/compiler/deployer.js +412 -0
- package/build/services/compiler/index.d.ts +30 -0
- package/build/services/compiler/index.js +111 -0
- package/build/services/compiler/validator.d.ts +32 -0
- package/build/services/compiler/validator.js +134 -0
- package/build/services/connector/clients/ioredis.d.ts +13 -0
- package/build/services/connector/clients/ioredis.js +50 -0
- package/build/services/connector/clients/redis.d.ts +13 -0
- package/build/services/connector/clients/redis.js +62 -0
- package/build/services/connector/index.d.ts +5 -0
- package/build/services/connector/index.js +31 -0
- package/build/services/dimension/index.d.ts +29 -0
- package/build/services/dimension/index.js +35 -0
- package/build/services/durable/asyncLocalStorage.d.ts +3 -0
- package/build/services/durable/asyncLocalStorage.js +5 -0
- package/build/services/durable/client.d.ts +15 -0
- package/build/services/durable/client.js +108 -0
- package/build/services/durable/connection.d.ts +4 -0
- package/build/services/durable/connection.js +51 -0
- package/build/services/durable/factory.d.ts +3 -0
- package/build/services/durable/factory.js +123 -0
- package/build/services/durable/handle.d.ts +8 -0
- package/build/services/durable/handle.js +38 -0
- package/build/services/durable/index.d.ts +57 -0
- package/build/services/durable/index.js +58 -0
- package/build/services/durable/native.d.ts +4 -0
- package/build/services/durable/native.js +47 -0
- package/build/services/durable/worker.d.ts +36 -0
- package/build/services/durable/worker.js +266 -0
- package/build/services/durable/workflow.d.ts +6 -0
- package/build/services/durable/workflow.js +135 -0
- package/build/services/engine/index.d.ts +82 -0
- package/build/services/engine/index.js +511 -0
- package/build/services/hotmesh/index.d.ts +45 -0
- package/build/services/hotmesh/index.js +134 -0
- package/build/services/logger/index.d.ts +17 -0
- package/build/services/logger/index.js +73 -0
- package/build/services/mapper/index.d.ts +24 -0
- package/build/services/mapper/index.js +72 -0
- package/build/services/pipe/functions/array.d.ts +24 -0
- package/build/services/pipe/functions/array.js +69 -0
- package/build/services/pipe/functions/bitwise.d.ts +9 -0
- package/build/services/pipe/functions/bitwise.js +24 -0
- package/build/services/pipe/functions/conditional.d.ts +10 -0
- package/build/services/pipe/functions/conditional.js +27 -0
- package/build/services/pipe/functions/date.d.ts +57 -0
- package/build/services/pipe/functions/date.js +167 -0
- package/build/services/pipe/functions/index.d.ts +25 -0
- package/build/services/pipe/functions/index.js +26 -0
- package/build/services/pipe/functions/json.d.ts +5 -0
- package/build/services/pipe/functions/json.js +12 -0
- package/build/services/pipe/functions/math.d.ts +38 -0
- package/build/services/pipe/functions/math.js +111 -0
- package/build/services/pipe/functions/number.d.ts +25 -0
- package/build/services/pipe/functions/number.js +133 -0
- package/build/services/pipe/functions/object.d.ts +22 -0
- package/build/services/pipe/functions/object.js +63 -0
- package/build/services/pipe/functions/string.d.ts +23 -0
- package/build/services/pipe/functions/string.js +69 -0
- package/build/services/pipe/functions/symbol.d.ts +12 -0
- package/build/services/pipe/functions/symbol.js +33 -0
- package/build/services/pipe/functions/unary.d.ts +7 -0
- package/build/services/pipe/functions/unary.js +18 -0
- package/build/services/pipe/index.d.ts +30 -0
- package/build/services/pipe/index.js +128 -0
- package/build/services/quorum/index.d.ts +34 -0
- package/build/services/quorum/index.js +147 -0
- package/build/services/reporter/index.d.ts +47 -0
- package/build/services/reporter/index.js +330 -0
- package/build/services/serializer/index.d.ts +36 -0
- package/build/services/serializer/index.js +222 -0
- package/build/services/signaler/store.d.ts +15 -0
- package/build/services/signaler/store.js +53 -0
- package/build/services/signaler/stream.d.ts +43 -0
- package/build/services/signaler/stream.js +317 -0
- package/build/services/store/cache.d.ts +66 -0
- package/build/services/store/cache.js +127 -0
- package/build/services/store/clients/ioredis.d.ts +27 -0
- package/build/services/store/clients/ioredis.js +96 -0
- package/build/services/store/clients/redis.d.ts +29 -0
- package/build/services/store/clients/redis.js +143 -0
- package/build/services/store/index.d.ts +88 -0
- package/build/services/store/index.js +657 -0
- package/build/services/stream/clients/ioredis.d.ts +23 -0
- package/build/services/stream/clients/ioredis.js +115 -0
- package/build/services/stream/clients/redis.d.ts +23 -0
- package/build/services/stream/clients/redis.js +119 -0
- package/build/services/stream/index.d.ts +21 -0
- package/build/services/stream/index.js +9 -0
- package/build/services/sub/clients/ioredis.d.ts +20 -0
- package/build/services/sub/clients/ioredis.js +72 -0
- package/build/services/sub/clients/redis.d.ts +20 -0
- package/build/services/sub/clients/redis.js +63 -0
- package/build/services/sub/index.d.ts +18 -0
- package/build/services/sub/index.js +9 -0
- package/build/services/task/index.d.ts +18 -0
- package/build/services/task/index.js +73 -0
- package/build/services/telemetry/index.d.ts +49 -0
- package/build/services/telemetry/index.js +223 -0
- package/build/services/worker/index.d.ts +30 -0
- package/build/services/worker/index.js +105 -0
- package/build/types/activity.d.ts +86 -0
- package/build/types/activity.js +2 -0
- package/build/types/app.d.ts +16 -0
- package/build/types/app.js +2 -0
- package/build/types/async.d.ts +5 -0
- package/build/types/async.js +2 -0
- package/build/types/cache.d.ts +1 -0
- package/build/types/cache.js +2 -0
- package/build/types/collator.d.ts +8 -0
- package/build/types/collator.js +11 -0
- package/build/types/durable.d.ts +59 -0
- package/build/types/durable.js +2 -0
- package/build/types/hook.d.ts +31 -0
- package/build/types/hook.js +9 -0
- package/build/types/hotmesh.d.ts +82 -0
- package/build/types/hotmesh.js +2 -0
- package/build/types/index.d.ts +20 -0
- package/build/types/index.js +21 -0
- package/build/types/ioredisclient.d.ts +5 -0
- package/build/types/ioredisclient.js +5 -0
- package/build/types/job.d.ts +50 -0
- package/build/types/job.js +2 -0
- package/build/types/logger.d.ts +6 -0
- package/build/types/logger.js +2 -0
- package/build/types/map.d.ts +4 -0
- package/build/types/map.js +2 -0
- package/build/types/pipe.d.ts +4 -0
- package/build/types/pipe.js +2 -0
- package/build/types/quorum.d.ts +46 -0
- package/build/types/quorum.js +2 -0
- package/build/types/redis.d.ts +8 -0
- package/build/types/redis.js +2 -0
- package/build/types/redisclient.d.ts +25 -0
- package/build/types/redisclient.js +2 -0
- package/build/types/serializer.d.ts +33 -0
- package/build/types/serializer.js +2 -0
- package/build/types/stats.d.ts +83 -0
- package/build/types/stats.js +2 -0
- package/build/types/stream.d.ts +67 -0
- package/build/types/stream.js +25 -0
- package/build/types/telemetry.d.ts +1 -0
- package/build/types/telemetry.js +11 -0
- package/build/types/transition.d.ts +17 -0
- package/build/types/transition.js +2 -0
- package/index.ts +5 -0
- package/modules/errors.ts +55 -0
- package/modules/key.ts +129 -0
- package/modules/utils.ts +170 -0
- package/package.json +73 -0
- package/services/activities/activity.ts +473 -0
- package/services/activities/await.ts +172 -0
- package/services/activities/emit.ts +25 -0
- package/services/activities/index.ts +15 -0
- package/services/activities/iterate.ts +26 -0
- package/services/activities/trigger.ts +196 -0
- package/services/activities/worker.ts +190 -0
- package/services/collator/README.md +102 -0
- package/services/collator/index.ts +182 -0
- package/services/compiler/deployer.ts +432 -0
- package/services/compiler/index.ts +98 -0
- package/services/compiler/validator.ts +154 -0
- package/services/connector/clients/ioredis.ts +57 -0
- package/services/connector/clients/redis.ts +72 -0
- package/services/connector/index.ts +44 -0
- package/services/dimension/README.md +73 -0
- package/services/dimension/index.ts +39 -0
- package/services/durable/asyncLocalStorage.ts +3 -0
- package/services/durable/client.ts +116 -0
- package/services/durable/connection.ts +50 -0
- package/services/durable/factory.ts +124 -0
- package/services/durable/handle.ts +43 -0
- package/services/durable/index.ts +60 -0
- package/services/durable/native.ts +46 -0
- package/services/durable/worker.ts +254 -0
- package/services/durable/workflow.ts +136 -0
- package/services/engine/index.ts +615 -0
- package/services/hotmesh/index.ts +182 -0
- package/services/logger/index.ts +79 -0
- package/services/mapper/index.ts +84 -0
- package/services/pipe/functions/array.ts +87 -0
- package/services/pipe/functions/bitwise.ts +27 -0
- package/services/pipe/functions/conditional.ts +31 -0
- package/services/pipe/functions/date.ts +214 -0
- package/services/pipe/functions/index.ts +25 -0
- package/services/pipe/functions/json.ts +11 -0
- package/services/pipe/functions/math.ts +143 -0
- package/services/pipe/functions/number.ts +150 -0
- package/services/pipe/functions/object.ts +79 -0
- package/services/pipe/functions/string.ts +86 -0
- package/services/pipe/functions/symbol.ts +39 -0
- package/services/pipe/functions/unary.ts +19 -0
- package/services/pipe/index.ts +138 -0
- package/services/quorum/index.ts +200 -0
- package/services/reporter/index.ts +379 -0
- package/services/serializer/README.md +10 -0
- package/services/serializer/index.ts +243 -0
- package/services/signaler/store.ts +61 -0
- package/services/signaler/stream.ts +354 -0
- package/services/store/cache.ts +172 -0
- package/services/store/clients/ioredis.ts +123 -0
- package/services/store/clients/redis.ts +169 -0
- package/services/store/index.ts +757 -0
- package/services/stream/clients/ioredis.ts +148 -0
- package/services/stream/clients/redis.ts +144 -0
- package/services/stream/index.ts +57 -0
- package/services/sub/clients/ioredis.ts +83 -0
- package/services/sub/clients/redis.ts +74 -0
- package/services/sub/index.ts +25 -0
- package/services/task/index.ts +86 -0
- package/services/telemetry/index.ts +267 -0
- package/services/worker/index.ts +165 -0
- package/types/activity.ts +115 -0
- package/types/app.ts +20 -0
- package/types/async.ts +7 -0
- package/types/cache.ts +1 -0
- package/types/collator.ts +9 -0
- package/types/durable.ts +81 -0
- package/types/hook.ts +32 -0
- package/types/hotmesh.ts +102 -0
- package/types/index.ts +138 -0
- package/types/ioredisclient.ts +10 -0
- package/types/job.ts +59 -0
- package/types/logger.ts +6 -0
- package/types/map.ts +5 -0
- package/types/ms.d.ts +7 -0
- package/types/pipe.ts +7 -0
- package/types/quorum.ts +59 -0
- package/types/redis.ts +27 -0
- package/types/redisclient.ts +29 -0
- package/types/serializer.ts +38 -0
- package/types/stats.ts +100 -0
- package/types/stream.ts +75 -0
- package/types/telemetry.ts +15 -0
- package/types/transition.ts +20 -0
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { ArrayHandler } from './array';
|
|
2
|
+
import { BitwiseHandler } from './bitwise';
|
|
3
|
+
import { ConditionalHandler } from './conditional';
|
|
4
|
+
import { DateHandler } from './date';
|
|
5
|
+
import { JsonHandler } from './json';
|
|
6
|
+
import { MathHandler } from './math';
|
|
7
|
+
import { NumberHandler } from './number';
|
|
8
|
+
import { ObjectHandler } from './object';
|
|
9
|
+
import { StringHandler } from './string';
|
|
10
|
+
import { SymbolHandler } from './symbol';
|
|
11
|
+
import { UnaryHandler } from './unary';
|
|
12
|
+
|
|
13
|
+
export default {
|
|
14
|
+
array: new ArrayHandler(),
|
|
15
|
+
bitwise: new BitwiseHandler(),
|
|
16
|
+
conditional: new ConditionalHandler(),
|
|
17
|
+
date: new DateHandler(),
|
|
18
|
+
json: new JsonHandler(),
|
|
19
|
+
math: new MathHandler(),
|
|
20
|
+
number: new NumberHandler(),
|
|
21
|
+
object: new ObjectHandler(),
|
|
22
|
+
string: new StringHandler(),
|
|
23
|
+
symbol: new SymbolHandler(),
|
|
24
|
+
unary: new UnaryHandler(),
|
|
25
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
class JsonHandler {
|
|
2
|
+
stringify(value: any, replacer?: (this: any, key: string, value: any) => any | (number | string)[] | null, space?: string | number): string {
|
|
3
|
+
return JSON.stringify(value, replacer, space);
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
parse(text: string, reviver?: (this: any, key: string, value: any) => any): any {
|
|
7
|
+
return JSON.parse(text, reviver);
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export { JsonHandler };
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
class MathHandler {
|
|
2
|
+
abs(x: number): number {
|
|
3
|
+
return Math.abs(x);
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
acos(x: number): number {
|
|
7
|
+
return Math.acos(x);
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
acosh(x: number): number {
|
|
11
|
+
return Math.acosh(x);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
asin(x: number): number {
|
|
15
|
+
return Math.asin(x);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
asinh(x: number): number {
|
|
19
|
+
return Math.asinh(x);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
atan(x: number): number {
|
|
23
|
+
return Math.atan(x);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
atan2(y: number, x: number): number {
|
|
27
|
+
return Math.atan2(y, x);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
atanh(x: number): number {
|
|
31
|
+
return Math.atanh(x);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
cbrt(x: number): number {
|
|
35
|
+
return Math.cbrt(x);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
ceil(x: number): number {
|
|
39
|
+
return Math.ceil(x);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
clz32(x: number): number {
|
|
43
|
+
return Math.clz32(x);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
cos(x: number): number {
|
|
47
|
+
return Math.cos(x);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
cosh(x: number): number {
|
|
51
|
+
return Math.cosh(x);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
exp(x: number): number {
|
|
55
|
+
return Math.exp(x);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
expm1(x: number): number {
|
|
59
|
+
return Math.expm1(x);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
floor(x: number): number {
|
|
63
|
+
return Math.floor(x);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
fround(x: number): number {
|
|
67
|
+
return Math.fround(x);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
hypot(...values: number[]): number {
|
|
71
|
+
return Math.hypot(...values);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
imul(x: number, y: number): number {
|
|
75
|
+
return Math.imul(x, y);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
log(x: number): number {
|
|
79
|
+
return Math.log(x);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
log10(x: number): number {
|
|
83
|
+
return Math.log10(x);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
log1p(x: number): number {
|
|
87
|
+
return Math.log1p(x);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
log2(x: number): number {
|
|
91
|
+
return Math.log2(x);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
max(...values: number[]): number {
|
|
95
|
+
return Math.max(...values);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
min(...values: number[]): number {
|
|
99
|
+
return Math.min(...values);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
pow(x: number, y: number): number {
|
|
103
|
+
return Math.pow(x, y);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
random(): number {
|
|
107
|
+
return Math.random();
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
round(x: number): number {
|
|
111
|
+
return Math.round(x);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
sign(x: number): number {
|
|
115
|
+
return Math.sign(x);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
sin(x: number): number {
|
|
119
|
+
return Math.sin(x);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
sinh(x: number): number {
|
|
123
|
+
return Math.sinh(x);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
sqrt(x: number): number {
|
|
127
|
+
return Math.sqrt(x);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
tan(x: number): number {
|
|
131
|
+
return Math.tan(x);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
tanh(x: number): number {
|
|
135
|
+
return Math.tanh(x);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
trunc(x: number): number {
|
|
139
|
+
return Math.trunc(x);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
export { MathHandler };
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
class NumberHandler {
|
|
2
|
+
isFinite(input: number): boolean {
|
|
3
|
+
return Number.isFinite(input);
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
isEven(input: number): boolean {
|
|
7
|
+
return !isNaN(input) && input % 2 === 0;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
isOdd(input: number): boolean {
|
|
11
|
+
return !isNaN(input) && input % 2 !== 0;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
isInteger(input: number): boolean {
|
|
15
|
+
return Number.isInteger(input);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
isNaN(input: number): boolean {
|
|
19
|
+
return Number.isNaN(input);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
parseFloat(input: string): number {
|
|
23
|
+
return parseFloat(input);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
parseInt(input: string, radix?: number): number {
|
|
27
|
+
return parseInt(input, radix);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
toFixed(input: number, digits?: number): string {
|
|
31
|
+
return input.toFixed(digits);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
toExponential(input: number, fractionalDigits?: number): string {
|
|
35
|
+
return input.toExponential(fractionalDigits);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
toPrecision(input: number, precision?: number): string {
|
|
39
|
+
return input.toPrecision(precision);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
gte(input: number, compareValue: number): boolean {
|
|
43
|
+
return input >= compareValue;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
lte(input: number, compareValue: number): boolean {
|
|
47
|
+
return input <= compareValue;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
gt(input: number, compareValue: number): boolean {
|
|
51
|
+
return input > compareValue;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
lt(input: number, compareValue: number): boolean {
|
|
55
|
+
return input < compareValue;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
max(...values: number[]): number {
|
|
59
|
+
return Math.max(...values);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
min(...values: number[]): number {
|
|
63
|
+
return Math.min(...values);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
pow(base: number, exponent: number): number {
|
|
67
|
+
return Math.pow(base, exponent);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
round(input: number): number {
|
|
71
|
+
return Math.round(input);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
add(...operands: (number | number[])[]): number {
|
|
75
|
+
// @ts-ignore
|
|
76
|
+
return operands.reduce((a: number, b: number | number[]) => {
|
|
77
|
+
if (Array.isArray(b)) {
|
|
78
|
+
return a + this.add(...b);
|
|
79
|
+
} else {
|
|
80
|
+
return a + b;
|
|
81
|
+
}
|
|
82
|
+
}, 0);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
subtract(...operands: (number | number[])[]): number {
|
|
86
|
+
if (operands.length === 0) {
|
|
87
|
+
throw new Error('At least one operand is required.');
|
|
88
|
+
}
|
|
89
|
+
let flatOperands: number[] = [];
|
|
90
|
+
operands.forEach((op: number | number[]) => {
|
|
91
|
+
if (Array.isArray(op)) {
|
|
92
|
+
flatOperands = [...flatOperands, ...op];
|
|
93
|
+
} else {
|
|
94
|
+
flatOperands.push(op);
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
if (flatOperands.length === 0) {
|
|
98
|
+
throw new Error('At least one operand is required after flattening.');
|
|
99
|
+
}
|
|
100
|
+
const result = flatOperands.reduce((a: number, b: number, i: number) => {
|
|
101
|
+
return i === 0 ? a : a - b;
|
|
102
|
+
});
|
|
103
|
+
return result;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
multiply(...operands: (number | number[])[]): number {
|
|
108
|
+
if (operands.length === 0) {
|
|
109
|
+
throw new Error('At least one operand is required.');
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
// @ts-ignore
|
|
113
|
+
return operands.reduce((a: number, b: number | number[]) => {
|
|
114
|
+
if (Array.isArray(b)) {
|
|
115
|
+
return a * this.multiply(...b);
|
|
116
|
+
} else {
|
|
117
|
+
return a * b;
|
|
118
|
+
}
|
|
119
|
+
}, 1);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
divide(...operands: (number | number[])[]): number {
|
|
123
|
+
if (operands.length === 0) {
|
|
124
|
+
throw new Error('At least one operand is required.');
|
|
125
|
+
}
|
|
126
|
+
let flatOperands: number[] = [];
|
|
127
|
+
operands.forEach((op: number | number[]) => {
|
|
128
|
+
if (Array.isArray(op)) {
|
|
129
|
+
flatOperands = [...flatOperands, ...op];
|
|
130
|
+
} else {
|
|
131
|
+
flatOperands.push(op);
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
if (flatOperands.length === 0) {
|
|
135
|
+
throw new Error('At least one operand is required after flattening.');
|
|
136
|
+
}
|
|
137
|
+
const result = flatOperands.reduce((a: number, b: number, i: number) => {
|
|
138
|
+
if (b === 0) {
|
|
139
|
+
return NaN;
|
|
140
|
+
}
|
|
141
|
+
return i === 0 ? a : a / b;
|
|
142
|
+
});
|
|
143
|
+
if (isNaN(result)) {
|
|
144
|
+
return NaN;
|
|
145
|
+
}
|
|
146
|
+
return result;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
export { NumberHandler };
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
class ObjectHandler {
|
|
2
|
+
keys(obj: object): string[] {
|
|
3
|
+
return Object.keys(obj);
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
values(obj: object): any[] {
|
|
7
|
+
return Object.values(obj);
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
entries(obj: object): [string, any][] {
|
|
11
|
+
return Object.entries(obj);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
fromEntries(iterable: Iterable<[string, any]>): object {
|
|
15
|
+
return Object.fromEntries(iterable);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
assign(target: object, ...sources: object[]): object {
|
|
19
|
+
return Object.assign(target, ...sources);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
getOwnPropertyNames(obj: object): string[] {
|
|
23
|
+
return Object.getOwnPropertyNames(obj);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
getOwnPropertySymbols(obj: object): symbol[] {
|
|
27
|
+
return Object.getOwnPropertySymbols(obj);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
getOwnPropertyDescriptor(obj: object, prop: string | symbol): PropertyDescriptor | undefined {
|
|
31
|
+
return Object.getOwnPropertyDescriptor(obj, prop);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
defineProperty(obj: object, prop: string | symbol, descriptor: PropertyDescriptor): object {
|
|
35
|
+
return Object.defineProperty(obj, prop, descriptor);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
defineProperties(obj: object, props: PropertyDescriptorMap): object {
|
|
39
|
+
return Object.defineProperties(obj, props);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
freeze(obj: object): object {
|
|
43
|
+
return Object.freeze(obj);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
isFrozen(obj: object): boolean {
|
|
47
|
+
return Object.isFrozen(obj);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
seal(obj: object): object {
|
|
51
|
+
return Object.seal(obj);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
isSealed(obj: object): boolean {
|
|
55
|
+
return Object.isSealed(obj);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
preventExtensions(obj: object): object {
|
|
59
|
+
return Object.preventExtensions(obj);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
isExtensible(obj: object): boolean {
|
|
63
|
+
return Object.isExtensible(obj);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
hasOwnProperty(obj: object, prop: string | symbol): boolean {
|
|
67
|
+
return Object.prototype.hasOwnProperty.call(obj, prop);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
isPrototypeOf(obj: object, prototypeObj: object): boolean {
|
|
71
|
+
return Object.prototype.isPrototypeOf.call(obj, prototypeObj);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
propertyIsEnumerable(obj: object, prop: string | symbol): boolean {
|
|
75
|
+
return Object.prototype.propertyIsEnumerable.call(obj, prop);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export { ObjectHandler };
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
class StringHandler {
|
|
2
|
+
split(input: string, delimiter: string): string[] {
|
|
3
|
+
return input.split(delimiter);
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
charAt(input: string, index: number): string {
|
|
7
|
+
return input.charAt(index);
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
concat(...strings: string[]): string {
|
|
11
|
+
return strings.join('');
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
includes(input: string, searchString: string, position?: number): boolean {
|
|
15
|
+
return input.includes(searchString, position);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
indexOf(input: string, searchString: string, fromIndex?: number): number {
|
|
19
|
+
return input.indexOf(searchString, fromIndex);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
lastIndexOf(input: string, searchString: string, fromIndex?: number): number {
|
|
23
|
+
return input.lastIndexOf(searchString, fromIndex);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
slice(input: string, start?: number, end?: number): string {
|
|
27
|
+
return input.slice(start, end);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
toLowerCase(input: string): string {
|
|
31
|
+
return input.toLowerCase();
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
toUpperCase(input: string): string {
|
|
35
|
+
return input.toUpperCase();
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
trim(input: string): string {
|
|
39
|
+
return input.trim();
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
trimStart(input: string): string {
|
|
43
|
+
return input.trimStart();
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
trimEnd(input: string): string {
|
|
47
|
+
return input.trimEnd();
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
padStart(input: string, maxLength: number, padString?: string): string {
|
|
51
|
+
return input.padStart(maxLength, padString);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
padEnd(input: string, maxLength: number, padString?: string): string {
|
|
55
|
+
return input.padEnd(maxLength, padString);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
replace(input: string, searchValue: string | RegExp, replaceValue: string): string {
|
|
59
|
+
return input.replace(searchValue, replaceValue);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
search(input: string, regexp: RegExp): number {
|
|
63
|
+
return input.search(regexp);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
substring(input: string, start: number, end?: number): string {
|
|
67
|
+
return input.substring(start, end);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
startsWith(str: string, searchString: string, position?: number): boolean {
|
|
71
|
+
return str.startsWith(searchString, position);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
endsWith(str: string, searchString: string, length?: number): boolean {
|
|
75
|
+
return str.endsWith(searchString, length);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
repeat(str: string, count: number): string {
|
|
79
|
+
if (count < 0 || count === Infinity) {
|
|
80
|
+
throw new RangeError('Invalid repeat count. Must be a positive finite number.');
|
|
81
|
+
}
|
|
82
|
+
return str.repeat(count);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
export { StringHandler };
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
class SymbolHandler {
|
|
2
|
+
null(): null {
|
|
3
|
+
return null;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
undefined(): undefined {
|
|
7
|
+
return undefined;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
whitespace(): string {
|
|
11
|
+
return ' ';
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
object(): object {
|
|
15
|
+
return {};
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
array(): any[] {
|
|
19
|
+
return [];
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
posInfinity(): number {
|
|
23
|
+
return Infinity;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
negInfinity(): number {
|
|
27
|
+
return -Infinity;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
NaN(): number {
|
|
31
|
+
return NaN;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
date(): Date {
|
|
35
|
+
return new Date();
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export { SymbolHandler };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
class UnaryHandler {
|
|
2
|
+
not(value: boolean): boolean {
|
|
3
|
+
return !value;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
positive(value: number): number {
|
|
7
|
+
return +value;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
negative(value: number): number {
|
|
11
|
+
return -value;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
bitwise_not(value: number): number {
|
|
15
|
+
return ~value;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export { UnaryHandler };
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import FUNCTIONS from './functions'
|
|
2
|
+
import { JobState, JobData, JobsData } from '../../types/job';
|
|
3
|
+
import { PipeItem, PipeItems, Pipe as PipeType } from '../../types/pipe';
|
|
4
|
+
|
|
5
|
+
class Pipe {
|
|
6
|
+
rules: PipeType;
|
|
7
|
+
jobData: JobData;
|
|
8
|
+
|
|
9
|
+
constructor(rules: PipeType, jobData: JobData) {
|
|
10
|
+
this.rules = rules;
|
|
11
|
+
this.jobData = jobData;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
private isPipeType(currentRow: PipeItem[]|PipeType): currentRow is PipeType {
|
|
15
|
+
return !Array.isArray(currentRow) && '@pipe' in currentRow;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
static isPipeObject(obj: { [key: string]: unknown }|PipeItem): boolean {
|
|
19
|
+
return typeof obj === 'object' && obj !== null && !Array.isArray(obj) && '@pipe' in obj;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
static resolve(unresolved: { [key: string]: unknown }|PipeItem, context: Partial<JobState>): any {
|
|
23
|
+
let pipe: Pipe;
|
|
24
|
+
if (Pipe.isPipeObject(unresolved)) {
|
|
25
|
+
pipe = new Pipe(unresolved['@pipe'], context);
|
|
26
|
+
} else {
|
|
27
|
+
pipe = new Pipe([[unresolved as unknown as PipeItem]], context);
|
|
28
|
+
}
|
|
29
|
+
return pipe.process();
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* loop through each PipeItem row in this Pipe, resolving and transforming line by line
|
|
34
|
+
* @returns {any} the result of the pipe
|
|
35
|
+
*/
|
|
36
|
+
process(): any {
|
|
37
|
+
let resolved = this.processCells(this.rules[0] as PipeItem[]);
|
|
38
|
+
const len = this.rules.length;
|
|
39
|
+
for (let i = 1; i < len; i++) {
|
|
40
|
+
resolved = this.processRow(this.rules[i], resolved, []);
|
|
41
|
+
}
|
|
42
|
+
return resolved[0];
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
private processRow(currentRow: PipeItem[]|PipeType, resolvedPriorRow: unknown[]|null, subPipeQueue: unknown[]): PipeItem[] {
|
|
46
|
+
if (this.isPipeType(currentRow)) {
|
|
47
|
+
//currentRow is a recursive subPipe
|
|
48
|
+
const subPipe = new Pipe(currentRow['@pipe'], this.jobData);
|
|
49
|
+
subPipeQueue.push(subPipe.process());
|
|
50
|
+
//return prior row as if nothing happened
|
|
51
|
+
return resolvedPriorRow as PipeItem[];
|
|
52
|
+
} else {
|
|
53
|
+
if (subPipeQueue.length > 0) {
|
|
54
|
+
//if items in subPipeQueue, flush and use as resolvedPriorRow
|
|
55
|
+
resolvedPriorRow = [...subPipeQueue];
|
|
56
|
+
subPipeQueue.length = 0;
|
|
57
|
+
} else if (!resolvedPriorRow) {
|
|
58
|
+
//if no prior row, use current row as prior row
|
|
59
|
+
return [].concat(this.processCells([...currentRow]));
|
|
60
|
+
} else {
|
|
61
|
+
const [functionName, ...params] = currentRow;
|
|
62
|
+
//use resolved values from prior row (n - 1) as input params to cell 1 function
|
|
63
|
+
const resolvedValue = Pipe.resolveFunction(functionName as string)(...resolvedPriorRow);
|
|
64
|
+
//resolve remaining cells in row and return concatenated with resolvedValue
|
|
65
|
+
return [resolvedValue].concat(this.processCells([...params]));
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
static resolveFunction(functionName: string) {
|
|
71
|
+
let [prefix, suffix] = functionName.split('.');
|
|
72
|
+
prefix = prefix.substring(2);
|
|
73
|
+
suffix = suffix.substring(0, suffix.length - 1);
|
|
74
|
+
const domain = FUNCTIONS[prefix];
|
|
75
|
+
if (!domain) {
|
|
76
|
+
throw new Error(`Unknown domain name [${functionName}]: ${prefix}`);
|
|
77
|
+
}
|
|
78
|
+
if (!domain[suffix]) {
|
|
79
|
+
throw new Error(`Unknown domain function [${functionName}]: ${prefix}.${suffix}`);
|
|
80
|
+
}
|
|
81
|
+
return domain[suffix];
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
processCells(cells: PipeItems): unknown[] {
|
|
85
|
+
const resolved = [];
|
|
86
|
+
for (const currentCell of cells) {
|
|
87
|
+
resolved.push(this.resolveCellValue(currentCell));
|
|
88
|
+
}
|
|
89
|
+
return resolved;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
private isFunction(currentCell: PipeItem): boolean {
|
|
93
|
+
return typeof currentCell === 'string' && currentCell.startsWith('{@') && currentCell.endsWith('}');
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
private isMappable(currentCell: PipeItem): boolean {
|
|
97
|
+
return typeof currentCell === 'string' && currentCell.startsWith('{') && currentCell.endsWith('}');
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
resolveCellValue(currentCell: PipeItem): unknown {
|
|
101
|
+
if (this.isFunction(currentCell)) {
|
|
102
|
+
const fn = Pipe.resolveFunction(currentCell as string);
|
|
103
|
+
return fn.call();
|
|
104
|
+
} else if (this.isMappable(currentCell)) {
|
|
105
|
+
return this.resolveMappableValue(currentCell as string);
|
|
106
|
+
} else {
|
|
107
|
+
return currentCell;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
private getNestedProperty(obj: JobsData|unknown, path: string): any {
|
|
112
|
+
const pathParts = path.split('.');
|
|
113
|
+
let current = obj;
|
|
114
|
+
for (const part of pathParts) {
|
|
115
|
+
if (current === null || typeof current !== 'object' || !current.hasOwnProperty(part)) {
|
|
116
|
+
return undefined;
|
|
117
|
+
}
|
|
118
|
+
current = current[part];
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
return current;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
resolveMappableValue(currentCell: string): unknown {
|
|
125
|
+
const term = this.resolveMapTerm(currentCell);
|
|
126
|
+
return this.getNestedProperty(this.jobData, term);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
resolveFunctionTerm(currentCell: string): string {
|
|
130
|
+
return currentCell.substring(2, currentCell.length - 1);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
resolveMapTerm(currentCell: string): string {
|
|
134
|
+
return currentCell.substring(1, currentCell.length - 1);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
export { Pipe };
|