electron-compile
Version:
Electron supporting package to compile JS and CSS in Electron applications
62 lines (48 loc) • 5.14 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-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];
}
var ret = realFile.replace(/[\\\/]/g, '/');
return ret.toLowerCase();
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9zYW5pdGl6ZS1wYXRocy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztrQkF3QndCOzs7Ozs7Ozs7Ozs7QUFyQnhCLElBQU0sSUFBSSxRQUFRLE9BQVIsRUFBaUIsaUNBQWpCLENBQUo7QUFDTixJQUFNLGdCQUFnQix3QkFBUyxFQUFFLEtBQUssRUFBTCxFQUFYLENBQWhCOztBQUVOLFNBQVMsY0FBVCxDQUF3QixDQUF4QixFQUEyQjtBQUN6QixNQUFJLE1BQU0sY0FBYyxHQUFkLENBQWtCLENBQWxCLENBQU4sQ0FEcUI7QUFFekIsTUFBSSxHQUFKLEVBQVMsT0FBTyxHQUFQLENBQVQ7O0FBRUEsUUFBTSxhQUFHLFlBQUgsQ0FBZ0IsQ0FBaEIsQ0FBTixDQUp5QjtBQUt6QiwwQ0FBcUMsaUJBQVUsVUFBL0MsRUFMeUI7O0FBT3pCLGdCQUFjLEdBQWQsQ0FBa0IsQ0FBbEIsRUFBcUIsR0FBckIsRUFQeUI7QUFRekIsU0FBTyxHQUFQLENBUnlCO0NBQTNCOzs7Ozs7Ozs7QUFrQmUsU0FBUyxnQkFBVCxDQUEwQixJQUExQixFQUFnQztBQUM3QyxNQUFJLENBQUMsSUFBRCxFQUFPLE9BQU8sSUFBUCxDQUFYOzs7Ozs7OztBQUQ2QyxNQVN6QyxXQUFXLElBQVgsQ0FUeUM7QUFVN0MsTUFBSSxRQUFRLEtBQUssS0FBTCxDQUFXLHNCQUFYLENBQVIsQ0FWeUM7QUFXN0MsTUFBSSxDQUFDLE1BQU0sQ0FBTixDQUFELEVBQVc7O0FBRWIsZUFBVyxlQUFlLElBQWYsQ0FBWCxDQUZhO0dBQWYsTUFHTzs7O0FBR0wsZUFBYyxlQUFlLE1BQU0sQ0FBTixDQUFmLG1CQUFxQyxNQUFNLENBQU4sQ0FBbkQsQ0FISztHQUhQOztBQVNBLE1BQUksTUFBTSxTQUFTLE9BQVQsQ0FBaUIsU0FBakIsRUFBNEIsR0FBNUIsQ0FBTixDQXBCeUM7QUFxQjdDLFNBQU8sSUFBSSxXQUFKLEVBQVAsQ0FyQjZDO0NBQWhDIiwiZmlsZSI6InNhbml0aXplLXBhdGhzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGZzIGZyb20gJ2ZzJztcbmltcG9ydCBMUlVDYWNoZSBmcm9tICdscnUtY2FjaGUnO1xuXG5jb25zdCBkID0gcmVxdWlyZSgnZGVidWcnKSgnZWxlY3Ryb24tY29tcGlsZTpzYW5pdGl6ZS1wYXRocycpO1xuY29uc3QgcmVhbHBhdGhDYWNoZSA9IExSVUNhY2hlKHsgbWF4OiAzMiB9KTtcblxuZnVuY3Rpb24gY2FjaGVkUmVhbHBhdGgocCkge1xuICBsZXQgcmV0ID0gcmVhbHBhdGhDYWNoZS5nZXQocCk7XG4gIGlmIChyZXQpIHJldHVybiByZXQ7XG5cbiAgcmV0ID0gZnMucmVhbHBhdGhTeW5jKHApO1xuICBkKGBDYWNoZSBtaXNzIGZvciBjYWNoZWRSZWFscGF0aDogJyR7cH0nID0+ICcke3JldH0nYCk7XG5cbiAgcmVhbHBhdGhDYWNoZS5zZXQocCwgcmV0KTtcbiAgcmV0dXJuIHJldDtcbn1cblxuLyoqXG4gKiBFbGVjdHJvbiB3aWxsIHNvbWV0aW1lcyBoYW5kIHVzIHBhdGhzIHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIHBsYXRmb3JtIGlmIHRoZXlcbiAqIHdlcmUgZGVyaXZlZCBmcm9tIGEgVVJMIChpLmUuICdDOi9Vc2Vycy9QYXVsLy4uLicpLCB3aGVyZWFzIHRoZSBjYWNoZSB3aWxsIGhhdmVcbiAqIHNhdmVkIHBhdGhzIHdpdGggYmFja3NsYXNoZXMuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2FuaXRpemVGaWxlUGF0aChmaWxlKSB7XG4gIGlmICghZmlsZSkgcmV0dXJuIGZpbGU7XG5cbiAgLy8gTkI6IFNvbWUgcGVvcGxlIGFkZCBzeW1saW5rcyBpbnRvIHN5c3RlbSBkaXJlY3Rvcmllcy4gbm9kZS5qcyB3aWxsIGludGVybmFsbHlcbiAgLy8gY2FsbCByZWFscGF0aCBvbiBwYXRocyB0aGF0IGl0IGZpbmRzLCB3aGljaCB3aWxsIGJyZWFrIG91ciBjYWNoZSByZXNvbHV0aW9uLlxuICAvLyBXZSBuZWVkIHRvIGNhdGNoIHRoaXMgc2NlbmFyaW8gYW5kIGZpeCBpdCB1cC4gVGhlIHRyaWNreSBwYXJ0IGlzLCBzb21lIHBhcnRzXG4gIC8vIG9mIEVsZWN0cm9uIHdpbGwgZ2l2ZSB1cyB0aGUgcHJlLXJlc29sdmVkIHBhdGhzLCBhbmQgb3RoZXJzIHdpbGwgZ2l2ZSB1cyB0aGVcbiAgLy8gcG9zdC1yZXNvbHZlZCBvbmUuIFdlIG5lZWQgdG8gaGFuZGxlIGJvdGguXG5cbiAgbGV0IHJlYWxGaWxlID0gbnVsbDtcbiAgbGV0IHBhcnRzID0gZmlsZS5zcGxpdCgvW1xcXFxcXC9dYXBwLmFzYXJbXFxcXFxcL10vKTtcbiAgaWYgKCFwYXJ0c1sxXSkge1xuICAgIC8vIE5vdCB1c2luZyBhbiBBU0FSIGFyY2hpdmVcbiAgICByZWFsRmlsZSA9IGNhY2hlZFJlYWxwYXRoKGZpbGUpO1xuICB9IGVsc2Uge1xuICAgIC8vIFdlIGRvIGFsbCB0aGlzIHNpbGxpbmVzcyB0byB3b3JrIGFyb3VuZFxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hdG9tL2VsZWN0cm9uL2lzc3Vlcy80NjEwXG4gICAgcmVhbEZpbGUgPSBgJHtjYWNoZWRSZWFscGF0aChwYXJ0c1swXSl9L2FwcC5hc2FyLyR7cGFydHNbMV19YDtcbiAgfVxuXG4gIGxldCByZXQgPSByZWFsRmlsZS5yZXBsYWNlKC9bXFxcXFxcL10vZywgJy8nKTtcbiAgcmV0dXJuIHJldC50b0xvd2VyQ2FzZSgpO1xufVxuIl19