{"version":3,"file":"index.cjs","sources":["../../src/misc/getReadableRelativeTime.js","../../src/misc/trackTime.js","../../src/misc/index.js","../../src/misc/htmlEscape.js","../../src/misc/humanReadableByteSize.js"],"sourcesContent":["const arrMonths = [\n    'Jan',\n    'Feb',\n    'Mar',\n    'Apr',\n    'May',\n    'Jun',\n    'Jul',\n    'Aug',\n    'Sep',\n    'Oct',\n    'Nov',\n    'Dec'\n];\n\n// FIXME: If this code is running at server side, then the timezone can be different from the client side. Extend this\n//        function to accept the timezone as a parameter.\nconst getReadableRelativeTime = function (timestamp) {\n    const now = new Date();\n    const dateForTimestamp = new Date(timestamp);\n\n    // @ts-ignore\n    let diffInMs = now - timestamp;\n    if (diffInMs >= 0) {\n        // do nothing\n    } else {\n        diffInMs = -1;\n    }\n\n    const\n        timeDiffInSeconds = diffInMs          / 1000,\n        timeDiffInMinutes = timeDiffInSeconds /   60,\n        timeDiffInHours   = timeDiffInMinutes /   60,\n        timeDiffInDays    = timeDiffInHours   /   24,\n        timeDiffInWeeks   = timeDiffInDays    /    7;\n\n    let relativeTime;\n    if (timeDiffInDays >= 364) {\n        relativeTime = dateForTimestamp.getDate() + ' ' + arrMonths[dateForTimestamp.getMonth()] + ' ' + dateForTimestamp.getFullYear();\n    } else if (timeDiffInWeeks >= 5) {\n        relativeTime = dateForTimestamp.getDate() + ' ' + arrMonths[dateForTimestamp.getMonth()];\n    } else if (timeDiffInWeeks   >= 1) { relativeTime = Math.floor(timeDiffInWeeks  ) + 'w';\n    } else if (timeDiffInDays    >= 1) { relativeTime = Math.floor(timeDiffInDays   ) + 'd';\n    } else if (timeDiffInHours   >= 1) { relativeTime = Math.floor(timeDiffInHours  ) + 'h';\n    } else if (timeDiffInMinutes >= 1) { relativeTime = Math.floor(timeDiffInMinutes) + 'm';\n    } else if (timeDiffInSeconds >= 1) { relativeTime = Math.floor(timeDiffInSeconds) + 's';\n    } else if (timeDiffInSeconds >= 0) { relativeTime = 'Just now';\n    } else {\n        relativeTime = dateForTimestamp.getDate() + ' ' + arrMonths[dateForTimestamp.getMonth()] + ' ' + dateForTimestamp.getFullYear();\n    }\n\n    return relativeTime;\n};\n\nexport { getReadableRelativeTime };\n","const trackTime = {};\n\ntrackTime.log = {};\nconst trackTimeLog = trackTime.log;\n// window.trackTimeLog = trackTimeLog; // DEV-HELPER\n\nlet now;\nif (typeof performance !== 'undefined' && performance.now) {\n    now = performance.now.bind(performance);\n} else {\n    now = Date.now.bind(Date);\n}\n\ntrackTime.async = async function (trackName, fn) {\n    const startTime = now();\n    const result = await fn();\n    const endTime = now();\n\n    trackTimeLog[trackName] = (trackTimeLog[trackName] || 0) + (endTime - startTime);\n    // Good to know: https://developer.mozilla.org/en-US/docs/Web/API/Performance/now#security_requirements\n    // Rounding off the numbers to avoid unnecessary digits towards the end due to floating point arithmetic.\n    trackTimeLog[trackName] = Math.round(trackTimeLog[trackName] * 1000) / 1000;\n\n    return result;\n};\n\ntrackTime.sync = function (trackName, fn) {\n    const startTime = now();\n    const result = fn();\n    const endTime = now();\n\n    trackTimeLog[trackName] = (trackTimeLog[trackName] || 0) + (endTime - startTime);\n    // Good to know: https://developer.mozilla.org/en-US/docs/Web/API/Performance/now#security_requirements\n    // Rounding off the numbers to avoid unnecessary digits towards the end due to floating point arithmetic.\n    trackTimeLog[trackName] = Math.round(trackTimeLog[trackName] * 1000) / 1000;\n\n    return result;\n};\n\ntrackTime.reset = function (trackName) {\n    trackTimeLog[trackName] = 0;\n};\n\nexport { trackTime };\n","import { getReadableRelativeTime } from './getReadableRelativeTime.js';\nimport { htmlEscape } from './htmlEscape.js';\nimport { humanReadableByteSize } from './humanReadableByteSize.js';\nimport { trackTime } from './trackTime.js';\n\nconst misc = {\n    getReadableRelativeTime,\n    htmlEscape,\n    humanReadableByteSize,\n    trackTime\n};\n\nexport { misc };\n","const htmlEscape = function (str) {\n    return str\n        .replaceAll('&', '&amp;')\n        .replaceAll('\"', '&quot;')\n        .replaceAll(\"'\", '&#39;') // https://stackoverflow.com/questions/2083754/why-shouldnt-apos-be-used-to-escape-single-quotes\n        .replaceAll('<', '&lt;')\n        .replaceAll('>', '&gt;');\n};\n\nexport { htmlEscape };\n","const humanReadableByteSize = function (sizeInB) {\n    if (\n        typeof sizeInB === 'number' &&\n        !Number.isNaN(sizeInB) &&\n        sizeInB >= 0 &&\n        sizeInB <= Number.MAX_SAFE_INTEGER\n    ) {\n        let size = Number.parseInt(sizeInB, 10);\n        if (size === 1) {\n            return size + ' byte';\n        }\n        if (size < 1024) {\n            return size + ' bytes';\n        }\n\n        const arrUnits = ['KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n        let i;\n        for (i = 0; i < arrUnits.length; i++) {\n            size = size / 1024;\n            if (size < 1024) {\n                return Number.parseFloat(size.toFixed(2)) + ' ' + arrUnits[i];\n            }\n        }\n        return Number.parseFloat(size.toFixed(2)) + ' ' + arrUnits[i - 1];\n    } else {\n        return sizeInB + ' bytes';\n    }\n};\n\nexport { humanReadableByteSize };\n"],"names":["arrMonths","trackTime","trackTimeLog","log","now","performance","bind","Date","async","trackName","fn","startTime","result","endTime","Math","round","sync","reset","misc","getReadableRelativeTime","timestamp","dateForTimestamp","diffInMs","timeDiffInSeconds","timeDiffInMinutes","timeDiffInHours","timeDiffInDays","timeDiffInWeeks","relativeTime","getDate","getMonth","getFullYear","floor","htmlEscape","str","replaceAll","humanReadableByteSize","sizeInB","Number","isNaN","MAX_SAFE_INTEGER","size","parseInt","arrUnits","i","length","parseFloat","toFixed"],"mappings":";AAAA,MAAMA,UAAY,CACd,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OCZEC,UAAY,CAElBA,IAAgB,CAAA,GACVC,aAAeD,UAAUE;AAG/B,IAAIC;AAEAA,IADuB,oBAAhBC,aAA+BA,YAAYD,IAC5CC,YAAYD,IAAIE,KAAKD,aAErBE,KAAKH,IAAIE,KAAKC;AAGxBN,UAAUO,MAAQA,eAAgBC,UAAWC,IACzC,MAAMC,UAAYP,MACZQ,aAAeF,KACfG,QAAUT;AAEhBF,aAAaO,YAAcP,aAAaO,YAAc,IAAMI,QAAUF;AAGtET,aAAaO,WAAaK,KAAKC,MAAgC,IAA1Bb,aAAaO,YAAqB;AAEvE,OAAOG,MACX;AAEAX,UAAUe,KAAO,SAAUP,UAAWC,IAClC,MAAMC,UAAYP,MACZQ,OAASF,KACTG,QAAUT;AAEhBF,aAAaO,YAAcP,aAAaO,YAAc,IAAMI,QAAUF;AAGtET,aAAaO,WAAaK,KAAKC,MAAgC,IAA1Bb,aAAaO,YAAqB;AAEvE,OAAOG,MACX;AAEAX,UAAUgB,MAAQ,SAAUR,WACxBP,aAAaO,WAAa,CAC9B;ACpCK,MAACS,KAAO,CACTC,wBFW4B,SAAUC,WACtC,MAAMhB,IAAM,IAAIG,KACVc,iBAAmB,IAAId,KAAKa;AAGlC,IAAIE,SAAWlB,IAAMgB;AACjBE,UAAY,IAGZA,UAAW;AAGf,MACIC,kBAAoBD,SAAoB,IACxCE,kBAAoBD,kBAAsB,GAC1CE,gBAAoBD,kBAAsB,GAC1CE,eAAoBD,gBAAsB,GAC1CE,gBAAoBD,eAAuB;AAE/C,IAAIE;AAEAA,aADAF,gBAAkB,IACHL,iBAAiBQ,UAAY,IAAM7B,UAAUqB,iBAAiBS,YAAc,IAAMT,iBAAiBU,cAC3GJ,iBAAmB,EACXN,iBAAiBQ,UAAY,IAAM7B,UAAUqB,iBAAiBS,YACtEH,iBAAqB,EAAoBb,KAAKkB,MAAML,iBAAqB,IACzED,gBAAqB,EAAoBZ,KAAKkB,MAAMN,gBAAqB,IACzED,iBAAqB,EAAoBX,KAAKkB,MAAMP,iBAAqB,IACzED,mBAAqB,EAAoBV,KAAKkB,MAAMR,mBAAqB,IACzED,mBAAqB,EAAoBT,KAAKkB,MAAMT,mBAAqB,IACzEA,mBAAqB,EAAoB,WAEjCF,iBAAiBQ,UAAY,IAAM7B,UAAUqB,iBAAiBS,YAAc,IAAMT,iBAAiBU;AAGtH,OAAOH,YACX,EE7CIK,WCPe,SAAUC,KACzB,OAAOA,IACFC,WAAW,IAAK,SAChBA,WAAW,IAAK,UAChBA,WAAW,IAAK,SAChBA,WAAW,IAAK,QAChBA,WAAW,IAAK,OACzB,EDCIC,sBER0B,SAAUC,SACpC,GACuB,iBAAZA,UACNC,OAAOC,MAAMF,UACdA,SAAW,GACXA,SAAWC,OAAOE,iBACpB,CACE,IAAIC,KAAOH,OAAOI,SAASL,QAAS;AACpC,GAAa,IAATI,KACA,OAAOA,KAAO;AAElB,GAAIA,KAAO,KACP,OAAOA,KAAO;AAGlB,MAAME,SAAW,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM;AAC5D,IAAIC;AACJ,IAAKA,EAAI,EAAGA,EAAID,SAASE,OAAQD,IAAK,CAClCH,MAAc;AACd,GAAIA,KAAO,KACP,OAAOH,OAAOQ,WAAWL,KAAKM,QAAQ,IAAM,IAAMJ,SAASC,EAEnE,CACA,OAAON,OAAOQ,WAAWL,KAAKM,QAAQ,IAAM,IAAMJ,SAASC,EAAI,EACnE,CACI,OAAOP,QAAU,QAEzB,EFlBIpC;"}