import { AsyncBooleanExpression } from "./AsyncBooleanExpression"; export abstract class StringValueAsyncMatcher extends AsyncBooleanExpression { abstract getStringValue( t:T ):Promise; } export abstract class LitaralAsyncMatcher extends StringValueAsyncMatcher { _literal:L constructor( literal:L ) { super(); this._literal = literal; } async evaluate( t:T ):Promise { let value = await this.getStringValue( t ); if ( value === null ) { return false; } return Promise.resolve( this._literal === value ); } } export abstract class ContainsLitaralAsyncMatcher extends StringValueAsyncMatcher { _literal:L constructor( literal:L ) { super(); this._literal = literal; } async evaluate( t:T ):Promise { let value = await this.getStringValue( t ); if ( value === null ) { return false; } return Promise.resolve( value.indexOf( this._literal ) !== -1 ); } } export abstract class RegExpAsyncMatcher extends StringValueAsyncMatcher { private _regexp:RegExp; constructor( regexp:RegExp ) { super(); this._regexp = regexp; } async evaluate( t:T ):Promise { let value = await this.getStringValue( t ); if ( value === null ) { return false; } return Promise.resolve( this._regexp.test( value ) ); } }