quickgame-cli
Version:
quickgame cli
1 lines • 4.85 kB
JavaScript
var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault"),_defineProperty2=(Object.defineProperty(exports,"__esModule",{value:!0}),exports.DIGEST_ZIP_PATH=void 0,exports.allocateResourceToPackages=allocateResourceToPackages,exports.createPackagesDefinition=createPackagesDefinition,exports.signZipPkgs=signZipPkgs,_interopRequireDefault(require("@babel/runtime/helpers/defineProperty"))),_path=_interopRequireDefault(require("path")),_fs=_interopRequireDefault(require("fs")),_jszip=_interopRequireDefault(require("jszip")),_sign=require("../sign"),_utils=require("../utils");function ownKeys(t,e){var n,r=Object.keys(t);return Object.getOwnPropertySymbols&&(n=Object.getOwnPropertySymbols(t),e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)),r}function _objectSpread(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?ownKeys(Object(n),!0).forEach(function(e){(0,_defineProperty2.default)(t,e,n[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):ownKeys(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}var MAIN_PKG_NAME="main",DIGEST_ZIP_PATH=exports.DIGEST_ZIP_PATH="META-INF/CERT",DEIGEST_HASH_JSON="hash.json",SINGLE_PKG_SIZE=5242880,FULL_PKG_SIZE=2*SINGLE_PKG_SIZE,COMPRESS_OPTS={type:"nodebuffer",compression:"DEFLATE",compressionOptions:{level:9}};function ClassPkgDef(e){Object.assign(this,{fileName:null,standalone:!1,subMatch:null,resourceList:[]},e)}function createFullPackage(){return new ClassPkgDef({fileName:"rpk",standalone:!0})}function createSubPackages(e){var i=[],t=new ClassPkgDef({fileName:MAIN_PKG_NAME+".rpk",standalone:!0});return i.push(t),e.forEach(function(e){var t=e.root||e.resource,n=t,n=/\.js$/.test(t)?t:t+".*",r=t.split("/").filter(function(e){return!!e}),t=1<r.length&&t.endsWith(".js")?r.slice(0,r.length-1).join("/")+"/.*":n,r=new ClassPkgDef({subMatch:new RegExp(n,"i"),fileMatch:new RegExp(t,"i"),fileName:e.name+".rpk",standalone:e.standalone||!1});i.push(r)}),i}function createPackagesDefinition(e){var t;return{fullPackage:createFullPackage(),subPackages:t=e&&0<e.length?createSubPackages(e):t}}function allocateResourceToPackages(e,s,o,c){e.forEach(function(e){var t=_path.default.join(s,e),t=_fs.default.readFileSync(t),n=[e,t,(0,_sign.getBufferDigest)(t)];if(o.addResource.apply(o,n),!c)return{fullPackage:o};for(var r=!0,i=1;i<c.length;i++){var a=c[i];if(a.standalone&&"manifest.json"===e&&a.addResource.apply(a,n),a.fileMatch.test(e)){r=!1,a.addResource.apply(a,n);break}}r&&(t=c[0]).addResource.apply(t,n)})}function signZipResourcesMeta(e,n,r){var t={},e=(e.forEach(function(e){t[e.fileBuildPath]=e.fileContentDigest.toString("hex")}),new _jszip.default);return e.file(DEIGEST_HASH_JSON,JSON.stringify({algorithm:"SHA-256",digests:t})),e.generateAsync(COMPRESS_OPTS).then(function(e){var t={name:DEIGEST_HASH_JSON,hash:(0,_sign.getBufferDigest)(e)};return(0,_sign.signZip)(e,[t],n,r)})}function signPackageZip(e,n,r,i){var a=e.resourceList,s=new _jszip.default,o=a.map(function(e){return{name:e.fileBuildPath,hash:e.fileContentDigest}});return new Promise(function(t){i?t():signZipResourcesMeta(a,n,r).then(function(e){s.file(DIGEST_ZIP_PATH,e),o.unshift({name:DIGEST_ZIP_PATH,hash:(0,_sign.getBufferDigest)(e)}),t()})}).then(function(){var e=_objectSpread({},COMPRESS_OPTS);return a.forEach(function(e){s.file(e.fileBuildPath,e.fileContentBuffer)}),s.generateAsync(e)}).then(function(e){return(0,_sign.signZip)(e,o,n,r)})}function signZipPkgs(n,s,o,c,u,f){return signPackageZip(c,s,o,f).then(function(t){var r,i,a,e;return u?(r=new _jszip.default,i=[],a=0,e=u.map(function(e){return signPackageZip(e,s,o,f)}),Promise.all(e).then(function(e){e.forEach(function(e,t){var t=u[t],t="".concat(t.fileName),n=e.length;a+=n,_utils.colorconsole.log("### App Loader ### '".concat(t,"' 大小为 ").concat(Math.ceil(n/1024)," KB")),SINGLE_PKG_SIZE<n&&_utils.colorconsole.warn("### App Loader ### 每个分包大小不能大于 ".concat(SINGLE_PKG_SIZE/1024," KB, '").concat(t,"' 已超出")),r.file(t,e),i.push({name:t,hash:(0,_sign.getBufferDigest)(e)})}),FULL_PKG_SIZE<a&&_utils.colorconsole.warn("### App Loader ### 所有分包总和大小不能大于 ".concat(FULL_PKG_SIZE/1024," KB, 已超出"));e="".concat(n,".").concat(c.fileName);return r.file(e,t),i.push({name:e,hash:(0,_sign.getBufferDigest)(t)}),r.generateAsync(COMPRESS_OPTS)}).then(function(e){return{rpksBuffer:(0,_sign.signZip)(e,i,s,o),rpkBuffer:t}})):{rpkBuffer:t}})}ClassPkgDef.prototype.addResource=function(e,t,n){if(this.resourceList[e])throw new Error("### App Loader ### ".concat(e," 文件重复添加"));this.resourceList[e]=!0,this.resourceList.push({fileBuildPath:e,fileContentBuffer:t,fileContentDigest:n})};