import fs = require("fs"); import path = require("path"); import crc32 = require("crc32"); import { FileUtil } from "./tool/FileUtil"; class FileCrc32 { constructor(baseUrl:string){ var self = this; var xmUrl = self.getXMUrl(baseUrl); var relUrl = path.join(xmUrl,'bin-release'); FileUtil.rmdirSync(path.join(relUrl,'resource')); var defaultUrl = path.join(xmUrl,'resource','default.res.json'); var defData = JSON.parse(fs.readFileSync(defaultUrl,'utf-8')); var resources = defData.resources; var res:any; for(var i = 0, len = resources.length; i < len; i++) { res = resources[i]; var resHash = ''; var itemUrl = path.join(xmUrl,'resource',res.url); if(res.type == 'sheet') { var filename = FileUtil.filename(itemUrl); var sheetJson = JSON.parse(fs.readFileSync(itemUrl,'utf-8')); var pngNameArr = sheetJson.file.split('.'); var hash = self.hashItem(path.join(path.dirname(itemUrl),sheetJson.file)); sheetJson.file = pngNameArr[0] + '_' + hash + '.' + pngNameArr[1]; resHash = self.hashItem(itemUrl,new Buffer(JSON.stringify(sheetJson))); } else { resHash = self.hashItem(itemUrl); } var resUrlArr = res.url.split('.'); var ext = resUrlArr.pop(); res.url = resUrlArr.join('.') + '_' + resHash + '.' + ext; } fs.writeFileSync(defaultUrl.replace(xmUrl,relUrl), new Buffer(JSON.stringify(defData, null, '\t'))) } private hashItem(itemUrl:string,contents?:Buffer):string { var self = this; if(!contents) { contents = fs.readFileSync(itemUrl); } var xmUrl = self.getXMUrl(itemUrl); var relUrl = path.join(xmUrl,'bin-release'); var hash = crc32(contents); var filename = FileUtil.filename(itemUrl); var toUrl = filename.replace(xmUrl,relUrl) + '_' + hash + path.extname(itemUrl); FileUtil.mkdirSync(path.dirname(toUrl)); fs.writeFileSync(toUrl,contents); return hash; } private getXMUrl(url:string):string { return ''; } } export function run(baseUrl:string):void{ new FileCrc32(baseUrl); }