stacktracejs / error-stack-parser

Extract meaning from JS Errors
https://www.stacktracejs.com/#!/docs/error-stack-parser
MIT License
450 stars 52 forks source link

Parentheses in node file paths are filtered out #62

Open mattwynne opened 3 years ago

mattwynne commented 3 years ago

Expected Behavior

When parsing the stack for a file that happens to have parentheses in its name, I expected those parentheses to still be there when I got the parsed StackFrame object's fileName.

e.g.

path/to/my (top secret) project/file.js

remains as

path/to/my (top secret) project/file.js

Current Behavior

Parentheses are stripped out of the path.

e.g.

path/to/my (top secret) project/file.js

becomes

path/to/my top secret project/file.js`

Steps to Reproduce (for bugs)

I wrote a failing test for it that reproduces the problem, in a branch which you can see here.

Context

This has caused us some problems running Cucumber-JS's own tests if the developer's environment has parens in the path. See https://github.com/cucumber/cucumber-js/issues/1735

Your Environment

Possible Solution

If you want to submit a PR with a fix for this, you'll need to start by forking this repo. If you install the gh command-line tool, you can do that with:

$ gh repo fork stacktracejs/error-stack-parser

That should hopefully fork the repo to your GitHub account and then create a local clone of it.

In the new directory of the local clone, you can then create a branch, and pull in my commit with the failing test:

$ git checkout -b allow-parens-in-node-filename
$ git pull git@github.com:mattwynne/error-stack-parser.git allow-parens-in-node-filename

Try running the tests, and you should see one failing:

npm install
npm test
npm test

> error-stack-parser@2.0.6 test
> karma start karma.conf.js --single-run

19 07 2021 14:32:05.968:INFO [karma-server]: Karma v4.4.1 server started at http://0.0.0.0:9876/
19 07 2021 14:32:05.971:INFO [launcher]: Launching browsers PhantomJS with concurrency unlimited
19 07 2021 14:32:05.975:INFO [launcher]: Starting browser PhantomJS
19 07 2021 14:32:07.389:INFO [PhantomJS 2.1.1 (Mac OS X 0.0.0)]: Connected on socket S7DEMBo_p_scyXL8AAAA with id 77822057
PhantomJS 2.1.1 (Mac OS X 0.0.0) ERROR LOG: 'DEPRECATION:', 'Setting specFilter directly on Env is deprecated and will be removed in a future version of Jasmine, please use the specFilter option in `configure`'

  ErrorStackParser
    #parse
      ✓ should parse Safari 7 Error.stack
      ✓ should parse Safari 8 Error.stack
      ✓ should parse nested eval() from Safari 9
      ✓ should parse Firefox 31 Error.stack
      ✓ should parse nested eval() from Firefox 43
      ✓ should parse function names containing @ in Firefox 43 Error.stack
      ✓ should parse IE 10 Error stacks
      ✓ should parse Opera 11 Error messages
      ✓ should parse IE 11 Error stacks
      ✓ should parse stack traces with @ in the URL
      ✓ should parse Opera 25 Error stacks
      ✓ should parse stack traces with @ in the URL and the method
      ✓ should parse Opera 9.27 Error messages
      ✓ should parse Safari 6 Error.stack
      ✓ should not parse IE 9 Error
      ✓ should handle webpack eval stacks
      ✓ should handle spaces in Node.js stacks
      ✓ should parse nested eval() from Edge
      ✓ should handle newlines in Error stack messages
      ✓ should parse Opera 10 Error messages
      ✗ should handle parentheses in Node.js stacks
    Expected '/var/app/scratch/my project top secret/index.js' to equal '/var/app/scratch/my project (top secret)/index.js'.
    <Jasmine>
    spec/error-stack-parser-spec.js:237:52
    <Jasmine>

      ✓ should parse V8 Error.stack
      ✓ should parse error stacks with Constructors
      ✓ should parse V8 entries with no location
      ✓ should parse V8 Error.stack entries with port numbers
      ✓ should parse nested eval() from V8

PhantomJS 2.1.1 (Mac OS X 0.0.0): Executed 26 of 26 (1 FAILED) (0.35 secs / 0.313 secs)
TOTAL: 1 FAILED, 25 SUCCESS

1) should handle parentheses in Node.js stacks
     ErrorStackParser #parse
     Expected '/var/app/scratch/my project top secret/index.js' to equal '/var/app/scratch/my project (top secret)/index.js'.
<Jasmine>
spec/error-stack-parser-spec.js:237:52
<Jasmine>

Now you just need to fiddle with the code until that test passes :)