@specs-feup/lara
Version:
A js port of the popular framework for building source-to-source compilers
68 lines (54 loc) • 1.41 kB
text/typescript
import { arrayFromArgs } from "../core/LaraCore.js";
/**
* Represents a set of predefined strings.
*/
export default class PredefinedStrings {
private _name: string;
private _strict: boolean;
private _valuesSet: Set<string> = new Set();
constructor(name: string, strict: boolean, ...values: string[]) {
this._name = name;
this._strict = strict;
values = arrayFromArgs(values) as string[];
for (const value of values) {
this._valuesSet.add(value.toString());
}
}
/**
* @returns Available values.
*/
values(): string[] {
return Array.from(this._valuesSet.values());
}
/**
* @returns True if the given String is a valid value.
*/
isValid(value: string): boolean {
return this._valuesSet.has(value);
}
test(value: string): boolean {
if (!this.isValid(value)) {
const message = `Invalid ${
this._name
} '${value}'. Available values: ${this.values().join(", ")}`;
if (this._strict) {
throw message;
}
console.log(message);
return false;
}
return true;
}
parse(...args: string[]): string[] {
const argsArray = arrayFromArgs(args) as string[];
// Clear benchmarks
const parsedValues: string[] = [];
for (const arg of argsArray) {
if (!this.test(arg)) {
continue;
}
parsedValues.push(arg);
}
return parsedValues;
}
}