76 lines
1.5 KiB
TypeScript
76 lines
1.5 KiB
TypeScript
![]() |
import { AsyncBooleanExpression } from "./AsyncBooleanExpression";
|
||
|
|
||
|
export abstract class StringValueAsyncMatcher<T> extends AsyncBooleanExpression<T>
|
||
|
{
|
||
|
abstract getStringValue( t:T ):Promise<string>;
|
||
|
}
|
||
|
|
||
|
export abstract class LitaralAsyncMatcher<T,L extends string> extends StringValueAsyncMatcher<T>
|
||
|
{
|
||
|
_literal:L
|
||
|
constructor( literal:L )
|
||
|
{
|
||
|
super();
|
||
|
this._literal = literal;
|
||
|
}
|
||
|
|
||
|
async evaluate( t:T ):Promise<boolean>
|
||
|
{
|
||
|
|
||
|
let value = await this.getStringValue( t );
|
||
|
|
||
|
if ( value === null )
|
||
|
{
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
return Promise.resolve( this._literal === value );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
export abstract class ContainsLitaralAsyncMatcher<T,L extends string> extends StringValueAsyncMatcher<T>
|
||
|
{
|
||
|
_literal:L
|
||
|
constructor( literal:L )
|
||
|
{
|
||
|
super();
|
||
|
this._literal = literal;
|
||
|
}
|
||
|
|
||
|
async evaluate( t:T ):Promise<boolean>
|
||
|
{
|
||
|
|
||
|
let value = await this.getStringValue( t );
|
||
|
|
||
|
if ( value === null )
|
||
|
{
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
return Promise.resolve( value.indexOf( this._literal ) !== -1 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
export abstract class RegExpAsyncMatcher<T> extends StringValueAsyncMatcher<T>
|
||
|
{
|
||
|
private _regexp:RegExp;
|
||
|
|
||
|
constructor( regexp:RegExp )
|
||
|
{
|
||
|
super();
|
||
|
this._regexp = regexp;
|
||
|
}
|
||
|
|
||
|
async evaluate( t:T ):Promise<boolean>
|
||
|
{
|
||
|
let value = await this.getStringValue( t );
|
||
|
|
||
|
if ( value === null )
|
||
|
{
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
return Promise.resolve( this._regexp.test( value ) );
|
||
|
}
|
||
|
|
||
|
}
|