UNPKG

motion

Version:

motion - moving development forward

278 lines (218 loc) 8.23 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); let readScripts = function () { var ref = _asyncToGenerator(function* () { try { const dir = yield (0, _fns.readdir)(OPTS.outDir); const files = dir.filter(function (f) { return (/\.jsf?$/.test(f.name) ); }); // filter sourcemaps const hasFiles = files.length; let paths = []; // deterministic order if (hasFiles) { paths = files.map(function (file) { return file.path; }).sort(); let 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) { (0, _fns.handleError)(e); } }); return function readScripts() { return ref.apply(this, arguments); }; }(); let getScripts = function () { var ref = _asyncToGenerator(function* (_ref) { let disableTools = _ref.disableTools; try { const 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>', ` <script> var Motion = exports['motion'] Motion.init() </script> `, // devtools disableTools ? '' : ['<script src="/__/tools/externals.js"></script>', '<script src="/__/tools/internals.js"></script>', '<script src="/__/tools/motiontools.js"></script>', ` <script> Motion.run("motiontools", { node: "_motiondevtools" }) </script> `].join(newLine), // user files newLine, '<!-- APP -->', ` <script> // set up for dev mode, essentially faking a closure on window Motion = Motion.run("${ OPTS.saneName }") </script> `, '<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) { (0, _fns.handleError)(e); } }); return function getScripts(_x) { return ref.apply(this, arguments); }; }(); let getPathsInDir = function () { var ref = _asyncToGenerator(function* (_dir) { const dir = yield (0, _fns.readdir)(_dir); if (!dir || !dir.length) return []; return dir.map(function (file) { return file.path; }).sort(); }); return function getPathsInDir(_x2) { return ref.apply(this, arguments); }; }(); let getStyles = function () { var ref = _asyncToGenerator(function* () { const styles = yield getPathsInDir(OPTS.styleDir); return styles.map(function (p) { return stylesheetLink(`styles/${ p }`); }).join(newLine); }); return function getStyles() { return ref.apply(this, arguments); }; }(); let getExternalStyles = function () { var ref = _asyncToGenerator(function* () { try { const styles = yield getPathsInDir((0, _fns.p)(OPTS.deps.assetsDir, 'styles')); return styles.map(function (p) { return stylesheetLink(`externalStyles/${ p }`); }).join(newLine); } catch (e) { return []; } }); return function getExternalStyles() { return ref.apply(this, arguments); }; }(); let makeTemplate = function () { var ref = _asyncToGenerator(function* (req) { try { const templatePath = (0, _fns.p)(OPTS.appDir, OPTS.template); const template = yield (0, _fns.readFile)(templatePath); const disableTools = devToolsDisabled(req); const scripts = yield getScripts({ disableTools }); const styles = yield getStyles(); const externalStyles = yield getExternalStyles(); return template.replace('<!-- STYLES -->', styles).replace('<!-- EXTERNAL STYLES -->', externalStyles).replace('<!-- SCRIPTS -->', scripts); } catch (e) { (0, _fns.handleError)(e); } }); return function makeTemplate(_x3) { return ref.apply(this, arguments); }; }(); exports.default = wport; 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 _fns = require('./lib/fns'); 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) { 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 { return Promise.resolve(value).then(function (value) { return step("next", value); }, function (err) { return step("throw", err); }); } } return step("next"); }); }; } global.print = console.log.bind(console); const newLine = "\n"; let OPTS, PORT; 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(file => `<script src="/_/${ file }" class="__motionScript"></script>`).join(newLine); } function devToolsDisabled(req) { return OPTS.config && OPTS.config.tools === 'false' || req && req.query && req.query['!dev']; } const stylesheetLink = name => `<link rel="stylesheet" href="/__/${ name }" />`; function run() { return new Promise((res, rej) => { var server = (0, _express2.default)({ env: 'production' }); server.use((0, _cors2.default)()); server.use((req, res, next) => { res.header('Access-Control-Allow-Origin', '*'); next(); }); const 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((0, _fns.p)((0, _motionTools2.default)(), 'build', '_'))); // motion.js & react.js server.use('/__', _express2.default.static((0, _fns.p)((0, _motionClient2.default)(), 'dist'))); server.get('*', function (req, res) { afterFirstBuild(_asyncToGenerator(function* () { try { const 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(() => afterFirstBuild(cb), 150); } function serverListen(port) { PORT = port; server.listen(port, host); process.send(JSON.stringify({ host, port })); } const host = OPTS.config.host || 'localhost'; const 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 }, (0, _fns.handleError)(serverListen)); } else { serverListen(port); } }); } let ran = false; process.on('message', function (opts) { if (opts === 'EXIT') return process.exit(2); OPTS = JSON.parse(opts); if (ran) return; ran = true; run(); }); //# sourceMappingURL=serverProcess.js.map