UNPKG

convert

Version:

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

55 lines 6.67 kB
import { convert } from "./convert.js"; 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 = 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 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 */ export 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVydC1tYW55LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnZlcnRlcnMvY29udmVydC1tYW55LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBRSxPQUFPLEVBQUUscUJBQWtCO0FBRXBDLE1BQU0sZUFBZSxHQUFHLDZCQUE2QixDQUFDO0FBT3RELFNBQVMsRUFBRSxDQUFzQixJQUFtQixFQUFFLElBQTJCO0lBQ2hGLE1BQU0sTUFBTSxHQUFHLElBQUksS0FBSyxNQUFNLENBQUM7SUFFL0IsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ2YsSUFBSSxZQUF1QixDQUFDO0lBQzVCLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQztJQUV2QixHQUFHLENBQUM7UUFDSCxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBUyxDQUFDLENBQUMsRUFBRTtRQUM3RSw4RkFBOEY7UUFDOUYsQ0FBQyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFlBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFTLENBQ1QsQ0FBQztRQUVoRCxJQUFJLE1BQU0sSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUMzQixNQUFNLElBQUssU0FBK0MsQ0FBQyxRQUFRLENBQUM7WUFDcEUsWUFBWSxHQUFJLFNBQStDLENBQUMsSUFBSSxDQUFDO1lBQ3JFLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDckIsQ0FBQzthQUFNLENBQUM7WUFDUCxNQUFNLElBQUksU0FBbUIsQ0FBQztRQUMvQixDQUFDO1FBRUQsNkZBQTZGO1FBQzdGLElBQUksQ0FBQyxPQUFPLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFFLENBQUM7SUFDbkQsQ0FBQyxRQUFRLElBQUksQ0FBQyxPQUFPLEVBQUU7SUFFdkIsSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUNaLDBFQUEwRTtRQUMxRSxPQUFPLE9BQU8sQ0FBQyxNQUFNLEVBQUUsWUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDZixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUFDLEtBQWE7SUFDeEMsZUFBZSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFDOUIsTUFBTSxNQUFNLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUUzQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDYixNQUFNLElBQUksVUFBVSxDQUFDLGtDQUFrQyxlQUFlLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUNsRixDQUFDO0lBRUQseUVBQXlFO0lBQ3pFLE9BQU87UUFDTixFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQztZQUNYLE9BQU8sRUFBRSxNQUFNO1lBQ2YsTUFBTSxFQUFFLEtBQUs7U0FDYixDQUFDO0tBQ3lCLENBQUM7QUFDOUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQmVzdEtpbmQgfSBmcm9tICcuLi9jb252ZXJzaW9ucy90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IEJlc3RDb252ZXJzaW9uLCBDb252ZXJ0ZXIgfSBmcm9tICcuLi90eXBlcy9jb252ZXJ0ZXInO1xuaW1wb3J0IHR5cGUgeyBCZXN0VW5pdHMsIFVuaXQgfSBmcm9tICcuLi90eXBlcy91bml0cyc7XG5pbXBvcnQgeyBjb252ZXJ0IH0gZnJvbSAnLi9jb252ZXJ0JztcblxuY29uc3Qgc3BsaXRFeHByZXNzaW9uID0gLygtPyg/OlxcZCspP1xcLj9cXGQrKVxccz8oXFxTKykvZztcblxudHlwZSBDb252ZXJ0ZXJUaGlzID0ge1xuXHRfc2VhcmNoOiBSZWdFeHBFeGVjQXJyYXk7XG5cdF92YWx1ZTogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gdG8odGhpczogQ29udmVydGVyVGhpcywgdW5pdDogVW5pdCB8ICdiZXN0Jywga2luZD86IEJlc3RLaW5kIHwgdW5kZWZpbmVkKSB7XG5cdGNvbnN0IGlzQmVzdCA9IHVuaXQgPT09ICdiZXN0JztcblxuXHRsZXQgcmVzdWx0ID0gMDtcblx0bGV0IHJlc29sdmVkVW5pdDogQmVzdFVuaXRzO1xuXHRsZXQgaXNGaXJzdFBhc3MgPSB0cnVlO1xuXG5cdGRvIHtcblx0XHRjb25zdCBjb252ZXJ0ZWQgPSBjb252ZXJ0KE51bWJlcih0aGlzLl9zZWFyY2hbMV0pLCB0aGlzLl9zZWFyY2hbMl0gYXMgVW5pdCkudG8oXG5cdFx0XHQvLyBiaW9tZS1pZ25vcmUgbGludC9zdHlsZS9ub05vbk51bGxBc3NlcnRpb246IGlzQmVzdCBhbmQgbm90IGlzRmlyc3RQYXNzIGltcGxpZXMgcmVzb2x2ZWRVbml0XG5cdFx0XHQoaXNCZXN0ICYmICFpc0ZpcnN0UGFzcyA/IHJlc29sdmVkVW5pdCEgOiB1bml0KSBhcyBVbml0LFxuXHRcdCkgYXMgbnVtYmVyIHwgQmVzdENvbnZlcnNpb248bnVtYmVyLCBCZXN0VW5pdHM+O1xuXG5cdFx0aWYgKGlzQmVzdCAmJiBpc0ZpcnN0UGFzcykge1xuXHRcdFx0cmVzdWx0ICs9IChjb252ZXJ0ZWQgYXMgQmVzdENvbnZlcnNpb248bnVtYmVyLCBCZXN0VW5pdHM+KS5xdWFudGl0eTtcblx0XHRcdHJlc29sdmVkVW5pdCA9IChjb252ZXJ0ZWQgYXMgQmVzdENvbnZlcnNpb248bnVtYmVyLCBCZXN0VW5pdHM+KS51bml0O1xuXHRcdFx0aXNGaXJzdFBhc3MgPSBmYWxzZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVzdWx0ICs9IGNvbnZlcnRlZCBhcyBudW1iZXI7XG5cdFx0fVxuXG5cdFx0Ly8gYmlvbWUtaWdub3JlIGxpbnQvc3R5bGUvbm9Ob25OdWxsQXNzZXJ0aW9uOiBkbyB3aGlsZSBsb29wIGltcGxpZXMgdGhpcy5fc2VhcmNoIGlzIG5vdCBudWxsXG5cdFx0dGhpcy5fc2VhcmNoID0gc3BsaXRFeHByZXNzaW9uLmV4ZWModGhpcy5fdmFsdWUpITtcblx0fSB3aGlsZSAodGhpcy5fc2VhcmNoKTtcblxuXHRpZiAoaXNCZXN0KSB7XG5cdFx0Ly8gYmlvbWUtaWdub3JlIGxpbnQvc3R5bGUvbm9Ob25OdWxsQXNzZXJ0aW9uOiBpc0Jlc3QgaW1wbGllcyByZXNvbHZlZFVuaXRcblx0XHRyZXR1cm4gY29udmVydChyZXN1bHQsIHJlc29sdmVkVW5pdCEpLnRvKCdiZXN0Jywga2luZCk7XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIENvbnZlcnQgc2V2ZXJhbCB2YWx1ZXMgaW4gYSBzdHJpbmcgaW50byBhIHNpbmdsZSB1bml0LlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29udmVydE1hbnkoJzFkIDEyaCcpLnRvKCdob3VycycpID09PSAzNjtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBzdHJpbmcgdG8gcGFyc2UgYXMgdmFsdWVzXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydE1hbnkodmFsdWU6IHN0cmluZyk6IENvbnZlcnRlcjxudW1iZXIsIFVuaXQ+IHtcblx0c3BsaXRFeHByZXNzaW9uLmxhc3RJbmRleCA9IDA7XG5cdGNvbnN0IHNlYXJjaCA9IHNwbGl0RXhwcmVzc2lvbi5leGVjKHZhbHVlKTtcblxuXHRpZiAoIXNlYXJjaCkge1xuXHRcdHRocm93IG5ldyBSYW5nZUVycm9yKGB2YWx1ZSBkaWQgbm90IG1hdGNoIGV4cHJlc3Npb24gJHtzcGxpdEV4cHJlc3Npb24uc291cmNlfWApO1xuXHR9XG5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9jb25zaXN0ZW50LXR5cGUtYXNzZXJ0aW9uc1xuXHRyZXR1cm4ge1xuXHRcdHRvOiB0by5iaW5kKHtcblx0XHRcdF9zZWFyY2g6IHNlYXJjaCxcblx0XHRcdF92YWx1ZTogdmFsdWUsXG5cdFx0fSksXG5cdH0gYXMgQ29udmVydGVyPG51bWJlciwgVW5pdD47XG59XG4iXX0=