-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
42 lines (36 loc) · 1.16 KB
/
index.js
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
class UnicodeEscapePlugin {
constructor(options = {}) {
this.test = options.test || /\.js$/; // Files to process
}
apply(compiler) {
compiler.hooks.emit.tapAsync(
"UnicodeEscapePlugin",
(compilation, callback) => {
// Iterate over all compiled assets
Object.keys(compilation.assets).forEach((filename) => {
if (this.test.test(filename)) {
const asset = compilation.assets[filename];
let source = asset.source();
// Ensure the source is a string
if (typeof source !== "string") {
source = source.toString("utf8");
}
// Escape Unicode characters
const escapedSource = source.replace(/[\u007f-\uffff]/g, (char) => {
return (
"\\u" + ("0000" + char.charCodeAt(0).toString(16)).slice(-4)
);
});
// Update the asset
compilation.assets[filename] = {
source: () => escapedSource,
size: () => escapedSource.length,
};
}
});
callback();
}
);
}
}
module.exports = UnicodeEscapePlugin;