diff --git a/README.md b/README.md index 56ea53d..9790342 100644 --- a/README.md +++ b/README.md @@ -53,6 +53,9 @@ _*(object)*_ Dictionary of SI/JEDEC/IEC symbols to replace for localization, def ### unix _*(boolean)*_ Enables unix style human readable output, e.g `ls -lh`, default is `false` +### roundingMethod +_*(string)*_ Rounding method, can be `round`, `floor`, or `ceil`, default is `round` + ## Examples ```javascript diff --git a/filesize.d.ts b/filesize.d.ts index 9fc29fd..6f4c019 100644 --- a/filesize.d.ts +++ b/filesize.d.ts @@ -94,6 +94,10 @@ declare namespace Filesize { * Enables unix style human readable output, e.g ls -lh, default is false */ unix?: boolean; + /** + * Rounding method, can be round, floor, or ceil, default is round + */ + roundingMethod?: "round" | "floor" | "ceil"; } interface Filesize { diff --git a/lib/filesize.es6.js b/lib/filesize.es6.js index ea25551..4b5dbaa 100644 --- a/lib/filesize.es6.js +++ b/lib/filesize.es6.js @@ -25,6 +25,10 @@ fullform = { iec: ["", "kibi", "mebi", "gibi", "tebi", "pebi", "exbi", "zebi", "yobi"], jedec: ["", "kilo", "mega", "giga", "tera", "peta", "exa", "zetta", "yotta"] + }, + roundingFuncs = { + floor: Math.floor, + ceil: Math.ceil }; /** @@ -38,7 +42,7 @@ function filesize (arg, descriptor = {}) { let result = [], val = 0, - e, base, bits, ceil, full, fullforms, locale, localeOptions, neg, num, output, pad, round, u, unix, separator, spacer, standard, symbols; + e, base, bits, ceil, full, fullforms, locale, localeOptions, neg, num, output, pad, round, u, unix, separator, spacer, standard, symbols, roundingFunc; if (isNaN(arg)) { throw new TypeError("Invalid number"); @@ -59,6 +63,7 @@ full = descriptor.fullform === true; fullforms = descriptor.fullforms instanceof Array ? descriptor.fullforms : []; e = descriptor.exponent !== void 0 ? descriptor.exponent : -1; + roundingFunc = roundingFuncs[descriptor.roundingMethod] || Math.round; num = Number(arg); neg = num < 0; ceil = base > 2 ? 1000 : 1024; @@ -102,7 +107,8 @@ } } - result[0] = Number(val.toFixed(e > 0 ? round : 0)); + const p = Math.pow(10, e > 0 ? round : 0); + result[0] = roundingFunc(val * p) / p; if (result[0] === ceil && e < 8 && descriptor.exponent === void 0) { result[0] = 1; diff --git a/lib/filesize.es6.min.js b/lib/filesize.es6.min.js index ebc87a4..2866d23 100644 --- a/lib/filesize.es6.min.js +++ b/lib/filesize.es6.min.js @@ -2,5 +2,5 @@ 2020 Jason Mulligan @version 6.2.6 */ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).filesize=t()}(this,(function(){"use strict";const e=/^(b|B)$/,t={iec:{bits:["b","Kib","Mib","Gib","Tib","Pib","Eib","Zib","Yib"],bytes:["B","KiB","MiB","GiB","TiB","PiB","EiB","ZiB","YiB"]},jedec:{bits:["b","Kb","Mb","Gb","Tb","Pb","Eb","Zb","Yb"],bytes:["B","KB","MB","GB","TB","PB","EB","ZB","YB"]}},i={iec:["","kibi","mebi","gibi","tebi","pebi","exbi","zebi","yobi"],jedec:["","kilo","mega","giga","tera","peta","exa","zetta","yotta"]};function o(o,n={}){let b,r,a,s,l,d,p,f,c,u,B,g,y,h,m,x,M,v,j,N=[],T=0;if(isNaN(o))throw new TypeError("Invalid number");if(a=!0===n.bits,m=!0===n.unix,g=!0===n.pad,r=n.base||2,y=void 0!==n.round?n.round:m?1:2,p=void 0!==n.locale?n.locale:"",f=n.localeOptions||{},x=void 0!==n.separator?n.separator:"",M=void 0!==n.spacer?n.spacer:m?"":" ",j=n.symbols||{},v=2===r&&n.standard||"jedec",B=n.output||"string",l=!0===n.fullform,d=n.fullforms instanceof Array?n.fullforms:[],b=void 0!==n.exponent?n.exponent:-1,u=Number(o),c=u<0,s=r>2?1e3:1024,c&&(u=-u),(-1===b||isNaN(b))&&(b=Math.floor(Math.log(u)/Math.log(s)),b<0&&(b=0)),b>8&&(b=8),"exponent"===B)return b;if(0===u?(N[0]=0,h=N[1]=m?"":t[v][a?"bits":"bytes"][b]):(T=u/(2===r?Math.pow(2,10*b):Math.pow(1e3,b)),a&&(T*=8,T>=s&&b<8&&(T/=s,b++)),N[0]=Number(T.toFixed(b>0?y:0)),N[0]===s&&b<8&&void 0===n.exponent&&(N[0]=1,b++),h=N[1]=10===r&&1===b?a?"kb":"kB":t[v][a?"bits":"bytes"][b],m&&(N[1]="jedec"===v?N[1].charAt(0):b>0?N[1].replace(/B$/,""):N[1],e.test(N[1])&&(N[0]=Math.floor(N[0]),N[1]=""))),c&&(N[0]=-N[0]),N[1]=j[N[1]]||N[1],!0===p?N[0]=N[0].toLocaleString():p.length>0?N[0]=N[0].toLocaleString(p,f):x.length>0&&(N[0]=N[0].toString().replace(".",x)),g&&!1===Number.isInteger(N[0])&&y>0){const e=x||".",t=N[0].toString().split(e),i=t[1]||"",o=i.length,n=y-o;N[0]=`${t[0]}${e}${i.padEnd(o+n,"0")}`}return l&&(N[1]=d[b]?d[b]:i[v][b]+(a?"bit":"byte")+(1===N[0]?"":"s")),"array"===B?N:"object"===B?{value:N[0],symbol:N[1],exponent:b,unit:h}:N.join(M)}return o.partial=e=>t=>o(t,e),o})); +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).filesize=t()}(this,(function(){"use strict";const e=/^(b|B)$/,t={iec:{bits:["b","Kib","Mib","Gib","Tib","Pib","Eib","Zib","Yib"],bytes:["B","KiB","MiB","GiB","TiB","PiB","EiB","ZiB","YiB"]},jedec:{bits:["b","Kb","Mb","Gb","Tb","Pb","Eb","Zb","Yb"],bytes:["B","KB","MB","GB","TB","PB","EB","ZB","YB"]}},i={iec:["","kibi","mebi","gibi","tebi","pebi","exbi","zebi","yobi"],jedec:["","kilo","mega","giga","tera","peta","exa","zetta","yotta"]},o={floor:Math.floor,ceil:Math.ceil};function n(n,a={}){let b,r,l,s,d,f,c,p,u,B,h,g,y,M,m,x,v,j,T,E,N=[],w=0;if(isNaN(n))throw new TypeError("Invalid number");if(l=!0===a.bits,m=!0===a.unix,g=!0===a.pad,r=a.base||2,y=void 0!==a.round?a.round:m?1:2,c=void 0!==a.locale?a.locale:"",p=a.localeOptions||{},x=void 0!==a.separator?a.separator:"",v=void 0!==a.spacer?a.spacer:m?"":" ",T=a.symbols||{},j=2===r&&a.standard||"jedec",h=a.output||"string",d=!0===a.fullform,f=a.fullforms instanceof Array?a.fullforms:[],b=void 0!==a.exponent?a.exponent:-1,E=o[a.roundingMethod]||Math.round,B=Number(n),u=B<0,s=r>2?1e3:1024,u&&(B=-B),(-1===b||isNaN(b))&&(b=Math.floor(Math.log(B)/Math.log(s)),b<0&&(b=0)),b>8&&(b=8),"exponent"===h)return b;if(0===B)N[0]=0,M=N[1]=m?"":t[j][l?"bits":"bytes"][b];else{w=B/(2===r?Math.pow(2,10*b):Math.pow(1e3,b)),l&&(w*=8,w>=s&&b<8&&(w/=s,b++));const i=Math.pow(10,b>0?y:0);N[0]=E(w*i)/i,N[0]===s&&b<8&&void 0===a.exponent&&(N[0]=1,b++),M=N[1]=10===r&&1===b?l?"kb":"kB":t[j][l?"bits":"bytes"][b],m&&(N[1]="jedec"===j?N[1].charAt(0):b>0?N[1].replace(/B$/,""):N[1],e.test(N[1])&&(N[0]=Math.floor(N[0]),N[1]=""))}if(u&&(N[0]=-N[0]),N[1]=T[N[1]]||N[1],!0===c?N[0]=N[0].toLocaleString():c.length>0?N[0]=N[0].toLocaleString(c,p):x.length>0&&(N[0]=N[0].toString().replace(".",x)),g&&!1===Number.isInteger(N[0])&&y>0){const e=x||".",t=N[0].toString().split(e),i=t[1]||"",o=i.length,n=y-o;N[0]=`${t[0]}${e}${i.padEnd(o+n,"0")}`}return d&&(N[1]=f[b]?f[b]:i[j][b]+(l?"bit":"byte")+(1===N[0]?"":"s")),"array"===h?N:"object"===h?{value:N[0],symbol:N[1],exponent:b,unit:M}:N.join(v)}return n.partial=e=>t=>n(t,e),n})); //# sourceMappingURL=filesize.es6.min.js.map diff --git a/lib/filesize.es6.min.js.map b/lib/filesize.es6.min.js.map index e67929f..78d173c 100644 --- a/lib/filesize.es6.min.js.map +++ b/lib/filesize.es6.min.js.map @@ -1 +1 @@ -{"version":3,"file":"filesize.es6.min.js","sources":["../src/filesize.js"],"sourcesContent":["const b = /^(b|B)$/,\n\tsymbol = {\n\t\tiec: {\n\t\t\tbits: [\"b\", \"Kib\", \"Mib\", \"Gib\", \"Tib\", \"Pib\", \"Eib\", \"Zib\", \"Yib\"],\n\t\t\tbytes: [\"B\", \"KiB\", \"MiB\", \"GiB\", \"TiB\", \"PiB\", \"EiB\", \"ZiB\", \"YiB\"]\n\t\t},\n\t\tjedec: {\n\t\t\tbits: [\"b\", \"Kb\", \"Mb\", \"Gb\", \"Tb\", \"Pb\", \"Eb\", \"Zb\", \"Yb\"],\n\t\t\tbytes: [\"B\", \"KB\", \"MB\", \"GB\", \"TB\", \"PB\", \"EB\", \"ZB\", \"YB\"]\n\t\t}\n\t},\n\tfullform = {\n\t\tiec: [\"\", \"kibi\", \"mebi\", \"gibi\", \"tebi\", \"pebi\", \"exbi\", \"zebi\", \"yobi\"],\n\t\tjedec: [\"\", \"kilo\", \"mega\", \"giga\", \"tera\", \"peta\", \"exa\", \"zetta\", \"yotta\"]\n\t};\n\n/**\n * filesize\n *\n * @method filesize\n * @param {Mixed} arg String, Int or Float to transform\n * @param {Object} descriptor [Optional] Flags\n * @return {String} Readable file size String\n */\nfunction filesize (arg, descriptor = {}) {\n\tlet result = [],\n\t\tval = 0,\n\t\te, base, bits, ceil, full, fullforms, locale, localeOptions, neg, num, output, pad, round, u, unix, separator, spacer, standard, symbols;\n\n\tif (isNaN(arg)) {\n\t\tthrow new TypeError(\"Invalid number\");\n\t}\n\n\tbits = descriptor.bits === true;\n\tunix = descriptor.unix === true;\n\tpad = descriptor.pad === true;\n\tbase = descriptor.base || 2;\n\tround = descriptor.round !== void 0 ? descriptor.round : unix ? 1 : 2;\n\tlocale = descriptor.locale !== void 0 ? descriptor.locale : \"\";\n\tlocaleOptions = descriptor.localeOptions || {};\n\tseparator = descriptor.separator !== void 0 ? descriptor.separator : \"\";\n\tspacer = descriptor.spacer !== void 0 ? descriptor.spacer : unix ? \"\" : \" \";\n\tsymbols = descriptor.symbols || {};\n\tstandard = base === 2 ? descriptor.standard || \"jedec\" : \"jedec\";\n\toutput = descriptor.output || \"string\";\n\tfull = descriptor.fullform === true;\n\tfullforms = descriptor.fullforms instanceof Array ? descriptor.fullforms : [];\n\te = descriptor.exponent !== void 0 ? descriptor.exponent : -1;\n\tnum = Number(arg);\n\tneg = num < 0;\n\tceil = base > 2 ? 1000 : 1024;\n\n\t// Flipping a negative number to determine the size\n\tif (neg) {\n\t\tnum = -num;\n\t}\n\n\t// Determining the exponent\n\tif (e === -1 || isNaN(e)) {\n\t\te = Math.floor(Math.log(num) / Math.log(ceil));\n\n\t\tif (e < 0) {\n\t\t\te = 0;\n\t\t}\n\t}\n\n\t// Exceeding supported length, time to reduce & multiply\n\tif (e > 8) {\n\t\te = 8;\n\t}\n\n\tif (output === \"exponent\") {\n\t\treturn e;\n\t}\n\n\t// Zero is now a special case because bytes divide by 1\n\tif (num === 0) {\n\t\tresult[0] = 0;\n\t\tu = result[1] = unix ? \"\" : symbol[standard][bits ? \"bits\" : \"bytes\"][e];\n\t} else {\n\t\tval = num / (base === 2 ? Math.pow(2, e * 10) : Math.pow(1000, e));\n\n\t\tif (bits) {\n\t\t\tval = val * 8;\n\n\t\t\tif (val >= ceil && e < 8) {\n\t\t\t\tval = val / ceil;\n\t\t\t\te++;\n\t\t\t}\n\t\t}\n\n\t\tresult[0] = Number(val.toFixed(e > 0 ? round : 0));\n\n\t\tif (result[0] === ceil && e < 8 && descriptor.exponent === void 0) {\n\t\t\tresult[0] = 1;\n\t\t\te++;\n\t\t}\n\n\t\tu = result[1] = base === 10 && e === 1 ? bits ? \"kb\" : \"kB\" : symbol[standard][bits ? \"bits\" : \"bytes\"][e];\n\n\t\tif (unix) {\n\t\t\tresult[1] = standard === \"jedec\" ? result[1].charAt(0) : e > 0 ? result[1].replace(/B$/, \"\") : result[1];\n\n\t\t\tif (b.test(result[1])) {\n\t\t\t\tresult[0] = Math.floor(result[0]);\n\t\t\t\tresult[1] = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Decorating a 'diff'\n\tif (neg) {\n\t\tresult[0] = -result[0];\n\t}\n\n\t// Applying custom symbol\n\tresult[1] = symbols[result[1]] || result[1];\n\n\tif (locale === true) {\n\t\tresult[0] = result[0].toLocaleString();\n\t} else if (locale.length > 0) {\n\t\tresult[0] = result[0].toLocaleString(locale, localeOptions);\n\t} else if (separator.length > 0) {\n\t\tresult[0] = result[0].toString().replace(\".\", separator);\n\t}\n\n\tif (pad && Number.isInteger(result[0]) === false && round > 0) {\n\t\tconst x = separator || \".\",\n\t\t\ttmp = result[0].toString().split(x),\n\t\t\ts = tmp[1] || \"\",\n\t\t\tl = s.length,\n\t\t\tn = round - l;\n\n\t\tresult[0] = `${tmp[0]}${x}${s.padEnd(l + n, \"0\")}`;\n\t}\n\n\tif (full) {\n\t\tresult[1] = fullforms[e] ? fullforms[e] : fullform[standard][e] + (bits ? \"bit\" : \"byte\") + (result[0] === 1 ? \"\" : \"s\");\n\t}\n\n\t// Returning Array, Object, or String (default)\n\treturn output === \"array\" ? result : output === \"object\" ? {value: result[0], symbol: result[1], exponent: e, unit: u} : result.join(spacer);\n}\n\n// Partial application for functional programming\nfilesize.partial = opt => arg => filesize(arg, opt);\n\nexport default filesize;\n"],"names":["b","symbol","iec","bits","bytes","jedec","fullform","filesize","arg","descriptor","e","base","ceil","full","fullforms","locale","localeOptions","neg","num","output","pad","round","u","unix","separator","spacer","standard","symbols","result","val","isNaN","TypeError","Array","exponent","Number","Math","floor","log","pow","toFixed","charAt","replace","test","toLocaleString","length","toString","isInteger","x","tmp","split","s","l","n","padEnd","value","unit","join","partial","opt"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"filesize.es6.min.js","sources":["../src/filesize.js"],"sourcesContent":["const b = /^(b|B)$/,\n\tsymbol = {\n\t\tiec: {\n\t\t\tbits: [\"b\", \"Kib\", \"Mib\", \"Gib\", \"Tib\", \"Pib\", \"Eib\", \"Zib\", \"Yib\"],\n\t\t\tbytes: [\"B\", \"KiB\", \"MiB\", \"GiB\", \"TiB\", \"PiB\", \"EiB\", \"ZiB\", \"YiB\"]\n\t\t},\n\t\tjedec: {\n\t\t\tbits: [\"b\", \"Kb\", \"Mb\", \"Gb\", \"Tb\", \"Pb\", \"Eb\", \"Zb\", \"Yb\"],\n\t\t\tbytes: [\"B\", \"KB\", \"MB\", \"GB\", \"TB\", \"PB\", \"EB\", \"ZB\", \"YB\"]\n\t\t}\n\t},\n\tfullform = {\n\t\tiec: [\"\", \"kibi\", \"mebi\", \"gibi\", \"tebi\", \"pebi\", \"exbi\", \"zebi\", \"yobi\"],\n\t\tjedec: [\"\", \"kilo\", \"mega\", \"giga\", \"tera\", \"peta\", \"exa\", \"zetta\", \"yotta\"]\n\t},\n\troundingFuncs = {\n\t\tfloor: Math.floor,\n\t\tceil: Math.ceil\n\t};\n\n/**\n * filesize\n *\n * @method filesize\n * @param {Mixed} arg String, Int or Float to transform\n * @param {Object} descriptor [Optional] Flags\n * @return {String} Readable file size String\n */\nfunction filesize (arg, descriptor = {}) {\n\tlet result = [],\n\t\tval = 0,\n\t\te, base, bits, ceil, full, fullforms, locale, localeOptions, neg, num, output, pad, round, u, unix, separator, spacer, standard, symbols, roundingFunc;\n\n\tif (isNaN(arg)) {\n\t\tthrow new TypeError(\"Invalid number\");\n\t}\n\n\tbits = descriptor.bits === true;\n\tunix = descriptor.unix === true;\n\tpad = descriptor.pad === true;\n\tbase = descriptor.base || 2;\n\tround = descriptor.round !== void 0 ? descriptor.round : unix ? 1 : 2;\n\tlocale = descriptor.locale !== void 0 ? descriptor.locale : \"\";\n\tlocaleOptions = descriptor.localeOptions || {};\n\tseparator = descriptor.separator !== void 0 ? descriptor.separator : \"\";\n\tspacer = descriptor.spacer !== void 0 ? descriptor.spacer : unix ? \"\" : \" \";\n\tsymbols = descriptor.symbols || {};\n\tstandard = base === 2 ? descriptor.standard || \"jedec\" : \"jedec\";\n\toutput = descriptor.output || \"string\";\n\tfull = descriptor.fullform === true;\n\tfullforms = descriptor.fullforms instanceof Array ? descriptor.fullforms : [];\n\te = descriptor.exponent !== void 0 ? descriptor.exponent : -1;\n\troundingFunc = roundingFuncs[descriptor.roundingMethod] || Math.round;\n\tnum = Number(arg);\n\tneg = num < 0;\n\tceil = base > 2 ? 1000 : 1024;\n\n\t// Flipping a negative number to determine the size\n\tif (neg) {\n\t\tnum = -num;\n\t}\n\n\t// Determining the exponent\n\tif (e === -1 || isNaN(e)) {\n\t\te = Math.floor(Math.log(num) / Math.log(ceil));\n\n\t\tif (e < 0) {\n\t\t\te = 0;\n\t\t}\n\t}\n\n\t// Exceeding supported length, time to reduce & multiply\n\tif (e > 8) {\n\t\te = 8;\n\t}\n\n\tif (output === \"exponent\") {\n\t\treturn e;\n\t}\n\n\t// Zero is now a special case because bytes divide by 1\n\tif (num === 0) {\n\t\tresult[0] = 0;\n\t\tu = result[1] = unix ? \"\" : symbol[standard][bits ? \"bits\" : \"bytes\"][e];\n\t} else {\n\t\tval = num / (base === 2 ? Math.pow(2, e * 10) : Math.pow(1000, e));\n\n\t\tif (bits) {\n\t\t\tval = val * 8;\n\n\t\t\tif (val >= ceil && e < 8) {\n\t\t\t\tval = val / ceil;\n\t\t\t\te++;\n\t\t\t}\n\t\t}\n\n\t\tconst p = Math.pow(10, e > 0 ? round : 0);\n\t\tresult[0] = roundingFunc(val * p) / p;\n\n\t\tif (result[0] === ceil && e < 8 && descriptor.exponent === void 0) {\n\t\t\tresult[0] = 1;\n\t\t\te++;\n\t\t}\n\n\t\tu = result[1] = base === 10 && e === 1 ? bits ? \"kb\" : \"kB\" : symbol[standard][bits ? \"bits\" : \"bytes\"][e];\n\n\t\tif (unix) {\n\t\t\tresult[1] = standard === \"jedec\" ? result[1].charAt(0) : e > 0 ? result[1].replace(/B$/, \"\") : result[1];\n\n\t\t\tif (b.test(result[1])) {\n\t\t\t\tresult[0] = Math.floor(result[0]);\n\t\t\t\tresult[1] = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Decorating a 'diff'\n\tif (neg) {\n\t\tresult[0] = -result[0];\n\t}\n\n\t// Applying custom symbol\n\tresult[1] = symbols[result[1]] || result[1];\n\n\tif (locale === true) {\n\t\tresult[0] = result[0].toLocaleString();\n\t} else if (locale.length > 0) {\n\t\tresult[0] = result[0].toLocaleString(locale, localeOptions);\n\t} else if (separator.length > 0) {\n\t\tresult[0] = result[0].toString().replace(\".\", separator);\n\t}\n\n\tif (pad && Number.isInteger(result[0]) === false && round > 0) {\n\t\tconst x = separator || \".\",\n\t\t\ttmp = result[0].toString().split(x),\n\t\t\ts = tmp[1] || \"\",\n\t\t\tl = s.length,\n\t\t\tn = round - l;\n\n\t\tresult[0] = `${tmp[0]}${x}${s.padEnd(l + n, \"0\")}`;\n\t}\n\n\tif (full) {\n\t\tresult[1] = fullforms[e] ? fullforms[e] : fullform[standard][e] + (bits ? \"bit\" : \"byte\") + (result[0] === 1 ? \"\" : \"s\");\n\t}\n\n\t// Returning Array, Object, or String (default)\n\treturn output === \"array\" ? result : output === \"object\" ? {value: result[0], symbol: result[1], exponent: e, unit: u} : result.join(spacer);\n}\n\n// Partial application for functional programming\nfilesize.partial = opt => arg => filesize(arg, opt);\n\nexport default filesize;\n"],"names":["b","symbol","iec","bits","bytes","jedec","fullform","roundingFuncs","floor","Math","ceil","filesize","arg","descriptor","e","base","full","fullforms","locale","localeOptions","neg","num","output","pad","round","u","unix","separator","spacer","standard","symbols","roundingFunc","result","val","isNaN","TypeError","Array","exponent","roundingMethod","Number","log","pow","p","charAt","replace","test","toLocaleString","length","toString","isInteger","x","tmp","split","s","l","n","padEnd","value","unit","join","partial","opt"],"mappings":";;;;yOAAA,MAAMA,EAAI,UACTC,EAAS,CACRC,IAAK,CACJC,KAAM,CAAC,IAAK,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAC7DC,MAAO,CAAC,IAAK,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,QAE/DC,MAAO,CACNF,KAAM,CAAC,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MACtDC,MAAO,CAAC,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,QAGzDE,EAAW,CACVJ,IAAK,CAAC,GAAI,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,QAClEG,MAAO,CAAC,GAAI,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,MAAO,QAAS,UAErEE,EAAgB,CACfC,MAAOC,KAAKD,MACZE,KAAMD,KAAKC,MAWb,SAASC,EAAUC,EAAKC,EAAa,IACpC,IAECC,EAAGC,EAAMZ,EAAMO,EAAMM,EAAMC,EAAWC,EAAQC,EAAeC,EAAKC,EAAKC,EAAQC,EAAKC,EAAOC,EAAGC,EAAMC,EAAWC,EAAQC,EAAUC,EAASC,EAFvIC,EAAS,GACZC,EAAM,EAGP,GAAIC,MAAMtB,GACT,MAAM,IAAIuB,UAAU,kBA0CrB,GAvCAhC,GAA2B,IAApBU,EAAWV,KAClBuB,GAA2B,IAApBb,EAAWa,KAClBH,GAAyB,IAAnBV,EAAWU,IACjBR,EAAOF,EAAWE,MAAQ,EAC1BS,OAA6B,IAArBX,EAAWW,MAAmBX,EAAWW,MAAQE,EAAO,EAAI,EACpER,OAA+B,IAAtBL,EAAWK,OAAoBL,EAAWK,OAAS,GAC5DC,EAAgBN,EAAWM,eAAiB,GAC5CQ,OAAqC,IAAzBd,EAAWc,UAAuBd,EAAWc,UAAY,GACrEC,OAA+B,IAAtBf,EAAWe,OAAoBf,EAAWe,OAASF,EAAO,GAAK,IACxEI,EAAUjB,EAAWiB,SAAW,GAChCD,EAAoB,IAATd,GAAaF,EAAWgB,UAAsB,QACzDP,EAAST,EAAWS,QAAU,SAC9BN,GAA+B,IAAxBH,EAAWP,SAClBW,EAAYJ,EAAWI,qBAAqBmB,MAAQvB,EAAWI,UAAY,GAC3EH,OAA4B,IAAxBD,EAAWwB,SAAsBxB,EAAWwB,UAAY,EAC5DN,EAAexB,EAAcM,EAAWyB,iBAAmB7B,KAAKe,MAChEH,EAAMkB,OAAO3B,GACbQ,EAAMC,EAAM,EACZX,EAAOK,EAAO,EAAI,IAAO,KAGrBK,IACHC,GAAOA,KAIG,IAAPP,GAAYoB,MAAMpB,MACrBA,EAAIL,KAAKD,MAAMC,KAAK+B,IAAInB,GAAOZ,KAAK+B,IAAI9B,IAEpCI,EAAI,IACPA,EAAI,IAKFA,EAAI,IACPA,EAAI,GAGU,aAAXQ,EACH,OAAOR,EAIR,GAAY,IAARO,EACHW,EAAO,GAAK,EACZP,EAAIO,EAAO,GAAKN,EAAO,GAAKzB,EAAO4B,GAAU1B,EAAO,OAAS,SAASW,OAChE,CACNmB,EAAMZ,GAAgB,IAATN,EAAaN,KAAKgC,IAAI,EAAO,GAAJ3B,GAAUL,KAAKgC,IAAI,IAAM3B,IAE3DX,IACH8B,GAAY,EAERA,GAAOvB,GAAQI,EAAI,IACtBmB,GAAYvB,EACZI,MAIF,MAAM4B,EAAIjC,KAAKgC,IAAI,GAAI3B,EAAI,EAAIU,EAAQ,GACvCQ,EAAO,GAAKD,EAAaE,EAAMS,GAAKA,EAEhCV,EAAO,KAAOtB,GAAQI,EAAI,QAA6B,IAAxBD,EAAWwB,WAC7CL,EAAO,GAAK,EACZlB,KAGDW,EAAIO,EAAO,GAAc,KAATjB,GAAqB,IAAND,EAAUX,EAAO,KAAO,KAAOF,EAAO4B,GAAU1B,EAAO,OAAS,SAASW,GAEpGY,IACHM,EAAO,GAAkB,UAAbH,EAAuBG,EAAO,GAAGW,OAAO,GAAK7B,EAAI,EAAIkB,EAAO,GAAGY,QAAQ,KAAM,IAAMZ,EAAO,GAElGhC,EAAE6C,KAAKb,EAAO,MACjBA,EAAO,GAAKvB,KAAKD,MAAMwB,EAAO,IAC9BA,EAAO,GAAK,KAqBf,GAfIZ,IACHY,EAAO,IAAMA,EAAO,IAIrBA,EAAO,GAAKF,EAAQE,EAAO,KAAOA,EAAO,IAE1B,IAAXd,EACHc,EAAO,GAAKA,EAAO,GAAGc,iBACZ5B,EAAO6B,OAAS,EAC1Bf,EAAO,GAAKA,EAAO,GAAGc,eAAe5B,EAAQC,GACnCQ,EAAUoB,OAAS,IAC7Bf,EAAO,GAAKA,EAAO,GAAGgB,WAAWJ,QAAQ,IAAKjB,IAG3CJ,IAAuC,IAAhCgB,OAAOU,UAAUjB,EAAO,KAAiBR,EAAQ,EAAG,CAC9D,MAAM0B,EAAIvB,GAAa,IACtBwB,EAAMnB,EAAO,GAAGgB,WAAWI,MAAMF,GACjCG,EAAIF,EAAI,IAAM,GACdG,EAAID,EAAEN,OACNQ,EAAI/B,EAAQ8B,EAEbtB,EAAO,GAAK,GAAGmB,EAAI,KAAKD,IAAIG,EAAEG,OAAOF,EAAIC,EAAG,OAQ7C,OALIvC,IACHgB,EAAO,GAAKf,EAAUH,GAAKG,EAAUH,GAAKR,EAASuB,GAAUf,IAAMX,EAAO,MAAQ,SAAyB,IAAd6B,EAAO,GAAW,GAAK,MAInG,UAAXV,EAAqBU,EAAoB,WAAXV,EAAsB,CAACmC,MAAOzB,EAAO,GAAI/B,OAAQ+B,EAAO,GAAIK,SAAUvB,EAAG4C,KAAMjC,GAAKO,EAAO2B,KAAK/B,UAItIjB,EAASiD,QAAUC,GAAOjD,GAAOD,EAASC,EAAKiD"} \ No newline at end of file diff --git a/lib/filesize.js b/lib/filesize.js index 15166de..7372d13 100644 --- a/lib/filesize.js +++ b/lib/filesize.js @@ -25,6 +25,10 @@ fullform = { iec: ["", "kibi", "mebi", "gibi", "tebi", "pebi", "exbi", "zebi", "yobi"], jedec: ["", "kilo", "mega", "giga", "tera", "peta", "exa", "zetta", "yotta"] + }, + roundingFuncs = { + floor: Math.floor, + ceil: Math.ceil }; /** * filesize @@ -57,7 +61,8 @@ separator, spacer, standard, - symbols; + symbols, + roundingFunc; if (isNaN(arg)) { throw new TypeError("Invalid number"); @@ -78,6 +83,7 @@ full = descriptor.fullform === true; fullforms = descriptor.fullforms instanceof Array ? descriptor.fullforms : []; e = descriptor.exponent !== void 0 ? descriptor.exponent : -1; + roundingFunc = roundingFuncs[descriptor.roundingMethod] || Math.round; num = Number(arg); neg = num < 0; ceil = base > 2 ? 1000 : 1024; // Flipping a negative number to determine the size @@ -120,7 +126,8 @@ } } - result[0] = Number(val.toFixed(e > 0 ? round : 0)); + var p = Math.pow(10, e > 0 ? round : 0); + result[0] = roundingFunc(val * p) / p; if (result[0] === ceil && e < 8 && descriptor.exponent === void 0) { result[0] = 1; diff --git a/lib/filesize.min.js b/lib/filesize.min.js index 35d3143..39b7e12 100644 --- a/lib/filesize.min.js +++ b/lib/filesize.min.js @@ -2,5 +2,5 @@ 2020 Jason Mulligan @version 6.2.6 */ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).filesize=t()}(this,(function(){"use strict";var e=/^(b|B)$/,t={iec:{bits:["b","Kib","Mib","Gib","Tib","Pib","Eib","Zib","Yib"],bytes:["B","KiB","MiB","GiB","TiB","PiB","EiB","ZiB","YiB"]},jedec:{bits:["b","Kb","Mb","Gb","Tb","Pb","Eb","Zb","Yb"],bytes:["B","KB","MB","GB","TB","PB","EB","ZB","YB"]}},i={iec:["","kibi","mebi","gibi","tebi","pebi","exbi","zebi","yobi"],jedec:["","kilo","mega","giga","tera","peta","exa","zetta","yotta"]};function o(o){var n,r,a,b,l,s,c,d,u,f,p,B,g,y,h,m,v,x,M,j=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},N=[],T=0;if(isNaN(o))throw new TypeError("Invalid number");if(a=!0===j.bits,h=!0===j.unix,B=!0===j.pad,r=j.base||2,g=void 0!==j.round?j.round:h?1:2,c=void 0!==j.locale?j.locale:"",d=j.localeOptions||{},m=void 0!==j.separator?j.separator:"",v=void 0!==j.spacer?j.spacer:h?"":" ",M=j.symbols||{},x=2===r&&j.standard||"jedec",p=j.output||"string",l=!0===j.fullform,s=j.fullforms instanceof Array?j.fullforms:[],n=void 0!==j.exponent?j.exponent:-1,b=r>2?1e3:1024,(u=(f=Number(o))<0)&&(f=-f),(-1===n||isNaN(n))&&(n=Math.floor(Math.log(f)/Math.log(b)))<0&&(n=0),n>8&&(n=8),"exponent"===p)return n;if(0===f?(N[0]=0,y=N[1]=h?"":t[x][a?"bits":"bytes"][n]):(T=f/(2===r?Math.pow(2,10*n):Math.pow(1e3,n)),a&&(T*=8)>=b&&n<8&&(T/=b,n++),N[0]=Number(T.toFixed(n>0?g:0)),N[0]===b&&n<8&&void 0===j.exponent&&(N[0]=1,n++),y=N[1]=10===r&&1===n?a?"kb":"kB":t[x][a?"bits":"bytes"][n],h&&(N[1]="jedec"===x?N[1].charAt(0):n>0?N[1].replace(/B$/,""):N[1],e.test(N[1])&&(N[0]=Math.floor(N[0]),N[1]=""))),u&&(N[0]=-N[0]),N[1]=M[N[1]]||N[1],!0===c?N[0]=N[0].toLocaleString():c.length>0?N[0]=N[0].toLocaleString(c,d):m.length>0&&(N[0]=N[0].toString().replace(".",m)),B&&!1===Number.isInteger(N[0])&&g>0){var E=m||".",k=N[0].toString().split(E),w=k[1]||"",G=w.length,K=g-G;N[0]="".concat(k[0]).concat(E).concat(w.padEnd(G+K,"0"))}return l&&(N[1]=s[n]?s[n]:i[x][n]+(a?"bit":"byte")+(1===N[0]?"":"s")),"array"===p?N:"object"===p?{value:N[0],symbol:N[1],exponent:n,unit:y}:N.join(v)}return o.partial=function(e){return function(t){return o(t,e)}},o})); +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).filesize=t()}(this,(function(){"use strict";var e=/^(b|B)$/,t={iec:{bits:["b","Kib","Mib","Gib","Tib","Pib","Eib","Zib","Yib"],bytes:["B","KiB","MiB","GiB","TiB","PiB","EiB","ZiB","YiB"]},jedec:{bits:["b","Kb","Mb","Gb","Tb","Pb","Eb","Zb","Yb"],bytes:["B","KB","MB","GB","TB","PB","EB","ZB","YB"]}},i={iec:["","kibi","mebi","gibi","tebi","pebi","exbi","zebi","yobi"],jedec:["","kilo","mega","giga","tera","peta","exa","zetta","yotta"]},o={floor:Math.floor,ceil:Math.ceil};function n(n){var r,a,b,l,s,c,d,f,u,p,B,h,g,y,M,m,v,x,j,T,E=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},N=[],w=0;if(isNaN(n))throw new TypeError("Invalid number");if(b=!0===E.bits,M=!0===E.unix,h=!0===E.pad,a=E.base||2,g=void 0!==E.round?E.round:M?1:2,d=void 0!==E.locale?E.locale:"",f=E.localeOptions||{},m=void 0!==E.separator?E.separator:"",v=void 0!==E.spacer?E.spacer:M?"":" ",j=E.symbols||{},x=2===a&&E.standard||"jedec",B=E.output||"string",s=!0===E.fullform,c=E.fullforms instanceof Array?E.fullforms:[],r=void 0!==E.exponent?E.exponent:-1,T=o[E.roundingMethod]||Math.round,l=a>2?1e3:1024,(u=(p=Number(n))<0)&&(p=-p),(-1===r||isNaN(r))&&(r=Math.floor(Math.log(p)/Math.log(l)))<0&&(r=0),r>8&&(r=8),"exponent"===B)return r;if(0===p)N[0]=0,y=N[1]=M?"":t[x][b?"bits":"bytes"][r];else{w=p/(2===a?Math.pow(2,10*r):Math.pow(1e3,r)),b&&(w*=8)>=l&&r<8&&(w/=l,r++);var k=Math.pow(10,r>0?g:0);N[0]=T(w*k)/k,N[0]===l&&r<8&&void 0===E.exponent&&(N[0]=1,r++),y=N[1]=10===a&&1===r?b?"kb":"kB":t[x][b?"bits":"bytes"][r],M&&(N[1]="jedec"===x?N[1].charAt(0):r>0?N[1].replace(/B$/,""):N[1],e.test(N[1])&&(N[0]=Math.floor(N[0]),N[1]=""))}if(u&&(N[0]=-N[0]),N[1]=j[N[1]]||N[1],!0===d?N[0]=N[0].toLocaleString():d.length>0?N[0]=N[0].toLocaleString(d,f):m.length>0&&(N[0]=N[0].toString().replace(".",m)),h&&!1===Number.isInteger(N[0])&&g>0){var G=m||".",K=N[0].toString().split(G),P=K[1]||"",S=P.length,Y=g-S;N[0]="".concat(K[0]).concat(G).concat(P.padEnd(S+Y,"0"))}return s&&(N[1]=c[r]?c[r]:i[x][r]+(b?"bit":"byte")+(1===N[0]?"":"s")),"array"===B?N:"object"===B?{value:N[0],symbol:N[1],exponent:r,unit:y}:N.join(v)}return n.partial=function(e){return function(t){return n(t,e)}},n})); //# sourceMappingURL=filesize.min.js.map diff --git a/lib/filesize.min.js.map b/lib/filesize.min.js.map index e94166e..deec4ec 100644 --- a/lib/filesize.min.js.map +++ b/lib/filesize.min.js.map @@ -1 +1 @@ -{"version":3,"file":"filesize.min.js","sources":["../src/filesize.js"],"sourcesContent":["const b = /^(b|B)$/,\n\tsymbol = {\n\t\tiec: {\n\t\t\tbits: [\"b\", \"Kib\", \"Mib\", \"Gib\", \"Tib\", \"Pib\", \"Eib\", \"Zib\", \"Yib\"],\n\t\t\tbytes: [\"B\", \"KiB\", \"MiB\", \"GiB\", \"TiB\", \"PiB\", \"EiB\", \"ZiB\", \"YiB\"]\n\t\t},\n\t\tjedec: {\n\t\t\tbits: [\"b\", \"Kb\", \"Mb\", \"Gb\", \"Tb\", \"Pb\", \"Eb\", \"Zb\", \"Yb\"],\n\t\t\tbytes: [\"B\", \"KB\", \"MB\", \"GB\", \"TB\", \"PB\", \"EB\", \"ZB\", \"YB\"]\n\t\t}\n\t},\n\tfullform = {\n\t\tiec: [\"\", \"kibi\", \"mebi\", \"gibi\", \"tebi\", \"pebi\", \"exbi\", \"zebi\", \"yobi\"],\n\t\tjedec: [\"\", \"kilo\", \"mega\", \"giga\", \"tera\", \"peta\", \"exa\", \"zetta\", \"yotta\"]\n\t};\n\n/**\n * filesize\n *\n * @method filesize\n * @param {Mixed} arg String, Int or Float to transform\n * @param {Object} descriptor [Optional] Flags\n * @return {String} Readable file size String\n */\nfunction filesize (arg, descriptor = {}) {\n\tlet result = [],\n\t\tval = 0,\n\t\te, base, bits, ceil, full, fullforms, locale, localeOptions, neg, num, output, pad, round, u, unix, separator, spacer, standard, symbols;\n\n\tif (isNaN(arg)) {\n\t\tthrow new TypeError(\"Invalid number\");\n\t}\n\n\tbits = descriptor.bits === true;\n\tunix = descriptor.unix === true;\n\tpad = descriptor.pad === true;\n\tbase = descriptor.base || 2;\n\tround = descriptor.round !== void 0 ? descriptor.round : unix ? 1 : 2;\n\tlocale = descriptor.locale !== void 0 ? descriptor.locale : \"\";\n\tlocaleOptions = descriptor.localeOptions || {};\n\tseparator = descriptor.separator !== void 0 ? descriptor.separator : \"\";\n\tspacer = descriptor.spacer !== void 0 ? descriptor.spacer : unix ? \"\" : \" \";\n\tsymbols = descriptor.symbols || {};\n\tstandard = base === 2 ? descriptor.standard || \"jedec\" : \"jedec\";\n\toutput = descriptor.output || \"string\";\n\tfull = descriptor.fullform === true;\n\tfullforms = descriptor.fullforms instanceof Array ? descriptor.fullforms : [];\n\te = descriptor.exponent !== void 0 ? descriptor.exponent : -1;\n\tnum = Number(arg);\n\tneg = num < 0;\n\tceil = base > 2 ? 1000 : 1024;\n\n\t// Flipping a negative number to determine the size\n\tif (neg) {\n\t\tnum = -num;\n\t}\n\n\t// Determining the exponent\n\tif (e === -1 || isNaN(e)) {\n\t\te = Math.floor(Math.log(num) / Math.log(ceil));\n\n\t\tif (e < 0) {\n\t\t\te = 0;\n\t\t}\n\t}\n\n\t// Exceeding supported length, time to reduce & multiply\n\tif (e > 8) {\n\t\te = 8;\n\t}\n\n\tif (output === \"exponent\") {\n\t\treturn e;\n\t}\n\n\t// Zero is now a special case because bytes divide by 1\n\tif (num === 0) {\n\t\tresult[0] = 0;\n\t\tu = result[1] = unix ? \"\" : symbol[standard][bits ? \"bits\" : \"bytes\"][e];\n\t} else {\n\t\tval = num / (base === 2 ? Math.pow(2, e * 10) : Math.pow(1000, e));\n\n\t\tif (bits) {\n\t\t\tval = val * 8;\n\n\t\t\tif (val >= ceil && e < 8) {\n\t\t\t\tval = val / ceil;\n\t\t\t\te++;\n\t\t\t}\n\t\t}\n\n\t\tresult[0] = Number(val.toFixed(e > 0 ? round : 0));\n\n\t\tif (result[0] === ceil && e < 8 && descriptor.exponent === void 0) {\n\t\t\tresult[0] = 1;\n\t\t\te++;\n\t\t}\n\n\t\tu = result[1] = base === 10 && e === 1 ? bits ? \"kb\" : \"kB\" : symbol[standard][bits ? \"bits\" : \"bytes\"][e];\n\n\t\tif (unix) {\n\t\t\tresult[1] = standard === \"jedec\" ? result[1].charAt(0) : e > 0 ? result[1].replace(/B$/, \"\") : result[1];\n\n\t\t\tif (b.test(result[1])) {\n\t\t\t\tresult[0] = Math.floor(result[0]);\n\t\t\t\tresult[1] = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Decorating a 'diff'\n\tif (neg) {\n\t\tresult[0] = -result[0];\n\t}\n\n\t// Applying custom symbol\n\tresult[1] = symbols[result[1]] || result[1];\n\n\tif (locale === true) {\n\t\tresult[0] = result[0].toLocaleString();\n\t} else if (locale.length > 0) {\n\t\tresult[0] = result[0].toLocaleString(locale, localeOptions);\n\t} else if (separator.length > 0) {\n\t\tresult[0] = result[0].toString().replace(\".\", separator);\n\t}\n\n\tif (pad && Number.isInteger(result[0]) === false && round > 0) {\n\t\tconst x = separator || \".\",\n\t\t\ttmp = result[0].toString().split(x),\n\t\t\ts = tmp[1] || \"\",\n\t\t\tl = s.length,\n\t\t\tn = round - l;\n\n\t\tresult[0] = `${tmp[0]}${x}${s.padEnd(l + n, \"0\")}`;\n\t}\n\n\tif (full) {\n\t\tresult[1] = fullforms[e] ? fullforms[e] : fullform[standard][e] + (bits ? \"bit\" : \"byte\") + (result[0] === 1 ? \"\" : \"s\");\n\t}\n\n\t// Returning Array, Object, or String (default)\n\treturn output === \"array\" ? result : output === \"object\" ? {value: result[0], symbol: result[1], exponent: e, unit: u} : result.join(spacer);\n}\n\n// Partial application for functional programming\nfilesize.partial = opt => arg => filesize(arg, opt);\n\nexport default filesize;\n"],"names":["b","symbol","iec","bits","bytes","jedec","fullform","filesize","arg","e","base","ceil","full","fullforms","locale","localeOptions","neg","num","output","pad","round","u","unix","separator","spacer","standard","symbols","descriptor","result","val","isNaN","TypeError","Array","exponent","Number","Math","floor","log","pow","toFixed","charAt","replace","test","toLocaleString","length","toString","isInteger","x","tmp","split","s","l","n","padEnd","value","unit","join","partial","opt"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"filesize.min.js","sources":["../src/filesize.js"],"sourcesContent":["const b = /^(b|B)$/,\n\tsymbol = {\n\t\tiec: {\n\t\t\tbits: [\"b\", \"Kib\", \"Mib\", \"Gib\", \"Tib\", \"Pib\", \"Eib\", \"Zib\", \"Yib\"],\n\t\t\tbytes: [\"B\", \"KiB\", \"MiB\", \"GiB\", \"TiB\", \"PiB\", \"EiB\", \"ZiB\", \"YiB\"]\n\t\t},\n\t\tjedec: {\n\t\t\tbits: [\"b\", \"Kb\", \"Mb\", \"Gb\", \"Tb\", \"Pb\", \"Eb\", \"Zb\", \"Yb\"],\n\t\t\tbytes: [\"B\", \"KB\", \"MB\", \"GB\", \"TB\", \"PB\", \"EB\", \"ZB\", \"YB\"]\n\t\t}\n\t},\n\tfullform = {\n\t\tiec: [\"\", \"kibi\", \"mebi\", \"gibi\", \"tebi\", \"pebi\", \"exbi\", \"zebi\", \"yobi\"],\n\t\tjedec: [\"\", \"kilo\", \"mega\", \"giga\", \"tera\", \"peta\", \"exa\", \"zetta\", \"yotta\"]\n\t},\n\troundingFuncs = {\n\t\tfloor: Math.floor,\n\t\tceil: Math.ceil\n\t};\n\n/**\n * filesize\n *\n * @method filesize\n * @param {Mixed} arg String, Int or Float to transform\n * @param {Object} descriptor [Optional] Flags\n * @return {String} Readable file size String\n */\nfunction filesize (arg, descriptor = {}) {\n\tlet result = [],\n\t\tval = 0,\n\t\te, base, bits, ceil, full, fullforms, locale, localeOptions, neg, num, output, pad, round, u, unix, separator, spacer, standard, symbols, roundingFunc;\n\n\tif (isNaN(arg)) {\n\t\tthrow new TypeError(\"Invalid number\");\n\t}\n\n\tbits = descriptor.bits === true;\n\tunix = descriptor.unix === true;\n\tpad = descriptor.pad === true;\n\tbase = descriptor.base || 2;\n\tround = descriptor.round !== void 0 ? descriptor.round : unix ? 1 : 2;\n\tlocale = descriptor.locale !== void 0 ? descriptor.locale : \"\";\n\tlocaleOptions = descriptor.localeOptions || {};\n\tseparator = descriptor.separator !== void 0 ? descriptor.separator : \"\";\n\tspacer = descriptor.spacer !== void 0 ? descriptor.spacer : unix ? \"\" : \" \";\n\tsymbols = descriptor.symbols || {};\n\tstandard = base === 2 ? descriptor.standard || \"jedec\" : \"jedec\";\n\toutput = descriptor.output || \"string\";\n\tfull = descriptor.fullform === true;\n\tfullforms = descriptor.fullforms instanceof Array ? descriptor.fullforms : [];\n\te = descriptor.exponent !== void 0 ? descriptor.exponent : -1;\n\troundingFunc = roundingFuncs[descriptor.roundingMethod] || Math.round;\n\tnum = Number(arg);\n\tneg = num < 0;\n\tceil = base > 2 ? 1000 : 1024;\n\n\t// Flipping a negative number to determine the size\n\tif (neg) {\n\t\tnum = -num;\n\t}\n\n\t// Determining the exponent\n\tif (e === -1 || isNaN(e)) {\n\t\te = Math.floor(Math.log(num) / Math.log(ceil));\n\n\t\tif (e < 0) {\n\t\t\te = 0;\n\t\t}\n\t}\n\n\t// Exceeding supported length, time to reduce & multiply\n\tif (e > 8) {\n\t\te = 8;\n\t}\n\n\tif (output === \"exponent\") {\n\t\treturn e;\n\t}\n\n\t// Zero is now a special case because bytes divide by 1\n\tif (num === 0) {\n\t\tresult[0] = 0;\n\t\tu = result[1] = unix ? \"\" : symbol[standard][bits ? \"bits\" : \"bytes\"][e];\n\t} else {\n\t\tval = num / (base === 2 ? Math.pow(2, e * 10) : Math.pow(1000, e));\n\n\t\tif (bits) {\n\t\t\tval = val * 8;\n\n\t\t\tif (val >= ceil && e < 8) {\n\t\t\t\tval = val / ceil;\n\t\t\t\te++;\n\t\t\t}\n\t\t}\n\n\t\tconst p = Math.pow(10, e > 0 ? round : 0);\n\t\tresult[0] = roundingFunc(val * p) / p;\n\n\t\tif (result[0] === ceil && e < 8 && descriptor.exponent === void 0) {\n\t\t\tresult[0] = 1;\n\t\t\te++;\n\t\t}\n\n\t\tu = result[1] = base === 10 && e === 1 ? bits ? \"kb\" : \"kB\" : symbol[standard][bits ? \"bits\" : \"bytes\"][e];\n\n\t\tif (unix) {\n\t\t\tresult[1] = standard === \"jedec\" ? result[1].charAt(0) : e > 0 ? result[1].replace(/B$/, \"\") : result[1];\n\n\t\t\tif (b.test(result[1])) {\n\t\t\t\tresult[0] = Math.floor(result[0]);\n\t\t\t\tresult[1] = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Decorating a 'diff'\n\tif (neg) {\n\t\tresult[0] = -result[0];\n\t}\n\n\t// Applying custom symbol\n\tresult[1] = symbols[result[1]] || result[1];\n\n\tif (locale === true) {\n\t\tresult[0] = result[0].toLocaleString();\n\t} else if (locale.length > 0) {\n\t\tresult[0] = result[0].toLocaleString(locale, localeOptions);\n\t} else if (separator.length > 0) {\n\t\tresult[0] = result[0].toString().replace(\".\", separator);\n\t}\n\n\tif (pad && Number.isInteger(result[0]) === false && round > 0) {\n\t\tconst x = separator || \".\",\n\t\t\ttmp = result[0].toString().split(x),\n\t\t\ts = tmp[1] || \"\",\n\t\t\tl = s.length,\n\t\t\tn = round - l;\n\n\t\tresult[0] = `${tmp[0]}${x}${s.padEnd(l + n, \"0\")}`;\n\t}\n\n\tif (full) {\n\t\tresult[1] = fullforms[e] ? fullforms[e] : fullform[standard][e] + (bits ? \"bit\" : \"byte\") + (result[0] === 1 ? \"\" : \"s\");\n\t}\n\n\t// Returning Array, Object, or String (default)\n\treturn output === \"array\" ? result : output === \"object\" ? {value: result[0], symbol: result[1], exponent: e, unit: u} : result.join(spacer);\n}\n\n// Partial application for functional programming\nfilesize.partial = opt => arg => filesize(arg, opt);\n\nexport default filesize;\n"],"names":["b","symbol","iec","bits","bytes","jedec","fullform","roundingFuncs","floor","Math","ceil","filesize","arg","e","base","full","fullforms","locale","localeOptions","neg","num","output","pad","round","u","unix","separator","spacer","standard","symbols","roundingFunc","descriptor","result","val","isNaN","TypeError","Array","exponent","roundingMethod","Number","log","pow","p","charAt","replace","test","toLocaleString","length","toString","isInteger","x","tmp","split","s","l","n","padEnd","value","unit","join","partial","opt"],"mappings":"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"} \ No newline at end of file diff --git a/src/filesize.js b/src/filesize.js index 752e873..efbe24e 100644 --- a/src/filesize.js +++ b/src/filesize.js @@ -12,6 +12,10 @@ const b = /^(b|B)$/, fullform = { iec: ["", "kibi", "mebi", "gibi", "tebi", "pebi", "exbi", "zebi", "yobi"], jedec: ["", "kilo", "mega", "giga", "tera", "peta", "exa", "zetta", "yotta"] + }, + roundingFuncs = { + floor: Math.floor, + ceil: Math.ceil }; /** @@ -25,7 +29,7 @@ const b = /^(b|B)$/, function filesize (arg, descriptor = {}) { let result = [], val = 0, - e, base, bits, ceil, full, fullforms, locale, localeOptions, neg, num, output, pad, round, u, unix, separator, spacer, standard, symbols; + e, base, bits, ceil, full, fullforms, locale, localeOptions, neg, num, output, pad, round, u, unix, separator, spacer, standard, symbols, roundingFunc; if (isNaN(arg)) { throw new TypeError("Invalid number"); @@ -46,6 +50,7 @@ function filesize (arg, descriptor = {}) { full = descriptor.fullform === true; fullforms = descriptor.fullforms instanceof Array ? descriptor.fullforms : []; e = descriptor.exponent !== void 0 ? descriptor.exponent : -1; + roundingFunc = roundingFuncs[descriptor.roundingMethod] || Math.round; num = Number(arg); neg = num < 0; ceil = base > 2 ? 1000 : 1024; @@ -89,7 +94,8 @@ function filesize (arg, descriptor = {}) { } } - result[0] = Number(val.toFixed(e > 0 ? round : 0)); + const p = Math.pow(10, e > 0 ? round : 0); + result[0] = roundingFunc(val * p) / p; if (result[0] === ceil && e < 8 && descriptor.exponent === void 0) { result[0] = 1; diff --git a/test/filesize_test.js b/test/filesize_test.js index 9bf5b0f..c2f9677 100644 --- a/test/filesize_test.js +++ b/test/filesize_test.js @@ -182,5 +182,18 @@ exports.filesize = { localeOptions: {minimumFractionDigits: 1} }), Number(1).toLocaleString("de", {minimumFractionDigits: 1}) + " KB", "Should be '" + Number(1).toLocaleString("de", {minimumFractionDigits: 1}) + " KB'"); test.done(); + }, + roundingMethod: function (test) { + test.expect(9); + test.equal(filesize(1024, {roundingMethod: "round"}), "1 KB", "Should be '1 KB'"); + test.equal(filesize(1024, {roundingMethod: "floor"}), "1 KB", "Should be '1 KB'"); + test.equal(filesize(1024, {roundingMethod: "ceil"}), "1 KB", "Should be '1 KB'"); + test.equal(filesize(1024 * 1.333, {roundingMethod: "round"}), "1.33 KB", "Should be '1.33 KB'"); + test.equal(filesize(1024 * 1.333, {roundingMethod: "floor"}), "1.33 KB", "Should be '1.33 KB'"); + test.equal(filesize(1024 * 1.333, {roundingMethod: "ceil"}), "1.34 KB", "Should be '1.34 KB'"); + test.equal(filesize(1024 * 1.666, {round: 1, roundingMethod: "round"}), "1.7 KB", "Should be '1.7 KB'"); + test.equal(filesize(1024 * 1.666, {round: 1, roundingMethod: "floor"}), "1.6 KB", "Should be '1.6 KB'"); + test.equal(filesize(1024 * 1.666, {round: 1, roundingMethod: "ceil"}), "1.7 KB", "Should be '1.7 KB'"); + test.done(); } };