zarbis
Version:
Configuration-less build tool
39 lines • 1.58 kB
JavaScript
function encodeJS(codeSource) {
const tokens = [];
const result = `eval(((la,ch)=>la.match(/[a-zA-Zа-яА-Я0-9]+|[^a-zA-Zа-яА-Я0-9]+/g).map(t=>/[a-z0-9]+/.test(t)?ch[parseInt(t,36)]:t).join(''))('` + codeSource.replace(/\\/g, '\\\\').replace(/'/g, '\\\'').replace(/\n/g, '\\n').replace(/[a-zA-Zа-яА-Я0-9]+/g, e => {
if (tokens.indexOf(e) === -1) {
tokens.push(e);
}
return tokens.indexOf(e).toString(36);
}) + `','${tokens.join(',')}'.split(',')))`;
return result;
}
const PLUGIN_NAME = 'PackerPlugin';
export default class PackerPlugin {
apply(compiler) {
compiler.hooks.emit.tapAsync(PLUGIN_NAME, (compilation, callback) => {
compilation.chunks.forEach((chunk) => {
chunk.files.forEach((filename) => {
if (!filename.endsWith('js') || !compilation.assets[filename]) {
return;
}
const source = compilation.assets[filename].source();
const code = encodeJS(source);
compilation.assets[filename] = {
source() {
return code;
},
map() {
return null;
},
size() {
return code.length;
}
};
});
});
callback();
});
}
}
//# sourceMappingURL=PackerPlugin.js.map