Initial commit

This commit is contained in:
Igor Martyniuk
2026-06-25 15:53:49 +03:00
commit 1bb0b7e68a
1517 changed files with 218469 additions and 0 deletions
+49
View File
@@ -0,0 +1,49 @@
# [←](../../Readme.md) Огляд Конвертерів
### # base64toFile(base64: string): File | null
Converts a base64 data URL (e.g. data:image/png;base64,...) into a browser File object
### # capitalizeEveryWord(str: string): string
Перетворює першу літеру кожного слова в рядку на велику
`"hello world" → "Hello World"`
### # capitalize(str: string, lowerRest = false): string
Перетворює першу літеру першого слова в рядку на велику.
Якщо `lowerRest = true`, решта рядка пишеться малими літерами.
В іншому випадку зберігається початковий регістр.
`capitalize("hELLO", true) → "Hello"`
### # numToBool(value: string | number): boolean
Перетворює числові значення на логічні:
`0` чи `"0"` → `false`
`1` чи `"1"` → `true`
Будь-яке інше ТРУШНЕ(`true`) значення → `true`
Будь-яке інше ПОЗЕРСЬКЕ(`falsy`) значення → `false`
### # snakeToCamel(snake: string): string
Перетворює `snake_case` на `camelCase`
`"hello_world"` → `"helloWorld"`
### # boolToStr(value: boolean): 'true' | 'false'
`true` -> `"true"`
`false` -> `"false"`
### # strBoolToBool(value: string): boolean
`"true"`-> `true`
`"false"`-> `false`
### # mask(cc: number | string, num?: number, symbol?: string): string
Маскує всі символи, крім останніх `num` (за замовчуванням `4`). Символ маски за замовчуванням `*`.
`mask(1234567890)` → `'******7890'`
`mask(1234567890123456, 4, 'X')` → `'XXXXXXXXXXXX3456'`
@@ -0,0 +1,41 @@
export function base64toFile(base64: string): File | null {
if (typeof base64 !== 'string') return null;
try {
if (!base64.startsWith('data:')) {
throw new Error("Invalid data URL: must start with 'data:'.");
}
const parts = base64.split(',');
if (parts.length !== 2) {
throw new Error('Invalid data URL format: missing comma separator.');
}
const header = parts[0];
const base64Data = parts[1];
const mimeMatch = header.match(/data:(.*?);base64/);
if (!mimeMatch) {
throw new Error('Invalid data URL: MIME type not found or not base64 encoded.');
}
const mime = mimeMatch[1];
let bstr: string;
try {
bstr = atob(base64Data);
} catch (e) {
throw new Error('Base64 decoding failed: data is not valid base64.');
}
const u8arr = new Uint8Array(bstr.length);
for (let i = 0; i < bstr.length; i++) {
u8arr[i] = bstr.charCodeAt(i);
}
return new File([u8arr], 'mileage-photo', { type: mime });
} catch (err) {
console.error(err);
return null;
}
}
+3
View File
@@ -0,0 +1,3 @@
export const boolToStr = (value: boolean): 'true' | 'false' => {
return value === true ? 'true' : 'false';
};
+3
View File
@@ -0,0 +1,3 @@
export function capitalize(str = '', lowerRest = false): string {
return str.slice(0, 1).toUpperCase() + (lowerRest ? str.slice(1).toLowerCase() : str.slice(1));
}
+3
View File
@@ -0,0 +1,3 @@
export function capitalizeEveryWord(str = ''): string {
return str.replace(/\b[a-z]/g, (char) => char.toUpperCase());
}
+8
View File
@@ -0,0 +1,8 @@
export * from './capitalize';
export * from './capitalizeEveryWord';
export * from './numToBool';
export * from './strToBool';
export * from './boolToStr';
export * from './base64ToFile';
export * from './snakeToCamel';
export * from './mask';
+14
View File
@@ -0,0 +1,14 @@
/**
* Replaces all but the last num of characters with the specified mask character
* @param cc - The number or string to mask.
* @param num - The number of digits to keep at the end. Default is 4.
* @param symbol - The symbol to use for masking. Default is "*".
* @returns The masked string.
* @example
* // Example usage:
* mask(1234567890123456, 4, "X"); // Output: "XXXXXXXXXXXX3456"
* mask(1234567890); // '******7890'
* mask(1234567890, 3); // '*******890'
* mask(1234567890, -4, "$"); // '$$$$567890'
*/
export const mask = (cc: number | string, num = 4, symbol = '*'): string => String(cc).slice(-num).padStart(String(cc).length, symbol);
+11
View File
@@ -0,0 +1,11 @@
export const numToBool = (value: string | number): boolean => {
if (value === 0 || value === '0') {
return false;
}
if (value === 1 || value === '1') {
return true;
}
return Boolean(value);
};
@@ -0,0 +1,5 @@
export function snakeToCamel(snake: string): string {
if (typeof snake !== 'string') return '';
return snake.replace(/_([a-z])/g, (_, c) => c.toUpperCase());
}
+11
View File
@@ -0,0 +1,11 @@
export const strBoolToBool = (value: string): boolean => {
if (value === 'true') {
return true;
}
if (value === 'false') {
return false;
}
return false;
};