UNPKG

alwz

Version:

Extendable library for typecasting

61 lines (60 loc) 1.89 kB
import Converter from './Converter.js'; import EV from './ErrorValue.js'; import Registry from './Registry.js'; /** * @ignore * @example * const odd = new Converter((input) => typeof input === 'number' && Boolean(input % 2), () => 1); * const even = new Converter((input) => typeof input === 'number' && !(input % 2), () => 2); * const Aggregator = new Aggregator(); * aggregator.register('odd', odd); * aggregator.register('even', even); * aggregator.to('odd')(3); // 3 * aggregator.to('odd')(4); // 1 * aggregator.to('even')(4); // 4 * aggregator.to('even')(5); // 2 */ export class Aggregator extends Registry { constructor() { super(); this.converter = (name) => { if (this._items.has(name)) { return this._items.get(name); } else { throw new Aggregator.AbsentConverter('converter has not been registered', name); } }; this.to = (name) => this.converter(name).convert; Object.freeze(this); } get converters() { return Array.from(this._items); } register(name, converter) { if (this._items.has(name)) { throw new Aggregator.DuplicateConverter('converter has already been registered', name); } else { if (converter instanceof Converter) { this._items.set(name, converter); } else { throw new Aggregator.InvalidConverter('must be an instance of Converter', converter); } } return this; } unregister(name) { this._items.delete(name); return this; } } Aggregator.DuplicateConverter = class extends EV { }; Aggregator.InvalidConverter = class extends EV { }; Aggregator.AbsentConverter = class extends EV { }; export default Aggregator; //# sourceMappingURL=Aggregator.js.map