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

100% Statements 33/33
100% Branches 15/15
100% Functions 5/5
100% Lines 33/33

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  1x 1x   1x 21x 21x   21x 20x 6x 6x 3x 3x 3x 3x   14x 19x 8x 8x   6x 15x 1x 1x 5x 20x   21x 8x 8x   21x 4x 4x   21x 4x 4x 21x  
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);
  }
}