SnareChops/SQiggL

View on GitHub
src/modifiers.ts

Summary

Maintainability
A
0 mins
Test Coverage
import {ExpressionResult, BooleanExpressionResult} from './expressions';

export interface BaseModifier{
    identifiers: string[],
}

export interface BooleanModifier extends BaseModifier{
    rule: (prevResult: boolean, values?: string[]) => boolean;
}

export type Modifier = BooleanModifier;

/**
 * @internal
 */
export var Not: BooleanModifier = {
    identifiers: ['!', 'not'],
    rule: (prevResult: boolean, values: string[]) => !prevResult
};

/**
 * @internal
 */
export var OrEqual: BooleanModifier = {
    identifiers: ['='],
    rule: (prevResult: boolean, values: string[]) => prevResult || values[0] === values[1]
};

/**
 * @internal
 */
export var LengthOrEqual: BooleanModifier = {
    identifiers: ['='],
    rule: (prevResult: boolean, values: string[]) => prevResult || values[0].length === +values[1]
};

/**
 * @internal
 */
export var BetweenOrEqual: BooleanModifier = {
    identifiers: ['='],
    rule: (prevResult: boolean, values: string[]) => prevResult || +values[0] === +values[1] || +values[0] === +values[2]
};

export var CORE_MODIFIERS: Modifier[] = [
    Not,
    OrEqual,
    LengthOrEqual,
    BetweenOrEqual
];