react-native-divkit 0.1.0-alpha.1 → 0.1.0-alpha.2
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/README.md +135 -137
- package/dist/DivKit.d.ts.map +1 -1
- package/dist/DivKit.js +24 -7
- package/dist/DivKit.js.map +1 -1
- package/dist/actions/array.d.ts.map +1 -1
- package/dist/actions/array.js +1 -1
- package/dist/actions/array.js.map +1 -1
- package/dist/actions/copyToClipboard.d.ts.map +1 -1
- package/dist/actions/copyToClipboard.js +2 -1
- package/dist/actions/copyToClipboard.js.map +1 -1
- package/dist/actions/dict.d.ts.map +1 -1
- package/dist/actions/dict.js.map +1 -1
- package/dist/actions/updateStructure.d.ts.map +1 -1
- package/dist/actions/updateStructure.js.map +1 -1
- package/dist/components/container/DivContainer.d.ts.map +1 -1
- package/dist/components/container/DivContainer.js +3 -5
- package/dist/components/container/DivContainer.js.map +1 -1
- package/dist/components/image/DivImage.d.ts.map +1 -1
- package/dist/components/image/DivImage.js +1 -6
- package/dist/components/image/DivImage.js.map +1 -1
- package/dist/components/state/DivState.d.ts.map +1 -1
- package/dist/components/state/DivState.js +3 -5
- package/dist/components/state/DivState.js.map +1 -1
- package/dist/components/text/DivText.d.ts.map +1 -1
- package/dist/components/text/DivText.js +4 -4
- package/dist/components/text/DivText.js.map +1 -1
- package/dist/components/utilities/Outer.d.ts.map +1 -1
- package/dist/components/utilities/Outer.js +6 -5
- package/dist/components/utilities/Outer.js.map +1 -1
- package/dist/context/index.d.ts.map +1 -1
- package/dist/context/index.js.map +1 -1
- package/dist/expressions/eval.d.ts.map +1 -1
- package/dist/expressions/eval.js +19 -11
- package/dist/expressions/eval.js.map +1 -1
- package/dist/expressions/funcs/array.d.ts.map +1 -1
- package/dist/expressions/funcs/array.js +72 -168
- package/dist/expressions/funcs/array.js.map +1 -1
- package/dist/expressions/funcs/colors.d.ts.map +1 -1
- package/dist/expressions/funcs/colors.js.map +1 -1
- package/dist/expressions/funcs/customFuncs.d.ts.map +1 -1
- package/dist/expressions/funcs/customFuncs.js +6 -4
- package/dist/expressions/funcs/customFuncs.js.map +1 -1
- package/dist/expressions/funcs/datetime.d.ts.map +1 -1
- package/dist/expressions/funcs/datetime.js +1 -1
- package/dist/expressions/funcs/datetime.js.map +1 -1
- package/dist/expressions/funcs/dict.d.ts.map +1 -1
- package/dist/expressions/funcs/dict.js.map +1 -1
- package/dist/expressions/funcs/funcs.d.ts.map +1 -1
- package/dist/expressions/funcs/funcs.js +21 -13
- package/dist/expressions/funcs/funcs.js.map +1 -1
- package/dist/expressions/funcs/math.d.ts.map +1 -1
- package/dist/expressions/funcs/math.js +40 -20
- package/dist/expressions/funcs/math.js.map +1 -1
- package/dist/expressions/funcs/std.d.ts.map +1 -1
- package/dist/expressions/funcs/std.js +4 -4
- package/dist/expressions/funcs/std.js.map +1 -1
- package/dist/expressions/funcs/strings.d.ts.map +1 -1
- package/dist/expressions/funcs/strings.js +1 -2
- package/dist/expressions/funcs/strings.js.map +1 -1
- package/dist/expressions/funcs/trigonometry.js +2 -2
- package/dist/expressions/funcs/trigonometry.js.map +1 -1
- package/dist/expressions/json.d.ts +2 -2
- package/dist/expressions/json.d.ts.map +1 -1
- package/dist/expressions/json.js +6 -4
- package/dist/expressions/json.js.map +1 -1
- package/dist/expressions/utils.d.ts.map +1 -1
- package/dist/expressions/utils.js +9 -10
- package/dist/expressions/utils.js.map +1 -1
- package/dist/expressions/variable.d.ts.map +1 -1
- package/dist/expressions/variable.js +3 -7
- package/dist/expressions/variable.js.map +1 -1
- package/dist/expressions/walk.d.ts.map +1 -1
- package/dist/expressions/walk.js.map +1 -1
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/useAction.d.ts.map +1 -1
- package/dist/hooks/useAction.js.map +1 -1
- package/dist/hooks/useDerivedFromVars.d.ts.map +1 -1
- package/dist/hooks/useDerivedFromVars.js.map +1 -1
- package/dist/hooks/useVariable.d.ts.map +1 -1
- package/dist/hooks/useVariable.js +4 -4
- package/dist/hooks/useVariable.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/stores/createObservable.d.ts.map +1 -1
- package/dist/stores/createObservable.js.map +1 -1
- package/dist/utils/applyTemplate.d.ts +2 -2
- package/dist/utils/applyTemplate.d.ts.map +1 -1
- package/dist/utils/applyTemplate.js +13 -13
- package/dist/utils/applyTemplate.js.map +1 -1
- package/dist/utils/correctColor.d.ts.map +1 -1
- package/dist/utils/correctColor.js +8 -6
- package/dist/utils/correctColor.js.map +1 -1
- package/dist/utils/formatDate.d.ts.map +1 -1
- package/dist/utils/formatDate.js +7 -10
- package/dist/utils/formatDate.js.map +1 -1
- package/dist/utils/wrapError.d.ts.map +1 -1
- package/dist/utils/wrapError.js.map +1 -1
- package/package.json +2 -2
- package/src/DivKit.tsx +258 -220
- package/src/actions/array.ts +91 -64
- package/src/actions/copyToClipboard.ts +28 -19
- package/src/actions/dict.ts +36 -26
- package/src/actions/updateStructure.ts +86 -61
- package/src/components/README.md +38 -18
- package/src/components/container/DivContainer.tsx +4 -14
- package/src/components/image/DivImage.tsx +1 -11
- package/src/components/state/DivState.tsx +3 -9
- package/src/components/text/DivText.tsx +8 -20
- package/src/components/utilities/Outer.tsx +9 -19
- package/src/components/utilities/README.md +33 -29
- package/src/context/index.ts +2 -11
- package/src/expressions/ast.d.ts +16 -9
- package/src/expressions/eval.ts +82 -37
- package/src/expressions/funcs/array.ts +129 -209
- package/src/expressions/funcs/colors.ts +1 -3
- package/src/expressions/funcs/customFuncs.ts +6 -4
- package/src/expressions/funcs/datetime.ts +10 -3
- package/src/expressions/funcs/dict.ts +16 -2
- package/src/expressions/funcs/funcs.ts +75 -89
- package/src/expressions/funcs/math.ts +103 -43
- package/src/expressions/funcs/std.ts +4 -7
- package/src/expressions/funcs/strings.ts +9 -25
- package/src/expressions/funcs/trigonometry.ts +2 -2
- package/src/expressions/json.ts +60 -53
- package/src/expressions/utils.ts +24 -22
- package/src/expressions/variable.ts +5 -21
- package/src/expressions/walk.ts +6 -3
- package/src/hooks/README.md +61 -53
- package/src/hooks/index.ts +3 -18
- package/src/hooks/useAction.ts +1 -3
- package/src/hooks/useDerivedFromVars.ts +3 -13
- package/src/hooks/useVariable.ts +7 -17
- package/src/index.ts +10 -48
- package/src/stores/createObservable.ts +35 -35
- package/src/types/alignment.d.ts +15 -6
- package/src/types/background.d.ts +6 -2
- package/src/types/base.d.ts +41 -9
- package/src/types/componentContext.d.ts +27 -22
- package/src/types/container.d.ts +1 -4
- package/src/types/text.d.ts +1 -1
- package/src/utils/applyTemplate.ts +103 -109
- package/src/utils/correctColor.ts +9 -8
- package/src/utils/formatDate.ts +175 -86
- package/src/utils/wrapError.ts +7 -4
|
@@ -1,6 +1,17 @@
|
|
|
1
1
|
import { toBigInt } from '../bigint';
|
|
2
2
|
import { ARRAY, BOOLEAN, COLOR, DICT, INTEGER, NUMBER, STRING, URL } from '../const';
|
|
3
|
-
import type {
|
|
3
|
+
import type {
|
|
4
|
+
ArrayValue,
|
|
5
|
+
BooleanValue,
|
|
6
|
+
DictValue,
|
|
7
|
+
EvalContext,
|
|
8
|
+
EvalTypes,
|
|
9
|
+
EvalTypesWithoutDatetime,
|
|
10
|
+
EvalValue,
|
|
11
|
+
IntegerValue,
|
|
12
|
+
NumberValue,
|
|
13
|
+
StringValue
|
|
14
|
+
} from '../eval';
|
|
4
15
|
import { checkUrl, convertJsValueToDivKit, transformColorValue } from '../utils';
|
|
5
16
|
import { registerFunc, registerMethod } from './funcs';
|
|
6
17
|
|
|
@@ -27,7 +38,10 @@ function dictGetter(evalType: EvalTypesWithoutDatetime) {
|
|
|
27
38
|
throw new Error('Non empty argument list is required.');
|
|
28
39
|
}
|
|
29
40
|
|
|
30
|
-
const val = getProp(
|
|
41
|
+
const val = getProp(
|
|
42
|
+
dict.value,
|
|
43
|
+
path.map(it => it.value)
|
|
44
|
+
);
|
|
31
45
|
|
|
32
46
|
return convertJsValueToDivKit(ctx, val, evalType);
|
|
33
47
|
};
|
|
@@ -3,10 +3,12 @@ import type { EvalTypes, EvalValue } from '../eval';
|
|
|
3
3
|
import type { EvalContext } from '../eval';
|
|
4
4
|
import { integerToNumber } from '../utils';
|
|
5
5
|
|
|
6
|
-
export type FuncArg =
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
export type FuncArg =
|
|
7
|
+
| EvalTypes
|
|
8
|
+
| {
|
|
9
|
+
type: EvalTypes;
|
|
10
|
+
isVararg?: boolean;
|
|
11
|
+
};
|
|
10
12
|
|
|
11
13
|
export interface Func {
|
|
12
14
|
name?: string;
|
|
@@ -19,27 +21,31 @@ export const funcByArgs: Map<string, Func> = new Map();
|
|
|
19
21
|
export const methods: Map<string, Func[]> = new Map();
|
|
20
22
|
export const methodByArgs: Map<string, Func> = new Map();
|
|
21
23
|
|
|
22
|
-
export type FuncMatchError =
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
24
|
+
export type FuncMatchError =
|
|
25
|
+
| {
|
|
26
|
+
type: 'mismatch';
|
|
27
|
+
expected: EvalTypes;
|
|
28
|
+
found: EvalTypes;
|
|
29
|
+
def: Func;
|
|
30
|
+
hasOverloads: boolean;
|
|
31
|
+
}
|
|
32
|
+
| {
|
|
33
|
+
type: 'few';
|
|
34
|
+
expected: number;
|
|
35
|
+
found: number;
|
|
36
|
+
def: Func;
|
|
37
|
+
hasOverloads: boolean;
|
|
38
|
+
}
|
|
39
|
+
| {
|
|
40
|
+
type: 'many';
|
|
41
|
+
expected: number;
|
|
42
|
+
found: number;
|
|
43
|
+
def: Func;
|
|
44
|
+
hasOverloads: boolean;
|
|
45
|
+
}
|
|
46
|
+
| {
|
|
47
|
+
type: 'missing';
|
|
48
|
+
};
|
|
43
49
|
|
|
44
50
|
export interface FuncMatchFound {
|
|
45
51
|
func: Func;
|
|
@@ -51,35 +57,19 @@ export type FuncMatch = FuncMatchFound | FuncMatchError;
|
|
|
51
57
|
// no args
|
|
52
58
|
export function registerFunc(name: string, args: [], cb: (ctx?: EvalContext) => EvalValue): void;
|
|
53
59
|
// one specific arg
|
|
54
|
-
export function registerFunc<
|
|
55
|
-
A0 extends EvalTypes
|
|
56
|
-
>(
|
|
60
|
+
export function registerFunc<A0 extends EvalTypes>(
|
|
57
61
|
name: string,
|
|
58
62
|
args: [A0],
|
|
59
|
-
cb: (
|
|
60
|
-
ctx: EvalContext,
|
|
61
|
-
arg0: Extract<EvalValue, { type: A0 }>
|
|
62
|
-
) => EvalValue
|
|
63
|
+
cb: (ctx: EvalContext, arg0: Extract<EvalValue, { type: A0 }>) => EvalValue
|
|
63
64
|
): void;
|
|
64
65
|
// two specific args
|
|
65
|
-
export function registerFunc<
|
|
66
|
-
A0 extends EvalTypes,
|
|
67
|
-
A1 extends EvalTypes
|
|
68
|
-
>(
|
|
66
|
+
export function registerFunc<A0 extends EvalTypes, A1 extends EvalTypes>(
|
|
69
67
|
name: string,
|
|
70
68
|
args: [A0, A1],
|
|
71
|
-
cb: (
|
|
72
|
-
ctx: EvalContext,
|
|
73
|
-
arg0: Extract<EvalValue, { type: A0 }>,
|
|
74
|
-
arg1: Extract<EvalValue, { type: A1 }>
|
|
75
|
-
) => EvalValue
|
|
69
|
+
cb: (ctx: EvalContext, arg0: Extract<EvalValue, { type: A0 }>, arg1: Extract<EvalValue, { type: A1 }>) => EvalValue
|
|
76
70
|
): void;
|
|
77
71
|
// three specific args
|
|
78
|
-
export function registerFunc<
|
|
79
|
-
A0 extends EvalTypes,
|
|
80
|
-
A1 extends EvalTypes,
|
|
81
|
-
A2 extends EvalTypes
|
|
82
|
-
>(
|
|
72
|
+
export function registerFunc<A0 extends EvalTypes, A1 extends EvalTypes, A2 extends EvalTypes>(
|
|
83
73
|
name: string,
|
|
84
74
|
args: [A0, A1, A2],
|
|
85
75
|
cb: (
|
|
@@ -90,11 +80,7 @@ export function registerFunc<
|
|
|
90
80
|
) => EvalValue
|
|
91
81
|
): void;
|
|
92
82
|
// any args
|
|
93
|
-
export function registerFunc(
|
|
94
|
-
name: string,
|
|
95
|
-
args: FuncArg[],
|
|
96
|
-
cb: (ctx: EvalContext, ...args: any[]) => EvalValue
|
|
97
|
-
): void;
|
|
83
|
+
export function registerFunc(name: string, args: FuncArg[], cb: (ctx: EvalContext, ...args: any[]) => EvalValue): void;
|
|
98
84
|
|
|
99
85
|
export function registerFunc(
|
|
100
86
|
name: string,
|
|
@@ -113,12 +99,17 @@ export function registerFunc(
|
|
|
113
99
|
}
|
|
114
100
|
arr.push(desc);
|
|
115
101
|
|
|
116
|
-
const funcKey =
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
102
|
+
const funcKey =
|
|
103
|
+
name +
|
|
104
|
+
':' +
|
|
105
|
+
args
|
|
106
|
+
.map(it => {
|
|
107
|
+
if (typeof it === 'object') {
|
|
108
|
+
return it.type;
|
|
109
|
+
}
|
|
110
|
+
return it;
|
|
111
|
+
})
|
|
112
|
+
.join('#');
|
|
122
113
|
|
|
123
114
|
funcByArgs.set(funcKey, desc);
|
|
124
115
|
}
|
|
@@ -126,35 +117,19 @@ export function registerFunc(
|
|
|
126
117
|
// no args
|
|
127
118
|
export function registerMethod(name: string, args: [], cb: (ctx?: EvalContext) => EvalValue): void;
|
|
128
119
|
// one specific arg
|
|
129
|
-
export function registerMethod<
|
|
130
|
-
A0 extends EvalTypes
|
|
131
|
-
>(
|
|
120
|
+
export function registerMethod<A0 extends EvalTypes>(
|
|
132
121
|
name: string,
|
|
133
122
|
args: [A0],
|
|
134
|
-
cb: (
|
|
135
|
-
ctx: EvalContext,
|
|
136
|
-
arg0: Extract<EvalValue, { type: A0 }>
|
|
137
|
-
) => EvalValue
|
|
123
|
+
cb: (ctx: EvalContext, arg0: Extract<EvalValue, { type: A0 }>) => EvalValue
|
|
138
124
|
): void;
|
|
139
125
|
// two specific args
|
|
140
|
-
export function registerMethod<
|
|
141
|
-
A0 extends EvalTypes,
|
|
142
|
-
A1 extends EvalTypes
|
|
143
|
-
>(
|
|
126
|
+
export function registerMethod<A0 extends EvalTypes, A1 extends EvalTypes>(
|
|
144
127
|
name: string,
|
|
145
128
|
args: [A0, A1],
|
|
146
|
-
cb: (
|
|
147
|
-
ctx: EvalContext,
|
|
148
|
-
arg0: Extract<EvalValue, { type: A0 }>,
|
|
149
|
-
arg1: Extract<EvalValue, { type: A1 }>
|
|
150
|
-
) => EvalValue
|
|
129
|
+
cb: (ctx: EvalContext, arg0: Extract<EvalValue, { type: A0 }>, arg1: Extract<EvalValue, { type: A1 }>) => EvalValue
|
|
151
130
|
): void;
|
|
152
131
|
// three specific args
|
|
153
|
-
export function registerMethod<
|
|
154
|
-
A0 extends EvalTypes,
|
|
155
|
-
A1 extends EvalTypes,
|
|
156
|
-
A2 extends EvalTypes
|
|
157
|
-
>(
|
|
132
|
+
export function registerMethod<A0 extends EvalTypes, A1 extends EvalTypes, A2 extends EvalTypes>(
|
|
158
133
|
name: string,
|
|
159
134
|
args: [A0, A1, A2],
|
|
160
135
|
cb: (
|
|
@@ -188,20 +163,31 @@ export function registerMethod(
|
|
|
188
163
|
}
|
|
189
164
|
arr.push(desc);
|
|
190
165
|
|
|
191
|
-
const funcKey =
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
166
|
+
const funcKey =
|
|
167
|
+
name +
|
|
168
|
+
':' +
|
|
169
|
+
args
|
|
170
|
+
.map(it => {
|
|
171
|
+
if (typeof it === 'object') {
|
|
172
|
+
return it.type;
|
|
173
|
+
}
|
|
174
|
+
return it;
|
|
175
|
+
})
|
|
176
|
+
.join('#');
|
|
197
177
|
|
|
198
178
|
methodByArgs.set(funcKey, desc);
|
|
199
179
|
}
|
|
200
180
|
|
|
201
|
-
function matchFuncArgs(
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
181
|
+
function matchFuncArgs(
|
|
182
|
+
func: Func,
|
|
183
|
+
args: EvalValue[],
|
|
184
|
+
hasOverloads: boolean
|
|
185
|
+
):
|
|
186
|
+
| {
|
|
187
|
+
type: 'match';
|
|
188
|
+
conversions: number;
|
|
189
|
+
}
|
|
190
|
+
| FuncMatchError {
|
|
205
191
|
const minArgs = func.args.length;
|
|
206
192
|
let maxArgs = func.args.length;
|
|
207
193
|
let conversions = 0;
|
|
@@ -319,5 +305,5 @@ export function convertArgs(func: Func, args: EvalValue[]): EvalValue[] {
|
|
|
319
305
|
}
|
|
320
306
|
|
|
321
307
|
export function funcToKey(funcName: string, func: Func): string {
|
|
322
|
-
return funcName + ':' + func.args.map(arg => typeof arg === 'string' ? arg : arg.type).join('#');
|
|
308
|
+
return funcName + ':' + func.args.map(arg => (typeof arg === 'string' ? arg : arg.type)).join('#');
|
|
323
309
|
}
|
|
@@ -329,53 +329,113 @@ export function registerMath(): void {
|
|
|
329
329
|
registerFunc('mod', [INTEGER, INTEGER], modInteger);
|
|
330
330
|
registerFunc('mod', [NUMBER, NUMBER], modNumber);
|
|
331
331
|
|
|
332
|
-
registerFunc(
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
332
|
+
registerFunc(
|
|
333
|
+
'mul',
|
|
334
|
+
[
|
|
335
|
+
{
|
|
336
|
+
type: INTEGER,
|
|
337
|
+
isVararg: true
|
|
338
|
+
}
|
|
339
|
+
],
|
|
340
|
+
mulInteger
|
|
341
|
+
);
|
|
342
|
+
registerFunc(
|
|
343
|
+
'mul',
|
|
344
|
+
[
|
|
345
|
+
{
|
|
346
|
+
type: NUMBER,
|
|
347
|
+
isVararg: true
|
|
348
|
+
}
|
|
349
|
+
],
|
|
350
|
+
mulNumber
|
|
351
|
+
);
|
|
352
|
+
|
|
353
|
+
registerFunc(
|
|
354
|
+
'sub',
|
|
355
|
+
[
|
|
356
|
+
{
|
|
357
|
+
type: INTEGER,
|
|
358
|
+
isVararg: true
|
|
359
|
+
}
|
|
360
|
+
],
|
|
361
|
+
subInteger
|
|
362
|
+
);
|
|
363
|
+
registerFunc(
|
|
364
|
+
'sub',
|
|
365
|
+
[
|
|
366
|
+
{
|
|
367
|
+
type: NUMBER,
|
|
368
|
+
isVararg: true
|
|
369
|
+
}
|
|
370
|
+
],
|
|
371
|
+
subNumber
|
|
372
|
+
);
|
|
373
|
+
|
|
374
|
+
registerFunc(
|
|
375
|
+
'sum',
|
|
376
|
+
[
|
|
377
|
+
{
|
|
378
|
+
type: INTEGER,
|
|
379
|
+
isVararg: true
|
|
380
|
+
}
|
|
381
|
+
],
|
|
382
|
+
sumInteger
|
|
383
|
+
);
|
|
384
|
+
registerFunc(
|
|
385
|
+
'sum',
|
|
386
|
+
[
|
|
387
|
+
{
|
|
388
|
+
type: NUMBER,
|
|
389
|
+
isVararg: true
|
|
390
|
+
}
|
|
391
|
+
],
|
|
392
|
+
sumNumber
|
|
393
|
+
);
|
|
358
394
|
|
|
359
395
|
registerFunc('abs', [INTEGER], absInteger);
|
|
360
396
|
registerFunc('abs', [NUMBER], absNumber);
|
|
361
397
|
|
|
362
|
-
registerFunc(
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
398
|
+
registerFunc(
|
|
399
|
+
'max',
|
|
400
|
+
[
|
|
401
|
+
{
|
|
402
|
+
type: INTEGER,
|
|
403
|
+
isVararg: true
|
|
404
|
+
}
|
|
405
|
+
],
|
|
406
|
+
maxInt
|
|
407
|
+
);
|
|
408
|
+
registerFunc(
|
|
409
|
+
'max',
|
|
410
|
+
[
|
|
411
|
+
{
|
|
412
|
+
type: NUMBER,
|
|
413
|
+
isVararg: true
|
|
414
|
+
}
|
|
415
|
+
],
|
|
416
|
+
maxNum
|
|
417
|
+
);
|
|
418
|
+
|
|
419
|
+
registerFunc(
|
|
420
|
+
'min',
|
|
421
|
+
[
|
|
422
|
+
{
|
|
423
|
+
type: INTEGER,
|
|
424
|
+
isVararg: true
|
|
425
|
+
}
|
|
426
|
+
],
|
|
427
|
+
minInt
|
|
428
|
+
);
|
|
429
|
+
registerFunc(
|
|
430
|
+
'min',
|
|
431
|
+
[
|
|
432
|
+
{
|
|
433
|
+
type: NUMBER,
|
|
434
|
+
isVararg: true
|
|
435
|
+
}
|
|
436
|
+
],
|
|
437
|
+
minNum
|
|
438
|
+
);
|
|
379
439
|
|
|
380
440
|
registerFunc('maxNumber', [], maxNumber);
|
|
381
441
|
registerFunc('minNumber', [], minNumber);
|
|
@@ -26,7 +26,6 @@ function toString(
|
|
|
26
26
|
};
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
-
|
|
30
29
|
function toNumber(_ctx: EvalContext, arg: IntegerValue | StringValue): EvalValue {
|
|
31
30
|
const num = Number(arg.value);
|
|
32
31
|
|
|
@@ -43,7 +42,6 @@ function toNumber(_ctx: EvalContext, arg: IntegerValue | StringValue): EvalValue
|
|
|
43
42
|
};
|
|
44
43
|
}
|
|
45
44
|
|
|
46
|
-
|
|
47
45
|
function toIntegerNumber(_ctx: EvalContext, arg: NumberValue): EvalValue {
|
|
48
46
|
if (arg.value > MAX_INT || arg.value < MIN_INT) {
|
|
49
47
|
throw new Error('Unable to convert value to Integer.');
|
|
@@ -79,7 +77,6 @@ function toIntegerBoolean(_ctx: EvalContext, arg: BooleanValue): EvalValue {
|
|
|
79
77
|
};
|
|
80
78
|
}
|
|
81
79
|
|
|
82
|
-
|
|
83
80
|
function toBooleanInteger(_ctx: EvalContext, arg: IntegerValue): EvalValue {
|
|
84
81
|
const intVal = Number(arg.value);
|
|
85
82
|
if (intVal !== 1 && intVal !== 0) {
|
|
@@ -250,10 +247,10 @@ function decimalFormat(
|
|
|
250
247
|
const pattern = format.value;
|
|
251
248
|
const patternWithoutGroupping = pattern.replace(/,/g, '');
|
|
252
249
|
if (
|
|
253
|
-
!/^((#+)|(#*0+))(\.0*#*)?$/.test(patternWithoutGroupping) &&
|
|
254
|
-
|
|
250
|
+
(!/^((#+)|(#*0+))(\.0*#*)?$/.test(patternWithoutGroupping) &&
|
|
251
|
+
!/^#*0*\.((0*#*)|(#+))$/.test(patternWithoutGroupping)) ||
|
|
255
252
|
/,.*,/.test(pattern) ||
|
|
256
|
-
pattern.indexOf(',') > pattern.indexOf('.') && pattern.indexOf('.') > -1
|
|
253
|
+
(pattern.indexOf(',') > pattern.indexOf('.') && pattern.indexOf('.') > -1)
|
|
257
254
|
) {
|
|
258
255
|
throw new Error('Incorrect format pattern.');
|
|
259
256
|
}
|
|
@@ -269,7 +266,7 @@ function decimalFormat(
|
|
|
269
266
|
const groupIndex = rawInteger.indexOf(',');
|
|
270
267
|
const digitsInGroup = groupIndex > -1 ? rawInteger.length - groupIndex - 1 : -1;
|
|
271
268
|
|
|
272
|
-
if (groupIndex > -1 && digitsInGroup < 1 || rawFraction.indexOf(',') > -1) {
|
|
269
|
+
if ((groupIndex > -1 && digitsInGroup < 1) || rawFraction.indexOf(',') > -1) {
|
|
273
270
|
throw new Error('Incorrect format pattern.');
|
|
274
271
|
}
|
|
275
272
|
|
|
@@ -25,10 +25,7 @@ function substring(_ctx: EvalContext, str: StringValue, start: IntegerValue, end
|
|
|
25
25
|
throw new Error('Indexes should be in ascending order.');
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
-
if (
|
|
29
|
-
start.value < 0 || start.value > str.value.length ||
|
|
30
|
-
end.value < 0 || end.value > str.value.length
|
|
31
|
-
) {
|
|
28
|
+
if (start.value < 0 || start.value > str.value.length || end.value < 0 || end.value > str.value.length) {
|
|
32
29
|
throw new Error('Indexes are out of bounds.');
|
|
33
30
|
}
|
|
34
31
|
|
|
@@ -103,16 +100,13 @@ function toLowerCase(_ctx: EvalContext, str: StringValue): EvalValue {
|
|
|
103
100
|
};
|
|
104
101
|
}
|
|
105
102
|
|
|
106
|
-
function calcPad(
|
|
107
|
-
ctx: EvalContext,
|
|
108
|
-
val: StringValue | IntegerValue,
|
|
109
|
-
len: IntegerValue,
|
|
110
|
-
pad: StringValue
|
|
111
|
-
): string {
|
|
103
|
+
function calcPad(ctx: EvalContext, val: StringValue | IntegerValue, len: IntegerValue, pad: StringValue): string {
|
|
112
104
|
if (!pad.value.length) {
|
|
113
|
-
ctx.warnings.push(
|
|
114
|
-
|
|
115
|
-
|
|
105
|
+
ctx.warnings.push(
|
|
106
|
+
wrapError(new Error('String for padding is empty.'), {
|
|
107
|
+
level: 'warn'
|
|
108
|
+
})
|
|
109
|
+
);
|
|
116
110
|
return '';
|
|
117
111
|
}
|
|
118
112
|
|
|
@@ -129,12 +123,7 @@ function calcPad(
|
|
|
129
123
|
return part;
|
|
130
124
|
}
|
|
131
125
|
|
|
132
|
-
function padStart(
|
|
133
|
-
ctx: EvalContext,
|
|
134
|
-
val: StringValue | IntegerValue,
|
|
135
|
-
len: IntegerValue,
|
|
136
|
-
pad: StringValue
|
|
137
|
-
): EvalValue {
|
|
126
|
+
function padStart(ctx: EvalContext, val: StringValue | IntegerValue, len: IntegerValue, pad: StringValue): EvalValue {
|
|
138
127
|
const prefix = calcPad(ctx, val, len, pad);
|
|
139
128
|
|
|
140
129
|
return {
|
|
@@ -143,12 +132,7 @@ function padStart(
|
|
|
143
132
|
};
|
|
144
133
|
}
|
|
145
134
|
|
|
146
|
-
function padEnd(
|
|
147
|
-
ctx: EvalContext,
|
|
148
|
-
val: StringValue | IntegerValue,
|
|
149
|
-
len: IntegerValue,
|
|
150
|
-
pad: StringValue
|
|
151
|
-
): EvalValue {
|
|
135
|
+
function padEnd(ctx: EvalContext, val: StringValue | IntegerValue, len: IntegerValue, pad: StringValue): EvalValue {
|
|
152
136
|
const suffix = calcPad(ctx, val, len, pad);
|
|
153
137
|
|
|
154
138
|
return {
|
|
@@ -12,14 +12,14 @@ function pi(): EvalValue {
|
|
|
12
12
|
function toRadians(_ctx: EvalContext, degrees: NumberValue): EvalValue {
|
|
13
13
|
return {
|
|
14
14
|
type: NUMBER,
|
|
15
|
-
value: degrees.value / 180 * Math.PI
|
|
15
|
+
value: (degrees.value / 180) * Math.PI
|
|
16
16
|
};
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
function toDegrees(_ctx: EvalContext, radians: NumberValue): EvalValue {
|
|
20
20
|
return {
|
|
21
21
|
type: NUMBER,
|
|
22
|
-
value: radians.value / Math.PI * 180
|
|
22
|
+
value: (radians.value / Math.PI) * 180
|
|
23
23
|
};
|
|
24
24
|
}
|
|
25
25
|
|