wasm-server.js in prism-cli-0.0.7 vs wasm-server.js in prism-cli-0.0.8

- old
+ new

@@ -1,22 +1,98 @@ const http = require('http'); const fs = require('fs'); const path = require('path'); +function renderFileLink(p, name) { + return `<li><a href="${path.join(p, name)}">${name}</a></li>`; +} + +function isDirectory(p) { + try { + return fs.statSync(p).isDirectory(); + } catch (e) { + return false; + } +} + const port = parseInt(process.argv[2], 10) || 3042; const proxy = http.createServer((req, res) => { let p = path.join('.', req.url); - if (req.url === '/') { - p = path.join('.', 'index.html'); + console.log(p); + + if (p.startsWith('prism-assets')) { + p = path.join(__dirname, 'build', path.basename(p)); } + if (p.startsWith('prism-ruby')) { + p = path.join(__dirname, 'src', path.basename(p)); + } + + if (isDirectory(p)) { + const files = fs.readdirSync(p); + + res.write(` +<!DOCTYPE html> +<html lang=en-us> + +<head> + <meta charset=utf-8> + <meta content="text/html; charset=utf-8" http-equiv=Content-Type> + <title>Prism Server</title> + <style> + html, body { + font-family: sans-serif; + } + </style> +</head> + + <body> + <h1>Prism Dev Server</h1> + <h2>${path.join(process.cwd(), p)}</h2> + + <ul> + ${files.map(f => renderFileLink(req.url, f)).join("\n")} + </ul> + + </body> +</html> + `); + res.end(); + return; + } + try { if (p.endsWith('.wasm')) { res.setHeader("Content-Type", "application/wasm") } if (p.endsWith('.js')) { res.setHeader("Content-Type", "text/javascript") + } + if (p.endsWith('.rb') && req.headers.accept.includes("text/html")) { + res.write(` +<!DOCTYPE html> +<html lang=en-us> + +<head> + <meta charset=utf-8> + <meta content="text/html; charset=utf-8" http-equiv=Content-Type> +</head> + <body> + <div id="root"></div> + </body> + <script type="text/javascript" src="/prism-assets/prism.js"></script> + <script type="text/javascript" async src="/prism-assets/bundle.js"></script> + <script type="text/javascript"> + Prism.run("#root", "/${p}"); + </script> +</html> + `); + res.end(); + return; + } + if (p.endsWith('rb')) { + res.setHeader('Content-Type', "application/ruby"); } res.write(fs.readFileSync(p)); } catch (e) { res.write(e.toString()); }