rozenite-preview
Version:
A Rozenite plugin that lets you select React Native components in DevTools and preview them live on your simulator. Ideal for rapid UI development, component testing, and debugging complex apps.
101 lines (100 loc) • 2.04 kB
JavaScript
import { getRozeniteDevToolsClient as f } from "@rozenite/plugin-bridge";
const g = "rozenite-preview";
function d(t) {
const e = /* @__PURE__ */ new Map();
return {
set(r, n) {
return e.set(r, n), t("set", r, n), this;
},
delete(r) {
const n = e.delete(r);
return n && t("delete", r), n;
},
clear() {
e.clear(), t("clear");
},
get(r) {
return e.get(r);
},
has(r) {
return e.has(r);
},
get size() {
return e.size;
},
[Symbol.iterator]() {
return e[Symbol.iterator]();
},
entries() {
return e.entries();
},
keys() {
return e.keys();
},
values() {
return e.values();
},
forEach(r) {
e.forEach(r);
}
};
}
const s = d(() => {
const t = l();
i == null || i.send("registry-updated", t);
});
function c() {
return Array.from(s.values()).flat();
}
function l() {
return c();
}
function E(t) {
var e;
return ((e = c().find((r) => r.name === t)) == null ? void 0 : e.component) || null;
}
const v = (t, e, r, n) => {
if (process.env.NODE_ENV !== "development" || !t.hot || t.id === void 0) {
console.warn(
`Cannot register preview "${e}" in production or in non Metro environment.`
);
return;
}
if (n != null && n.isInsideReactComponent) {
console.error(
'Do not call "registerPreview" inside a React lifecycle. Use it at the top level of your module.'
);
return;
}
let u = t.id;
const o = t.hot._disposeCallback;
t.hot._disposeCallback = () => {
o == null || o(), s.delete(u);
};
const a = [
...(s.get(t.id) || []).filter((p) => p.name !== e),
{ name: e, component: r, metadata: n }
];
s.set(t.id, a);
};
function _(t, e) {
v(
...arguments
);
}
let i = null;
const w = () => f(g);
async function y() {
const t = await w();
i = t, t.onMessage("request-initial-data", () => {
const e = l();
t.send("registry-updated", e);
});
}
y();
export {
g as P,
i as c,
E as g,
_ as r
};