Migrate source-map-support to Node.js native source maps

Proprietary

Replaces the source-map-support package with Node.js's built-in source map support. Where Node is launched from package.json scripts or mocha/ava configuration, source-map-support/register becomes the --enable-source-maps flag; in code, install() and register imports become process.setSourceMapsEnabled(true) where that maps everything the module loads. Where it would not — in an ES module every import is evaluated before any statement runs — the flag goes on the launcher instead, in the package's bin shebang or a node script, and the entry point is removed as redundant. What Node has no equivalent for — install() with a custom retrieveSourceMap or retrieveFile, and wrapCallSite, getErrorSource, mapSourcePosition, retrieveSourceMap and resetRetrieveHandlers — is written into the file that uses it, on Node's own SourceMap, and an install() configured for a browser is removed. The dependency is removed from each package.json that declares it, with the lock file updated to match. Anything left in place, such as a webpack banner, is recorded in the SourceMapSupportManualMigrationSteps data table with a suggested replacement, and has to be migrated before building, since the dependency is removed regardless.

org.openrewrite.node.migrate.source-map-support.migrate-source-map-support-to-native
mod run . --recipe=org.openrewrite.node.migrate.source-map-support.migrate-source-map-support-to-native

Install it once, then run it on every repository under the current directory. New to the Moderne CLI? Set it up.

Recipe list

It runs these recipes, in this order.

  1. Replace source-map-support/register with --enable-source-maps in package.json
  2. Replace source-map-support/register with enable-source-maps in mocha config
  3. Replace source-map-support with process.setSourceMapsEnabled()
  4. Replace source-map-support's API with functions written into the file
  5. Enable native source maps at launch and drop source-map-support
  6. Find source-map-support usages that need manual migration
  7. Remove the source-map-support dependency