Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[v3.0] Use ASCII characters for hash placeholders #4631

Merged
merged 2 commits into from Sep 6, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/utils/base64.ts
Expand Up @@ -5,7 +5,7 @@ export function toBase64(num: number): string {
let outStr = '';
do {
const curDigit = num % base;
num = Math.floor(num / base);
num = (num / base) | 0;
outStr = chars[curDigit] + outStr;
} while (num !== 0);
return outStr;
Expand Down
12 changes: 7 additions & 5 deletions src/utils/hashPlaceholders.ts
@@ -1,8 +1,9 @@
import { toBase64 } from './base64';
import { errFailedValidation, error } from './error';

// Four random characters from the private use area to minimize risk of conflicts
const hashPlaceholderLeft = '\uf7f9\ue4d3';
const hashPlaceholderRight = '\ue3cc\uf1fe';
const hashPlaceholderLeft = '!~{';
const hashPlaceholderRight = '}~';
const hashPlaceholderOverhead = hashPlaceholderLeft.length + hashPlaceholderRight.length;

// This is the size of a sha256
Expand All @@ -21,7 +22,7 @@ export const getHashPlaceholderGenerator = (): HashPlaceholderGenerator => {
)
);
}
const placeholder = `${hashPlaceholderLeft}${String(++nextIndex).padStart(
const placeholder = `${hashPlaceholderLeft}${toBase64(++nextIndex).padStart(
hashSize - hashPlaceholderOverhead,
'0'
)}${hashPlaceholderRight}`;
Expand All @@ -32,13 +33,14 @@ export const getHashPlaceholderGenerator = (): HashPlaceholderGenerator => {
)
);
}
nextIndex++;
return placeholder;
};
};

const REPLACER_REGEX = new RegExp(
`${hashPlaceholderLeft}\\d{1,${maxHashSize - hashPlaceholderOverhead}}${hashPlaceholderRight}`,
`${hashPlaceholderLeft}[0-9a-zA-Z_$]{1,${
maxHashSize - hashPlaceholderOverhead
}}${hashPlaceholderRight}`,
'g'
);

Expand Down
2 changes: 1 addition & 1 deletion test/chunking-form/samples/hashing/hash-size/_config.js
Expand Up @@ -12,7 +12,7 @@ module.exports = {
],
output: {
entryFileNames: ({ name }) =>
name === 'main1' ? '[name]-[hash:6].js' : '[name]-[hash:10].js',
name === 'main1' ? '[name]-[hash:8].js' : '[name]-[hash:10].js',
chunkFileNames: '[name]-[hash:14].js',
assetFileNames: '[name]-[hash:18][extname]'
}
Expand Down
2 changes: 1 addition & 1 deletion test/chunking-form/samples/hashing/random-match/_config.js
Expand Up @@ -2,7 +2,7 @@ module.exports = {
description: 'leaves random hash matches untransformed',
options: {
output: {
entryFileNames: 'entry-[hash]-\uf7f9\ue4d30001\ue3cc\uf1fe-\uf7f9\ue4d31234\ue3cc\uf1fe.js'
entryFileNames: 'entry-[hash]-!~{001}~-!~{123}~.js'
}
}
};

This file was deleted.

@@ -0,0 +1,6 @@
define((function () { 'use strict';

console.log('replaced: a38385ce');
console.log('not replaced: !~{123}~');

}));
@@ -0,0 +1,4 @@
'use strict';

console.log('replaced: 55937672');
console.log('not replaced: !~{123}~');

This file was deleted.

@@ -0,0 +1,2 @@
console.log('replaced: 3e8c77bc');
console.log('not replaced: !~{123}~');

This file was deleted.

Expand Up @@ -3,8 +3,8 @@ System.register([], (function () {
return {
execute: (function () {

console.log('replaced: 74248106');
console.log('not replaced: 1234');
console.log('replaced: 49c9800c');
console.log('not replaced: !~{123}~');

})
};
Expand Down
4 changes: 2 additions & 2 deletions test/chunking-form/samples/hashing/random-match/main.js
@@ -1,2 +1,2 @@
console.log('replaced: 0001');
console.log('not replaced: 1234');
console.log('replaced: !~{001}~');
console.log('not replaced: !~{123}~');
Expand Up @@ -20,7 +20,7 @@ console.log({
"name": "dep2",
"type": "chunk",
"dynamicImports": [],
"fileName": "chunk-dep2-5e5c0a2b.js",
"fileName": "chunk-dep2-88c5c49b.js",
"implicitlyLoadedBefore": [],
"importedBindings": {},
"imports": [],
Expand All @@ -39,5 +39,5 @@ console.log({
"asset-test-9f86d081"
]
});
console.log('all chunks', ["entry-main1-92387c07.js","chunk-dep2-5e5c0a2b.js","entry-main2-8423cd41.js"])
console.log('all chunks', ["entry-main1-87907a68.js","chunk-dep2-88c5c49b.js","entry-main2-71e00327.js"])
console.log('referenced asset in renderChunk', 'asset-test-9f86d081');
@@ -1,4 +1,4 @@
define(['require', './chunk-dep2-5e5c0a2b'], (function (require, dep2) { 'use strict';
define(['require', './chunk-dep2-88c5c49b'], (function (require, dep2) { 'use strict';

var num = 1;
console.log('referenced asset', new URL(require.toUrl('./asset-test-9f86d081'), document.baseURI).href);
Expand All @@ -20,15 +20,15 @@ console.log({
"name": "main1",
"type": "chunk",
"dynamicImports": [],
"fileName": "entry-main1-92387c07.js",
"fileName": "entry-main1-87907a68.js",
"implicitlyLoadedBefore": [],
"importedBindings": {
"chunk-dep2-5e5c0a2b.js": [
"chunk-dep2-88c5c49b.js": [
"num"
]
},
"imports": [
"chunk-dep2-5e5c0a2b.js"
"chunk-dep2-88c5c49b.js"
],
"modules": {
"**/dep1.js": {
Expand All @@ -52,5 +52,5 @@ console.log({
"asset-test-9f86d081"
]
});
console.log('all chunks', ["entry-main1-92387c07.js","chunk-dep2-5e5c0a2b.js","entry-main2-8423cd41.js"])
console.log('all chunks', ["entry-main1-87907a68.js","chunk-dep2-88c5c49b.js","entry-main2-71e00327.js"])
console.log('referenced asset in renderChunk', 'asset-test-9f86d081');
@@ -1,4 +1,4 @@
define(['require', './chunk-dep2-5e5c0a2b'], (function (require, dep2) { 'use strict';
define(['require', './chunk-dep2-88c5c49b'], (function (require, dep2) { 'use strict';

var num = 3;
console.log('referenced asset', new URL(require.toUrl('./asset-test-9f86d081'), document.baseURI).href);
Expand All @@ -20,15 +20,15 @@ console.log({
"name": "main2",
"type": "chunk",
"dynamicImports": [],
"fileName": "entry-main2-8423cd41.js",
"fileName": "entry-main2-71e00327.js",
"implicitlyLoadedBefore": [],
"importedBindings": {
"chunk-dep2-5e5c0a2b.js": [
"chunk-dep2-88c5c49b.js": [
"num"
]
},
"imports": [
"chunk-dep2-5e5c0a2b.js"
"chunk-dep2-88c5c49b.js"
],
"modules": {
"**/dep3.js": {
Expand All @@ -52,5 +52,5 @@ console.log({
"asset-test-9f86d081"
]
});
console.log('all chunks', ["entry-main1-92387c07.js","chunk-dep2-5e5c0a2b.js","entry-main2-8423cd41.js"])
console.log('all chunks', ["entry-main1-87907a68.js","chunk-dep2-88c5c49b.js","entry-main2-71e00327.js"])
console.log('referenced asset in renderChunk', 'asset-test-9f86d081');
Expand Up @@ -18,7 +18,7 @@ console.log({
"name": "dep2",
"type": "chunk",
"dynamicImports": [],
"fileName": "chunk-dep2-b09f6eac.js",
"fileName": "chunk-dep2-970ee28f.js",
"implicitlyLoadedBefore": [],
"importedBindings": {},
"imports": [],
Expand All @@ -37,5 +37,5 @@ console.log({
"asset-test-9f86d081"
]
});
console.log('all chunks', ["entry-main1-465ee0c3.js","chunk-dep2-b09f6eac.js","entry-main2-333fdc53.js"])
console.log('all chunks', ["entry-main1-6d518561.js","chunk-dep2-970ee28f.js","entry-main2-a4b8e424.js"])
console.log('referenced asset in renderChunk', 'asset-test-9f86d081');
@@ -1,6 +1,6 @@
'use strict';

var dep2 = require('./chunk-dep2-b09f6eac.js');
var dep2 = require('./chunk-dep2-970ee28f.js');

var num = 1;
console.log('referenced asset', (typeof document === 'undefined' ? new (require('u' + 'rl').URL)('file:' + __dirname + '/asset-test-9f86d081').href : new URL('asset-test-9f86d081', document.currentScript && document.currentScript.src || document.baseURI).href));
Expand All @@ -20,15 +20,15 @@ console.log({
"name": "main1",
"type": "chunk",
"dynamicImports": [],
"fileName": "entry-main1-465ee0c3.js",
"fileName": "entry-main1-6d518561.js",
"implicitlyLoadedBefore": [],
"importedBindings": {
"chunk-dep2-b09f6eac.js": [
"chunk-dep2-970ee28f.js": [
"num"
]
},
"imports": [
"chunk-dep2-b09f6eac.js"
"chunk-dep2-970ee28f.js"
],
"modules": {
"**/dep1.js": {
Expand All @@ -52,5 +52,5 @@ console.log({
"asset-test-9f86d081"
]
});
console.log('all chunks', ["entry-main1-465ee0c3.js","chunk-dep2-b09f6eac.js","entry-main2-333fdc53.js"])
console.log('all chunks', ["entry-main1-6d518561.js","chunk-dep2-970ee28f.js","entry-main2-a4b8e424.js"])
console.log('referenced asset in renderChunk', 'asset-test-9f86d081');
@@ -1,6 +1,6 @@
'use strict';

var dep2 = require('./chunk-dep2-b09f6eac.js');
var dep2 = require('./chunk-dep2-970ee28f.js');

var num = 3;
console.log('referenced asset', (typeof document === 'undefined' ? new (require('u' + 'rl').URL)('file:' + __dirname + '/asset-test-9f86d081').href : new URL('asset-test-9f86d081', document.currentScript && document.currentScript.src || document.baseURI).href));
Expand All @@ -20,15 +20,15 @@ console.log({
"name": "main2",
"type": "chunk",
"dynamicImports": [],
"fileName": "entry-main2-333fdc53.js",
"fileName": "entry-main2-a4b8e424.js",
"implicitlyLoadedBefore": [],
"importedBindings": {
"chunk-dep2-b09f6eac.js": [
"chunk-dep2-970ee28f.js": [
"num"
]
},
"imports": [
"chunk-dep2-b09f6eac.js"
"chunk-dep2-970ee28f.js"
],
"modules": {
"**/dep3.js": {
Expand All @@ -52,5 +52,5 @@ console.log({
"asset-test-9f86d081"
]
});
console.log('all chunks', ["entry-main1-465ee0c3.js","chunk-dep2-b09f6eac.js","entry-main2-333fdc53.js"])
console.log('all chunks', ["entry-main1-6d518561.js","chunk-dep2-970ee28f.js","entry-main2-a4b8e424.js"])
console.log('referenced asset in renderChunk', 'asset-test-9f86d081');
Expand Up @@ -16,7 +16,7 @@ console.log({
"name": "dep2",
"type": "chunk",
"dynamicImports": [],
"fileName": "chunk-dep2-124edba5.js",
"fileName": "chunk-dep2-f4e7f39c.js",
"implicitlyLoadedBefore": [],
"importedBindings": {},
"imports": [],
Expand All @@ -35,5 +35,5 @@ console.log({
"asset-test-9f86d081"
]
});
console.log('all chunks', ["entry-main1-b12147aa.js","chunk-dep2-124edba5.js","entry-main2-09746024.js"])
console.log('all chunks', ["entry-main1-bb9f9ac2.js","chunk-dep2-f4e7f39c.js","entry-main2-2ba44c5c.js"])
console.log('referenced asset in renderChunk', 'asset-test-9f86d081');
@@ -1,4 +1,4 @@
import { n as num$1 } from './chunk-dep2-124edba5.js';
import { n as num$1 } from './chunk-dep2-f4e7f39c.js';

var num = 1;
console.log('referenced asset', new URL('asset-test-9f86d081', import.meta.url).href);
Expand All @@ -18,15 +18,15 @@ console.log({
"name": "main1",
"type": "chunk",
"dynamicImports": [],
"fileName": "entry-main1-b12147aa.js",
"fileName": "entry-main1-bb9f9ac2.js",
"implicitlyLoadedBefore": [],
"importedBindings": {
"chunk-dep2-124edba5.js": [
"chunk-dep2-f4e7f39c.js": [
"n"
]
},
"imports": [
"chunk-dep2-124edba5.js"
"chunk-dep2-f4e7f39c.js"
],
"modules": {
"**/dep1.js": {
Expand All @@ -50,5 +50,5 @@ console.log({
"asset-test-9f86d081"
]
});
console.log('all chunks', ["entry-main1-b12147aa.js","chunk-dep2-124edba5.js","entry-main2-09746024.js"])
console.log('all chunks', ["entry-main1-bb9f9ac2.js","chunk-dep2-f4e7f39c.js","entry-main2-2ba44c5c.js"])
console.log('referenced asset in renderChunk', 'asset-test-9f86d081');
@@ -1,4 +1,4 @@
import { n as num$1 } from './chunk-dep2-124edba5.js';
import { n as num$1 } from './chunk-dep2-f4e7f39c.js';

var num = 3;
console.log('referenced asset', new URL('asset-test-9f86d081', import.meta.url).href);
Expand All @@ -18,15 +18,15 @@ console.log({
"name": "main2",
"type": "chunk",
"dynamicImports": [],
"fileName": "entry-main2-09746024.js",
"fileName": "entry-main2-2ba44c5c.js",
"implicitlyLoadedBefore": [],
"importedBindings": {
"chunk-dep2-124edba5.js": [
"chunk-dep2-f4e7f39c.js": [
"n"
]
},
"imports": [
"chunk-dep2-124edba5.js"
"chunk-dep2-f4e7f39c.js"
],
"modules": {
"**/dep3.js": {
Expand All @@ -50,5 +50,5 @@ console.log({
"asset-test-9f86d081"
]
});
console.log('all chunks', ["entry-main1-b12147aa.js","chunk-dep2-124edba5.js","entry-main2-09746024.js"])
console.log('all chunks', ["entry-main1-bb9f9ac2.js","chunk-dep2-f4e7f39c.js","entry-main2-2ba44c5c.js"])
console.log('referenced asset in renderChunk', 'asset-test-9f86d081');
Expand Up @@ -23,7 +23,7 @@ console.log({
"name": "dep2",
"type": "chunk",
"dynamicImports": [],
"fileName": "chunk-dep2-6579036d.js",
"fileName": "chunk-dep2-ea1348fd.js",
"implicitlyLoadedBefore": [],
"importedBindings": {},
"imports": [],
Expand All @@ -42,5 +42,5 @@ console.log({
"asset-test-9f86d081"
]
});
console.log('all chunks', ["entry-main1-331def45.js","chunk-dep2-6579036d.js","entry-main2-7bacea36.js"])
console.log('all chunks', ["entry-main1-118e1de4.js","chunk-dep2-ea1348fd.js","entry-main2-34191286.js"])
console.log('referenced asset in renderChunk', 'asset-test-9f86d081');