Dev Build / cleanup (push) Canceled after 0s
Dev Build / typecheck (push) Canceled after 0s
Dev Build / build (linux-arm64, ubuntu-24.04-arm, linux-arm64) (push) Canceled after 0s
Dev Build / build (linux-x64, ubuntu-latest, linux-x64) (push) Canceled after 0s
Dev Build / build (win-x64, windows-latest, win32-x64) (push) Canceled after 0s
Dev Build / dispatch-dev-docker (push) Canceled after 0s
75 lines
2.3 KiB
Plaintext
75 lines
2.3 KiB
Plaintext
"use strict";
|
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
function memo(getDeps, fn, opts) {
|
|
let deps = opts.initialDeps ?? [];
|
|
let result;
|
|
let isInitial = true;
|
|
function memoizedFunction() {
|
|
var _a;
|
|
const debugEnabled = process.env.NODE_ENV !== "production" && !!opts.key && !!((_a = opts.debug) == null ? void 0 : _a.call(opts));
|
|
let depTime = 0;
|
|
if (debugEnabled) depTime = Date.now();
|
|
const newDeps = getDeps();
|
|
const depsChanged = newDeps.length !== deps.length || newDeps.some((dep, index) => deps[index] !== dep);
|
|
if (!depsChanged) {
|
|
return result;
|
|
}
|
|
deps = newDeps;
|
|
let resultTime = 0;
|
|
if (debugEnabled) resultTime = Date.now();
|
|
result = fn(...newDeps);
|
|
if (debugEnabled) {
|
|
const depEndTime = Math.round((Date.now() - depTime) * 100) / 100;
|
|
const resultEndTime = Math.round((Date.now() - resultTime) * 100) / 100;
|
|
const resultFpsPercentage = resultEndTime / 16;
|
|
const pad = (str, num) => {
|
|
str = String(str);
|
|
while (str.length < num) {
|
|
str = " " + str;
|
|
}
|
|
return str;
|
|
};
|
|
console.info(
|
|
`%c⏱ ${pad(resultEndTime, 5)} /${pad(depEndTime, 5)} ms`,
|
|
`
|
|
font-size: .6rem;
|
|
font-weight: bold;
|
|
color: hsl(${Math.max(
|
|
0,
|
|
Math.min(120 - 120 * resultFpsPercentage, 120)
|
|
)}deg 100% 31%);`,
|
|
opts == null ? void 0 : opts.key
|
|
);
|
|
}
|
|
if ((opts == null ? void 0 : opts.onChange) && !(isInitial && opts.skipInitialOnChange)) {
|
|
opts.onChange(result);
|
|
}
|
|
isInitial = false;
|
|
return result;
|
|
}
|
|
memoizedFunction.updateDeps = (newDeps) => {
|
|
deps = newDeps;
|
|
};
|
|
return memoizedFunction;
|
|
}
|
|
function notUndefined(value, msg) {
|
|
if (value === void 0) {
|
|
throw new Error(`Unexpected undefined${msg ? `: ${msg}` : ""}`);
|
|
} else {
|
|
return value;
|
|
}
|
|
}
|
|
const approxEqual = (a, b) => Math.abs(a - b) < 1.01;
|
|
const debounce = (targetWindow, fn, ms) => {
|
|
let timeoutId;
|
|
return function(...args) {
|
|
targetWindow.clearTimeout(timeoutId);
|
|
timeoutId = targetWindow.setTimeout(() => fn.apply(this, args), ms);
|
|
};
|
|
};
|
|
exports.approxEqual = approxEqual;
|
|
exports.debounce = debounce;
|
|
exports.memo = memo;
|
|
exports.notUndefined = notUndefined;
|
|
//# sourceMappingURL=utils.cjs.map
|