bytecon
Version:
A TypeScript utility for precise bit/byte conversions with BigInt support, parsing, and formatting.
1 lines • 4.04 kB
JavaScript
Object.defineProperty(exports,`__esModule`,{value:!0});const e={bit:`bit`,byte:`byte`,kilobit:`kbit`,megabit:`mbit`,gigabit:`gbit`,terabit:`tbit`,petabit:`pbit`,exabit:`ebit`,zettabit:`zbit`,yottabit:`ybit`,ronnabit:`rbit`,quettabit:`qbit`,kibibyte:`kib`,mibibyte:`mib`,gibibyte:`gib`,tibibyte:`tib`,pibibyte:`pib`,exbibyte:`eib`,zebibyte:`zib`,yobibyte:`yib`,robibyte:`rib`,qubibyte:`qib`,kilobyte:`kb`,megabyte:`mb`,gigabyte:`gb`,terabyte:`tb`,petabyte:`pb`,exabyte:`eb`,zettabyte:`zb`,yottabyte:`yb`,ronnabyte:`rb`,quettabyte:`qb`},t=e=>BigInt(e),n={bit:t(1),byte:t(8),kbit:t(1024)**t(1),mbit:t(1024)**t(2),gbit:t(1024)**t(3),tbit:t(1024)**t(4),pbit:t(1024)**t(5),ebit:t(1024)**t(6),zbit:t(1024)**t(7),ybit:t(1024)**t(8),rbit:t(1024)**t(9),qbit:t(1024)**t(10),kib:t(8)*t(1024)**t(1),mib:t(8)*t(1024)**t(2),gib:t(8)*t(1024)**t(3),tib:t(8)*t(1024)**t(4),pib:t(8)*t(1024)**t(5),eib:t(8)*t(1024)**t(6),zib:t(8)*t(1024)**t(7),yib:t(8)*t(1024)**t(8),rib:t(8)*t(1024)**t(9),qib:t(8)*t(1024)**t(10),kb:t(8)*t(1e3)**t(1),mb:t(8)*t(1e3)**t(2),gb:t(8)*t(1e3)**t(3),tb:t(8)*t(1e3)**t(4),pb:t(8)*t(1e3)**t(5),eb:t(8)*t(1e3)**t(6),zb:t(8)*t(1e3)**t(7),yb:t(8)*t(1e3)**t(8),rb:t(8)*t(1e3)**t(9),qb:t(8)*t(1e3)**t(10)},r={kb:`kib`,mb:`mib`,gb:`gib`,tb:`tib`,pb:`pib`,eb:`eib`,zb:`zib`,yb:`yib`,rb:`rib`,qb:`qib`},i=e=>{if(typeof e==`bigint`)return{asBig:e};if(typeof e==`number`)return Number.isInteger(e)?{asBig:BigInt(e)}:{asNumber:e};if(typeof e==`string`){if(/^[+-]?\d+$/.test(e))try{return{asBig:BigInt(e)}}catch{}let t=Number(e);if(!Number.isFinite(t))throw Error(`Invalid numeric string`);return Number.isInteger(t)?{asBig:BigInt(t)}:{asNumber:t}}return{}},a=(r,a,o)=>{let s=a in e?e[a]:a,c=o in e?e[o]:o;if(!(s in n)||!(c in n))return;let l=n[s],u=n[c],d=i(r);if(d.asBig!==void 0){let e=d.asBig*l;return e%u===t(0)?e/u:Number(e)/Number(u)}let f=d.asNumber===void 0?Number(r):d.asNumber;if(Number.isFinite(f))return f*Number(l)/Number(u)},o=(e,t,n)=>{let i=t in r?r[t]:t,o=n in r?r[n]:n;return a(e,i,o)},s=(e,t,n,r=`standard`)=>r===`binary`?o(e,t,n):a(e,t,n),c=(e,t,n,r=`standard`)=>{let i=s(e,t,n,r);if(typeof i==`bigint`)return i;if(typeof i==`number`){if(!Number.isInteger(i))throw Error(`Result is fractional; cannot return BigInt`);return BigInt(i)}throw Error(`Conversion failed`)},l=(e,t,n,r=`standard`)=>{let i=s(e,t,n,r);if(typeof i==`number`)return i;if(typeof i==`bigint`){let e=Number(i);if(!Number.isFinite(e))throw Error(`BigInt too large to represent as number`);return e}throw Error(`Conversion failed`)},u=(e,r=!0)=>{let i=r?[`qib`,`rib`,`yib`,`zib`,`eib`,`pib`,`tib`,`gib`,`mib`,`kib`,`byte`,`bit`]:[`qb`,`rb`,`yb`,`zb`,`eb`,`pb`,`tb`,`gb`,`mb`,`kb`,`byte`,`bit`];for(let r of i){let i=n[r];if(e>=i){let n=e/i;return e%i===t(0)?{unit:r,value:n}:{unit:r,value:Number(e)/Number(i)}}}return{unit:`bit`,value:e}},d=(e,t,n={})=>{let r=n.mode??`standard`,i=s(e,t,n.unit??(r===`binary`?`gib`:`gb`),r);if(i===void 0)throw Error(`Conversion failed`);let a=n.digits??2;return typeof i==`bigint`?n.preferBigInt?`${i.toString()} ${n.unit??(r===`binary`?`gib`:`gb`)}`:l(e,t,n.unit??(r===`binary`?`gib`:`gb`),r).toFixed(a):`${i.toFixed(a)} ${n.unit??(r===`binary`?`gib`:`gb`)}`},f=t=>{let n=t.trim().match(/^([+-]?\d+(?:\.\d+)?)(?:\s*)([A-Za-z]+)$/);if(!n)throw Error(`Invalid input`);let r=n[1],i=n[2].toLowerCase(),a=i in e?e[i]:i;return r.includes(`.`)?{value:Number(r),unit:a}:{value:BigInt(r),unit:a}},p=e=>typeof e==`bigint`?e:void 0,m=e=>typeof e==`number`?e:void 0;var h={unitMap:e,BI:t,byteUnits:n,binaryMap:r,parseInput:i,convertStandard:a,convertBinary:o,convert:s,convertToBigInt:c,convertToNumber:l,chooseBestUnit:u,formatBytes:d,parseBytes:f,toBigIntResult:p,toNumberResult:m};exports.BI=t,exports.binaryMap=r,exports.byteUnits=n,exports.chooseBestUnit=u,exports.convert=s,exports.convertBinary=o,exports.convertStandard=a,exports.convertToBigInt=c,exports.convertToNumber=l,exports.default=h,exports.formatBytes=d,exports.parseBytes=f,exports.parseInput=i,exports.toBigIntResult=p,exports.toNumberResult=m,exports.unitMap=e;