Skip to content

Commit f588b5a

Browse files
committed
Fix integrity hashes with query string, use the original assets name in "integrity" map
1 parent ce54d41 commit f588b5a

File tree

3 files changed

+23
-10
lines changed

3 files changed

+23
-10
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# CHANGELOG
22

3+
## 5.0.1
4+
5+
* #1349 Fix issue between `Encore.enableIntegrityHashes()` and filenames with a query-string (@Kocal)
6+
37
## 5.0.0
48

59
This is a new major version that contains several backwards-compatibility breaks.

lib/webpack/entry-points-plugin.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,9 +95,12 @@ class EntryPointsPlugin {
9595
for (const entryName in manifest.entrypoints) {
9696
for (const fileType in manifest.entrypoints[entryName]) {
9797
for (const asset of manifest.entrypoints[entryName][fileType]) {
98+
if (asset in manifest.integrity) {
99+
continue;
100+
}
101+
98102
// Drop query string if any
99103
const assetNormalized = asset.includes('?') ? asset.split('?')[0] : asset;
100-
101104
if (assetNormalized in manifest.integrity) {
102105
continue;
103106
}
@@ -118,7 +121,7 @@ class EntryPointsPlugin {
118121
fileHashes.push(`${algorithm}-${hash.digest('base64')}`);
119122
}
120123

121-
manifest.integrity[assetNormalized] = fileHashes.join(' ');
124+
manifest.integrity[asset] = fileHashes.join(' ');
122125
}
123126
}
124127
}

test/functional.js

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1371,7 +1371,8 @@ module.exports = {
13711371
const config = createWebpackConfig('www/build', 'dev');
13721372
config.setPublicPath('/build');
13731373
config.addEntry('main', ['./js/index.ts']);
1374-
const testCallback = () => {};
1374+
const testCallback = () => {
1375+
};
13751376
config.enableTypeScriptLoader(testCallback);
13761377

13771378
testSetup.runWebpack(config, (webpackAssert) => {
@@ -1455,7 +1456,8 @@ module.exports = {
14551456
const config = createWebpackConfig('www/build', 'dev');
14561457
config.setPublicPath('/build');
14571458
config.addEntry('main', ['./js/handlebars.js']);
1458-
const testCallback = () => {};
1459+
const testCallback = () => {
1460+
};
14591461
config.enableHandlebarsLoader(testCallback);
14601462

14611463
testSetup.runWebpack(config, () => {
@@ -1924,7 +1926,8 @@ module.exports = {
19241926
config.enableSingleRuntimeChunk();
19251927
config.setPublicPath('/build');
19261928
config.addEntry('main', `./vuejs-jsx/main_v${getVueVersion(config)}`);
1927-
config.enableVueLoader(() => {}, {
1929+
config.enableVueLoader(() => {
1930+
}, {
19281931
useJsx: true,
19291932
version: getVueVersion(config),
19301933
});
@@ -3138,11 +3141,14 @@ module.exports = {
31383141

31393142
testSetup.runWebpack(config, (webpackAssert) => {
31403143
const integrityData = getIntegrityData(config);
3141-
const expectedFilesWithHashes = [
3142-
'/build/runtime.js',
3143-
'/build/main.js',
3144-
'/build/styles.css',
3145-
];
3144+
const expectedFilesWithHashes = Object.keys(integrityData).filter(file => {
3145+
if (!/\?v=[a-z0-9]{16}$/.test(file)) {
3146+
return false;
3147+
}
3148+
return file.startsWith('/build/runtime.js?v=')
3149+
|| file.startsWith('/build/main.js?v=')
3150+
|| file.startsWith('/build/styles.css?v=');
3151+
});
31463152

31473153
expectedFilesWithHashes.forEach((file) => {
31483154
expect(integrityData[file]).to.contain('sha384-');

0 commit comments

Comments
 (0)