lik/ts/lik.stringmap.ts

120 lines
2.7 KiB
TypeScript
Raw Normal View History

2022-05-27 15:53:02 +00:00
import * as plugins from './lik.plugins.js';
2016-07-21 22:16:45 +00:00
/**
* allows you to easily keep track of a bunch of strings
2016-07-21 22:16:45 +00:00
*/
2020-07-12 00:44:50 +00:00
export type TTriggerFunction = (stringArray?: string[]) => boolean;
2016-07-21 22:16:45 +00:00
export class Stringmap {
private _stringArray: string[] = [];
2020-05-25 15:38:57 +00:00
private _triggerUntilTrueFunctionArray: TTriggerFunction[] = [];
constructor() {}
/**
* add a string to the Stringmap
*/
addString(stringArg: string) {
this._stringArray.push(stringArg);
this.notifyTrigger();
}
2016-07-21 22:16:45 +00:00
/**
* like addString, but accepts an array of strings
*/
addStringArray(stringArrayArg: string[]) {
2020-02-06 11:11:16 +00:00
for (const stringItem of stringArrayArg) {
this.addString(stringItem);
2016-09-21 11:51:37 +00:00
}
}
2016-09-21 11:51:37 +00:00
/**
* removes a string from Stringmap
*/
removeString(stringArg: string) {
2020-02-06 11:11:16 +00:00
for (const 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();
}
2016-07-21 22:16:45 +00:00
/**
* check if string is in Stringmap
*/
2018-11-23 19:33:44 +00:00
public checkString(stringArg: string): boolean {
return this._stringArray.indexOf(stringArg) !== -1;
}
2016-07-22 12:59:09 +00:00
/**
* checks stringPresence with minimatch
*/
2018-11-23 19:33:44 +00:00
public checkMinimatch(miniMatchStringArg: string): boolean {
2020-05-25 22:18:41 +00:00
const smartMatchInstance = new plugins.smartmatch.SmartMatch(miniMatchStringArg);
let foundMatch: boolean = false;
2020-02-06 11:11:16 +00:00
for (const stringItem of this._stringArray) {
2020-05-25 22:04:21 +00:00
if (smartMatchInstance.match(stringItem)) {
foundMatch = true;
}
}
return foundMatch;
}
2016-07-22 12:59:09 +00:00
/**
* checks if the Stringmap is empty
*/
2018-11-23 19:33:44 +00:00
public checkIsEmpty() {
return this._stringArray.length === 0;
}
/**
* gets a cloned copy of the current string Array
*/
2018-11-23 19:33:44 +00:00
public getStringArray() {
const returnArray: string[] = [];
for (const stringItem of this._stringArray) {
returnArray.push(stringItem);
}
return returnArray;
}
// trigger registering
/**
* register a new trigger
*/
2020-05-25 15:38:57 +00:00
public registerUntilTrue(functionArg: TTriggerFunction, callbackArg?: () => any) {
2020-05-25 22:18:41 +00:00
const trueDeferred = plugins.smartpromise.defer();
this._triggerUntilTrueFunctionArray.push(() => {
2020-05-25 15:38:57 +00:00
const result = functionArg(this.getStringArray());
if (result === true) {
2020-05-25 13:18:53 +00:00
if (callbackArg) {
callbackArg();
}
trueDeferred.resolve();
}
return result;
});
this.notifyTrigger();
2020-05-25 13:18:53 +00:00
return trueDeferred.promise;
}
/**
* notifies triggers
*/
private notifyTrigger() {
2020-07-12 00:44:50 +00:00
const filteredArray = this._triggerUntilTrueFunctionArray.filter((functionArg) => {
2018-07-15 14:04:27 +00:00
return !functionArg();
});
this._triggerUntilTrueFunctionArray = filteredArray;
}
}