@cybearl/cypack 1.8.1 → 1.8.3

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/README.md CHANGED
@@ -118,6 +118,7 @@ Contains utilities to create middleware functions (for Next.js, etc.).
118
118
  #### String utilities
119
119
  Contains utilities to manipulate strings.
120
120
  - `convertErrorToString`: Safely converts any error into a string for parsing/searching.
121
+ - `decodeObjectURIComponents`: Decodes all components of an object as URI components (e.g., for decoding Next.js `req.query`).
121
122
 
122
123
  #### Styling utilities
123
124
  Contains utilities to manipulate CSS styles.
package/frontend.d.ts CHANGED
@@ -86,7 +86,7 @@ declare function getCGASStatus(markerOnly?: false, baseUrl?: string): Promise<Re
86
86
  /**
87
87
  * Allows to add query parameters to a URL.
88
88
  * @param baseUrl The base URL to add parameters to.
89
- * @param params The parameters to add.
89
+ * @param params The parameters to add, note that each parameter will be URL-encoded.
90
90
  * @returns The URL with the parameters added.
91
91
  */
92
92
  declare function addParamsToUrl(baseUrl: string, params: {
package/frontend.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/frontend/cgas/status.ts","../src/frontend/urls.ts"],"names":["getCGASStatus","markerOnly","baseUrl","addParamsToUrl","params","url","key","value","currentUrlOrigin"],"mappings":"AAWA,eAAsBA,EACrBC,CAAa,CAAA,CAAA,CAAA,CACbC,CAAU,CAAA,WAAA,CACoC,CAG9C,OADe,KAAA,CADE,MAAM,KAAA,CAAM,GAAGA,CAAO,CAAA,mBAAA,EAAsBD,CAAU,CAAA,CAAE,GAC3C,IAAK,EAEpC,CCZO,SAASE,EACfD,CACAE,CAAAA,CAAAA,CAGC,CACD,IAAIC,EAAMH,CAEV,CAAA,IAAA,GAAW,CAACI,CAAAA,CAAKC,CAAK,CAAK,GAAA,MAAA,CAAO,OAAQH,CAAAA,CAAM,EACpBG,CAAU,EAAA,IAAA,EAAQA,CAAU,GAAA,EAAA,EAAMA,IAAU,MAAUA,EAAAA,CAAAA,GAAU,WAI3FF,GAAAA,CAAAA,EAAO,GAAGA,CAAI,CAAA,QAAA,CAAS,GAAG,CAAA,CAAI,IAAM,GAAG,CAAA,EAAG,kBAAmBC,CAAAA,CAAG,CAAC,CAAI,CAAA,EAAA,kBAAA,CAAmBC,CAAM,CAAA,QAAA,EAAU,CAAC,CAAA,CAAA,CAAA,CAG1G,OAAOF,CACR,CAKaG,IAAAA,CAAAA,CAAmB,OAAO,MAAA,CAAW,KAAe,MAAO,CAAA,QAAA,CAAS,MAAS,CAAA,MAAA,CAAO,SAAS,MAAS,CAAA","file":"frontend.js","sourcesContent":["import type { CGASStatus } from \"@/main/types/cgas\"\nimport type { RequestResult } from \"@/main/types/requests\"\n\n/**\n * Get the status of the application via the CGAS API endpoint (that itself uses the `getCGASStatus` function).\n * @param markerOnly Whether to only return the marker (optional, defaults to false).\n * @param baseUrl The base URL of the CGAS API (optional, defaults to \"/api/cgas\").\n * @returns The status of the application, or the marker if `markerOnly` is true.\n */\nexport async function getCGASStatus(markerOnly: true, baseUrl?: string): Promise<RequestResult<string>>\nexport async function getCGASStatus(markerOnly?: false, baseUrl?: string): Promise<RequestResult<CGASStatus>>\nexport async function getCGASStatus(\n\tmarkerOnly = false,\n\tbaseUrl = \"/api/cgas\",\n): Promise<RequestResult<CGASStatus | string>> {\n\tconst response = await fetch(`${baseUrl}/status?markerOnly=${markerOnly}`)\n\tconst result = await response.json()\n\treturn result as RequestResult<CGASStatus | string>\n}\n","/**\n * Allows to add query parameters to a URL.\n * @param baseUrl The base URL to add parameters to.\n * @param params The parameters to add.\n * @returns The URL with the parameters added.\n */\nexport function addParamsToUrl(\n\tbaseUrl: string,\n\tparams: {\n\t\t[key: string]: string | number | boolean | undefined | null\n\t},\n) {\n\tlet url = baseUrl\n\n\tfor (const [key, value] of Object.entries(params)) {\n\t\tif (value === undefined || value === null || value === \"\" || value === \"null\" || value === \"undefined\") {\n\t\t\tcontinue\n\t\t}\n\n\t\turl += `${url.includes(\"?\") ? \"&\" : \"?\"}${encodeURIComponent(key)}=${encodeURIComponent(value.toString())}`\n\t}\n\n\treturn url\n}\n\n/**\n * Get the current URL origin or null if it's not available.\n */\nexport const currentUrlOrigin = typeof window !== \"undefined\" && window.location.origin ? window.location.origin : null\n"]}
1
+ {"version":3,"sources":["../src/frontend/cgas/status.ts","../src/frontend/urls.ts"],"names":["getCGASStatus","markerOnly","baseUrl","addParamsToUrl","params","url","key","value","currentUrlOrigin"],"mappings":"AAWA,eAAsBA,EACrBC,CAAa,CAAA,CAAA,CAAA,CACbC,CAAU,CAAA,WAAA,CACoC,CAG9C,OADe,KAAA,CADE,MAAM,KAAA,CAAM,GAAGA,CAAO,CAAA,mBAAA,EAAsBD,CAAU,CAAA,CAAE,GAC3C,IAAK,EAEpC,CCZO,SAASE,EACfD,CACAE,CAAAA,CAAAA,CAGC,CACD,IAAIC,EAAMH,CAEV,CAAA,IAAA,GAAW,CAACI,CAAAA,CAAKC,CAAK,CAAK,GAAA,MAAA,CAAO,OAAQH,CAAAA,CAAM,EACpBG,CAAU,EAAA,IAAA,EAAQA,CAAU,GAAA,EAAA,EAAMA,IAAU,MAAUA,EAAAA,CAAAA,GAAU,WAI3FF,GAAAA,CAAAA,EAAO,GAAGA,CAAI,CAAA,QAAA,CAAS,GAAG,CAAA,CAAI,IAAM,GAAG,CAAA,EAAG,kBAAmBC,CAAAA,CAAG,CAAC,CAAI,CAAA,EAAA,kBAAA,CAAmBC,CAAM,CAAA,QAAA,EAAU,CAAC,CAAA,CAAA,CAAA,CAG1G,OAAOF,CACR,CAKaG,IAAAA,CAAAA,CAAmB,OAAO,MAAA,CAAW,KAAe,MAAO,CAAA,QAAA,CAAS,MAAS,CAAA,MAAA,CAAO,SAAS,MAAS,CAAA","file":"frontend.js","sourcesContent":["import type { CGASStatus } from \"@/main/types/cgas\"\nimport type { RequestResult } from \"@/main/types/requests\"\n\n/**\n * Get the status of the application via the CGAS API endpoint (that itself uses the `getCGASStatus` function).\n * @param markerOnly Whether to only return the marker (optional, defaults to false).\n * @param baseUrl The base URL of the CGAS API (optional, defaults to \"/api/cgas\").\n * @returns The status of the application, or the marker if `markerOnly` is true.\n */\nexport async function getCGASStatus(markerOnly: true, baseUrl?: string): Promise<RequestResult<string>>\nexport async function getCGASStatus(markerOnly?: false, baseUrl?: string): Promise<RequestResult<CGASStatus>>\nexport async function getCGASStatus(\n\tmarkerOnly = false,\n\tbaseUrl = \"/api/cgas\",\n): Promise<RequestResult<CGASStatus | string>> {\n\tconst response = await fetch(`${baseUrl}/status?markerOnly=${markerOnly}`)\n\tconst result = await response.json()\n\treturn result as RequestResult<CGASStatus | string>\n}\n","/**\n * Allows to add query parameters to a URL.\n * @param baseUrl The base URL to add parameters to.\n * @param params The parameters to add, note that each parameter will be URL-encoded.\n * @returns The URL with the parameters added.\n */\nexport function addParamsToUrl(\n\tbaseUrl: string,\n\tparams: {\n\t\t[key: string]: string | number | boolean | undefined | null\n\t},\n) {\n\tlet url = baseUrl\n\n\tfor (const [key, value] of Object.entries(params)) {\n\t\tif (value === undefined || value === null || value === \"\" || value === \"null\" || value === \"undefined\") {\n\t\t\tcontinue\n\t\t}\n\n\t\turl += `${url.includes(\"?\") ? \"&\" : \"?\"}${encodeURIComponent(key)}=${encodeURIComponent(value.toString())}`\n\t}\n\n\treturn url\n}\n\n/**\n * Get the current URL origin or null if it's not available.\n */\nexport const currentUrlOrigin = typeof window !== \"undefined\" && window.location.origin ? window.location.origin : null\n"]}
package/index.d.ts CHANGED
@@ -22,6 +22,7 @@ declare const CyCONSTANTS: {
22
22
  MIN_LAST_NAME_LENGTH: number;
23
23
  MAX_LAST_NAME_LENGTH: number;
24
24
  MAX_DESCRIPTION_LENGTH: number;
25
+ MAX_URL_LENGTH: number;
25
26
  MAX_KEYWORD_LENGTH: number;
26
27
  MAX_KEYWORDS_COUNT: number;
27
28
  MAX_EXTERNAL_LINKS_COUNT: number;
@@ -105,6 +106,16 @@ declare const fullyPermissiveCspHeader: string;
105
106
  * @returns The error as a string.
106
107
  */
107
108
  declare function convertErrorToString(error: unknown): string;
109
+ /**
110
+ * Decodes all components of an object as URI components (e.g., for decoding Next.js `req.query`).
111
+ * @param obj The object to decode.
112
+ * @returns The decoded object.
113
+ */
114
+ declare function decodeObjectURIComponents(obj: Partial<{
115
+ [key: string]: string | string[];
116
+ }>): Partial<{
117
+ [key: string]: string | string[];
118
+ }>;
108
119
 
109
120
  /**
110
121
  * Shades a color by a percentage.
@@ -190,4 +201,4 @@ type FailedRequest = {
190
201
  */
191
202
  type RequestResult<T> = ({ success: true } & SuccessfulRequest<T>) | ({ success: false } & FailedRequest)
192
203
 
193
- export { type CGASStatus, type CGASStatusString, CyCONSTANTS, type ErrorObj, type FailedRequest, type RequestResult, type SuccessfulRequest, convertErrorToString, formatHRTime, formatPercentage, formatTime, formatUnit, fullyPermissiveCspHeader, isClient, isServer, mapRange, shadeColor, stringify, truncateString };
204
+ export { type CGASStatus, type CGASStatusString, CyCONSTANTS, type ErrorObj, type FailedRequest, type RequestResult, type SuccessfulRequest, convertErrorToString, decodeObjectURIComponents, formatHRTime, formatPercentage, formatTime, formatUnit, fullyPermissiveCspHeader, isClient, isServer, mapRange, shadeColor, stringify, truncateString };
package/index.js CHANGED
@@ -1,4 +1,4 @@
1
- function m(){return typeof window>"u"}function u(){return !m()}var S={HASH_SALT_ROUNDS:12,MIN_USERNAME_LENGTH:4,MAX_USERNAME_LENGTH:36,MIN_PASSWORD_LENGTH:8,MAX_PASSWORD_LENGTH:255,MAX_NAME_LENGTH:128,MIN_FIRST_NAME_LENGTH:1,MAX_FIRST_NAME_LENGTH:64,MIN_LAST_NAME_LENGTH:1,MAX_LAST_NAME_LENGTH:64,MAX_DESCRIPTION_LENGTH:2048,MAX_KEYWORD_LENGTH:32,MAX_KEYWORDS_COUNT:8,MAX_EXTERNAL_LINKS_COUNT:6,USERNAME_REGEX:/^[a-zA-Z0-9_.-]+$/,IMG_SIZES_HIGH_QUALITY:"(max-width: 768px) 100vw, (max-width: 1200px) 75vw, 50vw",IMG_SIZES_MEDIUM_QUALITY:"(max-width: 768px) 100vw, (max-width: 1200px) 60vw, 40vw",IMG_SIZES_BASE_QUALITY:"(max-width: 768px) 100vw, (max-width: 1200px) 50vw, 33vw",IMG_SIZES_LOW_QUALITY:"(max-width: 768px) 100vw, (max-width: 1200px) 40vw, 25vw"},c=S;function g(t,i="Op",n="s",r=12,e=!0){let a;typeof i=="string"&&typeof n=="string"?a=`${i}/${n}`:typeof i=="string"?a=i:a="";let o=e?" ":"";return t>=10**24?`${(t/10**24).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})}${o}Y${a}`.padStart(r," "):t>=10**18?`${(t/10**18).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})}${o}E${a}`.padStart(r," "):t>=10**15?`${(t/10**15).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})}${o}P${a}`.padStart(r," "):t>=10**12?`${(t/10**12).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})}${o}T${a}`.padStart(r," "):t>=10**9?`${(t/10**9).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})}${o}G${a}`.padStart(r," "):t>=10**6?`${(t/10**6).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})}${o}M${a}`.padStart(r," "):t>=10**3?`${(t/10**3).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})}${o}k${a}`.padStart(r," "):`${t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})}${o}${a}`.padStart(r," ")}function f(t,i=8){return t>=3600000000000000n?`${(Number(t)/36e14).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})}h`.padStart(i," "):t>=60000000000n?`${(Number(t)/6e10).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})}m`.padStart(i," "):t>=1000000000n?`${(Number(t)/1e9).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})}s`.padStart(i," "):t>=1000000n?`${(Number(t)/1e6).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})}ms`.padStart(i," "):t>=1000n?`${(Number(t)/1e3).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})}\xB5s`.padStart(i," "):`${t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})}ns`.padStart(i," ")}function l(t,i=10){return t>=36e5?`${(t/36e5).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})}h`.padStart(i," "):t>=6e4?`${(t/6e4).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})}m`.padStart(i," "):t>=1e3?`${(t/1e3).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})}s`.padStart(i," "):`${t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})}ms`.padStart(i," ")}function p(t,i=7){return `${t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})}%`.padStart(i," ")}var x=(t,i)=>t.length<=i?t:`${t.slice(0,i)}...`;function _(t,i=4){return JSON.stringify(t,(n,r)=>typeof r=="function"||typeof r=="bigint"?r.toString():r,i)}function b(t,i,n,r,e,a=!0){let o=(t-i)*(e-r)/(n-i)+r;return a?Math.min(Math.max(o,r),e):o}var $=`
1
+ function m(){return typeof window>"u"}function u(){return !m()}var S={HASH_SALT_ROUNDS:12,MIN_USERNAME_LENGTH:4,MAX_USERNAME_LENGTH:36,MIN_PASSWORD_LENGTH:8,MAX_PASSWORD_LENGTH:255,MAX_NAME_LENGTH:128,MIN_FIRST_NAME_LENGTH:1,MAX_FIRST_NAME_LENGTH:64,MIN_LAST_NAME_LENGTH:1,MAX_LAST_NAME_LENGTH:64,MAX_DESCRIPTION_LENGTH:2048,MAX_URL_LENGTH:2048,MAX_KEYWORD_LENGTH:32,MAX_KEYWORDS_COUNT:8,MAX_EXTERNAL_LINKS_COUNT:6,USERNAME_REGEX:/^[a-zA-Z0-9_.-]+$/,IMG_SIZES_HIGH_QUALITY:"(max-width: 768px) 100vw, (max-width: 1200px) 75vw, 50vw",IMG_SIZES_MEDIUM_QUALITY:"(max-width: 768px) 100vw, (max-width: 1200px) 60vw, 40vw",IMG_SIZES_BASE_QUALITY:"(max-width: 768px) 100vw, (max-width: 1200px) 50vw, 33vw",IMG_SIZES_LOW_QUALITY:"(max-width: 768px) 100vw, (max-width: 1200px) 40vw, 25vw"},c=S;function g(t,i="Op",n="s",r=12,e=!0){let a;typeof i=="string"&&typeof n=="string"?a=`${i}/${n}`:typeof i=="string"?a=i:a="";let o=e?" ":"";return t>=10**24?`${(t/10**24).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})}${o}Y${a}`.padStart(r," "):t>=10**18?`${(t/10**18).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})}${o}E${a}`.padStart(r," "):t>=10**15?`${(t/10**15).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})}${o}P${a}`.padStart(r," "):t>=10**12?`${(t/10**12).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})}${o}T${a}`.padStart(r," "):t>=10**9?`${(t/10**9).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})}${o}G${a}`.padStart(r," "):t>=10**6?`${(t/10**6).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})}${o}M${a}`.padStart(r," "):t>=10**3?`${(t/10**3).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})}${o}k${a}`.padStart(r," "):`${t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})}${o}${a}`.padStart(r," ")}function f(t,i=8){return t>=3600000000000000n?`${(Number(t)/36e14).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})}h`.padStart(i," "):t>=60000000000n?`${(Number(t)/6e10).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})}m`.padStart(i," "):t>=1000000000n?`${(Number(t)/1e9).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})}s`.padStart(i," "):t>=1000000n?`${(Number(t)/1e6).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})}ms`.padStart(i," "):t>=1000n?`${(Number(t)/1e3).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})}\xB5s`.padStart(i," "):`${t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})}ns`.padStart(i," ")}function l(t,i=10){return t>=36e5?`${(t/36e5).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})}h`.padStart(i," "):t>=6e4?`${(t/6e4).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})}m`.padStart(i," "):t>=1e3?`${(t/1e3).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})}s`.padStart(i," "):`${t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})}ms`.padStart(i," ")}function p(t,i=7){return `${t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})}%`.padStart(i," ")}var _=(t,i)=>t.length<=i?t:`${t.slice(0,i)}...`;function x(t,i=4){return JSON.stringify(t,(n,r)=>typeof r=="function"||typeof r=="bigint"?r.toString():r,i)}function b(t,i,n,r,e,a=!0){let o=(t-i)*(e-r)/(n-i)+r;return a?Math.min(Math.max(o,r),e):o}var $=`
2
2
  default-src * data: mediastream: blob: filesystem: about: ws: wss: 'unsafe-eval' 'wasm-unsafe-eval' 'unsafe-inline';
