UNPKG

5.02 kBPlain TextView Raw
1import fileUtil = require("./tool/FileUtil");
2import fs = require("fs");
3import path = require("path");
4class MainJSHX {
5
6 private _jsUrl: string;
7 private _toUrl: string;
8 constructor(jsUrl: string,toUrl:string) {
9 var self = this;
10 if(!jsUrl)
11 {
12 console.log('没有填写mian.min.js的保存,请重试');
13 return;
14 }
15 self._jsUrl = jsUrl;
16 self._toUrl = toUrl || jsUrl;
17 self.trans();
18 }
19
20 private trans():void
21 {
22 let self = this;
23 fileUtil.FileUtil.walkDir(path.join(this._jsUrl),self.onFile,null,self);
24
25 fs.writeFileSync(path.join(this._toUrl, 'o2nName.json'), JSON.stringify(self._o2nName));
26 //转义字符:'\n':换行符 '\t':制表符 '\r':回车
27 self._paramJson['byhescape'] = {linefeed:'\n',tab:'\t',enter:'\r'};
28 fs.writeFileSync(path.join(this._toUrl, 'jsparam.json'), JSON.stringify(self._paramJson));
29 }
30
31 private onFile(url:string):void
32 {
33 let type = path.basename(url).split('.')[0];
34 var jsStr = fs.readFileSync(url, 'utf-8');
35 let paramVal = 'window.cqjsparammap.' + type;
36 if (jsStr.indexOf(paramVal) >= 0) {
37 console.log(paramVal + '已提取过!!!');
38 return;
39 }
40 var startStr = '(function(){var b=';
41 var endStr = '"];function ';
42 var startIdx = jsStr.indexOf(startStr);
43 if (startIdx == -1) {
44 startStr = '(function(){var g=';
45 startIdx = jsStr.indexOf(startStr);
46 }
47 var headStr = jsStr.slice(0, startIdx - 1);
48 jsStr = this.glcf(headStr) + ';' + jsStr.slice(startIdx);
49 startIdx = jsStr.indexOf(startStr) + startStr.length;
50 var endIdx = jsStr.indexOf(endStr) + 1;
51 var paramStr = '';
52 var char = void 0;
53 while (startIdx <= endIdx) {
54 char = jsStr[startIdx];
55 paramStr += jsStr[startIdx];
56 startIdx++;
57 }
58 this.transJson(paramStr,type);
59 jsStr = jsStr.replace(paramStr, paramVal);
60
61 jsStr = this.thfz(jsStr,'particlesys');
62 jsStr = this.thfz(jsStr,'byh');
63 fs.writeFileSync(url.replace(this._jsUrl,this._toUrl), jsStr);
64 }
65
66 private thfz(mainjs:string,name:string):string
67 {
68 var namespace = name + '|| (' + name + '= {})';
69 var byhIdx = mainjs.indexOf(namespace);
70 if(byhIdx >= 0)
71 {
72 while (byhIdx--) {
73 if (mainjs[byhIdx] == ';') {
74 byhIdx++;
75 mainjs = mainjs.slice(0, byhIdx) + 'ssdgregdsrwetyetjh' + fileUtil.FileUtil.replace(mainjs.slice(byhIdx), namespace, name);
76 mainjs = mainjs.replace('ssdgregdsrwetyetjh', namespace + ';');
77 break;
78 }
79 }
80 }
81 return mainjs;
82 }
83
84 private glcf(str:string):string
85 {
86 let strArr = str.split(',');
87 let newStrArr = [];
88 for(let i = 0, len = strArr.length; i < len; i++)
89 {
90 if(newStrArr.indexOf(strArr[i]) < 0) newStrArr.push(strArr[i]);
91 }
92
93 let newStr = '';
94 for(let j = 0, len = newStrArr.length; j < len; j++)
95 {
96 if(newStr) newStr += ',';
97 newStr += newStrArr[j];
98 }
99 return newStr;
100 }
101
102 private _paramJson = {};
103 private _o2nName = {};
104 private transJson(paramsStr:string, type:string): void {
105 var paramArr = JSON.parse(paramsStr);
106 let fiters = ['ChangeJobNewRder','BabelRoleRen','CrBossHead','CrBossRoleRen','CrBossRoleRightRen','CrossHSFamilyCar','CSPlaysetRender','CMovieClip','CrSandyEnemyView','MnRbEui','Dispatcher','GameEvent','SoulTaskRder','SXMagicItm'];
107 var paramStr:string;
108 var byhArr = [];
109 for(let i = 0, len = paramArr.length; i < len; i++)
110 {
111 paramStr = paramArr[i];
112 if(paramStr.indexOf('byh.') == 0)
113 {
114 let subStrArr = paramStr.split('byh.');
115 let subStr = subStrArr[1];
116 if(fiters.indexOf(subStr) < 0)
117 {
118 byhArr.push(subStr);
119 byhArr.push(paramStr);
120 }
121 }
122 }
123
124 let idx = 0;
125 let newName:string;
126 for(let i = 0, len = paramArr.length; i < len; i++)
127 {
128 paramStr = paramArr[i];
129 if(byhArr.indexOf(paramStr) >= 0)
130 {
131 newName = this._o2nName[paramStr];
132 if(!newName) {
133 newName = this._o2nName[paramStr] = 'H_F_' + idx;
134 idx++;
135 }
136 paramArr[i] = newName;
137 }
138 }
139 this._paramJson[type] = paramArr;
140 }
141}
142
143export function run(jsUrl: string,toUrl): void {
144 new MainJSHX(jsUrl,toUrl);
145}
\No newline at end of file