import { BooleanExpression } from "./BooleanExpression"; export abstract class StringValueMatcher extends BooleanExpression { abstract getStringValue( t:T ):string; } export abstract class LitaralMatcher extends StringValueMatcher { _literal:L constructor( literal:L ) { super(); this._literal = literal; } evaluate( t:T ) { let value = this.getStringValue( t ); return this._literal === value; } } export abstract class RegExpMatcher extends StringValueMatcher { private _regexp:RegExp; constructor( regexp:RegExp ) { super(); this._regexp = regexp; } evaluate( t:T ) { let value = this.getStringValue( t ); return this._regexp.test( value ); } }