@@ -154,41 +154,73 @@ function collectStackTrace(
154154 // We mirror how V8 serializes stack frames and how we later parse them.
155155 for ( let i = framesToSkip ; i < structuredStackTrace . length ; i ++ ) {
156156 const callSite = structuredStackTrace [ i ] ;
157- let name = callSite . getFunctionName ( ) || '<anonymous>' ;
157+ let name =
158+ // $FlowFixMe[method-unbinding]
159+ typeof callSite . getFunctionName === 'function'
160+ ? callSite . getFunctionName ( ) || '<anonymous>'
161+ : '' ;
158162 if (
159163 name . includes ( 'react_stack_bottom_frame' ) ||
160164 name . includes ( 'react-stack-bottom-frame' )
161165 ) {
162166 // Skip everything after the bottom frame since it'll be internals.
163167 break ;
164- } else if ( callSite . isNative ( ) ) {
165- // $FlowFixMe[prop-missing]
166- const isAsync = callSite . isAsync ( ) ;
168+ // $FlowFixMe[method-unbinding]
169+ } else if ( typeof callSite . isNative === 'function' && callSite . isNative ( ) ) {
170+ const isAsync =
171+ // $FlowFixMe[prop-missing]
172+ // $FlowFixMe[incompatible-use]
173+ typeof callSite . isAsync === 'function' && callSite . isAsync ( ) ;
167174 result . push ( [ name , '' , 0 , 0 , 0 , 0 , isAsync ] ) ;
168175 } else {
169176 // We encode complex function calls as if they're part of the function
170177 // name since we cannot simulate the complex ones and they look the same
171178 // as function names in UIs on the client as well as stacks.
172- if ( callSite . isConstructor ( ) ) {
179+ if (
180+ // $FlowFixMe[method-unbinding]
181+ typeof callSite . isConstructor === 'function' &&
182+ callSite . isConstructor ( )
183+ ) {
173184 name = 'new ' + name ;
174- } else if ( ! callSite . isToplevel ( ) ) {
185+ } else if (
186+ // $FlowFixMe[method-unbinding]
187+ typeof callSite . isToplevel === 'function' &&
188+ ! callSite . isToplevel ( )
189+ ) {
175190 name = getMethodCallName ( callSite ) ;
176191 }
177192 if ( name === '<anonymous>' ) {
178193 name = '' ;
179194 }
180- let filename = callSite . getScriptNameOrSourceURL ( ) || '<anonymous>' ;
195+ let filename =
196+ // $FlowFixMe[method-unbinding]
197+ typeof callSite . getScriptNameOrSourceURL === 'function'
198+ ? callSite . getScriptNameOrSourceURL ( ) || '<anonymous>'
199+ : '' ;
181200 if ( filename === '<anonymous>' ) {
182201 filename = '' ;
183- if ( callSite . isEval ( ) ) {
184- const origin = callSite . getEvalOrigin ( ) ;
202+ // $FlowFixMe[method-unbinding]
203+ if ( typeof callSite . isEval === 'function' && callSite . isEval ( ) ) {
204+ const origin =
205+ // $FlowFixMe[method-unbinding]
206+ typeof callSite . getEvalOrigin === 'function'
207+ ? callSite . getEvalOrigin ( )
208+ : null ;
185209 if ( origin ) {
186210 filename = origin . toString ( ) + ', <anonymous>' ;
187211 }
188212 }
189213 }
190- const line = callSite . getLineNumber ( ) || 0 ;
191- const col = callSite . getColumnNumber ( ) || 0 ;
214+ const line =
215+ // $FlowFixMe[method-unbinding]
216+ ( typeof callSite . getLineNumber === 'function' &&
217+ callSite . getLineNumber ( ) ) ||
218+ 0 ;
219+ const col =
220+ // $FlowFixMe[method-unbinding]
221+ ( typeof callSite . getColumnNumber === 'function' &&
222+ callSite . getColumnNumber ( ) ) ||
223+ 0 ;
192224 const enclosingLine : number =
193225 // $FlowFixMe[prop-missing]
194226 typeof callSite . getEnclosingLineNumber === 'function'
@@ -199,8 +231,10 @@ function collectStackTrace(
199231 typeof callSite . getEnclosingColumnNumber === 'function'
200232 ? ( callSite : any ) . getEnclosingColumnNumber ( ) || 0
201233 : 0 ;
202- // $FlowFixMe[prop-missing]
203- const isAsync = callSite . isAsync ( ) ;
234+ const isAsync =
235+ // $FlowFixMe[prop-missing]
236+ // $FlowFixMe[incompatible-use]
237+ typeof callSite . isAsync === 'function' && callSite . isAsync ( ) ;
204238 result . push ( [
205239 name ,
206240 filename ,
0 commit comments