forked from MapComplete/MapComplete
Add more docs, add more checks, add more tests
This commit is contained in:
parent
a50b9fba59
commit
2c3c110624
7 changed files with 162 additions and 13 deletions
|
@ -1,5 +1,4 @@
|
|||
import {Utils} from "../Utils";
|
||||
import {type} from "os";
|
||||
|
||||
export abstract class TagsFilter {
|
||||
abstract matches(tags: { k: string, v: string }[]): boolean
|
||||
|
@ -26,12 +25,14 @@ export class RegexTag extends TagsFilter {
|
|||
private readonly key: RegExp | string;
|
||||
private readonly value: RegExp | string;
|
||||
private readonly invert: boolean;
|
||||
private readonly matchesEmpty: boolean
|
||||
|
||||
constructor(key: string | RegExp, value: RegExp | string, invert: boolean = false) {
|
||||
super();
|
||||
this.key = key;
|
||||
this.value = value;
|
||||
this.invert = invert;
|
||||
this.matchesEmpty = RegexTag.doesMatch("", this.value);
|
||||
}
|
||||
|
||||
private static doesMatch(fromTag: string, possibleRegex: string | RegExp): boolean {
|
||||
|
@ -65,6 +66,10 @@ export class RegexTag extends TagsFilter {
|
|||
return RegexTag.doesMatch(tag.v, this.value) != this.invert;
|
||||
}
|
||||
}
|
||||
if(this.matchesEmpty){
|
||||
// The value is 'empty'
|
||||
return !this.invert;
|
||||
}
|
||||
// The matching key was not found
|
||||
return this.invert;
|
||||
}
|
||||
|
@ -244,7 +249,7 @@ export class Or extends TagsFilter {
|
|||
}
|
||||
|
||||
usedKeys(): string[] {
|
||||
return [].concat(this.or.map(subkeys => subkeys.usedKeys()));
|
||||
return [].concat(...this.or.map(subkeys => subkeys.usedKeys()));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -363,7 +368,7 @@ export class And extends TagsFilter {
|
|||
}
|
||||
|
||||
usedKeys(): string[] {
|
||||
return [].concat(this.and.map(subkeys => subkeys.usedKeys()));
|
||||
return [].concat(...this.and.map(subkeys => subkeys.usedKeys()));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue