UNPKG

@sharekey/meteor-desktop

Version:

Build a Meteor's desktop client with hot code push.

122 lines (113 loc) 15.3 kB
"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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