@rozenite/plugin-bridge
Advanced tools
| export declare class UnsupportedPlatformError extends Error { | ||
| constructor(platform: string); | ||
| } | ||
| //# sourceMappingURL=errors.d.ts.map |
| {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,wBAAyB,SAAQ,KAAK;gBACrC,QAAQ,EAAE,MAAM;CAI7B"} |
| export declare const isWeb: () => boolean; | ||
| //# sourceMappingURL=web.d.ts.map |
| {"version":3,"file":"web.d.ts","sourceRoot":"","sources":["../src/web.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,KAAK,QAAO,OAKxB,CAAC"} |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"cdp-channel.d.ts","sourceRoot":"","sources":["../../../src/channel/device/cdp-channel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;AAE5D,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACxC,SAAS,EAAE;QACT,gBAAgB,EAAE,CAAC,QAAQ,EAAE,kBAAkB,KAAK,IAAI,CAAC;QACzD,mBAAmB,EAAE,CAAC,QAAQ,EAAE,kBAAkB,KAAK,IAAI,CAAC;KAC7D,CAAC;IACF,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB,CAAC;AA0GF,eAAO,MAAM,aAAa,QAAa,OAAO,CAAC,OAAO,CAErD,CAAC"} | ||
| {"version":3,"file":"cdp-channel.d.ts","sourceRoot":"","sources":["../../../src/channel/device/cdp-channel.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;AAE5D,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACxC,SAAS,EAAE;QACT,gBAAgB,EAAE,CAAC,QAAQ,EAAE,kBAAkB,KAAK,IAAI,CAAC;QACzD,mBAAmB,EAAE,CAAC,QAAQ,EAAE,kBAAkB,KAAK,IAAI,CAAC;KAC7D,CAAC;IACF,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB,CAAC;AA0GF,eAAO,MAAM,aAAa,QAAa,OAAO,CAAC,OAAO,CAMrD,CAAC"} |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/channel/factory.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAIlC,eAAO,MAAM,UAAU,QAAa,OAAO,CAAC,OAAO,CAgBlD,CAAC"} | ||
| {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/channel/factory.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAIlC,eAAO,MAAM,UAAU,QAAa,OAAO,CAAC,OAAO,CAmBlD,CAAC"} |
+1
-1
@@ -1,1 +0,1 @@ | ||
| "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const d=require("react"),_="rozenite",v=()=>{const e=global.__FUSEBOX_REACT_DEVTOOLS_DISPATCHER__,n=e.BINDING_NAME;return global[n]!=null?e.initializeDomain(_):null},T=()=>new Promise(e=>{const n=t=>{t.name===_&&(global.__FUSEBOX_REACT_DEVTOOLS_DISPATCHER__.onDomainInitialization.removeEventListener(n),setTimeout(()=>e(t)))};global.__FUSEBOX_REACT_DEVTOOLS_DISPATCHER__.onDomainInitialization.addEventListener(n)}),f=async()=>{const e=new Set;let n=v();n||(n=await T());const t=()=>{if(!n)throw new Error("Domain not initialized");return n},i=s=>{s.name===_&&(n&&e.forEach(o=>{n.onMessage.removeEventListener(o)}),n=s,e.forEach(o=>{s.onMessage.addEventListener(o)}))};return global.__FUSEBOX_REACT_DEVTOOLS_DISPATCHER__.onDomainInitialization.addEventListener(i),{send:s=>{t().sendMessage(s)},onMessage(s){const o=a=>{setTimeout(()=>{s(a)})};return e.add(o),t().onMessage.addEventListener(o),{remove:()=>{e.delete(o),t().onMessage.removeEventListener(o)}}},close:()=>{global.__FUSEBOX_REACT_DEVTOOLS_DISPATCHER__.onDomainInitialization.removeEventListener(i)}}},m=async()=>f(),w=async()=>{const e=new Set,n=t=>{e.forEach(i=>{i(t.data)})};return window.addEventListener("message",n),{send:t=>{window.parent.postMessage({type:"rozenite-message",payload:t},"*")},onMessage:t=>(e.add(t),{remove:()=>{e.delete(t)}}),close:()=>{e.clear(),window.removeEventListener("message",n)}}};let c=null;const y=async()=>c||(c="__ROZENITE_PANEL__"in window?w():m(),c.then(n=>{c=n}),c),C=e=>typeof e!="object"||e===null||!("type"in e)||!("payload"in e)||!("pluginId"in e)?null:e,E=new Map,S=async e=>{const n=await y(),t=new Map,i=async a=>{const r=C(a);if(!r||r.pluginId!==e)return;const l=t.get(r.type);l!=null&&l.forEach(D=>{D(r.payload)})},u=(a,r)=>{n.send({pluginId:e,type:a,payload:r})},s=n.onMessage(i);return{send:u,onMessage:(a,r)=>{const l=t.get(a)??new Set;return l.add(r),t.set(a,l),{remove:()=>{l.delete(r)}}},close:()=>{t.clear(),s.remove(),n.close()}}},g=async e=>{const n=E.get(e);if(n!=null)return n;const t=S(e);E.set(e,t);const i=await t;return E.set(e,i),i},L=({pluginId:e})=>{const[n,t]=d.useState(null),[i,u]=d.useState(null);if(d.useEffect(()=>{let s=!0,o=null;const a=async()=>{try{o=await g(e),s&&t(o)}catch(l){console.error("Error setting up client",l),s&&u(l)}},r=async()=>{try{o!=null&&o.close()}catch{}};return a(),()=>{s=!1,r()}},[e]),i!=null)throw i;return n};exports.getRozeniteDevToolsClient=g;exports.useRozeniteDevToolsClient=L; | ||
| "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const d=require("react"),w=()=>typeof window<"u"&&typeof window.document<"u";class _ extends Error{constructor(t){super(`Unsupported platform: ${t}`),this.name="UnsupportedPlatformError"}}const f="rozenite",m=()=>{const e=global.__FUSEBOX_REACT_DEVTOOLS_DISPATCHER__,t=e.BINDING_NAME;return global[t]!=null?e.initializeDomain(f):null},D=()=>new Promise(e=>{const t=n=>{n.name===f&&(global.__FUSEBOX_REACT_DEVTOOLS_DISPATCHER__.onDomainInitialization.removeEventListener(t),setTimeout(()=>e(n)))};global.__FUSEBOX_REACT_DEVTOOLS_DISPATCHER__.onDomainInitialization.addEventListener(t)}),v=async()=>{const e=new Set;let t=m();t||(t=await D());const n=()=>{if(!t)throw new Error("Domain not initialized");return t},r=s=>{s.name===f&&(t&&e.forEach(o=>{t.onMessage.removeEventListener(o)}),t=s,e.forEach(o=>{s.onMessage.addEventListener(o)}))};return global.__FUSEBOX_REACT_DEVTOOLS_DISPATCHER__.onDomainInitialization.addEventListener(r),{send:s=>{n().sendMessage(s)},onMessage(s){const o=a=>{setTimeout(()=>{s(a)})};return e.add(o),n().onMessage.addEventListener(o),{remove:()=>{e.delete(o),n().onMessage.removeEventListener(o)}}},close:()=>{global.__FUSEBOX_REACT_DEVTOOLS_DISPATCHER__.onDomainInitialization.removeEventListener(r)}}},y=async()=>{if(w())throw new _("web");return v()},T=async()=>{const e=new Set,t=n=>{e.forEach(r=>{r(n.data)})};return window.addEventListener("message",t),{send:n=>{window.parent.postMessage({type:"rozenite-message",payload:n},"*")},onMessage:n=>(e.add(n),{remove:()=>{e.delete(n)}}),close:()=>{e.clear(),window.removeEventListener("message",t)}}};let u=null;const C=async()=>{if(u)return u;const t="__ROZENITE_PANEL__"in window?T():y();try{const n=await t;return u=n,n}catch(n){throw u=null,n}},h=e=>typeof e!="object"||e===null||!("type"in e)||!("payload"in e)||!("pluginId"in e)?null:e,E=new Map,S=async e=>{const t=await C(),n=new Map,r=async a=>{const i=h(a);if(!i||i.pluginId!==e)return;const l=n.get(i.type);l!=null&&l.forEach(p=>{p(i.payload)})},c=(a,i)=>{t.send({pluginId:e,type:a,payload:i})},s=t.onMessage(r);return{send:c,onMessage:(a,i)=>{const l=n.get(a)??new Set;return l.add(i),n.set(a,l),{remove:()=>{l.delete(i)}}},close:()=>{n.clear(),s.remove(),t.close()}}},g=async e=>{const t=E.get(e);if(t!=null)return t;const n=S(e);E.set(e,n);const r=await n;return E.set(e,r),r},L=({pluginId:e})=>{const[t,n]=d.useState(null),[r,c]=d.useState(null);if(d.useEffect(()=>{let s=!0,o=null;const a=async()=>{try{o=await g(e),s&&n(o)}catch(l){if(l instanceof _){console.warn(`[Rozenite, ${e}] Unsupported platform, skipping setup.`);return}console.error("Error setting up client",l),s&&c(l)}},i=async()=>{try{o!=null&&o.close()}catch{}};return a(),()=>{s=!1,i()}},[e]),r!=null)throw r;return t};exports.UnsupportedPlatformError=_;exports.getRozeniteDevToolsClient=g;exports.useRozeniteDevToolsClient=L; |
+1
-0
@@ -6,2 +6,3 @@ export { useRozeniteDevToolsClient } from './useRozeniteDevToolsClient'; | ||
| export { getRozeniteDevToolsClient } from './client'; | ||
| export { UnsupportedPlatformError } from './errors'; | ||
| //# sourceMappingURL=index.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,YAAY,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AACvD,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5C,YAAY,EAAE,gCAAgC,EAAE,MAAM,6BAA6B,CAAC;AACpF,OAAO,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAC"} | ||
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,YAAY,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AACvD,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5C,YAAY,EAAE,gCAAgC,EAAE,MAAM,6BAA6B,CAAC;AACpF,OAAO,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAC;AACrD,OAAO,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAC"} |
+96
-71
@@ -1,26 +0,32 @@ | ||
| import { useState as u, useEffect as D } from "react"; | ||
| const _ = "rozenite", f = () => { | ||
| const e = global.__FUSEBOX_REACT_DEVTOOLS_DISPATCHER__, n = e.BINDING_NAME; | ||
| return global[n] != null ? e.initializeDomain(_) : null; | ||
| }, m = () => new Promise((e) => { | ||
| const n = (t) => { | ||
| t.name === _ && (global.__FUSEBOX_REACT_DEVTOOLS_DISPATCHER__.onDomainInitialization.removeEventListener( | ||
| n | ||
| ), setTimeout(() => e(t))); | ||
| import { useState as _, useEffect as p } from "react"; | ||
| const w = () => typeof window < "u" && typeof window.document < "u"; | ||
| class f extends Error { | ||
| constructor(t) { | ||
| super(`Unsupported platform: ${t}`), this.name = "UnsupportedPlatformError"; | ||
| } | ||
| } | ||
| const E = "rozenite", m = () => { | ||
| const e = global.__FUSEBOX_REACT_DEVTOOLS_DISPATCHER__, t = e.BINDING_NAME; | ||
| return global[t] != null ? e.initializeDomain(E) : null; | ||
| }, D = () => new Promise((e) => { | ||
| const t = (n) => { | ||
| n.name === E && (global.__FUSEBOX_REACT_DEVTOOLS_DISPATCHER__.onDomainInitialization.removeEventListener( | ||
| t | ||
| ), setTimeout(() => e(n))); | ||
| }; | ||
| global.__FUSEBOX_REACT_DEVTOOLS_DISPATCHER__.onDomainInitialization.addEventListener( | ||
| n | ||
| t | ||
| ); | ||
| }), v = async () => { | ||
| const e = /* @__PURE__ */ new Set(); | ||
| let n = f(); | ||
| n || (n = await m()); | ||
| const t = () => { | ||
| if (!n) | ||
| let t = m(); | ||
| t || (t = await D()); | ||
| const n = () => { | ||
| if (!t) | ||
| throw new Error("Domain not initialized"); | ||
| return n; | ||
| }, i = (s) => { | ||
| s.name === _ && (n && e.forEach((o) => { | ||
| n.onMessage.removeEventListener(o); | ||
| }), n = s, e.forEach((o) => { | ||
| return t; | ||
| }, r = (s) => { | ||
| s.name === E && (t && e.forEach((o) => { | ||
| t.onMessage.removeEventListener(o); | ||
| }), t = s, e.forEach((o) => { | ||
| s.onMessage.addEventListener(o); | ||
@@ -30,6 +36,6 @@ })); | ||
| return global.__FUSEBOX_REACT_DEVTOOLS_DISPATCHER__.onDomainInitialization.addEventListener( | ||
| i | ||
| r | ||
| ), { | ||
| send: (s) => { | ||
| t().sendMessage(s); | ||
| n().sendMessage(s); | ||
| }, | ||
@@ -42,5 +48,5 @@ onMessage(s) { | ||
| }; | ||
| return e.add(o), t().onMessage.addEventListener(o), { | ||
| return e.add(o), n().onMessage.addEventListener(o), { | ||
| remove: () => { | ||
| e.delete(o), t().onMessage.removeEventListener(o); | ||
| e.delete(o), n().onMessage.removeEventListener(o); | ||
| } | ||
@@ -51,55 +57,67 @@ }; | ||
| global.__FUSEBOX_REACT_DEVTOOLS_DISPATCHER__.onDomainInitialization.removeEventListener( | ||
| i | ||
| r | ||
| ); | ||
| } | ||
| }; | ||
| }, w = async () => v(), T = async () => { | ||
| const e = /* @__PURE__ */ new Set(), n = (t) => { | ||
| e.forEach((i) => { | ||
| i(t.data); | ||
| }, y = async () => { | ||
| if (w()) | ||
| throw new f("web"); | ||
| return v(); | ||
| }, h = async () => { | ||
| const e = /* @__PURE__ */ new Set(), t = (n) => { | ||
| e.forEach((r) => { | ||
| r(n.data); | ||
| }); | ||
| }; | ||
| return window.addEventListener("message", n), { | ||
| send: (t) => { | ||
| return window.addEventListener("message", t), { | ||
| send: (n) => { | ||
| window.parent.postMessage( | ||
| { type: "rozenite-message", payload: t }, | ||
| { type: "rozenite-message", payload: n }, | ||
| "*" | ||
| ); | ||
| }, | ||
| onMessage: (t) => (e.add(t), { | ||
| onMessage: (n) => (e.add(n), { | ||
| remove: () => { | ||
| e.delete(t); | ||
| e.delete(n); | ||
| } | ||
| }), | ||
| close: () => { | ||
| e.clear(), window.removeEventListener("message", n); | ||
| e.clear(), window.removeEventListener("message", t); | ||
| } | ||
| }; | ||
| }; | ||
| let c = null; | ||
| const y = async () => c || (c = "__ROZENITE_PANEL__" in window ? T() : w(), c.then((n) => { | ||
| c = n; | ||
| }), c), C = (e) => typeof e != "object" || e === null || !("type" in e) || !("payload" in e) || !("pluginId" in e) ? null : e, d = /* @__PURE__ */ new Map(), L = async (e) => { | ||
| const n = await y(), t = /* @__PURE__ */ new Map(), i = async (a) => { | ||
| const r = C(a); | ||
| if (!r || r.pluginId !== e) | ||
| let d = null; | ||
| const T = async () => { | ||
| if (d) | ||
| return d; | ||
| const t = "__ROZENITE_PANEL__" in window ? h() : y(); | ||
| try { | ||
| const n = await t; | ||
| return d = n, n; | ||
| } catch (n) { | ||
| throw d = null, n; | ||
| } | ||
| }, C = (e) => typeof e != "object" || e === null || !("type" in e) || !("payload" in e) || !("pluginId" in e) ? null : e, u = /* @__PURE__ */ new Map(), L = async (e) => { | ||
| const t = await T(), n = /* @__PURE__ */ new Map(), r = async (a) => { | ||
| const i = C(a); | ||
| if (!i || i.pluginId !== e) | ||
| return; | ||
| const l = t.get(r.type); | ||
| const l = n.get(i.type); | ||
| l != null && l.forEach((g) => { | ||
| g(r.payload); | ||
| g(i.payload); | ||
| }); | ||
| }, E = (a, r) => { | ||
| n.send({ | ||
| }, c = (a, i) => { | ||
| t.send({ | ||
| pluginId: e, | ||
| type: a, | ||
| payload: r | ||
| payload: i | ||
| }); | ||
| }, s = n.onMessage(i); | ||
| }, s = t.onMessage(r); | ||
| return { | ||
| send: E, | ||
| onMessage: (a, r) => { | ||
| const l = t.get(a) ?? /* @__PURE__ */ new Set(); | ||
| return l.add(r), t.set(a, l), { | ||
| send: c, | ||
| onMessage: (a, i) => { | ||
| const l = n.get(a) ?? /* @__PURE__ */ new Set(); | ||
| return l.add(i), n.set(a, l), { | ||
| remove: () => { | ||
| l.delete(r); | ||
| l.delete(i); | ||
| } | ||
@@ -109,26 +127,32 @@ }; | ||
| close: () => { | ||
| t.clear(), s.remove(), n.close(); | ||
| n.clear(), s.remove(), t.close(); | ||
| } | ||
| }; | ||
| }, M = async (e) => { | ||
| const n = d.get(e); | ||
| if (n != null) | ||
| return n; | ||
| const t = L(e); | ||
| d.set(e, t); | ||
| const i = await t; | ||
| return d.set(e, i), i; | ||
| }, h = ({ | ||
| const t = u.get(e); | ||
| if (t != null) | ||
| return t; | ||
| const n = L(e); | ||
| u.set(e, n); | ||
| const r = await n; | ||
| return u.set(e, r), r; | ||
| }, O = ({ | ||
| pluginId: e | ||
| }) => { | ||
| const [n, t] = u(null), [i, E] = u(null); | ||
| if (D(() => { | ||
| const [t, n] = _(null), [r, c] = _(null); | ||
| if (p(() => { | ||
| let s = !0, o = null; | ||
| const a = async () => { | ||
| try { | ||
| o = await M(e), s && t(o); | ||
| o = await M(e), s && n(o); | ||
| } catch (l) { | ||
| console.error("Error setting up client", l), s && E(l); | ||
| if (l instanceof f) { | ||
| console.warn( | ||
| `[Rozenite, ${e}] Unsupported platform, skipping setup.` | ||
| ); | ||
| return; | ||
| } | ||
| console.error("Error setting up client", l), s && c(l); | ||
| } | ||
| }, r = async () => { | ||
| }, i = async () => { | ||
| try { | ||
@@ -140,11 +164,12 @@ o != null && o.close(); | ||
| return a(), () => { | ||
| s = !1, r(); | ||
| s = !1, i(); | ||
| }; | ||
| }, [e]), i != null) | ||
| throw i; | ||
| return n; | ||
| }, [e]), r != null) | ||
| throw r; | ||
| return t; | ||
| }; | ||
| export { | ||
| f as UnsupportedPlatformError, | ||
| M as getRozeniteDevToolsClient, | ||
| h as useRozeniteDevToolsClient | ||
| O as useRozeniteDevToolsClient | ||
| }; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"useRozeniteDevToolsClient.d.ts","sourceRoot":"","sources":["../src/useRozeniteDevToolsClient.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAA6B,MAAM,UAAU,CAAC;AAE7E,MAAM,MAAM,gCAAgC,CAC1C,SAAS,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IACjE;IACF,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,CAAC;AAGF,eAAO,MAAM,yBAAyB,GACpC,SAAS,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnE,eAEC,gCAAgC,CAAC,SAAS,CAAC,KAAG,sBAAsB,CAAC,SAAS,CAAC,GAAG,IA6CpF,CAAC"} | ||
| {"version":3,"file":"useRozeniteDevToolsClient.d.ts","sourceRoot":"","sources":["../src/useRozeniteDevToolsClient.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAA6B,MAAM,UAAU,CAAC;AAG7E,MAAM,MAAM,gCAAgC,CAC1C,SAAS,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IACjE;IACF,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,CAAC;AAGF,eAAO,MAAM,yBAAyB,GACpC,SAAS,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnE,eAEC,gCAAgC,CAAC,SAAS,CAAC,KAAG,sBAAsB,CAAC,SAAS,CAAC,GAAG,IAuDpF,CAAC"} |
+1
-1
| { | ||
| "name": "@rozenite/plugin-bridge", | ||
| "version": "1.0.0-alpha.10", | ||
| "version": "1.0.0-alpha.11", | ||
| "description": "Communication layer for React Native DevTools plugins across React Native and web environments", | ||
@@ -5,0 +5,0 @@ "type": "module", |
19882
8.35%27
17.39%236
15.69%