diff --git a/package-lock.json b/package-lock.json index c7cfe4767..cb95a30ac 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,13 +19,13 @@ "@xterm/addon-web-links": "^0.11.0", "@xterm/addon-webgl": "^0.18.0", "@xterm/xterm": "^5.5.0", + "acorn": "^8.15.0", "autosize": "^6.0.1", "cordova": "13.0.0", "core-js": "^3.45.0", "crypto-js": "^4.2.0", "dompurify": "^3.2.6", "escape-string-regexp": "^5.0.0", - "esprima": "^4.0.1", "filesize": "^11.0.2", "html-tag-js": "^2.4.15", "js-base64": "^3.7.7", @@ -3321,7 +3321,6 @@ "version": "8.15.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", - "dev": true, "license": "MIT", "peer": true, "bin": { @@ -4993,17 +4992,6 @@ "node": ">=8.0.0" } }, - "node_modules/esprima": { - "version": "4.0.1", - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/esrecurse": { "version": "4.3.0", "dev": true, diff --git a/package.json b/package.json index fda4fc929..094875d7b 100644 --- a/package.json +++ b/package.json @@ -108,13 +108,13 @@ "@xterm/addon-web-links": "^0.11.0", "@xterm/addon-webgl": "^0.18.0", "@xterm/xterm": "^5.5.0", + "acorn": "^8.15.0", "autosize": "^6.0.1", "cordova": "13.0.0", "core-js": "^3.45.0", "crypto-js": "^4.2.0", "dompurify": "^3.2.6", "escape-string-regexp": "^5.0.0", - "esprima": "^4.0.1", "filesize": "^11.0.2", "html-tag-js": "^2.4.15", "js-base64": "^3.7.7", diff --git a/src/lib/console.js b/src/lib/console.js index 0d2a19a48..370052a6c 100644 --- a/src/lib/console.js +++ b/src/lib/console.js @@ -1,6 +1,6 @@ import "core-js/stable"; import "html-tag-js/dist/polyfill"; -import * as esprima from "esprima"; +import { parse } from "acorn"; import css from "styles/console.m.scss"; import loadPolyFill from "utils/polyfill"; @@ -374,16 +374,21 @@ import loadPolyFill from "utils/polyfill"; }); } + /** @type {import("acorn").Options} */ + const acornOptions = { + ecmaVersion: "latest", + }; + function parseFunction(data) { let parsed; let str; try { - parsed = esprima.parse(data.toString()).body[0]; + parsed = parse(data.toString(), acornOptions).body[0]; } catch (error) { try { const fun = ("(" + data.toString() + ")").replace(/\{.*\}/, "{}"); - parsed = esprima.parse(fun).body[0]; + parsed = parse(fun, acornOptions).body[0]; } catch (error) { return data .toString() @@ -632,9 +637,7 @@ import loadPolyFill from "utils/polyfill"; function execute(code) { let res = null; try { - const parsed = esprima.parse(code, { - range: true, - }).body; + const parsed = parse(code, acornOptions).body; res = execParsedCode(parsed); } catch (e) { res = execParsedCode([]); @@ -648,8 +651,7 @@ import loadPolyFill from "utils/polyfill"; if (st.type === "VariableDeclaration") { if (["const", "let"].indexOf(st.kind) < 0) return; - const range = st.range; - const exCode = code.substring(range[0], range[1]) + ";"; + const exCode = code.substring(st.start, st.end) + ";"; extra += exCode; } });