diff --git a/README.md b/README.md index aacb582..88eca66 100644 --- a/README.md +++ b/README.md @@ -35,6 +35,9 @@ _*(string)*_ Output of function (`array`, `exponent`, `object`, or `string`), de ### round _*(number)*_ Decimal place, default is `2` +### pad +_*(boolean)*_ Decimal place end padding, default is `false` + ### separator _*(string)*_ Decimal separator character, default is `.` diff --git a/lib/filesize.es6.js b/lib/filesize.es6.js index 2a7e9a0..d600b45 100644 --- a/lib/filesize.es6.js +++ b/lib/filesize.es6.js @@ -38,7 +38,7 @@ function filesize (arg, descriptor = {}) { let result = [], val = 0, - e, base, bits, ceil, full, fullforms, locale, localeOptions, neg, num, output, round, unix, separator, spacer, standard, symbols; + e, base, bits, ceil, full, fullforms, locale, localeOptions, neg, num, output, pad, round, unix, separator, spacer, standard, symbols; if (isNaN(arg)) { throw new TypeError("Invalid number"); @@ -46,6 +46,7 @@ bits = descriptor.bits === true; unix = descriptor.unix === true; + pad = descriptor.pad === true; base = descriptor.base || 2; round = descriptor.round !== void 0 ? descriptor.round : unix ? 1 : 2; locale = descriptor.locale !== void 0 ? descriptor.locale : ""; @@ -149,6 +150,16 @@ return {value: result[0], symbol: result[1], exponent: e}; } + if (pad && Number.isInteger(result[0]) === false && round > 0) { + const x = separator || ".", + tmp = result[0].toString().split(x), + s = tmp[1] || "", + l = s.length, + n = round - l; + + result[0] = `${tmp[0]}${x}${s.padEnd(l + n, "0")}`; + } + return result.join(spacer); } diff --git a/lib/filesize.es6.min.js b/lib/filesize.es6.min.js index c5ef36d..1eebe5c 100644 --- a/lib/filesize.es6.min.js +++ b/lib/filesize.es6.min.js @@ -2,5 +2,5 @@ 2020 Jason Mulligan @version 6.1.0 */ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=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,b={}){let n,a,r,s,l,c,d,p,f,u,B,y,m,g,h,x,M,v=[],j=0;if(isNaN(o))throw new TypeError("Invalid number");return r=!0===b.bits,m=!0===b.unix,a=b.base||2,y=void 0!==b.round?b.round:m?1:2,d=void 0!==b.locale?b.locale:"",p=b.localeOptions||{},g=void 0!==b.separator?b.separator:"",h=void 0!==b.spacer?b.spacer:m?"":" ",M=b.symbols||{},x=2===a&&b.standard||"jedec",B=b.output||"string",l=!0===b.fullform,c=b.fullforms instanceof Array?b.fullforms:[],n=void 0!==b.exponent?b.exponent:-1,u=Number(o),f=u<0,s=a>2?1e3:1024,f&&(u=-u),(-1===n||isNaN(n))&&(n=Math.floor(Math.log(u)/Math.log(s)),n<0&&(n=0)),n>8&&(n=8),"exponent"===B?n:(0===u?(v[0]=0,v[1]=m?"":t[x][r?"bits":"bytes"][n]):(j=u/(2===a?Math.pow(2,10*n):Math.pow(1e3,n)),r&&(j*=8,j>=s&&n<8&&(j/=s,n++)),v[0]=Number(j.toFixed(n>0?y:0)),v[0]===s&&n<8&&void 0===b.exponent&&(v[0]=1,n++),v[1]=10===a&&1===n?r?"kb":"kB":t[x][r?"bits":"bytes"][n],m&&(v[1]="jedec"===x?v[1].charAt(0):n>0?v[1].replace(/B$/,""):v[1],e.test(v[1])&&(v[0]=Math.floor(v[0]),v[1]=""))),f&&(v[0]=-v[0]),v[1]=M[v[1]]||v[1],!0===d?v[0]=v[0].toLocaleString():d.length>0?v[0]=v[0].toLocaleString(d,p):g.length>0&&(v[0]=v[0].toString().replace(".",g)),"array"===B?v:(l&&(v[1]=c[n]?c[n]:i[x][n]+(r?"bit":"byte")+(1===v[0]?"":"s")),"object"===B?{value:v[0],symbol:v[1],exponent:n}:v.join(h)))}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=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 r,b,a,s,l,d,f,p,c,u,B,g,y,m,h,x,M,v,j=[],N=0;if(isNaN(o))throw new TypeError("Invalid number");if(a=!0===n.bits,m=!0===n.unix,g=!0===n.pad,b=n.base||2,y=void 0!==n.round?n.round:m?1:2,f=void 0!==n.locale?n.locale:"",p=n.localeOptions||{},h=void 0!==n.separator?n.separator:"",x=void 0!==n.spacer?n.spacer:m?"":" ",v=n.symbols||{},M=2===b&&n.standard||"jedec",B=n.output||"string",l=!0===n.fullform,d=n.fullforms instanceof Array?n.fullforms:[],r=void 0!==n.exponent?n.exponent:-1,u=Number(o),c=u<0,s=b>2?1e3:1024,c&&(u=-u),(-1===r||isNaN(r))&&(r=Math.floor(Math.log(u)/Math.log(s)),r<0&&(r=0)),r>8&&(r=8),"exponent"===B)return r;if(0===u?(j[0]=0,j[1]=m?"":t[M][a?"bits":"bytes"][r]):(N=u/(2===b?Math.pow(2,10*r):Math.pow(1e3,r)),a&&(N*=8,N>=s&&r<8&&(N/=s,r++)),j[0]=Number(N.toFixed(r>0?y:0)),j[0]===s&&r<8&&void 0===n.exponent&&(j[0]=1,r++),j[1]=10===b&&1===r?a?"kb":"kB":t[M][a?"bits":"bytes"][r],m&&(j[1]="jedec"===M?j[1].charAt(0):r>0?j[1].replace(/B$/,""):j[1],e.test(j[1])&&(j[0]=Math.floor(j[0]),j[1]=""))),c&&(j[0]=-j[0]),j[1]=v[j[1]]||j[1],!0===f?j[0]=j[0].toLocaleString():f.length>0?j[0]=j[0].toLocaleString(f,p):h.length>0&&(j[0]=j[0].toString().replace(".",h)),"array"===B)return j;if(l&&(j[1]=d[r]?d[r]:i[M][r]+(a?"bit":"byte")+(1===j[0]?"":"s")),"object"===B)return{value:j[0],symbol:j[1],exponent:r};if(g&&!1===Number.isInteger(j[0])&&y>0){const e=h||".",t=j[0].toString().split(e),i=t[1]||"",o=i.length,n=y-o;j[0]=`${t[0]}${e}${i.padEnd(o+n,"0")}`}return j.join(x)}return o.partial=e=>t=>o(t,e),o})); //# sourceMappingURL=filesize.es6.min.js.map diff --git a/lib/filesize.es6.min.js.map b/lib/filesize.es6.min.js.map index 5b49fcc..487f12e 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, round, 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\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\tresult[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\tresult[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\t// Returning Array, Object, or String (default)\n\tif (output === \"array\") {\n\t\treturn result;\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\tif (output === \"object\") {\n\t\treturn {value: result[0], symbol: result[1], exponent: e};\n\t}\n\n\treturn 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","round","unix","separator","spacer","standard","symbols","result","val","isNaN","TypeError","Array","exponent","Number","Math","floor","log","pow","toFixed","charAt","replace","test","toLocaleString","length","toString","value","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\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, 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\tresult[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\tresult[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\t// Returning Array, Object, or String (default)\n\tif (output === \"array\") {\n\t\treturn result;\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\tif (output === \"object\") {\n\t\treturn {value: result[0], symbol: result[1], exponent: e};\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\treturn 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","unix","separator","spacer","standard","symbols","result","val","isNaN","TypeError","Array","exponent","Number","Math","floor","log","pow","toFixed","charAt","replace","test","toLocaleString","length","toString","value","isInteger","x","tmp","split","s","l","n","padEnd","join","partial","opt"],"mappings":"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"} \ No newline at end of file diff --git a/lib/filesize.js b/lib/filesize.js index 5e3fc1c..4ed8f6c 100644 --- a/lib/filesize.js +++ b/lib/filesize.js @@ -50,6 +50,7 @@ neg, num, output, + pad, round, unix, separator, @@ -63,6 +64,7 @@ bits = descriptor.bits === true; unix = descriptor.unix === true; + pad = descriptor.pad === true; base = descriptor.base || 2; round = descriptor.round !== void 0 ? descriptor.round : unix ? 1 : 2; locale = descriptor.locale !== void 0 ? descriptor.locale : ""; @@ -169,6 +171,15 @@ }; } + if (pad && Number.isInteger(result[0]) === false && round > 0) { + var x = separator || ".", + tmp = result[0].toString().split(x), + s = tmp[1] || "", + l = s.length, + n = round - l; + result[0] = "".concat(tmp[0]).concat(x).concat(s.padEnd(l + n, "0")); + } + return result.join(spacer); } // Partial application for functional programming diff --git a/lib/filesize.min.js b/lib/filesize.min.js index 4c8ab54..afdd895 100644 --- a/lib/filesize.min.js +++ b/lib/filesize.min.js @@ -2,5 +2,5 @@ 2020 Jason Mulligan @version 6.1.0 */ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=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,b,r,a,s,l,c,u,d,f,p,B,y,g,m,h,v,x=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},M=[],j=0;if(isNaN(o))throw new TypeError("Invalid number");return r=!0===x.bits,y=!0===x.unix,b=x.base||2,B=void 0!==x.round?x.round:y?1:2,c=void 0!==x.locale?x.locale:"",u=x.localeOptions||{},g=void 0!==x.separator?x.separator:"",m=void 0!==x.spacer?x.spacer:y?"":" ",v=x.symbols||{},h=2===b&&x.standard||"jedec",p=x.output||"string",s=!0===x.fullform,l=x.fullforms instanceof Array?x.fullforms:[],n=void 0!==x.exponent?x.exponent:-1,a=b>2?1e3:1024,(d=(f=Number(o))<0)&&(f=-f),(-1===n||isNaN(n))&&(n=Math.floor(Math.log(f)/Math.log(a)))<0&&(n=0),n>8&&(n=8),"exponent"===p?n:(0===f?(M[0]=0,M[1]=y?"":t[h][r?"bits":"bytes"][n]):(j=f/(2===b?Math.pow(2,10*n):Math.pow(1e3,n)),r&&(j*=8)>=a&&n<8&&(j/=a,n++),M[0]=Number(j.toFixed(n>0?B:0)),M[0]===a&&n<8&&void 0===x.exponent&&(M[0]=1,n++),M[1]=10===b&&1===n?r?"kb":"kB":t[h][r?"bits":"bytes"][n],y&&(M[1]="jedec"===h?M[1].charAt(0):n>0?M[1].replace(/B$/,""):M[1],e.test(M[1])&&(M[0]=Math.floor(M[0]),M[1]=""))),d&&(M[0]=-M[0]),M[1]=v[M[1]]||M[1],!0===c?M[0]=M[0].toLocaleString():c.length>0?M[0]=M[0].toLocaleString(c,u):g.length>0&&(M[0]=M[0].toString().replace(".",g)),"array"===p?M:(s&&(M[1]=l[n]?l[n]:i[h][n]+(r?"bit":"byte")+(1===M[0]?"":"s")),"object"===p?{value:M[0],symbol:M[1],exponent:n}:M.join(m)))}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=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,s,l,c,u,f,d,p,B,g,y,m,h,v,x,M=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},j=[],N=0;if(isNaN(o))throw new TypeError("Invalid number");if(a=!0===M.bits,y=!0===M.unix,B=!0===M.pad,r=M.base||2,g=void 0!==M.round?M.round:y?1:2,c=void 0!==M.locale?M.locale:"",u=M.localeOptions||{},m=void 0!==M.separator?M.separator:"",h=void 0!==M.spacer?M.spacer:y?"":" ",x=M.symbols||{},v=2===r&&M.standard||"jedec",p=M.output||"string",s=!0===M.fullform,l=M.fullforms instanceof Array?M.fullforms:[],n=void 0!==M.exponent?M.exponent:-1,b=r>2?1e3:1024,(f=(d=Number(o))<0)&&(d=-d),(-1===n||isNaN(n))&&(n=Math.floor(Math.log(d)/Math.log(b)))<0&&(n=0),n>8&&(n=8),"exponent"===p)return n;if(0===d?(j[0]=0,j[1]=y?"":t[v][a?"bits":"bytes"][n]):(N=d/(2===r?Math.pow(2,10*n):Math.pow(1e3,n)),a&&(N*=8)>=b&&n<8&&(N/=b,n++),j[0]=Number(N.toFixed(n>0?g:0)),j[0]===b&&n<8&&void 0===M.exponent&&(j[0]=1,n++),j[1]=10===r&&1===n?a?"kb":"kB":t[v][a?"bits":"bytes"][n],y&&(j[1]="jedec"===v?j[1].charAt(0):n>0?j[1].replace(/B$/,""):j[1],e.test(j[1])&&(j[0]=Math.floor(j[0]),j[1]=""))),f&&(j[0]=-j[0]),j[1]=x[j[1]]||j[1],!0===c?j[0]=j[0].toLocaleString():c.length>0?j[0]=j[0].toLocaleString(c,u):m.length>0&&(j[0]=j[0].toString().replace(".",m)),"array"===p)return j;if(s&&(j[1]=l[n]?l[n]:i[v][n]+(a?"bit":"byte")+(1===j[0]?"":"s")),"object"===p)return{value:j[0],symbol:j[1],exponent:n};if(B&&!1===Number.isInteger(j[0])&&g>0){var E=m||".",T=j[0].toString().split(E),k=T[1]||"",w=k.length,G=g-w;j[0]="".concat(T[0]).concat(E).concat(k.padEnd(w+G,"0"))}return j.join(h)}return o.partial=function(e){return function(t){return o(t,e)}},o})); //# sourceMappingURL=filesize.min.js.map diff --git a/lib/filesize.min.js.map b/lib/filesize.min.js.map index 7e12ff8..e225b0e 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, round, 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\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\tresult[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\tresult[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\t// Returning Array, Object, or String (default)\n\tif (output === \"array\") {\n\t\treturn result;\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\tif (output === \"object\") {\n\t\treturn {value: result[0], symbol: result[1], exponent: e};\n\t}\n\n\treturn 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","round","unix","separator","spacer","standard","symbols","descriptor","result","val","isNaN","TypeError","Array","exponent","Number","Math","floor","log","pow","toFixed","charAt","replace","test","toLocaleString","length","toString","value","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\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, 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\tresult[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\tresult[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\t// Returning Array, Object, or String (default)\n\tif (output === \"array\") {\n\t\treturn result;\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\tif (output === \"object\") {\n\t\treturn {value: result[0], symbol: result[1], exponent: e};\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\treturn 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","unix","separator","spacer","standard","symbols","descriptor","result","val","isNaN","TypeError","Array","exponent","Number","Math","floor","log","pow","toFixed","charAt","replace","test","toLocaleString","length","toString","value","isInteger","x","tmp","split","s","l","n","padEnd","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 15e1567..c80c0f9 100644 --- a/src/filesize.js +++ b/src/filesize.js @@ -25,7 +25,7 @@ const b = /^(b|B)$/, function filesize (arg, descriptor = {}) { let result = [], val = 0, - e, base, bits, ceil, full, fullforms, locale, localeOptions, neg, num, output, round, unix, separator, spacer, standard, symbols; + e, base, bits, ceil, full, fullforms, locale, localeOptions, neg, num, output, pad, round, unix, separator, spacer, standard, symbols; if (isNaN(arg)) { throw new TypeError("Invalid number"); @@ -33,6 +33,7 @@ function filesize (arg, descriptor = {}) { bits = descriptor.bits === true; unix = descriptor.unix === true; + pad = descriptor.pad === true; base = descriptor.base || 2; round = descriptor.round !== void 0 ? descriptor.round : unix ? 1 : 2; locale = descriptor.locale !== void 0 ? descriptor.locale : ""; @@ -136,6 +137,16 @@ function filesize (arg, descriptor = {}) { return {value: result[0], symbol: result[1], exponent: e}; } + if (pad && Number.isInteger(result[0]) === false && round > 0) { + const x = separator || ".", + tmp = result[0].toString().split(x), + s = tmp[1] || "", + l = s.length, + n = round - l; + + result[0] = `${tmp[0]}${x}${s.padEnd(l + n, "0")}`; + } + return result.join(spacer); } diff --git a/test/filesize_test.js b/test/filesize_test.js index 6fe30f6..d524940 100644 --- a/test/filesize_test.js +++ b/test/filesize_test.js @@ -152,9 +152,10 @@ exports.filesize = { test.done(); }, separator: function (test) { - test.expect(2); + test.expect(3); test.equal(filesize(1040, {separator: ""}), "1.02 KB", "Should be '1.02 KB'"); test.equal(filesize(1040, {separator: ","}), "1,02 KB", "Should be '1,02 KB'"); + test.equal(filesize(1040, {separator: ",", round: 1, pad: true}), "1,0 KB", "Should be '1,0 KB'"); test.done(); }, locale: function (test) {