You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
138 lines
4.0 KiB
138 lines
4.0 KiB
let Fs = require('fs');
|
|
|
|
Editor.Panel.extend({
|
|
|
|
style: Fs.readFileSync(Editor.url('packages://ccc-obfuscated-code/panel/index.css'), 'utf8'),
|
|
|
|
template: Fs.readFileSync(Editor.url('packages://ccc-obfuscated-code/panel/index.html'), 'utf8'),
|
|
|
|
ready() {
|
|
let vue = new window.Vue({
|
|
el: this.shadowRoot,
|
|
|
|
data() {
|
|
return {
|
|
isSaving: false,
|
|
|
|
auto: false,
|
|
files: '/src/project.js',
|
|
useAbsPath: false,
|
|
preset: 'low',
|
|
options: {
|
|
compact: true,
|
|
controlFlowFlattening: false,
|
|
controlFlowFlatteningThreshold: 0.75,
|
|
deadCodeInjection: false,
|
|
deadCodeInjectionThreshold: 0.4,
|
|
debugProtection: false,
|
|
debugProtectionInterval: false,
|
|
disableConsoleOutput: false,
|
|
domainLock: '',
|
|
identifierNamesGenerator: 'hexadecimal',
|
|
identifiersDictionary: '',
|
|
identifiersPrefix: '',
|
|
inputFileName: '',
|
|
log: false,
|
|
renameGlobals: false,
|
|
reservedNames: '',
|
|
reservedStrings: '',
|
|
rotateStringArray: false,
|
|
seed: 0,
|
|
selfDefending: false,
|
|
shuffleStringArray: false,
|
|
sourceMap: false,
|
|
sourceMapBaseUrl: '',
|
|
sourceMapFileName: '',
|
|
sourceMapMode: 'separate',
|
|
splitStrings: false,
|
|
splitStringsChunkLength: 10,
|
|
stringArray: false,
|
|
stringArrayEncoding: false,
|
|
stringArrayThreshold: 0.8,
|
|
target: 'browser',
|
|
transformObjectKeys: false,
|
|
unicodeEscapeSequence: false
|
|
}
|
|
}
|
|
},
|
|
|
|
watch: {
|
|
options: {
|
|
handler(value) {
|
|
if (value.deadCodeInjection) vue.options.stringArray = true;
|
|
},
|
|
deep: true
|
|
}
|
|
},
|
|
|
|
methods: {
|
|
/**
|
|
* 保存配置
|
|
*/
|
|
saveConfig() {
|
|
if (this.isSaving) return;
|
|
this.isSaving = true;
|
|
|
|
let config = {
|
|
auto: this.auto,
|
|
files: this.files.split(','),
|
|
useAbsPath: this.useAbsPath,
|
|
preset: this.preset,
|
|
options: {}
|
|
};
|
|
for (let key in this.options) {
|
|
switch (key) {
|
|
case 'domainLock': case 'identifiersDictionary': case 'reservedNames': case 'reservedStrings':
|
|
config.options[key] = this.options[key] == '' ? [] : this.options[key].split(',');
|
|
break;
|
|
case 'stringArrayEncoding':
|
|
config.options[key] = this.options.stringArrayEncoding == 'true' ||
|
|
this.options.stringArrayEncoding == 'false' ?
|
|
Boolean(this.options.stringArrayEncoding) :
|
|
this.options.stringArrayEncoding;
|
|
break;
|
|
default:
|
|
config.options[key] = this.options[key];
|
|
break;
|
|
}
|
|
}
|
|
|
|
Editor.Ipc.sendToMain('ccc-obfuscated-code:save-config', config, (err, msg) => {
|
|
this.isSaving = false;
|
|
});
|
|
},
|
|
|
|
/**
|
|
* 读取配置
|
|
*/
|
|
readConfig() {
|
|
Editor.Ipc.sendToMain('ccc-obfuscated-code:read-config', (err, config) => {
|
|
if (err) return;
|
|
this.auto = config.auto;
|
|
this.files = config.files.join(',');
|
|
this.useAbsPath = config.useAbsPath;
|
|
this.preset = config.preset;
|
|
for (let key in config.options) {
|
|
this.options[key] = Array.isArray(config.options[key]) ? config.options[key].join(',') : config.options[key];
|
|
}
|
|
});
|
|
},
|
|
|
|
/**
|
|
* 读取预设
|
|
*/
|
|
getPreset() {
|
|
Editor.Ipc.sendToMain('ccc-obfuscated-code:get-preset', this.preset, (err, options) => {
|
|
for (let key in options) {
|
|
this.options[key] = options[key];
|
|
}
|
|
});
|
|
}
|
|
|
|
}
|
|
});
|
|
|
|
vue.readConfig();
|
|
}
|
|
|
|
}); |