diff --git a/lib/common b/lib/common index 4edc66091d..c61bf94dce 160000 --- a/lib/common +++ b/lib/common @@ -1 +1 @@ -Subproject commit 4edc66091dce337aa072138727bb03f80a3c8f4d +Subproject commit c61bf94dcea70c8ec2f9e350f6802ad0c1c1de85 diff --git a/lib/services/ios-log-filter.ts b/lib/services/ios-log-filter.ts index 2229ab3e29..d0306cb3db 100644 --- a/lib/services/ios-log-filter.ts +++ b/lib/services/ios-log-filter.ts @@ -1,6 +1,12 @@ +let sourcemap = require("source-map"); +import * as path from "path"; + export class IOSLogFilter implements Mobile.IPlatformLogFilter { - constructor(private $loggingLevels: Mobile.ILoggingLevels) { } + constructor( + private $fs: IFileSystem, + private $projectData: IProjectData, + private $loggingLevels: Mobile.ILoggingLevels) { } public filterData(data: string, logLevel: string, pid?: string): string { @@ -23,6 +29,7 @@ export class IOSLogFilter implements Mobile.IPlatformLogFilter { let pidIndex = data.indexOf(searchString); if (pidIndex > 0) { data = data.substring(pidIndex + searchString.length, data.length); + data = this.getOriginalFileLocation(data); } } return data.trim(); @@ -30,5 +37,32 @@ export class IOSLogFilter implements Mobile.IPlatformLogFilter { return data; } + + private getOriginalFileLocation(data: string): string { + let fileString = "file:///"; + let fileIndex = data.indexOf(fileString); + if (fileIndex >= 0) { + let parts = data.substring(fileIndex + fileString.length).split(":"); + if (parts.length >= 4) { + let file = parts[0]; + let sourceMapFile = path.join(this.$projectData.projectDir, file + ".map"); + let row = parseInt(parts[1]); + let column = parseInt(parts[2]); + if (this.$fs.exists(sourceMapFile).wait()) { + let sourceMap = this.$fs.readText(sourceMapFile, "utf8").wait(); + let smc = new sourcemap.SourceMapConsumer(sourceMap); + let originalPosition = smc.originalPositionFor({line:row,column:column}); + data = data.substring(0, fileIndex + fileString.length) + + file.replace(".js", ".ts") + ":" + + originalPosition.line + ":" + + originalPosition.column; + for (let i = 3; i