@razz21/vue-scan
Version:
Track and visualize Vue 3 component renders
46 lines (45 loc) • 1.76 kB
JavaScript
import { VueScanCanvas as C } from "../canvas/index.js";
import { initCanvasContainer as E } from "../canvas/render.js";
import { defaultOptions as d, DevToolsHooks as l } from "../core/constants.js";
import { createDevToolsHook as N } from "../core/hook.js";
import { VueScanInstrumentation as D } from "../core/instrumentation.js";
import { VueScanStore as T } from "../core/store.js";
import { getComponentName as s } from "../core/utils.js";
import { logger as t } from "../utils/logger.js";
import { getCurrentInstance as f } from "vue";
N();
const I = {
install(_, O) {
const r = { ...d, ...O };
if (!r.enabled)
return;
t.setOptions({ enabled: r.logToConsole });
const m = E(), u = new C(m, r), p = new T(), e = new D(r, p, u), n = window.__VUE_DEVTOOLS_GLOBAL_HOOK__;
if (!n) {
t.error("__VUE_DEVTOOLS_GLOBAL_HOOK__ not available"), e.clear();
return;
}
n.on(l.COMPONENT_ADDED, (a, i, c, o) => {
requestIdleCallback(async () => await e.track(o)), t.log("COMPONENT_ADDED", s(o));
}), n.on(l.COMPONENT_UPDATED, (a, i, c, o) => {
requestIdleCallback(async () => await e.track(o)), t.log("COMPONENT_UPDATED", s(o));
}), n.on(l.COMPONENT_REMOVED, (a, i, c, o) => {
requestIdleCallback(() => e.delete(i), { timeout: 1e3 }), t.log("COMPONENT_REMOVED", s(o));
}), n.on(l.APP_UNMOUNT, (a) => {
t.log("APP_UNMOUNT");
}), _.mixin({
beforeUnmount() {
const a = f();
requestIdleCallback(() => e.delete(a.uid), { timeout: 1e3 });
}
}), setInterval(() => {
requestIdleCallback(() => e.garbageCollectElements());
}, 5e3), _.onUnmount?.(() => {
e.clear();
});
}
};
export {
I as default
};
//# sourceMappingURL=plugin.js.map