Skip to content

SyntaxError: Unexpected token z in JSON at position 0 #254

Open
42technologies/node-source-map-support
#1

Description

@provegard

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

Activity

  1. added 5 commits that reference this issue on Oct 15, 2020
    357f56c
    81a1a95
    be178c9
    9cba6d4
    183ec03
  2. bazineta commented on Mar 20, 2021

    @bazineta

    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.

  3. weewoo64 commented on Aug 9, 2022

    @weewoo64

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

  4. ivands commented on Aug 9, 2022

    @ivands

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

  5. jolll4 commented on Aug 14, 2024

    @jolll4

    @evanw Any chance to merge the suggested fix from 42technologies#1? The issue is still occurring.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions