@ooneex/utils 0.0.6 → 0.1.0

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.
Files changed (69) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +539 -203
  3. package/dist/index.d.ts +24 -16
  4. package/dist/index.js +3 -1
  5. package/dist/index.js.map +25 -0
  6. package/package.json +22 -14
  7. package/dist/capitalizeWord.d.ts +0 -2
  8. package/dist/capitalizeWord.d.ts.map +0 -1
  9. package/dist/dataURLtoFile.d.ts +0 -2
  10. package/dist/dataURLtoFile.d.ts.map +0 -1
  11. package/dist/formatRelativeNumber.d.ts +0 -5
  12. package/dist/formatRelativeNumber.d.ts.map +0 -1
  13. package/dist/index.d.ts.map +0 -1
  14. package/dist/millisecondsToHMS.d.ts +0 -2
  15. package/dist/millisecondsToHMS.d.ts.map +0 -1
  16. package/dist/parseEnvVars.d.ts +0 -2
  17. package/dist/parseEnvVars.d.ts.map +0 -1
  18. package/dist/parseString.d.ts +0 -2
  19. package/dist/parseString.d.ts.map +0 -1
  20. package/dist/random.d.ts +0 -6
  21. package/dist/random.d.ts.map +0 -1
  22. package/dist/secondsToHMS.d.ts +0 -2
  23. package/dist/secondsToHMS.d.ts.map +0 -1
  24. package/dist/secondsToMS.d.ts +0 -2
  25. package/dist/secondsToMS.d.ts.map +0 -1
  26. package/dist/sleep.d.ts +0 -2
  27. package/dist/sleep.d.ts.map +0 -1
  28. package/dist/splitToWords.d.ts +0 -2
  29. package/dist/splitToWords.d.ts.map +0 -1
  30. package/dist/toCamelCase.d.ts +0 -2
  31. package/dist/toCamelCase.d.ts.map +0 -1
  32. package/dist/toKebabCase.d.ts +0 -2
  33. package/dist/toKebabCase.d.ts.map +0 -1
  34. package/dist/toPascalCase.d.ts +0 -2
  35. package/dist/toPascalCase.d.ts.map +0 -1
  36. package/dist/trim.d.ts +0 -2
  37. package/dist/trim.d.ts.map +0 -1
  38. package/src/capitalizeWord.ts +0 -3
  39. package/src/dataURLtoFile.ts +0 -12
  40. package/src/formatRelativeNumber.ts +0 -7
  41. package/src/index.ts +0 -15
  42. package/src/millisecondsToHMS.ts +0 -16
  43. package/src/parseEnvVars.ts +0 -14
  44. package/src/parseString.ts +0 -47
  45. package/src/random.ts +0 -13
  46. package/src/secondsToHMS.ts +0 -16
  47. package/src/secondsToMS.ts +0 -5
  48. package/src/sleep.ts +0 -3
  49. package/src/splitToWords.ts +0 -14
  50. package/src/toCamelCase.ts +0 -8
  51. package/src/toKebabCase.ts +0 -6
  52. package/src/toPascalCase.ts +0 -7
  53. package/src/trim.ts +0 -8
  54. package/tests/capitalizeWord.spec.ts +0 -163
  55. package/tests/dataURLtoFile.spec.ts +0 -472
  56. package/tests/formatRelativeNumber.spec.ts +0 -303
  57. package/tests/millisecondsToHMS.spec.ts +0 -209
  58. package/tests/parseEnvVars.spec.ts +0 -468
  59. package/tests/parseString.spec.ts +0 -377
  60. package/tests/random.spec.ts +0 -422
  61. package/tests/secondsToHMS.spec.ts +0 -341
  62. package/tests/secondsToMS.spec.ts +0 -467
  63. package/tests/splitToWords.spec.ts +0 -359
  64. package/tests/toCamelCase.spec.ts +0 -526
  65. package/tests/toKebabCase.spec.ts +0 -664
  66. package/tests/toPascalCase.spec.ts +0 -721
  67. package/tests/trim.spec.ts +0 -486
  68. package/tsconfig.build.json +0 -14
  69. package/tsconfig.json +0 -11
package/dist/index.d.ts CHANGED
@@ -1,16 +1,24 @@
1
- export { capitalizeWord } from "./capitalizeWord";
2
- export { dataURLtoFile } from "./dataURLtoFile";
3
- export { formatRelativeNumber } from "./formatRelativeNumber";
4
- export { millisecondsToHMS } from "./millisecondsToHMS";
5
- export { parseEnvVars } from "./parseEnvVars";
6
- export { parseString } from "./parseString";
7
- export { random } from "./random";
8
- export { secondsToHMS } from "./secondsToHMS";
9
- export { secondsToMS } from "./secondsToMS";
10
- export { sleep } from "./sleep";
11
- export { splitToWords } from "./splitToWords";
12
- export { toCamelCase } from "./toCamelCase";
13
- export { toKebabCase } from "./toKebabCase";
14
- export { toPascalCase } from "./toPascalCase";
15
- export { trim } from "./trim";
16
- //# sourceMappingURL=index.d.ts.map
1
+ declare const capitalizeWord: (word: string) => string;
2
+ declare const dataURLtoFile: (dataurl: string, filename: string) => File;
3
+ declare const formatRelativeNumber: (num: number, config?: {
4
+ precision?: number;
5
+ lang?: string;
6
+ }) => string;
7
+ declare const millisecondsToHMS: (ms: number) => string;
8
+ declare const parseEnvVars: <T = Record<string, string>>(envs: Record<string, string>) => T;
9
+ declare const parseString: <T = unknown>(text: string) => T;
10
+ declare const random: {
11
+ nanoid(size?: number): string;
12
+ stringInt(size?: number): string;
13
+ nanoidFactory(size?: number): (size?: number) => string;
14
+ };
15
+ declare const secondsToHMS: (seconds: number) => string;
16
+ declare const secondsToMS: (seconds: number) => string;
17
+ declare const sleep: (ms: number) => Promise<void>;
18
+ declare const splitToWords: (input: string) => string[];
19
+ declare const toCamelCase: (input: string) => string;
20
+ declare const toKebabCase: (input: string) => string;
21
+ declare const toPascalCase: (input: string) => string;
22
+ declare const toSnakeCase: (input: string) => string;
23
+ declare const trim: (text: string, char?: string) => string;
24
+ export { trim, toSnakeCase, toPascalCase, toKebabCase, toCamelCase, splitToWords, sleep, secondsToMS, secondsToHMS, random, parseString, parseEnvVars, millisecondsToHMS, formatRelativeNumber, dataURLtoFile, capitalizeWord };
package/dist/index.js CHANGED
@@ -1 +1,3 @@
1
- var i=(r)=>{return r?r[0]?.toUpperCase()+r.slice(1).toLowerCase():r};var g=(r,t)=>{let o=r.split(","),n=o[0]?.match(/:(.*?);/),e=n?n[1]:"",l=atob(o[1]),a=l.length,f=new Uint8Array(a);while(a--)f[a]=l.charCodeAt(a);return new File([f],t,{type:e})};var d=(r,t)=>{return new Intl.NumberFormat(t?.lang??"en-GB",{notation:"compact",compactDisplay:"short",maximumFractionDigits:t?.precision??1}).format(r)};var S=(r)=>{let t=Math.floor(r/1000),o=Math.floor(t/3600),n=Math.floor(t%3600/60),e=t%60;if(o>0)return`${o}:${n.toString().padStart(2,"0")}:${e.toString().padStart(2,"0")}`;if(n>0)return`${n}:${e.toString().padStart(2,"0")}`;return e.toString()};var p=(r,t=" ")=>{if([".","[","]","(",")","+","*","^","$","?","/","\\"].includes(t))t=`\\${t}`;let o=new RegExp(`^${t}+|${t}+$`,"g");return r.replace(o,"")};var m=(r)=>{if(/^[0-9]+$/.test(r))return Number.parseInt(r,10);if(/^[0-9]+[.][0-9]+$/.test(r))return Number.parseFloat(r);if(/^true$/i.test(r))return!0;if(/^false$/i.test(r))return!1;if(/^null$/i.test(r))return null;if(/^\[/.test(r)&&/]$/.test(r)){let o=p(r,"\\[|\\]").split(/, */);return o=o.map((n)=>{return m(n)}),o}try{let t=JSON.parse(r);if(t===Number.POSITIVE_INFINITY||t===Number.NEGATIVE_INFINITY)return r;return t}catch{return r}};var b=/\p{Lu}\p{Ll}+/u,T=/\p{Lu}+(?=(\p{Lu}\p{Ll})|\P{L}|\b)/u,$=/(\p{Ll}+)/u,x=/\p{L}+/u,C=/\p{N}+/u,M=new RegExp(`${b.source}|${T.source}|${$.source}|${x.source}|${C.source}`,"gu"),s=(r)=>{return r.match(M)??[]};var c=(r)=>{r=r.trim();let[t="",...o]=s(r);return[t.toLowerCase(),...o.map(i)].join("")};var h=(r)=>{let t={};for(let o in r){let n=c(o),e=m(r[o]);t[n]=e}return t};import{customAlphabet as u}from"nanoid";var N={nanoid(r){return u("1234567890abcdef",r??10)()},stringInt(r){return u("1234567890",r??10)()},nanoidFactory(r){return u("1234567890abcdef",r??10)}};var w=(r)=>{let t=Math.floor(r),o=Math.floor(t/3600),n=Math.floor(t%3600/60),e=t%60;if(o>0)return`${o}:${n.toString().padStart(2,"0")}:${e.toString().padStart(2,"0")}`;if(n>0)return`${n}:${e.toString().padStart(2,"0")}`;return e.toString()};var F=(r)=>{let t=Math.floor(r/60),o=r%60;return`${t}:${o.toString().padStart(2,"0")}`};var k=(r)=>{return new Promise((t)=>setTimeout(t,r))};var I=(r)=>{return r=r.trim(),s(r).join("-").toLowerCase()};var v=(r)=>{return r=r.trim(),s(r).map(i).join("")};export{p as trim,v as toPascalCase,I as toKebabCase,c as toCamelCase,s as splitToWords,k as sleep,F as secondsToMS,w as secondsToHMS,N as random,m as parseString,h as parseEnvVars,S as millisecondsToHMS,d as formatRelativeNumber,g as dataURLtoFile,i as capitalizeWord};
1
+ var i=(r)=>r?r[0]?.toUpperCase()+r.slice(1).toLowerCase():r;var u=(r,t)=>{let o=r.split(","),e=o[0]?.match(/:(.*?);/)?.[1]||"",f=atob(o[1]),a=f.length,g=new Uint8Array(a);while(a--)g[a]=f.charCodeAt(a);return new File([g],t,{type:e})};var d=(r,t)=>new Intl.NumberFormat(t?.lang??"en-GB",{notation:"compact",compactDisplay:"short",maximumFractionDigits:t?.precision??1}).format(r);var S=(r)=>{let t=Math.floor(r/1000),o=Math.floor(t/3600),s=Math.floor(t%3600/60),e=t%60;if(o>0)return`${o}:${s.toString().padStart(2,"0")}:${e.toString().padStart(2,"0")}`;if(s>0)return`${s}:${e.toString().padStart(2,"0")}`;return e.toString()};var p=(r,t=" ")=>{if([".","[","]","(",")","+","*","^","$","?","/","\\"].includes(t))t=`\\${t}`;let o=new RegExp(`^${t}+|${t}+$`,"g");return r.replace(o,"")};var m=(r)=>{if(/^[0-9]+$/.test(r))return Number.parseInt(r,10);if(/^[0-9]+[.][0-9]+$/.test(r))return Number.parseFloat(r);if(/^true$/i.test(r))return!0;if(/^false$/i.test(r))return!1;if(/^null$/i.test(r))return null;if(/^\[/.test(r)&&/]$/.test(r)){let o=p(r,"\\[|\\]").split(/, */);return o=o.map((s)=>m(s)),o}try{let t=JSON.parse(r);if(t===Number.POSITIVE_INFINITY||t===Number.NEGATIVE_INFINITY)return r;return t}catch{return r}};var T=/\p{Lu}\p{Ll}+/u,b=/\p{Lu}+(?=(\p{Lu}\p{Ll})|\P{L}|\b)/u,x=/(\p{Ll}+)/u,$=/\p{L}+/u,C=/\p{N}+/u,M=new RegExp(`${T.source}|${b.source}|${x.source}|${$.source}|${C.source}`,"gu"),n=(r)=>r.match(M)??[];var c=(r)=>{r=r.trim();let[t="",...o]=n(r);return[t.toLowerCase(),...o.map(i)].join("")};var h=(r)=>{let t={};for(let o in r){let s=c(o),e=m(r[o]);t[s]=e}return t};import{customAlphabet as l}from"nanoid";var F={nanoid(r){return l("1234567890abcdef",r??10)()},stringInt(r){return l("1234567890",r??10)()},nanoidFactory(r){return l("1234567890abcdef",r??10)}};var N=(r)=>{let t=Math.floor(r),o=Math.floor(t/3600),s=Math.floor(t%3600/60),e=t%60;if(o>0)return`${o}:${s.toString().padStart(2,"0")}:${e.toString().padStart(2,"0")}`;if(s>0)return`${s}:${e.toString().padStart(2,"0")}`;return e.toString()};var w=(r)=>{let t=Math.floor(r/60),o=r%60;return`${t}:${o.toString().padStart(2,"0")}`};var I=(r)=>new Promise((t)=>setTimeout(t,r));var v=(r)=>{return r=r.trim(),n(r).join("-").toLowerCase()};var k=(r)=>{return r=r.trim(),n(r).map(i).join("")};var y=(r)=>{return r=r.trim(),n(r).map((o)=>o.toLowerCase()).join("_")};export{p as trim,y as toSnakeCase,k as toPascalCase,v as toKebabCase,c as toCamelCase,n as splitToWords,I as sleep,w as secondsToMS,N as secondsToHMS,F as random,m as parseString,h as parseEnvVars,S as millisecondsToHMS,d as formatRelativeNumber,u as dataURLtoFile,i as capitalizeWord};
2
+
3
+ //# debugId=4BD1C3DDAD8FB3AF64756E2164756E21
@@ -0,0 +1,25 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["src/capitalizeWord.ts", "src/dataURLtoFile.ts", "src/formatRelativeNumber.ts", "src/millisecondsToHMS.ts", "src/trim.ts", "src/parseString.ts", "src/splitToWords.ts", "src/toCamelCase.ts", "src/parseEnvVars.ts", "src/random.ts", "src/secondsToHMS.ts", "src/secondsToMS.ts", "src/sleep.ts", "src/toKebabCase.ts", "src/toPascalCase.ts", "src/toSnakeCase.ts"],
4
+ "sourcesContent": [
5
+ "export const capitalizeWord = (word: string): string =>\n word ? word[0]?.toUpperCase() + word.slice(1).toLowerCase() : word;\n",
6
+ "export const dataURLtoFile = (dataurl: string, filename: string): File => {\n const arr = dataurl.split(\",\");\n const mimeMatch = arr[0]?.match(/:(.*?);/);\n const mime = mimeMatch?.[1] || \"\";\n const bstr = atob(arr[1] as string);\n let n = bstr.length;\n const u8arr = new Uint8Array(n);\n while (n--) {\n u8arr[n] = bstr.charCodeAt(n);\n }\n return new File([u8arr], filename, { type: mime });\n};\n",
7
+ "export const formatRelativeNumber = (num: number, config?: { precision?: number; lang?: string }): string =>\n new Intl.NumberFormat(config?.lang ?? \"en-GB\", {\n notation: \"compact\",\n compactDisplay: \"short\",\n maximumFractionDigits: config?.precision ?? 1,\n }).format(num);\n",
8
+ "export const millisecondsToHMS = (ms: number): string => {\n const totalSeconds = Math.floor(ms / 1000);\n const hours = Math.floor(totalSeconds / 3600);\n const minutes = Math.floor((totalSeconds % 3600) / 60);\n const seconds = totalSeconds % 60;\n\n if (hours > 0) {\n return `${hours}:${minutes.toString().padStart(2, \"0\")}:${seconds.toString().padStart(2, \"0\")}`;\n }\n\n if (minutes > 0) {\n return `${minutes}:${seconds.toString().padStart(2, \"0\")}`;\n }\n\n return seconds.toString();\n};\n",
9
+ "export const trim = (text: string, char = \" \"): string => {\n if ([\".\", \"[\", \"]\", \"(\", \")\", \"+\", \"*\", \"^\", \"$\", \"?\", \"/\", \"\\\\\"].includes(char)) {\n char = `\\\\${char}`;\n }\n\n const reg = new RegExp(`^${char}+|${char}+$`, \"g\");\n return text.replace(reg, \"\");\n};\n",
10
+ "import { trim } from \"./trim\";\n\nexport const parseString = <T = unknown>(text: string): T => {\n if (/^[0-9]+$/.test(text)) {\n return Number.parseInt(text, 10) as T;\n }\n\n if (/^[0-9]+[.][0-9]+$/.test(text)) {\n return Number.parseFloat(text) as T;\n }\n\n if (/^true$/i.test(text)) {\n return true as T;\n }\n\n if (/^false$/i.test(text)) {\n return false as T;\n }\n\n if (/^null$/i.test(text)) {\n return null as T;\n }\n\n if (/^\\[/.test(text) && /]$/.test(text)) {\n const trimmedText = trim(text, \"\\\\[|\\\\]\");\n\n let values: unknown[] = trimmedText.split(/, */);\n\n values = values.map((value) => parseString(value as string));\n\n return values as T;\n }\n\n try {\n const result = JSON.parse(text);\n\n if (result === Number.POSITIVE_INFINITY || result === Number.NEGATIVE_INFINITY) {\n return text as T;\n }\n\n return result;\n } catch {\n return text as T;\n }\n};\n",
11
+ "const CAPITALIZED_WORD_REGEXP = /\\p{Lu}\\p{Ll}+/u; // e.g. Apple\nconst ACRONYM_REGEXP = /\\p{Lu}+(?=(\\p{Lu}\\p{Ll})|\\P{L}|\\b)/u; // e.g. ID, URL, handles an acronym followed by a capitalized word e.g. HTMLElement\nconst LOWERCASED_WORD_REGEXP = /(\\p{Ll}+)/u; // e.g. apple\nconst ANY_LETTERS = /\\p{L}+/u; // will match any sequence of letters, including in languages without a concept of upper/lower case\nconst DIGITS_REGEXP = /\\p{N}+/u; // e.g. 123\n\nconst WORD_OR_NUMBER_REGEXP = new RegExp(\n `${CAPITALIZED_WORD_REGEXP.source}|${ACRONYM_REGEXP.source}|${LOWERCASED_WORD_REGEXP.source}|${ANY_LETTERS.source}|${DIGITS_REGEXP.source}`,\n \"gu\",\n);\n\nexport const splitToWords = (input: string): string[] => input.match(WORD_OR_NUMBER_REGEXP) ?? [];\n",
12
+ "import { capitalizeWord } from \"./capitalizeWord\";\nimport { splitToWords } from \"./splitToWords\";\n\nexport const toCamelCase = (input: string): string => {\n input = input.trim();\n const [first = \"\", ...rest] = splitToWords(input);\n return [first.toLowerCase(), ...rest.map(capitalizeWord)].join(\"\");\n};\n",
13
+ "import { parseString } from \"./parseString\";\nimport { toCamelCase } from \"./toCamelCase\";\n\nexport const parseEnvVars = <T = Record<string, string>>(envs: Record<string, string>): T => {\n const vars: Record<string, string> = {};\n\n for (const key in envs) {\n const k = toCamelCase(key);\n const value = parseString(envs[key] as string) as string;\n vars[k] = value;\n }\n\n return vars as T;\n};\n",
14
+ "import { customAlphabet } from \"nanoid\";\n\nexport const random = {\n nanoid(size?: number): string {\n return customAlphabet(\"1234567890abcdef\", size ?? 10)();\n },\n stringInt(size?: number): string {\n return customAlphabet(\"1234567890\", size ?? 10)();\n },\n nanoidFactory(size?: number): (size?: number) => string {\n return customAlphabet(\"1234567890abcdef\", size ?? 10);\n },\n};\n",
15
+ "export const secondsToHMS = (seconds: number): string => {\n const totalSeconds = Math.floor(seconds);\n const hours = Math.floor(totalSeconds / 3600);\n const minutes = Math.floor((totalSeconds % 3600) / 60);\n const remainingSeconds = totalSeconds % 60;\n\n if (hours > 0) {\n return `${hours}:${minutes.toString().padStart(2, \"0\")}:${remainingSeconds.toString().padStart(2, \"0\")}`;\n }\n\n if (minutes > 0) {\n return `${minutes}:${remainingSeconds.toString().padStart(2, \"0\")}`;\n }\n\n return remainingSeconds.toString();\n};\n",
16
+ "export const secondsToMS = (seconds: number): string => {\n const minutes = Math.floor(seconds / 60);\n const remainingSeconds = seconds % 60;\n return `${minutes}:${remainingSeconds.toString().padStart(2, \"0\")}`;\n};\n",
17
+ "export const sleep = (ms: number): Promise<void> => new Promise((resolve) => setTimeout(resolve, ms));\n",
18
+ "import { splitToWords } from \"./splitToWords\";\n\nexport const toKebabCase = (input: string): string => {\n input = input.trim();\n return splitToWords(input).join(\"-\").toLowerCase();\n};\n",
19
+ "import { capitalizeWord } from \"./capitalizeWord\";\nimport { splitToWords } from \"./splitToWords\";\n\nexport const toPascalCase = (input: string): string => {\n input = input.trim();\n return splitToWords(input).map(capitalizeWord).join(\"\");\n};\n",
20
+ "import { splitToWords } from \"./splitToWords\";\n\nexport const toSnakeCase = (input: string): string => {\n input = input.trim();\n const words = splitToWords(input);\n return words.map((word) => word.toLowerCase()).join(\"_\");\n};\n"
21
+ ],
22
+ "mappings": "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",
23
+ "debugId": "4BD1C3DDAD8FB3AF64756E2164756E21",
24
+ "names": []
25
+ }
package/package.json CHANGED
@@ -1,26 +1,34 @@
1
1
  {
2
2
  "name": "@ooneex/utils",
3
- "version": "0.0.6",
4
- "description": "",
3
+ "description": "Common utility functions including unique ID generation with nanoid and helper methods",
4
+ "version": "0.1.0",
5
5
  "type": "module",
6
+ "files": [
7
+ "dist",
8
+ "LICENSE",
9
+ "README.md",
10
+ "package.json"
11
+ ],
12
+ "module": "./dist/index.js",
13
+ "types": "./dist/index.d.ts",
6
14
  "exports": {
7
15
  ".": {
8
- "types": "./dist/index.d.ts",
9
- "import": "./dist/index.js"
10
- }
16
+ "import": {
17
+ "types": "./dist/index.d.ts",
18
+ "default": "./dist/index.js"
19
+ }
20
+ },
21
+ "./package.json": "./package.json"
11
22
  },
