1
+ var sourcemap = require ( "source-map" ) ;
2
+ import * as path from "path" ;
3
+
1
4
export class IOSLogFilter implements Mobile . IPlatformLogFilter {
2
5
3
- constructor ( private $loggingLevels : Mobile . ILoggingLevels ) { }
6
+ constructor (
7
+ private $fs : IFileSystem ,
8
+ private $projectData : IProjectData ,
9
+ private $loggingLevels : Mobile . ILoggingLevels ) { }
4
10
5
11
public filterData ( data : string , logLevel : string , pid ?: string ) : string {
6
12
@@ -23,12 +29,40 @@ export class IOSLogFilter implements Mobile.IPlatformLogFilter {
23
29
let pidIndex = data . indexOf ( searchString ) ;
24
30
if ( pidIndex > 0 ) {
25
31
data = data . substring ( pidIndex + searchString . length , data . length ) ;
32
+ data = this . getOriginalFileLocation ( data ) ;
26
33
}
27
34
}
28
35
return data . trim ( ) ;
29
36
}
30
37
31
38
return data ;
32
39
}
40
+
41
+ private getOriginalFileLocation ( data : string ) : string {
42
+ let fileString = "file:///" ;
43
+ let fileIndex = data . indexOf ( fileString ) ;
44
+ if ( fileIndex >= 0 ) {
45
+ let parts = data . substring ( fileIndex + fileString . length ) . split ( ":" ) ;
46
+ if ( parts . length >= 4 ) {
47
+ let file = parts [ 0 ] ;
48
+ let sourceMapFile = path . join ( this . $projectData . projectDir , file + ".map" ) ;
49
+ let row = parseInt ( parts [ 1 ] ) ;
50
+ let column = parseInt ( parts [ 2 ] ) ;
51
+ if ( this . $fs . exists ( sourceMapFile ) . wait ( ) ) {
52
+ let sourceMap = this . $fs . readText ( sourceMapFile , "utf8" ) . wait ( ) ;
53
+ let smc = new sourcemap . SourceMapConsumer ( sourceMap ) ;
54
+ let originalPosition = smc . originalPositionFor ( { line :row , column :column } )
55
+ data = data . substring ( 0 , fileIndex + fileString . length )
56
+ + file . replace ( ".js" , ".ts" ) + ":"
57
+ + originalPosition . line + ":"
58
+ + originalPosition . column ;
59
+ for ( let i = 3 ; i < parts . length ; i ++ ) {
60
+ data += ":" + parts [ i ] ;
61
+ }
62
+ }
63
+ }
64
+ }
65
+ return data ;
66
+ }
33
67
}
34
68
$injector . register ( "iOSLogFilter" , IOSLogFilter ) ;
0 commit comments