-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathminify.ts
More file actions
51 lines (45 loc) · 1.41 KB
/
minify.ts
File metadata and controls
51 lines (45 loc) · 1.41 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import fs from 'fs';
let ctr = 0;
const file = './dist/app.min.js';
const letters = 'opqrstuvwyxz';
const isFree = (letter: string, text: string) => !new RegExp(
'function ' + letter + '\\(|function(?: [a-z0-9_]+)?\\((?:[a-z],)*?' + letter +
'(?:,[a-z])*?\\)|var (?:[a-z][^,;]*?,)*?' + letter + '[^a-z:]'
).exec(text);
const put = (text: string) => {
ctr = 0;
return () => {
ctr++;
return text;
};
};
function* safeVar(text: string) {
for (let i = 0; i < letters.length; i++) {
for (let j = 0; j < letters.length; j++) {
const letter = letters.charAt(i) + letters.charAt(j);
if (isFree(letter, text))
yield letter;
}
}
}
const replace = [
// 'React.createElement',
'Object.defineProperty',
// 'Object.setPrototypeOf',
// 'Object.create',
// 'Object.getPrototypeOf',
'Object',
'Symbol.iterator',
// 'Array.isArray',
];
const originalJs = fs.readFileSync(file, 'utf8');
let updatedJs = originalJs.replace(/throw new .*?Error\((["'].*?["'](\+.*?)?)+\)/g, put('throw null'));
console.log('Removed', ctr, 'Error Throws');
const generate = safeVar(updatedJs);
replace.forEach((oldName, index) => {
const newName = generate.next().value;
if (!newName) return;
updatedJs = `${newName}=${oldName}${index ? ',' : ';'}` + updatedJs.replace(new RegExp(oldName, 'g'), put(newName));
console.log('Replaced', ctr, oldName);
});
fs.writeFileSync(file, updatedJs.trimEnd(), 'utf8');