@sapphire/duration 1.1.5-next.ff2c792d → 1.2.0-next.75165d36
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/index.cjs +11 -3
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/index.d.cts +2 -1
- package/dist/esm/index.d.mts +2 -1
- package/dist/esm/index.mjs +11 -3
- package/dist/esm/index.mjs.map +1 -1
- package/dist/iife/index.global.js +11 -3
- package/dist/iife/index.global.js.map +1 -1
- package/package.json +6 -6
package/dist/cjs/index.cjs
CHANGED
|
@@ -61,7 +61,8 @@ var DEFAULT_UNITS = {
|
|
|
61
61
|
};
|
|
62
62
|
var DEFAULT_SEPARATORS = {
|
|
63
63
|
left: " ",
|
|
64
|
-
right: " "
|
|
64
|
+
right: " ",
|
|
65
|
+
final: " "
|
|
65
66
|
};
|
|
66
67
|
|
|
67
68
|
// src/lib/Duration.ts
|
|
@@ -231,7 +232,8 @@ var _DurationFormatter = class _DurationFormatter {
|
|
|
231
232
|
}
|
|
232
233
|
format(duration, precision = 7, {
|
|
233
234
|
left: leftSeparator = DEFAULT_SEPARATORS.left,
|
|
234
|
-
right: rightSeparator = DEFAULT_SEPARATORS.right
|
|
235
|
+
right: rightSeparator = DEFAULT_SEPARATORS.right,
|
|
236
|
+
final: finalSeparator = DEFAULT_SEPARATORS.final
|
|
235
237
|
} = DEFAULT_SEPARATORS) {
|
|
236
238
|
const output = [];
|
|
237
239
|
const negative = duration < 0;
|
|
@@ -244,7 +246,13 @@ var _DurationFormatter = class _DurationFormatter {
|
|
|
244
246
|
output.push(addUnit(floored, this.units[type], leftSeparator));
|
|
245
247
|
if (output.length >= precision) break;
|
|
246
248
|
}
|
|
247
|
-
|
|
249
|
+
if (output.length === 0) return addUnit(0, this.units["second" /* Second */], leftSeparator);
|
|
250
|
+
if (negative) output[0] = `-${output[0]}`;
|
|
251
|
+
if (output.length > 1) {
|
|
252
|
+
const last = output.pop();
|
|
253
|
+
return `${output.join(rightSeparator)}${finalSeparator}${last}`;
|
|
254
|
+
}
|
|
255
|
+
return output.join(rightSeparator);
|
|
248
256
|
}
|
|
249
257
|
};
|
|
250
258
|
__name(_DurationFormatter, "DurationFormatter");
|
package/dist/cjs/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/lib/constants.ts","../../src/lib/Duration.ts","../../src/lib/DurationFormatter.ts"],"names":["Time","TimeTypes"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { DurationFormatAssetsTime, DurationFormatSeparators } from './DurationFormatter';\n\nexport enum Time {\n\tNanosecond = 1 / 1_000_000,\n\tMicrosecond = 1 / 1000,\n\tMillisecond = 1,\n\tSecond = 1000,\n\tMinute = Second * 60,\n\tHour = Minute * 60,\n\tDay = Hour * 24,\n\tWeek = Day * 7,\n\tMonth = Day * (365 / 12),\n\tYear = Day * 365\n}\n\n/**\n * The supported time types\n */\nexport enum TimeTypes {\n\tSecond = 'second',\n\tMinute = 'minute',\n\tHour = 'hour',\n\tDay = 'day',\n\tWeek = 'week',\n\tMonth = 'month',\n\tYear = 'year'\n}\n\nexport const DEFAULT_UNITS: DurationFormatAssetsTime = {\n\t[TimeTypes.Year]: {\n\t\t1: 'year',\n\t\tDEFAULT: 'years'\n\t},\n\t[TimeTypes.Month]: {\n\t\t1: 'month',\n\t\tDEFAULT: 'months'\n\t},\n\t[TimeTypes.Week]: {\n\t\t1: 'week',\n\t\tDEFAULT: 'weeks'\n\t},\n\t[TimeTypes.Day]: {\n\t\t1: 'day',\n\t\tDEFAULT: 'days'\n\t},\n\t[TimeTypes.Hour]: {\n\t\t1: 'hour',\n\t\tDEFAULT: 'hours'\n\t},\n\t[TimeTypes.Minute]: {\n\t\t1: 'minute',\n\t\tDEFAULT: 'minutes'\n\t},\n\t[TimeTypes.Second]: {\n\t\t1: 'second',\n\t\tDEFAULT: 'seconds'\n\t}\n};\n\nexport const DEFAULT_SEPARATORS: DurationFormatSeparators = {\n\tleft: ' ',\n\tright: ' '\n};\n","import { Time } from './constants';\n\nconst tokens = new Map([\n\t['nanosecond', Time.Nanosecond],\n\t['nanoseconds', Time.Nanosecond],\n\t['ns', Time.Nanosecond],\n\n\t['microsecond', Time.Microsecond],\n\t['microseconds', Time.Microsecond],\n\t['μs', Time.Microsecond],\n\t['us', Time.Microsecond],\n\n\t['millisecond', Time.Millisecond],\n\t['milliseconds', Time.Millisecond],\n\t['ms', Time.Millisecond],\n\n\t['second', Time.Second],\n\t['seconds', Time.Second],\n\t['sec', Time.Second],\n\t['secs', Time.Second],\n\t['s', Time.Second],\n\n\t['minute', Time.Minute],\n\t['minutes', Time.Minute],\n\t['min', Time.Minute],\n\t['mins', Time.Minute],\n\t['m', Time.Minute],\n\n\t['hour', Time.Hour],\n\t['hours', Time.Hour],\n\t['hr', Time.Hour],\n\t['hrs', Time.Hour],\n\t['h', Time.Hour],\n\n\t['day', Time.Day],\n\t['days', Time.Day],\n\t['d', Time.Day],\n\n\t['week', Time.Week],\n\t['weeks', Time.Week],\n\t['wk', Time.Week],\n\t['wks', Time.Week],\n\t['w', Time.Week],\n\n\t['month', Time.Month],\n\t['months', Time.Month],\n\t['b', Time.Month],\n\t['mo', Time.Month],\n\n\t['year', Time.Year],\n\t['years', Time.Year],\n\t['yr', Time.Year],\n\t['yrs', Time.Year],\n\t['y', Time.Year]\n]);\n\nconst mappings = new Map([\n\t[Time.Nanosecond, 'nanoseconds'],\n\t[Time.Microsecond, 'microseconds'],\n\t[Time.Millisecond, 'milliseconds'],\n\t[Time.Second, 'seconds'],\n\t[Time.Minute, 'minutes'],\n\t[Time.Hour, 'hours'],\n\t[Time.Day, 'days'],\n\t[Time.Week, 'weeks'],\n\t[Time.Month, 'months'],\n\t[Time.Year, 'years']\n] as const);\n\n/**\n * Converts duration strings into ms and future dates\n */\nexport class Duration {\n\t/**\n\t * The offset\n\t */\n\tpublic offset: number;\n\n\t/**\n\t * The amount of nanoseconds extracted from the text.\n\t */\n\tpublic nanoseconds = 0;\n\n\t/**\n\t * The amount of microseconds extracted from the text.\n\t */\n\tpublic microseconds = 0;\n\n\t/**\n\t * The amount of milliseconds extracted from the text.\n\t */\n\tpublic milliseconds = 0;\n\n\t/**\n\t * The amount of seconds extracted from the text.\n\t */\n\tpublic seconds = 0;\n\n\t/**\n\t * The amount of minutes extracted from the text.\n\t */\n\tpublic minutes = 0;\n\n\t/**\n\t * The amount of hours extracted from the text.\n\t */\n\tpublic hours = 0;\n\n\t/**\n\t * The amount of days extracted from the text.\n\t */\n\tpublic days = 0;\n\n\t/**\n\t * The amount of weeks extracted from the text.\n\t */\n\tpublic weeks = 0;\n\n\t/**\n\t * The amount of months extracted from the text.\n\t */\n\tpublic months = 0;\n\n\t/**\n\t * The amount of years extracted from the text.\n\t */\n\tpublic years = 0;\n\n\t/**\n\t * Create a new Duration instance\n\t * @param pattern The string to parse\n\t */\n\tpublic constructor(pattern: string) {\n\t\tlet result = 0;\n\t\tlet valid = false;\n\n\t\tpattern\n\t\t\t.toLowerCase()\n\t\t\t// ignore commas\n\t\t\t.replace(Duration.commaRegex, '')\n\t\t\t// a / an = 1\n\t\t\t.replace(Duration.aAndAnRegex, '1')\n\t\t\t// do math\n\t\t\t.replace(Duration.patternRegex, (_, i, units) => {\n\t\t\t\tconst token = tokens.get(units);\n\t\t\t\tif (token !== undefined) {\n\t\t\t\t\tconst n = Number(i);\n\t\t\t\t\tresult += n * token;\n\t\t\t\t\tthis[mappings.get(token)!] += n;\n\t\t\t\t\tvalid = true;\n\t\t\t\t}\n\t\t\t\treturn '';\n\t\t\t});\n\n\t\tthis.offset = valid ? result : NaN;\n\t}\n\n\t/**\n\t * Get the date from now\n\t */\n\tpublic get fromNow(): Date {\n\t\treturn this.dateFrom(new Date());\n\t}\n\n\t/**\n\t * Get the date from\n\t * @param date The Date instance to get the date from\n\t */\n\tpublic dateFrom(date: Date): Date {\n\t\treturn new Date(date.getTime() + this.offset);\n\t}\n\n\t/**\n\t * The RegExp used for the pattern parsing\n\t */\n\tprivate static readonly patternRegex = /(-?\\d*\\.?\\d+(?:e[-+]?\\d+)?)\\s*([a-zμ]*)/gi;\n\n\t/**\n\t * The RegExp used for removing commas\n\t */\n\tprivate static readonly commaRegex = /,/g;\n\n\t/**\n\t * The RegExp used for replacing a/an with 1\n\t */\n\tprivate static readonly aAndAnRegex = /\\ban?\\b/gi;\n}\n","import { DEFAULT_SEPARATORS, DEFAULT_UNITS, TimeTypes } from './constants';\n\n/**\n * The duration of each time type in milliseconds\n */\nconst kTimeDurations: readonly [TimeTypes, number][] = [\n\t[TimeTypes.Year, 31536000000],\n\t// 29.53059 days is the official duration of a month: https://en.wikipedia.org/wiki/Month\n\t[TimeTypes.Month, 2628000000],\n\t[TimeTypes.Week, 1000 * 60 * 60 * 24 * 7],\n\t[TimeTypes.Day, 1000 * 60 * 60 * 24],\n\t[TimeTypes.Hour, 1000 * 60 * 60],\n\t[TimeTypes.Minute, 1000 * 60],\n\t[TimeTypes.Second, 1000]\n];\n\n/**\n * Display the duration\n * @param duration The duration in milliseconds to parse and display\n * @param assets The language assets\n */\nexport class DurationFormatter {\n\tpublic constructor(public units: DurationFormatAssetsTime = DEFAULT_UNITS) {}\n\n\tpublic format(\n\t\tduration: number,\n\t\tprecision = 7,\n\t\t{\n\t\t\tleft: leftSeparator = DEFAULT_SEPARATORS.left,\n\t\t\tright: rightSeparator = DEFAULT_SEPARATORS.right\n\t\t}: DurationFormatSeparators = DEFAULT_SEPARATORS\n\t) {\n\t\tconst output: string[] = [];\n\t\tconst negative = duration < 0;\n\t\tif (negative) duration *= -1;\n\n\t\tfor (const [type, timeDuration] of kTimeDurations) {\n\t\t\tconst division = duration / timeDuration;\n\t\t\tif (division < 1) continue;\n\n\t\t\tconst floored = Math.floor(division);\n\t\t\tduration -= floored * timeDuration;\n\t\t\toutput.push(addUnit(floored, this.units[type], leftSeparator!));\n\n\t\t\t// If the output has enough precision, break\n\t\t\tif (output.length >= precision) break;\n\t\t}\n\n\t\treturn `${negative ? '-' : ''}${output.join(rightSeparator) || addUnit(0, this.units.second, leftSeparator!)}`;\n\t}\n}\n\n/**\n * Adds an unit, if non zero\n * @param time The duration of said unit\n * @param unit The unit language assets\n */\nfunction addUnit(time: number, unit: DurationFormatAssetsUnit, separator: string) {\n\tif (Reflect.has(unit, time)) return `${time}${separator}${Reflect.get(unit, time)}`;\n\treturn `${time}${separator}${unit.DEFAULT}`;\n}\n\nexport interface DurationFormatSeparators {\n\tleft?: string;\n\tright?: string;\n}\n\nexport interface DurationFormatAssetsUnit extends Record<number, string> {\n\tDEFAULT: string;\n}\n\nexport interface DurationFormatAssetsTime {\n\t[TimeTypes.Second]: DurationFormatAssetsUnit;\n\t[TimeTypes.Minute]: DurationFormatAssetsUnit;\n\t[TimeTypes.Hour]: DurationFormatAssetsUnit;\n\t[TimeTypes.Day]: DurationFormatAssetsUnit;\n\t[TimeTypes.Week]: DurationFormatAssetsUnit;\n\t[TimeTypes.Month]: DurationFormatAssetsUnit;\n\t[TimeTypes.Year]: DurationFormatAssetsUnit;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/lib/constants.ts","../../src/lib/Duration.ts","../../src/lib/DurationFormatter.ts"],"names":["Time","TimeTypes"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { DurationFormatAssetsTime, DurationFormatSeparators } from './DurationFormatter';\n\nexport enum Time {\n\tNanosecond = 1 / 1_000_000,\n\tMicrosecond = 1 / 1000,\n\tMillisecond = 1,\n\tSecond = 1000,\n\tMinute = Second * 60,\n\tHour = Minute * 60,\n\tDay = Hour * 24,\n\tWeek = Day * 7,\n\tMonth = Day * (365 / 12),\n\tYear = Day * 365\n}\n\n/**\n * The supported time types\n */\nexport enum TimeTypes {\n\tSecond = 'second',\n\tMinute = 'minute',\n\tHour = 'hour',\n\tDay = 'day',\n\tWeek = 'week',\n\tMonth = 'month',\n\tYear = 'year'\n}\n\nexport const DEFAULT_UNITS: DurationFormatAssetsTime = {\n\t[TimeTypes.Year]: {\n\t\t1: 'year',\n\t\tDEFAULT: 'years'\n\t},\n\t[TimeTypes.Month]: {\n\t\t1: 'month',\n\t\tDEFAULT: 'months'\n\t},\n\t[TimeTypes.Week]: {\n\t\t1: 'week',\n\t\tDEFAULT: 'weeks'\n\t},\n\t[TimeTypes.Day]: {\n\t\t1: 'day',\n\t\tDEFAULT: 'days'\n\t},\n\t[TimeTypes.Hour]: {\n\t\t1: 'hour',\n\t\tDEFAULT: 'hours'\n\t},\n\t[TimeTypes.Minute]: {\n\t\t1: 'minute',\n\t\tDEFAULT: 'minutes'\n\t},\n\t[TimeTypes.Second]: {\n\t\t1: 'second',\n\t\tDEFAULT: 'seconds'\n\t}\n};\n\nexport const DEFAULT_SEPARATORS: DurationFormatSeparators = {\n\tleft: ' ',\n\tright: ' ',\n\tfinal: ' '\n};\n","import { Time } from './constants';\n\nconst tokens = new Map([\n\t['nanosecond', Time.Nanosecond],\n\t['nanoseconds', Time.Nanosecond],\n\t['ns', Time.Nanosecond],\n\n\t['microsecond', Time.Microsecond],\n\t['microseconds', Time.Microsecond],\n\t['μs', Time.Microsecond],\n\t['us', Time.Microsecond],\n\n\t['millisecond', Time.Millisecond],\n\t['milliseconds', Time.Millisecond],\n\t['ms', Time.Millisecond],\n\n\t['second', Time.Second],\n\t['seconds', Time.Second],\n\t['sec', Time.Second],\n\t['secs', Time.Second],\n\t['s', Time.Second],\n\n\t['minute', Time.Minute],\n\t['minutes', Time.Minute],\n\t['min', Time.Minute],\n\t['mins', Time.Minute],\n\t['m', Time.Minute],\n\n\t['hour', Time.Hour],\n\t['hours', Time.Hour],\n\t['hr', Time.Hour],\n\t['hrs', Time.Hour],\n\t['h', Time.Hour],\n\n\t['day', Time.Day],\n\t['days', Time.Day],\n\t['d', Time.Day],\n\n\t['week', Time.Week],\n\t['weeks', Time.Week],\n\t['wk', Time.Week],\n\t['wks', Time.Week],\n\t['w', Time.Week],\n\n\t['month', Time.Month],\n\t['months', Time.Month],\n\t['b', Time.Month],\n\t['mo', Time.Month],\n\n\t['year', Time.Year],\n\t['years', Time.Year],\n\t['yr', Time.Year],\n\t['yrs', Time.Year],\n\t['y', Time.Year]\n]);\n\nconst mappings = new Map([\n\t[Time.Nanosecond, 'nanoseconds'],\n\t[Time.Microsecond, 'microseconds'],\n\t[Time.Millisecond, 'milliseconds'],\n\t[Time.Second, 'seconds'],\n\t[Time.Minute, 'minutes'],\n\t[Time.Hour, 'hours'],\n\t[Time.Day, 'days'],\n\t[Time.Week, 'weeks'],\n\t[Time.Month, 'months'],\n\t[Time.Year, 'years']\n] as const);\n\n/**\n * Converts duration strings into ms and future dates\n */\nexport class Duration {\n\t/**\n\t * The offset\n\t */\n\tpublic offset: number;\n\n\t/**\n\t * The amount of nanoseconds extracted from the text.\n\t */\n\tpublic nanoseconds = 0;\n\n\t/**\n\t * The amount of microseconds extracted from the text.\n\t */\n\tpublic microseconds = 0;\n\n\t/**\n\t * The amount of milliseconds extracted from the text.\n\t */\n\tpublic milliseconds = 0;\n\n\t/**\n\t * The amount of seconds extracted from the text.\n\t */\n\tpublic seconds = 0;\n\n\t/**\n\t * The amount of minutes extracted from the text.\n\t */\n\tpublic minutes = 0;\n\n\t/**\n\t * The amount of hours extracted from the text.\n\t */\n\tpublic hours = 0;\n\n\t/**\n\t * The amount of days extracted from the text.\n\t */\n\tpublic days = 0;\n\n\t/**\n\t * The amount of weeks extracted from the text.\n\t */\n\tpublic weeks = 0;\n\n\t/**\n\t * The amount of months extracted from the text.\n\t */\n\tpublic months = 0;\n\n\t/**\n\t * The amount of years extracted from the text.\n\t */\n\tpublic years = 0;\n\n\t/**\n\t * Create a new Duration instance\n\t * @param pattern The string to parse\n\t */\n\tpublic constructor(pattern: string) {\n\t\tlet result = 0;\n\t\tlet valid = false;\n\n\t\tpattern\n\t\t\t.toLowerCase()\n\t\t\t// ignore commas\n\t\t\t.replace(Duration.commaRegex, '')\n\t\t\t// a / an = 1\n\t\t\t.replace(Duration.aAndAnRegex, '1')\n\t\t\t// do math\n\t\t\t.replace(Duration.patternRegex, (_, i, units) => {\n\t\t\t\tconst token = tokens.get(units);\n\t\t\t\tif (token !== undefined) {\n\t\t\t\t\tconst n = Number(i);\n\t\t\t\t\tresult += n * token;\n\t\t\t\t\tthis[mappings.get(token)!] += n;\n\t\t\t\t\tvalid = true;\n\t\t\t\t}\n\t\t\t\treturn '';\n\t\t\t});\n\n\t\tthis.offset = valid ? result : NaN;\n\t}\n\n\t/**\n\t * Get the date from now\n\t */\n\tpublic get fromNow(): Date {\n\t\treturn this.dateFrom(new Date());\n\t}\n\n\t/**\n\t * Get the date from\n\t * @param date The Date instance to get the date from\n\t */\n\tpublic dateFrom(date: Date): Date {\n\t\treturn new Date(date.getTime() + this.offset);\n\t}\n\n\t/**\n\t * The RegExp used for the pattern parsing\n\t */\n\tprivate static readonly patternRegex = /(-?\\d*\\.?\\d+(?:e[-+]?\\d+)?)\\s*([a-zμ]*)/gi;\n\n\t/**\n\t * The RegExp used for removing commas\n\t */\n\tprivate static readonly commaRegex = /,/g;\n\n\t/**\n\t * The RegExp used for replacing a/an with 1\n\t */\n\tprivate static readonly aAndAnRegex = /\\ban?\\b/gi;\n}\n","import { DEFAULT_SEPARATORS, DEFAULT_UNITS, TimeTypes } from './constants';\n\n/**\n * The duration of each time type in milliseconds\n */\nconst kTimeDurations: readonly [TimeTypes, number][] = [\n\t[TimeTypes.Year, 31536000000],\n\t// 29.53059 days is the official duration of a month: https://en.wikipedia.org/wiki/Month\n\t[TimeTypes.Month, 2628000000],\n\t[TimeTypes.Week, 1000 * 60 * 60 * 24 * 7],\n\t[TimeTypes.Day, 1000 * 60 * 60 * 24],\n\t[TimeTypes.Hour, 1000 * 60 * 60],\n\t[TimeTypes.Minute, 1000 * 60],\n\t[TimeTypes.Second, 1000]\n];\n\n/**\n * Display the duration\n * @param duration The duration in milliseconds to parse and display\n * @param assets The language assets\n */\nexport class DurationFormatter {\n\tpublic constructor(public units: DurationFormatAssetsTime = DEFAULT_UNITS) {}\n\n\tpublic format(\n\t\tduration: number,\n\t\tprecision = 7,\n\t\t{\n\t\t\tleft: leftSeparator = DEFAULT_SEPARATORS.left,\n\t\t\tright: rightSeparator = DEFAULT_SEPARATORS.right,\n\t\t\tfinal: finalSeparator = DEFAULT_SEPARATORS.final\n\t\t}: DurationFormatSeparators = DEFAULT_SEPARATORS\n\t) {\n\t\tconst output: string[] = [];\n\t\tconst negative = duration < 0;\n\t\tif (negative) duration *= -1;\n\n\t\tfor (const [type, timeDuration] of kTimeDurations) {\n\t\t\tconst division = duration / timeDuration;\n\t\t\tif (division < 1) continue;\n\n\t\t\tconst floored = Math.floor(division);\n\t\t\tduration -= floored * timeDuration;\n\t\t\toutput.push(addUnit(floored, this.units[type], leftSeparator!));\n\n\t\t\t// If the output has enough precision, break\n\t\t\tif (output.length >= precision) break;\n\t\t}\n\n\t\tif (output.length === 0) return addUnit(0, this.units[TimeTypes.Second], leftSeparator!);\n\t\tif (negative) output[0] = `-${output[0]}`;\n\n\t\tif (output.length > 1) {\n\t\t\tconst last = output.pop();\n\t\t\treturn `${output.join(rightSeparator!)}${finalSeparator}${last}`;\n\t\t}\n\n\t\treturn output.join(rightSeparator!);\n\t}\n}\n\n/**\n * Adds an unit, if non zero\n * @param time The duration of said unit\n * @param unit The unit language assets\n */\nfunction addUnit(time: number, unit: DurationFormatAssetsUnit, separator: string) {\n\tif (Reflect.has(unit, time)) return `${time}${separator}${Reflect.get(unit, time)}`;\n\treturn `${time}${separator}${unit.DEFAULT}`;\n}\n\nexport interface DurationFormatSeparators {\n\tleft?: string;\n\tright?: string;\n\tfinal?: string;\n}\n\nexport interface DurationFormatAssetsUnit extends Record<number, string> {\n\tDEFAULT: string;\n}\n\nexport interface DurationFormatAssetsTime {\n\t[TimeTypes.Second]: DurationFormatAssetsUnit;\n\t[TimeTypes.Minute]: DurationFormatAssetsUnit;\n\t[TimeTypes.Hour]: DurationFormatAssetsUnit;\n\t[TimeTypes.Day]: DurationFormatAssetsUnit;\n\t[TimeTypes.Week]: DurationFormatAssetsUnit;\n\t[TimeTypes.Month]: DurationFormatAssetsUnit;\n\t[TimeTypes.Year]: DurationFormatAssetsUnit;\n}\n"]}
|
package/dist/cjs/index.d.cts
CHANGED
|
@@ -6,11 +6,12 @@
|
|
|
6
6
|
declare class DurationFormatter {
|
|
7
7
|
units: DurationFormatAssetsTime;
|
|
8
8
|
constructor(units?: DurationFormatAssetsTime);
|
|
9
|
-
format(duration: number, precision?: number, { left: leftSeparator, right: rightSeparator }?: DurationFormatSeparators): string;
|
|
9
|
+
format(duration: number, precision?: number, { left: leftSeparator, right: rightSeparator, final: finalSeparator }?: DurationFormatSeparators): string;
|
|
10
10
|
}
|
|
11
11
|
interface DurationFormatSeparators {
|
|
12
12
|
left?: string;
|
|
13
13
|
right?: string;
|
|
14
|
+
final?: string;
|
|
14
15
|
}
|
|
15
16
|
interface DurationFormatAssetsUnit extends Record<number, string> {
|
|
16
17
|
DEFAULT: string;
|
package/dist/esm/index.d.mts
CHANGED
|
@@ -6,11 +6,12 @@
|
|
|
6
6
|
declare class DurationFormatter {
|
|
7
7
|
units: DurationFormatAssetsTime;
|
|
8
8
|
constructor(units?: DurationFormatAssetsTime);
|
|
9
|
-
format(duration: number, precision?: number, { left: leftSeparator, right: rightSeparator }?: DurationFormatSeparators): string;
|
|
9
|
+
format(duration: number, precision?: number, { left: leftSeparator, right: rightSeparator, final: finalSeparator }?: DurationFormatSeparators): string;
|
|
10
10
|
}
|
|
11
11
|
interface DurationFormatSeparators {
|
|
12
12
|
left?: string;
|
|
13
13
|
right?: string;
|
|
14
|
+
final?: string;
|
|
14
15
|
}
|
|
15
16
|
interface DurationFormatAssetsUnit extends Record<number, string> {
|
|
16
17
|
DEFAULT: string;
|
package/dist/esm/index.mjs
CHANGED
|
@@ -59,7 +59,8 @@ var DEFAULT_UNITS = {
|
|
|
59
59
|
};
|
|
60
60
|
var DEFAULT_SEPARATORS = {
|
|
61
61
|
left: " ",
|
|
62
|
-
right: " "
|
|
62
|
+
right: " ",
|
|
63
|
+
final: " "
|
|
63
64
|
};
|
|
64
65
|
|
|
65
66
|
// src/lib/Duration.ts
|
|
@@ -229,7 +230,8 @@ var _DurationFormatter = class _DurationFormatter {
|
|
|
229
230
|
}
|
|
230
231
|
format(duration, precision = 7, {
|
|
231
232
|
left: leftSeparator = DEFAULT_SEPARATORS.left,
|
|
232
|
-
right: rightSeparator = DEFAULT_SEPARATORS.right
|
|
233
|
+
right: rightSeparator = DEFAULT_SEPARATORS.right,
|
|
234
|
+
final: finalSeparator = DEFAULT_SEPARATORS.final
|
|
233
235
|
} = DEFAULT_SEPARATORS) {
|
|
234
236
|
const output = [];
|
|
235
237
|
const negative = duration < 0;
|
|
@@ -242,7 +244,13 @@ var _DurationFormatter = class _DurationFormatter {
|
|
|
242
244
|
output.push(addUnit(floored, this.units[type], leftSeparator));
|
|
243
245
|
if (output.length >= precision) break;
|
|
244
246
|
}
|
|
245
|
-
|
|
247
|
+
if (output.length === 0) return addUnit(0, this.units["second" /* Second */], leftSeparator);
|
|
248
|
+
if (negative) output[0] = `-${output[0]}`;
|
|
249
|
+
if (output.length > 1) {
|
|
250
|
+
const last = output.pop();
|
|
251
|
+
return `${output.join(rightSeparator)}${finalSeparator}${last}`;
|
|
252
|
+
}
|
|
253
|
+
return output.join(rightSeparator);
|
|
246
254
|
}
|
|
247
255
|
};
|
|
248
256
|
__name(_DurationFormatter, "DurationFormatter");
|
package/dist/esm/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/lib/constants.ts","../../src/lib/Duration.ts","../../src/lib/DurationFormatter.ts"],"names":["Time","TimeTypes"],"mappings":"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","file":"index.mjs","sourcesContent":["import type { DurationFormatAssetsTime, DurationFormatSeparators } from './DurationFormatter';\n\nexport enum Time {\n\tNanosecond = 1 / 1_000_000,\n\tMicrosecond = 1 / 1000,\n\tMillisecond = 1,\n\tSecond = 1000,\n\tMinute = Second * 60,\n\tHour = Minute * 60,\n\tDay = Hour * 24,\n\tWeek = Day * 7,\n\tMonth = Day * (365 / 12),\n\tYear = Day * 365\n}\n\n/**\n * The supported time types\n */\nexport enum TimeTypes {\n\tSecond = 'second',\n\tMinute = 'minute',\n\tHour = 'hour',\n\tDay = 'day',\n\tWeek = 'week',\n\tMonth = 'month',\n\tYear = 'year'\n}\n\nexport const DEFAULT_UNITS: DurationFormatAssetsTime = {\n\t[TimeTypes.Year]: {\n\t\t1: 'year',\n\t\tDEFAULT: 'years'\n\t},\n\t[TimeTypes.Month]: {\n\t\t1: 'month',\n\t\tDEFAULT: 'months'\n\t},\n\t[TimeTypes.Week]: {\n\t\t1: 'week',\n\t\tDEFAULT: 'weeks'\n\t},\n\t[TimeTypes.Day]: {\n\t\t1: 'day',\n\t\tDEFAULT: 'days'\n\t},\n\t[TimeTypes.Hour]: {\n\t\t1: 'hour',\n\t\tDEFAULT: 'hours'\n\t},\n\t[TimeTypes.Minute]: {\n\t\t1: 'minute',\n\t\tDEFAULT: 'minutes'\n\t},\n\t[TimeTypes.Second]: {\n\t\t1: 'second',\n\t\tDEFAULT: 'seconds'\n\t}\n};\n\nexport const DEFAULT_SEPARATORS: DurationFormatSeparators = {\n\tleft: ' ',\n\tright: ' '\n};\n","import { Time } from './constants';\n\nconst tokens = new Map([\n\t['nanosecond', Time.Nanosecond],\n\t['nanoseconds', Time.Nanosecond],\n\t['ns', Time.Nanosecond],\n\n\t['microsecond', Time.Microsecond],\n\t['microseconds', Time.Microsecond],\n\t['μs', Time.Microsecond],\n\t['us', Time.Microsecond],\n\n\t['millisecond', Time.Millisecond],\n\t['milliseconds', Time.Millisecond],\n\t['ms', Time.Millisecond],\n\n\t['second', Time.Second],\n\t['seconds', Time.Second],\n\t['sec', Time.Second],\n\t['secs', Time.Second],\n\t['s', Time.Second],\n\n\t['minute', Time.Minute],\n\t['minutes', Time.Minute],\n\t['min', Time.Minute],\n\t['mins', Time.Minute],\n\t['m', Time.Minute],\n\n\t['hour', Time.Hour],\n\t['hours', Time.Hour],\n\t['hr', Time.Hour],\n\t['hrs', Time.Hour],\n\t['h', Time.Hour],\n\n\t['day', Time.Day],\n\t['days', Time.Day],\n\t['d', Time.Day],\n\n\t['week', Time.Week],\n\t['weeks', Time.Week],\n\t['wk', Time.Week],\n\t['wks', Time.Week],\n\t['w', Time.Week],\n\n\t['month', Time.Month],\n\t['months', Time.Month],\n\t['b', Time.Month],\n\t['mo', Time.Month],\n\n\t['year', Time.Year],\n\t['years', Time.Year],\n\t['yr', Time.Year],\n\t['yrs', Time.Year],\n\t['y', Time.Year]\n]);\n\nconst mappings = new Map([\n\t[Time.Nanosecond, 'nanoseconds'],\n\t[Time.Microsecond, 'microseconds'],\n\t[Time.Millisecond, 'milliseconds'],\n\t[Time.Second, 'seconds'],\n\t[Time.Minute, 'minutes'],\n\t[Time.Hour, 'hours'],\n\t[Time.Day, 'days'],\n\t[Time.Week, 'weeks'],\n\t[Time.Month, 'months'],\n\t[Time.Year, 'years']\n] as const);\n\n/**\n * Converts duration strings into ms and future dates\n */\nexport class Duration {\n\t/**\n\t * The offset\n\t */\n\tpublic offset: number;\n\n\t/**\n\t * The amount of nanoseconds extracted from the text.\n\t */\n\tpublic nanoseconds = 0;\n\n\t/**\n\t * The amount of microseconds extracted from the text.\n\t */\n\tpublic microseconds = 0;\n\n\t/**\n\t * The amount of milliseconds extracted from the text.\n\t */\n\tpublic milliseconds = 0;\n\n\t/**\n\t * The amount of seconds extracted from the text.\n\t */\n\tpublic seconds = 0;\n\n\t/**\n\t * The amount of minutes extracted from the text.\n\t */\n\tpublic minutes = 0;\n\n\t/**\n\t * The amount of hours extracted from the text.\n\t */\n\tpublic hours = 0;\n\n\t/**\n\t * The amount of days extracted from the text.\n\t */\n\tpublic days = 0;\n\n\t/**\n\t * The amount of weeks extracted from the text.\n\t */\n\tpublic weeks = 0;\n\n\t/**\n\t * The amount of months extracted from the text.\n\t */\n\tpublic months = 0;\n\n\t/**\n\t * The amount of years extracted from the text.\n\t */\n\tpublic years = 0;\n\n\t/**\n\t * Create a new Duration instance\n\t * @param pattern The string to parse\n\t */\n\tpublic constructor(pattern: string) {\n\t\tlet result = 0;\n\t\tlet valid = false;\n\n\t\tpattern\n\t\t\t.toLowerCase()\n\t\t\t// ignore commas\n\t\t\t.replace(Duration.commaRegex, '')\n\t\t\t// a / an = 1\n\t\t\t.replace(Duration.aAndAnRegex, '1')\n\t\t\t// do math\n\t\t\t.replace(Duration.patternRegex, (_, i, units) => {\n\t\t\t\tconst token = tokens.get(units);\n\t\t\t\tif (token !== undefined) {\n\t\t\t\t\tconst n = Number(i);\n\t\t\t\t\tresult += n * token;\n\t\t\t\t\tthis[mappings.get(token)!] += n;\n\t\t\t\t\tvalid = true;\n\t\t\t\t}\n\t\t\t\treturn '';\n\t\t\t});\n\n\t\tthis.offset = valid ? result : NaN;\n\t}\n\n\t/**\n\t * Get the date from now\n\t */\n\tpublic get fromNow(): Date {\n\t\treturn this.dateFrom(new Date());\n\t}\n\n\t/**\n\t * Get the date from\n\t * @param date The Date instance to get the date from\n\t */\n\tpublic dateFrom(date: Date): Date {\n\t\treturn new Date(date.getTime() + this.offset);\n\t}\n\n\t/**\n\t * The RegExp used for the pattern parsing\n\t */\n\tprivate static readonly patternRegex = /(-?\\d*\\.?\\d+(?:e[-+]?\\d+)?)\\s*([a-zμ]*)/gi;\n\n\t/**\n\t * The RegExp used for removing commas\n\t */\n\tprivate static readonly commaRegex = /,/g;\n\n\t/**\n\t * The RegExp used for replacing a/an with 1\n\t */\n\tprivate static readonly aAndAnRegex = /\\ban?\\b/gi;\n}\n","import { DEFAULT_SEPARATORS, DEFAULT_UNITS, TimeTypes } from './constants';\n\n/**\n * The duration of each time type in milliseconds\n */\nconst kTimeDurations: readonly [TimeTypes, number][] = [\n\t[TimeTypes.Year, 31536000000],\n\t// 29.53059 days is the official duration of a month: https://en.wikipedia.org/wiki/Month\n\t[TimeTypes.Month, 2628000000],\n\t[TimeTypes.Week, 1000 * 60 * 60 * 24 * 7],\n\t[TimeTypes.Day, 1000 * 60 * 60 * 24],\n\t[TimeTypes.Hour, 1000 * 60 * 60],\n\t[TimeTypes.Minute, 1000 * 60],\n\t[TimeTypes.Second, 1000]\n];\n\n/**\n * Display the duration\n * @param duration The duration in milliseconds to parse and display\n * @param assets The language assets\n */\nexport class DurationFormatter {\n\tpublic constructor(public units: DurationFormatAssetsTime = DEFAULT_UNITS) {}\n\n\tpublic format(\n\t\tduration: number,\n\t\tprecision = 7,\n\t\t{\n\t\t\tleft: leftSeparator = DEFAULT_SEPARATORS.left,\n\t\t\tright: rightSeparator = DEFAULT_SEPARATORS.right\n\t\t}: DurationFormatSeparators = DEFAULT_SEPARATORS\n\t) {\n\t\tconst output: string[] = [];\n\t\tconst negative = duration < 0;\n\t\tif (negative) duration *= -1;\n\n\t\tfor (const [type, timeDuration] of kTimeDurations) {\n\t\t\tconst division = duration / timeDuration;\n\t\t\tif (division < 1) continue;\n\n\t\t\tconst floored = Math.floor(division);\n\t\t\tduration -= floored * timeDuration;\n\t\t\toutput.push(addUnit(floored, this.units[type], leftSeparator!));\n\n\t\t\t// If the output has enough precision, break\n\t\t\tif (output.length >= precision) break;\n\t\t}\n\n\t\treturn `${negative ? '-' : ''}${output.join(rightSeparator) || addUnit(0, this.units.second, leftSeparator!)}`;\n\t}\n}\n\n/**\n * Adds an unit, if non zero\n * @param time The duration of said unit\n * @param unit The unit language assets\n */\nfunction addUnit(time: number, unit: DurationFormatAssetsUnit, separator: string) {\n\tif (Reflect.has(unit, time)) return `${time}${separator}${Reflect.get(unit, time)}`;\n\treturn `${time}${separator}${unit.DEFAULT}`;\n}\n\nexport interface DurationFormatSeparators {\n\tleft?: string;\n\tright?: string;\n}\n\nexport interface DurationFormatAssetsUnit extends Record<number, string> {\n\tDEFAULT: string;\n}\n\nexport interface DurationFormatAssetsTime {\n\t[TimeTypes.Second]: DurationFormatAssetsUnit;\n\t[TimeTypes.Minute]: DurationFormatAssetsUnit;\n\t[TimeTypes.Hour]: DurationFormatAssetsUnit;\n\t[TimeTypes.Day]: DurationFormatAssetsUnit;\n\t[TimeTypes.Week]: DurationFormatAssetsUnit;\n\t[TimeTypes.Month]: DurationFormatAssetsUnit;\n\t[TimeTypes.Year]: DurationFormatAssetsUnit;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/lib/constants.ts","../../src/lib/Duration.ts","../../src/lib/DurationFormatter.ts"],"names":["Time","TimeTypes"],"mappings":"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","file":"index.mjs","sourcesContent":["import type { DurationFormatAssetsTime, DurationFormatSeparators } from './DurationFormatter';\n\nexport enum Time {\n\tNanosecond = 1 / 1_000_000,\n\tMicrosecond = 1 / 1000,\n\tMillisecond = 1,\n\tSecond = 1000,\n\tMinute = Second * 60,\n\tHour = Minute * 60,\n\tDay = Hour * 24,\n\tWeek = Day * 7,\n\tMonth = Day * (365 / 12),\n\tYear = Day * 365\n}\n\n/**\n * The supported time types\n */\nexport enum TimeTypes {\n\tSecond = 'second',\n\tMinute = 'minute',\n\tHour = 'hour',\n\tDay = 'day',\n\tWeek = 'week',\n\tMonth = 'month',\n\tYear = 'year'\n}\n\nexport const DEFAULT_UNITS: DurationFormatAssetsTime = {\n\t[TimeTypes.Year]: {\n\t\t1: 'year',\n\t\tDEFAULT: 'years'\n\t},\n\t[TimeTypes.Month]: {\n\t\t1: 'month',\n\t\tDEFAULT: 'months'\n\t},\n\t[TimeTypes.Week]: {\n\t\t1: 'week',\n\t\tDEFAULT: 'weeks'\n\t},\n\t[TimeTypes.Day]: {\n\t\t1: 'day',\n\t\tDEFAULT: 'days'\n\t},\n\t[TimeTypes.Hour]: {\n\t\t1: 'hour',\n\t\tDEFAULT: 'hours'\n\t},\n\t[TimeTypes.Minute]: {\n\t\t1: 'minute',\n\t\tDEFAULT: 'minutes'\n\t},\n\t[TimeTypes.Second]: {\n\t\t1: 'second',\n\t\tDEFAULT: 'seconds'\n\t}\n};\n\nexport const DEFAULT_SEPARATORS: DurationFormatSeparators = {\n\tleft: ' ',\n\tright: ' ',\n\tfinal: ' '\n};\n","import { Time } from './constants';\n\nconst tokens = new Map([\n\t['nanosecond', Time.Nanosecond],\n\t['nanoseconds', Time.Nanosecond],\n\t['ns', Time.Nanosecond],\n\n\t['microsecond', Time.Microsecond],\n\t['microseconds', Time.Microsecond],\n\t['μs', Time.Microsecond],\n\t['us', Time.Microsecond],\n\n\t['millisecond', Time.Millisecond],\n\t['milliseconds', Time.Millisecond],\n\t['ms', Time.Millisecond],\n\n\t['second', Time.Second],\n\t['seconds', Time.Second],\n\t['sec', Time.Second],\n\t['secs', Time.Second],\n\t['s', Time.Second],\n\n\t['minute', Time.Minute],\n\t['minutes', Time.Minute],\n\t['min', Time.Minute],\n\t['mins', Time.Minute],\n\t['m', Time.Minute],\n\n\t['hour', Time.Hour],\n\t['hours', Time.Hour],\n\t['hr', Time.Hour],\n\t['hrs', Time.Hour],\n\t['h', Time.Hour],\n\n\t['day', Time.Day],\n\t['days', Time.Day],\n\t['d', Time.Day],\n\n\t['week', Time.Week],\n\t['weeks', Time.Week],\n\t['wk', Time.Week],\n\t['wks', Time.Week],\n\t['w', Time.Week],\n\n\t['month', Time.Month],\n\t['months', Time.Month],\n\t['b', Time.Month],\n\t['mo', Time.Month],\n\n\t['year', Time.Year],\n\t['years', Time.Year],\n\t['yr', Time.Year],\n\t['yrs', Time.Year],\n\t['y', Time.Year]\n]);\n\nconst mappings = new Map([\n\t[Time.Nanosecond, 'nanoseconds'],\n\t[Time.Microsecond, 'microseconds'],\n\t[Time.Millisecond, 'milliseconds'],\n\t[Time.Second, 'seconds'],\n\t[Time.Minute, 'minutes'],\n\t[Time.Hour, 'hours'],\n\t[Time.Day, 'days'],\n\t[Time.Week, 'weeks'],\n\t[Time.Month, 'months'],\n\t[Time.Year, 'years']\n] as const);\n\n/**\n * Converts duration strings into ms and future dates\n */\nexport class Duration {\n\t/**\n\t * The offset\n\t */\n\tpublic offset: number;\n\n\t/**\n\t * The amount of nanoseconds extracted from the text.\n\t */\n\tpublic nanoseconds = 0;\n\n\t/**\n\t * The amount of microseconds extracted from the text.\n\t */\n\tpublic microseconds = 0;\n\n\t/**\n\t * The amount of milliseconds extracted from the text.\n\t */\n\tpublic milliseconds = 0;\n\n\t/**\n\t * The amount of seconds extracted from the text.\n\t */\n\tpublic seconds = 0;\n\n\t/**\n\t * The amount of minutes extracted from the text.\n\t */\n\tpublic minutes = 0;\n\n\t/**\n\t * The amount of hours extracted from the text.\n\t */\n\tpublic hours = 0;\n\n\t/**\n\t * The amount of days extracted from the text.\n\t */\n\tpublic days = 0;\n\n\t/**\n\t * The amount of weeks extracted from the text.\n\t */\n\tpublic weeks = 0;\n\n\t/**\n\t * The amount of months extracted from the text.\n\t */\n\tpublic months = 0;\n\n\t/**\n\t * The amount of years extracted from the text.\n\t */\n\tpublic years = 0;\n\n\t/**\n\t * Create a new Duration instance\n\t * @param pattern The string to parse\n\t */\n\tpublic constructor(pattern: string) {\n\t\tlet result = 0;\n\t\tlet valid = false;\n\n\t\tpattern\n\t\t\t.toLowerCase()\n\t\t\t// ignore commas\n\t\t\t.replace(Duration.commaRegex, '')\n\t\t\t// a / an = 1\n\t\t\t.replace(Duration.aAndAnRegex, '1')\n\t\t\t// do math\n\t\t\t.replace(Duration.patternRegex, (_, i, units) => {\n\t\t\t\tconst token = tokens.get(units);\n\t\t\t\tif (token !== undefined) {\n\t\t\t\t\tconst n = Number(i);\n\t\t\t\t\tresult += n * token;\n\t\t\t\t\tthis[mappings.get(token)!] += n;\n\t\t\t\t\tvalid = true;\n\t\t\t\t}\n\t\t\t\treturn '';\n\t\t\t});\n\n\t\tthis.offset = valid ? result : NaN;\n\t}\n\n\t/**\n\t * Get the date from now\n\t */\n\tpublic get fromNow(): Date {\n\t\treturn this.dateFrom(new Date());\n\t}\n\n\t/**\n\t * Get the date from\n\t * @param date The Date instance to get the date from\n\t */\n\tpublic dateFrom(date: Date): Date {\n\t\treturn new Date(date.getTime() + this.offset);\n\t}\n\n\t/**\n\t * The RegExp used for the pattern parsing\n\t */\n\tprivate static readonly patternRegex = /(-?\\d*\\.?\\d+(?:e[-+]?\\d+)?)\\s*([a-zμ]*)/gi;\n\n\t/**\n\t * The RegExp used for removing commas\n\t */\n\tprivate static readonly commaRegex = /,/g;\n\n\t/**\n\t * The RegExp used for replacing a/an with 1\n\t */\n\tprivate static readonly aAndAnRegex = /\\ban?\\b/gi;\n}\n","import { DEFAULT_SEPARATORS, DEFAULT_UNITS, TimeTypes } from './constants';\n\n/**\n * The duration of each time type in milliseconds\n */\nconst kTimeDurations: readonly [TimeTypes, number][] = [\n\t[TimeTypes.Year, 31536000000],\n\t// 29.53059 days is the official duration of a month: https://en.wikipedia.org/wiki/Month\n\t[TimeTypes.Month, 2628000000],\n\t[TimeTypes.Week, 1000 * 60 * 60 * 24 * 7],\n\t[TimeTypes.Day, 1000 * 60 * 60 * 24],\n\t[TimeTypes.Hour, 1000 * 60 * 60],\n\t[TimeTypes.Minute, 1000 * 60],\n\t[TimeTypes.Second, 1000]\n];\n\n/**\n * Display the duration\n * @param duration The duration in milliseconds to parse and display\n * @param assets The language assets\n */\nexport class DurationFormatter {\n\tpublic constructor(public units: DurationFormatAssetsTime = DEFAULT_UNITS) {}\n\n\tpublic format(\n\t\tduration: number,\n\t\tprecision = 7,\n\t\t{\n\t\t\tleft: leftSeparator = DEFAULT_SEPARATORS.left,\n\t\t\tright: rightSeparator = DEFAULT_SEPARATORS.right,\n\t\t\tfinal: finalSeparator = DEFAULT_SEPARATORS.final\n\t\t}: DurationFormatSeparators = DEFAULT_SEPARATORS\n\t) {\n\t\tconst output: string[] = [];\n\t\tconst negative = duration < 0;\n\t\tif (negative) duration *= -1;\n\n\t\tfor (const [type, timeDuration] of kTimeDurations) {\n\t\t\tconst division = duration / timeDuration;\n\t\t\tif (division < 1) continue;\n\n\t\t\tconst floored = Math.floor(division);\n\t\t\tduration -= floored * timeDuration;\n\t\t\toutput.push(addUnit(floored, this.units[type], leftSeparator!));\n\n\t\t\t// If the output has enough precision, break\n\t\t\tif (output.length >= precision) break;\n\t\t}\n\n\t\tif (output.length === 0) return addUnit(0, this.units[TimeTypes.Second], leftSeparator!);\n\t\tif (negative) output[0] = `-${output[0]}`;\n\n\t\tif (output.length > 1) {\n\t\t\tconst last = output.pop();\n\t\t\treturn `${output.join(rightSeparator!)}${finalSeparator}${last}`;\n\t\t}\n\n\t\treturn output.join(rightSeparator!);\n\t}\n}\n\n/**\n * Adds an unit, if non zero\n * @param time The duration of said unit\n * @param unit The unit language assets\n */\nfunction addUnit(time: number, unit: DurationFormatAssetsUnit, separator: string) {\n\tif (Reflect.has(unit, time)) return `${time}${separator}${Reflect.get(unit, time)}`;\n\treturn `${time}${separator}${unit.DEFAULT}`;\n}\n\nexport interface DurationFormatSeparators {\n\tleft?: string;\n\tright?: string;\n\tfinal?: string;\n}\n\nexport interface DurationFormatAssetsUnit extends Record<number, string> {\n\tDEFAULT: string;\n}\n\nexport interface DurationFormatAssetsTime {\n\t[TimeTypes.Second]: DurationFormatAssetsUnit;\n\t[TimeTypes.Minute]: DurationFormatAssetsUnit;\n\t[TimeTypes.Hour]: DurationFormatAssetsUnit;\n\t[TimeTypes.Day]: DurationFormatAssetsUnit;\n\t[TimeTypes.Week]: DurationFormatAssetsUnit;\n\t[TimeTypes.Month]: DurationFormatAssetsUnit;\n\t[TimeTypes.Year]: DurationFormatAssetsUnit;\n}\n"]}
|
|
@@ -62,7 +62,8 @@ var SapphireDuration = (function (exports) {
|
|
|
62
62
|
};
|
|
63
63
|
var DEFAULT_SEPARATORS = {
|
|
64
64
|
left: " ",
|
|
65
|
-
right: " "
|
|
65
|
+
right: " ",
|
|
66
|
+
final: " "
|
|
66
67
|
};
|
|
67
68
|
|
|
68
69
|
// src/lib/Duration.ts
|
|
@@ -232,7 +233,8 @@ var SapphireDuration = (function (exports) {
|
|
|
232
233
|
}
|
|
233
234
|
format(duration, precision = 7, {
|
|
234
235
|
left: leftSeparator = DEFAULT_SEPARATORS.left,
|
|
235
|
-
right: rightSeparator = DEFAULT_SEPARATORS.right
|
|
236
|
+
right: rightSeparator = DEFAULT_SEPARATORS.right,
|
|
237
|
+
final: finalSeparator = DEFAULT_SEPARATORS.final
|
|
236
238
|
} = DEFAULT_SEPARATORS) {
|
|
237
239
|
const output = [];
|
|
238
240
|
const negative = duration < 0;
|
|
@@ -245,7 +247,13 @@ var SapphireDuration = (function (exports) {
|
|
|
245
247
|
output.push(addUnit(floored, this.units[type], leftSeparator));
|
|
246
248
|
if (output.length >= precision) break;
|
|
247
249
|
}
|
|
248
|
-
|
|
250
|
+
if (output.length === 0) return addUnit(0, this.units["second" /* Second */], leftSeparator);
|
|
251
|
+
if (negative) output[0] = `-${output[0]}`;
|
|
252
|
+
if (output.length > 1) {
|
|
253
|
+
const last = output.pop();
|
|
254
|
+
return `${output.join(rightSeparator)}${finalSeparator}${last}`;
|
|
255
|
+
}
|
|
256
|
+
return output.join(rightSeparator);
|
|
249
257
|
}
|
|
250
258
|
};
|
|
251
259
|
__name(_DurationFormatter, "DurationFormatter");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/lib/constants.ts","../../src/lib/Duration.ts","../../src/lib/DurationFormatter.ts"],"names":["Time","TimeTypes"],"mappings":"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","file":"index.global.js","sourcesContent":["import type { DurationFormatAssetsTime, DurationFormatSeparators } from './DurationFormatter';\n\nexport enum Time {\n\tNanosecond = 1 / 1_000_000,\n\tMicrosecond = 1 / 1000,\n\tMillisecond = 1,\n\tSecond = 1000,\n\tMinute = Second * 60,\n\tHour = Minute * 60,\n\tDay = Hour * 24,\n\tWeek = Day * 7,\n\tMonth = Day * (365 / 12),\n\tYear = Day * 365\n}\n\n/**\n * The supported time types\n */\nexport enum TimeTypes {\n\tSecond = 'second',\n\tMinute = 'minute',\n\tHour = 'hour',\n\tDay = 'day',\n\tWeek = 'week',\n\tMonth = 'month',\n\tYear = 'year'\n}\n\nexport const DEFAULT_UNITS: DurationFormatAssetsTime = {\n\t[TimeTypes.Year]: {\n\t\t1: 'year',\n\t\tDEFAULT: 'years'\n\t},\n\t[TimeTypes.Month]: {\n\t\t1: 'month',\n\t\tDEFAULT: 'months'\n\t},\n\t[TimeTypes.Week]: {\n\t\t1: 'week',\n\t\tDEFAULT: 'weeks'\n\t},\n\t[TimeTypes.Day]: {\n\t\t1: 'day',\n\t\tDEFAULT: 'days'\n\t},\n\t[TimeTypes.Hour]: {\n\t\t1: 'hour',\n\t\tDEFAULT: 'hours'\n\t},\n\t[TimeTypes.Minute]: {\n\t\t1: 'minute',\n\t\tDEFAULT: 'minutes'\n\t},\n\t[TimeTypes.Second]: {\n\t\t1: 'second',\n\t\tDEFAULT: 'seconds'\n\t}\n};\n\nexport const DEFAULT_SEPARATORS: DurationFormatSeparators = {\n\tleft: ' ',\n\tright: ' '\n};\n","import { Time } from './constants';\n\nconst tokens = new Map([\n\t['nanosecond', Time.Nanosecond],\n\t['nanoseconds', Time.Nanosecond],\n\t['ns', Time.Nanosecond],\n\n\t['microsecond', Time.Microsecond],\n\t['microseconds', Time.Microsecond],\n\t['μs', Time.Microsecond],\n\t['us', Time.Microsecond],\n\n\t['millisecond', Time.Millisecond],\n\t['milliseconds', Time.Millisecond],\n\t['ms', Time.Millisecond],\n\n\t['second', Time.Second],\n\t['seconds', Time.Second],\n\t['sec', Time.Second],\n\t['secs', Time.Second],\n\t['s', Time.Second],\n\n\t['minute', Time.Minute],\n\t['minutes', Time.Minute],\n\t['min', Time.Minute],\n\t['mins', Time.Minute],\n\t['m', Time.Minute],\n\n\t['hour', Time.Hour],\n\t['hours', Time.Hour],\n\t['hr', Time.Hour],\n\t['hrs', Time.Hour],\n\t['h', Time.Hour],\n\n\t['day', Time.Day],\n\t['days', Time.Day],\n\t['d', Time.Day],\n\n\t['week', Time.Week],\n\t['weeks', Time.Week],\n\t['wk', Time.Week],\n\t['wks', Time.Week],\n\t['w', Time.Week],\n\n\t['month', Time.Month],\n\t['months', Time.Month],\n\t['b', Time.Month],\n\t['mo', Time.Month],\n\n\t['year', Time.Year],\n\t['years', Time.Year],\n\t['yr', Time.Year],\n\t['yrs', Time.Year],\n\t['y', Time.Year]\n]);\n\nconst mappings = new Map([\n\t[Time.Nanosecond, 'nanoseconds'],\n\t[Time.Microsecond, 'microseconds'],\n\t[Time.Millisecond, 'milliseconds'],\n\t[Time.Second, 'seconds'],\n\t[Time.Minute, 'minutes'],\n\t[Time.Hour, 'hours'],\n\t[Time.Day, 'days'],\n\t[Time.Week, 'weeks'],\n\t[Time.Month, 'months'],\n\t[Time.Year, 'years']\n] as const);\n\n/**\n * Converts duration strings into ms and future dates\n */\nexport class Duration {\n\t/**\n\t * The offset\n\t */\n\tpublic offset: number;\n\n\t/**\n\t * The amount of nanoseconds extracted from the text.\n\t */\n\tpublic nanoseconds = 0;\n\n\t/**\n\t * The amount of microseconds extracted from the text.\n\t */\n\tpublic microseconds = 0;\n\n\t/**\n\t * The amount of milliseconds extracted from the text.\n\t */\n\tpublic milliseconds = 0;\n\n\t/**\n\t * The amount of seconds extracted from the text.\n\t */\n\tpublic seconds = 0;\n\n\t/**\n\t * The amount of minutes extracted from the text.\n\t */\n\tpublic minutes = 0;\n\n\t/**\n\t * The amount of hours extracted from the text.\n\t */\n\tpublic hours = 0;\n\n\t/**\n\t * The amount of days extracted from the text.\n\t */\n\tpublic days = 0;\n\n\t/**\n\t * The amount of weeks extracted from the text.\n\t */\n\tpublic weeks = 0;\n\n\t/**\n\t * The amount of months extracted from the text.\n\t */\n\tpublic months = 0;\n\n\t/**\n\t * The amount of years extracted from the text.\n\t */\n\tpublic years = 0;\n\n\t/**\n\t * Create a new Duration instance\n\t * @param pattern The string to parse\n\t */\n\tpublic constructor(pattern: string) {\n\t\tlet result = 0;\n\t\tlet valid = false;\n\n\t\tpattern\n\t\t\t.toLowerCase()\n\t\t\t// ignore commas\n\t\t\t.replace(Duration.commaRegex, '')\n\t\t\t// a / an = 1\n\t\t\t.replace(Duration.aAndAnRegex, '1')\n\t\t\t// do math\n\t\t\t.replace(Duration.patternRegex, (_, i, units) => {\n\t\t\t\tconst token = tokens.get(units);\n\t\t\t\tif (token !== undefined) {\n\t\t\t\t\tconst n = Number(i);\n\t\t\t\t\tresult += n * token;\n\t\t\t\t\tthis[mappings.get(token)!] += n;\n\t\t\t\t\tvalid = true;\n\t\t\t\t}\n\t\t\t\treturn '';\n\t\t\t});\n\n\t\tthis.offset = valid ? result : NaN;\n\t}\n\n\t/**\n\t * Get the date from now\n\t */\n\tpublic get fromNow(): Date {\n\t\treturn this.dateFrom(new Date());\n\t}\n\n\t/**\n\t * Get the date from\n\t * @param date The Date instance to get the date from\n\t */\n\tpublic dateFrom(date: Date): Date {\n\t\treturn new Date(date.getTime() + this.offset);\n\t}\n\n\t/**\n\t * The RegExp used for the pattern parsing\n\t */\n\tprivate static readonly patternRegex = /(-?\\d*\\.?\\d+(?:e[-+]?\\d+)?)\\s*([a-zμ]*)/gi;\n\n\t/**\n\t * The RegExp used for removing commas\n\t */\n\tprivate static readonly commaRegex = /,/g;\n\n\t/**\n\t * The RegExp used for replacing a/an with 1\n\t */\n\tprivate static readonly aAndAnRegex = /\\ban?\\b/gi;\n}\n","import { DEFAULT_SEPARATORS, DEFAULT_UNITS, TimeTypes } from './constants';\n\n/**\n * The duration of each time type in milliseconds\n */\nconst kTimeDurations: readonly [TimeTypes, number][] = [\n\t[TimeTypes.Year, 31536000000],\n\t// 29.53059 days is the official duration of a month: https://en.wikipedia.org/wiki/Month\n\t[TimeTypes.Month, 2628000000],\n\t[TimeTypes.Week, 1000 * 60 * 60 * 24 * 7],\n\t[TimeTypes.Day, 1000 * 60 * 60 * 24],\n\t[TimeTypes.Hour, 1000 * 60 * 60],\n\t[TimeTypes.Minute, 1000 * 60],\n\t[TimeTypes.Second, 1000]\n];\n\n/**\n * Display the duration\n * @param duration The duration in milliseconds to parse and display\n * @param assets The language assets\n */\nexport class DurationFormatter {\n\tpublic constructor(public units: DurationFormatAssetsTime = DEFAULT_UNITS) {}\n\n\tpublic format(\n\t\tduration: number,\n\t\tprecision = 7,\n\t\t{\n\t\t\tleft: leftSeparator = DEFAULT_SEPARATORS.left,\n\t\t\tright: rightSeparator = DEFAULT_SEPARATORS.right\n\t\t}: DurationFormatSeparators = DEFAULT_SEPARATORS\n\t) {\n\t\tconst output: string[] = [];\n\t\tconst negative = duration < 0;\n\t\tif (negative) duration *= -1;\n\n\t\tfor (const [type, timeDuration] of kTimeDurations) {\n\t\t\tconst division = duration / timeDuration;\n\t\t\tif (division < 1) continue;\n\n\t\t\tconst floored = Math.floor(division);\n\t\t\tduration -= floored * timeDuration;\n\t\t\toutput.push(addUnit(floored, this.units[type], leftSeparator!));\n\n\t\t\t// If the output has enough precision, break\n\t\t\tif (output.length >= precision) break;\n\t\t}\n\n\t\treturn `${negative ? '-' : ''}${output.join(rightSeparator) || addUnit(0, this.units.second, leftSeparator!)}`;\n\t}\n}\n\n/**\n * Adds an unit, if non zero\n * @param time The duration of said unit\n * @param unit The unit language assets\n */\nfunction addUnit(time: number, unit: DurationFormatAssetsUnit, separator: string) {\n\tif (Reflect.has(unit, time)) return `${time}${separator}${Reflect.get(unit, time)}`;\n\treturn `${time}${separator}${unit.DEFAULT}`;\n}\n\nexport interface DurationFormatSeparators {\n\tleft?: string;\n\tright?: string;\n}\n\nexport interface DurationFormatAssetsUnit extends Record<number, string> {\n\tDEFAULT: string;\n}\n\nexport interface DurationFormatAssetsTime {\n\t[TimeTypes.Second]: DurationFormatAssetsUnit;\n\t[TimeTypes.Minute]: DurationFormatAssetsUnit;\n\t[TimeTypes.Hour]: DurationFormatAssetsUnit;\n\t[TimeTypes.Day]: DurationFormatAssetsUnit;\n\t[TimeTypes.Week]: DurationFormatAssetsUnit;\n\t[TimeTypes.Month]: DurationFormatAssetsUnit;\n\t[TimeTypes.Year]: DurationFormatAssetsUnit;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/lib/constants.ts","../../src/lib/Duration.ts","../../src/lib/DurationFormatter.ts"],"names":["Time","TimeTypes"],"mappings":"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","file":"index.global.js","sourcesContent":["import type { DurationFormatAssetsTime, DurationFormatSeparators } from './DurationFormatter';\n\nexport enum Time {\n\tNanosecond = 1 / 1_000_000,\n\tMicrosecond = 1 / 1000,\n\tMillisecond = 1,\n\tSecond = 1000,\n\tMinute = Second * 60,\n\tHour = Minute * 60,\n\tDay = Hour * 24,\n\tWeek = Day * 7,\n\tMonth = Day * (365 / 12),\n\tYear = Day * 365\n}\n\n/**\n * The supported time types\n */\nexport enum TimeTypes {\n\tSecond = 'second',\n\tMinute = 'minute',\n\tHour = 'hour',\n\tDay = 'day',\n\tWeek = 'week',\n\tMonth = 'month',\n\tYear = 'year'\n}\n\nexport const DEFAULT_UNITS: DurationFormatAssetsTime = {\n\t[TimeTypes.Year]: {\n\t\t1: 'year',\n\t\tDEFAULT: 'years'\n\t},\n\t[TimeTypes.Month]: {\n\t\t1: 'month',\n\t\tDEFAULT: 'months'\n\t},\n\t[TimeTypes.Week]: {\n\t\t1: 'week',\n\t\tDEFAULT: 'weeks'\n\t},\n\t[TimeTypes.Day]: {\n\t\t1: 'day',\n\t\tDEFAULT: 'days'\n\t},\n\t[TimeTypes.Hour]: {\n\t\t1: 'hour',\n\t\tDEFAULT: 'hours'\n\t},\n\t[TimeTypes.Minute]: {\n\t\t1: 'minute',\n\t\tDEFAULT: 'minutes'\n\t},\n\t[TimeTypes.Second]: {\n\t\t1: 'second',\n\t\tDEFAULT: 'seconds'\n\t}\n};\n\nexport const DEFAULT_SEPARATORS: DurationFormatSeparators = {\n\tleft: ' ',\n\tright: ' ',\n\tfinal: ' '\n};\n","import { Time } from './constants';\n\nconst tokens = new Map([\n\t['nanosecond', Time.Nanosecond],\n\t['nanoseconds', Time.Nanosecond],\n\t['ns', Time.Nanosecond],\n\n\t['microsecond', Time.Microsecond],\n\t['microseconds', Time.Microsecond],\n\t['μs', Time.Microsecond],\n\t['us', Time.Microsecond],\n\n\t['millisecond', Time.Millisecond],\n\t['milliseconds', Time.Millisecond],\n\t['ms', Time.Millisecond],\n\n\t['second', Time.Second],\n\t['seconds', Time.Second],\n\t['sec', Time.Second],\n\t['secs', Time.Second],\n\t['s', Time.Second],\n\n\t['minute', Time.Minute],\n\t['minutes', Time.Minute],\n\t['min', Time.Minute],\n\t['mins', Time.Minute],\n\t['m', Time.Minute],\n\n\t['hour', Time.Hour],\n\t['hours', Time.Hour],\n\t['hr', Time.Hour],\n\t['hrs', Time.Hour],\n\t['h', Time.Hour],\n\n\t['day', Time.Day],\n\t['days', Time.Day],\n\t['d', Time.Day],\n\n\t['week', Time.Week],\n\t['weeks', Time.Week],\n\t['wk', Time.Week],\n\t['wks', Time.Week],\n\t['w', Time.Week],\n\n\t['month', Time.Month],\n\t['months', Time.Month],\n\t['b', Time.Month],\n\t['mo', Time.Month],\n\n\t['year', Time.Year],\n\t['years', Time.Year],\n\t['yr', Time.Year],\n\t['yrs', Time.Year],\n\t['y', Time.Year]\n]);\n\nconst mappings = new Map([\n\t[Time.Nanosecond, 'nanoseconds'],\n\t[Time.Microsecond, 'microseconds'],\n\t[Time.Millisecond, 'milliseconds'],\n\t[Time.Second, 'seconds'],\n\t[Time.Minute, 'minutes'],\n\t[Time.Hour, 'hours'],\n\t[Time.Day, 'days'],\n\t[Time.Week, 'weeks'],\n\t[Time.Month, 'months'],\n\t[Time.Year, 'years']\n] as const);\n\n/**\n * Converts duration strings into ms and future dates\n */\nexport class Duration {\n\t/**\n\t * The offset\n\t */\n\tpublic offset: number;\n\n\t/**\n\t * The amount of nanoseconds extracted from the text.\n\t */\n\tpublic nanoseconds = 0;\n\n\t/**\n\t * The amount of microseconds extracted from the text.\n\t */\n\tpublic microseconds = 0;\n\n\t/**\n\t * The amount of milliseconds extracted from the text.\n\t */\n\tpublic milliseconds = 0;\n\n\t/**\n\t * The amount of seconds extracted from the text.\n\t */\n\tpublic seconds = 0;\n\n\t/**\n\t * The amount of minutes extracted from the text.\n\t */\n\tpublic minutes = 0;\n\n\t/**\n\t * The amount of hours extracted from the text.\n\t */\n\tpublic hours = 0;\n\n\t/**\n\t * The amount of days extracted from the text.\n\t */\n\tpublic days = 0;\n\n\t/**\n\t * The amount of weeks extracted from the text.\n\t */\n\tpublic weeks = 0;\n\n\t/**\n\t * The amount of months extracted from the text.\n\t */\n\tpublic months = 0;\n\n\t/**\n\t * The amount of years extracted from the text.\n\t */\n\tpublic years = 0;\n\n\t/**\n\t * Create a new Duration instance\n\t * @param pattern The string to parse\n\t */\n\tpublic constructor(pattern: string) {\n\t\tlet result = 0;\n\t\tlet valid = false;\n\n\t\tpattern\n\t\t\t.toLowerCase()\n\t\t\t// ignore commas\n\t\t\t.replace(Duration.commaRegex, '')\n\t\t\t// a / an = 1\n\t\t\t.replace(Duration.aAndAnRegex, '1')\n\t\t\t// do math\n\t\t\t.replace(Duration.patternRegex, (_, i, units) => {\n\t\t\t\tconst token = tokens.get(units);\n\t\t\t\tif (token !== undefined) {\n\t\t\t\t\tconst n = Number(i);\n\t\t\t\t\tresult += n * token;\n\t\t\t\t\tthis[mappings.get(token)!] += n;\n\t\t\t\t\tvalid = true;\n\t\t\t\t}\n\t\t\t\treturn '';\n\t\t\t});\n\n\t\tthis.offset = valid ? result : NaN;\n\t}\n\n\t/**\n\t * Get the date from now\n\t */\n\tpublic get fromNow(): Date {\n\t\treturn this.dateFrom(new Date());\n\t}\n\n\t/**\n\t * Get the date from\n\t * @param date The Date instance to get the date from\n\t */\n\tpublic dateFrom(date: Date): Date {\n\t\treturn new Date(date.getTime() + this.offset);\n\t}\n\n\t/**\n\t * The RegExp used for the pattern parsing\n\t */\n\tprivate static readonly patternRegex = /(-?\\d*\\.?\\d+(?:e[-+]?\\d+)?)\\s*([a-zμ]*)/gi;\n\n\t/**\n\t * The RegExp used for removing commas\n\t */\n\tprivate static readonly commaRegex = /,/g;\n\n\t/**\n\t * The RegExp used for replacing a/an with 1\n\t */\n\tprivate static readonly aAndAnRegex = /\\ban?\\b/gi;\n}\n","import { DEFAULT_SEPARATORS, DEFAULT_UNITS, TimeTypes } from './constants';\n\n/**\n * The duration of each time type in milliseconds\n */\nconst kTimeDurations: readonly [TimeTypes, number][] = [\n\t[TimeTypes.Year, 31536000000],\n\t// 29.53059 days is the official duration of a month: https://en.wikipedia.org/wiki/Month\n\t[TimeTypes.Month, 2628000000],\n\t[TimeTypes.Week, 1000 * 60 * 60 * 24 * 7],\n\t[TimeTypes.Day, 1000 * 60 * 60 * 24],\n\t[TimeTypes.Hour, 1000 * 60 * 60],\n\t[TimeTypes.Minute, 1000 * 60],\n\t[TimeTypes.Second, 1000]\n];\n\n/**\n * Display the duration\n * @param duration The duration in milliseconds to parse and display\n * @param assets The language assets\n */\nexport class DurationFormatter {\n\tpublic constructor(public units: DurationFormatAssetsTime = DEFAULT_UNITS) {}\n\n\tpublic format(\n\t\tduration: number,\n\t\tprecision = 7,\n\t\t{\n\t\t\tleft: leftSeparator = DEFAULT_SEPARATORS.left,\n\t\t\tright: rightSeparator = DEFAULT_SEPARATORS.right,\n\t\t\tfinal: finalSeparator = DEFAULT_SEPARATORS.final\n\t\t}: DurationFormatSeparators = DEFAULT_SEPARATORS\n\t) {\n\t\tconst output: string[] = [];\n\t\tconst negative = duration < 0;\n\t\tif (negative) duration *= -1;\n\n\t\tfor (const [type, timeDuration] of kTimeDurations) {\n\t\t\tconst division = duration / timeDuration;\n\t\t\tif (division < 1) continue;\n\n\t\t\tconst floored = Math.floor(division);\n\t\t\tduration -= floored * timeDuration;\n\t\t\toutput.push(addUnit(floored, this.units[type], leftSeparator!));\n\n\t\t\t// If the output has enough precision, break\n\t\t\tif (output.length >= precision) break;\n\t\t}\n\n\t\tif (output.length === 0) return addUnit(0, this.units[TimeTypes.Second], leftSeparator!);\n\t\tif (negative) output[0] = `-${output[0]}`;\n\n\t\tif (output.length > 1) {\n\t\t\tconst last = output.pop();\n\t\t\treturn `${output.join(rightSeparator!)}${finalSeparator}${last}`;\n\t\t}\n\n\t\treturn output.join(rightSeparator!);\n\t}\n}\n\n/**\n * Adds an unit, if non zero\n * @param time The duration of said unit\n * @param unit The unit language assets\n */\nfunction addUnit(time: number, unit: DurationFormatAssetsUnit, separator: string) {\n\tif (Reflect.has(unit, time)) return `${time}${separator}${Reflect.get(unit, time)}`;\n\treturn `${time}${separator}${unit.DEFAULT}`;\n}\n\nexport interface DurationFormatSeparators {\n\tleft?: string;\n\tright?: string;\n\tfinal?: string;\n}\n\nexport interface DurationFormatAssetsUnit extends Record<number, string> {\n\tDEFAULT: string;\n}\n\nexport interface DurationFormatAssetsTime {\n\t[TimeTypes.Second]: DurationFormatAssetsUnit;\n\t[TimeTypes.Minute]: DurationFormatAssetsUnit;\n\t[TimeTypes.Hour]: DurationFormatAssetsUnit;\n\t[TimeTypes.Day]: DurationFormatAssetsUnit;\n\t[TimeTypes.Week]: DurationFormatAssetsUnit;\n\t[TimeTypes.Month]: DurationFormatAssetsUnit;\n\t[TimeTypes.Year]: DurationFormatAssetsUnit;\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sapphire/duration",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0-next.75165d36",
|
|
4
4
|
"description": "A time duration utility library for JavaScript.",
|
|
5
5
|
"author": "@sapphire",
|
|
6
6
|
"license": "MIT",
|
|
@@ -63,13 +63,13 @@
|
|
|
63
63
|
"access": "public"
|
|
64
64
|
},
|
|
65
65
|
"devDependencies": {
|
|
66
|
-
"@favware/cliff-jumper": "^
|
|
67
|
-
"@vitest/coverage-v8": "^
|
|
68
|
-
"tsup": "^8.
|
|
69
|
-
"tsx": "^4.19.
|
|
66
|
+
"@favware/cliff-jumper": "^6.0.0",
|
|
67
|
+
"@vitest/coverage-v8": "^3.0.9",
|
|
68
|
+
"tsup": "^8.4.0",
|
|
69
|
+
"tsx": "^4.19.3",
|
|
70
70
|
"typedoc": "^0.26.11",
|
|
71
71
|
"typedoc-json-parser": "^10.2.0",
|
|
72
72
|
"typescript": "~5.4.5",
|
|
73
|
-
"vitest": "^
|
|
73
|
+
"vitest": "^3.0.9"
|
|
74
74
|
}
|
|
75
75
|
}
|