UNPKG

2.45 kBPlain TextView Raw
1import fs = require("fs");
2import path = require("path");
3import crc32 = require("crc32");
4import { FileUtil } from "./tool/FileUtil";
5class FileCrc32 {
6 constructor(baseUrl:string){
7 var self = this;
8 var xmUrl = self.getXMUrl(baseUrl);
9 var relUrl = path.join(xmUrl,'bin-release');
10 FileUtil.rmdirSync(path.join(relUrl,'resource'));
11 var defaultUrl = path.join(xmUrl,'resource','default.res.json');
12 var defData = JSON.parse(fs.readFileSync(defaultUrl,'utf-8'));
13 var resources = defData.resources;
14 var res:any;
15 for(var i = 0, len = resources.length; i < len; i++)
16 {
17 res = resources[i];
18 var resHash = '';
19 var itemUrl = path.join(xmUrl,'resource',res.url);
20 if(res.type == 'sheet')
21 {
22 var filename = FileUtil.filename(itemUrl);
23 var sheetJson = JSON.parse(fs.readFileSync(itemUrl,'utf-8'));
24 var pngNameArr = sheetJson.file.split('.');
25 var hash = self.hashItem(path.join(path.dirname(itemUrl),sheetJson.file));
26 sheetJson.file = pngNameArr[0] + '_' + hash + '.' + pngNameArr[1];
27 resHash = self.hashItem(itemUrl,new Buffer(JSON.stringify(sheetJson)));
28 }
29 else
30 {
31 resHash = self.hashItem(itemUrl);
32 }
33 var resUrlArr = res.url.split('.');
34 var ext = resUrlArr.pop();
35 res.url = resUrlArr.join('.') + '_' + resHash + '.' + ext;
36 }
37 fs.writeFileSync(defaultUrl.replace(xmUrl,relUrl), new Buffer(JSON.stringify(defData, null, '\t')))
38 }
39
40 private hashItem(itemUrl:string,contents?:Buffer):string
41 {
42 var self = this;
43 if(!contents) {
44 contents = fs.readFileSync(itemUrl);
45 }
46 var xmUrl = self.getXMUrl(itemUrl);
47 var relUrl = path.join(xmUrl,'bin-release');
48 var hash = crc32(contents);
49 var filename = FileUtil.filename(itemUrl);
50 var toUrl = filename.replace(xmUrl,relUrl) + '_' + hash + path.extname(itemUrl);
51 FileUtil.mkdirSync(path.dirname(toUrl));
52 fs.writeFileSync(toUrl,contents);
53 return hash;
54 }
55
56 private getXMUrl(url:string):string
57 {
58 return '';
59 }
60}
61
62export function run(baseUrl:string):void{
63 new FileCrc32(baseUrl);
64}
\No newline at end of file