12
- "types": "./dist/index.d.ts",
13
- "main": "./dist/index.js",
14
- "module": "./dist/index.js",
15
23
  "license": "MIT",
16
24
  "scripts": {
17
- "compile": "tsc -p tsconfig.build.json",
18
- "build": "rm -rf dist && bun run compile && bun build ./src/index.ts --outdir ./dist --target browser --format esm --packages external --minify",
19
- "publish": "bun run build && bun publish --access public"
25
+ "test": "bun test tests",
26
+ "build": "bunup",
27
+ "lint": "tsgo --noEmit && bunx biome lint",
28
+ "publish": "bun publish --tolerate-republish --access public"
20
29
  },
21
- "devDependencies": {},
22
- "peerDependencies": {},
23
30
  "dependencies": {
24
31
  "nanoid": "^5.1.6"
25
- }
32
+ },
33
+ "devDependencies": {}
26
34
  }
@@ -1,2 +0,0 @@
1
- export declare const capitalizeWord: (word: string) => string;
2
- //# sourceMappingURL=capitalizeWord.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"capitalizeWord.d.ts","sourceRoot":"","sources":["../src/capitalizeWord.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc,GAAI,MAAM,MAAM,KAAG,MAE7C,CAAC"}
@@ -1,2 +0,0 @@
1
- export declare const dataURLtoFile: (dataurl: string, filename: string) => File;
2
- //# sourceMappingURL=dataURLtoFile.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dataURLtoFile.d.ts","sourceRoot":"","sources":["../src/dataURLtoFile.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,GAAI,SAAS,MAAM,EAAE,UAAU,MAAM,SAW9D,CAAC"}
@@ -1,5 +0,0 @@
1
- export declare const formatRelativeNumber: (num: number, config?: {
2
- precision?: number;
3
- lang?: string;
4
- }) => string;
5
- //# sourceMappingURL=formatRelativeNumber.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"formatRelativeNumber.d.ts","sourceRoot":"","sources":["../src/formatRelativeNumber.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oBAAoB,GAAI,KAAK,MAAM,EAAE,SAAS;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,KAAG,MAMlG,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC"}
@@ -1,2 +0,0 @@
1
- export declare const millisecondsToHMS: (ms: number) => string;
2
- //# sourceMappingURL=millisecondsToHMS.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"millisecondsToHMS.d.ts","sourceRoot":"","sources":["../src/millisecondsToHMS.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB,GAAI,IAAI,MAAM,KAAG,MAe9C,CAAC"}
@@ -1,2 +0,0 @@
1
- export declare const parseEnvVars: <T = Record<string, unknown>>(envs: Record<string, unknown>) => T;
2
- //# sourceMappingURL=parseEnvVars.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parseEnvVars.d.ts","sourceRoot":"","sources":["../src/parseEnvVars.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,YAAY,GAAI,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAG,CAUzF,CAAC"}
@@ -1,2 +0,0 @@
1
- export declare const parseString: <T = unknown>(text: string) => T;
2
- //# sourceMappingURL=parseString.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parseString.d.ts","sourceRoot":"","sources":["../src/parseString.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,WAAW,GAAI,CAAC,GAAG,OAAO,EAAE,MAAM,MAAM,KAAG,CA4CvD,CAAC"}
package/dist/random.d.ts DELETED
@@ -1,6 +0,0 @@
1
- export declare const random: {
2
- nanoid(size?: number): string;
3
- stringInt(size?: number): string;
4
- nanoidFactory(size?: number): (size?: number) => string;
5
- };
6
- //# sourceMappingURL=random.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"random.d.ts","sourceRoot":"","sources":["../src/random.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,MAAM;kBACH,MAAM,GAAG,MAAM;qBAGZ,MAAM,GAAG,MAAM;yBAGX,MAAM,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,KAAK,MAAM;CAGxD,CAAC"}
@@ -1,2 +0,0 @@
1
- export declare const secondsToHMS: (seconds: number) => string;
2
- //# sourceMappingURL=secondsToHMS.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"secondsToHMS.d.ts","sourceRoot":"","sources":["../src/secondsToHMS.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY,GAAI,SAAS,MAAM,KAAG,MAe9C,CAAC"}
@@ -1,2 +0,0 @@
1
- export declare const secondsToMS: (seconds: number) => string;
2
- //# sourceMappingURL=secondsToMS.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"secondsToMS.d.ts","sourceRoot":"","sources":["../src/secondsToMS.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,GAAI,SAAS,MAAM,KAAG,MAI7C,CAAC"}
package/dist/sleep.d.ts DELETED
@@ -1,2 +0,0 @@
1
- export declare const sleep: (ms: number) => Promise<void>;
2
- //# sourceMappingURL=sleep.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sleep.d.ts","sourceRoot":"","sources":["../src/sleep.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,KAAK,GAAI,IAAI,MAAM,KAAG,OAAO,CAAC,IAAI,CAE9C,CAAC"}
@@ -1,2 +0,0 @@
1
- export declare const splitToWords: (input: string) => RegExpMatchArray | [];
2
- //# sourceMappingURL=splitToWords.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"splitToWords.d.ts","sourceRoot":"","sources":["../src/splitToWords.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,YAAY,GAAI,OAAO,MAAM,0BAEzC,CAAC"}
@@ -1,2 +0,0 @@
1
- export declare const toCamelCase: (input: string) => string;
2
- //# sourceMappingURL=toCamelCase.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"toCamelCase.d.ts","sourceRoot":"","sources":["../src/toCamelCase.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,WAAW,GAAI,OAAO,MAAM,KAAG,MAI3C,CAAC"}
@@ -1,2 +0,0 @@
1
- export declare const toKebabCase: (input: string) => string;
2
- //# sourceMappingURL=toKebabCase.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"toKebabCase.d.ts","sourceRoot":"","sources":["../src/toKebabCase.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,WAAW,GAAI,OAAO,MAAM,KAAG,MAG3C,CAAC"}
@@ -1,2 +0,0 @@
1
- export declare const toPascalCase: (input: string) => string;
2
- //# sourceMappingURL=toPascalCase.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"toPascalCase.d.ts","sourceRoot":"","sources":["../src/toPascalCase.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,YAAY,GAAI,OAAO,MAAM,KAAG,MAG5C,CAAC"}
package/dist/trim.d.ts DELETED
@@ -1,2 +0,0 @@
1
- export declare const trim: (text: string, char?: string) => string;
2
- //# sourceMappingURL=trim.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"trim.d.ts","sourceRoot":"","sources":["../src/trim.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,IAAI,GAAI,MAAM,MAAM,EAAE,aAAU,KAAG,MAO/C,CAAC"}
@@ -1,3 +0,0 @@
1
- export const capitalizeWord = (word: string): string => {
2
- return word ? word[0]?.toUpperCase() + word.slice(1).toLowerCase() : word;
3
- };
@@ -1,12 +0,0 @@
1
- export const dataURLtoFile = (dataurl: string, filename: string) => {
2
- const arr = dataurl.split(",");
3
- const mimeMatch = arr[0]?.match(/:(.*?);/);
4
- const mime = mimeMatch ? mimeMatch[1] : "";
5
- const bstr = atob(arr[1] as string);
6
- let n = bstr.length;
7
- const u8arr = new Uint8Array(n);
8
- while (n--) {
9
- u8arr[n] = bstr.charCodeAt(n);
10
- }
11
- return new File([u8arr], filename, { type: mime });
12
- };
@@ -1,7 +0,0 @@
1
- export const formatRelativeNumber = (num: number, config?: { precision?: number; lang?: string }): string => {
2
- return new Intl.NumberFormat(config?.lang ?? "en-GB", {
3
- notation: "compact",
4
- compactDisplay: "short",
5
- maximumFractionDigits: config?.precision ?? 1,
6
- }).format(num);
7
- };
package/src/index.ts DELETED
@@ -1,15 +0,0 @@
1
- export { capitalizeWord } from "./capitalizeWord";
2
- export { dataURLtoFile } from "./dataURLtoFile";
3
- export { formatRelativeNumber } from "./formatRelativeNumber";
4
- export { millisecondsToHMS } from "./millisecondsToHMS";
5
- export { parseEnvVars } from "./parseEnvVars";
6
- export { parseString } from "./parseString";
7
- export { random } from "./random";
8
- export { secondsToHMS } from "./secondsToHMS";
9
- export { secondsToMS } from "./secondsToMS";
10
- export { sleep } from "./sleep";
11
- export { splitToWords } from "./splitToWords";
12
- export { toCamelCase } from "./toCamelCase";
13
- export { toKebabCase } from "./toKebabCase";
14
- export { toPascalCase } from "./toPascalCase";
15
- export { trim } from "./trim";
@@ -1,16 +0,0 @@
1
- export const millisecondsToHMS = (ms: number): string => {
2
- const totalSeconds = Math.floor(ms / 1000);
3
- const hours = Math.floor(totalSeconds / 3600);
4
- const minutes = Math.floor((totalSeconds % 3600) / 60);
5
- const seconds = totalSeconds % 60;
6
-
7
- if (hours > 0) {
8
- return `${hours}:${minutes.toString().padStart(2, "0")}:${seconds.toString().padStart(2, "0")}`;
9
- }
10
-
11
- if (minutes > 0) {
12
- return `${minutes}:${seconds.toString().padStart(2, "0")}`;
13
- }
14
-
15
- return seconds.toString();
16
- };
@@ -1,14 +0,0 @@
1
- import { parseString } from "./parseString";
2
- import { toCamelCase } from "./toCamelCase";
3
-
4
- export const parseEnvVars = <T = Record<string, unknown>>(envs: Record<string, unknown>): T => {
5
- const vars: Record<string, unknown> = {};
6
-
7
- for (const key in envs) {
8
- const k = toCamelCase(key);
9
- const value = parseString(envs[key] as string) as unknown;
10
- vars[k] = value;
11
- }
12
-
13
- return vars as T;
14
- };
@@ -1,47 +0,0 @@
1
- import { trim } from "./trim";
2
-
3
- export const parseString = <T = unknown>(text: string): T => {
4
- if (/^[0-9]+$/.test(text)) {
5
- return Number.parseInt(text, 10) as T;
6
- }
7
-
8
- if (/^[0-9]+[.][0-9]+$/.test(text)) {
9
- return Number.parseFloat(text) as T;
10
- }
11
-
12
- if (/^true$/i.test(text)) {
13
- return true as T;
14
- }
15
-
16
- if (/^false$/i.test(text)) {
17
- return false as T;
18
- }
19
-
20
- if (/^null$/i.test(text)) {
21
- return null as T;
22
- }
23
-
24
- if (/^\[/.test(text) && /]$/.test(text)) {
25
- const trimmedText = trim(text, "\\[|\\]");
26
-
27
- let values: unknown[] = trimmedText.split(/, */);
28
-
29
- values = values.map((value) => {
30
- return parseString(value as string);
31
- });
32
-
33
- return values as T;
34
- }
35
-
36
- try {
37
- const result = JSON.parse(text);
38
-
39
- if (result === Number.POSITIVE_INFINITY || result === Number.NEGATIVE_INFINITY) {
40
- return text as T;
41
- }
42
-
43
- return result;
44
- } catch {
45
- return text as T;
46
- }
47
- };
package/src/random.ts DELETED
@@ -1,13 +0,0 @@
1
- import { customAlphabet } from "nanoid";
2
-
3
- export const random = {
4
- nanoid(size?: number): string {
5
- return customAlphabet("1234567890abcdef", size ?? 10)();
6
- },
7
- stringInt(size?: number): string {
8
- return customAlphabet("1234567890", size ?? 10)();
9
- },
10
- nanoidFactory(size?: number): (size?: number) => string {
11
- return customAlphabet("1234567890abcdef", size ?? 10);
12
- },
13
- };
@@ -1,16 +0,0 @@
1
- export const secondsToHMS = (seconds: number): string => {
2
- const totalSeconds = Math.floor(seconds);
3
- const hours = Math.floor(totalSeconds / 3600);
4
- const minutes = Math.floor((totalSeconds % 3600) / 60);
5
- const remainingSeconds = totalSeconds % 60;
6
-
7
- if (hours > 0) {
8
- return `${hours}:${minutes.toString().padStart(2, "0")}:${remainingSeconds.toString().padStart(2, "0")}`;
9
- }
10
-
11
- if (minutes > 0) {
12
- return `${minutes}:${remainingSeconds.toString().padStart(2, "0")}`;
13
- }
14
-
15
- return remainingSeconds.toString();
16
- };
@@ -1,5 +0,0 @@
1
- export const secondsToMS = (seconds: number): string => {
2
- const minutes = Math.floor(seconds / 60);
3
- const remainingSeconds = seconds % 60;
4
- return `${minutes}:${remainingSeconds.toString().padStart(2, "0")}`;
5
- };
package/src/sleep.ts DELETED
@@ -1,3 +0,0 @@
1
- export const sleep = (ms: number): Promise<void> => {
2
- return new Promise((resolve) => setTimeout(resolve, ms));
3
- };
@@ -1,14 +0,0 @@
1
- const CAPITALIZED_WORD_REGEXP = /\p{Lu}\p{Ll}+/u; // e.g. Apple
2
- const ACRONYM_REGEXP = /\p{Lu}+(?=(\p{Lu}\p{Ll})|\P{L}|\b)/u; // e.g. ID, URL, handles an acronym followed by a capitalized word e.g. HTMLElement
3
- const LOWERCASED_WORD_REGEXP = /(\p{Ll}+)/u; // e.g. apple
4
- const ANY_LETTERS = /\p{L}+/u; // will match any sequence of letters, including in languages without a concept of upper/lower case
5
- const DIGITS_REGEXP = /\p{N}+/u; // e.g. 123
6
-
7
- const WORD_OR_NUMBER_REGEXP = new RegExp(
8
- `${CAPITALIZED_WORD_REGEXP.source}|${ACRONYM_REGEXP.source}|${LOWERCASED_WORD_REGEXP.source}|${ANY_LETTERS.source}|${DIGITS_REGEXP.source}`,
9
- "gu",
10
- );
11
-
12
- export const splitToWords = (input: string) => {
13
- return input.match(WORD_OR_NUMBER_REGEXP) ?? [];
14
- };
@@ -1,8 +0,0 @@
1
- import { capitalizeWord } from "./capitalizeWord";
2
- import { splitToWords } from "./splitToWords";
3
-
4
- export const toCamelCase = (input: string): string => {
5
- input = input.trim();
6
- const [first = "", ...rest] = splitToWords(input);
7
- return [first.toLowerCase(), ...rest.map(capitalizeWord)].join("");
8
- };
@@ -1,6 +0,0 @@
1
- import { splitToWords } from "./splitToWords";
2
-
3
- export const toKebabCase = (input: string): string => {
4
- input = input.trim();
5
- return splitToWords(input).join("-").toLowerCase();
6
- };
@@ -1,7 +0,0 @@
1
- import { capitalizeWord } from "./capitalizeWord";
2
- import { splitToWords } from "./splitToWords";
3
-
4
- export const toPascalCase = (input: string): string => {
5
- input = input.trim();
6
- return splitToWords(input).map(capitalizeWord).join("");
7
- };
package/src/trim.ts DELETED
@@ -1,8 +0,0 @@
1
- export const trim = (text: string, char = " "): string => {
2
- if ([".", "[", "]", "(", ")", "+", "*", "^", "$", "?", "/", "\\"].includes(char)) {
3
- char = `\\${char}`;
4
- }
5
-
6
- const reg = new RegExp(`^${char}+|${char}+$`, "g");
7
- return text.replace(reg, "");
8
- };