renovate/lib/util/string.ts

93 lines
2.2 KiB
TypeScript

// Return true if the match string is found at index in content
export function matchAt(
content: string,
index: number,
match: string,
): boolean {
return content.substring(index, index + match.length) === match;
}
// Replace oldString with newString at location index of content
export function replaceAt(
content: string,
index: number,
oldString: string,
newString: string,
): string {
return (
content.substring(0, index) +
newString +
content.substring(index + oldString.length)
);
}
/**
* Converts from utf-8 string to base64-encoded string
*/
export function toBase64(input: string): string {
return Buffer.from(input).toString('base64');
}
/**
* Converts from base64-encoded string to utf-8 string
*/
export function fromBase64(input: string): string {
return Buffer.from(input, 'base64').toString();
}
export function uniqueStrings(
element: string,
index: number,
elements: string[],
): boolean {
return elements.indexOf(element) === index;
}
export function looseEquals(
a: string | null | undefined,
b: string | null | undefined,
): boolean {
if (!(a && b)) {
return a === b;
}
return a.localeCompare(b, undefined, { sensitivity: 'base' }) === 0;
}
export function titleCase(input: string): string {
const words = input.toLowerCase().split(' ');
for (let i = 0; i < words.length; i++) {
const word = words[i];
words[i] = word.charAt(0).toUpperCase() + word.slice(1).toLowerCase();
}
return words.join(' ');
}
/**
* Sometimes we extract small strings from a multi-megabyte files.
* If we then save them in the in-memory cache, V8 may not free
* the initial buffer, which can lead to memory leaks:
*
* https://bugs.chromium.org/p/v8/issues/detail?id=2869
*
*/
export function copystr(x: string): string {
const len = Buffer.byteLength(x, 'utf8');
const buf = Buffer.allocUnsafeSlow(len);
buf.write(x, 'utf8');
return buf.toString('utf8');
}
/**
* Coerce a value to a string with optional default value.
* @param val value to coerce
* @returns the coerced value.
*/
export function coerceString(
val: string | null | undefined,
def?: string,
): string {
return val ?? def ?? '';
}