bippy
Version:
hack into react internals
19 lines • 15.1 kB
JavaScript
/**
* @license bippy
*
* Copyright (c) Aiden Bai
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
import{i as e,r as t}from"./rdt-hook.js";import{getDisplayName as n,traverseFiber as r}from"./core.js";const i=/^[a-zA-Z][a-zA-Z\d+\-.]*:/,a=[`rsc://`,`file:///`,`webpack-internal://`,`webpack://`,`node:`,`turbopack://`,`metro://`,`/app-pages-browser/`,`/(app-pages-browser)/`],o=[`rsc://`,`about://React/`],s=[`<anonymous>`,`eval`,``],c=/\.(jsx|tsx|ts|js)$/,l=/(\.min|bundle|chunk|vendor|vendors|runtime|polyfill|polyfills)\.(js|mjs|cjs)$|(chunk|bundle|vendor|vendors|runtime|polyfill|polyfills|framework|app|main|index)[-_.][A-Za-z0-9_-]{4,}\.(js|mjs|cjs)$|[\da-f]{8,}\.(js|mjs|cjs)$|[-_.][\da-f]{20,}\.(js|mjs|cjs)$|\/dist\/|\/build\/|\/.next\/|\/out\/|\/node_modules\/|\.webpack\.|\.vite\.|\.turbopack\./i,u=/^\?[\w~.-]+(?:=[^&#]*)?(?:&[\w~.-]+(?:=[^&#]*)?)*$/,d=/\(at [^)]+\)$/,f=[`react_stack_bottom_frame`,`react-stack-bottom-frame`],ee=/(^|@)\S+:\d+/,p=/^\s*at .*(\S+:\d+|\(native\))/m,te=/^(eval@)?(\[native code\])?$/,m=(e,t)=>{if(t?.includeInElement!==!1){let n=e.split(`
`),r=[];for(let e of n)if(/^\s*at\s+/.test(e)){let t=_(e,void 0)[0];t&&r.push(t)}else if(/^\s*in\s+/.test(e)){let t=e.replace(/^\s*in\s+/,``).replace(/\s*\(at .*\)$/,``);r.push({functionName:t,source:e})}else if(e.match(ee)){let t=v(e,void 0)[0];t&&r.push(t)}return g(r,t)}return e.match(p)?_(e,t):v(e,t)},h=e=>{if(!e.includes(`:`))return[e,void 0,void 0];let t=e.startsWith(`(`)&&/:\d+\)$/.test(e)?e.slice(1,-1):e,n=/(.+?)(?::(\d+))?(?::(\d+))?$/.exec(t);return n?[n[1],n[2]||void 0,n[3]||void 0]:[t,void 0,void 0]},g=(e,t)=>t&&t.slice!=null?Array.isArray(t.slice)?e.slice(t.slice[0],t.slice[1]):e.slice(0,t.slice):e,_=(e,t)=>g(e.split(`
`).filter(e=>!!e.match(p)),t).map(e=>{let t=e;t.includes(`(eval `)&&(t=t.replace(/eval code/g,`eval`).replace(/(\(eval at [^()]*)|(,.*$)/g,``));let n=t.replace(/^\s+/,``).replace(/\(eval code/g,`(`).replace(/^.*?\s+/,``),r=n.match(/ (\(.+\)$)/);n=r?n.replace(r[0],``):n;let i=h(r?r[1]:n);return{functionName:r&&n||void 0,fileName:[`eval`,`<anonymous>`].includes(i[0])?void 0:i[0],lineNumber:i[1]?+i[1]:void 0,columnNumber:i[2]?+i[2]:void 0,source:t}}),v=(e,t)=>g(e.split(`
`).filter(e=>!e.match(te)),t).map(e=>{let t=e;if(t.includes(` > eval`)&&(t=t.replace(/ line (\d+)(?: > eval line \d+)* > eval:\d+:\d+/g,`:$1`)),!t.includes(`@`)&&!t.includes(`:`))return{functionName:t};{let e=/(([^\n\r"\u2028\u2029]*".[^\n\r"\u2028\u2029]*"[^\n\r@\u2028\u2029]*(?:@[^\n\r"\u2028\u2029]*"[^\n\r@\u2028\u2029]*)*(?:[\n\r\u2028\u2029][^@]*)?)?[^@]*)@/,n=t.match(e),r=n&&n[1]?n[1]:void 0,i=h(t.replace(e,``));return{functionName:r,fileName:i[0],lineNumber:i[1]?+i[1]:void 0,columnNumber:i[2]?+i[2]:void 0,source:t}}}),y=new WeakMap,ne=e=>f.some(t=>e.includes(t)),re=e=>{let t=e.getFunctionName?.()??``;if(t)return t;let n=e.getTypeName?.()??``,r=e.getMethodName?.()??``;return n&&r?`${n}.${r}`:r},ie=e=>{let t=[];for(let n=1;n<e.length;n++){let r=e[n],i=re(r);if(ne(i))return{frames:t,isTrusted:!0};if(r.isNative?.()){t.push({functionName:i||void 0});continue}let a=r.getScriptNameOrSourceURL?.()??``;!a&&r.isEval?.()&&(a=r.getEvalOrigin?.()??``),t.push({functionName:i&&i!==`<anonymous>`?i:void 0,fileName:a&&a!==`<anonymous>`?a:void 0,lineNumber:r.getLineNumber?.()??void 0,columnNumber:r.getColumnNumber?.()??void 0,enclosingLineNumber:r.getEnclosingLineNumber?.()??void 0,enclosingColumnNumber:r.getEnclosingColumnNumber?.()??void 0,source:` at ${r.toString()}`})}return{frames:t,isTrusted:!1}},ae=e=>{let t=-1;for(let n of f)if(t=e.indexOf(n),t!==-1)break;return{frames:m(t===-1?e:e.slice(0,e.lastIndexOf(`
`,t))).slice(1),isTrusted:t!==-1}},b=e=>{let t=y.get(e);if(t)return t;let n=null,r=(e,t)=>{n=ie(t);let r=`${e.name||`Error`}: ${e.message||``}`;for(let e of t)r+=`\n at ${e.toString()}`;return r},i=Error.prepareStackTrace;Error.prepareStackTrace=r;let a;try{a=String(e.stack)}finally{Error.prepareStackTrace=i}let o=n??ae(a);return y.set(e,o),o};var oe=44,x=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/`,se=new Uint8Array(64),S=new Uint8Array(128);for(let e=0;e<x.length;e++){let t=x.charCodeAt(e);se[e]=t,S[t]=e}function C(e,t){let n=0,r=0,i=0;do i=S[e.next()],n|=(i&31)<<r,r+=5;while(i&32);let a=n&1;return n>>>=1,a&&(n=-2147483648|-n),t+n}function w(e,t){return e.pos>=t?!1:e.peek()!==oe}var ce=class{constructor(e){this.pos=0,this.buffer=e}next(){return this.buffer.charCodeAt(this.pos++)}peek(){return this.buffer.charCodeAt(this.pos)}indexOf(e){let{buffer:t,pos:n}=this,r=t.indexOf(e,n);return r===-1?t.length:r}};function T(e){let{length:t}=e,n=new ce(e),r=[],i=0,a=0,o=0,s=0,c=0;do{let e=n.indexOf(`;`),t=[],l=!0,u=0;for(i=0;n.pos<e;){let r;i=C(n,i),i<u&&(l=!1),u=i,w(n,e)?(a=C(n,a),o=C(n,o),s=C(n,s),w(n,e)?(c=C(n,c),r=[i,a,o,s,c]):r=[i,a,o,s]):r=[i],t.push(r),n.pos++}l||E(t),r.push(t),n.pos=e+1}while(n.pos<=t);return r}function E(e){e.sort(D)}function D(e,t){return e[0]-t[0]}const O=/^[a-zA-Z][a-zA-Z\d+\-.]*:/,k=/^data:application\/json[^,]+base64,/,le=/(?:\/\/[@#][ \t]+sourceMappingURL=([^\s'"]+?)[ \t]*$)|(?:\/\*[@#][ \t]+sourceMappingURL=([^*]+?)[ \t]*(?:\*\/)[ \t]*$)/,A=new Map,j=new Map,M=(e,t,n,r,i)=>{if(n<0||n>=e.length)return null;let a=e[n];if(!a||a.length===0)return null;let o=null,s=0,c=a.length-1;for(;s<=c;){let e=s+c>>1;a[e][0]<=r?(o=a[e],s=e+1):c=e-1}if(!o||o.length<4)return null;let[,l,u,d]=o;if(l===void 0||u===void 0||d===void 0)return null;let f=t[l];return f?{columnNumber:d,fileName:f,lineNumber:u+1,isIgnoreListed:i?.has(l)??!1}:null},N=(e,t,n)=>{if(e.sections){let r=t-1,i=null;for(let t of e.sections)if(r>t.offset.line||r===t.offset.line&&n>=t.offset.column)i=t;else break;if(!i)return null;let a=r-i.offset.line,o=r===i.offset.line?n-i.offset.column:n;return M(i.map.mappings,i.map.sources,a,o,i.map.ignoredSourceIndices)}return M(e.mappings,e.sources,t-1,n,e.ignoredSourceIndices)},ue=(e,t)=>{let n,r=t.length;for(;r>0&&!n;){let e=t.lastIndexOf(`
`,r-1)+1,i=t.slice(e,r).match(le);i&&(n=i[1]||i[2]),r=e-1}if(!n)return null;let i=O.test(n);if(!(k.test(n)||i||n.startsWith(`/`))){let t=e.split(`/`);t[t.length-1]=n,n=t.join(`/`)}return n},P=e=>{let t=e.ignoreList??e.x_google_ignoreList;return Array.isArray(t)&&t.length>0?new Set(t):void 0},de=e=>({file:e.file,ignoredSourceIndices:P(e),mappings:T(e.mappings),names:e.names,sourceRoot:e.sourceRoot,sources:e.sources,sourcesContent:e.sourcesContent,version:3}),fe=e=>{let t=e.sections.map(({map:e,offset:t})=>({map:{...e,ignoredSourceIndices:P(e),mappings:T(e.mappings)},offset:t})),n=new Set;for(let e of t)for(let t of e.map.sources)n.add(t);return{file:e.file,mappings:[],names:[],sections:t,sourceRoot:void 0,sources:Array.from(n),sourcesContent:void 0,version:3}},F=e=>{if(!e)return!1;let t=e.trim();if(!t)return!1;let n=t.match(O);if(!n)return!0;let r=n[0].toLowerCase();return r===`http:`||r===`https:`},pe=async(e,t=fetch)=>{if(!F(e))return null;let n=await t(e);if(!n.ok)return null;let r=await n.text();if(!r)return null;let i=ue(e,r);if(!i||!F(i)&&!k.test(i))return null;let a=await t(i);if(!a.ok)return null;try{let e=await a.json();return`sections`in e?fe(e):de(e)}catch{return null}},I=async(e,t=!0,n)=>{if(t&&A.has(e))return A.get(e)??null;let r=t?j.get(e):void 0;if(r)return(await r).sourceMap;let i=pe(e,n).then(e=>({sourceMap:e,isTransientFailure:!1}),()=>({sourceMap:null,isTransientFailure:!0}));t&&j.set(e,i);let{sourceMap:a,isTransientFailure:o}=await i;return t&&(j.delete(e),o||A.set(e,a)),a},L=async(e,t=!0,n)=>await Promise.all(e.map(async e=>{if(!e.fileName)return e;let r=await I(e.fileName,t,n);if(!r||typeof e.lineNumber!=`number`||typeof e.columnNumber!=`number`)return e;let i=N(r,e.lineNumber,e.columnNumber);return i?{...e,source:i.fileName&&e.source?e.source.replace(e.fileName,i.fileName):e.source,fileName:i.fileName,lineNumber:i.lineNumber,columnNumber:i.columnNumber,isIgnoreListed:i.isIgnoreListed,isSymbolicated:!0}:e})),R=e=>e._debugStack instanceof Error&&typeof e._debugStack?.stack==`string`,z=e=>typeof e.tag==`number`,B=e=>e._debugOwner,V=e=>{let t=null;if(r(e,n=>{if(n===e)return!1;let r=n._debugOwner;return(r===e||e.alternate!==null&&r===e.alternate)&&n._debugStack instanceof Error?(t=n._debugStack,!0):!1}),!t)return null;let{frames:n,isTrusted:i}=b(t);if(!i)return null;for(let e=n.length-1;e>=0;e--){let t=n[e];if(t.fileName)return{...t,lineNumber:t.enclosingLineNumber||t.lineNumber,columnNumber:t.enclosingColumnNumber||t.columnNumber}}return null},me=()=>{let n=e();for(let e of[...Array.from(t),...Array.from(n.renderers.values())]){let t=e.currentDispatcherRef;if(t&&typeof t==`object`)return`H`in t?t.H:t.current}return null},H=e=>{for(let n of t){let t=n.currentDispatcherRef;t&&typeof t==`object`&&(`H`in t?t.H=e:t.current=e)}},U=e=>`\n in ${e}`,he=(e,t)=>{let n=U(e);return t&&(n+=` (at ${t})`),n};let W=!1;const G=new WeakMap,K=(e,t)=>{if(!e||W)return``;let r=G.get(e);if(r!==void 0)return r;let i=Error.prepareStackTrace;Error.prepareStackTrace=void 0,W=!0;let a=me();H(null);let o=console.error,s=console.warn;console.error=()=>{},console.warn=()=>{};try{let r={DetermineComponentFrameRoot(){let n;try{if(t){let t=function(){throw Error()};if(Object.defineProperty(t.prototype,`props`,{set:function(){throw Error()}}),typeof Reflect==`object`&&Reflect.construct){try{Reflect.construct(t,[])}catch(e){n=e}Reflect.construct(e,[],t)}else{try{t.call()}catch(e){n=e}e.call(t.prototype)}}else{try{throw Error()}catch(e){n=e}let t=e();t&&typeof t.catch==`function`&&t.catch(()=>{})}}catch(e){if(e instanceof Error&&n instanceof Error&&typeof e.stack==`string`)return[e.stack,n.stack]}return[null,null]}};r.DetermineComponentFrameRoot.displayName=`DetermineComponentFrameRoot`,Object.getOwnPropertyDescriptor(r.DetermineComponentFrameRoot,`name`)?.configurable&&Object.defineProperty(r.DetermineComponentFrameRoot,`name`,{value:`DetermineComponentFrameRoot`});let[i,a]=r.DetermineComponentFrameRoot();if(i&&a){let t=i.split(`
`),r=a.split(`
`),o=0,s=0;for(;o<t.length&&!t[o].includes(`DetermineComponentFrameRoot`);)o++;for(;s<r.length&&!r[s].includes(`DetermineComponentFrameRoot`);)s++;if(o===t.length||s===r.length)for(o=t.length-1,s=r.length-1;o>=1&&s>=0&&t[o]!==r[s];)s--;for(;o>=1&&s>=0;o--,s--)if(t[o]!==r[s]){if(o!==1||s!==1)do if(o--,s--,s<0||t[o]!==r[s]){let r=`\n${t[o].replace(` at new `,` at `)}`,i=n(e);return i&&r.includes(`<anonymous>`)&&(r=r.replace(`<anonymous>`,i)),G.set(e,r),r}while(o>=1&&s>=0);break}}}finally{W=!1,Error.prepareStackTrace=i,H(a),console.error=o,console.warn=s}let c=e?n(e):``,l=c?U(c):``;return G.set(e,l),l},ge=(e,t)=>{let n=e.tag,r=``;switch(n){case 28:r=U(`Activity`);break;case 1:r=K(e.type,!0);break;case 11:r=K(e.type.render,!1);break;case 0:case 15:r=K(e.type,!1);break;case 5:case 26:case 27:r=U(e.type);break;case 16:r=U(`Lazy`);break;case 13:r=e.child!==t&&t!==null?U(`Suspense Fallback`):U(`Suspense`);break;case 19:r=U(`SuspenseList`);break;case 30:r=U(`ViewTransition`);break;default:return``}return r},_e=e=>{try{let t=``,n=e,r=null;do{t+=ge(n,r);let e=n._debugInfo;if(e&&Array.isArray(e))for(let n=e.length-1;n>=0;n--){let r=e[n];typeof r.name==`string`&&(t+=he(r.name,r.env))}r=n,n=n.return}while(n);return t}catch(e){return e instanceof Error?`\nError generating stack: ${e.message}\n${e.stack}`:``}},q=e=>{let t=Error.prepareStackTrace;Error.prepareStackTrace=void 0;let n=e;if(!n)return``;Error.prepareStackTrace=t,n.startsWith(`Error: react-stack-top-frame
`)&&(n=n.slice(29));let r=n.indexOf(`
`);r!==-1&&(n=n.slice(r+1));let i=Math.max(n.indexOf(`react_stack_bottom_frame`),n.indexOf(`react-stack-bottom-frame`));if(i!==-1&&(i=n.lastIndexOf(`
`,i)),i!==-1)n=n.slice(0,i);else return``;return n},ve=e=>!!(e.functionName&&e.fileName&&J(e.fileName)),ye=(e,t)=>e.fileName===t.fileName&&e.lineNumber===t.lineNumber&&e.columnNumber===t.columnNumber,be=e=>{let t=new Map;for(let n of e)for(let e of n.stackFrames){if(!ve(e))continue;let n=e.functionName,r=t.get(n)??[];r.some(t=>ye(t,e))||(r.push(e),t.set(n,r))}return t},xe=(e,t,n)=>{if(!e.functionName)return{...e,isServer:!0};let r=t.get(e.functionName);if(!r||r.length===0)return{...e,isServer:!0};let i=n.get(e.functionName)??0,a=r[i%r.length];return n.set(e.functionName,i+1),{...e,isServer:!0,fileName:a.fileName,lineNumber:a.lineNumber,columnNumber:a.columnNumber,source:e.source?.replace(`(at Server)`,`(${a.fileName}:${a.lineNumber}:${a.columnNumber})`)}},J=e=>o.some(t=>e.startsWith(t)),Se=e=>!e.isServer&&e.fileName&&J(e.fileName)?{...e,isServer:!0}:e,Ce=e=>{let t=[],n=e;for(;n;)if(z(n)){let e=n;if(n=B(e),n&&R(e)){let{frames:n,isTrusted:r}=b(e._debugStack);if(r)for(let e of n)t.push(Se(e))}}else{let e=n;if(n=e.owner,n&&e.debugStack instanceof Error)for(let n of b(e.debugStack).frames)t.push({...n,isServer:!0})}return t},we=e=>{let t=[];return r(e,e=>{if(!R(e))return;let r=typeof e.type==`string`?e.type:n(e.type)||`<anonymous>`;t.push({componentName:r,stackFrames:m(q(e._debugStack?.stack))})},!0),t},Y=async(e,t=!0,n)=>{let r=we(e),i=m(_e(e)),a=be(r),o=new Map;return L(i.map(e=>(e.source?.includes(`(at Server)`)??!1)||e.source!=null&&d.test(e.source)?xe(e,a,o):e).filter((e,t,n)=>{if(t===0)return!0;let r=n[t-1];return e.functionName!==r.functionName}),t,n)},Te=e=>!!e.fileName&&!e.isIgnoreListed,X=async(e,t=!0,r)=>{let i=Ce(e);if(i.length>0){let a=V(e)??{};a.functionName=n(e.type)??a.functionName;let o=await L([a,...i],t,r);if(o.some((e,t)=>t>0&&Te(e)))return o}return Y(e,t,r)},Ee=e=>{let t=e._debugSource;return t?typeof t==`object`&&!!t&&`fileName`in t&&typeof t.fileName==`string`&&`lineNumber`in t&&typeof t.lineNumber==`number`:!1},Z=e=>e.fileName?{fileName:e.fileName,lineNumber:e.lineNumber,columnNumber:e.columnNumber,functionName:e.functionName}:null,De=e=>{if(!R(e))return null;let{frames:t,isTrusted:n}=b(e._debugStack);if(!n)return null;for(let e of t)if(e.fileName)return e;return null},Oe=async(e,t=!0,n)=>{if(Ee(e))return e._debugSource||null;let r=De(e)??V(e);if(r){let[e]=await L([r],t,n),i=Z(e);if(i)return i}let i=await Y(e,t,n);for(let e of i)if(e.fileName)return Z(e);return null},Q=e=>e.split(`/`).filter(Boolean).length,ke=e=>e.split(`/`).filter(Boolean)[0]??null,Ae=e=>{let t=e.indexOf(`/`,1);if(t===-1||Q(e.slice(0,t))!==1)return e;let n=e.slice(t);if(!c.test(n)||Q(n)<2)return e;let r=ke(n);return!r||r.startsWith(`@`)||r.length>4?e:n},$=e=>{if(!e||s.some(t=>t===e))return``;let t=e,n=t.startsWith(`http://`)||t.startsWith(`https://`);if(n)try{t=new URL(t).pathname}catch{}if(n&&(t=Ae(t)),t.startsWith(`about://React/`)){let e=t.slice(14),n=e.indexOf(`/`),r=e.indexOf(`:`);t=n!==-1&&(r===-1||n<r)?e.slice(n+1):e}let r=!0;for(;r;){r=!1;for(let e of a)if(t.startsWith(e)){t=t.slice(e.length),e===`file:///`&&(t=`/${t.replace(/^\/+/,``)}`),r=!0;break}}if(i.test(t)){let e=t.match(i);e&&(t=t.slice(e[0].length))}if(t.startsWith(`//`)){let e=t.indexOf(`/`,2);t=e===-1?``:t.slice(e)}let o=t.indexOf(`?`);if(o!==-1){let e=t.slice(o);u.test(e)&&(t=t.slice(0,o))}return t},je=e=>{let t=$(e);return!(!t||!c.test(t)||l.test(t))};export{X as a,N as c,m as d,q as i,I as l,je as n,Y as o,$ as r,R as s,Oe as t,L as u};