UNPKG

react-obsidian

Version:

Dependency injection framework for React and React Native applications

50 lines 2.72 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"); 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.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(' -> ')}`); } const results = this.getFromSubgraphs(property, circularDependenciesDetector, receiver); if (results.length === 1) return results[0]; if (results.length > 1) { throw new Error(`Multiple subgraphs provide the property ${property}.` + 'You should probably provide a unique name to one of the providers: @Provide({name: \'uniqueName\')})'); } return undefined; } getFromSubgraphs(property, circularDependenciesDetector, receiver) { const subgraphs = GraphRegistry_1.default.getSubgraphs(this.graph); return subgraphs .map((subgraph) => subgraph.retrieve(property, receiver, circularDependenciesDetector)) .filter((result) => result !== undefined); } } exports.default = PropertyRetriever; //# sourceMappingURL=PropertyRetriever.js.map