UNPKG

convert

Version:

The smallest & fastest library for really easy, totally type-safe unit conversions in TypeScript & JavaScript

58 lines 6.81 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.convertMany = convertMany; const convert_1 = require("./convert.cjs"); const splitExpression = /(-?(?:\d+)?\.?\d+)\s?(\S+)/g; function to(unit, kind) { const isBest = unit === 'best'; let result = 0; let resolvedUnit; let isFirstPass = true; do { const converted = (0, convert_1.convert)(Number(this._search[1]), this._search[2]).to( // biome-ignore lint/style/noNonNullAssertion: isBest and not isFirstPass implies resolvedUnit (isBest && !isFirstPass ? resolvedUnit : unit)); if (isBest && isFirstPass) { result += converted.quantity; resolvedUnit = converted.unit; isFirstPass = false; } else { result += converted; } // biome-ignore lint/style/noNonNullAssertion: do while loop implies this._search is not null this._search = splitExpression.exec(this._value); } while (this._search); if (isBest) { // biome-ignore lint/style/noNonNullAssertion: isBest implies resolvedUnit return (0, convert_1.convert)(result, resolvedUnit).to('best', kind); } return result; } /** * Convert several values in a string into a single unit. * * @example * ```ts * convertMany('1d 12h').to('hours') === 36; * ``` * * @param value - The string to parse as values * * @public */ function convertMany(value) { splitExpression.lastIndex = 0; const search = splitExpression.exec(value); if (!search) { throw new RangeError(`value did not match expression ${splitExpression.source}`); } // eslint-disable-next-line @typescript-eslint/consistent-type-assertions return { to: to.bind({ _search: search, _value: value, }), }; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVydC1tYW55LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnZlcnRlcnMvY29udmVydC1tYW55LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBeURBLGtDQWVDO0FBckVELDJDQUFvQztBQUVwQyxNQUFNLGVBQWUsR0FBRyw2QkFBNkIsQ0FBQztBQU90RCxTQUFTLEVBQUUsQ0FBc0IsSUFBbUIsRUFBRSxJQUEyQjtJQUNoRixNQUFNLE1BQU0sR0FBRyxJQUFJLEtBQUssTUFBTSxDQUFDO0lBRS9CLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNmLElBQUksWUFBdUIsQ0FBQztJQUM1QixJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUM7SUFFdkIsR0FBRyxDQUFDO1FBQ0gsTUFBTSxTQUFTLEdBQUcsSUFBQSxpQkFBTyxFQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQVMsQ0FBQyxDQUFDLEVBQUU7UUFDN0UsOEZBQThGO1FBQzlGLENBQUMsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxZQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBUyxDQUNULENBQUM7UUFFaEQsSUFBSSxNQUFNLElBQUksV0FBVyxFQUFFLENBQUM7WUFDM0IsTUFBTSxJQUFLLFNBQStDLENBQUMsUUFBUSxDQUFDO1lBQ3BFLFlBQVksR0FBSSxTQUErQyxDQUFDLElBQUksQ0FBQztZQUNyRSxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLENBQUM7YUFBTSxDQUFDO1lBQ1AsTUFBTSxJQUFJLFNBQW1CLENBQUM7UUFDL0IsQ0FBQztRQUVELDZGQUE2RjtRQUM3RixJQUFJLENBQUMsT0FBTyxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBRSxDQUFDO0lBQ25ELENBQUMsUUFBUSxJQUFJLENBQUMsT0FBTyxFQUFFO0lBRXZCLElBQUksTUFBTSxFQUFFLENBQUM7UUFDWiwwRUFBMEU7UUFDMUUsT0FBTyxJQUFBLGlCQUFPLEVBQUMsTUFBTSxFQUFFLFlBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2YsQ0FBQztBQUVEOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsU0FBZ0IsV0FBVyxDQUFDLEtBQWE7SUFDeEMsZUFBZSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFDOUIsTUFBTSxNQUFNLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUUzQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDYixNQUFNLElBQUksVUFBVSxDQUFDLGtDQUFrQyxlQUFlLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUNsRixDQUFDO0lBRUQseUVBQXlFO0lBQ3pFLE9BQU87UUFDTixFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQztZQUNYLE9BQU8sRUFBRSxNQUFNO1lBQ2YsTUFBTSxFQUFFLEtBQUs7U0FDYixDQUFDO0tBQ3lCLENBQUM7QUFDOUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQmVzdEtpbmQgfSBmcm9tICcuLi9jb252ZXJzaW9ucy90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IEJlc3RDb252ZXJzaW9uLCBDb252ZXJ0ZXIgfSBmcm9tICcuLi90eXBlcy9jb252ZXJ0ZXInO1xuaW1wb3J0IHR5cGUgeyBCZXN0VW5pdHMsIFVuaXQgfSBmcm9tICcuLi90eXBlcy91bml0cyc7XG5pbXBvcnQgeyBjb252ZXJ0IH0gZnJvbSAnLi9jb252ZXJ0JztcblxuY29uc3Qgc3BsaXRFeHByZXNzaW9uID0gLygtPyg/OlxcZCspP1xcLj9cXGQrKVxccz8oXFxTKykvZztcblxudHlwZSBDb252ZXJ0ZXJUaGlzID0ge1xuXHRfc2VhcmNoOiBSZWdFeHBFeGVjQXJyYXk7XG5cdF92YWx1ZTogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gdG8odGhpczogQ29udmVydGVyVGhpcywgdW5pdDogVW5pdCB8ICdiZXN0Jywga2luZD86IEJlc3RLaW5kIHwgdW5kZWZpbmVkKSB7XG5cdGNvbnN0IGlzQmVzdCA9IHVuaXQgPT09ICdiZXN0JztcblxuXHRsZXQgcmVzdWx0ID0gMDtcblx0bGV0IHJlc29sdmVkVW5pdDogQmVzdFVuaXRzO1xuXHRsZXQgaXNGaXJzdFBhc3MgPSB0cnVlO1xuXG5cdGRvIHtcblx0XHRjb25zdCBjb252ZXJ0ZWQgPSBjb252ZXJ0KE51bWJlcih0aGlzLl9zZWFyY2hbMV0pLCB0aGlzLl9zZWFyY2hbMl0gYXMgVW5pdCkudG8oXG5cdFx0XHQvLyBiaW9tZS1pZ25vcmUgbGludC9zdHlsZS9ub05vbk51bGxBc3NlcnRpb246IGlzQmVzdCBhbmQgbm90IGlzRmlyc3RQYXNzIGltcGxpZXMgcmVzb2x2ZWRVbml0XG5cdFx0XHQoaXNCZXN0ICYmICFpc0ZpcnN0UGFzcyA/IHJlc29sdmVkVW5pdCEgOiB1bml0KSBhcyBVbml0LFxuXHRcdCkgYXMgbnVtYmVyIHwgQmVzdENvbnZlcnNpb248bnVtYmVyLCBCZXN0VW5pdHM+O1xuXG5cdFx0aWYgKGlzQmVzdCAmJiBpc0ZpcnN0UGFzcykge1xuXHRcdFx0cmVzdWx0ICs9IChjb252ZXJ0ZWQgYXMgQmVzdENvbnZlcnNpb248bnVtYmVyLCBCZXN0VW5pdHM+KS5xdWFudGl0eTtcblx0XHRcdHJlc29sdmVkVW5pdCA9IChjb252ZXJ0ZWQgYXMgQmVzdENvbnZlcnNpb248bnVtYmVyLCBCZXN0VW5pdHM+KS51bml0O1xuXHRcdFx0aXNGaXJzdFBhc3MgPSBmYWxzZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVzdWx0ICs9IGNvbnZlcnRlZCBhcyBudW1iZXI7XG5cdFx0fVxuXG5cdFx0Ly8gYmlvbWUtaWdub3JlIGxpbnQvc3R5bGUvbm9Ob25OdWxsQXNzZXJ0aW9uOiBkbyB3aGlsZSBsb29wIGltcGxpZXMgdGhpcy5fc2VhcmNoIGlzIG5vdCBudWxsXG5cdFx0dGhpcy5fc2VhcmNoID0gc3BsaXRFeHByZXNzaW9uLmV4ZWModGhpcy5fdmFsdWUpITtcblx0fSB3aGlsZSAodGhpcy5fc2VhcmNoKTtcblxuXHRpZiAoaXNCZXN0KSB7XG5cdFx0Ly8gYmlvbWUtaWdub3JlIGxpbnQvc3R5bGUvbm9Ob25OdWxsQXNzZXJ0aW9uOiBpc0Jlc3QgaW1wbGllcyByZXNvbHZlZFVuaXRcblx0XHRyZXR1cm4gY29udmVydChyZXN1bHQsIHJlc29sdmVkVW5pdCEpLnRvKCdiZXN0Jywga2luZCk7XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIENvbnZlcnQgc2V2ZXJhbCB2YWx1ZXMgaW4gYSBzdHJpbmcgaW50byBhIHNpbmdsZSB1bml0LlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29udmVydE1hbnkoJzFkIDEyaCcpLnRvKCdob3VycycpID09PSAzNjtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBzdHJpbmcgdG8gcGFyc2UgYXMgdmFsdWVzXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydE1hbnkodmFsdWU6IHN0cmluZyk6IENvbnZlcnRlcjxudW1iZXIsIFVuaXQ+IHtcblx0c3BsaXRFeHByZXNzaW9uLmxhc3RJbmRleCA9IDA7XG5cdGNvbnN0IHNlYXJjaCA9IHNwbGl0RXhwcmVzc2lvbi5leGVjKHZhbHVlKTtcblxuXHRpZiAoIXNlYXJjaCkge1xuXHRcdHRocm93IG5ldyBSYW5nZUVycm9yKGB2YWx1ZSBkaWQgbm90IG1hdGNoIGV4cHJlc3Npb24gJHtzcGxpdEV4cHJlc3Npb24uc291cmNlfWApO1xuXHR9XG5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9jb25zaXN0ZW50LXR5cGUtYXNzZXJ0aW9uc1xuXHRyZXR1cm4ge1xuXHRcdHRvOiB0by5iaW5kKHtcblx0XHRcdF9zZWFyY2g6IHNlYXJjaCxcblx0XHRcdF92YWx1ZTogdmFsdWUsXG5cdFx0fSksXG5cdH0gYXMgQ29udmVydGVyPG51bWJlciwgVW5pdD47XG59XG4iXX0=