diff --git a/package-lock.json b/package-lock.json index 03e05c909..1031ebb23 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,6 +15,7 @@ "@rescript/tools": "^0.5.0", "codemirror": "^5.54.0", "docson": "^2.1.0", + "escodegen": "^2.1.0", "eslint-config-next": "^13.1.1", "fuse.js": "^6.4.3", "gentype": "^3.44.0", @@ -3364,6 +3365,35 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/escodegen/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/eslint": { "version": "8.46.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.46.0.tgz", @@ -3857,12 +3887,9 @@ } }, "node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "dependencies": { - "@types/estree": "^1.0.0" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.0.tgz", + "integrity": "sha512-s6ceX0NFiU/vKPiKvFdR83U1Zffu7upwZsGwpoqfg5rbbq1l50WQ5hCeIvM6E6oD4shUHCYMsiFPns4Jk0YfMQ==" }, "node_modules/esutils": { "version": "2.0.3", @@ -15945,6 +15972,25 @@ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "peer": true }, + "escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "requires": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "optional": true + } + } + }, "eslint": { "version": "8.46.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.46.0.tgz", @@ -16290,12 +16336,9 @@ } }, "estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "requires": { - "@types/estree": "^1.0.0" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.0.tgz", + "integrity": "sha512-s6ceX0NFiU/vKPiKvFdR83U1Zffu7upwZsGwpoqfg5rbbq1l50WQ5hCeIvM6E6oD4shUHCYMsiFPns4Jk0YfMQ==" }, "esutils": { "version": "2.0.3", diff --git a/package.json b/package.json index 88bf7f11b..c98c20ed9 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,7 @@ "@rescript/tools": "^0.5.0", "codemirror": "^5.54.0", "docson": "^2.1.0", + "escodegen": "^2.1.0", "eslint-config-next": "^13.1.1", "fuse.js": "^6.4.3", "gentype": "^3.44.0", diff --git a/src/Playground.res b/src/Playground.res index 42b5a3547..2eee14e4a 100644 --- a/src/Playground.res +++ b/src/Playground.res @@ -22,7 +22,7 @@ open CompilerManagerHook module Api = RescriptCompilerApi type layout = Column | Row -type tab = JavaScript | Problems | Settings +type tab = RenderOutput | JavaScript | Problems | Settings | Console let breakingPoint = 1024 module DropdownSelect = { @@ -1054,6 +1054,20 @@ module Settings = { } module ControlPanel = { + let codeFromResult = (result: FinalResult.t): string => { + open Api + switch result { + | FinalResult.Comp(comp) => + switch comp { + | CompilationResult.Success({js_code}) => js_code + | UnexpectedError(_) + | Unknown(_, _) + | Fail(_) => "/* No JS code generated */" + } + | Nothing + | Conv(_) => "/* No JS code generated */" + } + } module Button = { @react.component let make = (~children, ~onClick=?) => @@ -1168,6 +1182,7 @@ module ControlPanel = { Next.Router.replace(router, url) url } + <>
@@ -1193,22 +1208,21 @@ let locMsgToCmError = (~kind: CodeMirror.Error.kind, locMsg: Api.LocMsg.t): Code } } -module OutputPanel = { - let codeFromResult = (result: FinalResult.t): string => { - open Api - switch result { - | FinalResult.Comp(comp) => - switch comp { - | CompilationResult.Success({js_code}) => js_code - | UnexpectedError(_) - | Unknown(_, _) - | Fail(_) => "/* No JS code generated */" - } - | Nothing - | Conv(_) => "/* No JS code generated */" - } +module RenderOutput = { + @react.component + let make = () => { +
+