Skip to content

Commit 0d4620a

Browse files
authored
Merge pull request microsoft#1816 from iclanton/ianc/fix-set-public-path-sourcemaps
[set-webpack-publich-path-plugin] Fix an issue where sourcemaps with inlined sources can contain incorrect escaping.
2 parents 7a91944 + 7bb2558 commit 0d4620a

File tree

2 files changed

+22
-4
lines changed

2 files changed

+22
-4
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"changes": [
3+
{
4+
"packageName": "@rushstack/set-webpack-public-path-plugin",
5+
"comment": "Fix an issue where sourcemaps with inlined sources can contain incorrect escaping.",
6+
"type": "patch"
7+
}
8+
],
9+
"packageName": "@rushstack/set-webpack-public-path-plugin",
10+
"email": "[email protected]"
11+
}

webpack/set-webpack-public-path-plugin/src/SetPublicPathPlugin.ts

+11-4
Original file line numberDiff line numberDiff line change
@@ -183,14 +183,21 @@ export class SetPublicPathPlugin implements Webpack.Plugin {
183183
for (const chunk of chunkGroup.chunks) {
184184
if (chunk[SHOULD_REPLACE_ASSET_NAME_TOKEN]) {
185185
for (const assetFilename of chunk.files) {
186+
let escapedAssetFilename: string;
187+
if (assetFilename.match(/\.map$/)) {
188+
escapedAssetFilename = assetFilename.substr(0, assetFilename.length - (4 /* '.map'.length */)); // Trim the ".map" extension
189+
escapedAssetFilename = lodash.escapeRegExp(escapedAssetFilename);
190+
escapedAssetFilename = JSON.stringify(escapedAssetFilename); // source in sourcemaps is JSON-encoded
191+
escapedAssetFilename = escapedAssetFilename.substring(1, escapedAssetFilename.length - 1); // Trim the quotes from the JSON encoding
192+
} else {
193+
escapedAssetFilename = lodash.escapeRegExp(assetFilename);
194+
}
195+
186196
const asset: IAsset = compilation.assets[assetFilename];
187197
const originalAssetSource: string = asset.source();
188198
const originalAssetSize: number = asset.size();
189199

190-
const newAssetSource: string = originalAssetSource.replace(
191-
ASSET_NAME_TOKEN_REGEX,
192-
lodash.escapeRegExp(assetFilename)
193-
);
200+
const newAssetSource: string = originalAssetSource.replace(ASSET_NAME_TOKEN_REGEX, escapedAssetFilename);
194201
const sizeDifference: number = assetFilename.length - ASSET_NAME_TOKEN.length;
195202
asset.source = () => newAssetSource;
196203
asset.size = () => originalAssetSize + sizeDifference;

0 commit comments

Comments
 (0)