mirror of
https://github.com/idanoo/GoScrobble.git
synced 2024-11-25 01:45:15 +00:00
128 lines
15 KiB
JavaScript
128 lines
15 KiB
JavaScript
|
'use strict';var _path = require('path');var _path2 = _interopRequireDefault(_path);
|
||
|
|
||
|
var _resolve = require('eslint-module-utils/resolve');var _resolve2 = _interopRequireDefault(_resolve);
|
||
|
var _moduleVisitor = require('eslint-module-utils/moduleVisitor');var _moduleVisitor2 = _interopRequireDefault(_moduleVisitor);
|
||
|
var _docsUrl = require('../docsUrl');var _docsUrl2 = _interopRequireDefault(_docsUrl);
|
||
|
var _importType = require('../core/importType');var _importType2 = _interopRequireDefault(_importType);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { 'default': obj };}
|
||
|
|
||
|
var containsPath = function containsPath(filepath, target) {
|
||
|
var relative = _path2['default'].relative(target, filepath);
|
||
|
return relative === '' || !relative.startsWith('..');
|
||
|
};
|
||
|
|
||
|
module.exports = {
|
||
|
meta: {
|
||
|
type: 'problem',
|
||
|
docs: {
|
||
|
url: (0, _docsUrl2['default'])('no-restricted-paths') },
|
||
|
|
||
|
|
||
|
schema: [
|
||
|
{
|
||
|
type: 'object',
|
||
|
properties: {
|
||
|
zones: {
|
||
|
type: 'array',
|
||
|
minItems: 1,
|
||
|
items: {
|
||
|
type: 'object',
|
||
|
properties: {
|
||
|
target: { type: 'string' },
|
||
|
from: { type: 'string' },
|
||
|
except: {
|
||
|
type: 'array',
|
||
|
items: {
|
||
|
type: 'string' },
|
||
|
|
||
|
uniqueItems: true },
|
||
|
|
||
|
message: { type: 'string' } },
|
||
|
|
||
|
additionalProperties: false } },
|
||
|
|
||
|
|
||
|
basePath: { type: 'string' } },
|
||
|
|
||
|
additionalProperties: false }] },
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
create: function () {function noRestrictedPaths(context) {
|
||
|
var options = context.options[0] || {};
|
||
|
var restrictedPaths = options.zones || [];
|
||
|
var basePath = options.basePath || process.cwd();
|
||
|
var currentFilename = context.getPhysicalFilename ? context.getPhysicalFilename() : context.getFilename();
|
||
|
var matchingZones = restrictedPaths.filter(function (zone) {
|
||
|
var targetPath = _path2['default'].resolve(basePath, zone.target);
|
||
|
|
||
|
return containsPath(currentFilename, targetPath);
|
||
|
});
|
||
|
|
||
|
function isValidExceptionPath(absoluteFromPath, absoluteExceptionPath) {
|
||
|
var relativeExceptionPath = _path2['default'].relative(absoluteFromPath, absoluteExceptionPath);
|
||
|
|
||
|
return (0, _importType2['default'])(relativeExceptionPath, context) !== 'parent';
|
||
|
}
|
||
|
|
||
|
function reportInvalidExceptionPath(node) {
|
||
|
context.report({
|
||
|
node: node,
|
||
|
message: 'Restricted path exceptions must be descendants of the configured `from` path for that zone.' });
|
||
|
|
||
|
}
|
||
|
|
||
|
var zoneExceptions = matchingZones.map(function (zone) {
|
||
|
var exceptionPaths = zone.except || [];
|
||
|
var absoluteFrom = _path2['default'].resolve(basePath, zone.from);
|
||
|
var absoluteExceptionPaths = exceptionPaths.map(function (exceptionPath) {return _path2['default'].resolve(absoluteFrom, exceptionPath);});
|
||
|
var hasValidExceptionPaths = absoluteExceptionPaths.
|
||
|
every(function (absoluteExceptionPath) {return isValidExceptionPath(absoluteFrom, absoluteExceptionPath);});
|
||
|
|
||
|
return {
|
||
|
absoluteExceptionPaths: absoluteExceptionPaths,
|
||
|
hasValidExceptionPaths: hasValidExceptionPaths };
|
||
|
|
||
|
});
|
||
|
|
||
|
function checkForRestrictedImportPath(importPath, node) {
|
||
|
var absoluteImportPath = (0, _resolve2['default'])(importPath, context);
|
||
|
|
||
|
if (!absoluteImportPath) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
matchingZones.forEach(function (zone, index) {
|
||
|
var absoluteFrom = _path2['default'].resolve(basePath, zone.from);
|
||
|
|
||
|
if (!containsPath(absoluteImportPath, absoluteFrom)) {
|
||
|
return;
|
||
|
}var _zoneExceptions$index =
|
||
|
|
||
|
zoneExceptions[index],hasValidExceptionPaths = _zoneExceptions$index.hasValidExceptionPaths,absoluteExceptionPaths = _zoneExceptions$index.absoluteExceptionPaths;
|
||
|
|
||
|
if (!hasValidExceptionPaths) {
|
||
|
reportInvalidExceptionPath(node);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
var pathIsExcepted = absoluteExceptionPaths.
|
||
|
some(function (absoluteExceptionPath) {return containsPath(absoluteImportPath, absoluteExceptionPath);});
|
||
|
|
||
|
if (pathIsExcepted) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
context.report({
|
||
|
node: node,
|
||
|
message: 'Unexpected path "{{importPath}}" imported in restricted zone.' + (zone.message ? ' ' + String(zone.message) : ''),
|
||
|
data: { importPath: importPath } });
|
||
|
|
||
|
});
|
||
|
}
|
||
|
|
||
|
return (0, _moduleVisitor2['default'])(function (source) {
|
||
|
checkForRestrictedImportPath(source.value, source);
|
||
|
}, { commonjs: true });
|
||
|
}return noRestrictedPaths;}() };
|
||
|
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1yZXN0cmljdGVkLXBhdGhzLmpzIl0sIm5hbWVzIjpbImNvbnRhaW5zUGF0aCIsImZpbGVwYXRoIiwidGFyZ2V0IiwicmVsYXRpdmUiLCJwYXRoIiwic3RhcnRzV2l0aCIsIm1vZHVsZSIsImV4cG9ydHMiLCJtZXRhIiwidHlwZSIsImRvY3MiLCJ1cmwiLCJzY2hlbWEiLCJwcm9wZXJ0aWVzIiwiem9uZXMiLCJtaW5JdGVtcyIsIml0ZW1zIiwiZnJvbSIsImV4Y2VwdCIsInVuaXF1ZUl0ZW1zIiwibWVzc2FnZSIsImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiwiYmFzZVBhdGgiLCJjcmVhdGUiLCJub1Jlc3RyaWN0ZWRQYXRocyIsImNvbnRleHQiLCJvcHRpb25zIiwicmVzdHJpY3RlZFBhdGhzIiwicHJvY2VzcyIsImN3ZCIsImN1cnJlbnRGaWxlbmFtZSIsImdldFBoeXNpY2FsRmlsZW5hbWUiLCJnZXRGaWxlbmFtZSIsIm1hdGNoaW5nWm9uZXMiLCJmaWx0ZXIiLCJ6b25lIiwidGFyZ2V0UGF0aCIsInJlc29sdmUiLCJpc1ZhbGlkRXhjZXB0aW9uUGF0aCIsImFic29sdXRlRnJvbVBhdGgiLCJhYnNvbHV0ZUV4Y2VwdGlvblBhdGgiLCJyZWxhdGl2ZUV4Y2VwdGlvblBhdGgiLCJyZXBvcnRJbnZhbGlkRXhjZXB0aW9uUGF0aCIsIm5vZGUiLCJyZXBvcnQiLCJ6b25lRXhjZXB0aW9ucyIsIm1hcCIsImV4Y2VwdGlvblBhdGhzIiwiYWJzb2x1dGVGcm9tIiwiYWJzb2x1dGVFeGNlcHRpb25QYXRocyIsImV4Y2VwdGlvblBhdGgiLCJoYXNWYWxpZEV4Y2VwdGlvblBhdGhzIiwiZXZlcnkiLCJjaGVja0ZvclJlc3RyaWN0ZWRJbXBvcnRQYXRoIiwiaW1wb3J0UGF0aCIsImFic29sdXRlSW1wb3J0UGF0aCIsImZvckVhY2giLCJpbmRleCIsInBhdGhJc0V4Y2VwdGVkIiwic29tZSIsImRhdGEiLCJzb3VyY2UiLCJ2YWx1ZSIsImNv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
|