import * as plugins from './lik.plugins' /** * allows you to easily keep track of a bunch of strings */ export interface ITriggerFunction { (): boolean } export class Stringmap { private _stringArray: string[] = [] private _triggerUntilTrueFunctionArray: ITriggerFunction[] = [] constructor() {} /** * add a string to the Stringmap */ addString(stringArg: string) { this._stringArray.push(stringArg) this.notifyTrigger() } /** * removes a string from Stringmap */ removeString(stringArg: string) { for (let keyArg in this._stringArray) { if (this._stringArray[keyArg] === stringArg) { this._stringArray.splice(parseInt(keyArg),1) } } this.notifyTrigger() } /** * wipes the Stringmap */ wipe() { this._stringArray = [] this.notifyTrigger() } /** * check if string is in Stringmap */ checkString(stringArg: string): boolean { return this._stringArray.indexOf(stringArg) !== -1 } /** * checks stringPresence with minimatch */ checkMinimatch(miniMatchStringArg: string): boolean { let foundMatch: boolean = false for (let stringItem of this._stringArray){ if (plugins.minimatch(stringItem,miniMatchStringArg)) { foundMatch = true } } return foundMatch } /** * checks if the Stringmap is empty */ checkIsEmpty() { return (this._stringArray.length === 0) } /** * gets a cloned copy of the current string Array */ getStringArray() { return plugins.lodash.cloneDeep(this._stringArray) } // trigger registering /** * register a new trigger */ registerUntilTrue(functionArg: ITriggerFunction,doFunctionArg) { this._triggerUntilTrueFunctionArray.push( () => { let result = functionArg() if (result === true) { doFunctionArg() } return result } ) this.notifyTrigger() } /** * notifies triggers */ private notifyTrigger() { let filteredArray = this._triggerUntilTrueFunctionArray.filter((functionArg) => { return !functionArg() }) this._triggerUntilTrueFunctionArray = filteredArray } }