@sodiumlabs/ms 1.0.0 → 1.0.1
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/index.d.mts +72 -1
- package/dist/index.d.ts +72 -1
- package/dist/index.js +12 -5
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +8 -4
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
package/dist/index.d.mts
CHANGED
|
@@ -1,3 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The available time units.
|
|
3
|
+
*/
|
|
4
|
+
declare const units: readonly ["millisecond", "second", "minute", "hour", "day", "week", "month", "year"];
|
|
5
|
+
/**
|
|
6
|
+
* A time unit.
|
|
7
|
+
*/
|
|
8
|
+
type Unit = (typeof units)[number];
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* The options and translations of a locale.
|
|
12
|
+
*/
|
|
13
|
+
interface LocaleDefinition {
|
|
14
|
+
units: Record<Unit, UnitDefinition>;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* The translations of a time unit.
|
|
18
|
+
*/
|
|
19
|
+
interface UnitDefinition {
|
|
20
|
+
/**
|
|
21
|
+
* The short name of the unit.
|
|
22
|
+
*/
|
|
23
|
+
short: string;
|
|
24
|
+
/**
|
|
25
|
+
* The long name of the unit.
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* ```ts
|
|
29
|
+
* long: c => (c > 1 ? "plural form" : "singular form")
|
|
30
|
+
* ```
|
|
31
|
+
*
|
|
32
|
+
* @param c - The absolute value of the rounded number.
|
|
33
|
+
*/
|
|
34
|
+
long: (c: number) => string;
|
|
35
|
+
/**
|
|
36
|
+
* The names of the unit. Should be all lowercase.
|
|
37
|
+
*
|
|
38
|
+
* @remarks
|
|
39
|
+
* The values of `short` and `long` are not automatically added
|
|
40
|
+
* to this array, so you probably want to add them here too
|
|
41
|
+
* if you want them to be used in the parse function.
|
|
42
|
+
*/
|
|
43
|
+
names: string[];
|
|
44
|
+
}
|
|
45
|
+
type CompleteLocaleDefinition = LocaleDefinition & {
|
|
46
|
+
/**
|
|
47
|
+
* A map from the translated unit name to the corresponding unit name.
|
|
48
|
+
*/
|
|
49
|
+
mappedUnits: Map<string, Unit>;
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* The locales definitions. You can add or edit a locale definition directly here,
|
|
53
|
+
* or use {@link setLocale}.
|
|
54
|
+
*/
|
|
55
|
+
declare const locales: Map<string, CompleteLocaleDefinition>;
|
|
56
|
+
/**
|
|
57
|
+
* Add or edit a locale definition.
|
|
58
|
+
*
|
|
59
|
+
* @param locale - The locale (e.g. `it`)
|
|
60
|
+
* @param definition - The definition
|
|
61
|
+
*/
|
|
62
|
+
declare const setLocale: (locale: string, definition: LocaleDefinition) => void;
|
|
63
|
+
|
|
1
64
|
/**
|
|
2
65
|
* The options.
|
|
3
66
|
*/
|
|
@@ -10,12 +73,20 @@ interface Options {
|
|
|
10
73
|
* The locale. Defaults to `en`.
|
|
11
74
|
*/
|
|
12
75
|
locale?: string;
|
|
76
|
+
/**
|
|
77
|
+
* Format the duration with multiple units, e.g. `2m50s100ms` instead of `2m`.
|
|
78
|
+
*/
|
|
13
79
|
compound?: boolean;
|
|
80
|
+
/**
|
|
81
|
+
* The max amount of units used in the compound format.
|
|
82
|
+
*/
|
|
14
83
|
maxUnits?: number;
|
|
15
84
|
}
|
|
16
85
|
/**
|
|
17
86
|
* Parse or format the given value.
|
|
18
87
|
*
|
|
88
|
+
* **Note:** returns `NaN` if `value` was a string and could not be parsed.
|
|
89
|
+
*
|
|
19
90
|
* @param value - The string or number to convert
|
|
20
91
|
* @param options - Options for the conversion
|
|
21
92
|
* @throws Error if `value` is not a non-empty string or a number
|
|
@@ -38,4 +109,4 @@ declare function parse(str: string, options?: Options): number;
|
|
|
38
109
|
*/
|
|
39
110
|
declare function format(ms: number, options?: Options): string;
|
|
40
111
|
|
|
41
|
-
export { type Options, format, ms, parse };
|
|
112
|
+
export { type CompleteLocaleDefinition, type LocaleDefinition, type Options, type Unit, type UnitDefinition, format, locales, ms, parse, setLocale, units };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The available time units.
|
|
3
|
+
*/
|
|
4
|
+
declare const units: readonly ["millisecond", "second", "minute", "hour", "day", "week", "month", "year"];
|
|
5
|
+
/**
|
|
6
|
+
* A time unit.
|
|
7
|
+
*/
|
|
8
|
+
type Unit = (typeof units)[number];
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* The options and translations of a locale.
|
|
12
|
+
*/
|
|
13
|
+
interface LocaleDefinition {
|
|
14
|
+
units: Record<Unit, UnitDefinition>;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* The translations of a time unit.
|
|
18
|
+
*/
|
|
19
|
+
interface UnitDefinition {
|
|
20
|
+
/**
|
|
21
|
+
* The short name of the unit.
|
|
22
|
+
*/
|
|
23
|
+
short: string;
|
|
24
|
+
/**
|
|
25
|
+
* The long name of the unit.
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* ```ts
|
|
29
|
+
* long: c => (c > 1 ? "plural form" : "singular form")
|
|
30
|
+
* ```
|
|
31
|
+
*
|
|
32
|
+
* @param c - The absolute value of the rounded number.
|
|
33
|
+
*/
|
|
34
|
+
long: (c: number) => string;
|
|
35
|
+
/**
|
|
36
|
+
* The names of the unit. Should be all lowercase.
|
|
37
|
+
*
|
|
38
|
+
* @remarks
|
|
39
|
+
* The values of `short` and `long` are not automatically added
|
|
40
|
+
* to this array, so you probably want to add them here too
|
|
41
|
+
* if you want them to be used in the parse function.
|
|
42
|
+
*/
|
|
43
|
+
names: string[];
|
|
44
|
+
}
|
|
45
|
+
type CompleteLocaleDefinition = LocaleDefinition & {
|
|
46
|
+
/**
|
|
47
|
+
* A map from the translated unit name to the corresponding unit name.
|
|
48
|
+
*/
|
|
49
|
+
mappedUnits: Map<string, Unit>;
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* The locales definitions. You can add or edit a locale definition directly here,
|
|
53
|
+
* or use {@link setLocale}.
|
|
54
|
+
*/
|
|
55
|
+
declare const locales: Map<string, CompleteLocaleDefinition>;
|
|
56
|
+
/**
|
|
57
|
+
* Add or edit a locale definition.
|
|
58
|
+
*
|
|
59
|
+
* @param locale - The locale (e.g. `it`)
|
|
60
|
+
* @param definition - The definition
|
|
61
|
+
*/
|
|
62
|
+
declare const setLocale: (locale: string, definition: LocaleDefinition) => void;
|
|
63
|
+
|
|
1
64
|
/**
|
|
2
65
|
* The options.
|
|
3
66
|
*/
|
|
@@ -10,12 +73,20 @@ interface Options {
|
|
|
10
73
|
* The locale. Defaults to `en`.
|
|
11
74
|
*/
|
|
12
75
|
locale?: string;
|
|
76
|
+
/**
|
|
77
|
+
* Format the duration with multiple units, e.g. `2m50s100ms` instead of `2m`.
|
|
78
|
+
*/
|
|
13
79
|
compound?: boolean;
|
|
80
|
+
/**
|
|
81
|
+
* The max amount of units used in the compound format.
|
|
82
|
+
*/
|
|
14
83
|
maxUnits?: number;
|
|
15
84
|
}
|
|
16
85
|
/**
|
|
17
86
|
* Parse or format the given value.
|
|
18
87
|
*
|
|
88
|
+
* **Note:** returns `NaN` if `value` was a string and could not be parsed.
|
|
89
|
+
*
|
|
19
90
|
* @param value - The string or number to convert
|
|
20
91
|
* @param options - Options for the conversion
|
|
21
92
|
* @throws Error if `value` is not a non-empty string or a number
|
|
@@ -38,4 +109,4 @@ declare function parse(str: string, options?: Options): number;
|
|
|
38
109
|
*/
|
|
39
110
|
declare function format(ms: number, options?: Options): string;
|
|
40
111
|
|
|
41
|
-
export { type Options, format, ms, parse };
|
|
112
|
+
export { type CompleteLocaleDefinition, type LocaleDefinition, type Options, type Unit, type UnitDefinition, format, locales, ms, parse, setLocale, units };
|
package/dist/index.js
CHANGED
|
@@ -22,8 +22,11 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
22
22
|
var index_exports = {};
|
|
23
23
|
__export(index_exports, {
|
|
24
24
|
format: () => format,
|
|
25
|
+
locales: () => locales,
|
|
25
26
|
ms: () => ms,
|
|
26
|
-
parse: () => parse
|
|
27
|
+
parse: () => parse,
|
|
28
|
+
setLocale: () => setLocale,
|
|
29
|
+
units: () => units
|
|
27
30
|
});
|
|
28
31
|
module.exports = __toCommonJS(index_exports);
|
|
29
32
|
|
|
@@ -225,6 +228,7 @@ for (const [locale, definition] of Object.entries(defaultLocales)) {
|
|
|
225
228
|
|
|
226
229
|
// src/units.ts
|
|
227
230
|
var import_duration = require("@sodiumlabs/duration");
|
|
231
|
+
var units = ["millisecond", "second", "minute", "hour", "day", "week", "month", "year"];
|
|
228
232
|
var unitValues = {
|
|
229
233
|
millisecond: import_duration.Time.Millisecond,
|
|
230
234
|
second: import_duration.Time.Second,
|
|
@@ -294,13 +298,13 @@ function format(ms2, options) {
|
|
|
294
298
|
}
|
|
295
299
|
const sign = ms2 < 0 ? "-" : "";
|
|
296
300
|
let remaining = Math.abs(ms2);
|
|
297
|
-
const
|
|
301
|
+
const units2 = Object.entries(locale.units).map(([unit, def]) => ({
|
|
298
302
|
unit,
|
|
299
303
|
def,
|
|
300
304
|
value: unitValues[unit]
|
|
301
305
|
})).sort((a, b) => b.value - a.value);
|
|
302
306
|
if (!options?.compound) {
|
|
303
|
-
for (const { def, value } of
|
|
307
|
+
for (const { def, value } of units2) {
|
|
304
308
|
if (remaining >= value) {
|
|
305
309
|
const amount = Math.round(ms2 / value);
|
|
306
310
|
if (options?.long) {
|
|
@@ -314,7 +318,7 @@ function format(ms2, options) {
|
|
|
314
318
|
}
|
|
315
319
|
const parts = [];
|
|
316
320
|
let usedUnits = 0;
|
|
317
|
-
for (const { def, value } of
|
|
321
|
+
for (const { def, value } of units2) {
|
|
318
322
|
if (remaining < value) continue;
|
|
319
323
|
const amount = Math.floor(remaining / value);
|
|
320
324
|
remaining -= amount * value;
|
|
@@ -336,7 +340,10 @@ __name(format, "format");
|
|
|
336
340
|
// Annotate the CommonJS export names for ESM import in node:
|
|
337
341
|
0 && (module.exports = {
|
|
338
342
|
format,
|
|
343
|
+
locales,
|
|
339
344
|
ms,
|
|
340
|
-
parse
|
|
345
|
+
parse,
|
|
346
|
+
setLocale,
|
|
347
|
+
units
|
|
341
348
|
});
|
|
342
349
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/locales.ts","../src/units.ts"],"sourcesContent":["import { locales } from \"./locales\";\nimport { Unit, unitValues } from \"./units\";\n\n/**\n * The options.\n */\nexport interface Options {\n /**\n * Set to `true` to use verbose formatting. Defaults to `false`.\n */\n long?: boolean;\n /**\n * The locale. Defaults to `en`.\n */\n locale?: string;\n compound?: boolean;\n maxUnits?: number;\n}\n\n/**\n * Parse or format the given value.\n *\n * @param value - The string or number to convert\n * @param options - Options for the conversion\n * @throws Error if `value` is not a non-empty string or a number\n */\nexport function ms(value: string, options?: Options): number;\nexport function ms(value: number, options?: Options): string;\nexport function ms(value: string | number, options?: Options): number | string {\n if (typeof value === \"string\") {\n return parse(value, options);\n } else if (typeof value === \"number\") {\n return format(value, options);\n }\n throw new Error(`Value provided to ms() must be a string or number. value=${JSON.stringify(value)}`);\n}\n\n/**\n * Parse the given string and return milliseconds.\n *\n * @param str - A string to parse into milliseconds. Length must be in [1;100]\n * @returns The parsed value in milliseconds, or `NaN` if the string can't be parsed\n */\nexport function parse(str: string, options?: Options): number {\n if (typeof str !== \"string\" || str.length === 0 || str.length > 100) {\n throw new Error(\n `Value provided to ms.parse() must be a string with length between 1 and 99. value=${JSON.stringify(str)}`,\n );\n }\n\n const locale = locales.get(options?.locale ?? \"en\");\n if (!locale) {\n throw new Error(`Unknown locale \"${options?.locale}\"`);\n }\n\n let total = 0;\n let consumed = false;\n\n const tokenRegex = /(?<value>-?\\d*\\.?\\d+) *(?<unit>[a-zàèìòùáéíóúýâêîôûãñõäëïöüÿçµ]+)?/gi;\n let match: RegExpExecArray | null;\n let lastIndex = 0;\n\n while ((match = tokenRegex.exec(str)) !== null) {\n if (str.slice(lastIndex, match.index).trim().length !== 0) {\n return NaN;\n }\n\n const { value: rawValue, unit: rawUnit = \"ms\" } = match.groups as {\n value: string;\n unit: string | undefined;\n };\n\n const value = parseFloat(rawValue);\n if (Number.isNaN(value)) {\n return NaN;\n }\n\n const unit = !rawUnit ? \"millisecond\" : locale.mappedUnits.get(rawUnit.toLowerCase());\n if (!unit) {\n return NaN;\n }\n\n total += value * unitValues[unit];\n consumed = true;\n\n lastIndex = tokenRegex.lastIndex;\n }\n\n if (!consumed || str.slice(lastIndex).trim().length !== 0) {\n return NaN;\n }\n\n return total;\n}\n\n/**\n * Format the given integer as a string.\n *\n * @param ms - milliseconds\n * @param options - Options for the conversion\n * @returns The formatted string\n */\nexport function format(ms: number, options?: Options): string {\n if (typeof ms !== \"number\" || !Number.isFinite(ms)) {\n throw new Error(\"Value provided to ms.format() must be of type number.\");\n }\n\n const locale = locales.get(options?.locale ?? \"en\");\n if (!locale) {\n throw new Error(`Unknown locale \"${options?.locale}\"`);\n }\n\n const sign = ms < 0 ? \"-\" : \"\";\n let remaining = Math.abs(ms);\n\n // units sorted by descending size\n const units = Object.entries(locale.units)\n .map(([unit, def]) => ({\n unit,\n def,\n value: unitValues[unit as Unit],\n }))\n .sort((a, b) => b.value - a.value);\n\n // === simple mode (current behavior) ===\n if (!options?.compound) {\n for (const { def, value } of units) {\n if (remaining >= value) {\n const amount = Math.round(ms / value);\n\n if (options?.long) {\n return `${amount} ${def.long(Math.abs(amount))}`;\n }\n\n return `${amount}${def.short}`;\n }\n }\n\n const msDef = locale.units.millisecond;\n return options?.long ? `${ms} ${msDef.long(Math.abs(ms))}` : `${ms}${msDef.short}`;\n }\n\n // === compound mode ===\n const parts: string[] = [];\n let usedUnits = 0;\n\n for (const { def, value } of units) {\n if (remaining < value) continue;\n\n const amount = Math.floor(remaining / value);\n remaining -= amount * value;\n\n if (amount > 0) {\n parts.push(options?.long ? `${amount} ${def.long(amount)}` : `${amount}${def.short}`);\n\n usedUnits++;\n if (options?.maxUnits && usedUnits >= options.maxUnits) {\n break;\n }\n }\n }\n\n // fallback if everything was < 1ms\n if (parts.length === 0) {\n const msDef = locale.units.millisecond;\n parts.push(options?.long ? `0 ${msDef.long(0)}` : `0${msDef.short}`);\n }\n\n return sign + parts.join(options?.long ? \" \" : \"\");\n}\n","import { Unit } from \"./units\";\n\n/**\n * The options and translations of a locale.\n */\nexport interface LocaleDefinition {\n units: Record<Unit, UnitDefinition>;\n}\n\n/**\n * The translations of a time unit.\n */\nexport interface UnitDefinition {\n /**\n * The short name of the unit.\n */\n short: string;\n /**\n * The long name of the unit.\n *\n * @example\n * ```ts\n * long: c => (c > 1 ? \"plural form\" : \"singular form\")\n * ```\n *\n * @param c - The absolute value of the rounded number.\n */\n long: (c: number) => string;\n /**\n * The names of the unit. Should be all lowercase.\n *\n * @remarks\n * The values of `short` and `long` are not automatically added\n * to this array, so you probably want to add them here too\n * if you want them to be used in the parse function.\n */\n names: string[];\n}\n\nexport type CompleteLocaleDefinition = LocaleDefinition & {\n /**\n * A map from the translated unit name to the corresponding unit name.\n */\n mappedUnits: Map<string, Unit>;\n};\n\n/**\n * The locales definitions. You can add or edit a locale definition directly here,\n * or use {@link setLocale}.\n */\nexport const locales = new Map<string, CompleteLocaleDefinition>();\n\n/**\n * Add or edit a locale definition.\n *\n * @param locale - The locale (e.g. `it`)\n * @param definition - The definition\n */\nexport const setLocale = (locale: string, definition: LocaleDefinition) => {\n const mappedUnits = new Map<string, Unit>();\n for (const [unit, def] of Object.entries(definition.units) as [Unit, UnitDefinition][]) {\n for (const name of def.names) {\n mappedUnits.set(name.toLowerCase(), unit);\n }\n }\n\n locales.set(locale, {\n ...definition,\n mappedUnits,\n });\n};\n\n// Define the default locales\n\nconst defaultLocales: Record<string, LocaleDefinition> = {\n en: {\n units: {\n millisecond: {\n short: \"ms\",\n long: c => (c > 1 ? \"milliseconds\" : \"millisecond\"),\n names: [\"milliseconds\", \"millisecond\", \"msecs\", \"msec\", \"ms\"],\n },\n second: {\n short: \"s\",\n long: c => (c > 1 ? \"seconds\" : \"second\"),\n names: [\"seconds\", \"second\", \"secs\", \"sec\", \"s\"],\n },\n minute: {\n short: \"m\",\n long: c => (c > 1 ? \"minutes\" : \"minute\"),\n names: [\"minutes\", \"minute\", \"mins\", \"min\", \"m\"],\n },\n hour: {\n short: \"h\",\n long: c => (c > 1 ? \"hours\" : \"hour\"),\n names: [\"hours\", \"hour\", \"hrs\", \"hr\", \"h\"],\n },\n day: {\n short: \"d\",\n long: c => (c > 1 ? \"days\" : \"day\"),\n names: [\"days\", \"day\", \"d\"],\n },\n week: {\n short: \"w\",\n long: c => (c > 1 ? \"weeks\" : \"week\"),\n names: [\"weeks\", \"week\", \"w\"],\n },\n month: {\n short: \"mo\",\n long: c => (c > 1 ? \"months\" : \"month\"),\n names: [\"months\", \"month\", \"mo\"],\n },\n year: {\n short: \"y\",\n long: c => (c > 1 ? \"years\" : \"year\"),\n names: [\"years\", \"year\", \"yrs\", \"yr\", \"y\"],\n },\n },\n },\n fr: {\n units: {\n millisecond: {\n short: \"ms\",\n long: c => (c > 1 ? \"millisecondes\" : \"milliseconde\"),\n names: [\"millisecondes\", \"milliseconde\", \"ms\"],\n },\n second: {\n short: \"s\",\n long: c => (c > 1 ? \"secondes\" : \"seconde\"),\n names: [\"secondes\", \"seconde\", \"secs\", \"sec\", \"s\"],\n },\n minute: {\n short: \"m\",\n long: c => (c > 1 ? \"minutes\" : \"minute\"),\n names: [\"minutes\", \"minute\", \"mins\", \"min\", \"m\"],\n },\n hour: {\n short: \"h\",\n long: c => (c > 1 ? \"heures\" : \"heure\"),\n names: [\"heures\", \"heure\", \"h\"],\n },\n day: {\n short: \"j\",\n long: c => (c > 1 ? \"jours\" : \"jour\"),\n names: [\"jours\", \"jour\", \"j\"],\n },\n week: {\n short: \"sem\",\n long: c => (c > 1 ? \"semaines\" : \"semaine\"),\n names: [\"semaines\", \"semaine\", \"sem\"],\n },\n month: {\n short: \"mo\",\n long: _ => \"mois\",\n names: [\"mois\", \"mo\"],\n },\n year: {\n short: \"an\",\n long: c => (c > 1 ? \"années\" : \"année\"),\n names: [\"années\", \"annees\", \"année\", \"annee\", \"ans\", \"an\"],\n },\n },\n },\n de: {\n units: {\n millisecond: {\n short: \"ms\",\n long: c => (c > 1 ? \"Millisekunden\" : \"Millisekunde\"),\n names: [\"millisekunden\", \"millisekunde\", \"ms\"],\n },\n second: {\n short: \"s\",\n long: c => (c > 1 ? \"Sekunden\" : \"Sekunde\"),\n names: [\"sekunden\", \"sekunde\", \"seks\", \"sek\", \"s\"],\n },\n minute: {\n short: \"m\",\n long: c => (c > 1 ? \"Minuten\" : \"Minute\"),\n names: [\"minuten\", \"minute\", \"mins\", \"min\", \"m\"],\n },\n hour: {\n short: \"h\",\n long: c => (c > 1 ? \"Stunden\" : \"Stunde\"),\n names: [\"stunden\", \"stunde\", \"hrs\", \"hr\", \"h\"],\n },\n day: {\n short: \"t\",\n long: c => (c > 1 ? \"Tage\" : \"Tag\"),\n names: [\"tage\", \"tag\", \"t\", \"d\"],\n },\n week: {\n short: \"w\",\n long: c => (c > 1 ? \"Wochen\" : \"Woche\"),\n names: [\"wochen\", \"woche\", \"wo\", \"w\"],\n },\n month: {\n short: \"mo\",\n long: c => (c > 1 ? \"Monate\" : \"Monat\"),\n names: [\"monate\", \"monat\", \"mon\", \"mo\"],\n },\n year: {\n short: \"j\",\n long: c => (c > 1 ? \"Jahre\" : \"Jahr\"),\n names: [\"jahre\", \"jahr\", \"j\", \"y\"],\n },\n },\n },\n es: {\n units: {\n millisecond: {\n short: \"ms\",\n long: c => (c > 1 ? \"milisegundos\" : \"milisegundo\"),\n names: [\"milisegundos\", \"milisegundo\", \"ms\"],\n },\n second: {\n short: \"s\",\n long: c => (c > 1 ? \"segundos\" : \"segundo\"),\n names: [\"segundos\", \"segundo\", \"s\"],\n },\n minute: {\n short: \"min\",\n long: c => (c > 1 ? \"minutos\" : \"minuto\"),\n names: [\"minutos\", \"minuto\", \"mins\", \"min\", \"m\"],\n },\n hour: {\n short: \"h\",\n long: c => (c > 1 ? \"horas\" : \"hora\"),\n names: [\"horas\", \"hora\", \"hrs\", \"hr\", \"h\"],\n },\n day: {\n short: \"d\",\n long: c => (c > 1 ? \"días\" : \"día\"),\n names: [\"días\", \"dias\", \"día\", \"dia\", \"d\"],\n },\n week: {\n short: \"sem\",\n long: c => (c > 1 ? \"semanas\" : \"semana\"),\n names: [\"semanas\", \"semana\", \"sem\"],\n },\n month: {\n short: \"mes\",\n long: c => (c > 1 ? \"meses\" : \"mes\"),\n names: [\"meses\", \"mes\", \"mo\"],\n },\n year: {\n short: \"a\",\n long: c => (c > 1 ? \"años\" : \"año\"),\n names: [\"años\", \"anos\", \"año\", \"ano\", \"a\"],\n },\n },\n },\n};\n\nfor (const [locale, definition] of Object.entries(defaultLocales)) {\n setLocale(locale, definition);\n}\n","import { Time } from \"@sodiumlabs/duration\";\n\n/**\n * The available time units.\n */\nexport const units = [\"millisecond\", \"second\", \"minute\", \"hour\", \"day\", \"week\", \"month\", \"year\"] as const;\n\n/**\n * A time unit.\n */\nexport type Unit = (typeof units)[number];\n\n/**\n * The values in milliseconds of each time unit.\n */\nexport const unitValues: Record<Unit, number> = {\n millisecond: Time.Millisecond,\n second: Time.Second,\n minute: Time.Minute,\n hour: Time.Hour,\n day: Time.Day,\n week: Time.Week,\n month: Time.Month,\n year: Time.Year,\n};\n"],"mappings":"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","names":["ms"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/locales.ts","../src/units.ts"],"sourcesContent":["import { locales } from \"./locales\";\nimport { Unit, unitValues } from \"./units\";\n\nexport type { Unit };\nexport * from \"./locales\";\nexport { units } from \"./units\";\n\n/**\n * The options.\n */\nexport interface Options {\n /**\n * Set to `true` to use verbose formatting. Defaults to `false`.\n */\n long?: boolean;\n /**\n * The locale. Defaults to `en`.\n */\n locale?: string;\n /**\n * Format the duration with multiple units, e.g. `2m50s100ms` instead of `2m`.\n */\n compound?: boolean;\n /**\n * The max amount of units used in the compound format.\n */\n maxUnits?: number;\n}\n\n/**\n * Parse or format the given value.\n *\n * **Note:** returns `NaN` if `value` was a string and could not be parsed.\n *\n * @param value - The string or number to convert\n * @param options - Options for the conversion\n * @throws Error if `value` is not a non-empty string or a number\n */\nexport function ms(value: string, options?: Options): number;\nexport function ms(value: number, options?: Options): string;\nexport function ms(value: string | number, options?: Options): number | string {\n if (typeof value === \"string\") {\n return parse(value, options);\n } else if (typeof value === \"number\") {\n return format(value, options);\n }\n throw new Error(`Value provided to ms() must be a string or number. value=${JSON.stringify(value)}`);\n}\n\n/**\n * Parse the given string and return milliseconds.\n *\n * @param str - A string to parse into milliseconds. Length must be in [1;100]\n * @returns The parsed value in milliseconds, or `NaN` if the string can't be parsed\n */\nexport function parse(str: string, options?: Options): number {\n if (typeof str !== \"string\" || str.length === 0 || str.length > 100) {\n throw new Error(\n `Value provided to ms.parse() must be a string with length between 1 and 99. value=${JSON.stringify(str)}`,\n );\n }\n\n const locale = locales.get(options?.locale ?? \"en\");\n if (!locale) {\n throw new Error(`Unknown locale \"${options?.locale}\"`);\n }\n\n let total = 0;\n let consumed = false;\n\n const tokenRegex = /(?<value>-?\\d*\\.?\\d+) *(?<unit>[a-zàèìòùáéíóúýâêîôûãñõäëïöüÿçµ]+)?/gi;\n let match: RegExpExecArray | null;\n let lastIndex = 0;\n\n while ((match = tokenRegex.exec(str)) !== null) {\n if (str.slice(lastIndex, match.index).trim().length !== 0) {\n return NaN;\n }\n\n const { value: rawValue, unit: rawUnit = \"ms\" } = match.groups as {\n value: string;\n unit: string | undefined;\n };\n\n const value = parseFloat(rawValue);\n if (Number.isNaN(value)) {\n return NaN;\n }\n\n const unit = !rawUnit ? \"millisecond\" : locale.mappedUnits.get(rawUnit.toLowerCase());\n if (!unit) {\n return NaN;\n }\n\n total += value * unitValues[unit];\n consumed = true;\n\n lastIndex = tokenRegex.lastIndex;\n }\n\n if (!consumed || str.slice(lastIndex).trim().length !== 0) {\n return NaN;\n }\n\n return total;\n}\n\n/**\n * Format the given integer as a string.\n *\n * @param ms - milliseconds\n * @param options - Options for the conversion\n * @returns The formatted string\n */\nexport function format(ms: number, options?: Options): string {\n if (typeof ms !== \"number\" || !Number.isFinite(ms)) {\n throw new Error(\"Value provided to ms.format() must be of type number.\");\n }\n\n const locale = locales.get(options?.locale ?? \"en\");\n if (!locale) {\n throw new Error(`Unknown locale \"${options?.locale}\"`);\n }\n\n const sign = ms < 0 ? \"-\" : \"\";\n let remaining = Math.abs(ms);\n\n // units sorted by descending size\n const units = Object.entries(locale.units)\n .map(([unit, def]) => ({\n unit,\n def,\n value: unitValues[unit as Unit],\n }))\n .sort((a, b) => b.value - a.value);\n\n // === simple mode (current behavior) ===\n if (!options?.compound) {\n for (const { def, value } of units) {\n if (remaining >= value) {\n const amount = Math.round(ms / value);\n\n if (options?.long) {\n return `${amount} ${def.long(Math.abs(amount))}`;\n }\n\n return `${amount}${def.short}`;\n }\n }\n\n const msDef = locale.units.millisecond;\n return options?.long ? `${ms} ${msDef.long(Math.abs(ms))}` : `${ms}${msDef.short}`;\n }\n\n // === compound mode ===\n const parts: string[] = [];\n let usedUnits = 0;\n\n for (const { def, value } of units) {\n if (remaining < value) continue;\n\n const amount = Math.floor(remaining / value);\n remaining -= amount * value;\n\n if (amount > 0) {\n parts.push(options?.long ? `${amount} ${def.long(amount)}` : `${amount}${def.short}`);\n\n usedUnits++;\n if (options?.maxUnits && usedUnits >= options.maxUnits) {\n break;\n }\n }\n }\n\n // fallback if everything was < 1ms\n if (parts.length === 0) {\n const msDef = locale.units.millisecond;\n parts.push(options?.long ? `0 ${msDef.long(0)}` : `0${msDef.short}`);\n }\n\n return sign + parts.join(options?.long ? \" \" : \"\");\n}\n","import { Unit } from \"./units\";\n\n/**\n * The options and translations of a locale.\n */\nexport interface LocaleDefinition {\n units: Record<Unit, UnitDefinition>;\n}\n\n/**\n * The translations of a time unit.\n */\nexport interface UnitDefinition {\n /**\n * The short name of the unit.\n */\n short: string;\n /**\n * The long name of the unit.\n *\n * @example\n * ```ts\n * long: c => (c > 1 ? \"plural form\" : \"singular form\")\n * ```\n *\n * @param c - The absolute value of the rounded number.\n */\n long: (c: number) => string;\n /**\n * The names of the unit. Should be all lowercase.\n *\n * @remarks\n * The values of `short` and `long` are not automatically added\n * to this array, so you probably want to add them here too\n * if you want them to be used in the parse function.\n */\n names: string[];\n}\n\nexport type CompleteLocaleDefinition = LocaleDefinition & {\n /**\n * A map from the translated unit name to the corresponding unit name.\n */\n mappedUnits: Map<string, Unit>;\n};\n\n/**\n * The locales definitions. You can add or edit a locale definition directly here,\n * or use {@link setLocale}.\n */\nexport const locales = new Map<string, CompleteLocaleDefinition>();\n\n/**\n * Add or edit a locale definition.\n *\n * @param locale - The locale (e.g. `it`)\n * @param definition - The definition\n */\nexport const setLocale = (locale: string, definition: LocaleDefinition) => {\n const mappedUnits = new Map<string, Unit>();\n for (const [unit, def] of Object.entries(definition.units) as [Unit, UnitDefinition][]) {\n for (const name of def.names) {\n mappedUnits.set(name.toLowerCase(), unit);\n }\n }\n\n locales.set(locale, {\n ...definition,\n mappedUnits,\n });\n};\n\n// Define the default locales\n\nconst defaultLocales: Record<string, LocaleDefinition> = {\n en: {\n units: {\n millisecond: {\n short: \"ms\",\n long: c => (c > 1 ? \"milliseconds\" : \"millisecond\"),\n names: [\"milliseconds\", \"millisecond\", \"msecs\", \"msec\", \"ms\"],\n },\n second: {\n short: \"s\",\n long: c => (c > 1 ? \"seconds\" : \"second\"),\n names: [\"seconds\", \"second\", \"secs\", \"sec\", \"s\"],\n },\n minute: {\n short: \"m\",\n long: c => (c > 1 ? \"minutes\" : \"minute\"),\n names: [\"minutes\", \"minute\", \"mins\", \"min\", \"m\"],\n },\n hour: {\n short: \"h\",\n long: c => (c > 1 ? \"hours\" : \"hour\"),\n names: [\"hours\", \"hour\", \"hrs\", \"hr\", \"h\"],\n },\n day: {\n short: \"d\",\n long: c => (c > 1 ? \"days\" : \"day\"),\n names: [\"days\", \"day\", \"d\"],\n },\n week: {\n short: \"w\",\n long: c => (c > 1 ? \"weeks\" : \"week\"),\n names: [\"weeks\", \"week\", \"w\"],\n },\n month: {\n short: \"mo\",\n long: c => (c > 1 ? \"months\" : \"month\"),\n names: [\"months\", \"month\", \"mo\"],\n },\n year: {\n short: \"y\",\n long: c => (c > 1 ? \"years\" : \"year\"),\n names: [\"years\", \"year\", \"yrs\", \"yr\", \"y\"],\n },\n },\n },\n fr: {\n units: {\n millisecond: {\n short: \"ms\",\n long: c => (c > 1 ? \"millisecondes\" : \"milliseconde\"),\n names: [\"millisecondes\", \"milliseconde\", \"ms\"],\n },\n second: {\n short: \"s\",\n long: c => (c > 1 ? \"secondes\" : \"seconde\"),\n names: [\"secondes\", \"seconde\", \"secs\", \"sec\", \"s\"],\n },\n minute: {\n short: \"m\",\n long: c => (c > 1 ? \"minutes\" : \"minute\"),\n names: [\"minutes\", \"minute\", \"mins\", \"min\", \"m\"],\n },\n hour: {\n short: \"h\",\n long: c => (c > 1 ? \"heures\" : \"heure\"),\n names: [\"heures\", \"heure\", \"h\"],\n },\n day: {\n short: \"j\",\n long: c => (c > 1 ? \"jours\" : \"jour\"),\n names: [\"jours\", \"jour\", \"j\"],\n },\n week: {\n short: \"sem\",\n long: c => (c > 1 ? \"semaines\" : \"semaine\"),\n names: [\"semaines\", \"semaine\", \"sem\"],\n },\n month: {\n short: \"mo\",\n long: _ => \"mois\",\n names: [\"mois\", \"mo\"],\n },\n year: {\n short: \"an\",\n long: c => (c > 1 ? \"années\" : \"année\"),\n names: [\"années\", \"annees\", \"année\", \"annee\", \"ans\", \"an\"],\n },\n },\n },\n de: {\n units: {\n millisecond: {\n short: \"ms\",\n long: c => (c > 1 ? \"Millisekunden\" : \"Millisekunde\"),\n names: [\"millisekunden\", \"millisekunde\", \"ms\"],\n },\n second: {\n short: \"s\",\n long: c => (c > 1 ? \"Sekunden\" : \"Sekunde\"),\n names: [\"sekunden\", \"sekunde\", \"seks\", \"sek\", \"s\"],\n },\n minute: {\n short: \"m\",\n long: c => (c > 1 ? \"Minuten\" : \"Minute\"),\n names: [\"minuten\", \"minute\", \"mins\", \"min\", \"m\"],\n },\n hour: {\n short: \"h\",\n long: c => (c > 1 ? \"Stunden\" : \"Stunde\"),\n names: [\"stunden\", \"stunde\", \"hrs\", \"hr\", \"h\"],\n },\n day: {\n short: \"t\",\n long: c => (c > 1 ? \"Tage\" : \"Tag\"),\n names: [\"tage\", \"tag\", \"t\", \"d\"],\n },\n week: {\n short: \"w\",\n long: c => (c > 1 ? \"Wochen\" : \"Woche\"),\n names: [\"wochen\", \"woche\", \"wo\", \"w\"],\n },\n month: {\n short: \"mo\",\n long: c => (c > 1 ? \"Monate\" : \"Monat\"),\n names: [\"monate\", \"monat\", \"mon\", \"mo\"],\n },\n year: {\n short: \"j\",\n long: c => (c > 1 ? \"Jahre\" : \"Jahr\"),\n names: [\"jahre\", \"jahr\", \"j\", \"y\"],\n },\n },\n },\n es: {\n units: {\n millisecond: {\n short: \"ms\",\n long: c => (c > 1 ? \"milisegundos\" : \"milisegundo\"),\n names: [\"milisegundos\", \"milisegundo\", \"ms\"],\n },\n second: {\n short: \"s\",\n long: c => (c > 1 ? \"segundos\" : \"segundo\"),\n names: [\"segundos\", \"segundo\", \"s\"],\n },\n minute: {\n short: \"min\",\n long: c => (c > 1 ? \"minutos\" : \"minuto\"),\n names: [\"minutos\", \"minuto\", \"mins\", \"min\", \"m\"],\n },\n hour: {\n short: \"h\",\n long: c => (c > 1 ? \"horas\" : \"hora\"),\n names: [\"horas\", \"hora\", \"hrs\", \"hr\", \"h\"],\n },\n day: {\n short: \"d\",\n long: c => (c > 1 ? \"días\" : \"día\"),\n names: [\"días\", \"dias\", \"día\", \"dia\", \"d\"],\n },\n week: {\n short: \"sem\",\n long: c => (c > 1 ? \"semanas\" : \"semana\"),\n names: [\"semanas\", \"semana\", \"sem\"],\n },\n month: {\n short: \"mes\",\n long: c => (c > 1 ? \"meses\" : \"mes\"),\n names: [\"meses\", \"mes\", \"mo\"],\n },\n year: {\n short: \"a\",\n long: c => (c > 1 ? \"años\" : \"año\"),\n names: [\"años\", \"anos\", \"año\", \"ano\", \"a\"],\n },\n },\n },\n};\n\nfor (const [locale, definition] of Object.entries(defaultLocales)) {\n setLocale(locale, definition);\n}\n","import { Time } from \"@sodiumlabs/duration\";\n\n/**\n * The available time units.\n */\nexport const units = [\"millisecond\", \"second\", \"minute\", \"hour\", \"day\", \"week\", \"month\", \"year\"] as const;\n\n/**\n * A time unit.\n */\nexport type Unit = (typeof units)[number];\n\n/**\n * The values in milliseconds of each time unit.\n */\nexport const unitValues: Record<Unit, number> = {\n millisecond: Time.Millisecond,\n second: Time.Second,\n minute: Time.Minute,\n hour: Time.Hour,\n day: Time.Day,\n week: Time.Week,\n month: Time.Month,\n year: Time.Year,\n};\n"],"mappings":"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","names":["ms","units"]}
|
package/dist/index.mjs
CHANGED
|
@@ -199,6 +199,7 @@ for (const [locale, definition] of Object.entries(defaultLocales)) {
|
|
|
199
199
|
|
|
200
200
|
// src/units.ts
|
|
201
201
|
import { Time } from "@sodiumlabs/duration";
|
|
202
|
+
var units = ["millisecond", "second", "minute", "hour", "day", "week", "month", "year"];
|
|
202
203
|
var unitValues = {
|
|
203
204
|
millisecond: Time.Millisecond,
|
|
204
205
|
second: Time.Second,
|
|
@@ -268,13 +269,13 @@ function format(ms2, options) {
|
|
|
268
269
|
}
|
|
269
270
|
const sign = ms2 < 0 ? "-" : "";
|
|
270
271
|
let remaining = Math.abs(ms2);
|
|
271
|
-
const
|
|
272
|
+
const units2 = Object.entries(locale.units).map(([unit, def]) => ({
|
|
272
273
|
unit,
|
|
273
274
|
def,
|
|
274
275
|
value: unitValues[unit]
|
|
275
276
|
})).sort((a, b) => b.value - a.value);
|
|
276
277
|
if (!options?.compound) {
|
|
277
|
-
for (const { def, value } of
|
|
278
|
+
for (const { def, value } of units2) {
|
|
278
279
|
if (remaining >= value) {
|
|
279
280
|
const amount = Math.round(ms2 / value);
|
|
280
281
|
if (options?.long) {
|
|
@@ -288,7 +289,7 @@ function format(ms2, options) {
|
|
|
288
289
|
}
|
|
289
290
|
const parts = [];
|
|
290
291
|
let usedUnits = 0;
|
|
291
|
-
for (const { def, value } of
|
|
292
|
+
for (const { def, value } of units2) {
|
|
292
293
|
if (remaining < value) continue;
|
|
293
294
|
const amount = Math.floor(remaining / value);
|
|
294
295
|
remaining -= amount * value;
|
|
@@ -309,7 +310,10 @@ function format(ms2, options) {
|
|
|
309
310
|
__name(format, "format");
|
|
310
311
|
export {
|
|
311
312
|
format,
|
|
313
|
+
locales,
|
|
312
314
|
ms,
|
|
313
|
-
parse
|
|
315
|
+
parse,
|
|
316
|
+
setLocale,
|
|
317
|
+
units
|
|
314
318
|
};
|
|
315
319
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/locales.ts","../src/units.ts","../src/index.ts"],"sourcesContent":["import { Unit } from \"./units\";\n\n/**\n * The options and translations of a locale.\n */\nexport interface LocaleDefinition {\n units: Record<Unit, UnitDefinition>;\n}\n\n/**\n * The translations of a time unit.\n */\nexport interface UnitDefinition {\n /**\n * The short name of the unit.\n */\n short: string;\n /**\n * The long name of the unit.\n *\n * @example\n * ```ts\n * long: c => (c > 1 ? \"plural form\" : \"singular form\")\n * ```\n *\n * @param c - The absolute value of the rounded number.\n */\n long: (c: number) => string;\n /**\n * The names of the unit. Should be all lowercase.\n *\n * @remarks\n * The values of `short` and `long` are not automatically added\n * to this array, so you probably want to add them here too\n * if you want them to be used in the parse function.\n */\n names: string[];\n}\n\nexport type CompleteLocaleDefinition = LocaleDefinition & {\n /**\n * A map from the translated unit name to the corresponding unit name.\n */\n mappedUnits: Map<string, Unit>;\n};\n\n/**\n * The locales definitions. You can add or edit a locale definition directly here,\n * or use {@link setLocale}.\n */\nexport const locales = new Map<string, CompleteLocaleDefinition>();\n\n/**\n * Add or edit a locale definition.\n *\n * @param locale - The locale (e.g. `it`)\n * @param definition - The definition\n */\nexport const setLocale = (locale: string, definition: LocaleDefinition) => {\n const mappedUnits = new Map<string, Unit>();\n for (const [unit, def] of Object.entries(definition.units) as [Unit, UnitDefinition][]) {\n for (const name of def.names) {\n mappedUnits.set(name.toLowerCase(), unit);\n }\n }\n\n locales.set(locale, {\n ...definition,\n mappedUnits,\n });\n};\n\n// Define the default locales\n\nconst defaultLocales: Record<string, LocaleDefinition> = {\n en: {\n units: {\n millisecond: {\n short: \"ms\",\n long: c => (c > 1 ? \"milliseconds\" : \"millisecond\"),\n names: [\"milliseconds\", \"millisecond\", \"msecs\", \"msec\", \"ms\"],\n },\n second: {\n short: \"s\",\n long: c => (c > 1 ? \"seconds\" : \"second\"),\n names: [\"seconds\", \"second\", \"secs\", \"sec\", \"s\"],\n },\n minute: {\n short: \"m\",\n long: c => (c > 1 ? \"minutes\" : \"minute\"),\n names: [\"minutes\", \"minute\", \"mins\", \"min\", \"m\"],\n },\n hour: {\n short: \"h\",\n long: c => (c > 1 ? \"hours\" : \"hour\"),\n names: [\"hours\", \"hour\", \"hrs\", \"hr\", \"h\"],\n },\n day: {\n short: \"d\",\n long: c => (c > 1 ? \"days\" : \"day\"),\n names: [\"days\", \"day\", \"d\"],\n },\n week: {\n short: \"w\",\n long: c => (c > 1 ? \"weeks\" : \"week\"),\n names: [\"weeks\", \"week\", \"w\"],\n },\n month: {\n short: \"mo\",\n long: c => (c > 1 ? \"months\" : \"month\"),\n names: [\"months\", \"month\", \"mo\"],\n },\n year: {\n short: \"y\",\n long: c => (c > 1 ? \"years\" : \"year\"),\n names: [\"years\", \"year\", \"yrs\", \"yr\", \"y\"],\n },\n },\n },\n fr: {\n units: {\n millisecond: {\n short: \"ms\",\n long: c => (c > 1 ? \"millisecondes\" : \"milliseconde\"),\n names: [\"millisecondes\", \"milliseconde\", \"ms\"],\n },\n second: {\n short: \"s\",\n long: c => (c > 1 ? \"secondes\" : \"seconde\"),\n names: [\"secondes\", \"seconde\", \"secs\", \"sec\", \"s\"],\n },\n minute: {\n short: \"m\",\n long: c => (c > 1 ? \"minutes\" : \"minute\"),\n names: [\"minutes\", \"minute\", \"mins\", \"min\", \"m\"],\n },\n hour: {\n short: \"h\",\n long: c => (c > 1 ? \"heures\" : \"heure\"),\n names: [\"heures\", \"heure\", \"h\"],\n },\n day: {\n short: \"j\",\n long: c => (c > 1 ? \"jours\" : \"jour\"),\n names: [\"jours\", \"jour\", \"j\"],\n },\n week: {\n short: \"sem\",\n long: c => (c > 1 ? \"semaines\" : \"semaine\"),\n names: [\"semaines\", \"semaine\", \"sem\"],\n },\n month: {\n short: \"mo\",\n long: _ => \"mois\",\n names: [\"mois\", \"mo\"],\n },\n year: {\n short: \"an\",\n long: c => (c > 1 ? \"années\" : \"année\"),\n names: [\"années\", \"annees\", \"année\", \"annee\", \"ans\", \"an\"],\n },\n },\n },\n de: {\n units: {\n millisecond: {\n short: \"ms\",\n long: c => (c > 1 ? \"Millisekunden\" : \"Millisekunde\"),\n names: [\"millisekunden\", \"millisekunde\", \"ms\"],\n },\n second: {\n short: \"s\",\n long: c => (c > 1 ? \"Sekunden\" : \"Sekunde\"),\n names: [\"sekunden\", \"sekunde\", \"seks\", \"sek\", \"s\"],\n },\n minute: {\n short: \"m\",\n long: c => (c > 1 ? \"Minuten\" : \"Minute\"),\n names: [\"minuten\", \"minute\", \"mins\", \"min\", \"m\"],\n },\n hour: {\n short: \"h\",\n long: c => (c > 1 ? \"Stunden\" : \"Stunde\"),\n names: [\"stunden\", \"stunde\", \"hrs\", \"hr\", \"h\"],\n },\n day: {\n short: \"t\",\n long: c => (c > 1 ? \"Tage\" : \"Tag\"),\n names: [\"tage\", \"tag\", \"t\", \"d\"],\n },\n week: {\n short: \"w\",\n long: c => (c > 1 ? \"Wochen\" : \"Woche\"),\n names: [\"wochen\", \"woche\", \"wo\", \"w\"],\n },\n month: {\n short: \"mo\",\n long: c => (c > 1 ? \"Monate\" : \"Monat\"),\n names: [\"monate\", \"monat\", \"mon\", \"mo\"],\n },\n year: {\n short: \"j\",\n long: c => (c > 1 ? \"Jahre\" : \"Jahr\"),\n names: [\"jahre\", \"jahr\", \"j\", \"y\"],\n },\n },\n },\n es: {\n units: {\n millisecond: {\n short: \"ms\",\n long: c => (c > 1 ? \"milisegundos\" : \"milisegundo\"),\n names: [\"milisegundos\", \"milisegundo\", \"ms\"],\n },\n second: {\n short: \"s\",\n long: c => (c > 1 ? \"segundos\" : \"segundo\"),\n names: [\"segundos\", \"segundo\", \"s\"],\n },\n minute: {\n short: \"min\",\n long: c => (c > 1 ? \"minutos\" : \"minuto\"),\n names: [\"minutos\", \"minuto\", \"mins\", \"min\", \"m\"],\n },\n hour: {\n short: \"h\",\n long: c => (c > 1 ? \"horas\" : \"hora\"),\n names: [\"horas\", \"hora\", \"hrs\", \"hr\", \"h\"],\n },\n day: {\n short: \"d\",\n long: c => (c > 1 ? \"días\" : \"día\"),\n names: [\"días\", \"dias\", \"día\", \"dia\", \"d\"],\n },\n week: {\n short: \"sem\",\n long: c => (c > 1 ? \"semanas\" : \"semana\"),\n names: [\"semanas\", \"semana\", \"sem\"],\n },\n month: {\n short: \"mes\",\n long: c => (c > 1 ? \"meses\" : \"mes\"),\n names: [\"meses\", \"mes\", \"mo\"],\n },\n year: {\n short: \"a\",\n long: c => (c > 1 ? \"años\" : \"año\"),\n names: [\"años\", \"anos\", \"año\", \"ano\", \"a\"],\n },\n },\n },\n};\n\nfor (const [locale, definition] of Object.entries(defaultLocales)) {\n setLocale(locale, definition);\n}\n","import { Time } from \"@sodiumlabs/duration\";\n\n/**\n * The available time units.\n */\nexport const units = [\"millisecond\", \"second\", \"minute\", \"hour\", \"day\", \"week\", \"month\", \"year\"] as const;\n\n/**\n * A time unit.\n */\nexport type Unit = (typeof units)[number];\n\n/**\n * The values in milliseconds of each time unit.\n */\nexport const unitValues: Record<Unit, number> = {\n millisecond: Time.Millisecond,\n second: Time.Second,\n minute: Time.Minute,\n hour: Time.Hour,\n day: Time.Day,\n week: Time.Week,\n month: Time.Month,\n year: Time.Year,\n};\n","import { locales } from \"./locales\";\nimport { Unit, unitValues } from \"./units\";\n\n/**\n * The options.\n */\nexport interface Options {\n /**\n * Set to `true` to use verbose formatting. Defaults to `false`.\n */\n long?: boolean;\n /**\n * The locale. Defaults to `en`.\n */\n locale?: string;\n compound?: boolean;\n maxUnits?: number;\n}\n\n/**\n * Parse or format the given value.\n *\n * @param value - The string or number to convert\n * @param options - Options for the conversion\n * @throws Error if `value` is not a non-empty string or a number\n */\nexport function ms(value: string, options?: Options): number;\nexport function ms(value: number, options?: Options): string;\nexport function ms(value: string | number, options?: Options): number | string {\n if (typeof value === \"string\") {\n return parse(value, options);\n } else if (typeof value === \"number\") {\n return format(value, options);\n }\n throw new Error(`Value provided to ms() must be a string or number. value=${JSON.stringify(value)}`);\n}\n\n/**\n * Parse the given string and return milliseconds.\n *\n * @param str - A string to parse into milliseconds. Length must be in [1;100]\n * @returns The parsed value in milliseconds, or `NaN` if the string can't be parsed\n */\nexport function parse(str: string, options?: Options): number {\n if (typeof str !== \"string\" || str.length === 0 || str.length > 100) {\n throw new Error(\n `Value provided to ms.parse() must be a string with length between 1 and 99. value=${JSON.stringify(str)}`,\n );\n }\n\n const locale = locales.get(options?.locale ?? \"en\");\n if (!locale) {\n throw new Error(`Unknown locale \"${options?.locale}\"`);\n }\n\n let total = 0;\n let consumed = false;\n\n const tokenRegex = /(?<value>-?\\d*\\.?\\d+) *(?<unit>[a-zàèìòùáéíóúýâêîôûãñõäëïöüÿçµ]+)?/gi;\n let match: RegExpExecArray | null;\n let lastIndex = 0;\n\n while ((match = tokenRegex.exec(str)) !== null) {\n if (str.slice(lastIndex, match.index).trim().length !== 0) {\n return NaN;\n }\n\n const { value: rawValue, unit: rawUnit = \"ms\" } = match.groups as {\n value: string;\n unit: string | undefined;\n };\n\n const value = parseFloat(rawValue);\n if (Number.isNaN(value)) {\n return NaN;\n }\n\n const unit = !rawUnit ? \"millisecond\" : locale.mappedUnits.get(rawUnit.toLowerCase());\n if (!unit) {\n return NaN;\n }\n\n total += value * unitValues[unit];\n consumed = true;\n\n lastIndex = tokenRegex.lastIndex;\n }\n\n if (!consumed || str.slice(lastIndex).trim().length !== 0) {\n return NaN;\n }\n\n return total;\n}\n\n/**\n * Format the given integer as a string.\n *\n * @param ms - milliseconds\n * @param options - Options for the conversion\n * @returns The formatted string\n */\nexport function format(ms: number, options?: Options): string {\n if (typeof ms !== \"number\" || !Number.isFinite(ms)) {\n throw new Error(\"Value provided to ms.format() must be of type number.\");\n }\n\n const locale = locales.get(options?.locale ?? \"en\");\n if (!locale) {\n throw new Error(`Unknown locale \"${options?.locale}\"`);\n }\n\n const sign = ms < 0 ? \"-\" : \"\";\n let remaining = Math.abs(ms);\n\n // units sorted by descending size\n const units = Object.entries(locale.units)\n .map(([unit, def]) => ({\n unit,\n def,\n value: unitValues[unit as Unit],\n }))\n .sort((a, b) => b.value - a.value);\n\n // === simple mode (current behavior) ===\n if (!options?.compound) {\n for (const { def, value } of units) {\n if (remaining >= value) {\n const amount = Math.round(ms / value);\n\n if (options?.long) {\n return `${amount} ${def.long(Math.abs(amount))}`;\n }\n\n return `${amount}${def.short}`;\n }\n }\n\n const msDef = locale.units.millisecond;\n return options?.long ? `${ms} ${msDef.long(Math.abs(ms))}` : `${ms}${msDef.short}`;\n }\n\n // === compound mode ===\n const parts: string[] = [];\n let usedUnits = 0;\n\n for (const { def, value } of units) {\n if (remaining < value) continue;\n\n const amount = Math.floor(remaining / value);\n remaining -= amount * value;\n\n if (amount > 0) {\n parts.push(options?.long ? `${amount} ${def.long(amount)}` : `${amount}${def.short}`);\n\n usedUnits++;\n if (options?.maxUnits && usedUnits >= options.maxUnits) {\n break;\n }\n }\n }\n\n // fallback if everything was < 1ms\n if (parts.length === 0) {\n const msDef = locale.units.millisecond;\n parts.push(options?.long ? `0 ${msDef.long(0)}` : `0${msDef.short}`);\n }\n\n return sign + parts.join(options?.long ? \" \" : \"\");\n}\n"],"mappings":"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","names":["ms"]}
|
|
1
|
+
{"version":3,"sources":["../src/locales.ts","../src/units.ts","../src/index.ts"],"sourcesContent":["import { Unit } from \"./units\";\n\n/**\n * The options and translations of a locale.\n */\nexport interface LocaleDefinition {\n units: Record<Unit, UnitDefinition>;\n}\n\n/**\n * The translations of a time unit.\n */\nexport interface UnitDefinition {\n /**\n * The short name of the unit.\n */\n short: string;\n /**\n * The long name of the unit.\n *\n * @example\n * ```ts\n * long: c => (c > 1 ? \"plural form\" : \"singular form\")\n * ```\n *\n * @param c - The absolute value of the rounded number.\n */\n long: (c: number) => string;\n /**\n * The names of the unit. Should be all lowercase.\n *\n * @remarks\n * The values of `short` and `long` are not automatically added\n * to this array, so you probably want to add them here too\n * if you want them to be used in the parse function.\n */\n names: string[];\n}\n\nexport type CompleteLocaleDefinition = LocaleDefinition & {\n /**\n * A map from the translated unit name to the corresponding unit name.\n */\n mappedUnits: Map<string, Unit>;\n};\n\n/**\n * The locales definitions. You can add or edit a locale definition directly here,\n * or use {@link setLocale}.\n */\nexport const locales = new Map<string, CompleteLocaleDefinition>();\n\n/**\n * Add or edit a locale definition.\n *\n * @param locale - The locale (e.g. `it`)\n * @param definition - The definition\n */\nexport const setLocale = (locale: string, definition: LocaleDefinition) => {\n const mappedUnits = new Map<string, Unit>();\n for (const [unit, def] of Object.entries(definition.units) as [Unit, UnitDefinition][]) {\n for (const name of def.names) {\n mappedUnits.set(name.toLowerCase(), unit);\n }\n }\n\n locales.set(locale, {\n ...definition,\n mappedUnits,\n });\n};\n\n// Define the default locales\n\nconst defaultLocales: Record<string, LocaleDefinition> = {\n en: {\n units: {\n millisecond: {\n short: \"ms\",\n long: c => (c > 1 ? \"milliseconds\" : \"millisecond\"),\n names: [\"milliseconds\", \"millisecond\", \"msecs\", \"msec\", \"ms\"],\n },\n second: {\n short: \"s\",\n long: c => (c > 1 ? \"seconds\" : \"second\"),\n names: [\"seconds\", \"second\", \"secs\", \"sec\", \"s\"],\n },\n minute: {\n short: \"m\",\n long: c => (c > 1 ? \"minutes\" : \"minute\"),\n names: [\"minutes\", \"minute\", \"mins\", \"min\", \"m\"],\n },\n hour: {\n short: \"h\",\n long: c => (c > 1 ? \"hours\" : \"hour\"),\n names: [\"hours\", \"hour\", \"hrs\", \"hr\", \"h\"],\n },\n day: {\n short: \"d\",\n long: c => (c > 1 ? \"days\" : \"day\"),\n names: [\"days\", \"day\", \"d\"],\n },\n week: {\n short: \"w\",\n long: c => (c > 1 ? \"weeks\" : \"week\"),\n names: [\"weeks\", \"week\", \"w\"],\n },\n month: {\n short: \"mo\",\n long: c => (c > 1 ? \"months\" : \"month\"),\n names: [\"months\", \"month\", \"mo\"],\n },\n year: {\n short: \"y\",\n long: c => (c > 1 ? \"years\" : \"year\"),\n names: [\"years\", \"year\", \"yrs\", \"yr\", \"y\"],\n },\n },\n },\n fr: {\n units: {\n millisecond: {\n short: \"ms\",\n long: c => (c > 1 ? \"millisecondes\" : \"milliseconde\"),\n names: [\"millisecondes\", \"milliseconde\", \"ms\"],\n },\n second: {\n short: \"s\",\n long: c => (c > 1 ? \"secondes\" : \"seconde\"),\n names: [\"secondes\", \"seconde\", \"secs\", \"sec\", \"s\"],\n },\n minute: {\n short: \"m\",\n long: c => (c > 1 ? \"minutes\" : \"minute\"),\n names: [\"minutes\", \"minute\", \"mins\", \"min\", \"m\"],\n },\n hour: {\n short: \"h\",\n long: c => (c > 1 ? \"heures\" : \"heure\"),\n names: [\"heures\", \"heure\", \"h\"],\n },\n day: {\n short: \"j\",\n long: c => (c > 1 ? \"jours\" : \"jour\"),\n names: [\"jours\", \"jour\", \"j\"],\n },\n week: {\n short: \"sem\",\n long: c => (c > 1 ? \"semaines\" : \"semaine\"),\n names: [\"semaines\", \"semaine\", \"sem\"],\n },\n month: {\n short: \"mo\",\n long: _ => \"mois\",\n names: [\"mois\", \"mo\"],\n },\n year: {\n short: \"an\",\n long: c => (c > 1 ? \"années\" : \"année\"),\n names: [\"années\", \"annees\", \"année\", \"annee\", \"ans\", \"an\"],\n },\n },\n },\n de: {\n units: {\n millisecond: {\n short: \"ms\",\n long: c => (c > 1 ? \"Millisekunden\" : \"Millisekunde\"),\n names: [\"millisekunden\", \"millisekunde\", \"ms\"],\n },\n second: {\n short: \"s\",\n long: c => (c > 1 ? \"Sekunden\" : \"Sekunde\"),\n names: [\"sekunden\", \"sekunde\", \"seks\", \"sek\", \"s\"],\n },\n minute: {\n short: \"m\",\n long: c => (c > 1 ? \"Minuten\" : \"Minute\"),\n names: [\"minuten\", \"minute\", \"mins\", \"min\", \"m\"],\n },\n hour: {\n short: \"h\",\n long: c => (c > 1 ? \"Stunden\" : \"Stunde\"),\n names: [\"stunden\", \"stunde\", \"hrs\", \"hr\", \"h\"],\n },\n day: {\n short: \"t\",\n long: c => (c > 1 ? \"Tage\" : \"Tag\"),\n names: [\"tage\", \"tag\", \"t\", \"d\"],\n },\n week: {\n short: \"w\",\n long: c => (c > 1 ? \"Wochen\" : \"Woche\"),\n names: [\"wochen\", \"woche\", \"wo\", \"w\"],\n },\n month: {\n short: \"mo\",\n long: c => (c > 1 ? \"Monate\" : \"Monat\"),\n names: [\"monate\", \"monat\", \"mon\", \"mo\"],\n },\n year: {\n short: \"j\",\n long: c => (c > 1 ? \"Jahre\" : \"Jahr\"),\n names: [\"jahre\", \"jahr\", \"j\", \"y\"],\n },\n },\n },\n es: {\n units: {\n millisecond: {\n short: \"ms\",\n long: c => (c > 1 ? \"milisegundos\" : \"milisegundo\"),\n names: [\"milisegundos\", \"milisegundo\", \"ms\"],\n },\n second: {\n short: \"s\",\n long: c => (c > 1 ? \"segundos\" : \"segundo\"),\n names: [\"segundos\", \"segundo\", \"s\"],\n },\n minute: {\n short: \"min\",\n long: c => (c > 1 ? \"minutos\" : \"minuto\"),\n names: [\"minutos\", \"minuto\", \"mins\", \"min\", \"m\"],\n },\n hour: {\n short: \"h\",\n long: c => (c > 1 ? \"horas\" : \"hora\"),\n names: [\"horas\", \"hora\", \"hrs\", \"hr\", \"h\"],\n },\n day: {\n short: \"d\",\n long: c => (c > 1 ? \"días\" : \"día\"),\n names: [\"días\", \"dias\", \"día\", \"dia\", \"d\"],\n },\n week: {\n short: \"sem\",\n long: c => (c > 1 ? \"semanas\" : \"semana\"),\n names: [\"semanas\", \"semana\", \"sem\"],\n },\n month: {\n short: \"mes\",\n long: c => (c > 1 ? \"meses\" : \"mes\"),\n names: [\"meses\", \"mes\", \"mo\"],\n },\n year: {\n short: \"a\",\n long: c => (c > 1 ? \"años\" : \"año\"),\n names: [\"años\", \"anos\", \"año\", \"ano\", \"a\"],\n },\n },\n },\n};\n\nfor (const [locale, definition] of Object.entries(defaultLocales)) {\n setLocale(locale, definition);\n}\n","import { Time } from \"@sodiumlabs/duration\";\n\n/**\n * The available time units.\n */\nexport const units = [\"millisecond\", \"second\", \"minute\", \"hour\", \"day\", \"week\", \"month\", \"year\"] as const;\n\n/**\n * A time unit.\n */\nexport type Unit = (typeof units)[number];\n\n/**\n * The values in milliseconds of each time unit.\n */\nexport const unitValues: Record<Unit, number> = {\n millisecond: Time.Millisecond,\n second: Time.Second,\n minute: Time.Minute,\n hour: Time.Hour,\n day: Time.Day,\n week: Time.Week,\n month: Time.Month,\n year: Time.Year,\n};\n","import { locales } from \"./locales\";\nimport { Unit, unitValues } from \"./units\";\n\nexport type { Unit };\nexport * from \"./locales\";\nexport { units } from \"./units\";\n\n/**\n * The options.\n */\nexport interface Options {\n /**\n * Set to `true` to use verbose formatting. Defaults to `false`.\n */\n long?: boolean;\n /**\n * The locale. Defaults to `en`.\n */\n locale?: string;\n /**\n * Format the duration with multiple units, e.g. `2m50s100ms` instead of `2m`.\n */\n compound?: boolean;\n /**\n * The max amount of units used in the compound format.\n */\n maxUnits?: number;\n}\n\n/**\n * Parse or format the given value.\n *\n * **Note:** returns `NaN` if `value` was a string and could not be parsed.\n *\n * @param value - The string or number to convert\n * @param options - Options for the conversion\n * @throws Error if `value` is not a non-empty string or a number\n */\nexport function ms(value: string, options?: Options): number;\nexport function ms(value: number, options?: Options): string;\nexport function ms(value: string | number, options?: Options): number | string {\n if (typeof value === \"string\") {\n return parse(value, options);\n } else if (typeof value === \"number\") {\n return format(value, options);\n }\n throw new Error(`Value provided to ms() must be a string or number. value=${JSON.stringify(value)}`);\n}\n\n/**\n * Parse the given string and return milliseconds.\n *\n * @param str - A string to parse into milliseconds. Length must be in [1;100]\n * @returns The parsed value in milliseconds, or `NaN` if the string can't be parsed\n */\nexport function parse(str: string, options?: Options): number {\n if (typeof str !== \"string\" || str.length === 0 || str.length > 100) {\n throw new Error(\n `Value provided to ms.parse() must be a string with length between 1 and 99. value=${JSON.stringify(str)}`,\n );\n }\n\n const locale = locales.get(options?.locale ?? \"en\");\n if (!locale) {\n throw new Error(`Unknown locale \"${options?.locale}\"`);\n }\n\n let total = 0;\n let consumed = false;\n\n const tokenRegex = /(?<value>-?\\d*\\.?\\d+) *(?<unit>[a-zàèìòùáéíóúýâêîôûãñõäëïöüÿçµ]+)?/gi;\n let match: RegExpExecArray | null;\n let lastIndex = 0;\n\n while ((match = tokenRegex.exec(str)) !== null) {\n if (str.slice(lastIndex, match.index).trim().length !== 0) {\n return NaN;\n }\n\n const { value: rawValue, unit: rawUnit = \"ms\" } = match.groups as {\n value: string;\n unit: string | undefined;\n };\n\n const value = parseFloat(rawValue);\n if (Number.isNaN(value)) {\n return NaN;\n }\n\n const unit = !rawUnit ? \"millisecond\" : locale.mappedUnits.get(rawUnit.toLowerCase());\n if (!unit) {\n return NaN;\n }\n\n total += value * unitValues[unit];\n consumed = true;\n\n lastIndex = tokenRegex.lastIndex;\n }\n\n if (!consumed || str.slice(lastIndex).trim().length !== 0) {\n return NaN;\n }\n\n return total;\n}\n\n/**\n * Format the given integer as a string.\n *\n * @param ms - milliseconds\n * @param options - Options for the conversion\n * @returns The formatted string\n */\nexport function format(ms: number, options?: Options): string {\n if (typeof ms !== \"number\" || !Number.isFinite(ms)) {\n throw new Error(\"Value provided to ms.format() must be of type number.\");\n }\n\n const locale = locales.get(options?.locale ?? \"en\");\n if (!locale) {\n throw new Error(`Unknown locale \"${options?.locale}\"`);\n }\n\n const sign = ms < 0 ? \"-\" : \"\";\n let remaining = Math.abs(ms);\n\n // units sorted by descending size\n const units = Object.entries(locale.units)\n .map(([unit, def]) => ({\n unit,\n def,\n value: unitValues[unit as Unit],\n }))\n .sort((a, b) => b.value - a.value);\n\n // === simple mode (current behavior) ===\n if (!options?.compound) {\n for (const { def, value } of units) {\n if (remaining >= value) {\n const amount = Math.round(ms / value);\n\n if (options?.long) {\n return `${amount} ${def.long(Math.abs(amount))}`;\n }\n\n return `${amount}${def.short}`;\n }\n }\n\n const msDef = locale.units.millisecond;\n return options?.long ? `${ms} ${msDef.long(Math.abs(ms))}` : `${ms}${msDef.short}`;\n }\n\n // === compound mode ===\n const parts: string[] = [];\n let usedUnits = 0;\n\n for (const { def, value } of units) {\n if (remaining < value) continue;\n\n const amount = Math.floor(remaining / value);\n remaining -= amount * value;\n\n if (amount > 0) {\n parts.push(options?.long ? `${amount} ${def.long(amount)}` : `${amount}${def.short}`);\n\n usedUnits++;\n if (options?.maxUnits && usedUnits >= options.maxUnits) {\n break;\n }\n }\n }\n\n // fallback if everything was < 1ms\n if (parts.length === 0) {\n const msDef = locale.units.millisecond;\n parts.push(options?.long ? `0 ${msDef.long(0)}` : `0${msDef.short}`);\n }\n\n return sign + parts.join(options?.long ? \" \" : \"\");\n}\n"],"mappings":";;;;AAkDO,IAAM,UAAU,oBAAI,IAAsC;AAQ1D,IAAM,YAAY,wBAAC,QAAgB,eAAiC;AACvE,QAAM,cAAc,oBAAI,IAAkB;AAC1C,aAAW,CAAC,MAAM,GAAG,KAAK,OAAO,QAAQ,WAAW,KAAK,GAA+B;AACpF,eAAW,QAAQ,IAAI,OAAO;AAC1B,kBAAY,IAAI,KAAK,YAAY,GAAG,IAAI;AAAA,IAC5C;AAAA,EACJ;AAEA,UAAQ,IAAI,QAAQ;AAAA,IAChB,GAAG;AAAA,IACH;AAAA,EACJ,CAAC;AACL,GAZyB;AAgBzB,IAAM,iBAAmD;AAAA,EACrD,IAAI;AAAA,IACA,OAAO;AAAA,MACH,aAAa;AAAA,QACT,OAAO;AAAA,QACP,MAAM,8BAAM,IAAI,IAAI,iBAAiB,eAA/B;AAAA,QACN,OAAO,CAAC,gBAAgB,eAAe,SAAS,QAAQ,IAAI;AAAA,MAChE;AAAA,MACA,QAAQ;AAAA,QACJ,OAAO;AAAA,QACP,MAAM,8BAAM,IAAI,IAAI,YAAY,UAA1B;AAAA,QACN,OAAO,CAAC,WAAW,UAAU,QAAQ,OAAO,GAAG;AAAA,MACnD;AAAA,MACA,QAAQ;AAAA,QACJ,OAAO;AAAA,QACP,MAAM,8BAAM,IAAI,IAAI,YAAY,UAA1B;AAAA,QACN,OAAO,CAAC,WAAW,UAAU,QAAQ,OAAO,GAAG;AAAA,MACnD;AAAA,MACA,MAAM;AAAA,QACF,OAAO;AAAA,QACP,MAAM,8BAAM,IAAI,IAAI,UAAU,QAAxB;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ,OAAO,MAAM,GAAG;AAAA,MAC7C;AAAA,MACA,KAAK;AAAA,QACD,OAAO;AAAA,QACP,MAAM,8BAAM,IAAI,IAAI,SAAS,OAAvB;AAAA,QACN,OAAO,CAAC,QAAQ,OAAO,GAAG;AAAA,MAC9B;AAAA,MACA,MAAM;AAAA,QACF,OAAO;AAAA,QACP,MAAM,8BAAM,IAAI,IAAI,UAAU,QAAxB;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ,GAAG;AAAA,MAChC;AAAA,MACA,OAAO;AAAA,QACH,OAAO;AAAA,QACP,MAAM,8BAAM,IAAI,IAAI,WAAW,SAAzB;AAAA,QACN,OAAO,CAAC,UAAU,SAAS,IAAI;AAAA,MACnC;AAAA,MACA,MAAM;AAAA,QACF,OAAO;AAAA,QACP,MAAM,8BAAM,IAAI,IAAI,UAAU,QAAxB;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ,OAAO,MAAM,GAAG;AAAA,MAC7C;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,IAAI;AAAA,IACA,OAAO;AAAA,MACH,aAAa;AAAA,QACT,OAAO;AAAA,QACP,MAAM,8BAAM,IAAI,IAAI,kBAAkB,gBAAhC;AAAA,QACN,OAAO,CAAC,iBAAiB,gBAAgB,IAAI;AAAA,MACjD;AAAA,MACA,QAAQ;AAAA,QACJ,OAAO;AAAA,QACP,MAAM,8BAAM,IAAI,IAAI,aAAa,WAA3B;AAAA,QACN,OAAO,CAAC,YAAY,WAAW,QAAQ,OAAO,GAAG;AAAA,MACrD;AAAA,MACA,QAAQ;AAAA,QACJ,OAAO;AAAA,QACP,MAAM,8BAAM,IAAI,IAAI,YAAY,UAA1B;AAAA,QACN,OAAO,CAAC,WAAW,UAAU,QAAQ,OAAO,GAAG;AAAA,MACnD;AAAA,MACA,MAAM;AAAA,QACF,OAAO;AAAA,QACP,MAAM,8BAAM,IAAI,IAAI,WAAW,SAAzB;AAAA,QACN,OAAO,CAAC,UAAU,SAAS,GAAG;AAAA,MAClC;AAAA,MACA,KAAK;AAAA,QACD,OAAO;AAAA,QACP,MAAM,8BAAM,IAAI,IAAI,UAAU,QAAxB;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ,GAAG;AAAA,MAChC;AAAA,MACA,MAAM;AAAA,QACF,OAAO;AAAA,QACP,MAAM,8BAAM,IAAI,IAAI,aAAa,WAA3B;AAAA,QACN,OAAO,CAAC,YAAY,WAAW,KAAK;AAAA,MACxC;AAAA,MACA,OAAO;AAAA,QACH,OAAO;AAAA,QACP,MAAM,8BAAK,QAAL;AAAA,QACN,OAAO,CAAC,QAAQ,IAAI;AAAA,MACxB;AAAA,MACA,MAAM;AAAA,QACF,OAAO;AAAA,QACP,MAAM,8BAAM,IAAI,IAAI,cAAW,YAAzB;AAAA,QACN,OAAO,CAAC,aAAU,UAAU,YAAS,SAAS,OAAO,IAAI;AAAA,MAC7D;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,IAAI;AAAA,IACA,OAAO;AAAA,MACH,aAAa;AAAA,QACT,OAAO;AAAA,QACP,MAAM,8BAAM,IAAI,IAAI,kBAAkB,gBAAhC;AAAA,QACN,OAAO,CAAC,iBAAiB,gBAAgB,IAAI;AAAA,MACjD;AAAA,MACA,QAAQ;AAAA,QACJ,OAAO;AAAA,QACP,MAAM,8BAAM,IAAI,IAAI,aAAa,WAA3B;AAAA,QACN,OAAO,CAAC,YAAY,WAAW,QAAQ,OAAO,GAAG;AAAA,MACrD;AAAA,MACA,QAAQ;AAAA,QACJ,OAAO;AAAA,QACP,MAAM,8BAAM,IAAI,IAAI,YAAY,UAA1B;AAAA,QACN,OAAO,CAAC,WAAW,UAAU,QAAQ,OAAO,GAAG;AAAA,MACnD;AAAA,MACA,MAAM;AAAA,QACF,OAAO;AAAA,QACP,MAAM,8BAAM,IAAI,IAAI,YAAY,UAA1B;AAAA,QACN,OAAO,CAAC,WAAW,UAAU,OAAO,MAAM,GAAG;AAAA,MACjD;AAAA,MACA,KAAK;AAAA,QACD,OAAO;AAAA,QACP,MAAM,8BAAM,IAAI,IAAI,SAAS,OAAvB;AAAA,QACN,OAAO,CAAC,QAAQ,OAAO,KAAK,GAAG;AAAA,MACnC;AAAA,MACA,MAAM;AAAA,QACF,OAAO;AAAA,QACP,MAAM,8BAAM,IAAI,IAAI,WAAW,SAAzB;AAAA,QACN,OAAO,CAAC,UAAU,SAAS,MAAM,GAAG;AAAA,MACxC;AAAA,MACA,OAAO;AAAA,QACH,OAAO;AAAA,QACP,MAAM,8BAAM,IAAI,IAAI,WAAW,SAAzB;AAAA,QACN,OAAO,CAAC,UAAU,SAAS,OAAO,IAAI;AAAA,MAC1C;AAAA,MACA,MAAM;AAAA,QACF,OAAO;AAAA,QACP,MAAM,8BAAM,IAAI,IAAI,UAAU,QAAxB;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ,KAAK,GAAG;AAAA,MACrC;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,IAAI;AAAA,IACA,OAAO;AAAA,MACH,aAAa;AAAA,QACT,OAAO;AAAA,QACP,MAAM,8BAAM,IAAI,IAAI,iBAAiB,eAA/B;AAAA,QACN,OAAO,CAAC,gBAAgB,eAAe,IAAI;AAAA,MAC/C;AAAA,MACA,QAAQ;AAAA,QACJ,OAAO;AAAA,QACP,MAAM,8BAAM,IAAI,IAAI,aAAa,WAA3B;AAAA,QACN,OAAO,CAAC,YAAY,WAAW,GAAG;AAAA,MACtC;AAAA,MACA,QAAQ;AAAA,QACJ,OAAO;AAAA,QACP,MAAM,8BAAM,IAAI,IAAI,YAAY,UAA1B;AAAA,QACN,OAAO,CAAC,WAAW,UAAU,QAAQ,OAAO,GAAG;AAAA,MACnD;AAAA,MACA,MAAM;AAAA,QACF,OAAO;AAAA,QACP,MAAM,8BAAM,IAAI,IAAI,UAAU,QAAxB;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ,OAAO,MAAM,GAAG;AAAA,MAC7C;AAAA,MACA,KAAK;AAAA,QACD,OAAO;AAAA,QACP,MAAM,8BAAM,IAAI,IAAI,YAAS,UAAvB;AAAA,QACN,OAAO,CAAC,WAAQ,QAAQ,UAAO,OAAO,GAAG;AAAA,MAC7C;AAAA,MACA,MAAM;AAAA,QACF,OAAO;AAAA,QACP,MAAM,8BAAM,IAAI,IAAI,YAAY,UAA1B;AAAA,QACN,OAAO,CAAC,WAAW,UAAU,KAAK;AAAA,MACtC;AAAA,MACA,OAAO;AAAA,QACH,OAAO;AAAA,QACP,MAAM,8BAAM,IAAI,IAAI,UAAU,OAAxB;AAAA,QACN,OAAO,CAAC,SAAS,OAAO,IAAI;AAAA,MAChC;AAAA,MACA,MAAM;AAAA,QACF,OAAO;AAAA,QACP,MAAM,8BAAM,IAAI,IAAI,YAAS,UAAvB;AAAA,QACN,OAAO,CAAC,WAAQ,QAAQ,UAAO,OAAO,GAAG;AAAA,MAC7C;AAAA,IACJ;AAAA,EACJ;AACJ;AAEA,WAAW,CAAC,QAAQ,UAAU,KAAK,OAAO,QAAQ,cAAc,GAAG;AAC/D,YAAU,QAAQ,UAAU;AAChC;;;AC/PA,SAAS,YAAY;AAKd,IAAM,QAAQ,CAAC,eAAe,UAAU,UAAU,QAAQ,OAAO,QAAQ,SAAS,MAAM;AAUxF,IAAM,aAAmC;AAAA,EAC5C,aAAa,KAAK;AAAA,EAClB,QAAQ,KAAK;AAAA,EACb,QAAQ,KAAK;AAAA,EACb,MAAM,KAAK;AAAA,EACX,KAAK,KAAK;AAAA,EACV,MAAM,KAAK;AAAA,EACX,OAAO,KAAK;AAAA,EACZ,MAAM,KAAK;AACf;;;ACgBO,SAAS,GAAG,OAAwB,SAAoC;AAC3E,MAAI,OAAO,UAAU,UAAU;AAC3B,WAAO,MAAM,OAAO,OAAO;AAAA,EAC/B,WAAW,OAAO,UAAU,UAAU;AAClC,WAAO,OAAO,OAAO,OAAO;AAAA,EAChC;AACA,QAAM,IAAI,MAAM,4DAA4D,KAAK,UAAU,KAAK,CAAC,EAAE;AACvG;AAPgB;AAeT,SAAS,MAAM,KAAa,SAA2B;AAC1D,MAAI,OAAO,QAAQ,YAAY,IAAI,WAAW,KAAK,IAAI,SAAS,KAAK;AACjE,UAAM,IAAI;AAAA,MACN,qFAAqF,KAAK,UAAU,GAAG,CAAC;AAAA,IAC5G;AAAA,EACJ;AAEA,QAAM,SAAS,QAAQ,IAAI,SAAS,UAAU,IAAI;AAClD,MAAI,CAAC,QAAQ;AACT,UAAM,IAAI,MAAM,mBAAmB,SAAS,MAAM,GAAG;AAAA,EACzD;AAEA,MAAI,QAAQ;AACZ,MAAI,WAAW;AAEf,QAAM,aAAa;AACnB,MAAI;AACJ,MAAI,YAAY;AAEhB,UAAQ,QAAQ,WAAW,KAAK,GAAG,OAAO,MAAM;AAC5C,QAAI,IAAI,MAAM,WAAW,MAAM,KAAK,EAAE,KAAK,EAAE,WAAW,GAAG;AACvD,aAAO;AAAA,IACX;AAEA,UAAM,EAAE,OAAO,UAAU,MAAM,UAAU,KAAK,IAAI,MAAM;AAKxD,UAAM,QAAQ,WAAW,QAAQ;AACjC,QAAI,OAAO,MAAM,KAAK,GAAG;AACrB,aAAO;AAAA,IACX;AAEA,UAAM,OAAO,CAAC,UAAU,gBAAgB,OAAO,YAAY,IAAI,QAAQ,YAAY,CAAC;AACpF,QAAI,CAAC,MAAM;AACP,aAAO;AAAA,IACX;AAEA,aAAS,QAAQ,WAAW,IAAI;AAChC,eAAW;AAEX,gBAAY,WAAW;AAAA,EAC3B;AAEA,MAAI,CAAC,YAAY,IAAI,MAAM,SAAS,EAAE,KAAK,EAAE,WAAW,GAAG;AACvD,WAAO;AAAA,EACX;AAEA,SAAO;AACX;AAlDgB;AA2DT,SAAS,OAAOA,KAAY,SAA2B;AAC1D,MAAI,OAAOA,QAAO,YAAY,CAAC,OAAO,SAASA,GAAE,GAAG;AAChD,UAAM,IAAI,MAAM,uDAAuD;AAAA,EAC3E;AAEA,QAAM,SAAS,QAAQ,IAAI,SAAS,UAAU,IAAI;AAClD,MAAI,CAAC,QAAQ;AACT,UAAM,IAAI,MAAM,mBAAmB,SAAS,MAAM,GAAG;AAAA,EACzD;AAEA,QAAM,OAAOA,MAAK,IAAI,MAAM;AAC5B,MAAI,YAAY,KAAK,IAAIA,GAAE;AAG3B,QAAMC,SAAQ,OAAO,QAAQ,OAAO,KAAK,EACpC,IAAI,CAAC,CAAC,MAAM,GAAG,OAAO;AAAA,IACnB;AAAA,IACA;AAAA,IACA,OAAO,WAAW,IAAY;AAAA,EAClC,EAAE,EACD,KAAK,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK;AAGrC,MAAI,CAAC,SAAS,UAAU;AACpB,eAAW,EAAE,KAAK,MAAM,KAAKA,QAAO;AAChC,UAAI,aAAa,OAAO;AACpB,cAAM,SAAS,KAAK,MAAMD,MAAK,KAAK;AAEpC,YAAI,SAAS,MAAM;AACf,iBAAO,GAAG,MAAM,IAAI,IAAI,KAAK,KAAK,IAAI,MAAM,CAAC,CAAC;AAAA,QAClD;AAEA,eAAO,GAAG,MAAM,GAAG,IAAI,KAAK;AAAA,MAChC;AAAA,IACJ;AAEA,UAAM,QAAQ,OAAO,MAAM;AAC3B,WAAO,SAAS,OAAO,GAAGA,GAAE,IAAI,MAAM,KAAK,KAAK,IAAIA,GAAE,CAAC,CAAC,KAAK,GAAGA,GAAE,GAAG,MAAM,KAAK;AAAA,EACpF;AAGA,QAAM,QAAkB,CAAC;AACzB,MAAI,YAAY;AAEhB,aAAW,EAAE,KAAK,MAAM,KAAKC,QAAO;AAChC,QAAI,YAAY,MAAO;AAEvB,UAAM,SAAS,KAAK,MAAM,YAAY,KAAK;AAC3C,iBAAa,SAAS;AAEtB,QAAI,SAAS,GAAG;AACZ,YAAM,KAAK,SAAS,OAAO,GAAG,MAAM,IAAI,IAAI,KAAK,MAAM,CAAC,KAAK,GAAG,MAAM,GAAG,IAAI,KAAK,EAAE;AAEpF;AACA,UAAI,SAAS,YAAY,aAAa,QAAQ,UAAU;AACpD;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAGA,MAAI,MAAM,WAAW,GAAG;AACpB,UAAM,QAAQ,OAAO,MAAM;AAC3B,UAAM,KAAK,SAAS,OAAO,KAAK,MAAM,KAAK,CAAC,CAAC,KAAK,IAAI,MAAM,KAAK,EAAE;AAAA,EACvE;AAEA,SAAO,OAAO,MAAM,KAAK,SAAS,OAAO,MAAM,EAAE;AACrD;AAnEgB;","names":["ms","units"]}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json.schemastore.org/package.json",
|
|
3
3
|
"name": "@sodiumlabs/ms",
|
|
4
|
-
"version": "1.0.
|
|
4
|
+
"version": "1.0.1",
|
|
5
5
|
"description": "Utility to convert various time formats to milliseconds",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"enhanced",
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
}
|
|
44
44
|
},
|
|
45
45
|
"dependencies": {
|
|
46
|
-
"@sodiumlabs/duration": "^1.0.
|
|
46
|
+
"@sodiumlabs/duration": "^1.0.2"
|
|
47
47
|
},
|
|
48
48
|
"devDependencies": {
|
|
49
49
|
"@microsoft/api-extractor": "^7.55.2",
|