From 7c8ba2aea1d9a80355f3908ce6a755942278e886 Mon Sep 17 00:00:00 2001 From: Bobby Galli Date: Wed, 17 Aug 2022 13:21:29 -0400 Subject: [PATCH 1/3] fix: support for stack frames with win32 paths (#31) --- lib/stack-converter.ts | 7 ++++++- spec/stack-converter.spec.ts | 21 +++++++++++++++++++++ spec/test-data/crasher.js.map | 1 + spec/test-data/crasher.txt | 11 +++++++++++ 4 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 spec/test-data/crasher.js.map create mode 100644 spec/test-data/crasher.txt diff --git a/lib/stack-converter.ts b/lib/stack-converter.ts index 4e8b75b..eefd066 100644 --- a/lib/stack-converter.ts +++ b/lib/stack-converter.ts @@ -86,7 +86,12 @@ export class StackConverter { continue; } - const mapFile = this.sourceMapFilePaths.find(mapFilePath => mapFilePath.includes(`${path.basename(file)}.map`)); + const mapFile = this.sourceMapFilePaths.find(mapFilePath => { + const posix = mapFilePath.includes(`${path.posix.basename(file)}.map`); + const win32 = mapFilePath.includes(`${path.win32.basename(file)}.map`); + return posix || win32; + }); + if (!mapFile) { set(sourceMapErrors, file, true); const comment = StackConverter.errorLoadingSourceMapComment('source map not found'); diff --git a/spec/stack-converter.spec.ts b/spec/stack-converter.spec.ts index e5fa5f2..1eb9485 100644 --- a/spec/stack-converter.spec.ts +++ b/spec/stack-converter.spec.ts @@ -95,6 +95,27 @@ describe('StackConverter', () => { ); }); + it('should convert stack using file specified by win32 path', async () => { + const baseFile = 'crasher'; + const mapFilePath = path.join(TESTING_DATA_DIR, `${baseFile}.js.map`); + const stackConverter = new StackConverter([mapFilePath]); + const stackFilePath = path.join(TESTING_DATA_DIR, `${baseFile}.txt`); + const stackText = readStack(stackFilePath); + const { error, stack } = await stackConverter.convert(stackText); + expect(error).toBeUndefined(); + expect(normalize(stack)).toContain( + normalize( + `Error: BugSplat! + at crash (../../src/crasher.ts:27:10) + at sampleStackFrame2 (../../src/crasher.ts:23:4) + at sampleStackFrame1 (../../src/crasher.ts:19:4) + at sampleStackFrame0 (../../src/crasher.ts:15:4) + at generateStackFramesAndCrash (../../src/crasher.ts:11:4) + at uncaughtException (../../src/crasher.ts:3:4)` + ) + ); + }); + it('should include exception message in stack', async () => { const baseFile = 'stack-2'; const mapFilePath = path.join(TESTING_DATA_DIR, `${baseFile}.js.map`); diff --git a/spec/test-data/crasher.js.map b/spec/test-data/crasher.js.map new file mode 100644 index 0000000..df937cf --- /dev/null +++ b/spec/test-data/crasher.js.map @@ -0,0 +1 @@ +{"version":3,"file":"crasher.js","sourceRoot":"","sources":["../../src/crasher.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,SAAgB,iBAAiB;IAC7B,2BAA2B,EAAE,CAAC;AAClC,CAAC;AAFD,8CAEC;AAED,SAAsB,kBAAkB;;;YACpC,sBAAO,2BAA2B,EAAE,EAAC;;;CACxC;AAFD,gDAEC;AAED,SAAS,2BAA2B;IAChC,iBAAiB,EAAE,CAAC;AACxB,CAAC;AAED,SAAS,iBAAiB;IACtB,iBAAiB,EAAE,CAAC;AACxB,CAAC;AAED,SAAS,iBAAiB;IACtB,iBAAiB,EAAE,CAAC;AACxB,CAAC;AAED,SAAS,iBAAiB;IACtB,KAAK,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,KAAK;IACV,MAAM,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC;AACjC,CAAC"} \ No newline at end of file diff --git a/spec/test-data/crasher.txt b/spec/test-data/crasher.txt new file mode 100644 index 0000000..aa37f2a --- /dev/null +++ b/spec/test-data/crasher.txt @@ -0,0 +1,11 @@ +Error: BugSplat! + at crash (C:\Users\anker\Desktop\my-electron-crasher-master\dist\src\crasher.js:65:11) + at sampleStackFrame2 (C:\Users\anker\Desktop\my-electron-crasher-master\dist\src\crasher.js:62:5) + at sampleStackFrame1 (C:\Users\anker\Desktop\my-electron-crasher-master\dist\src\crasher.js:59:5) + at sampleStackFrame0 (C:\Users\anker\Desktop\my-electron-crasher-master\dist\src\crasher.js:56:5) + at generateStackFramesAndCrash (C:\Users\anker\Desktop\my-electron-crasher-master\dist\src\crasher.js:53:5) + at uncaughtException (C:\Users\anker\Desktop\my-electron-crasher-master\dist\src\crasher.js:41:5) + at IpcMainImpl. (C:\Users\anker\Desktop\my-electron-crasher-master\dist\src\main.js:122:37) + at IpcMainImpl.emit (node:events:527:28) + at EventEmitter. (node:electron/js2c/browser_init:161:11014) + at EventEmitter.emit (node:events:527:28) \ No newline at end of file From a1bc7cd421746b5214f29a2688849704e9661f92 Mon Sep 17 00:00:00 2001 From: Bobby Galli Date: Wed, 17 Aug 2022 13:36:44 -0400 Subject: [PATCH 2/3] chore: update README.md (#33) Fixes #32 --- README.md | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 6ae4f1f..273b924 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,17 @@ -[![BugSplat](https://s3.amazonaws.com/bugsplat-public/npm/header.png)](https://www.bugsplat.com) +[![bugsplat-github-banner-basic-outline](https://user-images.githubusercontent.com/20464226/149019306-3186103c-5315-4dad-a499-4fd1df408475.png)](https://bugsplat.com) +
+#
BugSplat
+### **
Crash and error reporting built for busy developers.
** +
+ + Follow @bugsplatco on Twitter + + + Join BugSplat on Discord + +
-# stack-converter +# 🥞 stack-converter `stack-converter` is a utility for translating function names, file names and line numbers in uglified JavaScript Error stack frames to the corresponding values in the original source. `stack-converter` is distributed as both a package and a library and is used by the [BugSplat](https://www.bugsplat.com) backend to deliver crash reporting as a service for JavaScript and TypeScript applications. The following is an example JavaScript Error stack converted to its TypeScript equivalent using `stack-converter`: @@ -19,7 +30,7 @@ Error: BugSplat rocks! at Object. (../../bin/cmd.ts:12:2) ``` -## Command Line +## 🖥 Command Line 1. Install this package globally `npm i -g @bugsplat/stack-converter` 2. Run `stack-converter -h` to see the latest usage information: ```bash @@ -38,7 +49,7 @@ bobby@BugSplat % ~ % stack-converter -h ``` 3. Run `stack-converter` and optionally specify a path to a directory containing .map files, path to a single .map file, and a path to a .txt file containing a stringified JavaScript Error. If no options are provided `stack-converter` will default to looking in the current directory for source maps and attempt to read the stringified JavaScript error stack from the system clipboard. -## API +## 🧩 API 1. Install this package locally `npm i @bugsplat/stack-converter` 2. Import `StackConverter` from `@bugsplat/stack-converter` ```ts From 3e63660d3fc8e62dedaba7a2222d095bf7b0bf64 Mon Sep 17 00:00:00 2001 From: Bobby Galli Date: Wed, 17 Aug 2022 13:38:11 -0400 Subject: [PATCH 3/3] 1.2.5 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 98592f4..d9982ae 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@bugsplat/stack-converter", - "version": "1.2.4", + "version": "1.2.5", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@bugsplat/stack-converter", - "version": "1.2.4", + "version": "1.2.5", "license": "MIT", "dependencies": { "clipboardy": "^2.3.0", diff --git a/package.json b/package.json index d31e57f..854f293 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@bugsplat/stack-converter", - "version": "1.2.4", + "version": "1.2.5", "main": "./dist/lib/index.js", "bin": { "stack-converter": "./dist/bin/index.js"