electron-compile
Version:
Electron supporting package to compile JS and CSS in Electron applications
61 lines (47 loc) • 5.27 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = sanitizeFilePath;
var _fs = require('fs');
var _fs2 = _interopRequireDefault(_fs);
var _lruCache = require('lru-cache');
var _lruCache2 = _interopRequireDefault(_lruCache);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var d = require('debug-electron')('electron-compile:sanitize-paths');
var realpathCache = (0, _lruCache2.default)({ max: 32 });
function cachedRealpath(p) {
var ret = realpathCache.get(p);
if (ret) return ret;
ret = _fs2.default.realpathSync(p);
d('Cache miss for cachedRealpath: \'' + p + '\' => \'' + ret + '\'');
realpathCache.set(p, ret);
return ret;
}
/**
* Electron will sometimes hand us paths that don't match the platform if they
* were derived from a URL (i.e. 'C:/Users/Paul/...'), whereas the cache will have
* saved paths with backslashes.
*
* @private
*/
function sanitizeFilePath(file) {
if (!file) return file;
// NB: Some people add symlinks into system directories. node.js will internally
// call realpath on paths that it finds, which will break our cache resolution.
// We need to catch this scenario and fix it up. The tricky part is, some parts
// of Electron will give us the pre-resolved paths, and others will give us the
// post-resolved one. We need to handle both.
var realFile = null;
var parts = file.split(/[\\\/]app.asar[\\\/]/);
if (!parts[1]) {
// Not using an ASAR archive
realFile = cachedRealpath(file);
} else {
// We do all this silliness to work around
// https://github.com/atom/electron/issues/4610
realFile = cachedRealpath(parts[0]) + '/app.asar/' + parts[1];
}
return realFile.replace(/[\\\/]/g, '/');
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9zYW5pdGl6ZS1wYXRocy5qcyJdLCJuYW1lcyI6WyJzYW5pdGl6ZUZpbGVQYXRoIiwiZCIsInJlcXVpcmUiLCJyZWFscGF0aENhY2hlIiwibWF4IiwiY2FjaGVkUmVhbHBhdGgiLCJwIiwicmV0IiwiZ2V0IiwicmVhbHBhdGhTeW5jIiwic2V0IiwiZmlsZSIsInJlYWxGaWxlIiwicGFydHMiLCJzcGxpdCIsInJlcGxhY2UiXSwibWFwcGluZ3MiOiI7Ozs7O2tCQXdCd0JBLGdCOztBQXhCeEI7Ozs7QUFDQTs7Ozs7O0FBRUEsSUFBTUMsSUFBSUMsUUFBUSxnQkFBUixFQUEwQixpQ0FBMUIsQ0FBVjtBQUNBLElBQU1DLGdCQUFnQix3QkFBUyxFQUFFQyxLQUFLLEVBQVAsRUFBVCxDQUF0Qjs7QUFFQSxTQUFTQyxjQUFULENBQXdCQyxDQUF4QixFQUEyQjtBQUN6QixNQUFJQyxNQUFNSixjQUFjSyxHQUFkLENBQWtCRixDQUFsQixDQUFWO0FBQ0EsTUFBSUMsR0FBSixFQUFTLE9BQU9BLEdBQVA7O0FBRVRBLFFBQU0sYUFBR0UsWUFBSCxDQUFnQkgsQ0FBaEIsQ0FBTjtBQUNBTCwwQ0FBcUNLLENBQXJDLGdCQUErQ0MsR0FBL0M7O0FBRUFKLGdCQUFjTyxHQUFkLENBQWtCSixDQUFsQixFQUFxQkMsR0FBckI7QUFDQSxTQUFPQSxHQUFQO0FBQ0Q7O0FBRUQ7Ozs7Ozs7QUFPZSxTQUFTUCxnQkFBVCxDQUEwQlcsSUFBMUIsRUFBZ0M7QUFDN0MsTUFBSSxDQUFDQSxJQUFMLEVBQVcsT0FBT0EsSUFBUDs7QUFFWDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE1BQUlDLFdBQVcsSUFBZjtBQUNBLE1BQUlDLFFBQVFGLEtBQUtHLEtBQUwsQ0FBVyxzQkFBWCxDQUFaO0FBQ0EsTUFBSSxDQUFDRCxNQUFNLENBQU4sQ0FBTCxFQUFlO0FBQ2I7QUFDQUQsZUFBV1AsZUFBZU0sSUFBZixDQUFYO0FBQ0QsR0FIRCxNQUdPO0FBQ0w7QUFDQTtBQUNBQyxlQUFjUCxlQUFlUSxNQUFNLENBQU4sQ0FBZixDQUFkLGtCQUFtREEsTUFBTSxDQUFOLENBQW5EO0FBQ0Q7O0FBRUQsU0FBT0QsU0FBU0csT0FBVCxDQUFpQixTQUFqQixFQUE0QixHQUE1QixDQUFQO0FBQ0QiLCJmaWxlIjoic2FuaXRpemUtcGF0aHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZnMgZnJvbSAnZnMnO1xuaW1wb3J0IExSVUNhY2hlIGZyb20gJ2xydS1jYWNoZSc7XG5cbmNvbnN0IGQgPSByZXF1aXJlKCdkZWJ1Zy1lbGVjdHJvbicpKCdlbGVjdHJvbi1jb21waWxlOnNhbml0aXplLXBhdGhzJyk7XG5jb25zdCByZWFscGF0aENhY2hlID0gTFJVQ2FjaGUoeyBtYXg6IDMyIH0pO1xuXG5mdW5jdGlvbiBjYWNoZWRSZWFscGF0aChwKSB7XG4gIGxldCByZXQgPSByZWFscGF0aENhY2hlLmdldChwKTtcbiAgaWYgKHJldCkgcmV0dXJuIHJldDtcblxuICByZXQgPSBmcy5yZWFscGF0aFN5bmMocCk7XG4gIGQoYENhY2hlIG1pc3MgZm9yIGNhY2hlZFJlYWxwYXRoOiAnJHtwfScgPT4gJyR7cmV0fSdgKTtcblxuICByZWFscGF0aENhY2hlLnNldChwLCByZXQpO1xuICByZXR1cm4gcmV0O1xufVxuXG4vKipcbiAqIEVsZWN0cm9uIHdpbGwgc29tZXRpbWVzIGhhbmQgdXMgcGF0aHMgdGhhdCBkb24ndCBtYXRjaCB0aGUgcGxhdGZvcm0gaWYgdGhleVxuICogd2VyZSBkZXJpdmVkIGZyb20gYSBVUkwgKGkuZS4gJ0M6L1VzZXJzL1BhdWwvLi4uJyksIHdoZXJlYXMgdGhlIGNhY2hlIHdpbGwgaGF2ZVxuICogc2F2ZWQgcGF0aHMgd2l0aCBiYWNrc2xhc2hlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzYW5pdGl6ZUZpbGVQYXRoKGZpbGUpIHtcbiAgaWYgKCFmaWxlKSByZXR1cm4gZmlsZTtcblxuICAvLyBOQjogU29tZSBwZW9wbGUgYWRkIHN5bWxpbmtzIGludG8gc3lzdGVtIGRpcmVjdG9yaWVzLiBub2RlLmpzIHdpbGwgaW50ZXJuYWxseVxuICAvLyBjYWxsIHJlYWxwYXRoIG9uIHBhdGhzIHRoYXQgaXQgZmluZHMsIHdoaWNoIHdpbGwgYnJlYWsgb3VyIGNhY2hlIHJlc29sdXRpb24uXG4gIC8vIFdlIG5lZWQgdG8gY2F0Y2ggdGhpcyBzY2VuYXJpbyBhbmQgZml4IGl0IHVwLiBUaGUgdHJpY2t5IHBhcnQgaXMsIHNvbWUgcGFydHNcbiAgLy8gb2YgRWxlY3Ryb24gd2lsbCBnaXZlIHVzIHRoZSBwcmUtcmVzb2x2ZWQgcGF0aHMsIGFuZCBvdGhlcnMgd2lsbCBnaXZlIHVzIHRoZVxuICAvLyBwb3N0LXJlc29sdmVkIG9uZS4gV2UgbmVlZCB0byBoYW5kbGUgYm90aC5cblxuICBsZXQgcmVhbEZpbGUgPSBudWxsO1xuICBsZXQgcGFydHMgPSBmaWxlLnNwbGl0KC9bXFxcXFxcL11hcHAuYXNhcltcXFxcXFwvXS8pO1xuICBpZiAoIXBhcnRzWzFdKSB7XG4gICAgLy8gTm90IHVzaW5nIGFuIEFTQVIgYXJjaGl2ZVxuICAgIHJlYWxGaWxlID0gY2FjaGVkUmVhbHBhdGgoZmlsZSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gV2UgZG8gYWxsIHRoaXMgc2lsbGluZXNzIHRvIHdvcmsgYXJvdW5kXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2F0b20vZWxlY3Ryb24vaXNzdWVzLzQ2MTBcbiAgICByZWFsRmlsZSA9IGAke2NhY2hlZFJlYWxwYXRoKHBhcnRzWzBdKX0vYXBwLmFzYXIvJHtwYXJ0c1sxXX1gO1xuICB9XG5cbiAgcmV0dXJuIHJlYWxGaWxlLnJlcGxhY2UoL1tcXFxcXFwvXS9nLCAnLycpO1xufVxuIl19