All files / src/bean default-bean-resolver.ts

100% Statements 17/17
100% Branches 11/11
100% Functions 4/4
100% Lines 17/17

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42          21x 21x     20x 6x 6x 3x   3x     14x 14x 8x     6x 6x 1x   5x       8x       4x       4x      
import type { BeanResolver } from './bean-resolver.js';
import { SpelEvaluationException } from '../error/spel-evaluation-exception.js';
import { SpelMessage } from '../error/spel-message.js';
 
export class DefaultBeanResolver implements BeanResolver {
  private readonly beans = new Map<string, unknown>();
  private readonly factoryBeans = new Map<string, () => unknown>();
 
  public resolve(name: string, isFactoryBean = false): unknown {
    if (isFactoryBean) {
      const factory = this.factoryBeans.get(name);
      if (factory) {
        return factory();
      }
      throw new SpelEvaluationException(-1, SpelMessage.BEAN_NOT_FOUND, `&${name}`);
    }
 
    const bean = this.beans.get(name);
    if (bean !== undefined) {
      return bean;
    }
    // Also check factory beans as regular resolution
    const factory = this.factoryBeans.get(name);
    if (factory) {
      return factory();
    }
    throw new SpelEvaluationException(-1, SpelMessage.BEAN_NOT_FOUND, name);
  }
 
  public register(name: string, bean: unknown): void {
    this.beans.set(name, bean);
  }
 
  public registerFactory(name: string, factory: () => unknown): void {
    this.factoryBeans.set(name, factory);
  }
 
  public has(name: string): boolean {
    return this.beans.has(name) || this.factoryBeans.has(name);
  }
}