You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
9.2 KiB
69 lines
9.2 KiB
2 years ago
|
'use strict';var _path = require('path');var _path2 = _interopRequireDefault(_path);
|
||
|
var _readPkgUp = require('eslint-module-utils/readPkgUp');var _readPkgUp2 = _interopRequireDefault(_readPkgUp);
|
||
|
|
||
|
var _resolve = require('eslint-module-utils/resolve');var _resolve2 = _interopRequireDefault(_resolve);
|
||
|
var _moduleVisitor = require('eslint-module-utils/moduleVisitor');var _moduleVisitor2 = _interopRequireDefault(_moduleVisitor);
|
||
|
var _importType = require('../core/importType');var _importType2 = _interopRequireDefault(_importType);
|
||
|
var _docsUrl = require('../docsUrl');var _docsUrl2 = _interopRequireDefault(_docsUrl);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { 'default': obj };}
|
||
|
|
||
|
/** @param {string} filePath */
|
||
|
function toPosixPath(filePath) {
|
||
|
return filePath.replace(/\\/g, '/');
|
||
|
}
|
||
|
|
||
|
function findNamedPackage(filePath) {
|
||
|
var found = (0, _readPkgUp2['default'])({ cwd: filePath });
|
||
|
if (found.pkg && !found.pkg.name) {
|
||
|
return findNamedPackage(_path2['default'].join(found.path, '../..'));
|
||
|
}
|
||
|
return found;
|
||
|
}
|
||
|
|
||
|
function checkImportForRelativePackage(context, importPath, node) {
|
||
|
var potentialViolationTypes = ['parent', 'index', 'sibling'];
|
||
|
if (potentialViolationTypes.indexOf((0, _importType2['default'])(importPath, context)) === -1) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
var resolvedImport = (0, _resolve2['default'])(importPath, context);
|
||
|
var resolvedContext = context.getPhysicalFilename ? context.getPhysicalFilename() : context.getFilename();
|
||
|
|
||
|
if (!resolvedImport || !resolvedContext) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
var importPkg = findNamedPackage(resolvedImport);
|
||
|
var contextPkg = findNamedPackage(resolvedContext);
|
||
|
|
||
|
if (importPkg.pkg && contextPkg.pkg && importPkg.pkg.name !== contextPkg.pkg.name) {
|
||
|
var importBaseName = _path2['default'].basename(importPath);
|
||
|
var importRoot = _path2['default'].dirname(importPkg.path);
|
||
|
var properPath = _path2['default'].relative(importRoot, resolvedImport);
|
||
|
var properImport = _path2['default'].join(
|
||
|
importPkg.pkg.name,
|
||
|
_path2['default'].dirname(properPath),
|
||
|
importBaseName === _path2['default'].basename(importRoot) ? '' : importBaseName);
|
||
|
|
||
|
context.report({
|
||
|
node: node,
|
||
|
message: 'Relative import from another package is not allowed. Use `' + String(properImport) + '` instead of `' + String(importPath) + '`',
|
||
|
fix: function () {function fix(fixer) {return fixer.replaceText(node, JSON.stringify(toPosixPath(properImport)));}return fix;}() });
|
||
|
|
||
|
|
||
|
}
|
||
|
}
|
||
|
|
||
|
module.exports = {
|
||
|
meta: {
|
||
|
type: 'suggestion',
|
||
|
docs: {
|
||
|
url: (0, _docsUrl2['default'])('no-relative-packages') },
|
||
|
|
||
|
fixable: 'code',
|
||
|
schema: [(0, _moduleVisitor.makeOptionsSchema)()] },
|
||
|
|
||
|
|
||
|
create: function () {function create(context) {
|
||
|
return (0, _moduleVisitor2['default'])(function (source) {return checkImportForRelativePackage(context, source.value, source);}, context.options[0]);
|
||
|
}return create;}() };
|
||
|
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1yZWxhdGl2ZS1wYWNrYWdlcy5qcyJdLCJuYW1lcyI6WyJ0b1Bvc2l4UGF0aCIsImZpbGVQYXRoIiwicmVwbGFjZSIsImZpbmROYW1lZFBhY2thZ2UiLCJmb3VuZCIsImN3ZCIsInBrZyIsIm5hbWUiLCJwYXRoIiwiam9pbiIsImNoZWNrSW1wb3J0Rm9yUmVsYXRpdmVQYWNrYWdlIiwiY29udGV4dCIsImltcG9ydFBhdGgiLCJub2RlIiwicG90ZW50aWFsVmlvbGF0aW9uVHlwZXMiLCJpbmRleE9mIiwicmVzb2x2ZWRJbXBvcnQiLCJyZXNvbHZlZENvbnRleHQiLCJnZXRQaHlzaWNhbEZpbGVuYW1lIiwiZ2V0RmlsZW5hbWUiLCJpbXBvcnRQa2ciLCJjb250ZXh0UGtnIiwiaW1wb3J0QmFzZU5hbWUiLCJiYXNlbmFtZSIsImltcG9ydFJvb3QiLCJkaXJuYW1lIiwicHJvcGVyUGF0aCIsInJlbGF0aXZlIiwicHJvcGVySW1wb3J0IiwicmVwb3J0IiwibWVzc2FnZSIsImZpeCIsImZpeGVyIiwicmVwbGFjZVRleHQiLCJKU09OIiwic3RyaW5naWZ5IiwibW9kdWxlIiwiZXhwb3J0cyIsIm1ldGEiLCJ0eXBlIiwiZG9jcyIsInVybCIsImZpeGFibGUiLCJzY2hlbWEiLCJjcmVhdGUiLCJzb3VyY2UiLCJ2YWx1ZSIsIm9wdGlvbnMiXSwibWFwcGluZ3MiOiJhQUFBLDRCO0FBQ0EsMEQ7O0FBRUEsc0Q7QUFDQSxrRTtBQUNBLGdEO0FBQ0EscUM7O0FBRUE7QUFDQSxTQUFTQSxXQUFULENBQXFCQyxRQUFyQixFQUErQjtBQUM3QixTQUFPQSxTQUFTQyxPQUFULENBQWlCLEtBQWpCLEVBQXdCLEdBQXhCLENBQVA7QUFDRDs7QUFFRCxTQUFTQyxnQkFBVCxDQUEwQkYsUUFBMUIsRUFBb0M7QUFDbEMsTUFBTUcsUUFBUSw0QkFBVSxFQUFFQyxLQUFLSixRQUFQLEVBQVYsQ0FBZDtBQUNBLE1BQUlHLE1BQU1FLEdBQU4sSUFBYSxDQUFDRixNQUFNRSxHQUFOLENBQVVDLElBQTVCLEVBQWtDO0FBQ2hDLFdBQU9KLGlCQUFpQkssa0JBQUtDLElBQUwsQ0FBVUwsTUFBTUksSUFBaEIsRUFBc0IsT0FBdEIsQ0FBakIsQ0FBUDtBQUNEO0FBQ0QsU0FBT0osS0FBUDtBQUNEOztBQUVELFNBQVNNLDZCQUFULENBQXVDQyxPQUF2QyxFQUFnREMsVUFBaEQsRUFBNERDLElBQTVELEVBQWtFO0FBQ2hFLE1BQU1DLDBCQUEwQixDQUFDLFFBQUQsRUFBVyxPQUFYLEVBQW9CLFNBQXBCLENBQWhDO0FBQ0EsTUFBSUEsd0JBQXdCQyxPQUF4QixDQUFnQyw2QkFBV0gsVUFBWCxFQUF1QkQsT0FBdkIsQ0FBaEMsTUFBcUUsQ0FBQyxDQUExRSxFQUE2RTtBQUMzRTtBQUNEOztBQUVELE1BQU1LLGlCQUFpQiwwQkFBUUosVUFBUixFQUFvQkQsT0FBcEIsQ0FBdkI7QUFDQSxNQUFNTSxrQkFBa0JOLFFBQVFPLG1CQUFSLEdBQThCUCxRQUFRTyxtQkFBUixFQUE5QixHQUE4RFAsUUFBUVEsV0FBUixFQUF0Rjs7QUFFQSxNQUFJLENBQUNILGNBQUQsSUFBbUIsQ0FBQ0MsZUFBeEIsRUFBeUM7QUFDdkM7QUFDRDs7QUFFRCxNQUFNRyxZQUFZakIsaUJBQWlCYSxjQUFqQixDQUFsQjtBQUNBLE1BQU1LLGFBQWFsQixpQkFBaUJjLGVBQWpCLENBQW5COztBQUVBLE1BQUlHLFVBQVVkLEdBQVYsSUFBaUJlLFdBQVdmLEdBQTVCLElBQW1DYyxVQUFVZCxHQUFWLENBQWNDLElBQWQsS0FBdUJjLFdBQVdmLEdBQVgsQ0FBZUMsSUFBN0UsRUFBbUY7QUFDakYsUUFBTWUsaUJBQWlCZCxrQkFBS2UsUUFBTCxDQUFjWCxVQUFkLENBQXZCO0FBQ0EsUUFBTVksYUFBYWhCLGtCQUFLaUIsT0FBTCxDQUFhTCxVQUFVWixJQUF2QixDQUFuQjtBQUNBLFFBQU1rQixhQUFhbEIsa0JBQUttQixRQUFMLENBQWNILFVBQWQsRUFBMEJSLGNBQTFCLENBQW5CO0FBQ0EsUUFBTVksZUFBZXBCLGtCQUFLQyxJQUFMO0FBQ25CVyxjQUFVZCxHQUFWLENBQWNDLElBREs7QUFFbkJDLHNCQUFLaUIsT0FBTCxDQUFhQyxVQUFiLENBRm1CO0FBR25CSix1QkFBbUJkLGtCQUFLZSxRQUFMLENBQWNDLFVBQWQsQ0FBbkIsR0FBK0MsRUFBL0MsR0FBb0RGLGNBSGpDLENBQXJCOztBQUtBWCxZQUFRa0IsTUFBUixDQUFlO0FBQ2JoQixnQkFEYTtBQUViaUIscUZBQXVFRixZQUF2RSw4QkFBc0doQixVQUF0RyxPQUZhO0FBR2JtQix3QkFBSyw0QkFBU0MsTUFBTUMsV0FBTixDQUFrQnBCLElBQWxCLEVBQXdCcUIsS0FBS0MsU0FBTCxDQUFlbkMsWUFBWTRCLFlBQVosQ0FBZixDQUF4QixDQUFULEVBQUwsY0FIYSxFQUFmOzs7QUFNRDtBQUNGOztBQUVEUSxPQUFPQyxPQUFQLEdBQWlCO0FBQ2ZDLFFBQU07QUFDSkMsVUFBTSxZQURGO0FBRUpDLFVBQU07QUFDSkMsV0FBSywwQkFBUSxzQkFBUixDQURELEVBRkY7O0FBS0pDLGFBQVMsTUFMTDtBQU1KQyxZQUFRLENBQUMsdUNBQUQsQ0FOSixFQURTOzs7QUFVZkMsUUFWZSwrQkFVUmpDLE9BVlEsRUFVQztBQUNkLGFBQU8sZ0NBQWMsVUFBQ2tDLE1BQUQsVUFBWW5DLDhCQUE4QkMsT0FBOUIsRUFBdUNrQyxPQUFPQyxLQUE5QyxFQUFxREQsTUFBckQsQ0FBWixFQUFkLEVBQXdGbEMsUUFBUW9DLE9BQVIsQ0FBZ0IsQ0FBaEIsQ0FBeEYsQ0FBUDtBQUNELEtBWmMsbUJBQWpCIiwiZmlsZSI6Im5vLXJlbGF0aXZlLXBhY2thZ2VzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgcmVhZFBrZ1VwIGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvcmVhZFBrZ1VwJztcblxuaW1wb3J0IHJlc29sdmUgZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy9yZXNvbHZlJztcbmltcG9ydCBtb2R1bGVWaXNpdG9yLCB7IG1ha2VPcHRpb25zU2NoZW1hIH0gZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy9tb2R1bGVWaXNpdG9yJztcbmltcG9ydCBpbXBvcnRUeXBlIGZyb20gJy4uL2NvcmUvaW1wb3J0VHlwZSc7XG5pbXBvcnQgZG9jc1VybCBmcm9tICcuLi9kb2NzVXJsJztcblxuLyoqIEBwYXJhbSB7c3RyaW5nfSBmaWxlUGF0aCAqL1xuZnVuY3Rpb24gdG9Qb3NpeFBhdGgoZmlsZVBhdGgpIHtcbiAgcmV0dXJuIGZpbGVQYXRoLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbn1cblxuZnVuY3Rpb24gZmluZE5hbWVkUGFja2FnZShmaWxlUGF0aCkge1xuICBjb25zdCBmb3VuZCA9IHJlYWRQa2dVcCh
|