jsdom v9.0.0 Release Notes

  • ๐Ÿš€ This major release removes jsdom's support for mutation events. Mutation events were never well-specified, and the modern DOM Standard omits them in the hopes that they can be removed from browsers (although this has not yet happened in major browser engines). We had hoped to implement their modern alternative, mutation observers, before performing this removal, to give jsdom users the same capabilities.

    ๐Ÿš€ However, recent performance investigations revealed that mutation events were the major bottleneck in most jsdom operations; tools like ecmarkup which make heavy use of jsdom had their running time halved by removing mutation events, which add serious overhead to every DOM mutation. As such, we are doing a major release with them removed, so that jsdom users can benefit from this massive performance gain.

    ๐Ÿ‘ Mutation observer support is in progress; please use the GitHub reactions feature to vote on that issue if you are impacted by this removal and are hoping for mutation observer support to replace it.

    ๐ŸŒฒ Your normal change log follows:

    • โœ‚ Removed mutation events, as discussed above.
    • โž• Added the DOMTokenList.prototype.replace method. (nicolashenry)
    • โšก๏ธ Updated DOMTokenList.prototype.contains to no longer validate its arguments, as per the latest spec. (nicolashenry)
    • Made various improvements to XMLHttpRequest (nicolashenry):
      • Added the responseURL property.
      • Updated methods, headers, and header values to use the ByteString algorithm.
      • Fixed the default statusText to be "" instead of "OK".
    • ๐Ÿ›  Fixed the Blob constructor's type validation. (nicolashenry)