11import loopProtect from 'loop-protect' ;
22import { Hook , Decode , Encode } from 'console-feed' ;
3+ import StackTrace from 'stacktrace-js' ;
34import evaluateExpression from './evaluateExpression' ;
45
56// should postMessage user the dispatcher? does the parent window need to
@@ -14,6 +15,10 @@ const htmlOffset = 12;
1415// const editorOrigin = 'http://localhost:8000';
1516// so this works??
1617// maybe i have to pass the parent window??? idk man
18+ // console.log(window.location);
19+ window . objectUrls [ window . location . href ] = '/index.html' ;
20+ const blobPath = window . location . href . split ( '/' ) . pop ( ) ;
21+ window . objectPaths [ blobPath ] = 'index.html' ;
1722
1823window . loopProtect = loopProtect ;
1924
@@ -83,8 +88,7 @@ window.onerror = function onError(msg, source, lineNumber, columnNo, error) {
8388 data = error . stack . replaceAll ( url , window . objectUrls [ url ] ) ;
8489 }
8590 } ) ;
86- if ( data . match ( 'about:srcdoc' ) ) {
87- data = data . replaceAll ( 'about:srcdoc' , 'index.html' ) ;
91+ if ( data . match ( 'index.html' ) ) {
8892 data = data . replace ( `:${ lineNumber } :` , `:${ lineNumber - htmlOffset } :` ) ;
8993 }
9094 editor . postMessage (
@@ -109,31 +113,38 @@ window.onerror = function onError(msg, source, lineNumber, columnNo, error) {
109113// catch rejected promises
110114window . onunhandledrejection = function onUnhandledRejection ( event ) {
111115 if ( event . reason && event . reason . message && event . reason . stack ) {
112- const urls = Object . keys ( window . objectUrls ) ;
113- let data = event . reason . stack ;
114- urls . forEach ( ( url ) => {
115- if ( event . reason . stack . match ( url ) ) {
116- data = event . reason . stack . replaceAll ( url , window . objectUrls [ url ] ) ;
117- }
116+ StackTrace . fromError ( event . reason ) . then ( ( stackLines ) => {
117+ let data = `${ event . reason . name } : ${ event . reason . message } ` ;
118+ stackLines . forEach ( ( stackLine ) => {
119+ const { fileName, functionName, lineNumber, columnNumber } = stackLine ;
120+ const resolvedFileName = window . objectUrls [ fileName ] || fileName ;
121+ const resolvedFuncName = functionName || '(anonymous function)' ;
122+ let line ;
123+ if ( lineNumber && columnNumber ) {
124+ line = `\n at ${ resolvedFuncName } (${ resolvedFileName } :${ lineNumber } :${ columnNumber } )` ;
125+ } else {
126+ line = `\n at ${ resolvedFuncName } (${ resolvedFileName } )` ;
127+ }
128+ data = data . concat ( line ) ;
129+ } ) ;
130+ editor . postMessage (
131+ {
132+ source : 'sketch' ,
133+ messages : [
134+ {
135+ log : [
136+ {
137+ method : 'error' ,
138+ data : [ data ] ,
139+ id : Date . now ( ) . toString ( )
140+ }
141+ ]
142+ }
143+ ]
144+ } ,
145+ editorOrigin
146+ ) ;
118147 } ) ;
119- data = data . replaceAll ( 'about:srcdoc' , 'index.html' ) ;
120- editor . postMessage (
121- {
122- source : 'sketch' ,
123- messages : [
124- {
125- log : [
126- {
127- method : 'error' ,
128- data : [ data ] ,
129- id : Date . now ( ) . toString ( )
130- }
131- ]
132- }
133- ]
134- } ,
135- editorOrigin
136- ) ;
137148 }
138149} ;
139150
0 commit comments