dora
Version:
A fully pluggable server for development.
116 lines (87 loc) • 3.19 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _stringify = require('babel-runtime/core-js/json/stringify');
var _stringify2 = _interopRequireDefault(_stringify);
var _extends2 = require('babel-runtime/helpers/extends');
var _extends3 = _interopRequireDefault(_extends2);
exports.default = createServer;
var _http = require('http');
var _http2 = _interopRequireDefault(_http);
var _koa = require('koa');
var _koa2 = _interopRequireDefault(_koa);
var _plugin = require('./plugin');
var _spmLog = require('spm-log');
var _spmLog2 = _interopRequireDefault(_spmLog);
var _async = require('async');
var _async2 = _interopRequireDefault(_async);
var _path = require('path');
var _umiNotify = require('umi-notify');
var _umiNotify2 = _interopRequireDefault(_umiNotify);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var defaultCwd = process.cwd();
var defaultArgs = {
port: '8000',
cwd: defaultCwd,
enabledMiddlewareServeIndex: true,
enabledMiddlewareStatic: true,
resolveDir: [defaultCwd]
};
var data = {};
function createServer(_args, callback) {
_umiNotify2.default.onDevStart({ name: 'dora', version: '0.6' });
var args = (0, _extends3.default)({}, defaultArgs, _args);
_spmLog2.default.config(args);
var port = args.port,
cwd = args.cwd,
resolveDir = args.resolveDir;
var pluginNames = args.plugins;
var context = { port: port, cwd: cwd };
context.set = function (key, val) {
data[key] = val;
};
context.get = function (key) {
return data[key];
};
context.set('__server_listen_log', true);
if (args.enabledMiddlewareStatic) {
pluginNames.push((0, _path.join)(__dirname, './plugins/static'));
}
if (args.enabledMiddlewareServeIndex) {
pluginNames.push((0, _path.join)(__dirname, './plugins/serve-index'));
}
var plugins = (0, _plugin.resolvePlugins)(pluginNames, resolveDir, cwd);
function _applyPlugins(name, pluginArgs, _callback) {
return (0, _plugin.applyPlugins)(plugins, name, context, pluginArgs, _callback);
}
context.applyPlugins = _applyPlugins;
_spmLog2.default.debug('dora', '[plugins] ' + (0, _stringify2.default)(plugins));
var app = context.app = (0, _koa2.default)();
var server = void 0;
process.on('exit', function () {
_applyPlugins('process.exit');
});
_async2.default.series([function (next) {
return _applyPlugins('middleware.before', null, next);
}, function (next) {
return _applyPlugins('middleware', null, next);
}, function (next) {
return _applyPlugins('middleware.after', null, next);
}, function (next) {
server = context.server = _http2.default.createServer(app.callback());next();
}, function (next) {
return _applyPlugins('server.before', null, next);
}, function (next) {
server.listen(port, function () {
if (context.get('__server_listen_log')) {
_spmLog2.default.info('dora', 'listened on ' + port);
}
context.set('__ready', true);
next();
});
}, function (next) {
return _applyPlugins('server.after', null, next);
}], callback);
}
module.exports = exports['default'];