Skip to content

Commit 2d02425

Browse files
committed
display exception from sync echo function #997
1 parent f0a61a9 commit 2d02425

7 files changed

+86
-12
lines changed

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
[![npm](https://img.shields.io/badge/npm-DEV-blue.svg)](https://www.npmjs.com/package/jquery.terminal)
99
![bower](https://img.shields.io/badge/bower-DEV-yellow.svg)
1010
[![Build and test](https://github.com/jcubic/jquery.terminal/actions/workflows/build.yaml/badge.svg?branch=devel&event=push)](https://github.com/jcubic/jquery.terminal/actions/workflows/build.yaml)
11-
[![Coverage Status](https://coveralls.io/repos/github/jcubic/jquery.terminal/badge.svg?branch=devel&f835e1e451a9a328fcbd9f39c4dc0103)](https://coveralls.io/github/jcubic/jquery.terminal?branch=devel)
11+
[![Coverage Status](https://coveralls.io/repos/github/jcubic/jquery.terminal/badge.svg?branch=devel&1687bf76f899dace3e9c668c6d0414bf)](https://coveralls.io/github/jcubic/jquery.terminal?branch=devel)
1212
![NPM Downloads](https://img.shields.io/npm/dm/jquery.terminal.svg?style=flat)
1313
[![jsDelivr Downloads](https://data.jsdelivr.com/v1/package/npm/jquery.terminal/badge?style=rounded&n=1)](https://www.jsdelivr.com/package/npm/jquery.terminal)
1414
[![Paid Support](https://img.shields.io/badge/paid-support-354465.svg)](https://support.jcubic.pl/)

__tests__/__snapshots__/terminal.spec.js.snap

+43
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,49 @@ exports[`Terminal plugin interprer return should rener promise of array 1`] = `
7272
"foo" "bar" 10"
7373
`;
7474

75+
exports[`Terminal plugin jQuery Terminal methods echo should show error in sync echo 1`] = `
76+
"[[;;;terminal-error][ECHO]: x is not defined]
77+
[[;;;terminal-error;ReferenceError: x is not defined]ReferenceError: x is not defined]
78+
[[;;;terminal-error; at jQuery.fn.init.x (/home/kuba/projects/jcubic/terminal/repo/__tests__/terminal.spec.js:6953:21)] at jQuery.fn.init.x (/home/kuba/projects/jcubic/terminal/repo/__tests__/terminal.spec.js:6953:21]
79+
[[;;;terminal-error; at jQuery.fn.init.x (/home/kuba/projects/jcubic/terminal/repo/__tests__/terminal.spec.js:6953:21)])]
80+
[[;;;terminal-error; at value (/home/kuba/projects/jcubic/terminal/repo/js/jquery.terminal-src.js:12273:25)] at value (/home/kuba/projects/jcubic/terminal/repo/js/jquery.terminal-src.js:12273:25)]
81+
[[;;;terminal-error; at stringify_value (/home/kuba/projects/jcubic/terminal/repo/js/jquery.terminal-src.js:8561:30)] at stringify_value (/home/kuba/projects/jcubic/terminal/repo/js/jquery.terminal-src.js:8561:30)]
82+
[[;;;terminal-error; at process_line (/home/kuba/projects/jcubic/terminal/repo/js/jquery.terminal-src.js:11299:40)] at process_line (/home/kuba/projects/jcubic/terminal/repo/js/jquery.terminal-src.js:11299:40)]
83+
[[;;;terminal-error; at callback (/home/kuba/projects/jcubic/terminal/repo/js/jquery.terminal-src.js:1208:24)] at callback (/home/kuba/projects/jcubic/terminal/repo/js/jquery.terminal-src.js:1208:24)]
84+
[[;;;terminal-error; at unpromise (/home/kuba/projects/jcubic/terminal/repo/js/jquery.terminal-src.js:11280:25)] at unpromise (/home/kuba/projects/jcubic/terminal/repo/js/jquery.terminal-src.js:11280:25)]
85+
[[;;;terminal-error; at jQuery.fn.init.echo (/home/kuba/projects/jcubic/terminal/repo/js/jquery.terminal-src.js:11359:21)] at jQuery.fn.init.echo (/home/kuba/projects/jcubic/terminal/repo/js/jquery.terminal-src.js:11359]
86+
[[;;;terminal-error; at jQuery.fn.init.echo (/home/kuba/projects/jcubic/terminal/repo/js/jquery.terminal-src.js:11359:21)]:21)]
87+
[[;;;terminal-error; at jQuery.fn.init.apply [as echo] (/home/kuba/projects/jcubic/terminal/repo/js/jquery.terminal-src.js:12093:32)] at jQuery.fn.init.apply [as echo] (/home/kuba/projects/jcubic/terminal/repo/js/jquery.terminal-s]
88+
[[;;;terminal-error; at jQuery.fn.init.apply [as echo] (/home/kuba/projects/jcubic/terminal/repo/js/jquery.terminal-src.js:12093:32)]rc.js:12093:32)]
89+
[[;;;terminal-error; at Object.echo (/home/kuba/projects/jcubic/terminal/repo/__tests__/terminal.spec.js:6952:22)] at Object.echo (/home/kuba/projects/jcubic/terminal/repo/__tests__/terminal.spec.js:6952:22)]
90+
[[;;;terminal-error; at Promise.then.completed (/home/kuba/projects/jcubic/terminal/repo/node_modules/jest-circus/build/utils.js:298:28)] at Promise.then.completed (/home/kuba/projects/jcubic/terminal/repo/node_modules/jest-circus/bui]
91+
[[;;;terminal-error; at Promise.then.completed (/home/kuba/projects/jcubic/terminal/repo/node_modules/jest-circus/build/utils.js:298:28)]ld/utils.js:298:28)]
92+
[[;;;terminal-error; at new Promise (<anonymous>)] at new Promise (<anonymous>)]
93+
[[;;;terminal-error; at callAsyncCircusFn (/home/kuba/projects/jcubic/terminal/repo/node_modules/jest-circus/build/utils.js:231:10)] at callAsyncCircusFn (/home/kuba/projects/jcubic/terminal/repo/node_modules/jest-circus/build/ut]
94+
[[;;;terminal-error; at callAsyncCircusFn (/home/kuba/projects/jcubic/terminal/repo/node_modules/jest-circus/build/utils.js:231:10)]ils.js:231:10)]
95+
[[;;;terminal-error; at _callCircusTest (/home/kuba/projects/jcubic/terminal/repo/node_modules/jest-circus/build/run.js:316:40)] at _callCircusTest (/home/kuba/projects/jcubic/terminal/repo/node_modules/jest-circus/build/run.]
96+
[[;;;terminal-error; at _callCircusTest (/home/kuba/projects/jcubic/terminal/repo/node_modules/jest-circus/build/run.js:316:40)]js:316:40)]
97+
[[;;;terminal-error; at _runTest (/home/kuba/projects/jcubic/terminal/repo/node_modules/jest-circus/build/run.js:252:3)] at _runTest (/home/kuba/projects/jcubic/terminal/repo/node_modules/jest-circus/build/run.js:252:]
98+
[[;;;terminal-error; at _runTest (/home/kuba/projects/jcubic/terminal/repo/node_modules/jest-circus/build/run.js:252:3)]3)]
99+
[[;;;terminal-error; at _runTestsForDescribeBlock (/home/kuba/projects/jcubic/terminal/repo/node_modules/jest-circus/build/run.js:126:9)] at _runTestsForDescribeBlock (/home/kuba/projects/jcubic/terminal/repo/node_modules/jest-circus/]
100+
[[;;;terminal-error; at _runTestsForDescribeBlock (/home/kuba/projects/jcubic/terminal/repo/node_modules/jest-circus/build/run.js:126:9)]build/run.js:126:9)]
101+
[[;;;terminal-error; at _runTestsForDescribeBlock (/home/kuba/projects/jcubic/terminal/repo/node_modules/jest-circus/build/run.js:121:9)] at _runTestsForDescribeBlock (/home/kuba/projects/jcubic/terminal/repo/node_modules/jest-circus/]
102+
[[;;;terminal-error; at _runTestsForDescribeBlock (/home/kuba/projects/jcubic/terminal/repo/node_modules/jest-circus/build/run.js:121:9)]build/run.js:121:9)]
103+
[[;;;terminal-error; at _runTestsForDescribeBlock (/home/kuba/projects/jcubic/terminal/repo/node_modules/jest-circus/build/run.js:121:9)] at _runTestsForDescribeBlock (/home/kuba/projects/jcubic/terminal/repo/node_modules/jest-circus/]
104+
[[;;;terminal-error; at _runTestsForDescribeBlock (/home/kuba/projects/jcubic/terminal/repo/node_modules/jest-circus/build/run.js:121:9)]build/run.js:121:9)]
105+
[[;;;terminal-error; at _runTestsForDescribeBlock (/home/kuba/projects/jcubic/terminal/repo/node_modules/jest-circus/build/run.js:121:9)] at _runTestsForDescribeBlock (/home/kuba/projects/jcubic/terminal/repo/node_modules/jest-circus/]
106+
[[;;;terminal-error; at _runTestsForDescribeBlock (/home/kuba/projects/jcubic/terminal/repo/node_modules/jest-circus/build/run.js:121:9)]build/run.js:121:9)]
107+
[[;;;terminal-error; at run (/home/kuba/projects/jcubic/terminal/repo/node_modules/jest-circus/build/run.js:71:3)] at run (/home/kuba/projects/jcubic/terminal/repo/node_modules/jest-circus/build/run.js:71:3)]
108+
[[;;;terminal-error; at runAndTransformResultsToJestFormat (/home/kuba/projects/jcubic/terminal/repo/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)] at runAndTransformResultsToJestFormat (/home/kuba/projects/jcubic/terminal/repo/node_modules/jes]
109+
[[;;;terminal-error; at runAndTransformResultsToJestFormat (/home/kuba/projects/jcubic/terminal/repo/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)]t-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)]
110+
[[;;;terminal-error; at jestAdapter (/home/kuba/projects/jcubic/terminal/repo/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)] at jestAdapter (/home/kuba/projects/jcubic/terminal/repo/node_modules/jest-circus/build/legacy-c]
111+
[[;;;terminal-error; at jestAdapter (/home/kuba/projects/jcubic/terminal/repo/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)]ode-todo-rewrite/jestAdapter.js:79:19)]
112+
[[;;;terminal-error; at runTestInternal (/home/kuba/projects/jcubic/terminal/repo/node_modules/jest-runner/build/runTest.js:367:16)] at runTestInternal (/home/kuba/projects/jcubic/terminal/repo/node_modules/jest-runner/build/runT]
113+
[[;;;terminal-error; at runTestInternal (/home/kuba/projects/jcubic/terminal/repo/node_modules/jest-runner/build/runTest.js:367:16)]est.js:367:16)]
114+
[[;;;terminal-error; at runTest (/home/kuba/projects/jcubic/terminal/repo/node_modules/jest-runner/build/runTest.js:444:34)] at runTest (/home/kuba/projects/jcubic/terminal/repo/node_modules/jest-runner/build/runTest.js:4]
115+
[[;;;terminal-error; at runTest (/home/kuba/projects/jcubic/terminal/repo/node_modules/jest-runner/build/runTest.js:444:34)]44:34)]"
116+
`;
117+
75118
exports[`Terminal plugin jQuery Terminal methods exec should invoke array of commands when each command pause terminal 1`] = `
76119
"> exec_async_array
77120
> async_command 0

__tests__/terminal.spec.js

+7
Original file line numberDiff line numberDiff line change
@@ -6947,6 +6947,13 @@ describe('Terminal plugin', function() {
69476947
]);
69486948
});
69496949
});
6950+
it('should show error in sync echo', function() {
6951+
term.clear();
6952+
term.echo(function() {
6953+
x();
6954+
});
6955+
expect(term.get_output()).toMatchSnapshot();
6956+
});
69506957
});
69516958
describe('error', function() {
69526959
var term = $('<div/>').terminal($.noop, {

js/jquery.terminal-src.js

+15-3
Original file line numberDiff line numberDiff line change
@@ -1204,7 +1204,15 @@
12041204
// when value is undefined
12051205
// when moving this line outside if
12061206
// it breaks all completion unit tests
1207-
return callback(value);
1207+
try {
1208+
return callback(value);
1209+
} catch(e) {
1210+
if (is_function(error)) {
1211+
error(e);
1212+
} else {
1213+
throw e;
1214+
}
1215+
}
12081216
}
12091217
}
12101218
// -----------------------------------------------------------------------
@@ -8537,7 +8545,7 @@
85378545
return string;
85388546
}
85398547
// ---------------------------------------------------------------------
8540-
function process_line(line) {
8548+
function process_line(line, safe_throw) {
85418549
// prevent exception in display exception
85428550
try {
85438551
var use_cache = !is_function(line.value);
@@ -8625,6 +8633,10 @@
86258633
}
86268634
buffer.append(arg, line.index, line_settings, raw);
86278635
} catch (e) {
8636+
if (safe_throw) {
8637+
// exception from echo function is handled by echo #997
8638+
throw e;
8639+
}
86288640
buffer.clear();
86298641
// don't display exception if exception throw in terminal
86308642
if (is_function(settings.exceptionHandler)) {
@@ -11288,7 +11300,7 @@
1128811300
value: value,
1128911301
options: locals,
1129011302
index: index
11291-
});
11303+
}, true);
1129211304
// queue async functions in echo
1129311305
if (is_promise(next)) {
1129411306
echo_promise = true;

js/jquery.terminal.js

+17-5
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
*
4242
* broken image by Sophia Bai from the Noun Project (CC-BY)
4343
*
44-
* Date: Sat, 22 Feb 2025 15:55:40 +0000
44+
* Date: Sat, 22 Feb 2025 16:29:23 +0000
4545
*/
4646
/* global define, Map, BigInt */
4747
/* eslint-disable */
@@ -1204,7 +1204,15 @@
12041204
// when value is undefined
12051205
// when moving this line outside if
12061206
// it breaks all completion unit tests
1207-
return callback(value);
1207+
try {
1208+
return callback(value);
1209+
} catch(e) {
1210+
if (is_function(error)) {
1211+
error(e);
1212+
} else {
1213+
throw e;
1214+
}
1215+
}
12081216
}
12091217
}
12101218
// -----------------------------------------------------------------------
@@ -5448,7 +5456,7 @@
54485456
// -------------------------------------------------------------------------
54495457
$.terminal = {
54505458
version: 'DEV',
5451-
date: 'Sat, 22 Feb 2025 15:55:40 +0000',
5459+
date: 'Sat, 22 Feb 2025 16:29:23 +0000',
54525460
// colors from https://www.w3.org/wiki/CSS/Properties/color/keywords
54535461
color_names: [
54545462
'transparent', 'currentcolor', 'black', 'silver', 'gray', 'white',
@@ -8537,7 +8545,7 @@
85378545
return string;
85388546
}
85398547
// ---------------------------------------------------------------------
8540-
function process_line(line) {
8548+
function process_line(line, safe_throw) {
85418549
// prevent exception in display exception
85428550
try {
85438551
var use_cache = !is_function(line.value);
@@ -8625,6 +8633,10 @@
86258633
}
86268634
buffer.append(arg, line.index, line_settings, raw);
86278635
} catch (e) {
8636+
if (safe_throw) {
8637+
// exception from echo function is handled by echo #997
8638+
throw e;
8639+
}
86288640
buffer.clear();
86298641
// don't display exception if exception throw in terminal
86308642
if (is_function(settings.exceptionHandler)) {
@@ -11288,7 +11300,7 @@
1128811300
value: value,
1128911301
options: locals,
1129011302
index: index
11291-
});
11303+
}, true);
1129211304
// queue async functions in echo
1129311305
if (is_promise(next)) {
1129411306
echo_promise = true;

js/jquery.terminal.min.js

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

js/jquery.terminal.min.js.map

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)