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.
2 lines (1 loc) • 1.58 kB
JavaScript
;const p=require("@rozenite/plugin-bridge"),o="rozenite-preview";function d(t){const e=new Map;return{set(n,r){return e.set(n,r),t("set",n,r),this},delete(n){const r=e.delete(n);return r&&t("delete",n),r},clear(){e.clear(),t("clear")},get(n){return e.get(n)},has(n){return e.has(n)},get size(){return e.size},[Symbol.iterator](){return e[Symbol.iterator]()},entries(){return e.entries()},keys(){return e.keys()},values(){return e.values()},forEach(n){e.forEach(n)}}}const i=d(()=>{var e;const t=l();(e=exports.client)==null||e.send("registry-updated",t)});function c(){return Array.from(i.values()).flat()}function l(){return c()}function f(t){var e;return((e=c().find(n=>n.name===t))==null?void 0:e.component)||null}const v=(t,e,n,r)=>{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(r!=null&&r.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 s=t.hot._disposeCallback;t.hot._disposeCallback=()=>{s==null||s(),i.delete(u)};const a=[...(i.get(t.id)||[]).filter(g=>g.name!==e),{name:e,component:n,metadata:r}];i.set(t.id,a)};function w(t,e){v(...arguments)}exports.client=null;const y=()=>p.getRozeniteDevToolsClient(o);async function P(){const t=await y();exports.client=t,t.onMessage("request-initial-data",()=>{const e=l();t.send("registry-updated",e)})}P();exports.PREVIEW_PLUGIN_ID=o;exports.getComponentByName=f;exports.registerPreview=w;