UNPKG

motion

Version:

motion - moving development forward

246 lines (194 loc) 7.41 kB
exports.__esModule = true; var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; var init = _asyncToGenerator(function* (cli) { try { // init OPTS.appDir = _path2['default'].normalize(process.cwd()); OPTS.name = cli.name || _path2['default'].basename(process.cwd()); OPTS.saneName = _libFns.sanitize(cli.name); OPTS.hasRunInitialBuild = false; OPTS.defaultPort = 4000; setupCliOpts(cli); setupDirs(); // from flint yield migration(); // config var config = yield loadConfigs(cli); setupConfig(cli, config); } catch (e) { _libFns.handleError(e); } } // TODO remove in minor ); exports.init = init; var migration = _asyncToGenerator(function* () { var flintDir = _libFns.p(OPTS.appDir, '.flint'); if (yield _libFns.exists(flintDir)) { // .flint => .motion yield _libFns2['default'].move(flintDir, OPTS.motionDir); // index.html "#_flintapp" => "#_motionapp" _libFns2['default'].replace({ regex: '#_flintapp', replacement: '#_motionapp', paths: [OPTS.motionDir], recursive: false, silent: true }); // .motion/flint.json => .motion/config.js var oldConfLoc = _libFns.p(OPTS.motionDir, 'flint.json'); if (yield _libFns.exists(oldConfLoc)) { console.log(' Migrating flint config to motion (flint.json => config.js)...\n'); yield _libFns2['default'].move(oldConfLoc, OPTS.configFile); // add module.exports var oldConf = yield _libFns.readFile(OPTS.configFile); yield _libFns.writeFile(OPTS.configFile, 'module.exports = ' + oldConf); } } }); var loadConfigs = _asyncToGenerator(function* () { var result = undefined; try { var file = yield parseConfig(); if (file) { var out = yield _libFns.readFile(file); result = eval(out); } else { print('No .motion/config.js file found!'); } } catch (e) { _libFns.handleError(e); } return modeMergedConfig(result || {}); }); var setupCliOpts = _asyncToGenerator(function* (cli) { OPTS.version = cli.version; OPTS.debug = cli.debug; OPTS.watch = cli.watch; OPTS.reset = cli.reset; OPTS.build = cli.build; OPTS.out = cli.out; // ensure we dont clobber things if (cli.out && (yield _libFns.exists(cli.out))) { console.error('\n Build dir already exists! Ensure you target an empty directory.\n'.red); process.exit(1); } }); exports.set = set; exports.get = get; var serialize = _asyncToGenerator(function* () { yield _disk2['default'].state.write(function (state, write) { state.opts = _extends({}, OPTS); delete state.opts.state; // prevent circular structure write(state); }); }); exports.serialize = serialize; exports.debug = debug; 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 _path = require('path'); var _path2 = _interopRequireDefault(_path); var _libFns = require('./lib/fns'); var _libFns2 = _interopRequireDefault(_libFns); var _disk = require('./disk'); var _disk2 = _interopRequireDefault(_disk); var _util = require('util'); var _util2 = _interopRequireDefault(_util); var _webpack = require('webpack'); var _webpack2 = _interopRequireDefault(_webpack); var _bundlerLibGetWebpackErrors = require('./bundler/lib/getWebpackErrors'); var _bundlerLibGetWebpackErrors2 = _interopRequireDefault(_bundlerLibGetWebpackErrors); var OPTS = {}; function modeMergedConfig(config) { var modeSpecificConfig = config[OPTS.build ? 'build' : 'run']; var merged = Object.assign({}, config, modeSpecificConfig); return merged; } function parseConfig() { return new Promise(_asyncToGenerator(function* (resolve, reject) { try { if (!(yield _libFns.exists(OPTS.configFile))) resolve(false); // for json loader var runnerRoot = _path2['default'].resolve(_path2['default'].join(__dirname, '..', '..')); var runnerModules = _path2['default'].join(runnerRoot, 'node_modules'); _webpack2['default']({ context: OPTS.motionDir, entry: './config.js', output: { filename: 'user-config.js', path: './.motion/.internal', libraryTarget: 'commonjs2' }, module: { loaders: [{ test: /\.json$/, loader: 'json' }] }, resolveLoader: { root: runnerModules } }, function (err, stats) { var error = _bundlerLibGetWebpackErrors2['default']('config', err, stats); if (error) reject(error);else resolve(_libFns.p(OPTS.internalDir, 'user-config.js')); }); } catch (e) { reject(e); } })); } function setupDirs() { // base dirs OPTS.motionDir = _libFns.p(OPTS.appDir, '.motion'); OPTS.modulesDir = _libFns.p(OPTS.motionDir, 'node_modules'); OPTS.internalDir = _libFns.p(OPTS.motionDir, '.internal'); OPTS.template = OPTS.template || '.motion/index.html'; OPTS.buildDir = OPTS.out ? _libFns.p(OPTS.out) : _libFns.p(OPTS.motionDir, 'build'); // deps dirs OPTS.deps = {}; OPTS.deps.dir = _libFns.p(OPTS.internalDir, 'deps'); OPTS.deps.internalDir = _libFns.p(OPTS.internalDir, 'deps', 'internal'); OPTS.deps.assetsDir = _libFns.p(OPTS.deps.dir, 'assets'); OPTS.deps.internalsIn = _libFns.p(OPTS.deps.dir, 'internals.in.js'); OPTS.deps.internalsOut = _libFns.p(OPTS.deps.dir, 'internals.js'); OPTS.deps.externalsIn = _libFns.p(OPTS.deps.dir, 'externals.in.js'); OPTS.deps.externalsOut = _libFns.p(OPTS.deps.dir, 'externals.js'); OPTS.deps.externalsPaths = _libFns.p(OPTS.deps.dir, 'externals.paths.js'); OPTS.configFile = _libFns.p(OPTS.motionDir, 'config.js'); OPTS.stateFile = _libFns.p(OPTS.internalDir, 'state.json'); OPTS.outDir = _libFns.p(OPTS.internalDir, 'out'); OPTS.styleDir = _libFns.p(OPTS.internalDir, 'styles'); OPTS.styleOutDir = _libFns.p(OPTS.buildDir, '_'); OPTS.styleOutName = 'styles.css'; } function setupConfig(cli, config) { // config OPTS.config = Object.assign({ minify: true, debug: false, routing: true }, config); // cli overrides config if (cli.nomin) OPTS.config.minify = false; if (cli.pretty) OPTS.config.pretty = true; if (cli.port) OPTS.config.port = cli.port; if (cli.host) OPTS.config.host = cli.host; } function set(key, val) { _libFns.log.opts('opts.set'.bold.yellow, key, val); OPTS[key] = val; return val; } function get(key) { return key ? OPTS[key] : OPTS; } function debug() { print(_util2['default'].inspect(OPTS, false, 10)); } // this is bit funky, but lets us do: // opts('dir') => path // opts.set('dir', 'other') function opts(name) { return get(name); } opts.set = set; opts.init = init; opts.serialize = serialize; opts.debug = debug; exports['default'] = opts;