convert
Version:
The smallest & fastest library for really easy, totally type-safe unit conversions in TypeScript & JavaScript
58 lines • 6.81 kB
JavaScript
;
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=