Michaël Zasso f226350fcb deps: update V8 to 11.3.244.4
PR-URL: https://github.com/nodejs/node/pull/47251
Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
Reviewed-By: Jiawen Geng <technicalcute@gmail.com>
Reviewed-By: Rafael Gonzaga <rafael.nunu@hotmail.com>
Reviewed-By: Richard Lau <rlau@redhat.com>
2023-03-31 14:15:23 +00:00

107 lines
3.4 KiB
TypeScript

// Copyright 2015 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
export function snakeToCamel(str: string): string {
return str.toLowerCase().replace(/([-_][a-z])/g, group =>
group
.toUpperCase()
.replace('-', '')
.replace('_', ''));
}
export function camelize(obj: any): any {
if (Array.isArray(obj)) {
return obj.map(value => camelize(value));
} else if (obj !== null && obj.constructor === Object) {
return Object.keys(obj).reduce((result, key: string) => ({
...result,
[snakeToCamel(key)]: camelize(obj[key])
}), {},
);
}
return obj;
}
export function sortUnique<T>(arr: Array<T>, comparator: (a: T, b: T) => number,
equals: (a: T, b: T) => boolean): Array<T> {
if (arr.length == 0) return arr;
arr = arr.sort(comparator);
const uniqueArr = [arr[0]];
for (let i = 1; i < arr.length; i++) {
if (!equals(arr[i - 1], arr[i])) {
uniqueArr.push(arr[i]);
}
}
return uniqueArr;
}
// Partial application without binding the receiver
export function partial(func: any, ...arguments1: Array<any>) {
return function (this: any, ...arguments2: Array<any>) {
func.apply(this, [...arguments1, ...arguments2]);
};
}
export function isIterable(obj: any): obj is Iterable<any> {
return obj !== null && obj !== undefined
&& typeof obj !== "string" && typeof obj[Symbol.iterator] === "function";
}
export function alignUp(raw: number, multiple: number): number {
return Math.floor((raw + multiple - 1) / multiple) * multiple;
}
export function measureText(text: string, coefficient: number = 1):
{ width: number, height: number } {
const textMeasure = document.getElementById("text-measure");
if (textMeasure instanceof SVGTSpanElement) {
textMeasure.textContent = text;
return {
width: textMeasure.getBBox().width * coefficient,
height: textMeasure.getBBox().height * coefficient,
};
}
return { width: 0, height: 0 };
}
// Interpolate between the given start and end values by a fraction of val/max.
export function interpolate(val: number, max: number, start: number, end: number): number {
return start + (end - start) * (val / max);
}
export function createElement(tag: string, cls: string, content?: string): HTMLElement {
const el = document.createElement(tag);
el.className = cls;
if (content !== undefined) el.innerText = content;
return el;
}
export function storageGetItem(key: string, defaultValue?: any, parse: boolean = true): any {
let value = window.sessionStorage.getItem(key);
if (parse) value = JSON.parse(value);
return value === null ? defaultValue : value;
}
export function storageSetItem(key: string, value: any): void {
window.sessionStorage.setItem(key, value);
}
export function storageSetIfIsNotExist(key: string, toSet: any): void {
if (storageGetItem(key, null, false) === null) storageSetItem(key, toSet);
}
export function copyToClipboard(text: string): void {
if (!text || text.length == 0) return;
navigator.clipboard.writeText(text);
}
export function getNumericCssValue(varName: string): number {
const propertyValue = getComputedStyle(document.body).getPropertyValue(varName);
return parseFloat(propertyValue.match(/[+-]?\d+(\.\d+)?/g)[0]);
}
export function setCssValue(varName: string, value: string): void {
document.body.style.setProperty(varName, value);
}