redux-devtools/packages/redux-devtools-cli/src/routes.ts

101 lines
2.6 KiB
TypeScript
Raw Normal View History

import path from 'path';
import express from 'express';
import morgan from 'morgan';
import bodyParser from 'body-parser';
import cors from 'cors';
import { SCServer } from 'socketcluster-server';
import graphqlMiddleware from './middleware/graphql';
import { ReportBaseFields, Store } from './store';
2019-01-04 22:44:48 +03:00
const app = express.Router();
2019-01-04 22:44:48 +03:00
function serveUmdModule(name: string) {
app.use(
express.static(
path.dirname(require.resolve(name + '/package.json')) + '/umd'
)
);
2019-01-04 22:44:48 +03:00
}
function routes(
options: SCServer.SCServerOptions,
store: Store,
scServer: SCServer
) {
const limit = options.maxRequestBody;
const logHTTPRequests = options.logHTTPRequests;
2019-01-10 21:51:14 +03:00
2019-01-04 22:44:48 +03:00
if (logHTTPRequests) {
2019-01-10 21:51:14 +03:00
if (typeof logHTTPRequests === 'object')
app.use(morgan('combined', logHTTPRequests));
2019-01-04 22:44:48 +03:00
else app.use(morgan('combined'));
}
graphqlMiddleware(store).applyMiddleware({ app } as {
app: express.Application;
});
2019-01-04 22:44:48 +03:00
serveUmdModule('react');
serveUmdModule('react-dom');
serveUmdModule('@redux-devtools/app');
2019-01-04 22:44:48 +03:00
app.get('/port.js', function (req, res) {
res.send(`reduxDevToolsPort = ${options.port!}`);
2019-01-04 22:44:48 +03:00
});
app.get('*', function (req, res) {
2019-01-04 22:44:48 +03:00
res.sendFile(path.join(__dirname, '../app/index.html'));
});
2019-01-10 21:51:14 +03:00
app.use(cors({ methods: 'POST' }));
app.use(bodyParser.json({ limit: limit }));
app.use(bodyParser.urlencoded({ limit: limit, extended: false }));
2019-01-04 22:44:48 +03:00
app.post('/', function (req, res) {
2019-01-04 22:44:48 +03:00
if (!req.body) return res.status(404).end();
switch (req.body.op) {
case 'get':
2019-01-10 21:51:14 +03:00
store
.get(req.body.id)
.then(function (r) {
2019-01-10 21:51:14 +03:00
res.send(r || {});
})
.catch(function (error) {
2019-01-10 21:51:14 +03:00
console.error(error); // eslint-disable-line no-console
res.sendStatus(500);
});
2019-01-04 22:44:48 +03:00
break;
case 'list':
2019-01-10 21:51:14 +03:00
store
.list(req.body.query, req.body.fields)
.then(function (r) {
2019-01-10 21:51:14 +03:00
res.send(r);
})
.catch(function (error) {
2019-01-10 21:51:14 +03:00
console.error(error); // eslint-disable-line no-console
res.sendStatus(500);
});
2019-01-04 22:44:48 +03:00
break;
default:
2019-01-10 21:51:14 +03:00
store
.add(req.body)
.then(function (r) {
res.send({
id: (r as ReportBaseFields).id,
error: (r as { error: string }).error,
});
2019-01-10 21:51:14 +03:00
scServer.exchange.publish('report', {
type: 'add',
data: r,
2019-01-10 21:51:14 +03:00
});
})
.catch(function (error) {
2019-01-10 21:51:14 +03:00
console.error(error); // eslint-disable-line no-console
res.status(500).send({});
2019-01-04 22:44:48 +03:00
});
}
});
return app;
}
export default routes;