1 | import fileUtil = require("./tool/FileUtil");
|
2 | import fs = require("fs");
|
3 | import path = require("path");
|
4 | class 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 |
|
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 |
|
143 | export function run(jsUrl: string,toUrl): void {
|
144 | new MainJSHX(jsUrl,toUrl);
|
145 | } |
\ | No newline at end of file |