Skip to content

Commit 3d9a4fa

Browse files
committed
Handle errors when evaluating expression in iframe
1 parent 1c47498 commit 3d9a4fa

File tree

3 files changed

+17
-10
lines changed

3 files changed

+17
-10
lines changed

client/modules/IDE/components/ConsoleInput.jsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ class ConsoleInput extends React.Component {
2929
if (value.trim(' ') === '') {
3030
return false;
3131
}
32-
const messages = [{ log: Encode({ method: 'command', data: Encode(value) }) }];
33-
const consoleEvent = [{ method: 'command', data: Encode(value) }];
32+
const messages = [{ log: Encode({ method: 'command', data: [value] }) }];
33+
const consoleEvent = [{ method: 'command', data: [value] }];
3434
dispatch({
3535
source: 'console',
3636
messages

client/utils/evaluateExpression.js

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,22 @@ function __makeEvaluateExpression(evalInClosure) {
66
function evaluateExpression() {
77
return __makeEvaluateExpression((expr) => {
88
let newExpr = expr;
9+
let result = null;
10+
let error = false;
911
try {
10-
const wrapped = `(${expr})`;
11-
const validate = new Function(wrapped); // eslint-disable-line
12-
newExpr = wrapped; // eslint-disable-line
12+
try {
13+
const wrapped = `(${expr})`;
14+
const validate = new Function(wrapped); // eslint-disable-line
15+
newExpr = wrapped; // eslint-disable-line
16+
} catch (e) {
17+
// We shouldn't wrap the expression
18+
}
19+
result = (0, eval)(newExpr); // eslint-disable-line
1320
} catch (e) {
14-
// We shouldn't wrap the expression
21+
result = e;
22+
error = true;
1523
}
16-
17-
return (0, eval)(newExpr); // eslint-disable-line
24+
return { result, error };
1825
});
1926
}
2027

client/utils/previewEntry.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ function handleMessageEvent(e) {
3131
const decodedMessages = messages.map(message => Decode(message.log));
3232
decodedMessages.forEach((message) => {
3333
const { data: args } = message;
34-
const consoleInfo = handleConsoleExpressions(args);
35-
const resultMessages = [{ log: Encode({ method: 'result', data: [consoleInfo] }) }];
34+
const { result, error } = handleConsoleExpressions(args);
35+
const resultMessages = [{ log: Encode({ method: error ? 'error' : 'result', data: [result] }) }];
3636
window.parent.postMessage({
3737
messages: resultMessages,
3838
source: 'sketch'

0 commit comments

Comments
 (0)