3
3
  script-src * data: blob: 'unsafe-inline' 'unsafe-eval';
4
4
  script-src-elem * data: blob: 'unsafe-inline';
@@ -9,5 +9,5 @@ function m(){return typeof window>"u"}function u(){return !m()}var S={HASH_SALT_
9
9
  style-src * data: blob: 'unsafe-inline';
10
10
  font-src * data: blob: 'unsafe-inline';
11
11
  frame-ancestors * data: blob:;
12
- `.replace(/\s{2,}/g," ").trim();function D(t){if(typeof t=="string")return t;let i="";try{i=JSON.stringify(t);}catch{}return (i===""||i==="{}")&&(i=`${t}`),i}function N(t,i){let n=Number.parseInt(t.substring(1,3),16),r=Number.parseInt(t.substring(3,5),16),e=Number.parseInt(t.substring(5,7),16);n=Math.round(n*(100+i)/100),r=Math.round(r*(100+i)/100),e=Math.round(e*(100+i)/100),n=n<255?n:255,r=r<255?r:255,e=e<255?e:255,n=Math.round(n),r=Math.round(r),e=Math.round(e);let a=n.toString(16).length===1?`0${n.toString(16)}`:n.toString(16),o=r.toString(16).length===1?`0${r.toString(16)}`:r.toString(16),s=e.toString(16).length===1?`0${e.toString(16)}`:e.toString(16);return `#${a}${o}${s}`}export{c as CyCONSTANTS,D as convertErrorToString,f as formatHRTime,p as formatPercentage,l as formatTime,g as formatUnit,$ as fullyPermissiveCspHeader,u as isClient,m as isServer,b as mapRange,N as shadeColor,_ as stringify,x as truncateString};//# sourceMappingURL=index.js.map
12
+ `.replace(/\s{2,}/g," ").trim();function D(t){if(typeof t=="string")return t;let i="";try{i=JSON.stringify(t);}catch{}return (i===""||i==="{}")&&(i=`${t}`),i}function N(t){for(let i in t)try{t[i]=decodeURIComponent(String(t[i]));}catch{}return t}function E(t,i){let n=Number.parseInt(t.substring(1,3),16),r=Number.parseInt(t.substring(3,5),16),e=Number.parseInt(t.substring(5,7),16);n=Math.round(n*(100+i)/100),r=Math.round(r*(100+i)/100),e=Math.round(e*(100+i)/100),n=n<255?n:255,r=r<255?r:255,e=e<255?e:255,n=Math.round(n),r=Math.round(r),e=Math.round(e);let a=n.toString(16).length===1?`0${n.toString(16)}`:n.toString(16),o=r.toString(16).length===1?`0${r.toString(16)}`:r.toString(16),s=e.toString(16).length===1?`0${e.toString(16)}`:e.toString(16);return `#${a}${o}${s}`}export{c as CyCONSTANTS,D as convertErrorToString,N as decodeObjectURIComponents,f as formatHRTime,p as formatPercentage,l as formatTime,g as formatUnit,$ as fullyPermissiveCspHeader,u as isClient,m as isServer,b as mapRange,E as shadeColor,x as stringify,_ as truncateString};//# sourceMappingURL=index.js.map
13
13
  //# sourceMappingURL=index.js.map
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/main/checks.ts","../src/main/constants.ts","../src/main/formats.ts","../src/main/json.ts","../src/main/maths.ts","../src/main/middleware.ts","../src/main/strings.ts","../src/main/styling.ts"],"names":["isServer","isClient","CyCONSTANTS","constants_default","formatUnit","num","unit","timeUnit","padding","addSpaceBeforeUnit","strUnit","spaceOrNot","formatHRTime","hrtime","formatTime","time","formatPercentage","percentage","truncateString","str","len","stringify","object","indent","_","value","mapRange","inMin","inMax","outMin","outMax","clamp","mappedValue","fullyPermissiveCspHeader","convertErrorToString","error","stringifiedError","shadeColor","color","percent","R","G","B","RR","GG","BB"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Returns true if the code is running in a server environment.\n */\nexport function isServer() {\n\treturn typeof window === \"undefined\"\n}\n\n/**\n * Returns true if the code is running in a client environment.\n */\nexport function isClient() {\n\treturn !isServer()\n}\n","/**\n * A set of general constants.\n */\nconst CyCONSTANTS = {\n\t// Security\n\tHASH_SALT_ROUNDS: 12,\n\n\t// User\n\tMIN_USERNAME_LENGTH: 4,\n\tMAX_USERNAME_LENGTH: 36,\n\tMIN_PASSWORD_LENGTH: 8,\n\tMAX_PASSWORD_LENGTH: 255,\n\tMAX_NAME_LENGTH: 128,\n\tMIN_FIRST_NAME_LENGTH: 1,\n\tMAX_FIRST_NAME_LENGTH: 64,\n\tMIN_LAST_NAME_LENGTH: 1,\n\tMAX_LAST_NAME_LENGTH: 64,\n\tMAX_DESCRIPTION_LENGTH: 2048,\n\tMAX_KEYWORD_LENGTH: 32,\n\tMAX_KEYWORDS_COUNT: 8,\n\tMAX_EXTERNAL_LINKS_COUNT: 6,\n\tUSERNAME_REGEX: /^[a-zA-Z0-9_.-]+$/,\n\n\t// Image & Video sizes\n\tIMG_SIZES_HIGH_QUALITY: \"(max-width: 768px) 100vw, (max-width: 1200px) 75vw, 50vw\",\n\tIMG_SIZES_MEDIUM_QUALITY: \"(max-width: 768px) 100vw, (max-width: 1200px) 60vw, 40vw\",\n\tIMG_SIZES_BASE_QUALITY: \"(max-width: 768px) 100vw, (max-width: 1200px) 50vw, 33vw\",\n\tIMG_SIZES_LOW_QUALITY: \"(max-width: 768px) 100vw, (max-width: 1200px) 40vw, 25vw\",\n}\n\nexport default CyCONSTANTS\n","/**\n * Format a number with an attached unit + an optional time unit.\n *\n * **Note:** The time unit can be set to null to only display the unit.\n * @param num The number to format.\n * @param unit The unit to use (optional, defaults to \"Op\").\n * @param timeUnit The time unit to use (optional, defaults to \"s\").\n * @param padding The padding to use (optional, defaults to 12).\n * @param addSpaceBeforeUnit Whether to add a space before the unit (optional, defaults to `true`).\n * @returns The formatted string.\n */\nexport function formatUnit(\n\tnum: number,\n\tunit: string | null = \"Op\",\n\ttimeUnit: string | null = \"s\",\n\tpadding = 12,\n\taddSpaceBeforeUnit = true,\n): string {\n\tlet strUnit: string\n\n\tif (typeof unit === \"string\" && typeof timeUnit === \"string\") {\n\t\tstrUnit = `${unit}/${timeUnit}`\n\t} else if (typeof unit === \"string\") {\n\t\tstrUnit = unit\n\t} else {\n\t\tstrUnit = \"\"\n\t}\n\n\t// Add a space before the unit if needed\n\tconst spaceOrNot = addSpaceBeforeUnit ? \" \" : \"\"\n\n\t// Y = yotta\n\tif (num >= 10 ** 24) {\n\t\treturn `${(num / 10 ** 24).toLocaleString(\"en-US\", {\n\t\t\tminimumFractionDigits: 2,\n\t\t\tmaximumFractionDigits: 2,\n\t\t})}${spaceOrNot}Y${strUnit}`.padStart(padding, \" \")\n\t}\n\n\t// E = exa\n\tif (num >= 10 ** 18) {\n\t\treturn `${(num / 10 ** 18).toLocaleString(\"en-US\", {\n\t\t\tminimumFractionDigits: 2,\n\t\t\tmaximumFractionDigits: 2,\n\t\t})}${spaceOrNot}E${strUnit}`.padStart(padding, \" \")\n\t}\n\n\t// P = peta\n\tif (num >= 10 ** 15) {\n\t\treturn `${(num / 10 ** 15).toLocaleString(\"en-US\", {\n\t\t\tminimumFractionDigits: 2,\n\t\t\tmaximumFractionDigits: 2,\n\t\t})}${spaceOrNot}P${strUnit}`.padStart(padding, \" \")\n\t}\n\n\t// T = tera\n\tif (num >= 10 ** 12) {\n\t\treturn `${(num / 10 ** 12).toLocaleString(\"en-US\", {\n\t\t\tminimumFractionDigits: 2,\n\t\t\tmaximumFractionDigits: 2,\n\t\t})}${spaceOrNot}T${strUnit}`.padStart(padding, \" \")\n\t}\n\n\t// G = giga\n\tif (num >= 10 ** 9) {\n\t\treturn `${(num / 10 ** 9).toLocaleString(\"en-US\", {\n\t\t\tminimumFractionDigits: 2,\n\t\t\tmaximumFractionDigits: 2,\n\t\t})}${spaceOrNot}G${strUnit}`.padStart(padding, \" \")\n\t}\n\n\t// M = mega\n\tif (num >= 10 ** 6) {\n\t\treturn `${(num / 10 ** 6).toLocaleString(\"en-US\", {\n\t\t\tminimumFractionDigits: 2,\n\t\t\tmaximumFractionDigits: 2,\n\t\t})}${spaceOrNot}M${strUnit}`.padStart(padding, \" \")\n\t}\n\n\t// k = kilo\n\tif (num >= 10 ** 3) {\n\t\treturn `${(num / 10 ** 3).toLocaleString(\"en-US\", {\n\t\t\tminimumFractionDigits: 2,\n\t\t\tmaximumFractionDigits: 2,\n\t\t})}${spaceOrNot}k${strUnit}`.padStart(padding, \" \")\n\t}\n\n\treturn `${num.toLocaleString(\"en-US\", {\n\t\tminimumFractionDigits: 2,\n\t\tmaximumFractionDigits: 2,\n\t})}${spaceOrNot}${strUnit}`.padStart(padding, \" \")\n}\n\n/**\n * Format a high-resolution time, into a responsive string with the en-US locale format.\n * @param hrtime The hrtime in nanoseconds.\n * @param padding The padding to use (optional, defaults to 8).\n * @returns The formatted string.\n */\nexport function formatHRTime(hrtime: bigint | number, padding = 8): string {\n\t// Hours\n\tif (hrtime >= 3600000000000000n) {\n\t\treturn `${(Number(hrtime) / 3600000000000000).toLocaleString(\"en-US\", {\n\t\t\tminimumFractionDigits: 2,\n\t\t\tmaximumFractionDigits: 2,\n\t\t})}h`.padStart(padding, \" \")\n\t}\n\n\t// Minutes\n\tif (hrtime >= 60000000000n) {\n\t\treturn `${(Number(hrtime) / 60000000000).toLocaleString(\"en-US\", {\n\t\t\tminimumFractionDigits: 2,\n\t\t\tmaximumFractionDigits: 2,\n\t\t})}m`.padStart(padding, \" \")\n\t}\n\n\t// Seconds\n\tif (hrtime >= 1000000000n) {\n\t\treturn `${(Number(hrtime) / 1000000000).toLocaleString(\"en-US\", {\n\t\t\tminimumFractionDigits: 2,\n\t\t\tmaximumFractionDigits: 2,\n\t\t})}s`.padStart(padding, \" \")\n\t}\n\n\t// Milliseconds\n\tif (hrtime >= 1000000n) {\n\t\treturn `${(Number(hrtime) / 1000000).toLocaleString(\"en-US\", {\n\t\t\tminimumFractionDigits: 2,\n\t\t\tmaximumFractionDigits: 2,\n\t\t})}ms`.padStart(padding, \" \")\n\t}\n\n\t// Microseconds\n\tif (hrtime >= 1000n) {\n\t\treturn `${(Number(hrtime) / 1000).toLocaleString(\"en-US\", {\n\t\t\tminimumFractionDigits: 2,\n\t\t\tmaximumFractionDigits: 2,\n\t\t})}µs`.padStart(padding, \" \")\n\t}\n\n\t// Nanoseconds\n\treturn `${hrtime.toLocaleString(\"en-US\", {\n\t\tminimumFractionDigits: 2,\n\t\tmaximumFractionDigits: 2,\n\t})}ns`.padStart(padding, \" \")\n}\n\n/**\n * Format a time in milliseconds into a responsive string with the en-US locale format.\n * @param time The time in milliseconds.\n * @param padding The padding to use (optional, defaults to 10).\n * @returns The formatted string.\n */\nexport function formatTime(time: number, padding = 10): string {\n\t// Hours\n\tif (time >= 3600000) {\n\t\treturn `${(time / 3600000).toLocaleString(\"en-US\", {\n\t\t\tminimumFractionDigits: 2,\n\t\t\tmaximumFractionDigits: 2,\n\t\t})}h`.padStart(padding, \" \")\n\t}\n\n\t// Minutes\n\tif (time >= 60000) {\n\t\treturn `${(time / 60000).toLocaleString(\"en-US\", {\n\t\t\tminimumFractionDigits: 2,\n\t\t\tmaximumFractionDigits: 2,\n\t\t})}m`.padStart(padding, \" \")\n\t}\n\n\t// Seconds\n\tif (time >= 1000) {\n\t\treturn `${(time / 1000).toLocaleString(\"en-US\", {\n\t\t\tminimumFractionDigits: 2,\n\t\t\tmaximumFractionDigits: 2,\n\t\t})}s`.padStart(padding, \" \")\n\t}\n\n\t// Milliseconds\n\treturn `${time.toLocaleString(\"en-US\", {\n\t\tminimumFractionDigits: 2,\n\t\tmaximumFractionDigits: 2,\n\t})}ms`.padStart(padding, \" \")\n}\n\n/**\n * Format a percentage with the en-US locale format.\n * @param percentage The percentage to format.\n * @param padding The padding to use (optional, defaults to 7).\n * @returns The formatted string.\n */\nexport function formatPercentage(percentage: number, padding = 7): string {\n\treturn `${percentage.toLocaleString(\"en-US\", {\n\t\tminimumFractionDigits: 2,\n\t\tmaximumFractionDigits: 2,\n\t})}%`.padStart(padding, \" \")\n}\n\n/**\n * Truncate a string to a certain length.\n * @param str The string to truncate.\n * @param len The maximum length of the string.\n * @returns The truncated string.\n */\nexport const truncateString = (str: string, len: number) => {\n\tif (str.length <= len) return str\n\treturn `${str.slice(0, len)}...`\n}\n","/**\n * Stringify a JSON object with support for BigInt and functions.\n * @param object The object to stringify.\n * @param indent The number of spaces to indent (optional, defaults to 4)\n * @returns The stringified JSON object.\n */\nexport function stringify(object: unknown, indent = 4): string {\n\treturn JSON.stringify(\n\t\tobject,\n\t\t(_, value) => {\n\t\t\tif (typeof value === \"function\") return value.toString()\n\t\t\tif (typeof value === \"bigint\") return value.toString()\n\n\t\t\treturn value\n\t\t},\n\t\tindent,\n\t)\n}\n","/**\n * Map a number to a range of numbers.\n * @param value The number to map.\n * @param inMin The minimum value of the input range.\n * @param inMax The maximum value of the input range.\n * @param outMin The minimum value of the output range.\n * @param outMax The maximum value of the output range.\n * @param clamp Whether to clamp the output value to the output range (optional, defaults to true).\n * @returns The mapped number.\n */\nexport function mapRange(\n\tvalue: number,\n\tinMin: number,\n\tinMax: number,\n\toutMin: number,\n\toutMax: number,\n\tclamp = true,\n): number {\n\tconst mappedValue = ((value - inMin) * (outMax - outMin)) / (inMax - inMin) + outMin\n\n\tif (clamp) return Math.min(Math.max(mappedValue, outMin), outMax)\n\treturn mappedValue\n}\n","/**\n * A fully permissive Content Security Policy header that can be used for development purposes,\n * no need to say that this should **NEVER** be used in production...\n */\nexport const fullyPermissiveCspHeader = `\n default-src * data: mediastream: blob: filesystem: about: ws: wss: 'unsafe-eval' 'wasm-unsafe-eval' 'unsafe-inline';\n script-src * data: blob: 'unsafe-inline' 'unsafe-eval';\n script-src-elem * data: blob: 'unsafe-inline';\n connect-src * data: blob: 'unsafe-inline';\n img-src * data: blob: 'unsafe-inline';\n media-src * data: blob: 'unsafe-inline';\n frame-src * data: blob: ;\n style-src * data: blob: 'unsafe-inline';\n font-src * data: blob: 'unsafe-inline';\n frame-ancestors * data: blob:;\n`\n\t.replace(/\\s{2,}/g, \" \")\n\t.trim()\n","/**\n * Safely converts any error into a string for parsing/searching.\n * @param error The error to convert.\n * @returns The error as a string.\n */\nexport function convertErrorToString(error: unknown): string {\n\tif (typeof error === \"string\") return error\n\n\tlet stringifiedError = \"\"\n\ttry {\n\t\tstringifiedError = JSON.stringify(error)\n\t} catch (_) {\n\t\t// Ignore\n\t}\n\n\tif (stringifiedError === \"\" || stringifiedError === \"{}\") stringifiedError = `${error}`\n\treturn stringifiedError\n}\n","/**\n * Shades a color by a percentage.\n * @param color The color to shade.\n * @param percent The percentage to shade by.\n * @returns The shaded color.\n */\nexport function shadeColor(color: string, percent: number) {\n\tlet R = Number.parseInt(color.substring(1, 3), 16)\n\tlet G = Number.parseInt(color.substring(3, 5), 16)\n\tlet B = Number.parseInt(color.substring(5, 7), 16)\n\n\tR = Math.round((R * (100 + percent)) / 100)\n\tG = Math.round((G * (100 + percent)) / 100)\n\tB = Math.round((B * (100 + percent)) / 100)\n\n\tR = R < 255 ? R : 255\n\tG = G < 255 ? G : 255\n\tB = B < 255 ? B : 255\n\n\tR = Math.round(R)\n\tG = Math.round(G)\n\tB = Math.round(B)\n\n\tconst RR = R.toString(16).length === 1 ? `0${R.toString(16)}` : R.toString(16)\n\tconst GG = G.toString(16).length === 1 ? `0${G.toString(16)}` : G.toString(16)\n\tconst BB = B.toString(16).length === 1 ? `0${B.toString(16)}` : B.toString(16)\n\n\treturn `#${RR}${GG}${BB}`\n}\n"]}
1
+ {"version":3,"sources":["../src/main/checks.ts","../src/main/constants.ts","../src/main/formats.ts","../src/main/json.ts","../src/main/maths.ts","../src/main/middleware.ts","../src/main/strings.ts","../src/main/styling.ts"],"names":["isServer","isClient","CyCONSTANTS","constants_default","formatUnit","num","unit","timeUnit","padding","addSpaceBeforeUnit","strUnit","spaceOrNot","formatHRTime","hrtime","formatTime","time","formatPercentage","percentage","truncateString","str","len","stringify","object","indent","_","value","mapRange","inMin","inMax","outMin","outMax","clamp","mappedValue","fullyPermissiveCspHeader","convertErrorToString","error","stringifiedError","decodeObjectURIComponents","obj","key","shadeColor","color","percent","R","G","B","RR","GG","BB"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Returns true if the code is running in a server environment.\n */\nexport function isServer() {\n\treturn typeof window === \"undefined\"\n}\n\n/**\n * Returns true if the code is running in a client environment.\n */\nexport function isClient() {\n\treturn !isServer()\n}\n","/**\n * A set of general constants.\n */\nconst CyCONSTANTS = {\n\t// Security\n\tHASH_SALT_ROUNDS: 12,\n\n\t// User\n\tMIN_USERNAME_LENGTH: 4,\n\tMAX_USERNAME_LENGTH: 36,\n\tMIN_PASSWORD_LENGTH: 8,\n\tMAX_PASSWORD_LENGTH: 255,\n\tMAX_NAME_LENGTH: 128,\n\tMIN_FIRST_NAME_LENGTH: 1,\n\tMAX_FIRST_NAME_LENGTH: 64,\n\tMIN_LAST_NAME_LENGTH: 1,\n\tMAX_LAST_NAME_LENGTH: 64,\n\tMAX_DESCRIPTION_LENGTH: 2048,\n\tMAX_URL_LENGTH: 2048,\n\tMAX_KEYWORD_LENGTH: 32,\n\tMAX_KEYWORDS_COUNT: 8,\n\tMAX_EXTERNAL_LINKS_COUNT: 6,\n\tUSERNAME_REGEX: /^[a-zA-Z0-9_.-]+$/,\n\n\t// Image & Video sizes\n\tIMG_SIZES_HIGH_QUALITY: \"(max-width: 768px) 100vw, (max-width: 1200px) 75vw, 50vw\",\n\tIMG_SIZES_MEDIUM_QUALITY: \"(max-width: 768px) 100vw, (max-width: 1200px) 60vw, 40vw\",\n\tIMG_SIZES_BASE_QUALITY: \"(max-width: 768px) 100vw, (max-width: 1200px) 50vw, 33vw\",\n\tIMG_SIZES_LOW_QUALITY: \"(max-width: 768px) 100vw, (max-width: 1200px) 40vw, 25vw\",\n}\n\nexport default CyCONSTANTS\n","/**\n * Format a number with an attached unit + an optional time unit.\n *\n * **Note:** The time unit can be set to null to only display the unit.\n * @param num The number to format.\n * @param unit The unit to use (optional, defaults to \"Op\").\n * @param timeUnit The time unit to use (optional, defaults to \"s\").\n * @param padding The padding to use (optional, defaults to 12).\n * @param addSpaceBeforeUnit Whether to add a space before the unit (optional, defaults to `true`).\n * @returns The formatted string.\n */\nexport function formatUnit(\n\tnum: number,\n\tunit: string | null = \"Op\",\n\ttimeUnit: string | null = \"s\",\n\tpadding = 12,\n\taddSpaceBeforeUnit = true,\n): string {\n\tlet strUnit: string\n\n\tif (typeof unit === \"string\" && typeof timeUnit === \"string\") {\n\t\tstrUnit = `${unit}/${timeUnit}`\n\t} else if (typeof unit === \"string\") {\n\t\tstrUnit = unit\n\t} else {\n\t\tstrUnit = \"\"\n\t}\n\n\t// Add a space before the unit if needed\n\tconst spaceOrNot = addSpaceBeforeUnit ? \" \" : \"\"\n\n\t// Y = yotta\n\tif (num >= 10 ** 24) {\n\t\treturn `${(num / 10 ** 24).toLocaleString(\"en-US\", {\n\t\t\tminimumFractionDigits: 2,\n\t\t\tmaximumFractionDigits: 2,\n\t\t})}${spaceOrNot}Y${strUnit}`.padStart(padding, \" \")\n\t}\n\n\t// E = exa\n\tif (num >= 10 ** 18) {\n\t\treturn `${(num / 10 ** 18).toLocaleString(\"en-US\", {\n\t\t\tminimumFractionDigits: 2,\n\t\t\tmaximumFractionDigits: 2,\n\t\t})}${spaceOrNot}E${strUnit}`.padStart(padding, \" \")\n\t}\n\n\t// P = peta\n\tif (num >= 10 ** 15) {\n\t\treturn `${(num / 10 ** 15).toLocaleString(\"en-US\", {\n\t\t\tminimumFractionDigits: 2,\n\t\t\tmaximumFractionDigits: 2,\n\t\t})}${spaceOrNot}P${strUnit}`.padStart(padding, \" \")\n\t}\n\n\t// T = tera\n\tif (num >= 10 ** 12) {\n\t\treturn `${(num / 10 ** 12).toLocaleString(\"en-US\", {\n\t\t\tminimumFractionDigits: 2,\n\t\t\tmaximumFractionDigits: 2,\n\t\t})}${spaceOrNot}T${strUnit}`.padStart(padding, \" \")\n\t}\n\n\t// G = giga\n\tif (num >= 10 ** 9) {\n\t\treturn `${(num / 10 ** 9).toLocaleString(\"en-US\", {\n\t\t\tminimumFractionDigits: 2,\n\t\t\tmaximumFractionDigits: 2,\n\t\t})}${spaceOrNot}G${strUnit}`.padStart(padding, \" \")\n\t}\n\n\t// M = mega\n\tif (num >= 10 ** 6) {\n\t\treturn `${(num / 10 ** 6).toLocaleString(\"en-US\", {\n\t\t\tminimumFractionDigits: 2,\n\t\t\tmaximumFractionDigits: 2,\n\t\t})}${spaceOrNot}M${strUnit}`.padStart(padding, \" \")\n\t}\n\n\t// k = kilo\n\tif (num >= 10 ** 3) {\n\t\treturn `${(num / 10 ** 3).toLocaleString(\"en-US\", {\n\t\t\tminimumFractionDigits: 2,\n\t\t\tmaximumFractionDigits: 2,\n\t\t})}${spaceOrNot}k${strUnit}`.padStart(padding, \" \")\n\t}\n\n\treturn `${num.toLocaleString(\"en-US\", {\n\t\tminimumFractionDigits: 2,\n\t\tmaximumFractionDigits: 2,\n\t})}${spaceOrNot}${strUnit}`.padStart(padding, \" \")\n}\n\n/**\n * Format a high-resolution time, into a responsive string with the en-US locale format.\n * @param hrtime The hrtime in nanoseconds.\n * @param padding The padding to use (optional, defaults to 8).\n * @returns The formatted string.\n */\nexport function formatHRTime(hrtime: bigint | number, padding = 8): string {\n\t// Hours\n\tif (hrtime >= 3600000000000000n) {\n\t\treturn `${(Number(hrtime) / 3600000000000000).toLocaleString(\"en-US\", {\n\t\t\tminimumFractionDigits: 2,\n\t\t\tmaximumFractionDigits: 2,\n\t\t})}h`.padStart(padding, \" \")\n\t}\n\n\t// Minutes\n\tif (hrtime >= 60000000000n) {\n\t\treturn `${(Number(hrtime) / 60000000000).toLocaleString(\"en-US\", {\n\t\t\tminimumFractionDigits: 2,\n\t\t\tmaximumFractionDigits: 2,\n\t\t})}m`.padStart(padding, \" \")\n\t}\n\n\t// Seconds\n\tif (hrtime >= 1000000000n) {\n\t\treturn `${(Number(hrtime) / 1000000000).toLocaleString(\"en-US\", {\n\t\t\tminimumFractionDigits: 2,\n\t\t\tmaximumFractionDigits: 2,\n\t\t})}s`.padStart(padding, \" \")\n\t}\n\n\t// Milliseconds\n\tif (hrtime >= 1000000n) {\n\t\treturn `${(Number(hrtime) / 1000000).toLocaleString(\"en-US\", {\n\t\t\tminimumFractionDigits: 2,\n\t\t\tmaximumFractionDigits: 2,\n\t\t})}ms`.padStart(padding, \" \")\n\t}\n\n\t// Microseconds\n\tif (hrtime >= 1000n) {\n\t\treturn `${(Number(hrtime) / 1000).toLocaleString(\"en-US\", {\n\t\t\tminimumFractionDigits: 2,\n\t\t\tmaximumFractionDigits: 2,\n\t\t})}µs`.padStart(padding, \" \")\n\t}\n\n\t// Nanoseconds\n\treturn `${hrtime.toLocaleString(\"en-US\", {\n\t\tminimumFractionDigits: 2,\n\t\tmaximumFractionDigits: 2,\n\t})}ns`.padStart(padding, \" \")\n}\n\n/**\n * Format a time in milliseconds into a responsive string with the en-US locale format.\n * @param time The time in milliseconds.\n * @param padding The padding to use (optional, defaults to 10).\n * @returns The formatted string.\n */\nexport function formatTime(time: number, padding = 10): string {\n\t// Hours\n\tif (time >= 3600000) {\n\t\treturn `${(time / 3600000).toLocaleString(\"en-US\", {\n\t\t\tminimumFractionDigits: 2,\n\t\t\tmaximumFractionDigits: 2,\n\t\t})}h`.padStart(padding, \" \")\n\t}\n\n\t// Minutes\n\tif (time >= 60000) {\n\t\treturn `${(time / 60000).toLocaleString(\"en-US\", {\n\t\t\tminimumFractionDigits: 2,\n\t\t\tmaximumFractionDigits: 2,\n\t\t})}m`.padStart(padding, \" \")\n\t}\n\n\t// Seconds\n\tif (time >= 1000) {\n\t\treturn `${(time / 1000).toLocaleString(\"en-US\", {\n\t\t\tminimumFractionDigits: 2,\n\t\t\tmaximumFractionDigits: 2,\n\t\t})}s`.padStart(padding, \" \")\n\t}\n\n\t// Milliseconds\n\treturn `${time.toLocaleString(\"en-US\", {\n\t\tminimumFractionDigits: 2,\n\t\tmaximumFractionDigits: 2,\n\t})}ms`.padStart(padding, \" \")\n}\n\n/**\n * Format a percentage with the en-US locale format.\n * @param percentage The percentage to format.\n * @param padding The padding to use (optional, defaults to 7).\n * @returns The formatted string.\n */\nexport function formatPercentage(percentage: number, padding = 7): string {\n\treturn `${percentage.toLocaleString(\"en-US\", {\n\t\tminimumFractionDigits: 2,\n\t\tmaximumFractionDigits: 2,\n\t})}%`.padStart(padding, \" \")\n}\n\n/**\n * Truncate a string to a certain length.\n * @param str The string to truncate.\n * @param len The maximum length of the string.\n * @returns The truncated string.\n */\nexport const truncateString = (str: string, len: number) => {\n\tif (str.length <= len) return str\n\treturn `${str.slice(0, len)}...`\n}\n","/**\n * Stringify a JSON object with support for BigInt and functions.\n * @param object The object to stringify.\n * @param indent The number of spaces to indent (optional, defaults to 4)\n * @returns The stringified JSON object.\n */\nexport function stringify(object: unknown, indent = 4): string {\n\treturn JSON.stringify(\n\t\tobject,\n\t\t(_, value) => {\n\t\t\tif (typeof value === \"function\") return value.toString()\n\t\t\tif (typeof value === \"bigint\") return value.toString()\n\n\t\t\treturn value\n\t\t},\n\t\tindent,\n\t)\n}\n","/**\n * Map a number to a range of numbers.\n * @param value The number to map.\n * @param inMin The minimum value of the input range.\n * @param inMax The maximum value of the input range.\n * @param outMin The minimum value of the output range.\n * @param outMax The maximum value of the output range.\n * @param clamp Whether to clamp the output value to the output range (optional, defaults to true).\n * @returns The mapped number.\n */\nexport function mapRange(\n\tvalue: number,\n\tinMin: number,\n\tinMax: number,\n\toutMin: number,\n\toutMax: number,\n\tclamp = true,\n): number {\n\tconst mappedValue = ((value - inMin) * (outMax - outMin)) / (inMax - inMin) + outMin\n\n\tif (clamp) return Math.min(Math.max(mappedValue, outMin), outMax)\n\treturn mappedValue\n}\n","/**\n * A fully permissive Content Security Policy header that can be used for development purposes,\n * no need to say that this should **NEVER** be used in production...\n */\nexport const fullyPermissiveCspHeader = `\n default-src * data: mediastream: blob: filesystem: about: ws: wss: 'unsafe-eval' 'wasm-unsafe-eval' 'unsafe-inline';\n script-src * data: blob: 'unsafe-inline' 'unsafe-eval';\n script-src-elem * data: blob: 'unsafe-inline';\n connect-src * data: blob: 'unsafe-inline';\n img-src * data: blob: 'unsafe-inline';\n media-src * data: blob: 'unsafe-inline';\n frame-src * data: blob: ;\n style-src * data: blob: 'unsafe-inline';\n font-src * data: blob: 'unsafe-inline';\n frame-ancestors * data: blob:;\n`\n\t.replace(/\\s{2,}/g, \" \")\n\t.trim()\n","/**\n * Safely converts any error into a string for parsing/searching.\n * @param error The error to convert.\n * @returns The error as a string.\n */\nexport function convertErrorToString(error: unknown): string {\n\tif (typeof error === \"string\") return error\n\n\tlet stringifiedError = \"\"\n\ttry {\n\t\tstringifiedError = JSON.stringify(error)\n\t} catch (_) {\n\t\t// Ignore\n\t}\n\n\tif (stringifiedError === \"\" || stringifiedError === \"{}\") stringifiedError = `${error}`\n\treturn stringifiedError\n}\n\n/**\n * Decodes all components of an object as URI components (e.g., for decoding Next.js `req.query`).\n * @param obj The object to decode.\n * @returns The decoded object.\n */\nexport function decodeObjectURIComponents(\n\tobj: Partial<{ [key: string]: string | string[] }>,\n): Partial<{ [key: string]: string | string[] }> {\n\tfor (const key in obj) {\n\t\ttry {\n\t\t\tobj[key] = decodeURIComponent(String(obj[key]))\n\t\t} catch (_) {\n\t\t\t// Ignore decoding errors\n\t\t}\n\t}\n\n\treturn obj\n}\n","/**\n * Shades a color by a percentage.\n * @param color The color to shade.\n * @param percent The percentage to shade by.\n * @returns The shaded color.\n */\nexport function shadeColor(color: string, percent: number) {\n\tlet R = Number.parseInt(color.substring(1, 3), 16)\n\tlet G = Number.parseInt(color.substring(3, 5), 16)\n\tlet B = Number.parseInt(color.substring(5, 7), 16)\n\n\tR = Math.round((R * (100 + percent)) / 100)\n\tG = Math.round((G * (100 + percent)) / 100)\n\tB = Math.round((B * (100 + percent)) / 100)\n\n\tR = R < 255 ? R : 255\n\tG = G < 255 ? G : 255\n\tB = B < 255 ? B : 255\n\n\tR = Math.round(R)\n\tG = Math.round(G)\n\tB = Math.round(B)\n\n\tconst RR = R.toString(16).length === 1 ? `0${R.toString(16)}` : R.toString(16)\n\tconst GG = G.toString(16).length === 1 ? `0${G.toString(16)}` : G.toString(16)\n\tconst BB = B.toString(16).length === 1 ? `0${B.toString(16)}` : B.toString(16)\n\n\treturn `#${RR}${GG}${BB}`\n}\n"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cybearl/cypack",
3
3
  "productName": "CyPack",
4
- "version": "1.8.1",
4
+ "version": "1.8.3",
5
5
  "description": "A set of general utilities for Cybearl projects.",
6
6
  "author": "Cybearl <contact@cybearl.com> (https://www.cybearl.com/)",
7
7
  "license": "MIT",