morpha
Version:
A Web-IDE or Desktop-IDE creator.
139 lines (114 loc) • 5.44 kB
JavaScript
;
var _stringify = require('babel-runtime/core-js/json/stringify');
var _stringify2 = _interopRequireDefault(_stringify);
var _typeof2 = require('babel-runtime/helpers/typeof');
var _typeof3 = _interopRequireDefault(_typeof2);
var _taggedTemplateLiteral2 = require('babel-runtime/helpers/taggedTemplateLiteral');
var _taggedTemplateLiteral3 = _interopRequireDefault(_taggedTemplateLiteral2);
var _templateObject = (0, _taggedTemplateLiteral3.default)(['Morpha Editor v', '\n\n Usage: morpha [options] [path ...]\n\n One or more paths to files or folders may be specified. If there is an\n existing Morpha window that contains all of the given folders, the paths\n will be opened in that window. Otherwise, they will be opened in a new\n window.\n\n Environment Variables:\n\n MORPHA_HOME The root path for all configuration files and folders.\n Defaults to `~/.morpha`.\n'], ['Morpha Editor v', '\n\n Usage: morpha [options] [path ...]\n\n One or more paths to files or folders may be specified. If there is an\n existing Morpha window that contains all of the given folders, the paths\n will be opened in that window. Otherwise, they will be opened in a new\n window.\n\n Environment Variables:\n\n MORPHA_HOME The root path for all configuration files and folders.\n Defaults to \\`~/.morpha\\`.\n']);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
global.shellStartTime = Date.now();
var _require = require('electron'),
app = _require.app;
var _require2 = require('../../package.json'),
version = _require2.version;
var isPlainObject = require('lodash/isPlainObject');
var _require3 = require('./utils'),
getMorphaDirectory = _require3.getMorphaDirectory,
getResourcePath = _require3.getResourcePath,
getHomeDirectory = _require3.getHomeDirectory;
var path = require('path');
var yargs = require('yargs');
var dedent = require('dedent');
process.on('uncaughtException', function () {
var error = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
if (error.stack !== null) {
console.error(error.stack);
}
});
function writeFullVersion() {
process.stdout.write('App : ' + version + '\n' + ('Electron: ' + process.versions.electron + '\n') + ('Chrome : ' + process.versions.chrome + '\n') + ('Node : ' + process.versions.node + '\n'));
}
function parseCommandLine() {
var options = yargs(process.argv.slice(1)).wrap(100);
options.usage(dedent(_templateObject, version));
options.alias('p', 'packages').array('p').describe('p', 'Packages auto loaded.');
options.alias('h', 'help').boolean('h').describe('h', 'Print this usage message.');
// options.alias('n', 'new-window').boolean('n').describe('n', 'Open a new window.')
options.alias('v', 'version').boolean('v').describe('v', 'Print the version information.');
options.alias('d', 'dev-mode').boolean('d').describe('d', 'Run in development mode.');
options.alias('t', 'test-mode').boolean('t').describe('t', 'Run in test mode.');
options.alias('c', 'config').string('c').describe('c', 'Global config path.');
var args = options.argv;
var pathsToOpen = args._;
var newWindow = args['new-window'];
var urlsToOpen = [];
var devMode = args.devMode;
var config = {};
if (args.help) {
yargs.showHelp();
process.exit(0);
}
if (args.version) {
writeFullVersion();
process.exit(0);
}
if (args.config) {
config = require(path.join(process.cwd(), args.config));
if (!isPlainObject(config)) {
throw new Error('Morpha global config must be a plain object but get ' + (typeof config === 'undefined' ? 'undefined' : (0, _typeof3.default)(config)));
}
}
return {
newWindow: newWindow,
pathsToOpen: pathsToOpen,
urlsToOpen: urlsToOpen,
devMode: devMode,
config: config,
readyLoadPackages: args.packages ? args.packages.map(function (pack) {
return path.join(process.cwd(), pack);
}) : [],
test: !!args.test,
isElectron: true,
morphaHomePath: getMorphaDirectory(),
homePath: getHomeDirectory(),
resourcePath: getResourcePath(),
cwd: process.cwd()
};
}
function setupCompile(args) {
var compile = require('./compile');
compile.setCacheDirectory(path.join(getMorphaDirectory(), 'compile-cache'));
if (args.devMode) {
// todo Clear cache when restart in dev mode
compile.clearCacheFromDirectory();
}
}
function startCrashReporter() {
// todo: Crash Report
}
function start() {
var args = parseCommandLine();
args.env = process.env;
process.args = args;
setupCompile(args);
app.on('will-finish-launching', startCrashReporter);
app.on('ready', function () {
var createMorphaApp = require('../app/processLoader').default;
var morphaApp = createMorphaApp(args);
morphaApp.start();
if (args.devMode) {
console.log('Compile hits: ' + (0, _stringify2.default)(require('./compile').getCacheStats()));
}
console.log('App load time: ' + (Date.now() - global.shellStartTime) + 'ms');
});
// Quit when all windows are closed.
app.on('window-all-closed', function () {
// On macOS it is common for applications and their menu bar
// to stay active until the user quits explicitly with Cmd + Q
if (process.platform !== 'darwin') {
app.quit();
}
});
}
start();