UNPKG

motion

Version:

motion - moving development forward

236 lines (182 loc) 7.79 kB
exports.__esModule = true; exports['default'] = wport; var readScripts = _asyncToGenerator(function* () { try { var dir = yield _libFns.readdir(OPTS.outDir); var files = dir.filter(function (f) { return (/\.jsf?$/.test(f.name) ); }); // filter sourcemaps var hasFiles = files.length; var paths = []; // deterministic order if (hasFiles) { paths = files.map(function (file) { return file.path; }).sort(); var mainIndex = 0; paths.forEach(function (p, i) { if (/[Mm]ain\.jsf?$/.test(p)) mainIndex = i; }); if (mainIndex !== -1) paths.move(mainIndex, 0); } return paths; } catch (e) { _libFns.handleError(e); } }); var getScripts = _asyncToGenerator(function* (_ref) { var disableTools = _ref.disableTools; try { var files = yield readScripts(); return ['<div id="_motiondevtools" class="_motiondevtools"></div>', newLine, '<!-- MOTION JS -->', '<script src="/__/react.dev.js"></script>', '<script src="/__/motion.dev.js"></script>', '<script>_MOTION_WEBSOCKET_PORT = ' + wport() + '</script>', '<script src="/__/devtools.dev.js"></script>', '\n <script>\n var Motion = exports[\'motion\']\n Motion.init()\n </script>\n', // devtools disableTools ? '' : ['<script src="/__/tools/externals.js"></script>', '<script src="/__/tools/internals.js"></script>', '<script src="/__/tools/motiontools.js"></script>', '\n <script>\n Motion.run("motiontools", { node: "_motiondevtools" })\n </script>\n'].join(newLine), // user files newLine, '<!-- APP -->', '\n <script>\n // set up for dev mode, essentially faking a closure on window\n Motion = Motion.run("' + OPTS.saneName + '")\n </script>\n', '<script src="/__/externals.js" id="__motionExternals"></script>', '<script src="/__/internals.js" id="__motionInternals"></script>', scriptTags(files), '<script>Motion.start()</script>', '<!-- END APP -->'].join(newLine); } catch (e) { _libFns.handleError(e); } }); var getPathsInDir = _asyncToGenerator(function* (_dir) { var dir = yield _libFns.readdir(_dir); if (!dir || !dir.length) return []; return dir.map(function (file) { return file.path; }).sort(); }); var getStyles = _asyncToGenerator(function* () { var styles = yield getPathsInDir(OPTS.styleDir); return styles.map(function (p) { return stylesheetLink('styles/' + p); }).join(newLine); }); var getExternalStyles = _asyncToGenerator(function* () { try { var styles = yield getPathsInDir(_libFns.p(OPTS.deps.assetsDir, 'styles')); return styles.map(function (p) { return stylesheetLink('externalStyles/' + p); }).join(newLine); } catch (e) { return []; } }); var makeTemplate = _asyncToGenerator(function* (req) { try { var templatePath = _libFns.p(OPTS.appDir, OPTS.template); var template = yield _libFns.readFile(templatePath); var disableTools = devToolsDisabled(req); var scripts = yield getScripts({ disableTools: disableTools }); var styles = yield getStyles(); var externalStyles = yield getExternalStyles(); return template.replace('<!-- STYLES -->', styles).replace('<!-- EXTERNAL STYLES -->', externalStyles).replace('<!-- SCRIPTS -->', scripts); } catch (e) { _libFns.handleError(e); } }); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { var callNext = step.bind(null, 'next'); var callThrow = step.bind(null, 'throw'); function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(callNext, callThrow); } } callNext(); }); }; } var _regeneratorRuntimeOnly = require('regenerator-runtime-only'); var _regeneratorRuntimeOnly2 = _interopRequireDefault(_regeneratorRuntimeOnly); var _express = require('express'); var _express2 = _interopRequireDefault(_express); var _cors = require('cors'); var _cors2 = _interopRequireDefault(_cors); var _portfinder = require('portfinder'); var _portfinder2 = _interopRequireDefault(_portfinder); var _motionClient = require('motion-client'); var _motionClient2 = _interopRequireDefault(_motionClient); var _motionTools = require('motion-tools'); var _motionTools2 = _interopRequireDefault(_motionTools); var _libFns = require('./lib/fns'); global.regeneratorRuntime = _regeneratorRuntimeOnly2['default']; global.print = console.log.bind(console); var newLine = "\n"; var OPTS = undefined, PORT = undefined; function wport() { return 2283 + parseInt(PORT, 10); } Array.prototype.move = function (from, to) { this.splice(to, 0, this.splice(from, 1)[0]); }; function scriptTags(files) { return files.map(function (file) { return '<script src="/_/' + file + '" class="__motionScript"></script>'; }).join(newLine); } function devToolsDisabled(req) { return OPTS.config && OPTS.config.tools === 'false' || req && req.query && req.query['!dev']; } var stylesheetLink = function stylesheetLink(name) { return '<link rel="stylesheet" href="/__/' + name + '" />'; }; function run() { return new Promise(function (res, rej) { var server = _express2['default']({ env: 'production' }); server.use(_cors2['default']()); server.use(function (req, res, next) { res.header('Access-Control-Allow-Origin', '*'); next(); }); var staticOpts = { redirect: false }; // USER files // user js files at '/_/filename.js' server.use('/_', _express2['default']['static']('.motion/.internal/out')); // user non-js files server.use('/', _express2['default']['static']('.', staticOpts)); // user static files... server.use('/_/static', _express2['default']['static']('.motion/static')); // INTERNAL files server.use('/__', _express2['default']['static']('.motion/.internal/deps')); server.use('/__/styles', _express2['default']['static']('.motion/.internal/styles')); server.use('/__/externalStyles', _express2['default']['static']('.motion/.internal/deps/assets/styles')); // tools.js server.use('/__/tools', _express2['default']['static'](_libFns.p(_motionTools2['default'](), 'build', '_'))); // motion.js & react.js server.use('/__', _express2['default']['static'](_libFns.p(_motionClient2['default'](), 'dist'))); server.get('*', function (req, res) { afterFirstBuild(_asyncToGenerator(function* () { try { var template = yield makeTemplate(req); res.send(template.replace(/\/static/g, '/_/static')); } catch (e) { print(e, e.stack); } })); }); function afterFirstBuild(cb) { if (OPTS.hasRunInitialBuild) cb();else setTimeout(function () { return afterFirstBuild(cb); }, 150); } function serverListen(port) { PORT = port; server.listen(port, host); process.send(JSON.stringify({ host: host, port: port })); } var host = OPTS.config.host || 'localhost'; var port = OPTS.config.port || OPTS.defaultPort; // if no specified port, find open one if (!OPTS.config.port) { _portfinder2['default'].basePort = port; _portfinder2['default'].getPort({ host: host }, _libFns.handleError(serverListen)); } else { serverListen(port); } }); } var ran = false; process.on('message', function (opts) { if (opts === 'EXIT') return process.exit(2); OPTS = JSON.parse(opts); if (ran) return; ran = true; run(); }); module.exports = exports['default']; //# sourceMappingURL=serverProcess.js.map