@conarti/eslint-plugin-feature-sliced
Version:
Feature-sliced design methodology plugin
47 lines (46 loc) • 2.19 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.validateAndReport = void 0;
const utils_1 = require("@typescript-eslint/utils");
const feature_sliced_1 = require("../../../lib/feature-sliced");
const rule_1 = require("../../../lib/rule");
const errors_1 = require("./errors");
const is_not_suitable_for_validation_1 = require("./is-not-suitable-for-validation");
const specifiers_1 = require("./specifiers");
const extract_import_specifiers_1 = require("./specifiers/extract-import-specifiers");
const validate_node_1 = require("./validate-node");
function validate(node, pathsInfo, allowTypeImports) {
if ((0, validate_node_1.validateNode)(node, pathsInfo, allowTypeImports)) {
return [];
}
const isImportExpression = utils_1.ASTUtils.isNodeOfType(utils_1.AST_NODE_TYPES.ImportExpression)(node);
if (isImportExpression) {
return [node];
}
const specifiers = (0, extract_import_specifiers_1.extractImportSpecifiers)(node);
const invalidSpecifiers = (0, specifiers_1.validateSpecifiers)(specifiers, allowTypeImports);
if ((0, specifiers_1.hasErrorsAtAllSpecifiers)(specifiers, invalidSpecifiers)) {
return [node];
}
return invalidSpecifiers;
}
function reportValidationErrors(nodes, context, pathsInfo) {
nodes.forEach((node) => (0, errors_1.reportCanNotImportLayer)(context, node, pathsInfo));
}
function validateAndReport(node, context, optionsWithDefault) {
if (!(0, rule_1.hasPath)(node)) {
return;
}
const isIgnoredForValidation = (0, rule_1.isIgnoredTarget)(node, optionsWithDefault) || (0, rule_1.isIgnoredCurrentFile)(context, optionsWithDefault);
if (isIgnoredForValidation) {
return;
}
const pathsInfo = (0, feature_sliced_1.extractPathsInfo)(node, context);
if ((0, is_not_suitable_for_validation_1.isNotSuitableForValidation)(pathsInfo)) {
return;
}
const { allowTypeImports } = (0, rule_1.extractRuleOptions)(optionsWithDefault);
const nodesToReport = validate(node, pathsInfo, allowTypeImports);
reportValidationErrors(nodesToReport, context, pathsInfo);
}
exports.validateAndReport = validateAndReport;