Files
completion-viz/src/engine262/inspector/server.js
T
bendtherules 06d0171d8b Install old engine262 in src/engine262
New version was not returning completion records easily
2020-09-07 18:58:41 +05:30

88 lines
2.4 KiB
JavaScript

'use strict';
const http = require('http');
const WebSocket = require('ws'); // eslint-disable-line import/no-extraneous-dependencies
const packageJson = require('../package.json');
const protocol = require('./js_protocol.json');
const methods = require('./methods');
const server = http.createServer((req, res) => {
if (req.method !== 'GET') {
res.writeHead(405);
res.end();
return;
}
const json = (obj) => {
const s = JSON.stringify(obj);
res.writeHead(200, {
'Content-Type': 'application/json',
'Content-Length': Buffer.byteLength(s),
});
res.end(s);
};
switch (req.url) {
case '/json':
case '/json/list':
json([{
description: `${packageJson.name} instance`,
devtoolsFrontendUrl: 'chrome-devtools://devtools/bundled/js_app.html?experiments=true&v8only=true&ws=localhost:9229/',
devtoolsFrontendUrlCompat: 'chrome-devtools://devtools/bundled/inspector.html?experiments=true&v8only=true&ws=localhost:9229/',
faviconUrl: 'https://avatars0.githubusercontent.com/u/51185628',
id: 'inspector.0',
title: 'engine262',
type: 'node',
url: `file://${process.cwd()}`,
webSocketDebuggerUrl: 'ws://localhost:9229/',
}]);
break;
case '/json/version':
json({
'Browser': `${packageJson.name}/v${packageJson.version}`,
'Protocol-Version': `${protocol.version.major}.${protocol.version.minor}`,
});
break;
case '/json/protocol':
json(protocol);
break;
default:
res.writeHead(404);
res.end();
break;
}
});
const wss = new WebSocket.Server({ server });
wss.on('connection', (ws) => {
const send = (obj) => {
const s = JSON.stringify(obj);
// console.log('<-', s);
ws.send(s);
};
ws._socket.unref(); // eslint-disable-line no-underscore-dangle
const context = {
sendEvent(event, params) {
send({ method: event, params });
},
};
ws.on('message', (data) => {
// console.log('->', data);
const { id, method, params } = JSON.parse(data);
const [k, v] = method.split('.');
Promise.resolve(methods[k][v](params, context))
.then((result = {}) => {
send({ id, result });
});
});
});
server.listen(9229, '127.0.0.1', () => {
console.log('Debugger listening at localhost:9229'); // eslint-disable-line no-console
});
server.unref();