aboutsummaryrefslogblamecommitdiff
path: root/src/pattern.ts
blob: d21710f42e97940cd0b144a21633403d8cbed109 (plain) (tree)
1
2
3
4
5
6
7
8




                           

 
                      





                                                                                      







                                                                                     







                                  

                                                                    


                                                                                                  
                                 


                      





                                


                           








                                                           



                                  
                           

     




                                    

                                        


          




                                                       




                                                  
 
export type PatternFlat = {
    id: number | string,
    isRegex: boolean,
    value: string,
    label: string
}

export class Pattern {
    id: number | string;
    isRegex: boolean;
    value: string;
    label: string;

    constructor(id: number | string, isRegex: boolean, value: string, label: string) {
        this.id = id;
        this.isRegex = isRegex;
        this.value = value;
        this.label = label;
    }

    get regex() { return new RegExp(this.isRegex ? this.value : `^${this.value}$`); }
    get isEmpty() { return this.label === null; }
    deflate() {
        return {
            id: this.id,
            isRegex: this.isRegex,
            value: this.value,
            label: this.label
        };
    }
    static emptyPattern = () => new Pattern(0, true, '', null);
    static anyPattern = () => new Pattern('any', true, '.*', 'Any');
    static inflate = (obj: PatternFlat) => new Pattern(obj.id, obj.isRegex, obj.value, obj.label);
}

export type PatternEntryColor = {
    background: string
}

export type PatternEntryFlat = {
    name: string,
    idx: number,
    cal: PatternFlat,
    event: PatternFlat,
    color: PatternEntryColor
}

export class PatternEntry {
    name: string;
    idx: number;
    cal: Pattern;
    event: Pattern; 
    color: PatternEntryColor;

    constructor(name: string, idx: number,
                calPattern: Pattern, eventPattern: Pattern,
                color: PatternEntryColor) {
        this.name = name;
        this.idx = idx;
        this.cal = calPattern;
        this.event = eventPattern;
        this.color = color;
    }

    deflate() {
        return {
            name: this.name,
            idx: this.idx,
            cal: this.cal.deflate(),
            event: this.event.deflate(),
            color: this.color
        };
    }

    static defaultPatternEntry = (idx: number) => (
        new PatternEntry('', idx,
            Pattern.emptyPattern(),
            Pattern.anyPattern(), {background: null}));

    static inflate = (obj: PatternEntryFlat) => (
        new PatternEntry(obj.name, obj.idx,
            Pattern.inflate(obj.cal),
            Pattern.inflate(obj.event), obj.color)
    );
}