mcps-sdk-js
Version:
MCPS JavaScript SDK
103 lines (87 loc) • 2.08 kB
text/typescript
import { SdkError } from '../errors';
import * as is from 'is_js';
export class Condition {
private key: EventKey;
private value: string | EventAction;
private op: string;
constructor(key: EventKey) {
this.key = key;
this.value = '';
this.op = '';
}
lte(value: string): Condition {
return this.fill(value, '<=');
}
gte(value: string): Condition {
return this.fill(value, '>=');
}
le(value: string): Condition {
return this.fill(value, '<');
}
ge(value: string): Condition {
return this.fill(value, '>');
}
eq(value: string): Condition {
return this.fill(value, '=');
}
contains(value: string): Condition {
return this.fill(value, 'CONTAINS');
}
toString(): string {
if (is.empty(this.key) || is.empty(this.value) || is.empty(this.op)) {
throw new SdkError('invalid condition');
}
return this.key + this.op + "'" + this.value + "'";
}
private fill(value: string, op: string): Condition {
this.value = value;
this.op = op;
return this;
}
}
/**
* A builder for building event query strings
*/
export class EventQueryBuilder {
private conditions = new Array<Condition>();
/**
* Add a query condition
* @param eventKey
* @param value
* @returns The builder itself
*/
addCondition(condition: Condition): EventQueryBuilder {
this.conditions.push(condition);
return this;
}
/**
* Convert the current builder to the query string
* @returns The query string
*/
build(): string {
let query = '';
this.conditions.forEach((c, index) => {
if (index > 0) {
query += ' AND ';
}
query += c.toString();
});
return query;
}
}
export enum EventKey {
Type = 'tm.event',
Action = 'action',
Sender = 'sender',
Recipient = 'recipient',
DestinationValidator = 'destination-validator',
RequestID = 'request-id',
// TODO: more
}
export enum EventAction {
Send = 'send',
Burn = 'burn',
SetMemoRegexp = 'set-memo-regexp',
EditValidator = 'edit_validator',
// TODO: more
}