UNPKG

@inversifyjs/core

Version:

InversifyJs core package

48 lines 2.74 kB
import { buildGetPlanOptionsFromPlanParams } from '../calculations/buildGetPlanOptionsFromPlanParams.js'; import { handlePlanError } from '../calculations/handlePlanError.js'; import { LazyPlanServiceNode } from '../models/LazyPlanServiceNode.js'; import { curryBuildPlanServiceNode } from './curryBuildPlanServiceNode.js'; import { curryBuildPlanServiceNodeFromClassElementMetadata } from './curryBuildPlanServiceNodeFromClassElementMetadata.js'; import { curryBuildPlanServiceNodeFromResolvedValueElementMetadata } from './curryBuildPlanServiceNodeFromResolvedValueElementMetadata.js'; import { curryBuildServiceNodeBindings } from './curryBuildServiceNodeBindings.js'; import { currySubplan } from './currySubplan.js'; class LazyRootPlanServiceNode extends LazyPlanServiceNode { #params; constructor(params, serviceNode) { super(serviceNode, serviceNode.serviceIdentifier); this.#params = params; } _buildPlanServiceNode() { return buildPlanServiceNode(this.#params); } } export const buildPlanServiceNodeFromClassElementMetadata = curryBuildPlanServiceNodeFromClassElementMetadata(circularBuildServiceNodeBindings); export const buildPlanServiceNodeFromResolvedValueElementMetadata = curryBuildPlanServiceNodeFromResolvedValueElementMetadata(circularBuildServiceNodeBindings); const subplan = currySubplan(buildPlanServiceNodeFromClassElementMetadata, buildPlanServiceNodeFromResolvedValueElementMetadata, buildPlanServiceNodeFromClassElementMetadata, buildPlanServiceNodeFromResolvedValueElementMetadata); const buildServiceNodeBindings = curryBuildServiceNodeBindings(subplan); function circularBuildServiceNodeBindings(params, bindingConstraintsList, serviceBindings, parentNode, chainedBindings) { return buildServiceNodeBindings(params, bindingConstraintsList, serviceBindings, parentNode, chainedBindings); } const buildPlanServiceNode = curryBuildPlanServiceNode(buildServiceNodeBindings); export function plan(params) { try { const getPlanOptions = buildGetPlanOptionsFromPlanParams(params); const planResultFromCache = params.operations.getPlan(getPlanOptions); if (planResultFromCache !== undefined) { return planResultFromCache; } const serviceNode = buildPlanServiceNode(params); const planResult = { tree: { root: new LazyRootPlanServiceNode(params, serviceNode), }, }; // Set the plan result in the cache no matter what, even if the plan is context dependent params.operations.setPlan(getPlanOptions, planResult); return planResult; } catch (error) { handlePlanError(params, error); } } //# sourceMappingURL=plan.js.map