diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 09:22:09 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 09:22:09 +0000 |
commit | 43a97878ce14b72f0981164f87f2e35e14151312 (patch) | |
tree | 620249daf56c0258faa40cbdcf9cfba06de2a846 /devtools/client/debugger/src/utils/expressions.js | |
parent | Initial commit. (diff) | |
download | firefox-43a97878ce14b72f0981164f87f2e35e14151312.tar.xz firefox-43a97878ce14b72f0981164f87f2e35e14151312.zip |
Adding upstream version 110.0.1.upstream/110.0.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'devtools/client/debugger/src/utils/expressions.js')
-rw-r--r-- | devtools/client/debugger/src/utils/expressions.js | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/devtools/client/debugger/src/utils/expressions.js b/devtools/client/debugger/src/utils/expressions.js new file mode 100644 index 0000000000..4b791af230 --- /dev/null +++ b/devtools/client/debugger/src/utils/expressions.js @@ -0,0 +1,64 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at <http://mozilla.org/MPL/2.0/>. */ + +import { correctIndentation } from "./indentation"; +import { getGrip } from "./evaluation-result"; + +const UNAVAILABLE_GRIP = { unavailable: true }; + +/* + * wrap the expression input in a try/catch so that it can be safely + * evaluated. + * + * NOTE: we add line after the expression to protect against comments. + */ +export function wrapExpression(input) { + return correctIndentation(` + try { + ${input} + } catch (e) { + e + } + `); +} + +function isUnavailable(value) { + return ( + value && + !!value.isError && + (value.class === "ReferenceError" || value.class === "TypeError") + ); +} + +export function getValue(expression) { + const { value, exception, error } = expression; + + if (error) { + return error; + } + + if (!value) { + return UNAVAILABLE_GRIP; + } + + if (exception) { + if (isUnavailable(exception)) { + return UNAVAILABLE_GRIP; + } + return exception; + } + + const valueGrip = getGrip(value.result); + + if (valueGrip && typeof valueGrip === "object" && valueGrip.isError) { + if (isUnavailable(valueGrip)) { + return UNAVAILABLE_GRIP; + } + + const { name, message } = valueGrip.preview; + return `${name}: ${message}`; + } + + return valueGrip; +} |