@sdkwork/sdk-common 1.0.1 → 1.0.2
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 +3 -4
- package/dist/auth/token-manager.cjs +8 -16
- package/dist/auth/token-manager.cjs.map +1 -1
- package/dist/auth/token-manager.js +8 -16
- package/dist/auth/token-manager.js.map +1 -1
- package/dist/errors.cjs +15 -18
- package/dist/errors.cjs.map +1 -1
- package/dist/errors.js +15 -18
- package/dist/errors.js.map +1 -1
- package/dist/http/base-client.cjs +23 -33
- package/dist/http/base-client.cjs.map +1 -1
- package/dist/http/base-client.js +23 -33
- package/dist/http/base-client.js.map +1 -1
- package/dist/index.cjs +1 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/utils/cache.cjs +3 -6
- package/dist/utils/cache.cjs.map +1 -1
- package/dist/utils/cache.js +3 -6
- package/dist/utils/cache.js.map +1 -1
- package/dist/utils/logger.cjs +5 -8
- package/dist/utils/logger.cjs.map +1 -1
- package/dist/utils/logger.js +5 -8
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/string.cjs +57 -60
- package/dist/utils/string.cjs.map +1 -1
- package/dist/utils/string.js +57 -60
- package/dist/utils/string.js.map +1 -1
- package/package.json +5 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"string.cjs","sources":["../../src/utils/string.ts"],"sourcesContent":["export const EMPTY_STRING = '';\nexport const SPACE = ' ';\nexport const DASH = '-';\nexport const UNDERSCORE = '_';\nexport const DOT = '.';\nexport const SLASH = '/';\nexport const BACKSLASH = '\\\\';\nexport const NEWLINE = '\\n';\nexport const CARRIAGE_RETURN = '\\r';\nexport const TAB = '\\t';\n\nexport namespace StringUtils {\n export function isEmpty(value: unknown): boolean {\n return value === null || value === undefined || value === '';\n }\n\n export function isNotEmpty(value: unknown): boolean {\n return !isEmpty(value);\n }\n\n export function isBlank(value: unknown): boolean {\n if (isEmpty(value)) return true;\n if (typeof value !== 'string') return false;\n return value.trim().length === 0;\n }\n\n export function isNotBlank(value: unknown): boolean {\n return !isBlank(value);\n }\n\n export function trim(value: string): string {\n return value?.trim() ?? '';\n }\n\n export function trimStart(value: string): string {\n return value?.trimStart() ?? '';\n }\n\n export function trimEnd(value: string): string {\n return value?.trimEnd() ?? '';\n }\n\n export function toLowerCase(value: string): string {\n return value?.toLowerCase() ?? '';\n }\n\n export function toUpperCase(value: string): string {\n return value?.toUpperCase() ?? '';\n }\n\n export function capitalize(value: string): string {\n if (isEmpty(value)) return '';\n return value.charAt(0).toUpperCase() + value.slice(1).toLowerCase();\n }\n\n export function capitalizeWords(value: string): string {\n if (isEmpty(value)) return '';\n return value.split(/\\s+/).map(capitalize).join(' ');\n }\n\n export function camelCase(value: string): string {\n if (isEmpty(value)) return '';\n return value\n .replace(/[-_\\s]+(.)?/g, (_, char) => (char ? char.toUpperCase() : ''))\n .replace(/^(.)/, (char) => char.toLowerCase());\n }\n\n export function pascalCase(value: string): string {\n if (isEmpty(value)) return '';\n const camel = camelCase(value);\n return camel.charAt(0).toUpperCase() + camel.slice(1);\n }\n\n export function kebabCase(value: string): string {\n if (isEmpty(value)) return '';\n return value\n .replace(/([a-z])([A-Z])/g, '$1-$2')\n .replace(/[\\s_]+/g, '-')\n .toLowerCase();\n }\n\n export function snakeCase(value: string): string {\n if (isEmpty(value)) return '';\n return value\n .replace(/([a-z])([A-Z])/g, '$1_$2')\n .replace(/[\\s-]+/g, '_')\n .toLowerCase();\n }\n\n export function constantCase(value: string): string {\n return snakeCase(value).toUpperCase();\n }\n\n export function truncate(value: string, length: number, suffix: string = '...'): string {\n if (isEmpty(value) || value.length <= length) return value ?? '';\n return value.slice(0, length - suffix.length) + suffix;\n }\n\n export function truncateWords(value: string, wordCount: number, suffix: string = '...'): string {\n if (isEmpty(value)) return '';\n const words = value.split(/\\s+/);\n if (words.length <= wordCount) return value;\n return words.slice(0, wordCount).join(' ') + suffix;\n }\n\n export function padStart(value: string, length: number, padChar: string = ' '): string {\n return value?.padStart(length, padChar) ?? '';\n }\n\n export function padEnd(value: string, length: number, padChar: string = ' '): string {\n return value?.padEnd(length, padChar) ?? '';\n }\n\n export function repeat(value: string, count: number): string {\n if (isEmpty(value) || count <= 0) return '';\n return value.repeat(count);\n }\n\n export function reverse(value: string): string {\n if (isEmpty(value)) return '';\n return value.split('').reverse().join('');\n }\n\n export function startsWith(value: string, prefix: string): boolean {\n return value?.startsWith(prefix) ?? false;\n }\n\n export function endsWith(value: string, suffix: string): boolean {\n return value?.endsWith(suffix) ?? false;\n }\n\n export function contains(value: string, search: string): boolean {\n return value?.includes(search) ?? false;\n }\n\n export function containsIgnoreCase(value: string, search: string): boolean {\n return value?.toLowerCase().includes(search.toLowerCase()) ?? false;\n }\n\n export function indexOf(value: string, search: string): number {\n return value?.indexOf(search) ?? -1;\n }\n\n export function lastIndexOf(value: string, search: string): number {\n return value?.lastIndexOf(search) ?? -1;\n }\n\n export function substring(value: string, start: number, end?: number): string {\n if (isEmpty(value)) return '';\n return end !== undefined ? value.slice(start, end) : value.slice(start);\n }\n\n export function slice(value: string, start: number, end?: number): string {\n return substring(value, start, end);\n }\n\n export function split(value: string, separator: string | RegExp, limit?: number): string[] {\n if (isEmpty(value)) return [];\n return value.split(separator, limit);\n }\n\n export function join(values: string[], separator: string = ''): string {\n return values?.join(separator) ?? '';\n }\n\n export function replace(value: string, search: string | RegExp, replacement: string): string {\n return value?.replace(search, replacement) ?? '';\n }\n\n export function replaceAll(value: string, search: string | RegExp, replacement: string): string {\n return value?.replaceAll(search, replacement) ?? '';\n }\n\n export function remove(value: string, search: string | RegExp): string {\n return value?.replace(search, '') ?? '';\n }\n\n export function removeAll(value: string, search: string | RegExp): string {\n const regex = typeof search === 'string' ? new RegExp(search, 'g') : new RegExp(search.source, `${search.flags}g`);\n return value?.replace(regex, '') ?? '';\n }\n\n export function countOccurrences(value: string, search: string): number {\n if (isEmpty(value) || isEmpty(search)) return 0;\n return (value.match(new RegExp(escapeRegex(search), 'g')) || []).length;\n }\n\n export function escapeHtml(value: string): string {\n const htmlEntities: Record<string, string> = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n };\n return value?.replace(/[&<>\"']/g, char => htmlEntities[char] || char) ?? '';\n }\n\n export function unescapeHtml(value: string): string {\n const htmlEntities: Record<string, string> = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\",\n ''': \"'\",\n ''': \"'\"\n };\n return value?.replace(/&(?:amp|lt|gt|quot|#39|#x27|apos);/g, entity => htmlEntities[entity] || entity) ?? '';\n }\n\n export function escapeRegex(value: string): string {\n return value?.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&') ?? '';\n }\n\n export function isNumeric(value: string): boolean {\n if (isEmpty(value)) return false;\n return !isNaN(Number(value)) && !isNaN(parseFloat(value));\n }\n\n export function isAlpha(value: string): boolean {\n if (isEmpty(value)) return false;\n return /^[a-zA-Z]+$/.test(value);\n }\n\n export function isAlphanumeric(value: string): boolean {\n if (isEmpty(value)) return false;\n return /^[a-zA-Z0-9]+$/.test(value);\n }\n\n export function isHex(value: string): boolean {\n if (isEmpty(value)) return false;\n return /^[0-9a-fA-F]+$/.test(value);\n }\n\n export function isUuid(value: string): boolean {\n if (isEmpty(value)) return false;\n return /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(value);\n }\n\n export function isEmail(value: string): boolean {\n if (isEmpty(value)) return false;\n return /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(value);\n }\n\n export function isUrl(value: string): boolean {\n if (isEmpty(value)) return false;\n try {\n new URL(value);\n return true;\n } catch {\n return false;\n }\n }\n\n export function isPhoneNumber(value: string): boolean {\n if (isEmpty(value)) return false;\n return /^\\+?[\\d\\s-()]{10,}$/.test(value);\n }\n\n export function mask(value: string, start: number, end: number, maskChar: string = '*'): string {\n if (isEmpty(value)) return '';\n const actualStart = Math.max(0, start);\n const actualEnd = Math.min(value.length, end);\n if (actualStart >= actualEnd) return value;\n const masked = maskChar.repeat(actualEnd - actualStart);\n return value.slice(0, actualStart) + masked + value.slice(actualEnd);\n }\n\n export function maskEmail(value: string): string {\n if (!isEmail(value)) return value;\n const parts = value.split('@');\n const localPart = parts[0];\n const domain = parts[1];\n if (!localPart || !domain) return value;\n const maskedLocal = mask(localPart, 2, localPart.length - 2);\n return `${maskedLocal}@${domain}`;\n }\n\n export function maskPhone(value: string): string {\n if (isEmpty(value)) return value;\n const digits = value.replace(/\\D/g, '');\n if (digits.length < 7) return value;\n return mask(digits, 3, digits.length - 4);\n }\n\n export function maskCreditCard(value: string): string {\n if (isEmpty(value)) return value;\n const digits = value.replace(/\\D/g, '');\n if (digits.length < 8) return value;\n return mask(digits, 4, digits.length - 4);\n }\n\n export function formatNumber(value: number | string, options?: Intl.NumberFormatOptions): string {\n const num = typeof value === 'string' ? parseFloat(value) : value;\n if (isNaN(num)) return '';\n return num.toLocaleString(undefined, options);\n }\n\n export function formatCurrency(value: number | string, currency: string = 'USD', locale?: string): string {\n const num = typeof value === 'string' ? parseFloat(value) : value;\n if (isNaN(num)) return '';\n return num.toLocaleString(locale, { style: 'currency', currency });\n }\n\n export function formatPercentage(value: number | string, decimals: number = 0): string {\n const num = typeof value === 'string' ? parseFloat(value) : value;\n if (isNaN(num)) return '';\n return `${(num * 100).toFixed(decimals)}%`;\n }\n\n export function formatBytes(bytes: number, decimals: number = 2): string {\n if (bytes === 0) return '0 Bytes';\n const k = 1024;\n const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return `${parseFloat((bytes / Math.pow(k, i)).toFixed(decimals))} ${sizes[i]}`;\n }\n\n export function random(length: number = 16, charset: string = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'): string {\n let result = '';\n for (let i = 0; i < length; i++) {\n result += charset.charAt(Math.floor(Math.random() * charset.length));\n }\n return result;\n }\n\n export function uuid(): string {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = Math.random() * 16 | 0;\n const v = c === 'x' ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n }\n\n export function slugify(value: string): string {\n return value\n ?.toLowerCase()\n .trim()\n .replace(/[^\\w\\s-]/g, '')\n .replace(/[\\s_-]+/g, '-')\n .replace(/^-+|-+$/g, '') ?? '';\n }\n\n export function unslugify(value: string): string {\n return value\n ?.replace(/-/g, ' ')\n .replace(/\\b\\w/g, char => char.toUpperCase()) ?? '';\n }\n\n export function levenshteinDistance(a: string, b: string): number {\n const matrix: number[][] = [];\n for (let i = 0; i <= b.length; i++) {\n matrix[i] = [i];\n }\n for (let j = 0; j <= a.length; j++) {\n if (matrix[0]) matrix[0][j] = j;\n }\n for (let i = 1; i <= b.length; i++) {\n for (let j = 1; j <= a.length; j++) {\n if (b.charAt(i - 1) === a.charAt(j - 1)) {\n matrix[i]![j] = matrix[i - 1]![j - 1]!;\n } else {\n matrix[i]![j] = Math.min(\n matrix[i - 1]![j - 1]! + 1,\n matrix[i]![j - 1]! + 1,\n matrix[i - 1]![j]! + 1\n );\n }\n }\n }\n return matrix[b.length]![a.length]!;\n }\n\n export function similarity(a: string, b: string): number {\n if (isEmpty(a) && isEmpty(b)) return 1;\n if (isEmpty(a) || isEmpty(b)) return 0;\n const distance = levenshteinDistance(a, b);\n const maxLength = Math.max(a.length, b.length);\n return 1 - distance / maxLength;\n }\n\n export function fuzzyMatch(text: string, pattern: string, threshold: number = 0.6): boolean {\n return similarity(text, pattern) >= threshold;\n }\n\n export function equals(a: string, b: string, ignoreCase: boolean = false): boolean {\n if (ignoreCase) {\n return a?.toLowerCase() === b?.toLowerCase();\n }\n return a === b;\n }\n\n export function equalsIgnoreCase(a: string, b: string): boolean {\n return equals(a, b, true);\n }\n\n export function wordCount(value: string): number {\n if (isEmpty(value)) return 0;\n return value.trim().split(/\\s+/).filter(Boolean).length;\n }\n\n export function characterCount(value: string, includeSpaces: boolean = true): number {\n if (isEmpty(value)) return 0;\n return includeSpaces ? value.length : value.replace(/\\s/g, '').length;\n }\n\n export function lineCount(value: string): number {\n if (isEmpty(value)) return 0;\n return value.split(/\\r?\\n/).length;\n }\n\n export function splitLines(value: string): string[] {\n if (isEmpty(value)) return [];\n return value.split(/\\r?\\n/);\n }\n\n export function words(value: string): string[] {\n if (isEmpty(value)) return [];\n return value.trim().split(/\\s+/).filter(Boolean);\n }\n\n export function charAt(value: string, index: number): string {\n return value?.charAt(index) ?? '';\n }\n\n export function charCodeAt(value: string, index: number): number {\n return value?.charCodeAt(index) ?? NaN;\n }\n\n export function fromCharCode(...codes: number[]): string {\n return String.fromCharCode(...codes);\n }\n\n export function insert(value: string, index: number, insertValue: string): string {\n if (isEmpty(value)) return insertValue;\n return value.slice(0, index) + insertValue + value.slice(index);\n }\n\n export function swapCase(value: string): string {\n return value?.replace(/[a-zA-Z]/g, char => {\n return char === char.toUpperCase() ? char.toLowerCase() : char.toUpperCase();\n }) ?? '';\n }\n\n export function surround(value: string, wrapper: string): string {\n return `${wrapper}${value}${wrapper}`;\n }\n\n export function quote(value: string, quoteChar: string = '\"'): string {\n return `${quoteChar}${value}${quoteChar}`;\n }\n\n export function unquote(value: string): string {\n if (isEmpty(value)) return '';\n if ((value.startsWith('\"') && value.endsWith('\"')) ||\n (value.startsWith(\"'\") && value.endsWith(\"'\")) ||\n (value.startsWith('`') && value.endsWith('`'))) {\n return value.slice(1, -1);\n }\n return value;\n }\n\n export function wrap(value: string, prefix: string, suffix: string = prefix): string {\n return `${prefix}${value}${suffix}`;\n }\n\n export function unwrap(value: string, prefix: string, suffix: string = prefix): string {\n if (isEmpty(value)) return '';\n if (value.startsWith(prefix) && value.endsWith(suffix)) {\n return value.slice(prefix.length, -suffix.length);\n }\n return value;\n }\n\n export function template(templateStr: string, values: Record<string, unknown>): string {\n return templateStr?.replace(/\\{\\{(\\w+)\\}\\}/g, (_, key) => String(values[key] ?? '')) ?? '';\n }\n\n export function interpolate(templateStr: string, values: Record<string, unknown>): string {\n return template(templateStr, values);\n }\n\n export function dedent(value: string): string {\n const lines = value.split('\\n');\n const minIndent = Math.min(\n ...lines.filter(line => line.trim().length > 0).map(line => line.match(/^\\s*/)?.[0].length ?? 0)\n );\n return lines.map(line => line.slice(minIndent)).join('\\n');\n }\n\n export function indent(value: string, spaces: number = 2): string {\n const indentation = ' '.repeat(spaces);\n return value.split('\\n').map(line => indentation + line).join('\\n');\n }\n\n export function center(value: string, width: number, padChar: string = ' '): string {\n if (isEmpty(value) || value.length >= width) return value ?? '';\n const padding = width - value.length;\n const leftPad = Math.floor(padding / 2);\n const rightPad = padding - leftPad;\n return padChar.repeat(leftPad) + value + padChar.repeat(rightPad);\n }\n\n export function alignLeft(value: string, width: number, padChar: string = ' '): string {\n return padEnd(value, width, padChar);\n }\n\n export function alignRight(value: string, width: number, padChar: string = ' '): string {\n return padStart(value, width, padChar);\n }\n\n export function alignCenter(value: string, width: number, padChar: string = ' '): string {\n return center(value, width, padChar);\n }\n\n export function toBoolean(value: string): boolean {\n const truthy = ['true', '1', 'yes', 'on', 'y'];\n return truthy.includes(value?.toLowerCase().trim());\n }\n\n export function toNumber(value: string, defaultValue: number = 0): number {\n const num = parseFloat(value);\n return isNaN(num) ? defaultValue : num;\n }\n\n export function toArray(value: string, separator: string | RegExp = ','): string[] {\n return split(value, separator);\n }\n\n export function hashCode(value: string): number {\n let hash = 0;\n for (let i = 0; i < value.length; i++) {\n const char = value.charCodeAt(i);\n hash = ((hash << 5) - hash) + char;\n hash = hash & hash;\n }\n return hash;\n }\n\n export function isPalindrome(value: string): boolean {\n const cleaned = value.toLowerCase().replace(/[^a-z0-9]/g, '');\n return cleaned === cleaned.split('').reverse().join('');\n }\n\n export function isAnagram(a: string, b: string): boolean {\n const normalize = (s: string) => s.toLowerCase().replace(/[^a-z0-9]/g, '').split('').sort().join('');\n return normalize(a) === normalize(b);\n }\n\n export function reverseWords(value: string): string {\n return value?.split(/\\s+/).reverse().join(' ') ?? '';\n }\n\n export function sortCharacters(value: string): string {\n return value?.split('').sort().join('') ?? '';\n }\n\n export function uniqueCharacters(value: string): string {\n return [...new Set(value)].join('');\n }\n\n export function removeDuplicates(value: string): string {\n return value?.split('').filter((char, index, arr) => arr.indexOf(char) === index).join('') ?? '';\n }\n\n export function longestCommonSubstring(a: string, b: string): string {\n if (isEmpty(a) || isEmpty(b)) return '';\n const matrix: number[][] = Array(a.length + 1).fill(null).map(() => Array(b.length + 1).fill(0));\n let maxLength = 0;\n let endIndex = 0;\n for (let i = 1; i <= a.length; i++) {\n for (let j = 1; j <= b.length; j++) {\n if (a[i - 1] === b[j - 1]) {\n matrix[i]![j] = matrix[i - 1]![j - 1]! + 1;\n if (matrix[i]![j]! > maxLength) {\n maxLength = matrix[i]![j]!;\n endIndex = i;\n }\n }\n }\n }\n return a.slice(endIndex - maxLength, endIndex);\n }\n\n export function longestCommonPrefix(strings: string[]): string {\n if (strings.length === 0) return '';\n if (strings.length === 1) return strings[0] ?? '';\n const sorted = [...strings].sort();\n const first = sorted[0] ?? '';\n const last = sorted[sorted.length - 1] ?? '';\n let i = 0;\n while (i < first.length && first[i] === last[i]) {\n i++;\n }\n return first.slice(0, i);\n }\n\n export function longestCommonSuffix(strings: string[]): string {\n const reversed = strings.map(s => s?.split('').reverse().join('') ?? '');\n return longestCommonPrefix(reversed).split('').reverse().join('');\n }\n\n export function truncateMiddle(value: string, maxLength: number, separator: string = '...'): string {\n if (isEmpty(value) || value.length <= maxLength) return value ?? '';\n const sepLen = separator.length;\n const charsToShow = maxLength - sepLen;\n const frontChars = Math.ceil(charsToShow / 2);\n const backChars = Math.floor(charsToShow / 2);\n return value.slice(0, frontChars) + separator + value.slice(-backChars);\n }\n\n export function ellipsis(value: string, maxLength: number): string {\n return truncate(value, maxLength, '...');\n }\n\n export function ellipsisMiddle(value: string, maxLength: number): string {\n return truncateMiddle(value, maxLength, '...');\n }\n\n export function pad(value: string, length: number, padChar: string = ' '): string {\n return center(value, length, padChar);\n }\n\n export function padCenter(value: string, length: number, padChar: string = ' '): string {\n return center(value, length, padChar);\n }\n\n export function isAscii(value: string): boolean {\n return /^[\\x00-\\x7F]*$/.test(value);\n }\n\n export function isLowerCase(value: string): boolean {\n return value === value.toLowerCase();\n }\n\n export function isUpperCase(value: string): boolean {\n return value === value.toUpperCase();\n }\n\n export function isCapitalized(value: string): boolean {\n return value.charAt(0) === value.charAt(0).toUpperCase();\n }\n\n export function swapPrefix(value: string, oldPrefix: string, newPrefix: string): string {\n if (value.startsWith(oldPrefix)) {\n return newPrefix + value.slice(oldPrefix.length);\n }\n return value;\n }\n\n export function swapSuffix(value: string, oldSuffix: string, newSuffix: string): string {\n if (value.endsWith(oldSuffix)) {\n return value.slice(0, -oldSuffix.length) + newSuffix;\n }\n return value;\n }\n\n export function ensurePrefix(value: string, prefix: string): string {\n return value.startsWith(prefix) ? value : prefix + value;\n }\n\n export function ensureSuffix(value: string, suffix: string): string {\n return value.endsWith(suffix) ? value : value + suffix;\n }\n\n export function removePrefix(value: string, prefix: string): string {\n return value.startsWith(prefix) ? value.slice(prefix.length) : value;\n }\n\n export function removeSuffix(value: string, suffix: string): string {\n return value.endsWith(suffix) ? value.slice(0, -suffix.length) : value;\n }\n\n export function take(value: string, n: number): string {\n return value?.slice(0, n) ?? '';\n }\n\n export function takeRight(value: string, n: number): string {\n return value?.slice(-n) ?? '';\n }\n\n export function takeWhile(value: string, predicate: (char: string) => boolean): string {\n let result = '';\n for (const char of value ?? '') {\n if (!predicate(char)) break;\n result += char;\n }\n return result;\n }\n\n export function takeRightWhile(value: string, predicate: (char: string) => boolean): string {\n let result = '';\n for (let i = (value?.length ?? 0) - 1; i >= 0; i--) {\n const char = value?.charAt(i) ?? '';\n if (!predicate(char)) break;\n result = char + result;\n }\n return result;\n }\n\n export function drop(value: string, n: number): string {\n return value?.slice(n) ?? '';\n }\n\n export function dropRight(value: string, n: number): string {\n return value?.slice(0, -n) ?? '';\n }\n\n export function dropWhile(value: string, predicate: (char: string) => boolean): string {\n let i = 0;\n for (const char of value ?? '') {\n if (!predicate(char)) break;\n i++;\n }\n return value?.slice(i) ?? '';\n }\n\n export function dropRightWhile(value: string, predicate: (char: string) => boolean): string {\n let i = (value?.length ?? 0) - 1;\n while (i >= 0 && predicate(value?.charAt(i) ?? '')) {\n i--;\n }\n return value?.slice(0, i + 1) ?? '';\n }\n\n export function countLines(value: string): number {\n return lineCount(value);\n }\n\n export function getLine(value: string, lineNumber: number): string {\n const lines = splitLines(value);\n return lines[lineNumber] ?? '';\n }\n\n export function getLines(value: string): string[] {\n return splitLines(value);\n }\n\n export function isSingleLine(value: string): boolean {\n return !value?.includes('\\n');\n }\n\n export function isMultiLine(value: string): boolean {\n return value?.includes('\\n') ?? false;\n }\n\n export function normalizeLineEndings(value: string, lineEnding: '\\n' | '\\r\\n' | '\\r' = '\\n'): string {\n return value?.replace(/\\r\\n|\\r|\\n/g, lineEnding) ?? '';\n }\n\n export function toCamelCase(value: string): string {\n return camelCase(value);\n }\n\n export function toKebabCase(value: string): string {\n return kebabCase(value);\n }\n\n export function toSnakeCase(value: string): string {\n return snakeCase(value);\n }\n\n export function toPascalCase(value: string): string {\n return pascalCase(value);\n }\n\n export function toConstantCase(value: string): string {\n return constantCase(value);\n }\n\n export function toSentenceCase(value: string): string {\n if (isEmpty(value)) return '';\n return value.charAt(0).toUpperCase() + value.slice(1).toLowerCase();\n }\n\n export function toTitleCase(value: string): string {\n return capitalizeWords(value);\n }\n\n export function toCapitalCase(value: string): string {\n return capitalizeWords(value);\n }\n\n export function toDotCase(value: string): string {\n return value?.replace(/([a-z])([A-Z])/g, '$1.$2').replace(/[-_\\s]+/g, '.').toLowerCase() ?? '';\n }\n\n export function toPathCase(value: string): string {\n return value?.replace(/([a-z])([A-Z])/g, '$1/$2').replace(/[-_\\s]+/g, '/').toLowerCase() ?? '';\n }\n\n export function stripTags(value: string): string {\n return value?.replace(/<[^>]*>/g, '') ?? '';\n }\n\n export function stripNumbers(value: string): string {\n return value?.replace(/\\d+/g, '') ?? '';\n }\n\n export function stripWhitespace(value: string): string {\n return value?.replace(/\\s+/g, '') ?? '';\n }\n\n export function stripPunctuation(value: string): string {\n return value?.replace(/[^\\w\\s]/g, '') ?? '';\n }\n\n export function normalizeWhitespace(value: string): string {\n return value?.replace(/\\s+/g, ' ').trim() ?? '';\n }\n\n export function includesAll(value: string, searches: string[]): boolean {\n return searches.every(search => value?.includes(search) ?? false);\n }\n\n export function includesAny(value: string, searches: string[]): boolean {\n return searches.some(search => value?.includes(search) ?? false);\n }\n}\n"],"names":["StringUtils","wordCount","words"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"string.cjs","sources":["../../src/utils/string.ts"],"sourcesContent":["export const EMPTY_STRING = '';\nexport const SPACE = ' ';\nexport const DASH = '-';\nexport const UNDERSCORE = '_';\nexport const DOT = '.';\nexport const SLASH = '/';\nexport const BACKSLASH = '\\\\';\nexport const NEWLINE = '\\n';\nexport const CARRIAGE_RETURN = '\\r';\nexport const TAB = '\\t';\n\nexport namespace StringUtils {\n export function isEmpty(value: unknown): boolean {\n return value === null || value === undefined || value === '';\n }\n\n export function isNotEmpty(value: unknown): boolean {\n return !isEmpty(value);\n }\n\n export function isBlank(value: unknown): boolean {\n if (isEmpty(value)) return true;\n if (typeof value !== 'string') return false;\n return value.trim().length === 0;\n }\n\n export function isNotBlank(value: unknown): boolean {\n return !isBlank(value);\n }\n\n export function trim(value: string): string {\n return value?.trim() ?? '';\n }\n\n export function trimStart(value: string): string {\n return value?.trimStart() ?? '';\n }\n\n export function trimEnd(value: string): string {\n return value?.trimEnd() ?? '';\n }\n\n export function toLowerCase(value: string): string {\n return value?.toLowerCase() ?? '';\n }\n\n export function toUpperCase(value: string): string {\n return value?.toUpperCase() ?? '';\n }\n\n export function capitalize(value: string): string {\n if (isEmpty(value)) return '';\n return value.charAt(0).toUpperCase() + value.slice(1).toLowerCase();\n }\n\n export function capitalizeWords(value: string): string {\n if (isEmpty(value)) return '';\n return value.split(/\\s+/).map(capitalize).join(' ');\n }\n\n export function camelCase(value: string): string {\n if (isEmpty(value)) return '';\n return value\n .replace(/[-_\\s]+(.)?/g, (_, char) => (char ? char.toUpperCase() : ''))\n .replace(/^(.)/, (char) => char.toLowerCase());\n }\n\n export function pascalCase(value: string): string {\n if (isEmpty(value)) return '';\n const camel = camelCase(value);\n return camel.charAt(0).toUpperCase() + camel.slice(1);\n }\n\n export function kebabCase(value: string): string {\n if (isEmpty(value)) return '';\n return value\n .replace(/([a-z])([A-Z])/g, '$1-$2')\n .replace(/[\\s_]+/g, '-')\n .toLowerCase();\n }\n\n export function snakeCase(value: string): string {\n if (isEmpty(value)) return '';\n return value\n .replace(/([a-z])([A-Z])/g, '$1_$2')\n .replace(/[\\s-]+/g, '_')\n .toLowerCase();\n }\n\n export function constantCase(value: string): string {\n return snakeCase(value).toUpperCase();\n }\n\n export function truncate(value: string, length: number, suffix: string = '...'): string {\n if (isEmpty(value) || value.length <= length) return value ?? '';\n return value.slice(0, length - suffix.length) + suffix;\n }\n\n export function truncateWords(value: string, wordCount: number, suffix: string = '...'): string {\n if (isEmpty(value)) return '';\n const words = value.split(/\\s+/);\n if (words.length <= wordCount) return value;\n return words.slice(0, wordCount).join(' ') + suffix;\n }\n\n export function padStart(value: string, length: number, padChar: string = ' '): string {\n return value?.padStart(length, padChar) ?? '';\n }\n\n export function padEnd(value: string, length: number, padChar: string = ' '): string {\n return value?.padEnd(length, padChar) ?? '';\n }\n\n export function repeat(value: string, count: number): string {\n if (isEmpty(value) || count <= 0) return '';\n return value.repeat(count);\n }\n\n export function reverse(value: string): string {\n if (isEmpty(value)) return '';\n return value.split('').reverse().join('');\n }\n\n export function startsWith(value: string, prefix: string): boolean {\n return value?.startsWith(prefix) ?? false;\n }\n\n export function endsWith(value: string, suffix: string): boolean {\n return value?.endsWith(suffix) ?? false;\n }\n\n export function contains(value: string, search: string): boolean {\n return value?.includes(search) ?? false;\n }\n\n export function containsIgnoreCase(value: string, search: string): boolean {\n return value?.toLowerCase().includes(search.toLowerCase()) ?? false;\n }\n\n export function indexOf(value: string, search: string): number {\n return value?.indexOf(search) ?? -1;\n }\n\n export function lastIndexOf(value: string, search: string): number {\n return value?.lastIndexOf(search) ?? -1;\n }\n\n export function substring(value: string, start: number, end?: number): string {\n if (isEmpty(value)) return '';\n return end !== undefined ? value.slice(start, end) : value.slice(start);\n }\n\n export function slice(value: string, start: number, end?: number): string {\n return substring(value, start, end);\n }\n\n export function split(value: string, separator: string | RegExp, limit?: number): string[] {\n if (isEmpty(value)) return [];\n return value.split(separator, limit);\n }\n\n export function join(values: string[], separator: string = ''): string {\n return values?.join(separator) ?? '';\n }\n\n export function replace(value: string, search: string | RegExp, replacement: string): string {\n return value?.replace(search, replacement) ?? '';\n }\n\n export function replaceAll(value: string, search: string | RegExp, replacement: string): string {\n return value?.replaceAll(search, replacement) ?? '';\n }\n\n export function remove(value: string, search: string | RegExp): string {\n return value?.replace(search, '') ?? '';\n }\n\n export function removeAll(value: string, search: string | RegExp): string {\n const regex = typeof search === 'string' ? new RegExp(search, 'g') : new RegExp(search.source, `${search.flags}g`);\n return value?.replace(regex, '') ?? '';\n }\n\n export function countOccurrences(value: string, search: string): number {\n if (isEmpty(value) || isEmpty(search)) return 0;\n return (value.match(new RegExp(escapeRegex(search), 'g')) || []).length;\n }\n\n export function escapeHtml(value: string): string {\n const htmlEntities: Record<string, string> = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n };\n return value?.replace(/[&<>\"']/g, char => htmlEntities[char] || char) ?? '';\n }\n\n export function unescapeHtml(value: string): string {\n const htmlEntities: Record<string, string> = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\",\n ''': \"'\",\n ''': \"'\"\n };\n return value?.replace(/&(?:amp|lt|gt|quot|#39|#x27|apos);/g, entity => htmlEntities[entity] || entity) ?? '';\n }\n\n export function escapeRegex(value: string): string {\n return value?.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&') ?? '';\n }\n\n export function isNumeric(value: string): boolean {\n if (isEmpty(value)) return false;\n return !isNaN(Number(value)) && !isNaN(parseFloat(value));\n }\n\n export function isAlpha(value: string): boolean {\n if (isEmpty(value)) return false;\n return /^[a-zA-Z]+$/.test(value);\n }\n\n export function isAlphanumeric(value: string): boolean {\n if (isEmpty(value)) return false;\n return /^[a-zA-Z0-9]+$/.test(value);\n }\n\n export function isHex(value: string): boolean {\n if (isEmpty(value)) return false;\n return /^[0-9a-fA-F]+$/.test(value);\n }\n\n export function isUuid(value: string): boolean {\n if (isEmpty(value)) return false;\n return /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(value);\n }\n\n export function isEmail(value: string): boolean {\n if (isEmpty(value)) return false;\n return /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(value);\n }\n\n export function isUrl(value: string): boolean {\n if (isEmpty(value)) return false;\n try {\n new URL(value);\n return true;\n } catch {\n return false;\n }\n }\n\n export function isPhoneNumber(value: string): boolean {\n if (isEmpty(value)) return false;\n return /^\\+?[\\d\\s-()]{10,}$/.test(value);\n }\n\n export function mask(value: string, start: number, end: number, maskChar: string = '*'): string {\n if (isEmpty(value)) return '';\n const actualStart = Math.max(0, start);\n const actualEnd = Math.min(value.length, end);\n if (actualStart >= actualEnd) return value;\n const masked = maskChar.repeat(actualEnd - actualStart);\n return value.slice(0, actualStart) + masked + value.slice(actualEnd);\n }\n\n export function maskEmail(value: string): string {\n if (!isEmail(value)) return value;\n const parts = value.split('@');\n const localPart = parts[0];\n const domain = parts[1];\n if (!localPart || !domain) return value;\n const maskedLocal = mask(localPart, 2, localPart.length - 2);\n return `${maskedLocal}@${domain}`;\n }\n\n export function maskPhone(value: string): string {\n if (isEmpty(value)) return value;\n const digits = value.replace(/\\D/g, '');\n if (digits.length < 7) return value;\n return mask(digits, 3, digits.length - 4);\n }\n\n export function maskCreditCard(value: string): string {\n if (isEmpty(value)) return value;\n const digits = value.replace(/\\D/g, '');\n if (digits.length < 8) return value;\n return mask(digits, 4, digits.length - 4);\n }\n\n export function formatNumber(value: number | string, options?: Intl.NumberFormatOptions): string {\n const num = typeof value === 'string' ? parseFloat(value) : value;\n if (isNaN(num)) return '';\n return num.toLocaleString(undefined, options);\n }\n\n export function formatCurrency(value: number | string, currency: string = 'USD', locale?: string): string {\n const num = typeof value === 'string' ? parseFloat(value) : value;\n if (isNaN(num)) return '';\n return num.toLocaleString(locale, { style: 'currency', currency });\n }\n\n export function formatPercentage(value: number | string, decimals: number = 0): string {\n const num = typeof value === 'string' ? parseFloat(value) : value;\n if (isNaN(num)) return '';\n return `${(num * 100).toFixed(decimals)}%`;\n }\n\n export function formatBytes(bytes: number, decimals: number = 2): string {\n if (bytes === 0) return '0 Bytes';\n const k = 1024;\n const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return `${parseFloat((bytes / Math.pow(k, i)).toFixed(decimals))} ${sizes[i]}`;\n }\n\n export function random(length: number = 16, charset: string = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'): string {\n let result = '';\n for (let i = 0; i < length; i++) {\n result += charset.charAt(Math.floor(Math.random() * charset.length));\n }\n return result;\n }\n\n export function uuid(): string {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = Math.random() * 16 | 0;\n const v = c === 'x' ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n }\n\n export function slugify(value: string): string {\n return value\n ?.toLowerCase()\n .trim()\n .replace(/[^\\w\\s-]/g, '')\n .replace(/[\\s_-]+/g, '-')\n .replace(/^-+|-+$/g, '') ?? '';\n }\n\n export function unslugify(value: string): string {\n return value\n ?.replace(/-/g, ' ')\n .replace(/\\b\\w/g, char => char.toUpperCase()) ?? '';\n }\n\n export function levenshteinDistance(a: string, b: string): number {\n const matrix: number[][] = [];\n for (let i = 0; i <= b.length; i++) {\n matrix[i] = [i];\n }\n for (let j = 0; j <= a.length; j++) {\n if (matrix[0]) matrix[0][j] = j;\n }\n for (let i = 1; i <= b.length; i++) {\n for (let j = 1; j <= a.length; j++) {\n if (b.charAt(i - 1) === a.charAt(j - 1)) {\n matrix[i]![j] = matrix[i - 1]![j - 1]!;\n } else {\n matrix[i]![j] = Math.min(\n matrix[i - 1]![j - 1]! + 1,\n matrix[i]![j - 1]! + 1,\n matrix[i - 1]![j]! + 1\n );\n }\n }\n }\n return matrix[b.length]![a.length]!;\n }\n\n export function similarity(a: string, b: string): number {\n if (isEmpty(a) && isEmpty(b)) return 1;\n if (isEmpty(a) || isEmpty(b)) return 0;\n const distance = levenshteinDistance(a, b);\n const maxLength = Math.max(a.length, b.length);\n return 1 - distance / maxLength;\n }\n\n export function fuzzyMatch(text: string, pattern: string, threshold: number = 0.6): boolean {\n return similarity(text, pattern) >= threshold;\n }\n\n export function equals(a: string, b: string, ignoreCase: boolean = false): boolean {\n if (ignoreCase) {\n return a?.toLowerCase() === b?.toLowerCase();\n }\n return a === b;\n }\n\n export function equalsIgnoreCase(a: string, b: string): boolean {\n return equals(a, b, true);\n }\n\n export function wordCount(value: string): number {\n if (isEmpty(value)) return 0;\n return value.trim().split(/\\s+/).filter(Boolean).length;\n }\n\n export function characterCount(value: string, includeSpaces: boolean = true): number {\n if (isEmpty(value)) return 0;\n return includeSpaces ? value.length : value.replace(/\\s/g, '').length;\n }\n\n export function lineCount(value: string): number {\n if (isEmpty(value)) return 0;\n return value.split(/\\r?\\n/).length;\n }\n\n export function splitLines(value: string): string[] {\n if (isEmpty(value)) return [];\n return value.split(/\\r?\\n/);\n }\n\n export function words(value: string): string[] {\n if (isEmpty(value)) return [];\n return value.trim().split(/\\s+/).filter(Boolean);\n }\n\n export function charAt(value: string, index: number): string {\n return value?.charAt(index) ?? '';\n }\n\n export function charCodeAt(value: string, index: number): number {\n return value?.charCodeAt(index) ?? NaN;\n }\n\n export function fromCharCode(...codes: number[]): string {\n return String.fromCharCode(...codes);\n }\n\n export function insert(value: string, index: number, insertValue: string): string {\n if (isEmpty(value)) return insertValue;\n return value.slice(0, index) + insertValue + value.slice(index);\n }\n\n export function swapCase(value: string): string {\n return value?.replace(/[a-zA-Z]/g, char => {\n return char === char.toUpperCase() ? char.toLowerCase() : char.toUpperCase();\n }) ?? '';\n }\n\n export function surround(value: string, wrapper: string): string {\n return `${wrapper}${value}${wrapper}`;\n }\n\n export function quote(value: string, quoteChar: string = '\"'): string {\n return `${quoteChar}${value}${quoteChar}`;\n }\n\n export function unquote(value: string): string {\n if (isEmpty(value)) return '';\n if ((value.startsWith('\"') && value.endsWith('\"')) ||\n (value.startsWith(\"'\") && value.endsWith(\"'\")) ||\n (value.startsWith('`') && value.endsWith('`'))) {\n return value.slice(1, -1);\n }\n return value;\n }\n\n export function wrap(value: string, prefix: string, suffix: string = prefix): string {\n return `${prefix}${value}${suffix}`;\n }\n\n export function unwrap(value: string, prefix: string, suffix: string = prefix): string {\n if (isEmpty(value)) return '';\n if (value.startsWith(prefix) && value.endsWith(suffix)) {\n return value.slice(prefix.length, -suffix.length);\n }\n return value;\n }\n\n export function template(templateStr: string, values: Record<string, unknown>): string {\n return templateStr?.replace(/\\{\\{(\\w+)\\}\\}/g, (_, key) => String(values[key] ?? '')) ?? '';\n }\n\n export function interpolate(templateStr: string, values: Record<string, unknown>): string {\n return template(templateStr, values);\n }\n\n export function dedent(value: string): string {\n const lines = value.split('\\n');\n const minIndent = Math.min(\n ...lines.filter(line => line.trim().length > 0).map(line => line.match(/^\\s*/)?.[0].length ?? 0)\n );\n return lines.map(line => line.slice(minIndent)).join('\\n');\n }\n\n export function indent(value: string, spaces: number = 2): string {\n const indentation = ' '.repeat(spaces);\n return value.split('\\n').map(line => indentation + line).join('\\n');\n }\n\n export function center(value: string, width: number, padChar: string = ' '): string {\n if (isEmpty(value) || value.length >= width) return value ?? '';\n const padding = width - value.length;\n const leftPad = Math.floor(padding / 2);\n const rightPad = padding - leftPad;\n return padChar.repeat(leftPad) + value + padChar.repeat(rightPad);\n }\n\n export function alignLeft(value: string, width: number, padChar: string = ' '): string {\n return padEnd(value, width, padChar);\n }\n\n export function alignRight(value: string, width: number, padChar: string = ' '): string {\n return padStart(value, width, padChar);\n }\n\n export function alignCenter(value: string, width: number, padChar: string = ' '): string {\n return center(value, width, padChar);\n }\n\n export function toBoolean(value: string): boolean {\n const truthy = ['true', '1', 'yes', 'on', 'y'];\n return truthy.includes(value?.toLowerCase().trim());\n }\n\n export function toNumber(value: string, defaultValue: number = 0): number {\n const num = parseFloat(value);\n return isNaN(num) ? defaultValue : num;\n }\n\n export function toArray(value: string, separator: string | RegExp = ','): string[] {\n return split(value, separator);\n }\n\n export function hashCode(value: string): number {\n let hash = 0;\n for (let i = 0; i < value.length; i++) {\n const char = value.charCodeAt(i);\n hash = ((hash << 5) - hash) + char;\n hash = hash & hash;\n }\n return hash;\n }\n\n export function isPalindrome(value: string): boolean {\n const cleaned = value.toLowerCase().replace(/[^a-z0-9]/g, '');\n return cleaned === cleaned.split('').reverse().join('');\n }\n\n export function isAnagram(a: string, b: string): boolean {\n const normalize = (s: string) => s.toLowerCase().replace(/[^a-z0-9]/g, '').split('').sort().join('');\n return normalize(a) === normalize(b);\n }\n\n export function reverseWords(value: string): string {\n return value?.split(/\\s+/).reverse().join(' ') ?? '';\n }\n\n export function sortCharacters(value: string): string {\n return value?.split('').sort().join('') ?? '';\n }\n\n export function uniqueCharacters(value: string): string {\n return [...new Set(value)].join('');\n }\n\n export function removeDuplicates(value: string): string {\n return value?.split('').filter((char, index, arr) => arr.indexOf(char) === index).join('') ?? '';\n }\n\n export function longestCommonSubstring(a: string, b: string): string {\n if (isEmpty(a) || isEmpty(b)) return '';\n const matrix: number[][] = Array(a.length + 1).fill(null).map(() => Array(b.length + 1).fill(0));\n let maxLength = 0;\n let endIndex = 0;\n for (let i = 1; i <= a.length; i++) {\n for (let j = 1; j <= b.length; j++) {\n if (a[i - 1] === b[j - 1]) {\n matrix[i]![j] = matrix[i - 1]![j - 1]! + 1;\n if (matrix[i]![j]! > maxLength) {\n maxLength = matrix[i]![j]!;\n endIndex = i;\n }\n }\n }\n }\n return a.slice(endIndex - maxLength, endIndex);\n }\n\n export function longestCommonPrefix(strings: string[]): string {\n if (strings.length === 0) return '';\n if (strings.length === 1) return strings[0] ?? '';\n const sorted = [...strings].sort();\n const first = sorted[0] ?? '';\n const last = sorted[sorted.length - 1] ?? '';\n let i = 0;\n while (i < first.length && first[i] === last[i]) {\n i++;\n }\n return first.slice(0, i);\n }\n\n export function longestCommonSuffix(strings: string[]): string {\n const reversed = strings.map(s => s?.split('').reverse().join('') ?? '');\n return longestCommonPrefix(reversed).split('').reverse().join('');\n }\n\n export function truncateMiddle(value: string, maxLength: number, separator: string = '...'): string {\n if (isEmpty(value) || value.length <= maxLength) return value ?? '';\n const sepLen = separator.length;\n const charsToShow = maxLength - sepLen;\n const frontChars = Math.ceil(charsToShow / 2);\n const backChars = Math.floor(charsToShow / 2);\n return value.slice(0, frontChars) + separator + value.slice(-backChars);\n }\n\n export function ellipsis(value: string, maxLength: number): string {\n return truncate(value, maxLength, '...');\n }\n\n export function ellipsisMiddle(value: string, maxLength: number): string {\n return truncateMiddle(value, maxLength, '...');\n }\n\n export function pad(value: string, length: number, padChar: string = ' '): string {\n return center(value, length, padChar);\n }\n\n export function padCenter(value: string, length: number, padChar: string = ' '): string {\n return center(value, length, padChar);\n }\n\n export function isAscii(value: string): boolean {\n return /^[\\x00-\\x7F]*$/.test(value);\n }\n\n export function isLowerCase(value: string): boolean {\n return value === value.toLowerCase();\n }\n\n export function isUpperCase(value: string): boolean {\n return value === value.toUpperCase();\n }\n\n export function isCapitalized(value: string): boolean {\n return value.charAt(0) === value.charAt(0).toUpperCase();\n }\n\n export function swapPrefix(value: string, oldPrefix: string, newPrefix: string): string {\n if (value.startsWith(oldPrefix)) {\n return newPrefix + value.slice(oldPrefix.length);\n }\n return value;\n }\n\n export function swapSuffix(value: string, oldSuffix: string, newSuffix: string): string {\n if (value.endsWith(oldSuffix)) {\n return value.slice(0, -oldSuffix.length) + newSuffix;\n }\n return value;\n }\n\n export function ensurePrefix(value: string, prefix: string): string {\n return value.startsWith(prefix) ? value : prefix + value;\n }\n\n export function ensureSuffix(value: string, suffix: string): string {\n return value.endsWith(suffix) ? value : value + suffix;\n }\n\n export function removePrefix(value: string, prefix: string): string {\n return value.startsWith(prefix) ? value.slice(prefix.length) : value;\n }\n\n export function removeSuffix(value: string, suffix: string): string {\n return value.endsWith(suffix) ? value.slice(0, -suffix.length) : value;\n }\n\n export function take(value: string, n: number): string {\n return value?.slice(0, n) ?? '';\n }\n\n export function takeRight(value: string, n: number): string {\n return value?.slice(-n) ?? '';\n }\n\n export function takeWhile(value: string, predicate: (char: string) => boolean): string {\n let result = '';\n for (const char of value ?? '') {\n if (!predicate(char)) break;\n result += char;\n }\n return result;\n }\n\n export function takeRightWhile(value: string, predicate: (char: string) => boolean): string {\n let result = '';\n for (let i = (value?.length ?? 0) - 1; i >= 0; i--) {\n const char = value?.charAt(i) ?? '';\n if (!predicate(char)) break;\n result = char + result;\n }\n return result;\n }\n\n export function drop(value: string, n: number): string {\n return value?.slice(n) ?? '';\n }\n\n export function dropRight(value: string, n: number): string {\n return value?.slice(0, -n) ?? '';\n }\n\n export function dropWhile(value: string, predicate: (char: string) => boolean): string {\n let i = 0;\n for (const char of value ?? '') {\n if (!predicate(char)) break;\n i++;\n }\n return value?.slice(i) ?? '';\n }\n\n export function dropRightWhile(value: string, predicate: (char: string) => boolean): string {\n let i = (value?.length ?? 0) - 1;\n while (i >= 0 && predicate(value?.charAt(i) ?? '')) {\n i--;\n }\n return value?.slice(0, i + 1) ?? '';\n }\n\n export function countLines(value: string): number {\n return lineCount(value);\n }\n\n export function getLine(value: string, lineNumber: number): string {\n const lines = splitLines(value);\n return lines[lineNumber] ?? '';\n }\n\n export function getLines(value: string): string[] {\n return splitLines(value);\n }\n\n export function isSingleLine(value: string): boolean {\n return !value?.includes('\\n');\n }\n\n export function isMultiLine(value: string): boolean {\n return value?.includes('\\n') ?? false;\n }\n\n export function normalizeLineEndings(value: string, lineEnding: '\\n' | '\\r\\n' | '\\r' = '\\n'): string {\n return value?.replace(/\\r\\n|\\r|\\n/g, lineEnding) ?? '';\n }\n\n export function toCamelCase(value: string): string {\n return camelCase(value);\n }\n\n export function toKebabCase(value: string): string {\n return kebabCase(value);\n }\n\n export function toSnakeCase(value: string): string {\n return snakeCase(value);\n }\n\n export function toPascalCase(value: string): string {\n return pascalCase(value);\n }\n\n export function toConstantCase(value: string): string {\n return constantCase(value);\n }\n\n export function toSentenceCase(value: string): string {\n if (isEmpty(value)) return '';\n return value.charAt(0).toUpperCase() + value.slice(1).toLowerCase();\n }\n\n export function toTitleCase(value: string): string {\n return capitalizeWords(value);\n }\n\n export function toCapitalCase(value: string): string {\n return capitalizeWords(value);\n }\n\n export function toDotCase(value: string): string {\n return value?.replace(/([a-z])([A-Z])/g, '$1.$2').replace(/[-_\\s]+/g, '.').toLowerCase() ?? '';\n }\n\n export function toPathCase(value: string): string {\n return value?.replace(/([a-z])([A-Z])/g, '$1/$2').replace(/[-_\\s]+/g, '/').toLowerCase() ?? '';\n }\n\n export function stripTags(value: string): string {\n return value?.replace(/<[^>]*>/g, '') ?? '';\n }\n\n export function stripNumbers(value: string): string {\n return value?.replace(/\\d+/g, '') ?? '';\n }\n\n export function stripWhitespace(value: string): string {\n return value?.replace(/\\s+/g, '') ?? '';\n }\n\n export function stripPunctuation(value: string): string {\n return value?.replace(/[^\\w\\s]/g, '') ?? '';\n }\n\n export function normalizeWhitespace(value: string): string {\n return value?.replace(/\\s+/g, ' ').trim() ?? '';\n }\n\n export function includesAll(value: string, searches: string[]): boolean {\n return searches.every(search => value?.includes(search) ?? false);\n }\n\n export function includesAny(value: string, searches: string[]): boolean {\n return searches.some(search => value?.includes(search) ?? false);\n }\n}\n"],"names":["StringUtils","wordCount","words"],"mappings":"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"}
|
package/dist/utils/string.js
CHANGED
|
@@ -29,23 +29,23 @@ var StringUtils;
|
|
|
29
29
|
}
|
|
30
30
|
StringUtils2.isNotBlank = isNotBlank;
|
|
31
31
|
function trim(value) {
|
|
32
|
-
return
|
|
32
|
+
return value?.trim() ?? "";
|
|
33
33
|
}
|
|
34
34
|
StringUtils2.trim = trim;
|
|
35
35
|
function trimStart(value) {
|
|
36
|
-
return
|
|
36
|
+
return value?.trimStart() ?? "";
|
|
37
37
|
}
|
|
38
38
|
StringUtils2.trimStart = trimStart;
|
|
39
39
|
function trimEnd(value) {
|
|
40
|
-
return
|
|
40
|
+
return value?.trimEnd() ?? "";
|
|
41
41
|
}
|
|
42
42
|
StringUtils2.trimEnd = trimEnd;
|
|
43
43
|
function toLowerCase(value) {
|
|
44
|
-
return
|
|
44
|
+
return value?.toLowerCase() ?? "";
|
|
45
45
|
}
|
|
46
46
|
StringUtils2.toLowerCase = toLowerCase;
|
|
47
47
|
function toUpperCase(value) {
|
|
48
|
-
return
|
|
48
|
+
return value?.toUpperCase() ?? "";
|
|
49
49
|
}
|
|
50
50
|
StringUtils2.toUpperCase = toUpperCase;
|
|
51
51
|
function capitalize(value) {
|
|
@@ -96,11 +96,11 @@ var StringUtils;
|
|
|
96
96
|
}
|
|
97
97
|
StringUtils2.truncateWords = truncateWords;
|
|
98
98
|
function padStart(value, length, padChar = " ") {
|
|
99
|
-
return
|
|
99
|
+
return value?.padStart(length, padChar) ?? "";
|
|
100
100
|
}
|
|
101
101
|
StringUtils2.padStart = padStart;
|
|
102
102
|
function padEnd(value, length, padChar = " ") {
|
|
103
|
-
return
|
|
103
|
+
return value?.padEnd(length, padChar) ?? "";
|
|
104
104
|
}
|
|
105
105
|
StringUtils2.padEnd = padEnd;
|
|
106
106
|
function repeat(value, count) {
|
|
@@ -114,27 +114,27 @@ var StringUtils;
|
|
|
114
114
|
}
|
|
115
115
|
StringUtils2.reverse = reverse;
|
|
116
116
|
function startsWith(value, prefix) {
|
|
117
|
-
return
|
|
117
|
+
return value?.startsWith(prefix) ?? false;
|
|
118
118
|
}
|
|
119
119
|
StringUtils2.startsWith = startsWith;
|
|
120
120
|
function endsWith(value, suffix) {
|
|
121
|
-
return
|
|
121
|
+
return value?.endsWith(suffix) ?? false;
|
|
122
122
|
}
|
|
123
123
|
StringUtils2.endsWith = endsWith;
|
|
124
124
|
function contains(value, search) {
|
|
125
|
-
return
|
|
125
|
+
return value?.includes(search) ?? false;
|
|
126
126
|
}
|
|
127
127
|
StringUtils2.contains = contains;
|
|
128
128
|
function containsIgnoreCase(value, search) {
|
|
129
|
-
return
|
|
129
|
+
return value?.toLowerCase().includes(search.toLowerCase()) ?? false;
|
|
130
130
|
}
|
|
131
131
|
StringUtils2.containsIgnoreCase = containsIgnoreCase;
|
|
132
132
|
function indexOf(value, search) {
|
|
133
|
-
return
|
|
133
|
+
return value?.indexOf(search) ?? -1;
|
|
134
134
|
}
|
|
135
135
|
StringUtils2.indexOf = indexOf;
|
|
136
136
|
function lastIndexOf(value, search) {
|
|
137
|
-
return
|
|
137
|
+
return value?.lastIndexOf(search) ?? -1;
|
|
138
138
|
}
|
|
139
139
|
StringUtils2.lastIndexOf = lastIndexOf;
|
|
140
140
|
function substring(value, start, end) {
|
|
@@ -152,24 +152,24 @@ var StringUtils;
|
|
|
152
152
|
}
|
|
153
153
|
StringUtils2.split = split;
|
|
154
154
|
function join(values, separator = "") {
|
|
155
|
-
return
|
|
155
|
+
return values?.join(separator) ?? "";
|
|
156
156
|
}
|
|
157
157
|
StringUtils2.join = join;
|
|
158
158
|
function replace(value, search, replacement) {
|
|
159
|
-
return
|
|
159
|
+
return value?.replace(search, replacement) ?? "";
|
|
160
160
|
}
|
|
161
161
|
StringUtils2.replace = replace;
|
|
162
162
|
function replaceAll(value, search, replacement) {
|
|
163
|
-
return
|
|
163
|
+
return value?.replaceAll(search, replacement) ?? "";
|
|
164
164
|
}
|
|
165
165
|
StringUtils2.replaceAll = replaceAll;
|
|
166
166
|
function remove(value, search) {
|
|
167
|
-
return
|
|
167
|
+
return value?.replace(search, "") ?? "";
|
|
168
168
|
}
|
|
169
169
|
StringUtils2.remove = remove;
|
|
170
170
|
function removeAll(value, search) {
|
|
171
171
|
const regex = typeof search === "string" ? new RegExp(search, "g") : new RegExp(search.source, `${search.flags}g`);
|
|
172
|
-
return
|
|
172
|
+
return value?.replace(regex, "") ?? "";
|
|
173
173
|
}
|
|
174
174
|
StringUtils2.removeAll = removeAll;
|
|
175
175
|
function countOccurrences(value, search) {
|
|
@@ -185,7 +185,7 @@ var StringUtils;
|
|
|
185
185
|
'"': """,
|
|
186
186
|
"'": "'"
|
|
187
187
|
};
|
|
188
|
-
return
|
|
188
|
+
return value?.replace(/[&<>"']/g, (char) => htmlEntities[char] || char) ?? "";
|
|
189
189
|
}
|
|
190
190
|
StringUtils2.escapeHtml = escapeHtml;
|
|
191
191
|
function unescapeHtml(value) {
|
|
@@ -198,11 +198,11 @@ var StringUtils;
|
|
|
198
198
|
"'": "'",
|
|
199
199
|
"'": "'"
|
|
200
200
|
};
|
|
201
|
-
return
|
|
201
|
+
return value?.replace(/&(?:amp|lt|gt|quot|#39|#x27|apos);/g, (entity) => htmlEntities[entity] || entity) ?? "";
|
|
202
202
|
}
|
|
203
203
|
StringUtils2.unescapeHtml = unescapeHtml;
|
|
204
204
|
function escapeRegex(value) {
|
|
205
|
-
return
|
|
205
|
+
return value?.replace(/[.*+?^${}()|[\]\\]/g, "\\$&") ?? "";
|
|
206
206
|
}
|
|
207
207
|
StringUtils2.escapeRegex = escapeRegex;
|
|
208
208
|
function isNumeric(value) {
|
|
@@ -326,11 +326,11 @@ var StringUtils;
|
|
|
326
326
|
}
|
|
327
327
|
StringUtils2.uuid = uuid;
|
|
328
328
|
function slugify(value) {
|
|
329
|
-
return
|
|
329
|
+
return value?.toLowerCase().trim().replace(/[^\w\s-]/g, "").replace(/[\s_-]+/g, "-").replace(/^-+|-+$/g, "") ?? "";
|
|
330
330
|
}
|
|
331
331
|
StringUtils2.slugify = slugify;
|
|
332
332
|
function unslugify(value) {
|
|
333
|
-
return
|
|
333
|
+
return value?.replace(/-/g, " ").replace(/\b\w/g, (char) => char.toUpperCase()) ?? "";
|
|
334
334
|
}
|
|
335
335
|
StringUtils2.unslugify = unslugify;
|
|
336
336
|
function levenshteinDistance(a, b) {
|
|
@@ -371,7 +371,7 @@ var StringUtils;
|
|
|
371
371
|
StringUtils2.fuzzyMatch = fuzzyMatch;
|
|
372
372
|
function equals(a, b, ignoreCase = false) {
|
|
373
373
|
if (ignoreCase) {
|
|
374
|
-
return
|
|
374
|
+
return a?.toLowerCase() === b?.toLowerCase();
|
|
375
375
|
}
|
|
376
376
|
return a === b;
|
|
377
377
|
}
|
|
@@ -406,11 +406,11 @@ var StringUtils;
|
|
|
406
406
|
}
|
|
407
407
|
StringUtils2.words = words;
|
|
408
408
|
function charAt(value, index) {
|
|
409
|
-
return
|
|
409
|
+
return value?.charAt(index) ?? "";
|
|
410
410
|
}
|
|
411
411
|
StringUtils2.charAt = charAt;
|
|
412
412
|
function charCodeAt(value, index) {
|
|
413
|
-
return
|
|
413
|
+
return value?.charCodeAt(index) ?? NaN;
|
|
414
414
|
}
|
|
415
415
|
StringUtils2.charCodeAt = charCodeAt;
|
|
416
416
|
function fromCharCode(...codes) {
|
|
@@ -423,9 +423,9 @@ var StringUtils;
|
|
|
423
423
|
}
|
|
424
424
|
StringUtils2.insert = insert;
|
|
425
425
|
function swapCase(value) {
|
|
426
|
-
return
|
|
426
|
+
return value?.replace(/[a-zA-Z]/g, (char) => {
|
|
427
427
|
return char === char.toUpperCase() ? char.toLowerCase() : char.toUpperCase();
|
|
428
|
-
})
|
|
428
|
+
}) ?? "";
|
|
429
429
|
}
|
|
430
430
|
StringUtils2.swapCase = swapCase;
|
|
431
431
|
function surround(value, wrapper) {
|
|
@@ -457,7 +457,7 @@ var StringUtils;
|
|
|
457
457
|
}
|
|
458
458
|
StringUtils2.unwrap = unwrap;
|
|
459
459
|
function template(templateStr, values) {
|
|
460
|
-
return
|
|
460
|
+
return templateStr?.replace(/\{\{(\w+)\}\}/g, (_, key) => String(values[key] ?? "")) ?? "";
|
|
461
461
|
}
|
|
462
462
|
StringUtils2.template = template;
|
|
463
463
|
function interpolate(templateStr, values) {
|
|
@@ -467,10 +467,7 @@ var StringUtils;
|
|
|
467
467
|
function dedent(value) {
|
|
468
468
|
const lines = value.split("\n");
|
|
469
469
|
const minIndent = Math.min(
|
|
470
|
-
...lines.filter((line) => line.trim().length > 0).map((line) =>
|
|
471
|
-
var _a;
|
|
472
|
-
return ((_a = line.match(/^\s*/)) == null ? void 0 : _a[0].length) ?? 0;
|
|
473
|
-
})
|
|
470
|
+
...lines.filter((line) => line.trim().length > 0).map((line) => line.match(/^\s*/)?.[0].length ?? 0)
|
|
474
471
|
);
|
|
475
472
|
return lines.map((line) => line.slice(minIndent)).join("\n");
|
|
476
473
|
}
|
|
@@ -502,7 +499,7 @@ var StringUtils;
|
|
|
502
499
|
StringUtils2.alignCenter = alignCenter;
|
|
503
500
|
function toBoolean(value) {
|
|
504
501
|
const truthy = ["true", "1", "yes", "on", "y"];
|
|
505
|
-
return truthy.includes(value
|
|
502
|
+
return truthy.includes(value?.toLowerCase().trim());
|
|
506
503
|
}
|
|
507
504
|
StringUtils2.toBoolean = toBoolean;
|
|
508
505
|
function toNumber(value, defaultValue = 0) {
|
|
@@ -535,11 +532,11 @@ var StringUtils;
|
|
|
535
532
|
}
|
|
536
533
|
StringUtils2.isAnagram = isAnagram;
|
|
537
534
|
function reverseWords(value) {
|
|
538
|
-
return
|
|
535
|
+
return value?.split(/\s+/).reverse().join(" ") ?? "";
|
|
539
536
|
}
|
|
540
537
|
StringUtils2.reverseWords = reverseWords;
|
|
541
538
|
function sortCharacters(value) {
|
|
542
|
-
return
|
|
539
|
+
return value?.split("").sort().join("") ?? "";
|
|
543
540
|
}
|
|
544
541
|
StringUtils2.sortCharacters = sortCharacters;
|
|
545
542
|
function uniqueCharacters(value) {
|
|
@@ -547,7 +544,7 @@ var StringUtils;
|
|
|
547
544
|
}
|
|
548
545
|
StringUtils2.uniqueCharacters = uniqueCharacters;
|
|
549
546
|
function removeDuplicates(value) {
|
|
550
|
-
return
|
|
547
|
+
return value?.split("").filter((char, index, arr) => arr.indexOf(char) === index).join("") ?? "";
|
|
551
548
|
}
|
|
552
549
|
StringUtils2.removeDuplicates = removeDuplicates;
|
|
553
550
|
function longestCommonSubstring(a, b) {
|
|
@@ -583,7 +580,7 @@ var StringUtils;
|
|
|
583
580
|
}
|
|
584
581
|
StringUtils2.longestCommonPrefix = longestCommonPrefix;
|
|
585
582
|
function longestCommonSuffix(strings) {
|
|
586
|
-
const reversed = strings.map((s) =>
|
|
583
|
+
const reversed = strings.map((s) => s?.split("").reverse().join("") ?? "");
|
|
587
584
|
return longestCommonPrefix(reversed).split("").reverse().join("");
|
|
588
585
|
}
|
|
589
586
|
StringUtils2.longestCommonSuffix = longestCommonSuffix;
|
|
@@ -659,11 +656,11 @@ var StringUtils;
|
|
|
659
656
|
}
|
|
660
657
|
StringUtils2.removeSuffix = removeSuffix;
|
|
661
658
|
function take(value, n) {
|
|
662
|
-
return
|
|
659
|
+
return value?.slice(0, n) ?? "";
|
|
663
660
|
}
|
|
664
661
|
StringUtils2.take = take;
|
|
665
662
|
function takeRight(value, n) {
|
|
666
|
-
return
|
|
663
|
+
return value?.slice(-n) ?? "";
|
|
667
664
|
}
|
|
668
665
|
StringUtils2.takeRight = takeRight;
|
|
669
666
|
function takeWhile(value, predicate) {
|
|
@@ -677,8 +674,8 @@ var StringUtils;
|
|
|
677
674
|
StringUtils2.takeWhile = takeWhile;
|
|
678
675
|
function takeRightWhile(value, predicate) {
|
|
679
676
|
let result = "";
|
|
680
|
-
for (let i = (
|
|
681
|
-
const char =
|
|
677
|
+
for (let i = (value?.length ?? 0) - 1; i >= 0; i--) {
|
|
678
|
+
const char = value?.charAt(i) ?? "";
|
|
682
679
|
if (!predicate(char)) break;
|
|
683
680
|
result = char + result;
|
|
684
681
|
}
|
|
@@ -686,11 +683,11 @@ var StringUtils;
|
|
|
686
683
|
}
|
|
687
684
|
StringUtils2.takeRightWhile = takeRightWhile;
|
|
688
685
|
function drop(value, n) {
|
|
689
|
-
return
|
|
686
|
+
return value?.slice(n) ?? "";
|
|
690
687
|
}
|
|
691
688
|
StringUtils2.drop = drop;
|
|
692
689
|
function dropRight(value, n) {
|
|
693
|
-
return
|
|
690
|
+
return value?.slice(0, -n) ?? "";
|
|
694
691
|
}
|
|
695
692
|
StringUtils2.dropRight = dropRight;
|
|
696
693
|
function dropWhile(value, predicate) {
|
|
@@ -699,15 +696,15 @@ var StringUtils;
|
|
|
699
696
|
if (!predicate(char)) break;
|
|
700
697
|
i++;
|
|
701
698
|
}
|
|
702
|
-
return
|
|
699
|
+
return value?.slice(i) ?? "";
|
|
703
700
|
}
|
|
704
701
|
StringUtils2.dropWhile = dropWhile;
|
|
705
702
|
function dropRightWhile(value, predicate) {
|
|
706
|
-
let i = (
|
|
707
|
-
while (i >= 0 && predicate(
|
|
703
|
+
let i = (value?.length ?? 0) - 1;
|
|
704
|
+
while (i >= 0 && predicate(value?.charAt(i) ?? "")) {
|
|
708
705
|
i--;
|
|
709
706
|
}
|
|
710
|
-
return
|
|
707
|
+
return value?.slice(0, i + 1) ?? "";
|
|
711
708
|
}
|
|
712
709
|
StringUtils2.dropRightWhile = dropRightWhile;
|
|
713
710
|
function countLines(value) {
|
|
@@ -724,15 +721,15 @@ var StringUtils;
|
|
|
724
721
|
}
|
|
725
722
|
StringUtils2.getLines = getLines;
|
|
726
723
|
function isSingleLine(value) {
|
|
727
|
-
return !
|
|
724
|
+
return !value?.includes("\n");
|
|
728
725
|
}
|
|
729
726
|
StringUtils2.isSingleLine = isSingleLine;
|
|
730
727
|
function isMultiLine(value) {
|
|
731
|
-
return
|
|
728
|
+
return value?.includes("\n") ?? false;
|
|
732
729
|
}
|
|
733
730
|
StringUtils2.isMultiLine = isMultiLine;
|
|
734
731
|
function normalizeLineEndings(value, lineEnding = "\n") {
|
|
735
|
-
return
|
|
732
|
+
return value?.replace(/\r\n|\r|\n/g, lineEnding) ?? "";
|
|
736
733
|
}
|
|
737
734
|
StringUtils2.normalizeLineEndings = normalizeLineEndings;
|
|
738
735
|
function toCamelCase(value) {
|
|
@@ -769,39 +766,39 @@ var StringUtils;
|
|
|
769
766
|
}
|
|
770
767
|
StringUtils2.toCapitalCase = toCapitalCase;
|
|
771
768
|
function toDotCase(value) {
|
|
772
|
-
return
|
|
769
|
+
return value?.replace(/([a-z])([A-Z])/g, "$1.$2").replace(/[-_\s]+/g, ".").toLowerCase() ?? "";
|
|
773
770
|
}
|
|
774
771
|
StringUtils2.toDotCase = toDotCase;
|
|
775
772
|
function toPathCase(value) {
|
|
776
|
-
return
|
|
773
|
+
return value?.replace(/([a-z])([A-Z])/g, "$1/$2").replace(/[-_\s]+/g, "/").toLowerCase() ?? "";
|
|
777
774
|
}
|
|
778
775
|
StringUtils2.toPathCase = toPathCase;
|
|
779
776
|
function stripTags(value) {
|
|
780
|
-
return
|
|
777
|
+
return value?.replace(/<[^>]*>/g, "") ?? "";
|
|
781
778
|
}
|
|
782
779
|
StringUtils2.stripTags = stripTags;
|
|
783
780
|
function stripNumbers(value) {
|
|
784
|
-
return
|
|
781
|
+
return value?.replace(/\d+/g, "") ?? "";
|
|
785
782
|
}
|
|
786
783
|
StringUtils2.stripNumbers = stripNumbers;
|
|
787
784
|
function stripWhitespace(value) {
|
|
788
|
-
return
|
|
785
|
+
return value?.replace(/\s+/g, "") ?? "";
|
|
789
786
|
}
|
|
790
787
|
StringUtils2.stripWhitespace = stripWhitespace;
|
|
791
788
|
function stripPunctuation(value) {
|
|
792
|
-
return
|
|
789
|
+
return value?.replace(/[^\w\s]/g, "") ?? "";
|
|
793
790
|
}
|
|
794
791
|
StringUtils2.stripPunctuation = stripPunctuation;
|
|
795
792
|
function normalizeWhitespace(value) {
|
|
796
|
-
return
|
|
793
|
+
return value?.replace(/\s+/g, " ").trim() ?? "";
|
|
797
794
|
}
|
|
798
795
|
StringUtils2.normalizeWhitespace = normalizeWhitespace;
|
|
799
796
|
function includesAll(value, searches) {
|
|
800
|
-
return searches.every((search) =>
|
|
797
|
+
return searches.every((search) => value?.includes(search) ?? false);
|
|
801
798
|
}
|
|
802
799
|
StringUtils2.includesAll = includesAll;
|
|
803
800
|
function includesAny(value, searches) {
|
|
804
|
-
return searches.some((search) =>
|
|
801
|
+
return searches.some((search) => value?.includes(search) ?? false);
|
|
805
802
|
}
|
|
806
803
|
StringUtils2.includesAny = includesAny;
|
|
807
804
|
})(StringUtils || (StringUtils = {}));
|