Skip to content

Commit de678cf

Browse files
feat(logs): support external sourcemaps from .map files (#5434)
* support reading sourcemaps from `.map` files * test: add external source-map tests Co-authored-by: Igor Randjelovic <[email protected]>
1 parent 7cdaed7 commit de678cf

File tree

7 files changed

+100
-2
lines changed

7 files changed

+100
-2
lines changed

lib/services/log-source-map-service.ts

+10-1
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,17 @@ export class LogSourceMapService implements Mobile.ILogSourceMapService {
6767
public async setSourceMapConsumerForFile(filePath: string): Promise<void> {
6868
try {
6969
if (!this.$fs.getFsStats(filePath).isDirectory()) {
70+
const mapFile = filePath + ".map";
71+
let sourceMapRaw;
7072
const source = this.$fs.readText(filePath);
71-
const sourceMapRaw = sourceMapConverter.fromSource(source);
73+
if (this.$fs.exists(mapFile)) {
74+
sourceMapRaw = sourceMapConverter.fromMapFileSource(
75+
source,
76+
path.dirname(filePath)
77+
);
78+
} else {
79+
sourceMapRaw = sourceMapConverter.fromSource(source);
80+
}
7281
let smc: any = null;
7382
if (sourceMapRaw && sourceMapRaw.sourcemap) {
7483
const sourceMap = sourceMapRaw.sourcemap;

test/files/sourceMapBundle/.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
!**/*.map

test/files/sourceMapBundle/android/app/external.js

+19
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

test/files/sourceMapBundle/android/app/external.js.map

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

test/files/sourceMapBundle/ios/app/external.js

+19
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

test/files/sourceMapBundle/ios/app/external.js.map

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

test/services/log-source-map-service.ts

+49-1
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,23 @@ const testCases: IDictionary<Array<{
9595
expected:
9696
"System.err: at com.tns.Runtime.dispatchCallJSMethodNative(Runtime.java:1203)\n",
9797
},
98+
// External maps
99+
{
100+
caseName: "trace message (external map)",
101+
message:
102+
"JS: at onTap (file:///data/data/org.nativescript.sourceMap/files/app/external.js:12:22)",
103+
expected: `JS: at onTap file: ${toPlatformSep(
104+
"src/external-test.js"
105+
)}:3:4\n`,
106+
},
107+
{
108+
caseName: "error message (external map)",
109+
message:
110+
"System.err: Frame: function:'./external-test.js.onTap', file:'file:///data/data/org.nativescript.sourceMap/files/app/external.js', line: 13, column: 32",
111+
expected: `System.err: Frame: function:'./external-test.js.onTap', file:'file: ${toPlatformSep(
112+
"src/external-test.js"
113+
)}:4:4\n`,
114+
},
98115
],
99116
ios: [
100117
{
@@ -119,7 +136,7 @@ const testCases: IDictionary<Array<{
119136
)}:31:31 JS ERROR Error: Test\n`,
120137
},
121138
{
122-
caseName: "error stack tracew",
139+
caseName: "error stack trace",
123140
message: "onTap@file:///app/bundle.js:296:32",
124141
expected: `onTap@file: ${toPlatformSep(
125142
"src/main-view-model.ts"
@@ -138,6 +155,33 @@ const testCases: IDictionary<Array<{
138155
"src/main-view-model.ts"
139156
)}:31:18)\n`,
140157
},
158+
// External maps
159+
{
160+
caseName: "console message (external map)",
161+
message: "CONSOLE LOG file:///app/external.js:11:20: Test.",
162+
expected: `CONSOLE LOG file: ${toPlatformSep(
163+
"src/external-test.js"
164+
)}:2:16 Test.\n`,
165+
},
166+
{
167+
caseName: "trace message (external map)",
168+
message: "CONSOLE TRACE file:///app/external.js:12:22: Test",
169+
expected: `CONSOLE TRACE file: ${toPlatformSep(
170+
"src/external-test.js"
171+
)}:3:4 Test\n`,
172+
},
173+
{
174+
caseName: "error message (external map)",
175+
message: "file:///app/external.js:13:32: JS ERROR Error: Test",
176+
expected: `file: ${toPlatformSep(
177+
"src/external-test.js"
178+
)}:4:4 JS ERROR Error: Test\n`,
179+
},
180+
{
181+
caseName: "error stack trace (external map)",
182+
message: "onTap@file:///app/external.js:13:32",
183+
expected: `onTap@file: ${toPlatformSep("src/external-test.js")}:4:4\n`,
184+
},
141185
],
142186
};
143187

@@ -158,6 +202,10 @@ describe("log-source-map-service", () => {
158202
const fs = testInjector.resolve<IFileSystem>("fs");
159203
const files = fs.enumerateFilesInDirectorySync(originalFilesLocation);
160204
for (const file of files) {
205+
if (file.endsWith(".map")) {
206+
continue;
207+
}
208+
161209
await logSourceMapService.setSourceMapConsumerForFile(file);
162210
}
163211
});

0 commit comments

Comments
 (0)