library-ts/browser/expressions/AsyncStringMatcher.ts

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 ) );
}
}