UNPKG

@mjcctech/meteor-desktop

Version:

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

80 lines (60 loc) 7.96 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _path = _interopRequireDefault(require("path")); var _isbinaryfile = _interopRequireDefault(require("isbinaryfile")); var _shelljs = _interopRequireDefault(require("shelljs")); var _log = _interopRequireDefault(require("./log")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } _shelljs.default.config.fatal = true; /** * Experimental module for detecting modules containing binary files. * Based on the same functionality from electron-builder. * * @property {MeteorDesktop} $ * @class */ class BinaryModulesDetector { /** * @constructor */ constructor(nodeModulesPath) { this.log = new _log.default('binaryModulesDetector'); this.nodeModulesPath = nodeModulesPath; } // TODO: make asynchronous detect() { this.log.verbose('detecting node modules with binary files'); const files = _shelljs.default.ls('-RAl', this.nodeModulesPath); const extract = []; files.forEach(file => { const pathSplit = file.name.split(_path.default.posix.sep); const dir = pathSplit[0]; const filename = pathSplit.pop(); if (extract.indexOf(dir) === -1 && !BinaryModulesDetector.shouldBeIgnored(dir, filename)) { if (file.isFile()) { let shouldUnpack = false; if (file.name.endsWith('.dll') || file.name.endsWith('.exe') || file.name.endsWith('.dylib')) { shouldUnpack = true; } else if (_path.default.extname(file.name) === '') { shouldUnpack = _isbinaryfile.default.sync(_path.default.join(this.nodeModulesPath, file.name)); } if (shouldUnpack) { this.log.debug(`binary file: ${file.name}`); extract.push(dir); } } } }); if (extract.length > 0) { this.log.verbose(`detected modules to be extracted: ${extract.join(', ')}`); } return extract; } static shouldBeIgnored(dir, filename) { return dir === '.bin' || filename === '.DS_Store' || filename === 'LICENSE' || filename === 'README'; } } exports.default = BinaryModulesDetector; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9iaW5hcnlNb2R1bGVzRGV0ZWN0b3IuanMiXSwibmFtZXMiOlsic2hlbGwiLCJjb25maWciLCJmYXRhbCIsIkJpbmFyeU1vZHVsZXNEZXRlY3RvciIsImNvbnN0cnVjdG9yIiwibm9kZU1vZHVsZXNQYXRoIiwibG9nIiwiTG9nIiwiZGV0ZWN0IiwidmVyYm9zZSIsImZpbGVzIiwibHMiLCJleHRyYWN0IiwiZm9yRWFjaCIsImZpbGUiLCJwYXRoU3BsaXQiLCJuYW1lIiwic3BsaXQiLCJwYXRoIiwicG9zaXgiLCJzZXAiLCJkaXIiLCJmaWxlbmFtZSIsInBvcCIsImluZGV4T2YiLCJzaG91bGRCZUlnbm9yZWQiLCJpc0ZpbGUiLCJzaG91bGRVbnBhY2siLCJlbmRzV2l0aCIsImV4dG5hbWUiLCJpc0JpbmFyeUZpbGUiLCJzeW5jIiwiam9pbiIsImRlYnVnIiwicHVzaCIsImxlbmd0aCJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUVBOzs7O0FBRUFBLGlCQUFNQyxNQUFOLENBQWFDLEtBQWIsR0FBcUIsSUFBckI7QUFDQTs7Ozs7Ozs7QUFPZSxNQUFNQyxxQkFBTixDQUE0QjtBQUN2Qzs7O0FBR0FDLEVBQUFBLFdBQVcsQ0FBQ0MsZUFBRCxFQUFrQjtBQUN6QixTQUFLQyxHQUFMLEdBQVcsSUFBSUMsWUFBSixDQUFRLHVCQUFSLENBQVg7QUFDQSxTQUFLRixlQUFMLEdBQXVCQSxlQUF2QjtBQUNILEdBUHNDLENBU3ZDOzs7QUFDQUcsRUFBQUEsTUFBTSxHQUFHO0FBQ0wsU0FBS0YsR0FBTCxDQUFTRyxPQUFULENBQWlCLDBDQUFqQjs7QUFDQSxVQUFNQyxLQUFLLEdBQUdWLGlCQUFNVyxFQUFOLENBQVMsTUFBVCxFQUFpQixLQUFLTixlQUF0QixDQUFkOztBQUVBLFVBQU1PLE9BQU8sR0FBRyxFQUFoQjtBQUVBRixJQUFBQSxLQUFLLENBQUNHLE9BQU4sQ0FBZUMsSUFBRCxJQUFVO0FBQ3BCLFlBQU1DLFNBQVMsR0FBR0QsSUFBSSxDQUFDRSxJQUFMLENBQVVDLEtBQVYsQ0FBZ0JDLGNBQUtDLEtBQUwsQ0FBV0MsR0FBM0IsQ0FBbEI7QUFDQSxZQUFNQyxHQUFHLEdBQUdOLFNBQVMsQ0FBQyxDQUFELENBQXJCO0FBQ0EsWUFBTU8sUUFBUSxHQUFHUCxTQUFTLENBQUNRLEdBQVYsRUFBakI7O0FBRUEsVUFBSVgsT0FBTyxDQUFDWSxPQUFSLENBQWdCSCxHQUFoQixNQUF5QixDQUFDLENBQTFCLElBQ0EsQ0FBQ2xCLHFCQUFxQixDQUFDc0IsZUFBdEIsQ0FBc0NKLEdBQXRDLEVBQTJDQyxRQUEzQyxDQURMLEVBRUU7QUFDRSxZQUFJUixJQUFJLENBQUNZLE1BQUwsRUFBSixFQUFtQjtBQUNmLGNBQUlDLFlBQVksR0FBRyxLQUFuQjs7QUFDQSxjQUFJYixJQUFJLENBQUNFLElBQUwsQ0FBVVksUUFBVixDQUFtQixNQUFuQixLQUE4QmQsSUFBSSxDQUFDRSxJQUFMLENBQVVZLFFBQVYsQ0FBbUIsTUFBbkIsQ0FBOUIsSUFBNERkLElBQUksQ0FBQ0UsSUFBTCxDQUFVWSxRQUFWLENBQW1CLFFBQW5CLENBQWhFLEVBQThGO0FBQzFGRCxZQUFBQSxZQUFZLEdBQUcsSUFBZjtBQUNILFdBRkQsTUFFTyxJQUFJVCxjQUFLVyxPQUFMLENBQWFmLElBQUksQ0FBQ0UsSUFBbEIsTUFBNEIsRUFBaEMsRUFBb0M7QUFDdkNXLFlBQUFBLFlBQVksR0FDUkcsc0JBQWFDLElBQWIsQ0FBa0JiLGNBQUtjLElBQUwsQ0FBVSxLQUFLM0IsZUFBZixFQUFnQ1MsSUFBSSxDQUFDRSxJQUFyQyxDQUFsQixDQURKO0FBRUg7O0FBQ0QsY0FBSVcsWUFBSixFQUFrQjtBQUNkLGlCQUFLckIsR0FBTCxDQUFTMkIsS0FBVCxDQUFnQixnQkFBZW5CLElBQUksQ0FBQ0UsSUFBSyxFQUF6QztBQUNBSixZQUFBQSxPQUFPLENBQUNzQixJQUFSLENBQWFiLEdBQWI7QUFDSDtBQUNKO0FBQ0o7QUFDSixLQXRCRDs7QUF1QkEsUUFBSVQsT0FBTyxDQUFDdUIsTUFBUixHQUFpQixDQUFyQixFQUF3QjtBQUNwQixXQUFLN0IsR0FBTCxDQUFTRyxPQUFULENBQWtCLHFDQUFvQ0csT0FBTyxDQUFDb0IsSUFBUixDQUFhLElBQWIsQ0FBbUIsRUFBekU7QUFDSDs7QUFDRCxXQUFPcEIsT0FBUDtBQUNIOztBQUVELFNBQU9hLGVBQVAsQ0FBdUJKLEdBQXZCLEVBQTRCQyxRQUE1QixFQUFzQztBQUNsQyxXQUFPRCxHQUFHLEtBQUssTUFBUixJQUFrQkMsUUFBUSxLQUFLLFdBQS9CLElBQThDQSxRQUFRLEtBQUssU0FBM0QsSUFBd0VBLFFBQVEsS0FBSyxRQUE1RjtBQUNIOztBQS9Dc0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBpc0JpbmFyeUZpbGUgZnJvbSAnaXNiaW5hcnlmaWxlJztcbmltcG9ydCBzaGVsbCBmcm9tICdzaGVsbGpzJztcblxuaW1wb3J0IExvZyBmcm9tICcuL2xvZyc7XG5cbnNoZWxsLmNvbmZpZy5mYXRhbCA9IHRydWU7XG4vKipcbiAqIEV4cGVyaW1lbnRhbCBtb2R1bGUgZm9yIGRldGVjdGluZyBtb2R1bGVzIGNvbnRhaW5pbmcgYmluYXJ5IGZpbGVzLlxuICogQmFzZWQgb24gdGhlIHNhbWUgZnVuY3Rpb25hbGl0eSBmcm9tIGVsZWN0cm9uLWJ1aWxkZXIuXG4gKlxuICogQHByb3BlcnR5IHtNZXRlb3JEZXNrdG9wfSAkXG4gKiBAY2xhc3NcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQmluYXJ5TW9kdWxlc0RldGVjdG9yIHtcbiAgICAvKipcbiAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcihub2RlTW9kdWxlc1BhdGgpIHtcbiAgICAgICAgdGhpcy5sb2cgPSBuZXcgTG9nKCdiaW5hcnlNb2R1bGVzRGV0ZWN0b3InKTtcbiAgICAgICAgdGhpcy5ub2RlTW9kdWxlc1BhdGggPSBub2RlTW9kdWxlc1BhdGg7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogbWFrZSBhc3luY2hyb25vdXNcbiAgICBkZXRlY3QoKSB7XG4gICAgICAgIHRoaXMubG9nLnZlcmJvc2UoJ2RldGVjdGluZyBub2RlIG1vZHVsZXMgd2l0aCBiaW5hcnkgZmlsZXMnKTtcbiAgICAgICAgY29uc3QgZmlsZXMgPSBzaGVsbC5scygnLVJBbCcsIHRoaXMubm9kZU1vZHVsZXNQYXRoKTtcblxuICAgICAgICBjb25zdCBleHRyYWN0ID0gW107XG5cbiAgICAgICAgZmlsZXMuZm9yRWFjaCgoZmlsZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGF0aFNwbGl0ID0gZmlsZS5uYW1lLnNwbGl0KHBhdGgucG9zaXguc2VwKTtcbiAgICAgICAgICAgIGNvbnN0IGRpciA9IHBhdGhTcGxpdFswXTtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVuYW1lID0gcGF0aFNwbGl0LnBvcCgpO1xuXG4gICAgICAgICAgICBpZiAoZXh0cmFjdC5pbmRleE9mKGRpcikgPT09IC0xICYmXG4gICAgICAgICAgICAgICAgIUJpbmFyeU1vZHVsZXNEZXRlY3Rvci5zaG91bGRCZUlnbm9yZWQoZGlyLCBmaWxlbmFtZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGlmIChmaWxlLmlzRmlsZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBzaG91bGRVbnBhY2sgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbGUubmFtZS5lbmRzV2l0aCgnLmRsbCcpIHx8IGZpbGUubmFtZS5lbmRzV2l0aCgnLmV4ZScpIHx8IGZpbGUubmFtZS5lbmRzV2l0aCgnLmR5bGliJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZFVucGFjayA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGF0aC5leHRuYW1lKGZpbGUubmFtZSkgPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaG91bGRVbnBhY2sgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQmluYXJ5RmlsZS5zeW5jKHBhdGguam9pbih0aGlzLm5vZGVNb2R1bGVzUGF0aCwgZmlsZS5uYW1lKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZFVucGFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2cuZGVidWcoYGJpbmFyeSBmaWxlOiAke2ZpbGUubmFtZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhY3QucHVzaChkaXIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGV4dHJhY3QubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5sb2cudmVyYm9zZShgZGV0ZWN0ZWQgbW9kdWxlcyB0byBiZSBleHRyYWN0ZWQ6ICR7ZXh0cmFjdC5qb2luKCcsICcpfWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBleHRyYWN0O1xuICAgIH1cblxuICAgIHN0YXRpYyBzaG91bGRCZUlnbm9yZWQoZGlyLCBmaWxlbmFtZSkge1xuICAgICAgICByZXR1cm4gZGlyID09PSAnLmJpbicgfHwgZmlsZW5hbWUgPT09ICcuRFNfU3RvcmUnIHx8IGZpbGVuYW1lID09PSAnTElDRU5TRScgfHwgZmlsZW5hbWUgPT09ICdSRUFETUUnO1xuICAgIH1cbn1cbiJdfQ==