|
export function getResolver(timeout = 5000) { |
|
const resolver = {}; |
|
resolver.id = generateId(8); |
|
resolver.completed = false; |
|
resolver.resolved = false; |
|
resolver.rejected = false; |
|
resolver.promise = new Promise((resolve, reject) => { |
|
resolver.reject = (e) => { |
|
resolver.completed = true; |
|
resolver.rejected = true; |
|
reject(e); |
|
}; |
|
resolver.resolve = (data) => { |
|
resolver.completed = true; |
|
resolver.resolved = true; |
|
resolve(data); |
|
}; |
|
}); |
|
resolver.timeout = setTimeout(() => { |
|
if (!resolver.completed) { |
|
resolver.reject(); |
|
} |
|
}, timeout); |
|
return resolver; |
|
} |
|
const DEBOUNCE_FN_TO_PROMISE = new WeakMap(); |
|
export function debounce(fn, ms = 64) { |
|
if (!DEBOUNCE_FN_TO_PROMISE.get(fn)) { |
|
DEBOUNCE_FN_TO_PROMISE.set(fn, wait(ms).then(() => { |
|
DEBOUNCE_FN_TO_PROMISE.delete(fn); |
|
fn(); |
|
})); |
|
} |
|
return DEBOUNCE_FN_TO_PROMISE.get(fn); |
|
} |
|
export function wait(ms = 16) { |
|
if (ms === 16) { |
|
return new Promise((resolve) => { |
|
requestAnimationFrame(() => { |
|
resolve(); |
|
}); |
|
}); |
|
} |
|
return new Promise((resolve) => { |
|
setTimeout(() => { |
|
resolve(); |
|
}, ms); |
|
}); |
|
} |
|
function dec2hex(dec) { |
|
return dec.toString(16).padStart(2, "0"); |
|
} |
|
export function generateId(length) { |
|
const arr = new Uint8Array(length / 2); |
|
crypto.getRandomValues(arr); |
|
return Array.from(arr, dec2hex).join(""); |
|
} |
|
export function getObjectValue(obj, objKey, def) { |
|
if (!obj || !objKey) |
|
return def; |
|
const keys = objKey.split("."); |
|
const key = keys.shift(); |
|
const found = obj[key]; |
|
if (keys.length) { |
|
return getObjectValue(found, keys.join("."), def); |
|
} |
|
return found; |
|
} |
|
export function setObjectValue(obj, objKey, value, createMissingObjects = true) { |
|
if (!obj || !objKey) |
|
return obj; |
|
const keys = objKey.split("."); |
|
const key = keys.shift(); |
|
if (obj[key] === undefined) { |
|
if (!createMissingObjects) { |
|
return; |
|
} |
|
obj[key] = {}; |
|
} |
|
if (!keys.length) { |
|
obj[key] = value; |
|
} |
|
else { |
|
if (typeof obj[key] != "object") { |
|
obj[key] = {}; |
|
} |
|
setObjectValue(obj[key], keys.join("."), value, createMissingObjects); |
|
} |
|
return obj; |
|
} |
|
export function moveArrayItem(arr, itemOrFrom, to) { |
|
const from = typeof itemOrFrom === "number" ? itemOrFrom : arr.indexOf(itemOrFrom); |
|
arr.splice(to, 0, arr.splice(from, 1)[0]); |
|
} |
|
export function removeArrayItem(arr, itemOrIndex) { |
|
const index = typeof itemOrIndex === "number" ? itemOrIndex : arr.indexOf(itemOrIndex); |
|
arr.splice(index, 1); |
|
} |
|
export function injectCss(href) { |
|
if (document.querySelector(`link[href^="${href}"]`)) { |
|
return Promise.resolve(); |
|
} |
|
return new Promise((resolve) => { |
|
const link = document.createElement("link"); |
|
link.setAttribute("rel", "stylesheet"); |
|
link.setAttribute("type", "text/css"); |
|
const timeout = setTimeout(resolve, 1000); |
|
link.addEventListener("load", (e) => { |
|
clearInterval(timeout); |
|
resolve(); |
|
}); |
|
link.href = href; |
|
document.head.appendChild(link); |
|
}); |
|
} |
|
export function defineProperty(instance, property, desc) { |
|
var _a, _b, _c, _d, _e, _f; |
|
const existingDesc = Object.getOwnPropertyDescriptor(instance, property); |
|
if ((existingDesc === null || existingDesc === void 0 ? void 0 : existingDesc.configurable) === false) { |
|
throw new Error(`Error: rgthree-comfy cannot define un-configurable property "${property}"`); |
|
} |
|
if ((existingDesc === null || existingDesc === void 0 ? void 0 : existingDesc.get) && desc.get) { |
|
const descGet = desc.get; |
|
desc.get = () => { |
|
existingDesc.get.apply(instance, []); |
|
return descGet.apply(instance, []); |
|
}; |
|
} |
|
if ((existingDesc === null || existingDesc === void 0 ? void 0 : existingDesc.set) && desc.set) { |
|
const descSet = desc.set; |
|
desc.set = (v) => { |
|
existingDesc.set.apply(instance, [v]); |
|
return descSet.apply(instance, [v]); |
|
}; |
|
} |
|
desc.enumerable = (_b = (_a = desc.enumerable) !== null && _a !== void 0 ? _a : existingDesc === null || existingDesc === void 0 ? void 0 : existingDesc.enumerable) !== null && _b !== void 0 ? _b : true; |
|
desc.configurable = (_d = (_c = desc.configurable) !== null && _c !== void 0 ? _c : existingDesc === null || existingDesc === void 0 ? void 0 : existingDesc.configurable) !== null && _d !== void 0 ? _d : true; |
|
if (!desc.get && !desc.set) { |
|
desc.writable = (_f = (_e = desc.writable) !== null && _e !== void 0 ? _e : existingDesc === null || existingDesc === void 0 ? void 0 : existingDesc.writable) !== null && _f !== void 0 ? _f : true; |
|
} |
|
return Object.defineProperty(instance, property, desc); |
|
} |
|
|