@inversifyjs/core
Version:
InversifyJs core package
48 lines • 2.74 kB
JavaScript
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