Skip to content

Commit e21a912

Browse files
committed
Add type checking to native bricks
1 parent b57ce3f commit e21a912

File tree

1 file changed

+59
-10
lines changed

1 file changed

+59
-10
lines changed

src/utils/evalUtils.js

Lines changed: 59 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -47,10 +47,26 @@ const unitTestValues = (valueIds, unitTest) => {
4747

4848
const nativeBricks = {
4949
arithmetic: {
50-
"+": (a, b) => a + b,
51-
"-": (a, b) => a - b,
52-
"*": (a, b) => a * b,
53-
"/": (a, b) => a / b
50+
"+": (a, b) => {
51+
if(assert([a, b], ["number", "number"]))
52+
return a + b
53+
throw "Invalid parameters"
54+
},
55+
"-": (a, b) => {
56+
if(assert([a, b], ["number", "number"]))
57+
return a - b
58+
throw "Invalid parameters"
59+
},
60+
"*": (a, b) => {
61+
if(assert([a, b], ["number", "number"]))
62+
return a * b
63+
throw "Invalid parameters"
64+
},
65+
"/": (a, b) => {
66+
if(assert([a, b], ["number", "number"]))
67+
return a / b
68+
throw "Invalid parameters"
69+
}
5470
},
5571
boolean: {
5672
"&&": (a, b) => a && b,
@@ -65,17 +81,50 @@ const nativeBricks = {
6581
"sort": (a) => a.slice(0).sort()
6682
},
6783
parse: {
68-
"toNumber": (a) => parseFloat(a),
69-
"toString": (a) => a.toString(),
84+
"toNumber": (a) => {
85+
if(assert([a], ["string"]))
86+
return parseFloat(a)
87+
throw "Invalid parameters"
88+
},
89+
"toString": (a) => {
90+
if(assert([a], ["number"]))
91+
return a.toString()
92+
throw "Invalid parameters"
93+
},
7094
},
7195
string: {
72-
"concat": (a, b) => a.concat(b),
73-
"length": (a) => a.length,
74-
"reverse": (a) => a.split('').reverse().join(''),
75-
"split": (a) => a.split(''),
96+
"concat": (a, b) => {
97+
if(assert([a, b], ["string", "string"]))
98+
return a.concat(b)
99+
throw "Invalid parameters"
100+
},
101+
"length": (a) => {
102+
if(assert([a], ["string"]))
103+
return a.length
104+
throw "Invalid parameters"
105+
},
106+
"reverse": (a) => {
107+
if(assert([a], ["string"]))
108+
return a.split('').reverse().join('')
109+
throw "Invalid parameters"
110+
},
111+
"split": (a) => {
112+
if(assert([a], ["string"]))
113+
return a.split('')
114+
throw "Invalid parameters"
115+
},
76116
}
77117
}
78118

119+
const assert = (parameters, types) => {
120+
for(var i = 0; i < parameters.length; i++) {
121+
if(typeof parameters[i] !== types[i])
122+
return false
123+
}
124+
125+
return true
126+
}
127+
79128
const parsers = {
80129
boolean: (value) => value.toLowerCase() == "true",
81130
list: (value) => value.split(','),

0 commit comments

Comments
 (0)