node-source-map-support icon indicating copy to clipboard operation
node-source-map-support copied to clipboard

SyntaxError: Unexpected token z in JSON at position 0

Open provegard opened this issue 6 years ago • 4 comments

I have the following situation:

  • I start Karma with `node --require coffeescript/register' since my Karma config is in CoffeeScript
  • Karma loads ts-node to support TypeScript modules
  • I have a custom Karma preprocessor for compiling CoffeeScript, since karma-coffee-preprocessor doesn't support CoffeeScript 2.
  • I configure CoffeeScript to transpile the resulting JS code with Babel
  • I use Babel's preset-env
  • Babel loads a plugin, plugin-proposal-async-generator-functions, which uses @babel/template which creates a stack trace by throwing and catching an Error (inside a function called extendedTrace).
  • When this happens, source-map-support's prepareStackTrace method is called, since source-map-support is used by ts-node.
  • source-map-support encounters coffeescript.js in the call stack (since the Error is thrown inside Babel which is invoked from CoffeeScript).
  • coffeescript.js contains code for emitting source maps, so it contains code that matches the regular expression used by retrieveSourceMapURL.
  • retrieveSourceMapURL extracts the following source map from coffeescript.js: "zw(u�"
  • This string is passed to source-map which tries to parse it as JSON in parseSourceMapInput.
  • At this point, bad things happen. :-)

I created a git repo that demonstrates the problem: https://github.com/provegard/sourcemap-bug

Clone it, run npm install and then npm test. It produces the following output:

undefined:1
zw(u�
^

SyntaxError: Unexpected token z in JSON at position 0
    at JSON.parse (<anonymous>)
    at Object.parseSourceMapInput (C:\kod\projects\sourcemap-bug\node_modules\source-map-support\node_modules\source-map\lib\util.js:433:15)
    at new SourceMapConsumer (C:\kod\projects\sourcemap-bug\node_modules\source-map-support\node_modules\source-map\lib\source-map-consumer.js:17:22)
    at mapSourcePosition (C:\kod\projects\sourcemap-bug\node_modules\source-map-support\source-map-support.js:190:14)
    at wrapCallSite (C:\kod\projects\sourcemap-bug\node_modules\source-map-support\source-map-support.js:358:20)
    at C:\kod\projects\sourcemap-bug\node_modules\source-map-support\source-map-support.js:399:26
    at Array.map (<anonymous>)
    at Function.prepareStackTrace (C:\kod\projects\sourcemap-bug\node_modules\source-map-support\source-map-support.js:398:30)
    at prepareStackTrace (internal/errors.js:30:29)
    at process.emit (C:\kod\projects\sourcemap-bug\node_modules\source-map-support\source-map-support.js:457:52)
    at process._fatalException (internal/process/execution.js:146:25)

If I modify retrieveSourceMapURL to print lastMatch, I get:

[
  '//# sourceMappingURL=data:application/json;base64,${encoded}`;',
  'data:application/json;base64,${encoded}`;',
  undefined,
  index: 8757,

Versions:

  • Node v12.5.0
  • npm 6.9.2
  • source-map-support: 0.5.13

provegard avatar Oct 12 '19 19:10 provegard

I landed here after just a lot of failing to get a coffeescript preset working with Jest. The one-liner provided by @danielbayley works for us.

bazineta avatar Mar 20 '21 15:03 bazineta

I got the same error using coffee, also don't see the code daniel committed anymore.

weewoo64 avatar Aug 09 '22 13:08 weewoo64

Same error with the coffeescript preset in jest. Please fix it.

ivands avatar Aug 09 '22 16:08 ivands

@evanw Any chance to merge the suggested fix from https://github.com/42technologies/node-source-map-support/pull/1? The issue is still occurring.

jolll4 avatar Aug 14 '24 04:08 jolll4