From b67bf5b85042583dcee2726f68ac47df5d071e60 Mon Sep 17 00:00:00 2001 From: Seb Insua Date: Thu, 13 Sep 2018 05:49:54 +0100 Subject: [PATCH] Added option to transform the paths within a sourcemap. (#2430) Resolves #2168. --- src/Chunk.ts | 6 +++++- src/rollup/types.d.ts | 1 + src/utils/mergeOptions.ts | 6 +++++- test/misc/optionList.js | 2 +- .../samples/transform-source-paths/_config.js | 19 +++++++++++++++++++ .../samples/transform-source-paths/main.js | 1 + 6 files changed, 32 insertions(+), 3 deletions(-) create mode 100644 test/sourcemaps/samples/transform-source-paths/_config.js create mode 100644 test/sourcemaps/samples/transform-source-paths/main.js diff --git a/src/Chunk.ts b/src/Chunk.ts index e3792a2ae1b..becc654a9cc 100644 --- a/src/Chunk.ts +++ b/src/Chunk.ts @@ -1137,7 +1137,11 @@ export default class Chunk { map = magicString.generateMap({ file, includeContent: true }); } - map.sources = map.sources.map(normalize); + map.sources = map.sources.map(sourcePath => + normalize( + options.sourcemapPathTransform ? options.sourcemapPathTransform(sourcePath) : sourcePath + ) + ); timeEnd('sourcemap', 3); } diff --git a/src/rollup/types.d.ts b/src/rollup/types.d.ts index 0c20447fb16..8066a70307f 100644 --- a/src/rollup/types.d.ts +++ b/src/rollup/types.d.ts @@ -284,6 +284,7 @@ export interface OutputOptions { outro?: string | (() => string | Promise); sourcemap?: boolean | 'inline'; sourcemapFile?: string; + sourcemapPathTransform?: (sourcePath: string) => string; interop?: boolean; extend?: boolean; diff --git a/src/utils/mergeOptions.ts b/src/utils/mergeOptions.ts index a0283de8c3b..223437f2ab0 100644 --- a/src/utils/mergeOptions.ts +++ b/src/utils/mergeOptions.ts @@ -128,11 +128,14 @@ export default function mergeOptions({ 'output option' ); + const validCliOutputOptions = validOutputOptions.filter( + option => option !== 'sourcemapPathTransform' + ); addUnknownOptionErrors( unknownOptionErrors, Object.keys(command), validInputOptions.concat( - validOutputOptions, + validCliOutputOptions, Object.keys(commandAliases), 'config', 'environment', @@ -269,6 +272,7 @@ function getOutputOptions( paths: getOption('paths'), sourcemap: getOption('sourcemap'), sourcemapFile: getOption('sourcemapFile'), + sourcemapPathTransform: getOption('sourcemapPathTransform'), strict: getOption('strict', true) }; } diff --git a/test/misc/optionList.js b/test/misc/optionList.js index c71badbe10f..d7397e7deff 100644 --- a/test/misc/optionList.js +++ b/test/misc/optionList.js @@ -1,3 +1,3 @@ exports.input = 'acorn, acornInjectPlugins, cache, chunkGroupingSize, context, entry, experimentalCacheExpiry, experimentalCodeSplitting, experimentalPreserveModules, experimentalTopLevelAwait, external, inlineDynamicImports, input, manualChunks, moduleContext, onwarn, optimizeChunks, perf, plugins, preferConst, preserveSymlinks, shimMissingExports, treeshake, watch'; exports.flags = 'acorn, acornInjectPlugins, amd, assetFileNames, banner, c, cache, chunkFileNames, chunkGroupingSize, compact, config, context, dir, e, entry, entryFileNames, environment, esModule, experimentalCacheExpiry, experimentalCodeSplitting, experimentalPreserveModules, experimentalTopLevelAwait, exports, extend, external, f, file, footer, format, freeze, g, globals, h, i, indent, inlineDynamicImports, input, interop, intro, m, manualChunks, moduleContext, n, name, namespaceToStringTag, noConflict, o, onwarn, optimizeChunks, outro, paths, perf, plugins, preferConst, preserveSymlinks, shimMissingExports, silent, sourcemap, sourcemapFile, strict, treeshake, v, w, watch'; -exports.output = 'amd, assetFileNames, banner, dir, chunkFileNames, compact, entryFileNames, esModule, exports, extend, file, footer, format, freeze, globals, indent, interop, intro, name, namespaceToStringTag, noConflict, outro, paths, sourcemap, sourcemapFile, strict'; +exports.output = 'amd, assetFileNames, banner, dir, chunkFileNames, compact, entryFileNames, esModule, exports, extend, file, footer, format, freeze, globals, indent, interop, intro, name, namespaceToStringTag, noConflict, outro, paths, sourcemap, sourcemapFile, sourcemapPathTransform, strict'; diff --git a/test/sourcemaps/samples/transform-source-paths/_config.js b/test/sourcemaps/samples/transform-source-paths/_config.js new file mode 100644 index 00000000000..536232d181c --- /dev/null +++ b/test/sourcemaps/samples/transform-source-paths/_config.js @@ -0,0 +1,19 @@ +const path = require('path'); +const assert = require('assert'); + +module.exports = { + description: 'transform sourcemap paths (#2168)', + options: { + output: { + name: 'myModule', + file: path.resolve(__dirname, '_actual/bundle.js'), + sourcemapPathTransform: sourcePath => sourcePath.replace( + `..${path.sep}`, + '~/pkg-name/' + ) + } + }, + test(code, map) { + assert.deepEqual(map.sources, ['~/pkg-name/main.js']); + } +}; diff --git a/test/sourcemaps/samples/transform-source-paths/main.js b/test/sourcemaps/samples/transform-source-paths/main.js new file mode 100644 index 00000000000..7a4e8a723a4 --- /dev/null +++ b/test/sourcemaps/samples/transform-source-paths/main.js @@ -0,0 +1 @@ +export default 42;