@sharekey/meteor-desktop
Version:
Build a Meteor's desktop client with hot code push.
122 lines (113 loc) • 15.3 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) {
if (parseInt(this.packageJson.dependencies.electron) < 10) {
this.packageJson.dependencies.devtron = '1.4.0';
}
this.packageJson.dependencies['electron-debug'] = '3.0.1';
}
}
/**
* 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,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcnVudGltZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2ZzIiwiX2RlbCIsIl9zaGVsbGpzIiwiX3BhdGgiLCJfbG9nIiwiX3NrZWxldG9uRGVwZW5kZW5jaWVzIiwib2JqIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJqb2luIiwicGF0aCIsInNoZWxsIiwiY29uZmlnIiwiZmF0YWwiLCJFbGVjdHJvbkFwcFNjYWZmb2xkIiwiY29uc3RydWN0b3IiLCIkIiwibG9nIiwiTG9nIiwicGFja2FnZUpzb24iLCJuYW1lIiwibWFpbiIsImVudiIsImlzUHJvZHVjdGlvbkJ1aWxkIiwiZGVwZW5kZW5jaWVzIiwiT2JqZWN0IiwiYXNzaWduIiwib3B0aW9ucyIsInByb2REZWJ1ZyIsInBhcnNlSW50IiwiZWxlY3Ryb24iLCJkZXZ0cm9uIiwiZ2V0RGVmYXVsdFBhY2thZ2VKc29uIiwiY2xlYXIiLCJ1dGlscyIsImV4aXN0cyIsInBhdGhzIiwiZWxlY3Ryb25BcHAiLCJyb290IiwidmVyYm9zZSIsInJvb3ROYW1lIiwibWtkaXIiLCJkZWwiLCJzZXAiLCJub2RlTW9kdWxlcyIsImZvcmNlIiwiY29weVNrZWxldG9uQXBwIiwiY3AiLCJtZXRlb3JEZXNrdG9wIiwic2tlbGV0b24iLCJhcHBSb290IiwiZSIsImVycm9yIiwicHJvY2VzcyIsImV4aXQiLCJtYWtlIiwiY3JlYXRlQXBwUm9vdCIsImZzIiwid3JpdGVGaWxlU3luYyIsIkpTT04iLCJzdHJpbmdpZnkiLCJta2RpclN5bmMiLCJjb2RlIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uL2xpYi9lbGVjdHJvbkFwcFNjYWZmb2xkLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuaW1wb3J0IHJlZ2VuZXJhdG9yUnVudGltZSBmcm9tICdyZWdlbmVyYXRvci1ydW50aW1lL3J1bnRpbWUnO1xuaW1wb3J0IGZzIGZyb20gJ2ZzJztcbmltcG9ydCBkZWwgZnJvbSAnZGVsJztcbmltcG9ydCBzaGVsbCBmcm9tICdzaGVsbGpzJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuXG5pbXBvcnQgTG9nIGZyb20gJy4vbG9nJztcbmltcG9ydCBkZXBlbmRlbmNpZXMgZnJvbSAnLi9za2VsZXRvbkRlcGVuZGVuY2llcyc7XG5cbmNvbnN0IHsgam9pbiB9ID0gcGF0aDtcbnNoZWxsLmNvbmZpZy5mYXRhbCA9IHRydWU7XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgLmRlc2t0b3AgZGlyIHNjYWZmb2xkLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbGVjdHJvbkFwcFNjYWZmb2xkIHtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge01ldGVvckRlc2t0b3B9ICQgLSBjb250ZXh0XG4gICAgICogQGNvbnN0cnVjdG9yXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoJCkge1xuICAgICAgICB0aGlzLmxvZyA9IG5ldyBMb2coJ2VsZWN0cm9uQXBwU2NhZmZvbGQnKTtcbiAgICAgICAgdGhpcy4kID0gJDtcblxuICAgICAgICB0aGlzLnBhY2thZ2VKc29uID0ge1xuICAgICAgICAgICAgbmFtZTogJ015TWV0ZW9yQXBwJyxcbiAgICAgICAgICAgIG1haW46ICh0aGlzLiQuZW52LmlzUHJvZHVjdGlvbkJ1aWxkKCkpID9cbiAgICAgICAgICAgICAgICAnYXBwLmFzYXIvaW5kZXguanMnIDogJ2FwcC9pbmRleC5qcycsXG4gICAgICAgICAgICBkZXBlbmRlbmNpZXM6IE9iamVjdC5hc3NpZ24oe30sIGRlcGVuZGVuY2llcylcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoIXRoaXMuJC5lbnYuaXNQcm9kdWN0aW9uQnVpbGQoKSB8fCB0aGlzLiQuZW52Lm9wdGlvbnMucHJvZERlYnVnKSB7XG4gICAgICAgICAgICBpZiAocGFyc2VJbnQodGhpcy5wYWNrYWdlSnNvbi5kZXBlbmRlbmNpZXMuZWxlY3Ryb24pIDwgMTApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhY2thZ2VKc29uLmRlcGVuZGVuY2llcy5kZXZ0cm9uID0gJzEuNC4wJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucGFja2FnZUpzb24uZGVwZW5kZW5jaWVzWydlbGVjdHJvbi1kZWJ1ZyddID0gJzMuMC4xJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEp1c3QgYSBwdWJsaWMgZ2V0dGVyIGZyb20gdGhlIGRlZmF1bHQgcGFja2FnZS5qc29uIG9iamVjdC5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgICAqL1xuICAgIGdldERlZmF1bHRQYWNrYWdlSnNvbigpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHRoaXMucGFja2FnZUpzb24pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsZWFyIHRoZSBlbGVjdHJvbiBhcHAuIFJlbW92ZXMgZXZlcnl0aGluZyBleGNlcHQgdGhlIG5vZGVfbW9kdWxlcyB3aGljaCB3b3VsZCBiZSBhIHdhc3RlXG4gICAgICogdG8gZGVsZXRlLiBMYXRlciBgbnBtIHBydW5lYCB3aWxsIGtlZXAgaXQgY2xlYXIuXG4gICAgICovXG4gICAgY2xlYXIoKSB7XG4gICAgICAgIGlmICghdGhpcy4kLnV0aWxzLmV4aXN0cyh0aGlzLiQuZW52LnBhdGhzLmVsZWN0cm9uQXBwLnJvb3QpKSB7XG4gICAgICAgICAgICB0aGlzLmxvZy52ZXJib3NlKGBjcmVhdGluZyAke3RoaXMuJC5lbnYucGF0aHMuZWxlY3Ryb25BcHAucm9vdE5hbWV9YCk7XG4gICAgICAgICAgICBzaGVsbC5ta2Rpcih0aGlzLiQuZW52LnBhdGhzLmVsZWN0cm9uQXBwLnJvb3QpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRlbChbXG4gICAgICAgICAgICBgJHt0aGlzLiQuZW52LnBhdGhzLmVsZWN0cm9uQXBwLnJvb3R9JHtwYXRoLnNlcH0qYCxcbiAgICAgICAgICAgIGAhJHt0aGlzLiQuZW52LnBhdGhzLmVsZWN0cm9uQXBwLm5vZGVNb2R1bGVzfWBcbiAgICAgICAgXSwgeyBmb3JjZTogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBKdXN0IGNvcGllcyB0aGUgU2tlbGV0b24gQXBwIGludG8gdGhlIGVsZWN0cm9uIGFwcC5cbiAgICAgKi9cbiAgICBjb3B5U2tlbGV0b25BcHAoKSB7XG4gICAgICAgIHRoaXMubG9nLnZlcmJvc2UoJ2NvcHlpbmcgc2tlbGV0b24gYXBwJyk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBzaGVsbC5jcChcbiAgICAgICAgICAgICAgICAnLXJmJyxcbiAgICAgICAgICAgICAgICBqb2luKHRoaXMuJC5lbnYucGF0aHMubWV0ZW9yRGVza3RvcC5za2VsZXRvbiwgJyonKSxcbiAgICAgICAgICAgICAgICB0aGlzLiQuZW52LnBhdGhzLmVsZWN0cm9uQXBwLmFwcFJvb3QgKyBwYXRoLnNlcFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhpcy5sb2cuZXJyb3IoJ2Vycm9yIHdoaWxlIGNvcHlpbmcgc2tlbGV0b24gYXBwOicsIGUpO1xuICAgICAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWZ0ZXIgY2xlYXJpbmcgdGhlIGVsZWN0cm9uIGFwcCBwYXRoLCBjb3BpZXMgYSBmcmVzaCBza2VsZXRvbi5cbiAgICAgKi9cbiAgICBhc3luYyBtYWtlKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5sb2cudmVyYm9zZShgY2xlYXJpbmcgJHt0aGlzLiQuZW52LnBhdGhzLmVsZWN0cm9uQXBwLnJvb3ROYW1lfWApO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jbGVhcigpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aGlzLmxvZy5lcnJvcihcbiAgICAgICAgICAgICAgICBgZXJyb3Igd2hpbGUgcmVtb3ZpbmcgJHt0aGlzLiQuZW52LnBhdGhzLmVsZWN0cm9uQXBwLnJvb3R9OiBgLCBlXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jcmVhdGVBcHBSb290KCk7XG5cbiAgICAgICAgdGhpcy5jb3B5U2tlbGV0b25BcHAoKTtcblxuICAgICAgICAvLyBUT0RPOiBoZXksIHdhaXQsIC5naXRpZ25vcmUgaXMgbm90IG5lZWRlZCAtIHJpZ2h0P1xuICAgICAgICAvKlxuICAgICAgICB0aGlzLmxvZy5kZWJ1ZygnY3JlYXRpbmcgLmdpdGlnbm9yZScpO1xuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHRoaXMuJC5lbnYucGF0aHMuZWxlY3Ryb25BcHAuZ2l0SWdub3JlLCBbXG4gICAgICAgICAgICAnbm9kZV9tb2R1bGVzJ1xuICAgICAgICBdLmpvaW4oJ1xcbicpKTtcbiAgICAgICAgKi9cbiAgICAgICAgdGhpcy5sb2cudmVyYm9zZSgnd3JpdGluZyBwYWNrYWdlLmpzb24nKTtcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyhcbiAgICAgICAgICAgIHRoaXMuJC5lbnYucGF0aHMuZWxlY3Ryb25BcHAucGFja2FnZUpzb24sIEpTT04uc3RyaW5naWZ5KHRoaXMucGFja2FnZUpzb24sIG51bGwsIDIpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyB0aGUgYXBwIGRpcmVjdG9yeSBpbiB0aGUgZWxlY3Ryb24gYXBwLlxuICAgICAqL1xuICAgIGNyZWF0ZUFwcFJvb3QoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmxvZy52ZXJib3NlKGBjcmVhdGluZyAke3RoaXMuJC5lbnYucGF0aHMuZWxlY3Ryb25BcHAuYXBwUm9vdH1gKTtcbiAgICAgICAgICAgIGZzLm1rZGlyU3luYyh0aGlzLiQuZW52LnBhdGhzLmVsZWN0cm9uQXBwLmFwcFJvb3QpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoZS5jb2RlICE9PSAnRUVYSVNUJykge1xuICAgICAgICAgICAgICAgIHRoaXMubG9nLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICBgZXJyb3Igd2hpbGUgY3JlYXRpbmcgZGlyOiAke3RoaXMuJC5lbnYucGF0aHMuZWxlY3Ryb25BcHAuYXBwUm9vdH06IGAsIGVcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsSUFBQUEsUUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsR0FBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsSUFBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUcsUUFBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUksS0FBQSxHQUFBTCxzQkFBQSxDQUFBQyxPQUFBO0FBRUEsSUFBQUssSUFBQSxHQUFBTixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQU0scUJBQUEsR0FBQVAsc0JBQUEsQ0FBQUMsT0FBQTtBQUFrRCxTQUFBRCx1QkFBQVEsR0FBQSxXQUFBQSxHQUFBLElBQUFBLEdBQUEsQ0FBQUMsVUFBQSxHQUFBRCxHQUFBLEtBQUFFLE9BQUEsRUFBQUYsR0FBQTtBQVJsRDs7QUFVQSxNQUFNO0VBQUVHO0FBQUssQ0FBQyxHQUFHQyxhQUFJO0FBQ3JCQyxnQkFBSyxDQUFDQyxNQUFNLENBQUNDLEtBQUssR0FBRyxJQUFJOztBQUV6QjtBQUNBO0FBQ0E7QUFDZSxNQUFNQyxtQkFBbUIsQ0FBQztFQUNyQztBQUNKO0FBQ0E7QUFDQTtFQUNJQyxXQUFXQSxDQUFDQyxDQUFDLEVBQUU7SUFDWCxJQUFJLENBQUNDLEdBQUcsR0FBRyxJQUFJQyxZQUFHLENBQUMscUJBQXFCLENBQUM7SUFD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