canonical
Version:
Canonical code style linter and formatter for JavaScript, SCSS and CSS.
144 lines (113 loc) • 10.4 kB
JavaScript
;
var _slicedToArray = require('babel-runtime/helpers/sliced-to-array')['default'];
var _Map = require('babel-runtime/core-js/map')['default'];
var _getIterator = require('babel-runtime/core-js/get-iterator')['default'];
var _interopRequireDefault = require('babel-runtime/helpers/interop-require-default')['default'];
Object.defineProperty(exports, '__esModule', {
value: true
});
exports.relative = relative;
exports['default'] = resolve;
var _fs = require('fs');
var _fs2 = _interopRequireDefault(_fs);
var _path = require('path');
var CASE_INSENSITIVE = _fs2['default'].existsSync((0, _path.join)(__dirname, 'reSOLVE.js'));
// http://stackoverflow.com/a/27382838
function fileExistsWithCaseSync(_x) {
var _again = true;
_function: while (_again) {
var filepath = _x;
_again = false;
var dir = (0, _path.dirname)(filepath);
if (dir === '/' || dir === '.' || /^[A-Z]:\\$/i.test(dir)) return true;
var filenames = _fs2['default'].readdirSync(dir);
if (filenames.indexOf((0, _path.basename)(filepath)) === -1) {
return false;
}
_x = dir;
_again = true;
dir = filenames = undefined;
continue _function;
}
}
function fileExists(filepath) {
if (CASE_INSENSITIVE) {
// short-circuit if path doesn't exist, ignoring case
return !(!_fs2['default'].existsSync(filepath) || !fileExistsWithCaseSync(filepath));
} else {
return _fs2['default'].existsSync(filepath);
}
}
function relative(modulePath, sourceFile, settings) {
function withResolver(resolver, config) {
// resolve just returns the core module id, which won't appear to exist
try {
var filePath = resolver.resolveImport(modulePath, sourceFile, config);
if (filePath === null) return null;
if (filePath === undefined || !fileExists(filePath)) return undefined;
return filePath;
} catch (err) {
return undefined;
}
}
var configResolvers = settings['import/resolver'] || { 'node': settings['import/resolve'] }; // backward compatibility
var resolvers = resolverReducer(configResolvers, new _Map());
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = _getIterator(resolvers.entries()), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var _step$value = _slicedToArray(_step.value, 2);
var _name = _step$value[0];
var config = _step$value[1];
var resolver = require('eslint-import-resolver-' + _name);
var fullPath = withResolver(resolver, config);
if (fullPath !== undefined) return fullPath;
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator['return']) {
_iterator['return']();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
}
function resolverReducer(resolvers, map) {
if (resolvers instanceof Array) {
resolvers.forEach(function (r) {
return resolverReducer(r, map);
});
return map;
}
if (typeof resolvers === 'string') {
map.set(resolvers, null);
return map;
}
if (typeof resolvers === 'object') {
for (var key in resolvers) {
map.set(key, resolvers[key]);
}
return map;
}
throw new Error('invalid resolver config');
}
/**
* Givent
* @param {string} p - module path
* @param {object} context - ESLint context
* @return {string} - the full module filesystem path;
* null if package is core;
* undefined if not found
*/
function resolve(p, context) {
return relative(p, context.getFilename(), context.settings);
}
resolve.relative = relative;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb3JlL3Jlc29sdmUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7cUJBb0Z3QixPQUFPOztrQkFwRmhCLElBQUk7Ozs7b0JBQ3FCLE1BQU07O0FBRTlDLElBQU0sZ0JBQWdCLEdBQUcsZ0JBQUcsVUFBVSxDQUFDLGdCQUFLLFNBQVMsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFBOzs7QUFHckUsU0FBUyxzQkFBc0I7Ozs0QkFBVztRQUFWLFFBQVE7OztBQUN0QyxRQUFJLEdBQUcsR0FBRyxtQkFBUSxRQUFRLENBQUMsQ0FBQTtBQUMzQixRQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE9BQU8sSUFBSSxDQUFBO0FBQ3RFLFFBQUksU0FBUyxHQUFHLGdCQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtBQUNuQyxRQUFJLFNBQVMsQ0FBQyxPQUFPLENBQUMsb0JBQVMsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtBQUM5QyxhQUFPLEtBQUssQ0FBQTtLQUNmO1NBQzZCLEdBQUc7O0FBTjdCLE9BQUcsR0FFSCxTQUFTOztHQUtkO0NBQUE7O0FBRUQsU0FBUyxVQUFVLENBQUMsUUFBUSxFQUFFO0FBQzVCLE1BQUksZ0JBQWdCLEVBQUU7O0FBRXBCLFdBQU8sRUFBRSxDQUFDLGdCQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxDQUFBLEFBQUMsQ0FBQTtHQUN4RSxNQUFNO0FBQ0wsV0FBTyxnQkFBRyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUE7R0FDL0I7Q0FDRjs7QUFFTSxTQUFTLFFBQVEsQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRTs7QUFFekQsV0FBUyxZQUFZLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRTs7QUFFdEMsUUFBSTtBQUNGLFVBQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQTtBQUN2RSxVQUFJLFFBQVEsS0FBSyxJQUFJLEVBQUUsT0FBTyxJQUFJLENBQUE7O0FBRWxDLFVBQUksUUFBUSxLQUFLLFNBQVMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRSxPQUFPLFNBQVMsQ0FBQTs7QUFFckUsYUFBTyxRQUFRLENBQUE7S0FDaEIsQ0FBQyxPQUFPLEdBQUcsRUFBRTtBQUNaLGFBQU8sU0FBUyxDQUFBO0tBQ2pCO0dBQ0Y7O0FBRUQsTUFBTSxlQUFlLEdBQUksUUFBUSxDQUFDLGlCQUFpQixDQUFDLElBQy9DLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLEFBQUMsQ0FBQTs7QUFFNUMsTUFBTSxTQUFTLEdBQUcsZUFBZSxDQUFDLGVBQWUsRUFBRSxVQUFTLENBQUMsQ0FBQTs7Ozs7OztBQUU3RCxzQ0FBMkIsU0FBUyxDQUFDLE9BQU8sRUFBRSw0R0FBRTs7O1VBQXRDLEtBQUk7VUFBRSxNQUFNOztBQUNwQixVQUFNLFFBQVEsR0FBRyxPQUFPLDZCQUEyQixLQUFJLENBQUcsQ0FBQTs7QUFFMUQsVUFBSSxRQUFRLEdBQUcsWUFBWSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQTtBQUM3QyxVQUFJLFFBQVEsS0FBSyxTQUFTLEVBQUUsT0FBTyxRQUFRLENBQUE7S0FDNUM7Ozs7Ozs7Ozs7Ozs7OztDQUVGOztBQUVELFNBQVMsZUFBZSxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUU7QUFDdkMsTUFBSSxTQUFTLFlBQVksS0FBSyxFQUFFO0FBQzlCLGFBQVMsQ0FBQyxPQUFPLENBQUMsVUFBQSxDQUFDO2FBQUksZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUM7S0FBQSxDQUFDLENBQUE7QUFDL0MsV0FBTyxHQUFHLENBQUE7R0FDWDs7QUFFRCxNQUFJLE9BQU8sU0FBUyxLQUFLLFFBQVEsRUFBRTtBQUNqQyxPQUFHLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQTtBQUN4QixXQUFPLEdBQUcsQ0FBQTtHQUNYOztBQUVELE1BQUksT0FBTyxTQUFTLEtBQUssUUFBUSxFQUFFO0FBQ2pDLFNBQUssSUFBSSxHQUFHLElBQUksU0FBUyxFQUFFO0FBQ3pCLFNBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO0tBQzdCO0FBQ0QsV0FBTyxHQUFHLENBQUE7R0FDWDs7QUFFRCxRQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUE7Q0FDM0M7Ozs7Ozs7Ozs7O0FBVWMsU0FBUyxPQUFPLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRTtBQUMxQyxTQUFPLFFBQVEsQ0FBRSxDQUFDLEVBQ0QsT0FBTyxDQUFDLFdBQVcsRUFBRSxFQUNyQixPQUFPLENBQUMsUUFBUSxDQUNqQixDQUFBO0NBQ2pCOztBQUNELE9BQU8sQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFBIiwiZmlsZSI6InJlc29sdmUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZnMgZnJvbSAnZnMnXG5pbXBvcnQgeyBkaXJuYW1lLCBiYXNlbmFtZSwgam9pbiB9IGZyb20gJ3BhdGgnXG5cbmNvbnN0IENBU0VfSU5TRU5TSVRJVkUgPSBmcy5leGlzdHNTeW5jKGpvaW4oX19kaXJuYW1lLCAncmVTT0xWRS5qcycpKVxuXG4vLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yNzM4MjgzOFxuZnVuY3Rpb24gZmlsZUV4aXN0c1dpdGhDYXNlU3luYyhmaWxlcGF0aCkge1xuICB2YXIgZGlyID0gZGlybmFtZShmaWxlcGF0aClcbiAgaWYgKGRpciA9PT0gJy8nIHx8IGRpciA9PT0gJy4nIHx8IC9eW0EtWl06XFxcXCQvaS50ZXN0KGRpcikpIHJldHVybiB0cnVlXG4gIHZhciBmaWxlbmFtZXMgPSBmcy5yZWFkZGlyU3luYyhkaXIpXG4gIGlmIChmaWxlbmFtZXMuaW5kZXhPZihiYXNlbmFtZShmaWxlcGF0aCkpID09PSAtMSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgcmV0dXJuIGZpbGVFeGlzdHNXaXRoQ2FzZVN5bmMoZGlyKVxufVxuXG5mdW5jdGlvbiBmaWxlRXhpc3RzKGZpbGVwYXRoKSB7XG4gIGlmIChDQVNFX0lOU0VOU0lUSVZFKSB7XG4gICAgLy8gc2hvcnQtY2lyY3VpdCBpZiBwYXRoIGRvZXNuJ3QgZXhpc3QsIGlnbm9yaW5nIGNhc2VcbiAgICByZXR1cm4gISghZnMuZXhpc3RzU3luYyhmaWxlcGF0aCkgfHwgIWZpbGVFeGlzdHNXaXRoQ2FzZVN5bmMoZmlsZXBhdGgpKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBmcy5leGlzdHNTeW5jKGZpbGVwYXRoKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWxhdGl2ZShtb2R1bGVQYXRoLCBzb3VyY2VGaWxlLCBzZXR0aW5ncykge1xuXG4gIGZ1bmN0aW9uIHdpdGhSZXNvbHZlcihyZXNvbHZlciwgY29uZmlnKSB7XG4gICAgLy8gcmVzb2x2ZSBqdXN0IHJldHVybnMgdGhlIGNvcmUgbW9kdWxlIGlkLCB3aGljaCB3b24ndCBhcHBlYXIgdG8gZXhpc3RcbiAgICB0cnkge1xuICAgICAgY29uc3QgZmlsZVBhdGggPSByZXNvbHZlci5yZXNvbHZlSW1wb3J0KG1vZHVsZVBhdGgsIHNvdXJjZUZpbGUsIGNvbmZpZylcbiAgICAgIGlmIChmaWxlUGF0aCA9PT0gbnVsbCkgcmV0dXJuIG51bGxcblxuICAgICAgaWYgKGZpbGVQYXRoID09PSB1bmRlZmluZWQgfHwgIWZpbGVFeGlzdHMoZmlsZVBhdGgpKSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgICAgIHJldHVybiBmaWxlUGF0aFxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGNvbmZpZ1Jlc29sdmVycyA9IChzZXR0aW5nc1snaW1wb3J0L3Jlc29sdmVyJ11cbiAgICB8fCB7ICdub2RlJzogc2V0dGluZ3NbJ2ltcG9ydC9yZXNvbHZlJ10gfSkgLy8gYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuXG4gIGNvbnN0IHJlc29sdmVycyA9IHJlc29sdmVyUmVkdWNlcihjb25maWdSZXNvbHZlcnMsIG5ldyBNYXAoKSlcblxuICBmb3IgKGxldCBbbmFtZSwgY29uZmlnXSBvZiByZXNvbHZlcnMuZW50cmllcygpKSB7XG4gICAgY29uc3QgcmVzb2x2ZXIgPSByZXF1aXJlKGBlc2xpbnQtaW1wb3J0LXJlc29sdmVyLSR7bmFtZX1gKVxuXG4gICAgbGV0IGZ1bGxQYXRoID0gd2l0aFJlc29sdmVyKHJlc29sdmVyLCBjb25maWcpXG4gICAgaWYgKGZ1bGxQYXRoICE9PSB1bmRlZmluZWQpIHJldHVybiBmdWxsUGF0aFxuICB9XG5cbn1cblxuZnVuY3Rpb24gcmVzb2x2ZXJSZWR1Y2VyKHJlc29sdmVycywgbWFwKSB7XG4gIGlmIChyZXNvbHZlcnMgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgIHJlc29sdmVycy5mb3JFYWNoKHIgPT4gcmVzb2x2ZXJSZWR1Y2VyKHIsIG1hcCkpXG4gICAgcmV0dXJuIG1hcFxuICB9XG5cbiAgaWYgKHR5cGVvZiByZXNvbHZlcnMgPT09ICdzdHJpbmcnKSB7XG4gICAgbWFwLnNldChyZXNvbHZlcnMsIG51bGwpXG4gICAgcmV0dXJuIG1hcFxuICB9XG5cbiAgaWYgKHR5cGVvZiByZXNvbHZlcnMgPT09ICdvYmplY3QnKSB7XG4gICAgZm9yIChsZXQga2V5IGluIHJlc29sdmVycykge1xuICAgICAgbWFwLnNldChrZXksIHJlc29sdmVyc1trZXldKVxuICAgIH1cbiAgICByZXR1cm4gbWFwXG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcmVzb2x2ZXIgY29uZmlnJylcbn1cblxuLyoqXG4gKiBHaXZlbnRcbiAqIEBwYXJhbSAge3N0cmluZ30gcCAtIG1vZHVsZSBwYXRoXG4gKiBAcGFyYW0gIHtvYmplY3R9IGNvbnRleHQgLSBFU0xpbnQgY29udGV4dFxuICogQHJldHVybiB7c3RyaW5nfSAtIHRoZSBmdWxsIG1vZHVsZSBmaWxlc3lzdGVtIHBhdGg7XG4gKiAgICAgICAgICAgICAgICAgICAgbnVsbCBpZiBwYWNrYWdlIGlzIGNvcmU7XG4gKiAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkIGlmIG5vdCBmb3VuZFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZXNvbHZlKHAsIGNvbnRleHQpIHtcbiAgcmV0dXJuIHJlbGF0aXZlKCBwXG4gICAgICAgICAgICAgICAgICwgY29udGV4dC5nZXRGaWxlbmFtZSgpXG4gICAgICAgICAgICAgICAgICwgY29udGV4dC5zZXR0aW5nc1xuICAgICAgICAgICAgICAgICApXG59XG5yZXNvbHZlLnJlbGF0aXZlID0gcmVsYXRpdmVcbiJdfQ==