{"version":3,"sources":["../src/toMS.ts","../src/toDuration.ts","../src/index.ts"],"sourcesContent":["/**\r\n * Convert Durations to milliseconds\r\n * @param {string} value The string time value\r\n * @param option - An optional object containing various configuration options:\r\n *   - `isLeapYear` (optional) - A boolean to specify whether to use a leap year in calculations (default is false).\r\n * @returns {number}\r\n * \r\n* @throws {Error} If the input is NOT a valid string.\r\n */\r\nexport function toMS(\r\n    value: string,\r\n    option: {\r\n        isLeapYear?: boolean\r\n    } = {}\r\n): number {\r\n    const number = Number(value.replace(/[^-.0-9]+/g, '')), noSpaceValue = value.replace(/\\s+/g, '');\r\n\r\n    const yearMs = option.isLeapYear ? 31622400000 : 31536000000;\r\n\r\n    if(/\\d+(?=y)/i.test(noSpaceValue)) return number * yearMs;\r\n    else if(/\\d+(?=ms|milliseconds?)/i.test(noSpaceValue)) return number;\r\n    else if(/\\d+(?=mo|months?)/i.test(noSpaceValue)) return number * (yearMs / 12);\r\n    else if(/\\d+(?=w)/i.test(noSpaceValue)) return number * 604800000;\r\n    else if(/\\d+(?=d)/i.test(noSpaceValue)) return number * 86400000;\r\n    else if(/\\d+(?=h)/i.test(noSpaceValue)) return number * 3600000;\r\n    else if(/\\d+(?=m)/i.test(noSpaceValue)) return number * 60000;\r\n    else if(/\\d+(?=s)/i.test(noSpaceValue)) return number * 1000;\r\n\r\n    throw new Error(`Something went wrong while converting value \"${value}\" with function toMS()`);\r\n};","import { Option } from \"@types\";\r\n\r\n/**\r\n * Converts a given number of milliseconds into a human-readable duration format.\r\n * \r\n * @param value - The number of milliseconds to convert.\r\n * @param option - An optional object containing various configuration options:\r\n *   - `isLeapYear` (optional) - A boolean to specify whether to use a leap year in calculations (default is false).\r\n *   - `returnAllUnits` (optional) - A boolean to specify whether to include all units, even those with a value of 0 (default is false).\r\n *   - `compactUnits` (optional) - A boolean to specify whether to return the units in a compact format (e.g., `2h 30m` instead of `2 hours, 30 minutes`) (default is false).\r\n *   - `avoidUnits` (optional) - An array of time formats to exclude from the result (e.g., `['y', 'mo']`).\r\n *   - `staticUnits` (optional) - A boolean to specify whether to use static units. Can only be used with option `avoidUnits`. If true, it will return formatted time depending on what units were avoided. (default is false).\r\n * @returns A string representing the duration formatted according to the options provided.\r\n * \r\n * @throws {Error} If the input is NOT a valid number.\r\n */\r\nexport function toDuration(\r\n    value: number,\r\n    option: Option = {}\r\n): string {\r\n    if(typeof value !== 'number' || isNaN(value)) throw new Error('Value is not a valid number.');\r\n\r\n    const {\r\n        isLeapYear,\r\n        returnAllUnits,\r\n        compactUnits,\r\n        avoidUnits,\r\n        staticUnits\r\n    } = option;\r\n\r\n    const yearMs = isLeapYear ? 31622400000 : 31536000000;\r\n    const timeUnits: Array<any> = [\r\n        { short: 'y', long: 'year', ms: yearMs },\r\n        { short: 'mo', long: 'month', ms: yearMs / 12 },\r\n        { short: 'w', long: 'week', ms: 604800000 },\r\n        { short: 'd', long: 'day', ms: 86400000 },\r\n        { short: 'h', long: 'hour', ms: 3600000 },\r\n        { short: 'm', long: 'minute', ms: 60000 },\r\n        { short: 's', long: 'second', ms: 1000 },\r\n        { short: 'ms', long: 'millisecond', ms: 1 }\r\n    ];\r\n    \r\n    const result = [];\r\n    let remainingMs = Math.abs(value);\r\n    \r\n    for(const unit of timeUnits) {\r\n        const count = Math.floor(remainingMs / unit.ms);\r\n\r\n        if(returnAllUnits || count > 0) {\r\n            if(staticUnits) remainingMs %= unit.ms;\r\n            if(avoidUnits && avoidUnits.includes(unit.short)) continue;\r\n            if(!staticUnits) remainingMs %= unit.ms;\r\n\r\n            result.push(`${Math.sign(value) === -1 ? '-' : ''}${compactUnits ? `${count}${unit.short}` : `${count} ${unit.long}${count > 1 ? 's' : ''}`}`)\r\n        };\r\n    };\r\n    \r\n    return result.length > 0 ? result.join(compactUnits ? ' ' : ', ') : '0';\r\n};","import { toMS } from './toMS';\nimport {\n    toDuration\n} from './toDuration';\n\nimport {\n    CompactUnit,\n    Option\n} from '@types';\n\ninterface FlexOptions {\n    isLeapYear?: boolean,\n    returnAllUnits?: boolean,\n    compactUnits?: boolean\n}\n\nfunction isError(error: unknown): error is Error {\n    return typeof error === 'object' && error !== null && 'message' in error;\n};\n\nfunction AdvancedMS(value: string, option?: { isLeapYear?: boolean }): number;\nfunction AdvancedMS(value: number, option?: FlexOptions): string;\nfunction AdvancedMS(\n    value: number,\n    option: FlexOptions & { avoidUnits: Array<CompactUnit>; staticUnits?: boolean }\n): string;\nfunction AdvancedMS(\n    value: string | number,\n    option?: Option\n): string | number {\n    try {\n        if(typeof value === 'string') {\n            if(/^\\d+$/.test(value)) return Number(value);\n\n            const durations = value.match(/\\s*-?\\s*\\d*\\.?\\d+\\s*?(years?|yrs?|months?|mo|weeks?|days?|hours?|hrs?|minutes?|mins?|seconds?|secs?|milliseconds?|ms|[smhdwy])/gi);\n            if(durations) return durations.reduce((a, b) => a + toMS(b, { isLeapYear: option?.isLeapYear }), 0);\n\n            throw new Error('Value is not a valid string');\n        };\n        if(typeof value === 'number') return toDuration(value, option);\n\n        throw new Error('Value is not a valid string nor number');\n    } catch(err) {  \n        const message = isError(err)\n        ? `${err.message}. Value = ${JSON.stringify(value)}`\n        : 'An unknown error has occured.';\n\n        throw new Error(message);\n    };\n};\n\nexport default AdvancedMS;"],"mappings":"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","names":[]}