UNPKG

react-obsidian

Version:

Dependency injection framework for React and React Native applications

46 lines 2.44 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const GraphRegistry_1 = __importDefault(require("./registry/GraphRegistry")); const ProvidedPropertiesStore_1 = __importDefault(require("../ProvidedPropertiesStore")); const CircularDependenciesDetector_1 = require("./CircularDependenciesDetector"); const reflect_1 = require("../utils/reflect"); class PropertyRetriever { constructor(graph) { this.graph = graph; } retrieve(property, receiver, maybeDetector) { const mangledPropertyKey = ProvidedPropertiesStore_1.default.getMangledProperty(this.graph, property); const circularDependenciesDetector = maybeDetector !== null && maybeDetector !== void 0 ? maybeDetector : new CircularDependenciesDetector_1.CircularDependenciesDetector(this.graph.name); if (mangledPropertyKey && mangledPropertyKey in this.graph && circularDependenciesDetector.visit(this.graph.name, property)) { const proxiedGraph = new Proxy(this.graph, { get(graph, dependencyName) { return graph.retrieve(dependencyName, receiver, circularDependenciesDetector); }, }); const resolved = reflect_1.Reflect.get(this.graph, mangledPropertyKey, receiver)(proxiedGraph); circularDependenciesDetector.clear(); return resolved; } if (circularDependenciesDetector.hasCircularDependencies()) { throw new Error(`Could not resolve ${circularDependenciesDetector.firstDependencyName}` + ` from ${circularDependenciesDetector.graphName} because of a circular dependency:` + ` ${circularDependenciesDetector.getDependencies().join(' -> ')}`); } return this.getFromSubgraphs(property, circularDependenciesDetector, receiver); } getFromSubgraphs(property, circularDependenciesDetector, receiver) { for (const subgraph of GraphRegistry_1.default.getSubgraphs(this.graph)) { const result = subgraph.retrieve(property, receiver, circularDependenciesDetector); if (result) return result; } return undefined; } } exports.default = PropertyRetriever; //# sourceMappingURL=PropertyRetriever.js.map