@techmely/utils
Version:
Collection of helpful JavaScript / TypeScript utils
63 lines (56 loc) • 1.54 kB
JavaScript
/*!
* @techmely/utils
* Copyright(c) 2021-2024 Techmely <techmely.creation@gmail.com>
* MIT Licensed
*/
// src/invariant.ts
var prefix = "Invariant failed";
function invariant(condition, message) {
if (condition) {
return;
}
if (typeof message === "string" || typeof message === "function") {
const provided = typeof message === "function" ? message() : message;
const value = provided ? `${prefix}: ${provided}` : prefix;
throw new Error(value);
}
if (message)
throw message;
throw new Error(prefix);
}
// src/isBrowser.ts
function isBrowser() {
return typeof window !== "undefined";
}
// src/useObserverElement.ts
function useObserverElement() {
invariant(isBrowser());
let observer = null;
const callbacks = /* @__PURE__ */ new Map();
const observe = (element, callback) => {
if (!observer) {
observer = new IntersectionObserver((entries) => {
for (const entry of entries) {
const callback2 = callbacks.get(entry.target);
const isVisible = entry.isIntersecting || entry.intersectionRatio > 0;
if (isVisible && callback2) {
callback2();
}
}
});
}
callbacks.set(element, callback);
observer.observe(element);
return () => {
callbacks.delete(element);
observer?.unobserve(element);
if (callbacks.size === 0) {
observer?.disconnect();
observer = null;
}
};
};
return observe;
}
exports.useObserverElement = useObserverElement;
;