Skip to content

Commit

Permalink
[v3.0] Use ASCII characters for hash placeholders (#4631)
Browse files Browse the repository at this point in the history
* Use ASCII characters for hash placeholders

* Back to 8 character hashes with base-64 encoding

3.0.0-6

Improve issue comment RegExp
  • Loading branch information
lukastaegert committed Oct 11, 2022
1 parent 015f6e5 commit 07913b3
Show file tree
Hide file tree
Showing 67 changed files with 80 additions and 78 deletions.
2 changes: 1 addition & 1 deletion browser/package.json
@@ -1,6 +1,6 @@
{
"name": "@rollup/browser",
"version": "3.0.0-5",
"version": "3.0.0-6",
"description": "Next-generation ES module bundler browser build",
"main": "dist/rollup.browser.js",
"module": "dist/es/rollup.browser.js",
Expand Down
2 changes: 1 addition & 1 deletion package.json
@@ -1,6 +1,6 @@
{
"name": "rollup",
"version": "3.0.0-5",
"version": "3.0.0-6",
"description": "Next-generation ES module bundler",
"main": "dist/rollup.js",
"module": "dist/es/rollup.js",
Expand Down
2 changes: 1 addition & 1 deletion scripts/release.js
Expand Up @@ -147,7 +147,7 @@ async function getIncludedPRs(changelog, repo) {
`v${currentVersion}..HEAD`,
'--pretty=tformat:%s'
]);
const getPrRegExp = /^([^(]+)\s\(#(\d+)\)$/gm;
const getPrRegExp = /^(.+)\s\(#(\d+)\)$/gm;
const prs = [];
let match;
while ((match = getPrRegExp.exec(commits))) {
Expand Down
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');

0 comments on commit 07913b3

Please sign in to comment.