Initial commit
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
Executable
+3
@@ -0,0 +1,3 @@
|
||||
export const boolToStr = (value: boolean): 'true' | 'false' => {
|
||||
return value === true ? 'true' : 'false';
|
||||
};
|
||||
Executable
+3
@@ -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));
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
export function capitalizeEveryWord(str = ''): string {
|
||||
return str.replace(/\b[a-z]/g, (char) => char.toUpperCase());
|
||||
}
|
||||
@@ -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';
|
||||
Executable
+14
@@ -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);
|
||||
Executable
+11
@@ -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());
|
||||
}
|
||||
Executable
+11
@@ -0,0 +1,11 @@
|
||||
export const strBoolToBool = (value: string): boolean => {
|
||||
if (value === 'true') {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (value === 'false') {
|
||||
return false;
|
||||
}
|
||||
|
||||
return false;
|
||||
};
|
||||
Reference in New Issue
Block a user