All files / src spel-expression.ts

100% Statements 19/19
100% Branches 0/0
100% Functions 11/11
100% Lines 19/19

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 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65                          5429x 5429x       4x       1x       5396x 5396x 5396x       4983x 4983x       1x 1x       1x 1x       2x 2x       4x 4x       1x       15x      
import type { SpelNodeImpl } from './ast/spel-node.js';
import { ExpressionState } from './expression-state.js';
import type { EvaluationContext } from './evaluation-context/evaluation-context.js';
import { StandardEvaluationContext } from './standard-evaluation-context.js';
import type { TypedValue } from './typed-value.js';
import type { SpelReference } from './language/reference-extractor.js';
import { SpelReferenceExtractor } from './language/reference-extractor.js';
 
export class SpelExpression {
  public readonly expressionString: string;
  private readonly ast: SpelNodeImpl;
 
  constructor(expressionString: string, ast: SpelNodeImpl) {
    this.expressionString = expressionString;
    this.ast = ast;
  }
 
  public getAST(): SpelNodeImpl {
    return this.ast;
  }
 
  public getReferences(): SpelReference[] {
    return SpelReferenceExtractor.extractFromAst(this.ast);
  }
 
  public getValueWithContext(context: EvaluationContext): unknown {
    const state = new ExpressionState(context);
    const result = this.ast.getValue(state);
    return result.getValue();
  }
 
  public getValue(rootObject?: unknown): unknown {
    const context = new StandardEvaluationContext(rootObject);
    return this.getValueWithContext(context);
  }
 
  public getTypedValue(context: EvaluationContext): TypedValue {
    const state = new ExpressionState(context);
    return this.ast.getValue(state);
  }
 
  public getValueType(context: EvaluationContext): unknown {
    const state = new ExpressionState(context);
    return this.ast.getValueType(state);
  }
 
  public isWritable(context: EvaluationContext): boolean {
    const state = new ExpressionState(context);
    return this.ast.isWritable(state);
  }
 
  public setValue(context: EvaluationContext, newValue: unknown): void {
    const state = new ExpressionState(context);
    this.ast.setValue(state, newValue);
  }
 
  public getExpressionString(): string {
    return this.expressionString;
  }
 
  public toStringAST(): string {
    return this.ast.toStringAST();
  }
}