@tern-secure/shared 1.3.0-canary.v20251030165007 → 1.3.0-canary.v20251108045933

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cookie.ts"],"sourcesContent":["import type { CookieOptions, CookieStore } from '@tern-secure/types';\nimport Cookies from 'js-cookie';\n\ntype removeCookieParams = {\n path?: string;\n domain?: string;\n};\n\nexport function cookieHandler(cookieNanme: string) {\n return {\n set(value: string, options: Cookies.CookieAttributes = {}): void {\n Cookies.set(cookieNanme, value, options);\n },\n get() {\n return Cookies.get(cookieNanme);\n },\n remove(removeCookieParams?: removeCookieParams) {\n Cookies.remove(cookieNanme, removeCookieParams);\n },\n };\n}\n\nexport type CookieAttributes = Cookies.CookieAttributes;\n\nexport function serverCookieHandler(response: Response): CookieStore {\n const getCookie = async (name: string): Promise<{ value: string | undefined }> => {\n const cookies = response.headers.get('cookie');\n if (!cookies) return { value: undefined };\n\n const match = cookies.match(new RegExp(`${name}=([^;]+)`));\n return { value: match ? decodeURIComponent(match[1]) : undefined };\n };\n\n const setCookie = async (\n name: string,\n value: string,\n options: CookieOptions = {},\n ): Promise<void> => {\n const { maxAge, httpOnly = true, secure = true, sameSite = 'strict', path = '/' } = options;\n\n let cookieString = `${name}=${encodeURIComponent(value)}`;\n\n if (maxAge) cookieString += `; Max-Age=${maxAge}`;\n if (httpOnly) cookieString += '; HttpOnly';\n if (secure) cookieString += '; Secure';\n if (sameSite) cookieString += `; SameSite=${sameSite}`;\n if (path) cookieString += `; Path=${path}`;\n\n response.headers.append('Set-Cookie', cookieString);\n };\n\n const deleteCookie = async (name: string): Promise<void> => {\n await setCookie(name, '', {\n maxAge: 0,\n httpOnly: true,\n secure: true,\n path: '/',\n });\n };\n\n return {\n get: getCookie,\n set: setCookie,\n delete: deleteCookie,\n };\n}\n\nexport const getCookiePrefix = (): string => {\n const isProduction = process.env.NODE_ENV === 'production';\n return isProduction ? '__HOST-' : '__dev_';\n};\n\nexport const getCookieName = (baseName: string, prefix?: string): string => {\n return prefix ? `${prefix}${baseName}` : baseName;\n};\n\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,uBAAoB;AAOb,SAAS,cAAc,aAAqB;AACjD,SAAO;AAAA,IACL,IAAI,OAAe,UAAoC,CAAC,GAAS;AAC/D,uBAAAA,QAAQ,IAAI,aAAa,OAAO,OAAO;AAAA,IACzC;AAAA,IACA,MAAM;AACJ,aAAO,iBAAAA,QAAQ,IAAI,WAAW;AAAA,IAChC;AAAA,IACA,OAAO,oBAAyC;AAC9C,uBAAAA,QAAQ,OAAO,aAAa,kBAAkB;AAAA,IAChD;AAAA,EACF;AACF;AAIO,SAAS,oBAAoB,UAAiC;AACnE,QAAM,YAAY,OAAO,SAAyD;AAChF,UAAM,UAAU,SAAS,QAAQ,IAAI,QAAQ;AAC7C,QAAI,CAAC,QAAS,QAAO,EAAE,OAAO,OAAU;AAExC,UAAM,QAAQ,QAAQ,MAAM,IAAI,OAAO,GAAG,IAAI,UAAU,CAAC;AACzD,WAAO,EAAE,OAAO,QAAQ,mBAAmB,MAAM,CAAC,CAAC,IAAI,OAAU;AAAA,EACnE;AAEA,QAAM,YAAY,OAChB,MACA,OACA,UAAyB,CAAC,MACR;AAClB,UAAM,EAAE,QAAQ,WAAW,MAAM,SAAS,MAAM,WAAW,UAAU,OAAO,IAAI,IAAI;AAEpF,QAAI,eAAe,GAAG,IAAI,IAAI,mBAAmB,KAAK,CAAC;AAEvD,QAAI,OAAQ,iBAAgB,aAAa,MAAM;AAC/C,QAAI,SAAU,iBAAgB;AAC9B,QAAI,OAAQ,iBAAgB;AAC5B,QAAI,SAAU,iBAAgB,cAAc,QAAQ;AACpD,QAAI,KAAM,iBAAgB,UAAU,IAAI;AAExC,aAAS,QAAQ,OAAO,cAAc,YAAY;AAAA,EACpD;AAEA,QAAM,eAAe,OAAO,SAAgC;AAC1D,UAAM,UAAU,MAAM,IAAI;AAAA,MACxB,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,MAAM;AAAA,IACR,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,QAAQ;AAAA,EACV;AACF;AAEO,IAAM,kBAAkB,MAAc;AAC3C,QAAM,eAAe,QAAQ,IAAI,aAAa;AAC9C,SAAO,eAAe,YAAY;AACpC;AAEO,IAAM,gBAAgB,CAAC,UAAkB,WAA4B;AAC1E,SAAO,SAAS,GAAG,MAAM,GAAG,QAAQ,KAAK;AAC3C;","names":["Cookies"]}
1
+ {"version":3,"sources":["../src/cookie.ts"],"sourcesContent":["import type { CookieOptions, CookieStore } from '@tern-secure/types';\nimport Cookies from 'js-cookie';\n\ntype removeCookieParams = {\n path?: string;\n domain?: string;\n};\n\nexport function cookieHandler(cookieNanme: string) {\n return {\n set(value: string, options: Cookies.CookieAttributes = {}): void {\n Cookies.set(cookieNanme, value, options);\n },\n get() {\n return Cookies.get(cookieNanme);\n },\n remove(removeCookieParams?: removeCookieParams) {\n Cookies.remove(cookieNanme, removeCookieParams);\n },\n };\n}\n\nexport type CookieAttributes = Cookies.CookieAttributes;\n\nexport function serverCookieHandler(response: Response): CookieStore {\n const getCookie = async (name: string): Promise<{ value: string | undefined }> => {\n const cookies = response.headers.get('cookie');\n if (!cookies) return { value: undefined };\n\n const match = cookies.match(new RegExp(`${name}=([^;]+)`));\n return { value: match ? decodeURIComponent(match[1]) : undefined };\n };\n\n const setCookie = async (\n name: string,\n value: string,\n options: CookieOptions = {},\n ): Promise<void> => {\n const { maxAge, httpOnly = true, secure = true, sameSite = 'strict', path = '/' } = options;\n\n let cookieString = `${name}=${encodeURIComponent(value)}`;\n\n if (maxAge) cookieString += `; Max-Age=${maxAge}`;\n if (httpOnly) cookieString += '; HttpOnly';\n if (secure) cookieString += '; Secure';\n if (sameSite) cookieString += `; SameSite=${sameSite}`;\n if (path) cookieString += `; Path=${path}`;\n\n response.headers.append('Set-Cookie', cookieString);\n };\n\n const deleteCookie = async (name: string): Promise<void> => {\n await setCookie(name, '', {\n maxAge: 0,\n httpOnly: true,\n secure: true,\n path: '/',\n });\n };\n\n return {\n get: getCookie,\n set: setCookie,\n delete: deleteCookie,\n };\n}\n\nexport const getCookiePrefix = (): string => {\n const isProduction = process.env.NODE_ENV === 'production';\n return isProduction ? '__HOST-' : '__dev_';\n};\n\nexport const getCookieName = (baseName: string, prefix?: string): string => {\n return prefix ? `${prefix}${baseName}` : baseName;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,uBAAoB;AAOb,SAAS,cAAc,aAAqB;AACjD,SAAO;AAAA,IACL,IAAI,OAAe,UAAoC,CAAC,GAAS;AAC/D,uBAAAA,QAAQ,IAAI,aAAa,OAAO,OAAO;AAAA,IACzC;AAAA,IACA,MAAM;AACJ,aAAO,iBAAAA,QAAQ,IAAI,WAAW;AAAA,IAChC;AAAA,IACA,OAAO,oBAAyC;AAC9C,uBAAAA,QAAQ,OAAO,aAAa,kBAAkB;AAAA,IAChD;AAAA,EACF;AACF;AAIO,SAAS,oBAAoB,UAAiC;AACnE,QAAM,YAAY,OAAO,SAAyD;AAChF,UAAM,UAAU,SAAS,QAAQ,IAAI,QAAQ;AAC7C,QAAI,CAAC,QAAS,QAAO,EAAE,OAAO,OAAU;AAExC,UAAM,QAAQ,QAAQ,MAAM,IAAI,OAAO,GAAG,IAAI,UAAU,CAAC;AACzD,WAAO,EAAE,OAAO,QAAQ,mBAAmB,MAAM,CAAC,CAAC,IAAI,OAAU;AAAA,EACnE;AAEA,QAAM,YAAY,OAChB,MACA,OACA,UAAyB,CAAC,MACR;AAClB,UAAM,EAAE,QAAQ,WAAW,MAAM,SAAS,MAAM,WAAW,UAAU,OAAO,IAAI,IAAI;AAEpF,QAAI,eAAe,GAAG,IAAI,IAAI,mBAAmB,KAAK,CAAC;AAEvD,QAAI,OAAQ,iBAAgB,aAAa,MAAM;AAC/C,QAAI,SAAU,iBAAgB;AAC9B,QAAI,OAAQ,iBAAgB;AAC5B,QAAI,SAAU,iBAAgB,cAAc,QAAQ;AACpD,QAAI,KAAM,iBAAgB,UAAU,IAAI;AAExC,aAAS,QAAQ,OAAO,cAAc,YAAY;AAAA,EACpD;AAEA,QAAM,eAAe,OAAO,SAAgC;AAC1D,UAAM,UAAU,MAAM,IAAI;AAAA,MACxB,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,MAAM;AAAA,IACR,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,QAAQ;AAAA,EACV;AACF;AAEO,IAAM,kBAAkB,MAAc;AAC3C,QAAM,eAAe,QAAQ,IAAI,aAAa;AAC9C,SAAO,eAAe,YAAY;AACpC;AAEO,IAAM,gBAAgB,CAAC,UAAkB,WAA4B;AAC1E,SAAO,SAAS,GAAG,MAAM,GAAG,QAAQ,KAAK;AAC3C;","names":["Cookies"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cookie.ts"],"sourcesContent":["import type { CookieOptions, CookieStore } from '@tern-secure/types';\nimport Cookies from 'js-cookie';\n\ntype removeCookieParams = {\n path?: string;\n domain?: string;\n};\n\nexport function cookieHandler(cookieNanme: string) {\n return {\n set(value: string, options: Cookies.CookieAttributes = {}): void {\n Cookies.set(cookieNanme, value, options);\n },\n get() {\n return Cookies.get(cookieNanme);\n },\n remove(removeCookieParams?: removeCookieParams) {\n Cookies.remove(cookieNanme, removeCookieParams);\n },\n };\n}\n\nexport type CookieAttributes = Cookies.CookieAttributes;\n\nexport function serverCookieHandler(response: Response): CookieStore {\n const getCookie = async (name: string): Promise<{ value: string | undefined }> => {\n const cookies = response.headers.get('cookie');\n if (!cookies) return { value: undefined };\n\n const match = cookies.match(new RegExp(`${name}=([^;]+)`));\n return { value: match ? decodeURIComponent(match[1]) : undefined };\n };\n\n const setCookie = async (\n name: string,\n value: string,\n options: CookieOptions = {},\n ): Promise<void> => {\n const { maxAge, httpOnly = true, secure = true, sameSite = 'strict', path = '/' } = options;\n\n let cookieString = `${name}=${encodeURIComponent(value)}`;\n\n if (maxAge) cookieString += `; Max-Age=${maxAge}`;\n if (httpOnly) cookieString += '; HttpOnly';\n if (secure) cookieString += '; Secure';\n if (sameSite) cookieString += `; SameSite=${sameSite}`;\n if (path) cookieString += `; Path=${path}`;\n\n response.headers.append('Set-Cookie', cookieString);\n };\n\n const deleteCookie = async (name: string): Promise<void> => {\n await setCookie(name, '', {\n maxAge: 0,\n httpOnly: true,\n secure: true,\n path: '/',\n });\n };\n\n return {\n get: getCookie,\n set: setCookie,\n delete: deleteCookie,\n };\n}\n\nexport const getCookiePrefix = (): string => {\n const isProduction = process.env.NODE_ENV === 'production';\n return isProduction ? '__HOST-' : '__dev_';\n};\n\nexport const getCookieName = (baseName: string, prefix?: string): string => {\n return prefix ? `${prefix}${baseName}` : baseName;\n};\n\n"],"mappings":";AACA,OAAO,aAAa;AAOb,SAAS,cAAc,aAAqB;AACjD,SAAO;AAAA,IACL,IAAI,OAAe,UAAoC,CAAC,GAAS;AAC/D,cAAQ,IAAI,aAAa,OAAO,OAAO;AAAA,IACzC;AAAA,IACA,MAAM;AACJ,aAAO,QAAQ,IAAI,WAAW;AAAA,IAChC;AAAA,IACA,OAAO,oBAAyC;AAC9C,cAAQ,OAAO,aAAa,kBAAkB;AAAA,IAChD;AAAA,EACF;AACF;AAIO,SAAS,oBAAoB,UAAiC;AACnE,QAAM,YAAY,OAAO,SAAyD;AAChF,UAAM,UAAU,SAAS,QAAQ,IAAI,QAAQ;AAC7C,QAAI,CAAC,QAAS,QAAO,EAAE,OAAO,OAAU;AAExC,UAAM,QAAQ,QAAQ,MAAM,IAAI,OAAO,GAAG,IAAI,UAAU,CAAC;AACzD,WAAO,EAAE,OAAO,QAAQ,mBAAmB,MAAM,CAAC,CAAC,IAAI,OAAU;AAAA,EACnE;AAEA,QAAM,YAAY,OAChB,MACA,OACA,UAAyB,CAAC,MACR;AAClB,UAAM,EAAE,QAAQ,WAAW,MAAM,SAAS,MAAM,WAAW,UAAU,OAAO,IAAI,IAAI;AAEpF,QAAI,eAAe,GAAG,IAAI,IAAI,mBAAmB,KAAK,CAAC;AAEvD,QAAI,OAAQ,iBAAgB,aAAa,MAAM;AAC/C,QAAI,SAAU,iBAAgB;AAC9B,QAAI,OAAQ,iBAAgB;AAC5B,QAAI,SAAU,iBAAgB,cAAc,QAAQ;AACpD,QAAI,KAAM,iBAAgB,UAAU,IAAI;AAExC,aAAS,QAAQ,OAAO,cAAc,YAAY;AAAA,EACpD;AAEA,QAAM,eAAe,OAAO,SAAgC;AAC1D,UAAM,UAAU,MAAM,IAAI;AAAA,MACxB,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,MAAM;AAAA,IACR,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,QAAQ;AAAA,EACV;AACF;AAEO,IAAM,kBAAkB,MAAc;AAC3C,QAAM,eAAe,QAAQ,IAAI,aAAa;AAC9C,SAAO,eAAe,YAAY;AACpC;AAEO,IAAM,gBAAgB,CAAC,UAAkB,WAA4B;AAC1E,SAAO,SAAS,GAAG,MAAM,GAAG,QAAQ,KAAK;AAC3C;","names":[]}
1
+ {"version":3,"sources":["../src/cookie.ts"],"sourcesContent":["import type { CookieOptions, CookieStore } from '@tern-secure/types';\nimport Cookies from 'js-cookie';\n\ntype removeCookieParams = {\n path?: string;\n domain?: string;\n};\n\nexport function cookieHandler(cookieNanme: string) {\n return {\n set(value: string, options: Cookies.CookieAttributes = {}): void {\n Cookies.set(cookieNanme, value, options);\n },\n get() {\n return Cookies.get(cookieNanme);\n },\n remove(removeCookieParams?: removeCookieParams) {\n Cookies.remove(cookieNanme, removeCookieParams);\n },\n };\n}\n\nexport type CookieAttributes = Cookies.CookieAttributes;\n\nexport function serverCookieHandler(response: Response): CookieStore {\n const getCookie = async (name: string): Promise<{ value: string | undefined }> => {\n const cookies = response.headers.get('cookie');\n if (!cookies) return { value: undefined };\n\n const match = cookies.match(new RegExp(`${name}=([^;]+)`));\n return { value: match ? decodeURIComponent(match[1]) : undefined };\n };\n\n const setCookie = async (\n name: string,\n value: string,\n options: CookieOptions = {},\n ): Promise<void> => {\n const { maxAge, httpOnly = true, secure = true, sameSite = 'strict', path = '/' } = options;\n\n let cookieString = `${name}=${encodeURIComponent(value)}`;\n\n if (maxAge) cookieString += `; Max-Age=${maxAge}`;\n if (httpOnly) cookieString += '; HttpOnly';\n if (secure) cookieString += '; Secure';\n if (sameSite) cookieString += `; SameSite=${sameSite}`;\n if (path) cookieString += `; Path=${path}`;\n\n response.headers.append('Set-Cookie', cookieString);\n };\n\n const deleteCookie = async (name: string): Promise<void> => {\n await setCookie(name, '', {\n maxAge: 0,\n httpOnly: true,\n secure: true,\n path: '/',\n });\n };\n\n return {\n get: getCookie,\n set: setCookie,\n delete: deleteCookie,\n };\n}\n\nexport const getCookiePrefix = (): string => {\n const isProduction = process.env.NODE_ENV === 'production';\n return isProduction ? '__HOST-' : '__dev_';\n};\n\nexport const getCookieName = (baseName: string, prefix?: string): string => {\n return prefix ? `${prefix}${baseName}` : baseName;\n};\n"],"mappings":";AACA,OAAO,aAAa;AAOb,SAAS,cAAc,aAAqB;AACjD,SAAO;AAAA,IACL,IAAI,OAAe,UAAoC,CAAC,GAAS;AAC/D,cAAQ,IAAI,aAAa,OAAO,OAAO;AAAA,IACzC;AAAA,IACA,MAAM;AACJ,aAAO,QAAQ,IAAI,WAAW;AAAA,IAChC;AAAA,IACA,OAAO,oBAAyC;AAC9C,cAAQ,OAAO,aAAa,kBAAkB;AAAA,IAChD;AAAA,EACF;AACF;AAIO,SAAS,oBAAoB,UAAiC;AACnE,QAAM,YAAY,OAAO,SAAyD;AAChF,UAAM,UAAU,SAAS,QAAQ,IAAI,QAAQ;AAC7C,QAAI,CAAC,QAAS,QAAO,EAAE,OAAO,OAAU;AAExC,UAAM,QAAQ,QAAQ,MAAM,IAAI,OAAO,GAAG,IAAI,UAAU,CAAC;AACzD,WAAO,EAAE,OAAO,QAAQ,mBAAmB,MAAM,CAAC,CAAC,IAAI,OAAU;AAAA,EACnE;AAEA,QAAM,YAAY,OAChB,MACA,OACA,UAAyB,CAAC,MACR;AAClB,UAAM,EAAE,QAAQ,WAAW,MAAM,SAAS,MAAM,WAAW,UAAU,OAAO,IAAI,IAAI;AAEpF,QAAI,eAAe,GAAG,IAAI,IAAI,mBAAmB,KAAK,CAAC;AAEvD,QAAI,OAAQ,iBAAgB,aAAa,MAAM;AAC/C,QAAI,SAAU,iBAAgB;AAC9B,QAAI,OAAQ,iBAAgB;AAC5B,QAAI,SAAU,iBAAgB,cAAc,QAAQ;AACpD,QAAI,KAAM,iBAAgB,UAAU,IAAI;AAExC,aAAS,QAAQ,OAAO,cAAc,YAAY;AAAA,EACpD;AAEA,QAAM,eAAe,OAAO,SAAgC;AAC1D,UAAM,UAAU,MAAM,IAAI;AAAA,MACxB,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,MAAM;AAAA,IACR,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,QAAQ;AAAA,EACV;AACF;AAEO,IAAM,kBAAkB,MAAc;AAC3C,QAAM,eAAe,QAAQ,IAAI,aAAa;AAC9C,SAAO,eAAe,YAAY;AACpC;AAEO,IAAM,gBAAgB,CAAC,UAAkB,WAA4B;AAC1E,SAAO,SAAS,GAAG,MAAM,GAAG,QAAQ,KAAK;AAC3C;","names":[]}
@@ -0,0 +1,18 @@
1
+ declare function dateTo12HourTime(date: Date): string;
2
+ declare function differenceInCalendarDays(a: Date, b: Date, { absolute }?: {
3
+ absolute?: boolean | undefined;
4
+ }): number;
5
+ declare function normalizeDate(d: Date | string | number): Date;
6
+ type DateFormatRelativeParams = {
7
+ date: Date | string | number;
8
+ relativeTo: Date | string | number;
9
+ };
10
+ type RelativeDateCase = 'previous6Days' | 'lastDay' | 'sameDay' | 'nextDay' | 'next6Days' | 'other';
11
+ type RelativeDateReturn = {
12
+ relativeDateCase: RelativeDateCase;
13
+ date: Date;
14
+ } | null;
15
+ declare function formatRelative(props: DateFormatRelativeParams): RelativeDateReturn;
16
+ declare function addYears(initialDate: Date | number | string, yearsToAdd: number): Date;
17
+
18
+ export { type RelativeDateCase, addYears, dateTo12HourTime, differenceInCalendarDays, formatRelative, normalizeDate };
package/dist/date.d.ts ADDED
@@ -0,0 +1,18 @@
1
+ declare function dateTo12HourTime(date: Date): string;
2
+ declare function differenceInCalendarDays(a: Date, b: Date, { absolute }?: {
3
+ absolute?: boolean | undefined;
4
+ }): number;
5
+ declare function normalizeDate(d: Date | string | number): Date;
6
+ type DateFormatRelativeParams = {
7
+ date: Date | string | number;
8
+ relativeTo: Date | string | number;
9
+ };
10
+ type RelativeDateCase = 'previous6Days' | 'lastDay' | 'sameDay' | 'nextDay' | 'next6Days' | 'other';
11
+ type RelativeDateReturn = {
12
+ relativeDateCase: RelativeDateCase;
13
+ date: Date;
14
+ } | null;
15
+ declare function formatRelative(props: DateFormatRelativeParams): RelativeDateReturn;
16
+ declare function addYears(initialDate: Date | number | string, yearsToAdd: number): Date;
17
+
18
+ export { type RelativeDateCase, addYears, dateTo12HourTime, differenceInCalendarDays, formatRelative, normalizeDate };
package/dist/date.js ADDED
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/date.ts
21
+ var date_exports = {};
22
+ __export(date_exports, {
23
+ addYears: () => addYears,
24
+ dateTo12HourTime: () => dateTo12HourTime,
25
+ differenceInCalendarDays: () => differenceInCalendarDays,
26
+ formatRelative: () => formatRelative,
27
+ normalizeDate: () => normalizeDate
28
+ });
29
+ module.exports = __toCommonJS(date_exports);
30
+ var MILLISECONDS_IN_DAY = 864e5;
31
+ function dateTo12HourTime(date) {
32
+ if (!date) {
33
+ return "";
34
+ }
35
+ return date.toLocaleString("en-US", {
36
+ hour: "2-digit",
37
+ minute: "numeric",
38
+ hour12: true
39
+ });
40
+ }
41
+ function differenceInCalendarDays(a, b, { absolute = true } = {}) {
42
+ if (!a || !b) {
43
+ return 0;
44
+ }
45
+ const utcA = Date.UTC(a.getFullYear(), a.getMonth(), a.getDate());
46
+ const utcB = Date.UTC(b.getFullYear(), b.getMonth(), b.getDate());
47
+ const diff = Math.floor((utcB - utcA) / MILLISECONDS_IN_DAY);
48
+ return absolute ? Math.abs(diff) : diff;
49
+ }
50
+ function normalizeDate(d) {
51
+ try {
52
+ return new Date(d || /* @__PURE__ */ new Date());
53
+ } catch {
54
+ return /* @__PURE__ */ new Date();
55
+ }
56
+ }
57
+ function formatRelative(props) {
58
+ const { date, relativeTo } = props;
59
+ if (!date || !relativeTo) {
60
+ return null;
61
+ }
62
+ const a = normalizeDate(date);
63
+ const b = normalizeDate(relativeTo);
64
+ const differenceInDays = differenceInCalendarDays(b, a, { absolute: false });
65
+ if (differenceInDays < -6) {
66
+ return { relativeDateCase: "other", date: a };
67
+ }
68
+ if (differenceInDays < -1) {
69
+ return { relativeDateCase: "previous6Days", date: a };
70
+ }
71
+ if (differenceInDays === -1) {
72
+ return { relativeDateCase: "lastDay", date: a };
73
+ }
74
+ if (differenceInDays === 0) {
75
+ return { relativeDateCase: "sameDay", date: a };
76
+ }
77
+ if (differenceInDays === 1) {
78
+ return { relativeDateCase: "nextDay", date: a };
79
+ }
80
+ if (differenceInDays < 7) {
81
+ return { relativeDateCase: "next6Days", date: a };
82
+ }
83
+ return { relativeDateCase: "other", date: a };
84
+ }
85
+ function addYears(initialDate, yearsToAdd) {
86
+ const date = normalizeDate(initialDate);
87
+ date.setFullYear(date.getFullYear() + yearsToAdd);
88
+ return date;
89
+ }
90
+ // Annotate the CommonJS export names for ESM import in node:
91
+ 0 && (module.exports = {
92
+ addYears,
93
+ dateTo12HourTime,
94
+ differenceInCalendarDays,
95
+ formatRelative,
96
+ normalizeDate
97
+ });
98
+ //# sourceMappingURL=date.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/date.ts"],"sourcesContent":["const MILLISECONDS_IN_DAY = 86400000;\n\nexport function dateTo12HourTime(date: Date): string {\n if (!date) {\n return '';\n }\n return date.toLocaleString('en-US', {\n hour: '2-digit',\n minute: 'numeric',\n hour12: true,\n });\n}\n\nexport function differenceInCalendarDays(a: Date, b: Date, { absolute = true } = {}): number {\n if (!a || !b) {\n return 0;\n }\n const utcA = Date.UTC(a.getFullYear(), a.getMonth(), a.getDate());\n const utcB = Date.UTC(b.getFullYear(), b.getMonth(), b.getDate());\n const diff = Math.floor((utcB - utcA) / MILLISECONDS_IN_DAY);\n return absolute ? Math.abs(diff) : diff;\n}\n\nexport function normalizeDate(d: Date | string | number): Date {\n try {\n return new Date(d || new Date());\n } catch {\n return new Date();\n }\n}\n\ntype DateFormatRelativeParams = {\n date: Date | string | number;\n relativeTo: Date | string | number;\n};\n\nexport type RelativeDateCase = 'previous6Days' | 'lastDay' | 'sameDay' | 'nextDay' | 'next6Days' | 'other';\ntype RelativeDateReturn = { relativeDateCase: RelativeDateCase; date: Date } | null;\n\nexport function formatRelative(props: DateFormatRelativeParams): RelativeDateReturn {\n const { date, relativeTo } = props;\n if (!date || !relativeTo) {\n return null;\n }\n const a = normalizeDate(date);\n const b = normalizeDate(relativeTo);\n const differenceInDays = differenceInCalendarDays(b, a, { absolute: false });\n\n if (differenceInDays < -6) {\n return { relativeDateCase: 'other', date: a };\n }\n if (differenceInDays < -1) {\n return { relativeDateCase: 'previous6Days', date: a };\n }\n if (differenceInDays === -1) {\n return { relativeDateCase: 'lastDay', date: a };\n }\n if (differenceInDays === 0) {\n return { relativeDateCase: 'sameDay', date: a };\n }\n if (differenceInDays === 1) {\n return { relativeDateCase: 'nextDay', date: a };\n }\n if (differenceInDays < 7) {\n return { relativeDateCase: 'next6Days', date: a };\n }\n return { relativeDateCase: 'other', date: a };\n}\n\nexport function addYears(initialDate: Date | number | string, yearsToAdd: number): Date {\n const date = normalizeDate(initialDate);\n date.setFullYear(date.getFullYear() + yearsToAdd);\n return date;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAM,sBAAsB;AAErB,SAAS,iBAAiB,MAAoB;AACnD,MAAI,CAAC,MAAM;AACT,WAAO;AAAA,EACT;AACA,SAAO,KAAK,eAAe,SAAS;AAAA,IAClC,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV,CAAC;AACH;AAEO,SAAS,yBAAyB,GAAS,GAAS,EAAE,WAAW,KAAK,IAAI,CAAC,GAAW;AAC3F,MAAI,CAAC,KAAK,CAAC,GAAG;AACZ,WAAO;AAAA,EACT;AACA,QAAM,OAAO,KAAK,IAAI,EAAE,YAAY,GAAG,EAAE,SAAS,GAAG,EAAE,QAAQ,CAAC;AAChE,QAAM,OAAO,KAAK,IAAI,EAAE,YAAY,GAAG,EAAE,SAAS,GAAG,EAAE,QAAQ,CAAC;AAChE,QAAM,OAAO,KAAK,OAAO,OAAO,QAAQ,mBAAmB;AAC3D,SAAO,WAAW,KAAK,IAAI,IAAI,IAAI;AACrC;AAEO,SAAS,cAAc,GAAiC;AAC7D,MAAI;AACF,WAAO,IAAI,KAAK,KAAK,oBAAI,KAAK,CAAC;AAAA,EACjC,QAAQ;AACN,WAAO,oBAAI,KAAK;AAAA,EAClB;AACF;AAUO,SAAS,eAAe,OAAqD;AAClF,QAAM,EAAE,MAAM,WAAW,IAAI;AAC7B,MAAI,CAAC,QAAQ,CAAC,YAAY;AACxB,WAAO;AAAA,EACT;AACA,QAAM,IAAI,cAAc,IAAI;AAC5B,QAAM,IAAI,cAAc,UAAU;AAClC,QAAM,mBAAmB,yBAAyB,GAAG,GAAG,EAAE,UAAU,MAAM,CAAC;AAE3E,MAAI,mBAAmB,IAAI;AACzB,WAAO,EAAE,kBAAkB,SAAS,MAAM,EAAE;AAAA,EAC9C;AACA,MAAI,mBAAmB,IAAI;AACzB,WAAO,EAAE,kBAAkB,iBAAiB,MAAM,EAAE;AAAA,EACtD;AACA,MAAI,qBAAqB,IAAI;AAC3B,WAAO,EAAE,kBAAkB,WAAW,MAAM,EAAE;AAAA,EAChD;AACA,MAAI,qBAAqB,GAAG;AAC1B,WAAO,EAAE,kBAAkB,WAAW,MAAM,EAAE;AAAA,EAChD;AACA,MAAI,qBAAqB,GAAG;AAC1B,WAAO,EAAE,kBAAkB,WAAW,MAAM,EAAE;AAAA,EAChD;AACA,MAAI,mBAAmB,GAAG;AACxB,WAAO,EAAE,kBAAkB,aAAa,MAAM,EAAE;AAAA,EAClD;AACA,SAAO,EAAE,kBAAkB,SAAS,MAAM,EAAE;AAC9C;AAEO,SAAS,SAAS,aAAqC,YAA0B;AACtF,QAAM,OAAO,cAAc,WAAW;AACtC,OAAK,YAAY,KAAK,YAAY,IAAI,UAAU;AAChD,SAAO;AACT;","names":[]}
package/dist/date.mjs ADDED
@@ -0,0 +1,69 @@
1
+ // src/date.ts
2
+ var MILLISECONDS_IN_DAY = 864e5;
3
+ function dateTo12HourTime(date) {
4
+ if (!date) {
5
+ return "";
6
+ }
7
+ return date.toLocaleString("en-US", {
8
+ hour: "2-digit",
9
+ minute: "numeric",
10
+ hour12: true
11
+ });
12
+ }
13
+ function differenceInCalendarDays(a, b, { absolute = true } = {}) {
14
+ if (!a || !b) {
15
+ return 0;
16
+ }
17
+ const utcA = Date.UTC(a.getFullYear(), a.getMonth(), a.getDate());
18
+ const utcB = Date.UTC(b.getFullYear(), b.getMonth(), b.getDate());
19
+ const diff = Math.floor((utcB - utcA) / MILLISECONDS_IN_DAY);
20
+ return absolute ? Math.abs(diff) : diff;
21
+ }
22
+ function normalizeDate(d) {
23
+ try {
24
+ return new Date(d || /* @__PURE__ */ new Date());
25
+ } catch {
26
+ return /* @__PURE__ */ new Date();
27
+ }
28
+ }
29
+ function formatRelative(props) {
30
+ const { date, relativeTo } = props;
31
+ if (!date || !relativeTo) {
32
+ return null;
33
+ }
34
+ const a = normalizeDate(date);
35
+ const b = normalizeDate(relativeTo);
36
+ const differenceInDays = differenceInCalendarDays(b, a, { absolute: false });
37
+ if (differenceInDays < -6) {
38
+ return { relativeDateCase: "other", date: a };
39
+ }
40
+ if (differenceInDays < -1) {
41
+ return { relativeDateCase: "previous6Days", date: a };
42
+ }
43
+ if (differenceInDays === -1) {
44
+ return { relativeDateCase: "lastDay", date: a };
45
+ }
46
+ if (differenceInDays === 0) {
47
+ return { relativeDateCase: "sameDay", date: a };
48
+ }
49
+ if (differenceInDays === 1) {
50
+ return { relativeDateCase: "nextDay", date: a };
51
+ }
52
+ if (differenceInDays < 7) {
53
+ return { relativeDateCase: "next6Days", date: a };
54
+ }
55
+ return { relativeDateCase: "other", date: a };
56
+ }
57
+ function addYears(initialDate, yearsToAdd) {
58
+ const date = normalizeDate(initialDate);
59
+ date.setFullYear(date.getFullYear() + yearsToAdd);
60
+ return date;
61
+ }
62
+ export {
63
+ addYears,
64
+ dateTo12HourTime,
65
+ differenceInCalendarDays,
66
+ formatRelative,
67
+ normalizeDate
68
+ };
69
+ //# sourceMappingURL=date.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/date.ts"],"sourcesContent":["const MILLISECONDS_IN_DAY = 86400000;\n\nexport function dateTo12HourTime(date: Date): string {\n if (!date) {\n return '';\n }\n return date.toLocaleString('en-US', {\n hour: '2-digit',\n minute: 'numeric',\n hour12: true,\n });\n}\n\nexport function differenceInCalendarDays(a: Date, b: Date, { absolute = true } = {}): number {\n if (!a || !b) {\n return 0;\n }\n const utcA = Date.UTC(a.getFullYear(), a.getMonth(), a.getDate());\n const utcB = Date.UTC(b.getFullYear(), b.getMonth(), b.getDate());\n const diff = Math.floor((utcB - utcA) / MILLISECONDS_IN_DAY);\n return absolute ? Math.abs(diff) : diff;\n}\n\nexport function normalizeDate(d: Date | string | number): Date {\n try {\n return new Date(d || new Date());\n } catch {\n return new Date();\n }\n}\n\ntype DateFormatRelativeParams = {\n date: Date | string | number;\n relativeTo: Date | string | number;\n};\n\nexport type RelativeDateCase = 'previous6Days' | 'lastDay' | 'sameDay' | 'nextDay' | 'next6Days' | 'other';\ntype RelativeDateReturn = { relativeDateCase: RelativeDateCase; date: Date } | null;\n\nexport function formatRelative(props: DateFormatRelativeParams): RelativeDateReturn {\n const { date, relativeTo } = props;\n if (!date || !relativeTo) {\n return null;\n }\n const a = normalizeDate(date);\n const b = normalizeDate(relativeTo);\n const differenceInDays = differenceInCalendarDays(b, a, { absolute: false });\n\n if (differenceInDays < -6) {\n return { relativeDateCase: 'other', date: a };\n }\n if (differenceInDays < -1) {\n return { relativeDateCase: 'previous6Days', date: a };\n }\n if (differenceInDays === -1) {\n return { relativeDateCase: 'lastDay', date: a };\n }\n if (differenceInDays === 0) {\n return { relativeDateCase: 'sameDay', date: a };\n }\n if (differenceInDays === 1) {\n return { relativeDateCase: 'nextDay', date: a };\n }\n if (differenceInDays < 7) {\n return { relativeDateCase: 'next6Days', date: a };\n }\n return { relativeDateCase: 'other', date: a };\n}\n\nexport function addYears(initialDate: Date | number | string, yearsToAdd: number): Date {\n const date = normalizeDate(initialDate);\n date.setFullYear(date.getFullYear() + yearsToAdd);\n return date;\n}\n"],"mappings":";AAAA,IAAM,sBAAsB;AAErB,SAAS,iBAAiB,MAAoB;AACnD,MAAI,CAAC,MAAM;AACT,WAAO;AAAA,EACT;AACA,SAAO,KAAK,eAAe,SAAS;AAAA,IAClC,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV,CAAC;AACH;AAEO,SAAS,yBAAyB,GAAS,GAAS,EAAE,WAAW,KAAK,IAAI,CAAC,GAAW;AAC3F,MAAI,CAAC,KAAK,CAAC,GAAG;AACZ,WAAO;AAAA,EACT;AACA,QAAM,OAAO,KAAK,IAAI,EAAE,YAAY,GAAG,EAAE,SAAS,GAAG,EAAE,QAAQ,CAAC;AAChE,QAAM,OAAO,KAAK,IAAI,EAAE,YAAY,GAAG,EAAE,SAAS,GAAG,EAAE,QAAQ,CAAC;AAChE,QAAM,OAAO,KAAK,OAAO,OAAO,QAAQ,mBAAmB;AAC3D,SAAO,WAAW,KAAK,IAAI,IAAI,IAAI;AACrC;AAEO,SAAS,cAAc,GAAiC;AAC7D,MAAI;AACF,WAAO,IAAI,KAAK,KAAK,oBAAI,KAAK,CAAC;AAAA,EACjC,QAAQ;AACN,WAAO,oBAAI,KAAK;AAAA,EAClB;AACF;AAUO,SAAS,eAAe,OAAqD;AAClF,QAAM,EAAE,MAAM,WAAW,IAAI;AAC7B,MAAI,CAAC,QAAQ,CAAC,YAAY;AACxB,WAAO;AAAA,EACT;AACA,QAAM,IAAI,cAAc,IAAI;AAC5B,QAAM,IAAI,cAAc,UAAU;AAClC,QAAM,mBAAmB,yBAAyB,GAAG,GAAG,EAAE,UAAU,MAAM,CAAC;AAE3E,MAAI,mBAAmB,IAAI;AACzB,WAAO,EAAE,kBAAkB,SAAS,MAAM,EAAE;AAAA,EAC9C;AACA,MAAI,mBAAmB,IAAI;AACzB,WAAO,EAAE,kBAAkB,iBAAiB,MAAM,EAAE;AAAA,EACtD;AACA,MAAI,qBAAqB,IAAI;AAC3B,WAAO,EAAE,kBAAkB,WAAW,MAAM,EAAE;AAAA,EAChD;AACA,MAAI,qBAAqB,GAAG;AAC1B,WAAO,EAAE,kBAAkB,WAAW,MAAM,EAAE;AAAA,EAChD;AACA,MAAI,qBAAqB,GAAG;AAC1B,WAAO,EAAE,kBAAkB,WAAW,MAAM,EAAE;AAAA,EAChD;AACA,MAAI,mBAAmB,GAAG;AACxB,WAAO,EAAE,kBAAkB,aAAa,MAAM,EAAE;AAAA,EAClD;AACA,SAAO,EAAE,kBAAkB,SAAS,MAAM,EAAE;AAC9C;AAEO,SAAS,SAAS,aAAqC,YAA0B;AACtF,QAAM,OAAO,cAAc,WAAW;AACtC,OAAK,YAAY,KAAK,YAAY,IAAI,UAAU;AAChD,SAAO;AACT;","names":[]}
@@ -1,9 +1,9 @@
1
- import {
2
- loadScript
3
- } from "./chunk-33U3M4YY.mjs";
4
1
  import {
5
2
  resolveVersion
6
3
  } from "./chunk-PHCVLVZY.mjs";
4
+ import {
5
+ loadScript
6
+ } from "./chunk-33U3M4YY.mjs";
7
7
 
8
8
  // src/loadTernUIScript.ts
9
9
  var loadTernUIScript = async (options) => {
package/dist/ms.d.mts ADDED
@@ -0,0 +1,52 @@
1
+ type Years = 'years' | 'year' | 'yrs' | 'yr' | 'y';
2
+ type Months = 'months' | 'month' | 'mo';
3
+ type Weeks = 'weeks' | 'week' | 'w';
4
+ type Days = 'days' | 'day' | 'd';
5
+ type Hours = 'hours' | 'hour' | 'hrs' | 'hr' | 'h';
6
+ type Minutes = 'minutes' | 'minute' | 'mins' | 'min' | 'm';
7
+ type Seconds = 'seconds' | 'second' | 'secs' | 'sec' | 's';
8
+ type Milliseconds = 'milliseconds' | 'millisecond' | 'msecs' | 'msec' | 'ms';
9
+ type Unit = Years | Months | Weeks | Days | Hours | Minutes | Seconds | Milliseconds;
10
+ type UnitAnyCase = Capitalize<Unit> | Uppercase<Unit> | Unit;
11
+ type StringValue = `${number}` | `${number}${UnitAnyCase}` | `${number} ${UnitAnyCase}`;
12
+ interface Options {
13
+ /**
14
+ * Set to `true` to use verbose formatting. Defaults to `false`.
15
+ */
16
+ long?: boolean;
17
+ }
18
+ /**
19
+ * Parse or format the given value.
20
+ *
21
+ * @param value - The string or number to convert
22
+ * @param options - Options for the conversion
23
+ * @throws Error if `value` is not a non-empty string or a number
24
+ */
25
+ declare function ms(value: StringValue, options?: Options): number;
26
+ declare function ms(value: number, options?: Options): string;
27
+ /**
28
+ * Parse the given string and return milliseconds.
29
+ *
30
+ * @param str - A string to parse to milliseconds
31
+ * @returns The parsed value in milliseconds, or `NaN` if the string can't be
32
+ * parsed
33
+ */
34
+ declare function parse(str: string): number;
35
+ /**
36
+ * Parse the given StringValue and return milliseconds.
37
+ *
38
+ * @param value - A typesafe StringValue to parse to milliseconds
39
+ * @returns The parsed value in milliseconds, or `NaN` if the string can't be
40
+ * parsed
41
+ */
42
+ declare function parseStrict(value: StringValue): number;
43
+ /**
44
+ * Format the given integer as a string.
45
+ *
46
+ * @param ms - milliseconds
47
+ * @param options - Options for the conversion
48
+ * @returns The formatted string
49
+ */
50
+ declare function format(ms: number, options?: Options): string;
51
+
52
+ export { type StringValue, format, ms, parse, parseStrict };
package/dist/ms.d.ts ADDED
@@ -0,0 +1,52 @@
1
+ type Years = 'years' | 'year' | 'yrs' | 'yr' | 'y';
2
+ type Months = 'months' | 'month' | 'mo';
3
+ type Weeks = 'weeks' | 'week' | 'w';
4
+ type Days = 'days' | 'day' | 'd';
5
+ type Hours = 'hours' | 'hour' | 'hrs' | 'hr' | 'h';
6
+ type Minutes = 'minutes' | 'minute' | 'mins' | 'min' | 'm';
7
+ type Seconds = 'seconds' | 'second' | 'secs' | 'sec' | 's';
8
+ type Milliseconds = 'milliseconds' | 'millisecond' | 'msecs' | 'msec' | 'ms';
9
+ type Unit = Years | Months | Weeks | Days | Hours | Minutes | Seconds | Milliseconds;
10
+ type UnitAnyCase = Capitalize<Unit> | Uppercase<Unit> | Unit;
11
+ type StringValue = `${number}` | `${number}${UnitAnyCase}` | `${number} ${UnitAnyCase}`;
12
+ interface Options {
13
+ /**
14
+ * Set to `true` to use verbose formatting. Defaults to `false`.
15
+ */
16
+ long?: boolean;
17
+ }
18
+ /**
19
+ * Parse or format the given value.
20
+ *
21
+ * @param value - The string or number to convert
22
+ * @param options - Options for the conversion
23
+ * @throws Error if `value` is not a non-empty string or a number
24
+ */
25
+ declare function ms(value: StringValue, options?: Options): number;
26
+ declare function ms(value: number, options?: Options): string;
27
+ /**
28
+ * Parse the given string and return milliseconds.
29
+ *
30
+ * @param str - A string to parse to milliseconds
31
+ * @returns The parsed value in milliseconds, or `NaN` if the string can't be
32
+ * parsed
33
+ */
34
+ declare function parse(str: string): number;
35
+ /**
36
+ * Parse the given StringValue and return milliseconds.
37
+ *
38
+ * @param value - A typesafe StringValue to parse to milliseconds
39
+ * @returns The parsed value in milliseconds, or `NaN` if the string can't be
40
+ * parsed
41
+ */
42
+ declare function parseStrict(value: StringValue): number;
43
+ /**
44
+ * Format the given integer as a string.
45
+ *
46
+ * @param ms - milliseconds
47
+ * @param options - Options for the conversion
48
+ * @returns The formatted string
49
+ */
50
+ declare function format(ms: number, options?: Options): string;
51
+
52
+ export { type StringValue, format, ms, parse, parseStrict };
package/dist/ms.js ADDED
@@ -0,0 +1,181 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/ms.ts
21
+ var ms_exports = {};
22
+ __export(ms_exports, {
23
+ format: () => format,
24
+ ms: () => ms,
25
+ parse: () => parse,
26
+ parseStrict: () => parseStrict
27
+ });
28
+ module.exports = __toCommonJS(ms_exports);
29
+ var s = 1e3;
30
+ var m = s * 60;
31
+ var h = m * 60;
32
+ var d = h * 24;
33
+ var w = d * 7;
34
+ var y = d * 365.25;
35
+ var mo = y / 12;
36
+ function ms(value, options) {
37
+ if (typeof value === "string") {
38
+ return parse(value);
39
+ } else if (typeof value === "number") {
40
+ return format(value, options);
41
+ }
42
+ throw new Error(
43
+ `Value provided to ms() must be a string or number. value=${JSON.stringify(value)}`
44
+ );
45
+ }
46
+ function parse(str) {
47
+ if (typeof str !== "string" || str.length === 0 || str.length > 100) {
48
+ throw new Error(
49
+ `Value provided to ms.parse() must be a string with length between 1 and 99. value=${JSON.stringify(str)}`
50
+ );
51
+ }
52
+ const match = /^(?<value>-?\d*\.?\d+) *(?<unit>milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|months?|mo|years?|yrs?|y)?$/i.exec(
53
+ str
54
+ );
55
+ if (!(match == null ? void 0 : match.groups)) {
56
+ return NaN;
57
+ }
58
+ const { value, unit = "ms" } = match.groups;
59
+ const n = parseFloat(value);
60
+ const matchUnit = unit.toLowerCase();
61
+ switch (matchUnit) {
62
+ case "years":
63
+ case "year":
64
+ case "yrs":
65
+ case "yr":
66
+ case "y":
67
+ return n * y;
68
+ case "months":
69
+ case "month":
70
+ case "mo":
71
+ return n * mo;
72
+ case "weeks":
73
+ case "week":
74
+ case "w":
75
+ return n * w;
76
+ case "days":
77
+ case "day":
78
+ case "d":
79
+ return n * d;
80
+ case "hours":
81
+ case "hour":
82
+ case "hrs":
83
+ case "hr":
84
+ case "h":
85
+ return n * h;
86
+ case "minutes":
87
+ case "minute":
88
+ case "mins":
89
+ case "min":
90
+ case "m":
91
+ return n * m;
92
+ case "seconds":
93
+ case "second":
94
+ case "secs":
95
+ case "sec":
96
+ case "s":
97
+ return n * s;
98
+ case "milliseconds":
99
+ case "millisecond":
100
+ case "msecs":
101
+ case "msec":
102
+ case "ms":
103
+ return n;
104
+ default:
105
+ matchUnit;
106
+ throw new Error(
107
+ `Unknown unit "${matchUnit}" provided to ms.parse(). value=${JSON.stringify(str)}`
108
+ );
109
+ }
110
+ }
111
+ function parseStrict(value) {
112
+ return parse(value);
113
+ }
114
+ function fmtShort(ms2) {
115
+ const msAbs = Math.abs(ms2);
116
+ if (msAbs >= y) {
117
+ return `${Math.round(ms2 / y)}y`;
118
+ }
119
+ if (msAbs >= mo) {
120
+ return `${Math.round(ms2 / mo)}mo`;
121
+ }
122
+ if (msAbs >= w) {
123
+ return `${Math.round(ms2 / w)}w`;
124
+ }
125
+ if (msAbs >= d) {
126
+ return `${Math.round(ms2 / d)}d`;
127
+ }
128
+ if (msAbs >= h) {
129
+ return `${Math.round(ms2 / h)}h`;
130
+ }
131
+ if (msAbs >= m) {
132
+ return `${Math.round(ms2 / m)}m`;
133
+ }
134
+ if (msAbs >= s) {
135
+ return `${Math.round(ms2 / s)}s`;
136
+ }
137
+ return `${ms2}ms`;
138
+ }
139
+ function fmtLong(ms2) {
140
+ const msAbs = Math.abs(ms2);
141
+ if (msAbs >= y) {
142
+ return plural(ms2, msAbs, y, "year");
143
+ }
144
+ if (msAbs >= mo) {
145
+ return plural(ms2, msAbs, mo, "month");
146
+ }
147
+ if (msAbs >= w) {
148
+ return plural(ms2, msAbs, w, "week");
149
+ }
150
+ if (msAbs >= d) {
151
+ return plural(ms2, msAbs, d, "day");
152
+ }
153
+ if (msAbs >= h) {
154
+ return plural(ms2, msAbs, h, "hour");
155
+ }
156
+ if (msAbs >= m) {
157
+ return plural(ms2, msAbs, m, "minute");
158
+ }
159
+ if (msAbs >= s) {
160
+ return plural(ms2, msAbs, s, "second");
161
+ }
162
+ return `${ms2} ms`;
163
+ }
164
+ function format(ms2, options) {
165
+ if (typeof ms2 !== "number" || !Number.isFinite(ms2)) {
166
+ throw new Error("Value provided to ms.format() must be of type number.");
167
+ }
168
+ return (options == null ? void 0 : options.long) ? fmtLong(ms2) : fmtShort(ms2);
169
+ }
170
+ function plural(ms2, msAbs, n, name) {
171
+ const isPlural = msAbs >= n * 1.5;
172
+ return `${Math.round(ms2 / n)} ${name}${isPlural ? "s" : ""}`;
173
+ }
174
+ // Annotate the CommonJS export names for ESM import in node:
175
+ 0 && (module.exports = {
176
+ format,
177
+ ms,
178
+ parse,
179
+ parseStrict
180
+ });
181
+ //# sourceMappingURL=ms.js.map
package/dist/ms.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ms.ts"],"sourcesContent":["const s = 1000;\nconst m = s * 60;\nconst h = m * 60;\nconst d = h * 24;\nconst w = d * 7;\nconst y = d * 365.25;\nconst mo = y / 12;\n\ntype Years = 'years' | 'year' | 'yrs' | 'yr' | 'y';\ntype Months = 'months' | 'month' | 'mo';\ntype Weeks = 'weeks' | 'week' | 'w';\ntype Days = 'days' | 'day' | 'd';\ntype Hours = 'hours' | 'hour' | 'hrs' | 'hr' | 'h';\ntype Minutes = 'minutes' | 'minute' | 'mins' | 'min' | 'm';\ntype Seconds = 'seconds' | 'second' | 'secs' | 'sec' | 's';\ntype Milliseconds = 'milliseconds' | 'millisecond' | 'msecs' | 'msec' | 'ms';\ntype Unit =\n | Years\n | Months\n | Weeks\n | Days\n | Hours\n | Minutes\n | Seconds\n | Milliseconds;\n\ntype UnitAnyCase = Capitalize<Unit> | Uppercase<Unit> | Unit;\n\nexport type StringValue =\n | `${number}`\n | `${number}${UnitAnyCase}`\n | `${number} ${UnitAnyCase}`;\n\ninterface Options {\n /**\n * Set to `true` to use verbose formatting. Defaults to `false`.\n */\n long?: boolean;\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: StringValue, options?: Options): number;\nexport function ms(value: number, options?: Options): string;\nexport function ms(\n value: StringValue | number,\n options?: Options,\n): number | string {\n if (typeof value === 'string') {\n return parse(value);\n } else if (typeof value === 'number') {\n return format(value, options);\n }\n throw new Error(\n `Value provided to ms() must be a string or number. value=${JSON.stringify(value)}`,\n );\n}\n\n/**\n * Parse the given string and return milliseconds.\n *\n * @param str - A string to parse to milliseconds\n * @returns The parsed value in milliseconds, or `NaN` if the string can't be\n * parsed\n */\nexport function parse(str: string): 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 const match =\n /^(?<value>-?\\d*\\.?\\d+) *(?<unit>milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|months?|mo|years?|yrs?|y)?$/i.exec(\n str,\n );\n\n if (!match?.groups) {\n return NaN;\n }\n\n // Named capture groups need to be manually typed today.\n // https://github.com/microsoft/TypeScript/issues/32098\n const { value, unit = 'ms' } = match.groups as {\n value: string;\n unit: string | undefined;\n };\n\n const n = parseFloat(value);\n\n const matchUnit = unit.toLowerCase() as Lowercase<Unit>;\n\n /* istanbul ignore next - istanbul doesn't understand, but thankfully the TypeScript the exhaustiveness check in the default case keeps us type safe here */\n switch (matchUnit) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'months':\n case 'month':\n case 'mo':\n return n * mo;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n matchUnit satisfies never;\n throw new Error(\n `Unknown unit \"${matchUnit}\" provided to ms.parse(). value=${JSON.stringify(str)}`,\n );\n }\n}\n\n/**\n * Parse the given StringValue and return milliseconds.\n *\n * @param value - A typesafe StringValue to parse to milliseconds\n * @returns The parsed value in milliseconds, or `NaN` if the string can't be\n * parsed\n */\nexport function parseStrict(value: StringValue): number {\n return parse(value);\n}\n\n/**\n * Short format for `ms`.\n */\nfunction fmtShort(ms: number): StringValue {\n const msAbs = Math.abs(ms);\n if (msAbs >= y) {\n return `${Math.round(ms / y)}y`;\n }\n if (msAbs >= mo) {\n return `${Math.round(ms / mo)}mo`;\n }\n if (msAbs >= w) {\n return `${Math.round(ms / w)}w`;\n }\n if (msAbs >= d) {\n return `${Math.round(ms / d)}d`;\n }\n if (msAbs >= h) {\n return `${Math.round(ms / h)}h`;\n }\n if (msAbs >= m) {\n return `${Math.round(ms / m)}m`;\n }\n if (msAbs >= s) {\n return `${Math.round(ms / s)}s`;\n }\n return `${ms}ms`;\n}\n\n/**\n * Long format for `ms`.\n */\nfunction fmtLong(ms: number): StringValue {\n const msAbs = Math.abs(ms);\n if (msAbs >= y) {\n return plural(ms, msAbs, y, 'year');\n }\n if (msAbs >= mo) {\n return plural(ms, msAbs, mo, 'month');\n }\n if (msAbs >= w) {\n return plural(ms, msAbs, w, 'week');\n }\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return `${ms} ms`;\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 return options?.long ? fmtLong(ms) : fmtShort(ms);\n}\n\n/**\n * Pluralization helper.\n */\nfunction plural(\n ms: number,\n msAbs: number,\n n: number,\n name: string,\n): StringValue {\n const isPlural = msAbs >= n * 1.5;\n return `${Math.round(ms / n)} ${name}${isPlural ? 's' : ''}` as StringValue;\n}"],"mappings":"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","names":["ms"]}
package/dist/ms.mjs ADDED
@@ -0,0 +1,153 @@
1
+ // src/ms.ts
2
+ var s = 1e3;
3
+ var m = s * 60;
4
+ var h = m * 60;
5
+ var d = h * 24;
6
+ var w = d * 7;
7
+ var y = d * 365.25;
8
+ var mo = y / 12;
9
+ function ms(value, options) {
10
+ if (typeof value === "string") {
11
+ return parse(value);
12
+ } else if (typeof value === "number") {
13
+ return format(value, options);
14
+ }
15
+ throw new Error(
16
+ `Value provided to ms() must be a string or number. value=${JSON.stringify(value)}`
17
+ );
18
+ }
19
+ function parse(str) {
20
+ if (typeof str !== "string" || str.length === 0 || str.length > 100) {
21
+ throw new Error(
22
+ `Value provided to ms.parse() must be a string with length between 1 and 99. value=${JSON.stringify(str)}`
23
+ );
24
+ }
25
+ const match = /^(?<value>-?\d*\.?\d+) *(?<unit>milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|months?|mo|years?|yrs?|y)?$/i.exec(
26
+ str
27
+ );
28
+ if (!(match == null ? void 0 : match.groups)) {
29
+ return NaN;
30
+ }
31
+ const { value, unit = "ms" } = match.groups;
32
+ const n = parseFloat(value);
33
+ const matchUnit = unit.toLowerCase();
34
+ switch (matchUnit) {
35
+ case "years":
36
+ case "year":
37
+ case "yrs":
38
+ case "yr":
39
+ case "y":
40
+ return n * y;
41
+ case "months":
42
+ case "month":
43
+ case "mo":
44
+ return n * mo;
45
+ case "weeks":
46
+ case "week":
47
+ case "w":
48
+ return n * w;
49
+ case "days":
50
+ case "day":
51
+ case "d":
52
+ return n * d;
53
+ case "hours":
54
+ case "hour":
55
+ case "hrs":
56
+ case "hr":
57
+ case "h":
58
+ return n * h;
59
+ case "minutes":
60
+ case "minute":
61
+ case "mins":
62
+ case "min":
63
+ case "m":
64
+ return n * m;
65
+ case "seconds":
66
+ case "second":
67
+ case "secs":
68
+ case "sec":
69
+ case "s":
70
+ return n * s;
71
+ case "milliseconds":
72
+ case "millisecond":
73
+ case "msecs":
74
+ case "msec":
75
+ case "ms":
76
+ return n;
77
+ default:
78
+ matchUnit;
79
+ throw new Error(
80
+ `Unknown unit "${matchUnit}" provided to ms.parse(). value=${JSON.stringify(str)}`
81
+ );
82
+ }
83
+ }
84
+ function parseStrict(value) {
85
+ return parse(value);
86
+ }
87
+ function fmtShort(ms2) {
88
+ const msAbs = Math.abs(ms2);
89
+ if (msAbs >= y) {
90
+ return `${Math.round(ms2 / y)}y`;
91
+ }
92
+ if (msAbs >= mo) {
93
+ return `${Math.round(ms2 / mo)}mo`;
94
+ }
95
+ if (msAbs >= w) {
96
+ return `${Math.round(ms2 / w)}w`;
97
+ }
98
+ if (msAbs >= d) {
99
+ return `${Math.round(ms2 / d)}d`;
100
+ }
101
+ if (msAbs >= h) {
102
+ return `${Math.round(ms2 / h)}h`;
103
+ }
104
+ if (msAbs >= m) {
105
+ return `${Math.round(ms2 / m)}m`;
106
+ }
107
+ if (msAbs >= s) {
108
+ return `${Math.round(ms2 / s)}s`;
109
+ }
110
+ return `${ms2}ms`;
111
+ }
112
+ function fmtLong(ms2) {
113
+ const msAbs = Math.abs(ms2);
114
+ if (msAbs >= y) {
115
+ return plural(ms2, msAbs, y, "year");
116
+ }
117
+ if (msAbs >= mo) {
118
+ return plural(ms2, msAbs, mo, "month");
119
+ }
120
+ if (msAbs >= w) {
121
+ return plural(ms2, msAbs, w, "week");
122
+ }
123
+ if (msAbs >= d) {
124
+ return plural(ms2, msAbs, d, "day");
125
+ }
126
+ if (msAbs >= h) {
127
+ return plural(ms2, msAbs, h, "hour");
128
+ }
129
+ if (msAbs >= m) {
130
+ return plural(ms2, msAbs, m, "minute");
131
+ }
132
+ if (msAbs >= s) {
133
+ return plural(ms2, msAbs, s, "second");
134
+ }
135
+ return `${ms2} ms`;
136
+ }
137
+ function format(ms2, options) {
138
+ if (typeof ms2 !== "number" || !Number.isFinite(ms2)) {
139
+ throw new Error("Value provided to ms.format() must be of type number.");
140
+ }
141
+ return (options == null ? void 0 : options.long) ? fmtLong(ms2) : fmtShort(ms2);
142
+ }
143
+ function plural(ms2, msAbs, n, name) {
144
+ const isPlural = msAbs >= n * 1.5;
145
+ return `${Math.round(ms2 / n)} ${name}${isPlural ? "s" : ""}`;
146
+ }
147
+ export {
148
+ format,
149
+ ms,
150
+ parse,
151
+ parseStrict
152
+ };
153
+ //# sourceMappingURL=ms.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ms.ts"],"sourcesContent":["const s = 1000;\nconst m = s * 60;\nconst h = m * 60;\nconst d = h * 24;\nconst w = d * 7;\nconst y = d * 365.25;\nconst mo = y / 12;\n\ntype Years = 'years' | 'year' | 'yrs' | 'yr' | 'y';\ntype Months = 'months' | 'month' | 'mo';\ntype Weeks = 'weeks' | 'week' | 'w';\ntype Days = 'days' | 'day' | 'd';\ntype Hours = 'hours' | 'hour' | 'hrs' | 'hr' | 'h';\ntype Minutes = 'minutes' | 'minute' | 'mins' | 'min' | 'm';\ntype Seconds = 'seconds' | 'second' | 'secs' | 'sec' | 's';\ntype Milliseconds = 'milliseconds' | 'millisecond' | 'msecs' | 'msec' | 'ms';\ntype Unit =\n | Years\n | Months\n | Weeks\n | Days\n | Hours\n | Minutes\n | Seconds\n | Milliseconds;\n\ntype UnitAnyCase = Capitalize<Unit> | Uppercase<Unit> | Unit;\n\nexport type StringValue =\n | `${number}`\n | `${number}${UnitAnyCase}`\n | `${number} ${UnitAnyCase}`;\n\ninterface Options {\n /**\n * Set to `true` to use verbose formatting. Defaults to `false`.\n */\n long?: boolean;\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: StringValue, options?: Options): number;\nexport function ms(value: number, options?: Options): string;\nexport function ms(\n value: StringValue | number,\n options?: Options,\n): number | string {\n if (typeof value === 'string') {\n return parse(value);\n } else if (typeof value === 'number') {\n return format(value, options);\n }\n throw new Error(\n `Value provided to ms() must be a string or number. value=${JSON.stringify(value)}`,\n );\n}\n\n/**\n * Parse the given string and return milliseconds.\n *\n * @param str - A string to parse to milliseconds\n * @returns The parsed value in milliseconds, or `NaN` if the string can't be\n * parsed\n */\nexport function parse(str: string): 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 const match =\n /^(?<value>-?\\d*\\.?\\d+) *(?<unit>milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|months?|mo|years?|yrs?|y)?$/i.exec(\n str,\n );\n\n if (!match?.groups) {\n return NaN;\n }\n\n // Named capture groups need to be manually typed today.\n // https://github.com/microsoft/TypeScript/issues/32098\n const { value, unit = 'ms' } = match.groups as {\n value: string;\n unit: string | undefined;\n };\n\n const n = parseFloat(value);\n\n const matchUnit = unit.toLowerCase() as Lowercase<Unit>;\n\n /* istanbul ignore next - istanbul doesn't understand, but thankfully the TypeScript the exhaustiveness check in the default case keeps us type safe here */\n switch (matchUnit) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'months':\n case 'month':\n case 'mo':\n return n * mo;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n matchUnit satisfies never;\n throw new Error(\n `Unknown unit \"${matchUnit}\" provided to ms.parse(). value=${JSON.stringify(str)}`,\n );\n }\n}\n\n/**\n * Parse the given StringValue and return milliseconds.\n *\n * @param value - A typesafe StringValue to parse to milliseconds\n * @returns The parsed value in milliseconds, or `NaN` if the string can't be\n * parsed\n */\nexport function parseStrict(value: StringValue): number {\n return parse(value);\n}\n\n/**\n * Short format for `ms`.\n */\nfunction fmtShort(ms: number): StringValue {\n const msAbs = Math.abs(ms);\n if (msAbs >= y) {\n return `${Math.round(ms / y)}y`;\n }\n if (msAbs >= mo) {\n return `${Math.round(ms / mo)}mo`;\n }\n if (msAbs >= w) {\n return `${Math.round(ms / w)}w`;\n }\n if (msAbs >= d) {\n return `${Math.round(ms / d)}d`;\n }\n if (msAbs >= h) {\n return `${Math.round(ms / h)}h`;\n }\n if (msAbs >= m) {\n return `${Math.round(ms / m)}m`;\n }\n if (msAbs >= s) {\n return `${Math.round(ms / s)}s`;\n }\n return `${ms}ms`;\n}\n\n/**\n * Long format for `ms`.\n */\nfunction fmtLong(ms: number): StringValue {\n const msAbs = Math.abs(ms);\n if (msAbs >= y) {\n return plural(ms, msAbs, y, 'year');\n }\n if (msAbs >= mo) {\n return plural(ms, msAbs, mo, 'month');\n }\n if (msAbs >= w) {\n return plural(ms, msAbs, w, 'week');\n }\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return `${ms} ms`;\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 return options?.long ? fmtLong(ms) : fmtShort(ms);\n}\n\n/**\n * Pluralization helper.\n */\nfunction plural(\n ms: number,\n msAbs: number,\n n: number,\n name: string,\n): StringValue {\n const isPlural = msAbs >= n * 1.5;\n return `${Math.round(ms / n)} ${name}${isPlural ? 's' : ''}` as StringValue;\n}"],"mappings":"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","names":["ms"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tern-secure/shared",
3
- "version": "1.3.0-canary.v20251030165007",
3
+ "version": "1.3.0-canary.v20251108045933",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/TernSecure/auth.git",
@@ -92,8 +92,8 @@
92
92
  "dependencies": {
93
93
  "glob-to-regexp": "0.4.1",
94
94
  "js-cookie": "^3.0.5",
95
- "tslib": "2.4.1",
96
- "@tern-secure/types": "1.1.0-canary.v20251030165007"
95
+ "tslib": "2.8.1",
96
+ "@tern-secure/types": "1.1.0-canary.v20251108045933"
97
97
  },
98
98
  "peerDependencies": {
99
99
  "react": "^19.0.0 || ^19.0.0-0",