UNPKG

eslint-plugin-obsidian

Version:

ESLint rules for Obsidian

82 lines 3.29 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SubgraphResolver = void 0; const ast_1 = require("../../utils/ast"); const classFile_1 = require("../../dto/classFile"); const file_1 = require("../../dto/file"); const filter_1 = require("../../utils/filter"); class SubgraphResolver { constructor(fileReader, classResolver) { this.fileReader = fileReader; this.classResolver = classResolver; } resolve(clazz) { return [ ...this.getImportedGraphs(clazz), ...this.getLocalGraphs(clazz), ...this.getExtendedGraphs(clazz), ] .filter(filter_1.nonNull) .flatMap((g) => [g, ...this.resolve(g)]); } getImportedGraphs(clazz) { const subgraphs = this.getSubgraphsPropertyFromGraphDecorator(clazz); return this.getImportedSubgraphClasses(clazz, subgraphs); } getImportedSubgraphClasses(clazz, subgraphs) { if (!subgraphs) return []; const subgraphNames = this.getSubgraphNamesFromDecoratorProperty(subgraphs); const classes = []; clazz.imports.forEach(($import) => { subgraphNames.forEach((subgraphName) => { if ($import.includes(subgraphName)) { classes.push(...this.fileReader.read(clazz.path, $import.path).toClassWithImports()); } }); }); return classes; } getLocalGraphs(clazz) { const subgraphs = this.getSubgraphsPropertyFromGraphDecorator(clazz); return this.getLocalSubgraphClasses(subgraphs, clazz); } getExtendedGraphs(clazz) { if (!clazz.superClass || clazz.superClass === 'ObjectGraph') return []; return [this.classResolver.resolve(clazz.superClass, clazz)]; } getSubgraphsPropertyFromGraphDecorator({ clazz }) { if (clazz.isAbstract) return undefined; const graphDecorator = clazz.requireDecoratorIgnoreCase('Graph'); return graphDecorator.getProperty('subgraphs'); } getLocalSubgraphClasses(subgraphs, clazz) { if (!subgraphs) return []; const allSubgraphs = this.getSubgraphNamesFromDecoratorProperty(subgraphs); const localGraphNames = this.getLocalGraphNames(allSubgraphs, clazz); return this.createLocalGraphClasses(clazz, localGraphNames); } createLocalGraphClasses({ clazz, imports, path }, localGraphNames) { if (localGraphNames.length === 0) return []; const parent = new file_1.File((0, ast_1.requireProgram)(clazz.node), path); return localGraphNames.map((localGraphName) => { return new classFile_1.ClassFile(parent.requireGraph(localGraphName), imports, path); }); } getSubgraphNamesFromDecoratorProperty(subgraphs) { return (0, ast_1.mapArrayExpression)(subgraphs.getValue(), (el) => el.name); } getLocalGraphNames(subgraphs, { imports }) { return subgraphs.filter((subgraph) => { return imports.some(($import) => { return $import.includes(subgraph); }) === false; }); } } exports.SubgraphResolver = SubgraphResolver; //# sourceMappingURL=subgraphResolver.js.map