{"id":17004882,"url":"https://github.com/clickermonkey/unitz-ts","last_synced_at":"2025-03-22T16:30:52.870Z","repository":{"id":49253199,"uuid":"130532426","full_name":"ClickerMonkey/unitz-ts","owner":"ClickerMonkey","description":"A unit parser, converter, \u0026 calculator for TypeScript and JS","archived":false,"fork":false,"pushed_at":"2022-12-07T02:04:06.000Z","size":2275,"stargazers_count":22,"open_issues_count":8,"forks_count":4,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-13T19:39:13.272Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://clickermonkey.github.io/unitz-ts/docs/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ClickerMonkey.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null},"funding":{"github":null,"patreon":"clickermonkey","open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"custom":null}},"created_at":"2018-04-22T03:37:39.000Z","updated_at":"2024-11-03T14:22:39.000Z","dependencies_parsed_at":"2022-09-21T22:31:25.546Z","dependency_job_id":null,"html_url":"https://github.com/ClickerMonkey/unitz-ts","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ClickerMonkey%2Funitz-ts","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ClickerMonkey%2Funitz-ts/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ClickerMonkey%2Funitz-ts/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ClickerMonkey%2Funitz-ts/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ClickerMonkey","download_url":"https://codeload.github.com/ClickerMonkey/unitz-ts/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244986358,"owners_count":20543001,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-14T04:44:41.285Z","updated_at":"2025-03-22T16:30:52.404Z","avatar_url":"https://github.com/ClickerMonkey.png","language":"JavaScript","readme":"# Unitz\n\nA unit parser, converter, \u0026 calculator for TypeScript and JS.\n\n- [Documentation](https://clickermonkey.github.io/unitz-ts/docs/)\n- [Online Tool](https://clickermonkey.github.io/unitz-ts/tester.html)\n- Installation `npm install unitz-ts`, `bower install unitz-ts`, [download](https://github.com/ClickerMonkey/unitz-ts/tree/master/umd)\n\n```javascript\n// TypeScript\nimport { uz, Classes } from 'unitz-ts';\n\n// Add built-in units\nClasses.addDefaults(); \n\n// Javascript\nvar uz = Unitz.uz;\n\nUnitz.Classes.addDefaults(); // Add built-in units\n\n// Parsing\nuz('2.5 cups'); // parses numbers\nuz('1/2 in'); // parses fractions\nuz('3 1/4'); // mixed fractions and unitless values\nuz('mile'); // implicit values (1)\nuz('4-5 seconds'); // parses ranges\nuz('4s - 3min'); // parses ranges with mixed units\nuz('2c, 4s, 23mi'); // mixed unit classes\nuz('23 m/s, 60 mph, 2 1/2 liters per second'); // rates\n\n// Transformations\nuz('1.5 pints').normalize(); // = 3 cups: convert to unit in same class which is more human friendly\nuz('1c, 1pt').compact(); // = 1.5 pt: join values in the same unit class together\nuz('43in').expand(); // = 3 ft, 7 in: pull unit values of the same class apart to be more human friendly\n\n// Operations\nuz('1 pt').add('1 cup').normalize(); // = 3 cups\nuz('1 pt').sub('1 cup').normalize(); // = 1 cup\nuz('1 pt, 3 in').scale(2); // = 2 pt, 6 in\nuz('1 pt, 3 in').scaleTo('6 c'); // = 3 pt, 9 in\n\n// Convert\nuz('1 - 2 gal').convert('c'); // = 16 - 32 c\nuz('3 cup').conversions(); // = 3/16 gal, 3/4 qt, 1 1/2 pt, 3 c, 24 floz, 48 tbsp, 144 tsp\n\n// Mutations\nuz('3 cups').preferred(); // = 3 c: convert units to preferred\nuz('-2 in, 4 mi, -2 - 2').positive(); // = 4 mi, 0 - 2: we only want positive\nuz('-2 in, 4 mi, -2 - 2').negative(); // = -2 in, -2 - 0: we only want negative\nuz('-2 in, 4 mi, 0 tacos').nonzero(); // = -2 in, 4 mi: we only want non-zero\nuz('-2 in, 4 mi, -2 - 2').min(); // = -2 in, -2: we only the minimum values of a range\nuz('-2 in, 4 mi, -2 - 2').max(); // = -2 in, 2: we only the maximum values of a range\nuz('0.5 tsp').fractions(); // = 1/2 tsp: convert to fractions\nuz('1/2 tsp').numbers(); // = 0.5 tsp: convert to numbers\n\n// Sorting\nuz('1 tsp, 1 pt, 4 gal').sort(); // = 4 gal, 1 pt, 1 tsp: sort values\n\n// Dynamic unit groups\nuz('1 loaf').add('4 loaves').normalize(); // = 5 loaves\n\n// Output\nuz('1 cup').output( options ); // the above functions return objects, to get a string you must call output which can take options to override the global output options.\n\n// Alternative Input Formats\nuz({ value: 34, unit: 'ms' }); // a single number value\nuz({ num: 4, den: 12, unit: 'c' }); // a single fraction value\nuz({ min: '4c', max: '8c' }); // a range with value strings\nuz({ min:{value:1}, max:{value:2, unit:'m'} }); // range with value objects\nuz([ '4c', '1-2m' ]); // range list of range/value strings\nuz([ {value: 34, unit: 'ms'}, {min:'1m', max:'2m' ]); // range list of range/value objects\n\n// Translations\nUnitz.Translations.addDefaults();\n\nuz('one pound'); // = 1 pound\nuz('dozen tacos'); // = 12 tacos\nuz('an eleven meters'); // = 11 meters\nuz('a third of an acre'); // = 1/3acre\nuz('half a dozen eggs'); // = 6eggs\nuz('a seventh of a mile'); // = 1/7mile\nuz('23 and a half eggs'); // = 23 1/2eggs\nuz('one and a half acres'); // = 1 1/2acres\nuz('23 and a third'); // = 23 1/3\nuz('12 and one fourth cups'); // = 12 1/4cups\nuz('(one and a half) acre'); // = 1 1/2acre\nuz('(12) tacos'); // = 12 tacos\nuz('1 (6 ounce)'); // = 6ounce\nuz('5 (3 liter)'); // = 15liter\n\n// Rates (aliases)\nUnitz.Rates.addDefaults();\n\nuz('60 mph');; // 60 miles/hour\nuz('23 knots');; // 23 nautical miles/hour\n```\n\n### Customization\n\nYou can customize exactly how Unitz behaves.\n\n```javascript\n// The \"distance\" used to determine if a value is close enough to 0, 1, or if a calculated fraction is close enough to the real value.\nUnitz.Functions.EPSILON = 0.001;\n\n// The default settings for outputting values\nUnitz.Core.globalOutput;\n\n// The default settings for transforms\nUnitz.Core.globalTransform;\n\n// The default settings for sorting\nUnitz.Core.globalSort;\n\n// When preferred() is ran, use this unit\nUnitz.Core.setPreferred( 'cup' );\n\n// Set this unit group as common or uncommon\nUnitz.Core.setCommon( 'cup', false ); // we don't use cups round these parts\n\n// Set the denominators available for a unit group\nUnitz.Core.setDenominators( 'cup', [2, 3, 4, 5, 6] );\n\n// Add some units to an existing group\nUnitz.Core.getGroup('cup').addUnits({\n  'cupz': Unitz.Plurality.PLURAL\n});\n\n// Remove some units from an existing group\nUnitz.Core.getGroup('c').removeUnits(['cup', 'cups']);\n\n// Add my own rate\nUnitz.Rates.add('feet', 'second', ['fps']);\n\n// Add my own class\nUnitz.Core.addClass(new Class('Loaf', [\n  {\n    system: Unitz.System.ANY,\n    common: true,\n    unit: 'loaf',\n    baseUnit: 'loaf',\n    denominators: [2, 3, 4, 5, 6, 7, 8, 9, 10],\n    units: {\n      'loaf': Unitz.Plurality.SINGULAR,\n      'loaf of bread': Unitz.Plurality.SINGULAR,\n      'loafs': Unitz.Plurality.PLURAL,\n      'loaves': Unitz.Plurality.PLURAL,\n      'loaves of bread': Unitz.Plurality.PLURAL\n    }\n  }\n]));\n\n// To create dynamic groups Unitz looks at the first 3 characters to determine if two units are matches. You can override this by figuring out a value which can be used as a key.\nUnitz.Core.getDynamicMatch = function(unit) {\n  // use soundex instead of the first three characters. cup and kup are equal now!\n  return soundex( unit );\n};\n\n// To override the logic for determining what value is \"normal\" (most user friendly)\nUnitz.Core.isMoreNormal = function(fromValue, toValue, transform, forOutput) {\n  return true;\n};\n```\n\n### Supported Units\n\n**Angle**:\n- deg, °, degree, degrees\n- rad, radian, radians\n\n**Area**:\n- sqin, sq. in, sq in, in2, in^2, in\u0026sup2;, inch2, inch^2, inch\u0026sup2;, inches2, inches^2, inches\u0026sup2;, square in, square inch, square inches\n- sqft, sq. ft, sq ft, ft2, ft^2, ft\u0026sup2;, foot2, foot^2, foot\u0026sup2;, feet2, feet^2, feet\u0026sup2;, square ft, square foot, square feet\n- sqyd, sq. yd, sq yd, yd2, yd^2, yd\u0026sup2;, yard2, yard^2, yard\u0026sup2;, yards2, yards^2, yards\u0026sup2;, square yd, square yard, square yards\n- acre, acres\n- sqmi, sq. mi, sq mi, mi2, mi^2, mi\u0026sup2;, mile2, mile^2, mile\u0026sup2;, miles2, miles^2, miles\u0026sup2;, square mi, square mile, square miles\n- sqmm, sq. mm, sq mm, mm2, mm^2, mm\u0026sup2;, millimeter2, millimeter^2, millimeter\u0026sup2;, millimeters2, millimeters^2, millimeters\u0026sup2;, square mm, square millimeter, square millimeters\n- sqcm, sq. cm, sq cm, cm2, cm^2, cm\u0026sup2;, centimeter2, centimeter^2, centimeter\u0026sup2;, centimeters2, centimeters^2, centimeters\u0026sup2;, square cm, square centimeter, square centimeters\n- sqm, sq. m, sq m, m2, m^2, m\u0026sup2;, meter2, meter^2, meter\u0026sup2;, meters2, meters^2, meters\u0026sup2;, square m, square meter, square meters\n- sqkm, sq. km, sq km, km2, km^2, km\u0026sup2;, kilometer2, kilometer^2, kilometer\u0026sup2;, kilometers2, kilometers^2, kilometers\u0026sup2;, square km, square kilometer, square kilometers\n\n**Digital**:\n- b, bit, bits\n- nibble, nibbles, nybble, nyble, half-byte, half byte, tetrade, semi-octent, quadbit, quartet\n- B, byte, bytes\n- kB, kilobyte, kilobytes\n- mB, megabyte, megabytes\n- gB, gigabyte, gigabytes\n- tB, terabyte, terabytes\n- pB, petabyte, petabytes\n- eB, exabyte, exabytes\n- zB, zettabyte, zettabytes\n- yB, yottabyte, yottabytes\n- KB, kibibyte, kibibytes\n- MB, mebibyte, mebibytes\n- GB, gibibyte, gibibytes\n- TB, tebibyte, tebibytes\n- PB, pebibyte, pebibytes\n- EB, exbibyte, exbibytes\n- ZB, zebibyte, zebibytes\n- YB, yobibyte, yobibytes\n- kb, kilobit, kilobits\n- mb, megabit, megabits\n- gb, gigabit, gigabits\n- tb, terabit, terabits\n- pb, petabit, petabits\n- eb, exabit, exabits\n- zb, zettabit, zettabits\n- yb, yottabit, yottabits\n- kibit, kibibit, kibibits\n- mibit, mebibit, mebibits\n- gibit, gibibit, gibibits\n- tibit, tebibit, tebibits\n- pibit, pebibit, pebibits\n- eibit, exbibit, exbibits\n- zibit, zebibit, zebibits\n- yibit, yobibit, yobibits\n\n**Length**:\n- in, inch, inches, \"\n- ft, foot, feet, '\n- yd, yard, yards, yds\n- mi, mile, miles\n- league, leagues\n- mm, millimeter, millimeters, millimetre, millimetres\n- cm, centimeter, centimeters, centimetre, centimetres\n- dc, decimeter, decimeters, decimetre, decimetres\n- m, meter, meters, metre, metres\n- km, kms, kilometer, kilometers, kilometre, kilometres\n- nm, nmi, nautical mi, nautical mile, nautical miles\n\n**Temperature**:\n- F, °F, Fahrenheit\n- °C, Celsius\n- K, kelvin, kelvins\n\n**Time**:\n- ns, nano, nanos, nanosecond, nanoseconds\n- us, micro, micros, microsecond, microseconds\n- ms, milli, millis, millisecond, milliseconds\n- s, sec, secs, second, seconds\n- min, mins, minute, minutes\n- hr, hrs, hour, hours\n- day, days\n- wk, wks, week, weeks,\n- yr, yrs, year, years\n- score\n- decade, decades\n- biennium, bienniums\n- triennium, trienniums\n- quadrennium, quadrenniums\n- lustrum, lustrums\n- decade, decades\n- century, centurys, centuries\n- millennium, millenniums, millennia, millennias\n\n**Volume**:\n- ts, tsp, tsps, teaspoon, teaspoons\n- tbsp, tbsp, tablespoon, tablespoons\n- floz, fl-oz, fl oz, fluid ounce, fluid ounces, fl. oz, oz. fl, oz fl\n- c, cup, cups\n- pt, pint, pints,\n- qt, quart, quarts\n- gal gals, gallon, gallons\n- ml, millilitre, millilitres, milliliter, milliliters\n- cl, centilitre, centilitre, centiliter, centiliters\n- l, litre, litres, liter, liters\n- dl, decalitre, decalitres, decaliter, decaliters\n- kl, kilolitre, kiloletres, kiloliter, kiloliters\n- mm3, mm^3, mm\u0026sup3;, millimeter3, millimeter^3, millimeter\u0026sup3;, millimeters3, millimeters^3, millimeters\u0026sup3;, cubic mm, cubic millimeter, cubic millimeters\n- cm3, cm^3, cm\u0026sup3;, centimeter3, centimeter^3, centimeter\u0026sup3;, centimeters3, centimeters^3, centimeters\u0026sup3;, cubic cm, cubic centimeter, cubic centimeters\n- m3, m^3, m\u0026sup3;, meter3, meter^3, meter\u0026sup3;, meters3, meters^3, meters\u0026sup3;, cubic m, cubic meter, cubic meters\n- km3, km^3, km\u0026sup3;, kilometer3, kilometer^3, kilometer\u0026sup3;, kilometers3, kilometers^3, kilometers\u0026sup3;, cubic km, cubic kilometer, cubic kilometers\n- in3, in^3, in\u0026sup3;, inch3, inch^3, inch\u0026sup3;, inches3, inches^3, inches\u0026sup3;, cubic in, cubic inch, cubic inches\n- ft3, ft^3, ft\u0026sup3;, foot3, foot^3, foot\u0026sup3;, feet3, feet^3, feet\u0026sup3;, cubic ft, cubic foot, cubic feet\n- yd3, yd^3, yd\u0026sup3;, yard3, yard^3, yard\u0026sup3;, yards3, yards^3, yards\u0026sup3;, cubic yd, cubic yard, cubic yards\n\n**Weight**:\n- mg, milligram, milligrams\n- g, gram, grams\n- kg, kilo, kilos, kilogram, kilograms\n- oz, ounce, ounces\n- lb, lbs, pound, pounds\n- ton, tons, tonne, tonnes\n","funding_links":["https://patreon.com/clickermonkey"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fclickermonkey%2Funitz-ts","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fclickermonkey%2Funitz-ts","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fclickermonkey%2Funitz-ts/lists"}