meteor-desktop
Version:
Build a Meteor's desktop client with hot code push.
142 lines (110 loc) • 13.9 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _runtime = _interopRequireDefault(require("regenerator-runtime/runtime"));
var _fs = _interopRequireDefault(require("fs"));
var _del = _interopRequireDefault(require("del"));
var _shelljs = _interopRequireDefault(require("shelljs"));
var _path = _interopRequireDefault(require("path"));
var _log = _interopRequireDefault(require("./log"));
var _skeletonDependencies = _interopRequireDefault(require("./skeletonDependencies"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
// eslint-disable-next-line no-unused-vars
const {
join
} = _path.default;
_shelljs.default.config.fatal = true;
/**
* Represents the .desktop dir scaffold.
*/
class ElectronAppScaffold {
/**
* @param {MeteorDesktop} $ - context
* @constructor
*/
constructor($) {
this.log = new _log.default('electronAppScaffold');
this.$ = $;
this.packageJson = {
name: 'MyMeteorApp',
main: this.$.env.isProductionBuild() ? 'app.asar/index.js' : 'app/index.js',
dependencies: Object.assign({}, _skeletonDependencies.default)
};
if (!this.$.env.isProductionBuild() || this.$.env.options.prodDebug) {
this.packageJson.dependencies.devtron = '1.4.0';
this.packageJson.dependencies['electron-debug'] = '1.5.0';
}
}
/**
* Just a public getter from the default package.json object.
* @returns {Object}
*/
getDefaultPackageJson() {
return Object.assign({}, this.packageJson);
}
/**
* Clear the electron app. Removes everything except the node_modules which would be a waste
* to delete. Later `npm prune` will keep it clear.
*/
clear() {
if (!this.$.utils.exists(this.$.env.paths.electronApp.root)) {
this.log.verbose(`creating ${this.$.env.paths.electronApp.rootName}`);
_shelljs.default.mkdir(this.$.env.paths.electronApp.root);
}
return (0, _del.default)([`${this.$.env.paths.electronApp.root}${_path.default.sep}*`, `!${this.$.env.paths.electronApp.nodeModules}`], {
force: true
});
}
/**
* Just copies the Skeleton App into the electron app.
*/
copySkeletonApp() {
this.log.verbose('copying skeleton app');
try {
_shelljs.default.cp('-rf', join(this.$.env.paths.meteorDesktop.skeleton, '*'), this.$.env.paths.electronApp.appRoot + _path.default.sep);
} catch (e) {
this.log.error('error while copying skeleton app:', e);
process.exit(1);
}
}
/**
* After clearing the electron app path, copies a fresh skeleton.
*/
async make() {
try {
this.log.verbose(`clearing ${this.$.env.paths.electronApp.rootName}`);
await this.clear();
} catch (e) {
this.log.error(`error while removing ${this.$.env.paths.electronApp.root}: `, e);
process.exit(1);
}
this.createAppRoot();
this.copySkeletonApp(); // TODO: hey, wait, .gitignore is not needed - right?
/*
this.log.debug('creating .gitignore');
fs.writeFileSync(this.$.env.paths.electronApp.gitIgnore, [
'node_modules'
].join('\n'));
*/
this.log.verbose('writing package.json');
_fs.default.writeFileSync(this.$.env.paths.electronApp.packageJson, JSON.stringify(this.packageJson, null, 2));
}
/**
* Creates the app directory in the electron app.
*/
createAppRoot() {
try {
this.log.verbose(`creating ${this.$.env.paths.electronApp.appRoot}`);
_fs.default.mkdirSync(this.$.env.paths.electronApp.appRoot);
} catch (e) {
if (e.code !== 'EEXIST') {
this.log.error(`error while creating dir: ${this.$.env.paths.electronApp.appRoot}: `, e);
process.exit(1);
}
}
}
}
exports.default = ElectronAppScaffold;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9lbGVjdHJvbkFwcFNjYWZmb2xkLmpzIl0sIm5hbWVzIjpbImpvaW4iLCJwYXRoIiwic2hlbGwiLCJjb25maWciLCJmYXRhbCIsIkVsZWN0cm9uQXBwU2NhZmZvbGQiLCJjb25zdHJ1Y3RvciIsIiQiLCJsb2ciLCJMb2ciLCJwYWNrYWdlSnNvbiIsIm5hbWUiLCJtYWluIiwiZW52IiwiaXNQcm9kdWN0aW9uQnVpbGQiLCJkZXBlbmRlbmNpZXMiLCJPYmplY3QiLCJhc3NpZ24iLCJvcHRpb25zIiwicHJvZERlYnVnIiwiZGV2dHJvbiIsImdldERlZmF1bHRQYWNrYWdlSnNvbiIsImNsZWFyIiwidXRpbHMiLCJleGlzdHMiLCJwYXRocyIsImVsZWN0cm9uQXBwIiwicm9vdCIsInZlcmJvc2UiLCJyb290TmFtZSIsIm1rZGlyIiwic2VwIiwibm9kZU1vZHVsZXMiLCJmb3JjZSIsImNvcHlTa2VsZXRvbkFwcCIsImNwIiwibWV0ZW9yRGVza3RvcCIsInNrZWxldG9uIiwiYXBwUm9vdCIsImUiLCJlcnJvciIsInByb2Nlc3MiLCJleGl0IiwibWFrZSIsImNyZWF0ZUFwcFJvb3QiLCJmcyIsIndyaXRlRmlsZVN5bmMiLCJKU09OIiwic3RyaW5naWZ5IiwibWtkaXJTeW5jIiwiY29kZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBOztBQUNBOzs7O0FBUkE7QUFVQSxNQUFNO0FBQUVBLEVBQUFBO0FBQUYsSUFBV0MsYUFBakI7QUFDQUMsaUJBQU1DLE1BQU4sQ0FBYUMsS0FBYixHQUFxQixJQUFyQjtBQUVBOzs7O0FBR2UsTUFBTUMsbUJBQU4sQ0FBMEI7QUFDckM7Ozs7QUFJQUMsRUFBQUEsV0FBVyxDQUFDQyxDQUFELEVBQUk7QUFDWCxTQUFLQyxHQUFMLEdBQVcsSUFBSUMsWUFBSixDQUFRLHFCQUFSLENBQVg7QUFDQSxTQUFLRixDQUFMLEdBQVNBLENBQVQ7QUFFQSxTQUFLRyxXQUFMLEdBQW1C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c2VkLXZhcnNcbmltcG9ydCByZWdlbmVyYXRvclJ1bnRpbWUgZnJvbSAncmVnZW5lcmF0b3ItcnVudGltZS9ydW50aW1lJztcbmltcG9ydCBmcyBmcm9tICdmcyc7XG5pbXBvcnQgZGVsIGZyb20gJ2RlbCc7XG5pbXBvcnQgc2hlbGwgZnJvbSAnc2hlbGxqcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcblxuaW1wb3J0IExvZyBmcm9tICcuL2xvZyc7XG5pbXBvcnQgZGVwZW5kZW5jaWVzIGZyb20gJy4vc2tlbGV0b25EZXBlbmRlbmNpZXMnO1xuXG5jb25zdCB7IGpvaW4gfSA9IHBhdGg7XG5zaGVsbC5jb25maWcuZmF0YWwgPSB0cnVlO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIC5kZXNrdG9wIGRpciBzY2FmZm9sZC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRWxlY3Ryb25BcHBTY2FmZm9sZCB7XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtNZXRlb3JEZXNrdG9wfSAkIC0gY29udGV4dFxuICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKCQpIHtcbiAgICAgICAgdGhpcy5sb2cgPSBuZXcgTG9nKCdlbGVjdHJvbkFwcFNjYWZmb2xkJyk7XG4gICAgICAgIHRoaXMuJCA9ICQ7XG5cbiAgICAgICAgdGhpcy5wYWNrYWdlSnNvbiA9IHtcbiAgICAgICAgICAgIG5hbWU6ICdNeU1ldGVvckFwcCcsXG4gICAgICAgICAgICBtYWluOiAodGhpcy4kLmVudi5pc1Byb2R1Y3Rpb25CdWlsZCgpKSA/XG4gICAgICAgICAgICAgICAgJ2FwcC5hc2FyL2luZGV4LmpzJyA6ICdhcHAvaW5kZXguanMnLFxuICAgICAgICAgICAgZGVwZW5kZW5jaWVzOiBPYmplY3QuYXNzaWduKHt9LCBkZXBlbmRlbmNpZXMpXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKCF0aGlzLiQuZW52LmlzUHJvZHVjdGlvbkJ1aWxkKCkgfHwgdGhpcy4kLmVudi5vcHRpb25zLnByb2REZWJ1Zykge1xuICAgICAgICAgICAgdGhpcy5wYWNrYWdlSnNvbi5kZXBlbmRlbmNpZXMuZGV2dHJvbiA9ICcxLjQuMCc7XG4gICAgICAgICAgICB0aGlzLnBhY2thZ2VKc29uLmRlcGVuZGVuY2llc1snZWxlY3Ryb24tZGVidWcnXSA9ICcxLjUuMCc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBKdXN0IGEgcHVibGljIGdldHRlciBmcm9tIHRoZSBkZWZhdWx0IHBhY2thZ2UuanNvbiBvYmplY3QuXG4gICAgICogQHJldHVybnMge09iamVjdH1cbiAgICAgKi9cbiAgICBnZXREZWZhdWx0UGFja2FnZUpzb24oKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCB0aGlzLnBhY2thZ2VKc29uKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbGVhciB0aGUgZWxlY3Ryb24gYXBwLiBSZW1vdmVzIGV2ZXJ5dGhpbmcgZXhjZXB0IHRoZSBub2RlX21vZHVsZXMgd2hpY2ggd291bGQgYmUgYSB3YXN0ZVxuICAgICAqIHRvIGRlbGV0ZS4gTGF0ZXIgYG5wbSBwcnVuZWAgd2lsbCBrZWVwIGl0IGNsZWFyLlxuICAgICAqL1xuICAgIGNsZWFyKCkge1xuICAgICAgICBpZiAoIXRoaXMuJC51dGlscy5leGlzdHModGhpcy4kLmVudi5wYXRocy5lbGVjdHJvbkFwcC5yb290KSkge1xuICAgICAgICAgICAgdGhpcy5sb2cudmVyYm9zZShgY3JlYXRpbmcgJHt0aGlzLiQuZW52LnBhdGhzLmVsZWN0cm9uQXBwLnJvb3ROYW1lfWApO1xuICAgICAgICAgICAgc2hlbGwubWtkaXIodGhpcy4kLmVudi5wYXRocy5lbGVjdHJvbkFwcC5yb290KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkZWwoW1xuICAgICAgICAgICAgYCR7dGhpcy4kLmVudi5wYXRocy5lbGVjdHJvbkFwcC5yb290fSR7cGF0aC5zZXB9KmAsXG4gICAgICAgICAgICBgISR7dGhpcy4kLmVudi5wYXRocy5lbGVjdHJvbkFwcC5ub2RlTW9kdWxlc31gXG4gICAgICAgIF0sIHsgZm9yY2U6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSnVzdCBjb3BpZXMgdGhlIFNrZWxldG9uIEFwcCBpbnRvIHRoZSBlbGVjdHJvbiBhcHAuXG4gICAgICovXG4gICAgY29weVNrZWxldG9uQXBwKCkge1xuICAgICAgICB0aGlzLmxvZy52ZXJib3NlKCdjb3B5aW5nIHNrZWxldG9uIGFwcCcpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgc2hlbGwuY3AoXG4gICAgICAgICAgICAgICAgJy1yZicsXG4gICAgICAgICAgICAgICAgam9pbih0aGlzLiQuZW52LnBhdGhzLm1ldGVvckRlc2t0b3Auc2tlbGV0b24sICcqJyksXG4gICAgICAgICAgICAgICAgdGhpcy4kLmVudi5wYXRocy5lbGVjdHJvbkFwcC5hcHBSb290ICsgcGF0aC5zZXBcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHRoaXMubG9nLmVycm9yKCdlcnJvciB3aGlsZSBjb3B5aW5nIHNrZWxldG9uIGFwcDonLCBlKTtcbiAgICAgICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFmdGVyIGNsZWFyaW5nIHRoZSBlbGVjdHJvbiBhcHAgcGF0aCwgY29waWVzIGEgZnJlc2ggc2tlbGV0b24uXG4gICAgICovXG4gICAgYXN5bmMgbWFrZSgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMubG9nLnZlcmJvc2UoYGNsZWFyaW5nICR7dGhpcy4kLmVudi5wYXRocy5lbGVjdHJvbkFwcC5yb290TmFtZX1gKTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2xlYXIoKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhpcy5sb2cuZXJyb3IoXG4gICAgICAgICAgICAgICAgYGVycm9yIHdoaWxlIHJlbW92aW5nICR7dGhpcy4kLmVudi5wYXRocy5lbGVjdHJvbkFwcC5yb290fTogYCwgZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY3JlYXRlQXBwUm9vdCgpO1xuXG4gICAgICAgIHRoaXMuY29weVNrZWxldG9uQXBwKCk7XG5cbiAgICAgICAgLy8gVE9ETzogaGV5LCB3YWl0LCAuZ2l0aWdub3JlIGlzIG5vdCBuZWVkZWQgLSByaWdodD9cbiAgICAgICAgLypcbiAgICAgICAgdGhpcy5sb2cuZGVidWcoJ2NyZWF0aW5nIC5naXRpZ25vcmUnKTtcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyh0aGlzLiQuZW52LnBhdGhzLmVsZWN0cm9uQXBwLmdpdElnbm9yZSwgW1xuICAgICAgICAgICAgJ25vZGVfbW9kdWxlcydcbiAgICAgICAgXS5qb2luKCdcXG4nKSk7XG4gICAgICAgICovXG4gICAgICAgIHRoaXMubG9nLnZlcmJvc2UoJ3dyaXRpbmcgcGFja2FnZS5qc29uJyk7XG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgICAgICAgICB0aGlzLiQuZW52LnBhdGhzLmVsZWN0cm9uQXBwLnBhY2thZ2VKc29uLCBKU09OLnN0cmluZ2lmeSh0aGlzLnBhY2thZ2VKc29uLCBudWxsLCAyKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgdGhlIGFwcCBkaXJlY3RvcnkgaW4gdGhlIGVsZWN0cm9uIGFwcC5cbiAgICAgKi9cbiAgICBjcmVhdGVBcHBSb290KCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5sb2cudmVyYm9zZShgY3JlYXRpbmcgJHt0aGlzLiQuZW52LnBhdGhzLmVsZWN0cm9uQXBwLmFwcFJvb3R9YCk7XG4gICAgICAgICAgICBmcy5ta2RpclN5bmModGhpcy4kLmVudi5wYXRocy5lbGVjdHJvbkFwcC5hcHBSb290KTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKGUuY29kZSAhPT0gJ0VFWElTVCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZy5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgYGVycm9yIHdoaWxlIGNyZWF0aW5nIGRpcjogJHt0aGlzLiQuZW52LnBhdGhzLmVsZWN0cm9uQXBwLmFwcFJvb3R9OiBgLCBlXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=