UNPKG

@jondotsoy/flags

Version:

A Javascript arguments processor

86 lines 6.14 kB
/** Inmutable class */ export class Spec { #refiners; #initial; #accumulate; #metadata; constructor(initial, refiners, accumulate, metadata) { this.#initial = initial; this.#refiners = refiners; this.#accumulate = accumulate; this.#metadata = metadata ?? {}; } initial(initial) { return new Spec(initial, this.#refiners, this.#accumulate, this.#metadata); } accumulate(accumulate) { return new Spec(this.#initial, this.#refiners, accumulate, this.#metadata); } refine(refine) { return new Spec(this.#initial, [...this.#refiners, refine], this.#accumulate, this.#metadata); } metadata(values) { return new Spec(this.#initial, this.#refiners, this.#accumulate, { ...this.#metadata, ...values, }); } getMetadata(key) { return this.#metadata[key]; } hasMetadata(key) { return key in this.#metadata; } copyMetadata() { return { ...this.#metadata }; } getInitial() { return this.#initial; } getAccumulate() { return this.#accumulate; } getRefiners() { return this.#refiners; } parse(startIndex, args, prevValue, builder) { if (args.length === 0 || startIndex >= args.length) { return null; } let context = null; const arg = args[startIndex]; // Apply each refiner in sequence for (const refiner of this.#refiners) { const result = refiner(arg, startIndex, args, context, builder); if (result === null) { return null; } context = { args: result.args, index: startIndex, value: result.value, }; } // If no refiners or all passed, return the final context if (context) { // Extract the consumed args from the original args array const consumedArgs = args.slice(startIndex, startIndex + context.args.length); // Apply accumulate function if it exists let finalValue = context.value; if (this.#accumulate && prevValue) { // Use prevValue if provided, otherwise use initial value finalValue = this.#accumulate(prevValue?.current, context.value, startIndex, args); } return { args: consumedArgs, index: startIndex, value: finalValue, }; } return null; } static create() { return new Spec(null, []); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9idWlsZGVycy9TcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXNCQSxzQkFBc0I7QUFDdEIsTUFBTSxPQUFPLElBQUk7SUFDZixTQUFTLENBQVc7SUFDcEIsUUFBUSxDQUFlO0lBQ3ZCLFdBQVcsQ0FBYztJQUN6QixTQUFTLENBQXNCO0lBRS9CLFlBQ0UsT0FBcUIsRUFDckIsUUFBa0IsRUFDbEIsVUFBdUIsRUFDdkIsUUFBOEI7UUFFOUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7UUFDeEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7UUFDMUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUM7UUFDOUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLElBQUksRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxPQUFPLENBQUksT0FBVTtRQUNuQixPQUFPLElBQUksSUFBSSxDQUNiLE9BQU8sRUFDUCxJQUFJLENBQUMsU0FBUyxFQUNkLElBQUksQ0FBQyxXQUFXLEVBQ2hCLElBQUksQ0FBQyxTQUFTLENBQ2YsQ0FBQztJQUNKLENBQUM7SUFFRCxVQUFVLENBQUMsVUFBc0I7UUFDL0IsT0FBTyxJQUFJLElBQUksQ0FDYixJQUFJLENBQUMsUUFBUSxFQUNiLElBQUksQ0FBQyxTQUFTLEVBQ2QsVUFBVSxFQUNWLElBQUksQ0FBQyxTQUFTLENBQ2YsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLENBQUksTUFBYztRQUN0QixPQUFPLElBQUksSUFBSSxDQUNiLElBQUksQ0FBQyxRQUFRLEVBQ2IsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLEVBQzNCLElBQUksQ0FBQyxXQUFXLEVBQ2hCLElBQUksQ0FBQyxTQUFTLENBQ2YsQ0FBQztJQUNKLENBQUM7SUFFRCxRQUFRLENBQUMsTUFBMkI7UUFDbEMsT0FBTyxJQUFJLElBQUksQ0FDYixJQUFJLENBQUMsUUFBUSxFQUNiLElBQUksQ0FBQyxTQUFTLEVBQ2QsSUFBSSxDQUFDLFdBQVcsRUFDaEI7WUFDRSxHQUFHLElBQUksQ0FBQyxTQUFTO1lBQ2pCLEdBQUcsTUFBTTtTQUNWLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCxXQUFXLENBQUksR0FBVztRQUN4QixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFNLENBQUM7SUFDbEMsQ0FBQztJQUVELFdBQVcsQ0FBQyxHQUFXO1FBQ3JCLE9BQU8sR0FBRyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDL0IsQ0FBQztJQUVELFlBQVk7UUFDVixPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVELFVBQVU7UUFDUixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVELGFBQWE7UUFDWCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUVELFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUVELEtBQUssQ0FDSCxVQUFrQixFQUNsQixJQUFjLEVBQ2QsU0FBdUMsRUFDdkMsT0FBcUI7UUFFckIsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxVQUFVLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ25ELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELElBQUksT0FBTyxHQUFrQixJQUFJLENBQUM7UUFDbEMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRTdCLGlDQUFpQztRQUNqQyxLQUFLLE1BQU0sT0FBTyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNyQyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBRWhFLElBQUksTUFBTSxLQUFLLElBQUksRUFBRSxDQUFDO2dCQUNwQixPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7WUFFRCxPQUFPLEdBQUc7Z0JBQ1IsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO2dCQUNqQixLQUFLLEVBQUUsVUFBVTtnQkFDakIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLO2FBQ3BCLENBQUM7UUFDSixDQUFDO1FBRUQseURBQXlEO1FBQ3pELElBQUksT0FBTyxFQUFFLENBQUM7WUFDWix5REFBeUQ7WUFDekQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FDN0IsVUFBVSxFQUNWLFVBQVUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FDakMsQ0FBQztZQUVGLHlDQUF5QztZQUN6QyxJQUFJLFVBQVUsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO1lBQy9CLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxTQUFTLEVBQUUsQ0FBQztnQkFDbEMseURBQXlEO2dCQUN6RCxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FDM0IsU0FBUyxFQUFFLE9BQU8sRUFDbEIsT0FBTyxDQUFDLEtBQUssRUFDYixVQUFVLEVBQ1YsSUFBSSxDQUNMLENBQUM7WUFDSixDQUFDO1lBRUQsT0FBTztnQkFDTCxJQUFJLEVBQUUsWUFBWTtnQkFDbEIsS0FBSyxFQUFFLFVBQVU7Z0JBQ2pCLEtBQUssRUFBRSxVQUFVO2FBQ2xCLENBQUM7UUFDSixDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsTUFBTSxDQUFDLE1BQU07UUFDWCxPQUFPLElBQUksSUFBSSxDQUFhLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN4QyxDQUFDO0NBQ0YifQ==