ttmg-pack 0.0.29 → 0.0.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -123,4 +123,6 @@ fix: odr 下载逻辑,Array buffer 读写
123
123
  回滚 支持 esmodule 打包,止损加密后解密失败的问题
124
124
 
125
125
  ## 0.0.29
126
- 支持 es module 打包
126
+ 支持 es module 打包
127
+ ## 0.0.30
128
+ 修改类型定义文件
package/dist/index.js CHANGED
@@ -1,10 +1,10 @@
1
1
  /**
2
2
  * ==========================================
3
3
  * @Description: ttmg pack
4
- * @Version: 0.0.29
4
+ * @Version: 0.0.30
5
5
  * @Author: zhanghongyang.mocha
6
- * @Date: 2025-09-03 14:34:01
6
+ * @Date: 2025-09-03 15:00:17
7
7
  * ==========================================
8
8
  */
9
- "use strict";var s=require("fs"),e=require("winston"),t=require("path");require("crypto"),require("zlib");var a=require("fs/promises"),n=require("node-fetch"),i=require("acorn"),c=require("glob"),o=require("magic-string"),r=require("esbuild");function m(s){var e=Object.create(null);return s&&Object.keys(s).forEach(function(t){if("default"!==t){var a=Object.getOwnPropertyDescriptor(s,t);Object.defineProperty(e,t,a.get?a:{enumerable:!0,get:function(){return s[t]}})}}),e.default=s,Object.freeze(e)}var u=m(s),g=m(t);function d(e){s.existsSync(e)||s.mkdirSync(e,{recursive:!0})}const l=new class{constructor(){this.logger=null}init(s,a=!0){this.enableLog=a,this.logger=e.createLogger({level:"info",format:e.format.combine(e.format.timestamp(),e.format.json()),transports:[new e.transports.File({filename:t.join(s,"pack.log")}),new e.transports.Console]})}info(s){this.enableLog&&this.logger.info(s)}error(s){this.enableLog&&this.logger.error(s)}warn(s){this.enableLog&&this.logger.warn(s)}debug(s){this.enableLog&&this.logger.debug(s)}log(s){this.logger.info(s)}setOutput(s){this.output=s}};function f(e){if(!s.existsSync(e))return!1;if(!s.statSync(e).isDirectory())return!1;let a=!0;const n=s.readdirSync(e);for(const i of n){const n=t.join(e,i);if(s.statSync(n).isDirectory()){f(n)||(a=!1)}else a=!1}return!!a&&(s.rmSync(e,{recursive:!0}),!0)}const b="packageConfig.json",p="project.config.json",k="game.json",j="__GAME__",_=".txt",h="_code",y="_asset",v=62914560,S=["ttmg_odr_high_channel","ttmg_odr_middle_channel","ttmg_odr_normal_channel"];function x(e,a=[]){let n=0;if(!s.existsSync(e))return 0;const i=s.readdirSync(e,{withFileTypes:!0});for(const c of i){const i=t.join(e,c.name);c.isDirectory()?a.includes(c.name)||(n+=x(i,a)):c.isFile()&&(n+=s.statSync(i).size)}return n}function w(e){const a=s.readdirSync(e,{withFileTypes:!0});for(const n of a){const a=t.join(e,n.name);if(n.isDirectory())w(a);else if(n.isFile()&&(a.endsWith(".js")||a.endsWith(".js.map")))try{s.unlinkSync(a)}catch(s){}}}function q(e){const a=s.readdirSync(e,{withFileTypes:!0});for(const n of a){const a=t.join(e,n.name);if(n.isDirectory())q(a);else if(n.isFile()&&!a.endsWith(".js")&&!a.endsWith(".js.map"))try{s.unlinkSync(a)}catch(s){}}}const $=["node_modules","__MACOSX"],O=[".DS_Store","Thumbs.db"];async function M(s,e,i=5){const c=[];for(const n of s){const{id:s,packages:i}=n,o=t.join(e,s);await a.mkdir(o,{recursive:!0});for(const s in i){const e=i[s],{code_url:a}=e,n=`${s}.txt`,r=t.join(o,n);c.push({code_url:a,filePath:r,packageName:s})}}await async function(s,e,t){const a=[],n=[];for(const i of e){const c=Promise.resolve().then(()=>t(i));if(a.push(c),s<=e.length){const e=c.then(()=>n.splice(n.indexOf(e),1));n.push(e),n.length>=s&&await Promise.race(n)}}return Promise.all(a)}(i,c,async s=>{const{code_url:e,filePath:t,packageName:i}=s;console.log(`start to download ${i}`);try{const s=await n(e);if(!s.ok)throw new Error(`Failed to fetch ${e}: ${s.statusText}`);const c=Buffer.from(await s.arrayBuffer());await a.writeFile(t,c),console.log(`finish to download ${i}`)}catch(s){console.error(`Error downloading ${i}:`,s)}})}var D={MinisPackagingInfoMap:{mgt083fix6swgscq:{ClientKey:"mgt083fix6swgscq",MinisStage:1,MinisURL:"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us",ODRPackages:'{"__GAME__":{"asset_md5":"dbee9c4f704800eb5bf482be01aecadc","asset_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/__GAME___asset/dbee9c4f704800eb5bf482be01aecadc.txt","code_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/__GAME___code/b42b2a68ce373eb274eedc22351aac02.txt","root":"","main":"game.js"},"chapter":{"asset_md5":"9c4b6cb8dc0b39bfcb275efa0c6b8493","asset_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/chapter_asset/9c4b6cb8dc0b39bfcb275efa0c6b8493.txt","code_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/chapter_code/9ee175f09ca69c65b630cfee23c0e42c.txt","root":"subpackages/chapter","main":"subpackages/chapter/game.js"},"108":{"asset_md5":"b7b3aeafdd70aed9e77fb2f1554d6675","asset_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/108_asset/b7b3aeafdd70aed9e77fb2f1554d6675.txt","code_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/108_code/bdac7d266b4a15af9ca109d1673168a6.txt","root":"subpackages/108","main":"subpackages/108/game.js"},"110":{"asset_md5":"24da51736441ceb88b3d331775004551","asset_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/110_asset/24da51736441ceb88b3d331775004551.txt","code_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/110_code/f7c97cb3aed7acb4091feaf613c56dd3.txt","root":"subpackages/110","main":"subpackages/110/game.js"},"116":{"asset_md5":"690814b650564724a235a4f155cfe5e3","asset_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/116_asset/690814b650564724a235a4f155cfe5e3.txt","code_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/116_code/ddc0d442aef316e3e45cdbac9ccb88eb.txt","root":"subpackages/116","main":"subpackages/116/game.js"},"109":{"asset_md5":"926ebc459e3329a4d9cda7ddf9718bf4","asset_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/109_asset/926ebc459e3329a4d9cda7ddf9718bf4.txt","code_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/109_code/19cbdc3d88a72dbd0c5eb52e89e2635a.txt","root":"subpackages/109","main":"subpackages/109/game.js"},"practice":{"asset_md5":"01d63b100e2cfb80d2d7568d11f346f8","asset_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/practice_asset/01d63b100e2cfb80d2d7568d11f346f8.txt","code_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/practice_code/2275ac8e93d1c5dd100427aa948cd23c.txt","root":"subpackages/practice","main":"subpackages/practice/game.js"},"game2":{"asset_md5":"9f1bb086f7587aada8312315f2dd94fc","asset_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/game2_asset/9f1bb086f7587aada8312315f2dd94fc.txt","code_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/game2_code/49d07e848cae8eb08428bfbf225a6f30.txt","root":"subpackages/game2","main":"subpackages/game2/game.js"},"game3":{"asset_md5":"bc4b09b1177a35fd8516b8fd5bb9b4e4","asset_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/game3_asset/bc4b09b1177a35fd8516b8fd5bb9b4e4.txt","code_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/game3_code/7f3c18114afd5b3d4fd8c39dd2481cf1.txt","root":"subpackages/game3","main":"subpackages/game3/game.js"},"resSps":{"asset_md5":"4e72c930e3c8f77bda25be975e3c8019","asset_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/resSps_asset/4e72c930e3c8f77bda25be975e3c8019.txt","code_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/resSps_code/c6ac2ebde3c8c421ca75ff649280d90b.txt","root":"subpackages/resSps","main":"subpackages/resSps/game.js"},"adapter":{"asset_md5":"a44f0cd93ad08da6db427c9dc3ab6fe4","asset_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/adapter_asset/a44f0cd93ad08da6db427c9dc3ab6fe4.txt","code_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/adapter_code/6c3090ba10c12ad637aefa993fe838fc.txt","root":"subpackages/adapter","main":"subpackages/adapter/game.js"},"102":{"asset_md5":"8b39712d9f0ae7549382da9041cc5f56","asset_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/102_asset/8b39712d9f0ae7549382da9041cc5f56.txt","code_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/102_code/b70fb4ea0d05b866a4a32ab4cae418c4.txt","root":"subpackages/102","main":"subpackages/102/game.js"},"106":{"asset_md5":"b22052c8f569db2f00a2ae6fcb8872e6","asset_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/106_asset/b22052c8f569db2f00a2ae6fcb8872e6.txt","code_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/106_code/f13ed6653a2ebb49703d0bc882255cfd.txt","root":"subpackages/106","main":"subpackages/106/game.js"},"118":{"asset_md5":"f787456ee45eccc4c13f20ee21c61858","asset_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/118_asset/f787456ee45eccc4c13f20ee21c61858.txt","code_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/118_code/e595f8ed244752fe2ddc72def8452cd5.txt","root":"subpackages/118","main":"subpackages/118/game.js"},"112":{"asset_md5":"9fe63b5fc31e9b4ccd1ee9fa9ed2913b","asset_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/112_asset/9fe63b5fc31e9b4ccd1ee9fa9ed2913b.txt","code_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/112_code/ebb1a6d341c0013a445f3dbf2600c9ae.txt","root":"subpackages/112","main":"subpackages/112/game.js"},"113":{"asset_md5":"f53882a23326919614b0e9031d28ed39","asset_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/113_asset/f53882a23326919614b0e9031d28ed39.txt","code_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/113_code/666bb07aea74f0a408136c0ac16a04b8.txt","root":"subpackages/113","main":"subpackages/113/game.js"},"game5":{"asset_md5":"6a75dd22dcf0d7c117cfcb03185696e6","asset_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/game5_asset/6a75dd22dcf0d7c117cfcb03185696e6.txt","code_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/game5_code/ed2c8ca8023418099d1232fdc6ac09ae.txt","root":"subpackages/game5","main":"subpackages/game5/game.js"},"main":{"asset_md5":"ecadb8f2a4138a73459e04a8a0c5f470","asset_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/main_asset/ecadb8f2a4138a73459e04a8a0c5f470.txt","code_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/main_code/3b7a7f0869e5392f1e244eef40ad8abe.txt","root":"subpackages/main","main":"subpackages/main/game.js"},"103":{"asset_md5":"069620ed43643956f6b6448c5d360471","asset_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/103_asset/069620ed43643956f6b6448c5d360471.txt","code_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/103_code/64a9caf580b6cd991888751e8ea51222.txt","root":"subpackages/103","main":"subpackages/103/game.js"},"105":{"asset_md5":"82c8cde04fec4456ac6bab8adaef0028","asset_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/105_asset/82c8cde04fec4456ac6bab8adaef0028.txt","code_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/105_code/74e319194a7f5a204504fc3d83131112.txt","root":"subpackages/105","main":"subpackages/105/game.js"},"107":{"asset_md5":"652c5385223642c4a19f823666c8a682","asset_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/107_asset/652c5385223642c4a19f823666c8a682.txt","code_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/107_code/9e717b17251bdc8eefb7b8135fcb6996.txt","root":"subpackages/107","main":"subpackages/107/game.js"},"101":{"asset_md5":"ad3f476d334e695c01f96eef67308f26","asset_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/101_asset/ad3f476d334e695c01f96eef67308f26.txt","code_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/101_code/dcb5f8547d5285c5e116a1726dc1ecdb.txt","root":"subpackages/101","main":"subpackages/101/game.js"},"game4":{"asset_md5":"b98a8892ccb76e5999cbf7a8e81c4cb5","asset_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/game4_asset/b98a8892ccb76e5999cbf7a8e81c4cb5.txt","code_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/game4_code/ebbcf2b74998d340cb8cf85249748992.txt","root":"subpackages/game4","main":"subpackages/game4/game.js"},"sound":{"asset_md5":"65c37817ffc86d942d1942443b5e3fb4","asset_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/sound_asset/65c37817ffc86d942d1942443b5e3fb4.txt","code_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/sound_code/2662512b5aaa6801b6742eb661c44828.txt","root":"subpackages/sound","main":"subpackages/sound/game.js"},"game6":{"asset_md5":"b1407de78d19f60644b53436f1791ee6","asset_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/game6_asset/b1407de78d19f60644b53436f1791ee6.txt","code_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/game6_code/155651953a65a663f67b95475cd5c941.txt","root":"subpackages/game6","main":"subpackages/game6/game.js"},"newYear":{"asset_md5":"c2cb90fbaac0b4b86d1afa7caabd2f20","asset_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/newYear_asset/c2cb90fbaac0b4b86d1afa7caabd2f20.txt","code_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/newYear_code/a7d962b4f7a95e8114fcf00bbe27b8ac.txt","root":"subpackages/newYear","main":"subpackages/newYear/game.js"},"prefab":{"asset_md5":"4c4ba8d442bae683575460e884ddba00","asset_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/prefab_asset/4c4ba8d442bae683575460e884ddba00.txt","code_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/prefab_code/7f037cd7f3b83e90765e749d28f32e3e.txt","root":"subpackages/prefab","main":"subpackages/prefab/game.js"},"104":{"asset_md5":"160c617e3e3adef19c94f57bc4520dba","asset_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/104_asset/160c617e3e3adef19c94f57bc4520dba.txt","code_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/104_code/ef86df3a24fca9ecffc55f7c33ff3747.txt","root":"subpackages/104","main":"subpackages/104/game.js"},"111":{"asset_md5":"3452f073e30ecc6b3727f072a856068b","asset_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/111_asset/3452f073e30ecc6b3727f072a856068b.txt","code_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/111_code/3ca9e57876b82945faedce2ca0ab414e.txt","root":"subpackages/111","main":"subpackages/111/game.js"},"114":{"asset_md5":"c2f81aaf93311b9302995dba105d69d0","asset_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/114_asset/c2f81aaf93311b9302995dba105d69d0.txt","code_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/114_code/7574a218fb4053e2005497d84a56132c.txt","root":"subpackages/114","main":"subpackages/114/game.js"},"other":{"asset_md5":"473ad574dee1813610988dba22fb0acc","asset_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/other_asset/473ad574dee1813610988dba22fb0acc.txt","code_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/other_code/003784b887ff99fb82d47899798e1ee0.txt","root":"subpackages/other","main":"subpackages/other/game.js"},"zh_CN":{"asset_md5":"2b1c715a0c624c630acb29b4fdfcb240","asset_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/zh_CN_asset/2b1c715a0c624c630acb29b4fdfcb240.txt","code_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/zh_CN_code/bb44d46f30e57f29d20bf0678426c7c5.txt","root":"subpackages/zh_CN","main":"subpackages/zh_CN/game.js"},"115":{"asset_md5":"6831f12abfeccc9ff720155d9ece2d53","asset_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/115_asset/6831f12abfeccc9ff720155d9ece2d53.txt","code_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/115_code/76b85e96a57c33c8ba9ff2f316290416.txt","root":"subpackages/115","main":"subpackages/115/game.js"},"117":{"asset_md5":"60206e41273a6a1f6d21bbf634023962","asset_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/117_asset/60206e41273a6a1f6d21bbf634023962.txt","code_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/117_code/1a85a85048eca0d650ad4b8b198cefdc.txt","root":"subpackages/117","main":"subpackages/117/game.js"},"jigsaw":{"asset_md5":"4782715dda5ea0d10897d866a84bca19","asset_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/jigsaw_asset/4782715dda5ea0d10897d866a84bca19.txt","code_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/jigsaw_code/799004f65797d4620549e0d4b27e3794.txt","root":"subpackages/jigsaw","main":"subpackages/jigsaw/game.js"}}',UpdatedTime:1756737196e3,AssetType:1}}};function E(e,a){l.info("start check project"),function(s,e){l.info("start check project size");const{build:{pkgSizeLimit:t},dev:a}=e,n=x(s,[]),i=Math.round(n/1048576),c=Math.round(t/1048576);if(n>t){const s=`Game size ${i}MB, must not exceed ${c}MB`;if(l.error(s),!a.enable)throw new Error(s);console.log("%s",s)}else l.info(`Game size ${i}MB, check successfully!`),l.info("Game size check successfully!")}(e,a),function(e){l.info("start check config");const a=t.join(e,k);if(!s.existsSync(a)){const s="can not find game.json in game source code, please check it";throw l.error(s),new Error(s)}l.info("check config successfully")}(e),function(e){l.info("start check project config");const a=t.join(e,p);if(!s.existsSync(a)){const s="can not find project.config.json in game source code, please check it";throw l.error(s),new Error(s)}l.info("check project.config.json successfully");let n;try{n=JSON.parse(s.readFileSync(a,"utf-8"))}catch(s){throw l.error("check project.config.json failed, your project.config.json is invalid json format"),s}if(!(null==n?void 0:n.appid)){const s="can not find appid in project.config.json, you should add appid(client_key) in project.config.json";throw l.error(s),new Error(s)}}(e),l.info("check project successfully")}function F(s,e){l.info("start check main package"),l.info("check game.js");const t=g.join(s,"game.js");if(!u.existsSync(t)){const s="game.js must exist in main package!";throw l.error(s),new Error(s)}l.info("check game.js successfully"),function({entryDir:s,config:e}){l.info("start check main package size");const{build:t,dev:a}=e,n=x(s,["subpackages"]),i=Math.round(n/1048576),c=Math.round(t.pkgSizeLimit/1048576);if(n>t.pkgSizeLimit){const s=`Main package size ${i}MB, must not exceed ${c}MB`;if(!a.enable)throw l.error(s),new Error(s);console.log("%s",s)}else l.info(`Main package size ${i}MB, check successfully!`)}({entryDir:s,config:e}),l.info("check main package successfully")}function P(e,a){const{build:n}=a||{},{subPkgSizeLimit:i}=n||{};l.info("start check subpackages in game.json");const c=t.join(e,k),o=JSON.parse(s.readFileSync(c,"utf-8")).subpackages||[];(null==o?void 0:o.length)?o.forEach(a=>{if(!a.name||!a.root){const s="The subpackages configuration in game.json is invalid: the root or name field in one or more subpackages is empty. Please ensure that all subpackages have non-empty root and name values.";throw l.error(s),new Error(s)}const n=t.join(e,a.root);if(!s.existsSync(n)){const s=`The subpackages configuration in game.json is invalid: can not find subpackage ${a.name} entry dir, please check it`;throw l.error(s),new Error(s)}const c=a.root;if(!s.existsSync(t.join(e,c))){const s=`The subpackages configuration in game.json is invalid: can not find subpackage ${a.name} root, please check it`;throw l.error(s),new Error(s)}i&&function({entryDir:s,subPkgName:e,limit:a}){const n=t.join(s,"subpackages",e),i=x(n,[]),c=Math.round(i/1048576);if(c>a){const s=`${e} Sub package size ${c}MB, must not exceed ${a/1048576}MB`;throw l.error(s),new Error(s)}l.info(`${e} Sub package size ${c}MB, check successfully!`)}({entryDir:e,subPkgName:a.name,limit:i})}):l.info("subpackages is empty"),l.info("check subpackages in game.json successfully")}async function N({entryDir:s,config:e}){l.info("开始校验项目"),E(s,e),F(s,e),P(s,e),l.info("校验项目完成")}async function T(e,a){l.info("开始基于源代码中的 game.json 生成 packageConfig.json");const n=t.join(e,k),i=JSON.parse(s.readFileSync(n,"utf-8")),c={};c[j]={url:"",md5:"",root:"",main:"game.js",output:`${j}${_}`},function(s){if(!s||0===s.length)return[];function e(s){return String(s).replace(/^\/+|\/+$/g,"")}function a(s){return n(s)?t.join(s,"game.js"):s}function n(s){return s.endsWith("/")||!/\.[a-zA-Z0-9]+$/.test(s)}function i(s){return s.replace(/^subpackages\/([^/]+).*$/,"subpackages/$1")}return s.map(s=>{const t=e(s.name);return{main:a(s.root),root:i(s.root),name:t}})}(i.subpackages).forEach(({name:s,root:e,main:t})=>{c[s]={url:"",md5:"",root:e,main:t,output:`${s}${_}`}});const o={packages:c};return Object.keys(c).forEach(a=>{const n=t.join(e,c[a].main);if(!s.existsSync(n)){const s=`开发者源代码包中的子包 ${a} 中的 main 文件 ${c[a].main} 不存在`;throw l.error(s),new Error(s)}}),s.existsSync(a)&&s.rmSync(a,{recursive:!0}),s.mkdirSync(a),s.writeFileSync(t.join(a,b),JSON.stringify(o,null,2)),l.info("基于源代码中的 game.json 生成 packageConfig.json 成功"),o}function C(s){const e=[];return Object.values(s).forEach(s=>{Object.values(s).forEach(s=>{e.push(...s)})}),e}function z(e,a=[".js",".ts",".jsx",".tsx"],n=[]){let i=[];if(!s.existsSync(e))return i;const c=s.readdirSync(e,{withFileTypes:!0});for(const s of c){const c=t.join(e,s.name);if(s.isDirectory()){if(n.includes(s.name))continue;i=i.concat(z(c,a,[]))}else a.some(e=>s.name.endsWith(e))&&i.push(c)}return i}function R(e,a){const n=function(e){return s.readdirSync(e).filter(a=>{const n=t.join(e,a);return s.statSync(n).isDirectory()&&!["node_modules","dist","build","output"].includes(a)}).map(s=>s+"/")}(e),o=c.sync("**/*.js",{cwd:e,ignore:[]}),r=[];o.forEach(a=>{const c=t.join(e,a),o=s.readFileSync(c,"utf-8");let m;try{m=i.parse(o,{ecmaVersion:"latest",sourceType:"module"})}catch(s){return}L(m,a=>{if("CallExpression"===a.type&&"Identifier"===a.callee.type&&("require"===a.callee.name||"requireAsync"===a.callee.name)&&a.arguments.length>0&&"Literal"===a.arguments[0].type){const i=a.arguments[0].value;let o=null;if(i.startsWith("."))o=t.resolve(t.dirname(c),i);else if(i.startsWith("/"))o=t.resolve(e,"."+i);else for(const s of n)if(i.startsWith(s)){o=t.resolve(e,i);break}o&&!function(e){if(s.existsSync(e)&&s.statSync(e).isFile())return!0;const t=[".js",".ts",".jsx",".tsx"];for(const a of t)if(s.existsSync(e+a)&&s.statSync(e+a).isFile())return!0;return!1}(o)&&(o=null),r.push({file:t.relative(e,c),callee:a.callee.name,requirePath:i,resolvedPath:o?t.relative(e,o):""})}})});const m=r.map(s=>{let e="";Object.keys(a).forEach(t=>{s.resolvedPath&&s.resolvedPath.startsWith(a[t].root)&&(e=t)});let t="";return Object.keys(a).forEach(e=>{s.file.startsWith(a[e].root)&&(t=e)}),Object.assign(Object.assign({},s),{curModule:t,depModule:e})}),u=[".js",".ts",".jsx",".tsx"];return m.reduce((s,e)=>{return s[e.curModule]||(s[e.curModule]={}),e.curModule===e.depModule||e.resolvedPath&&(t=e.resolvedPath,u.some(s=>t.endsWith(s)))&&(s[e.curModule]=Object.assign(Object.assign({},s[e.curModule]),{[e.resolvedPath]:e.depModule})),s;var t},{})}function L(s,e){e(s);for(let t in s)if(s.hasOwnProperty(t)){const a=s[t];Array.isArray(a)?a.forEach(s=>s&&"string"==typeof s.type&&L(s,e)):a&&"string"==typeof a.type&&L(a,e)}}async function A({pkgRoot:e,destRoot:a,packedFiles:n,gameEntry:i,gameOutput:c,skipDirs:o=[],isRoot:r=!0}){if(!s.existsSync(e))return;const m=s.readdirSync(e,{withFileTypes:!0});for(const u of m){const m=t.join(e,u.name),g=t.join(a,u.name);r&&u.isDirectory()&&o.includes(u.name)||(u.isDirectory()?A({pkgRoot:m,destRoot:g,gameOutput:c,packedFiles:n,gameEntry:i,skipDirs:o,isRoot:!1}):(d(t.dirname(g)),n.includes(t.relative(i,m))||s.copyFileSync(m,g)))}}async function G({gameEntry:e,gameOutput:a,config:n}){let i=Date.now();!function(e){!function e(a){let n;try{n=s.readdirSync(a)}catch(s){return void l.warn(`无法访问目录: ${a}, ${s.message}`)}n.forEach(n=>{const i=t.join(a,n);try{const t=s.statSync(i);t.isDirectory()?$.includes(n)?(s.rmSync(i,{recursive:!0,force:!0}),l.info(`已删除无用目录: ${i}`)):e(i):t.isFile()&&O.includes(n)&&(s.rmSync(i,{force:!0}),l.info(`已删除无用文件: ${i}`))}catch(s){l.warn(`无法处理: ${i}, ${s.message}`)}})}(e)}(e),l.info(`pack start,startTime:${i}`);const{packages:c}=await T(e,a),m=R(e,c),u=function(s,e){l.info("开始基于游戏源代码收集分包中的 JS 文件");const a={},n=Object.values(e).filter(s=>s.root&&""!==s.root).map(s=>s.root.split(t.sep)[0]).filter(Boolean),i=Array.from(new Set(n));for(const n in e){const c=e[n];let o,r;"__GAME__"===n?(r=z(s,[".js",".ts",".jsx",".tsx"],i),o=s):(o=t.join(s,c.root),r=z(o));const m=[];r.forEach(e=>{m.push(t.relative(s,e).replace(/\\/g,"/"))});const u=e[n].root;a[n]={[u?`${u}/game.pack.js`:"game.pack.js"]:m}}return l.info("基于游戏源代码收集分包中的 JS 文件完成"),a}(e,c);return await async function(s,e,t){const a=[],n=[];for(const i of e){const c=Promise.resolve().then(()=>t(i));if(a.push(c),s<=e.length){const e=c.then(()=>{n.splice(n.indexOf(e),1)});n.push(e),n.length>=s&&await Promise.race(n)}}return Promise.all(a)}(10,Object.keys(u),async i=>{l.info(`开始基于游戏源代码打包,包名:${i}`);let g=Date.now();const b=c[i],p=t.join(e,b.root),k=t.join(a,i,b.root);await function({gameEntry:e,pkgName:a,allDeps:n,allMaps:i,pkgConfig:c,destRoot:m,config:u}){var g,f,b,p;let k=Date.now();l.info(`pack start,startTime:${k}`);const j=i[a],_={main:c.main,deps:n[a]||{},map:i[a]};d(m),s.writeFileSync(t.join(m,"moduleConfig.json"),JSON.stringify(_));for(const n in j){const i=j[n];if(!Array.isArray(i)||0===i.length)continue;const c=new o.Bundle({separator:"\n"});for(const a of i){const i=t.join(e,a);if(s.existsSync(i)&&t.basename(i)!==n&&/\.js$/i.test(a))try{const{code:e}=r.transformSync(s.readFileSync(i,"utf-8"),{loader:"js",format:"cjs",target:"es2015"}),t=a.replace(/\\/g,"/"),n=`define("game:${t}", ["require", "requireAsync", "module", "exports", "sandboxGlobal"], function(require, requireAsync, module, exports, sandboxGlobal){\nwith(sandboxGlobal){\n`,m="\n}\n});\n",u=new o(e,{filename:t});u.prepend(n),u.append(m),c.addSource({content:u,filename:t})}catch(s){l.error(`pack error, relPath:${a},e:${s}`)}}const d=t.join(m,t.basename(n)),k=c.toString();if(null===(g=null==u?void 0:u.dev)||void 0===g?void 0:g.enableSourcemap){const e=c.generateMap({hires:!0,includeContent:!0,file:t.basename(n)});if(null===(f=null==u?void 0:u.dev)||void 0===f?void 0:f.inlineSourcemap){const t=k+`\n//# sourceMappingURL=data:application/json;base64,${Buffer.from(e.toString()).toString("base64")}`+`\n//# sourceURL=${n}`;s.writeFileSync(d,t,"utf-8")}else{const a=`http://${null===(b=null==u?void 0:u.dev)||void 0===b?void 0:b.host}:${null===(p=null==u?void 0:u.dev)||void 0===p?void 0:p.port}/game/files`,i=t.basename(n)+".map",c=t.join(m,i);s.writeFileSync(c,e.toString(),"utf-8");const o=k+`\n//# sourceMappingURL=${a}/${n}.map`+`\n//# sourceURL=${n}`;s.writeFileSync(d,o,"utf-8")}}else{const e=k+`\n//# sourceURL=${n}`;s.writeFileSync(d,e,"utf-8")}l.info(`pack end,packName:${a}`)}}({gameEntry:e,allDeps:m,allMaps:u,pkgName:i,pkgConfig:b,destRoot:k,config:n}),await A({gameEntry:e,gameOutput:a,pkgRoot:p,destRoot:k,packedFiles:C(u),skipDirs:["subpackages"]});f(t.join(a,i)),l.info(`基于游戏源代码打包分包完成,包名:${i}`),l.info(`基于游戏源代码打包分包耗时,包名:${i},耗时:${Date.now()-g}ms`)}),l.info(`pack end,duration:${Date.now()-i}ms`),{}}exports.buildOdrPkgs=async function({tempDir:e}){s.existsSync(e)&&s.rmSync(e,{recursive:!0}),s.mkdirSync(e);const a=function(){const{MinisPackagingInfoMap:s}=D;return Object.keys(s).map(e=>({id:e,packages:JSON.parse(s[e].ODRPackages)}))}();l.info("odr_games"),await M(a,e);const n={};for(const s of a){const{id:a}=s,i=t.join(e,a);n[a]=x(i)}const i={};S.forEach(s=>{i[s]=[]});const c={};for(const o of a){const{id:a,packages:r}=o,m=n[a];if(m>v)continue;let u=null;for(const c of S){const o=t.join(e,c);s.existsSync(o)||s.mkdirSync(o);if(i[c].reduce((s,e)=>s+n[e],0)+m<=v){const n=t.join(e,a),r=t.join(o,a);s.cpSync(n,r,{recursive:!0}),i[c].push(a),u=c;break}}if(u){c[a]={tag:u,packages:{}};for(const s in r){const e=r[s];l.info(`TTMGODRConfig[gameId].packages, ${e}, ${s}`),c[a].packages[s]={root:e.root,main:e.main,asset_md5:e.asset_md5,asset_url:e.asset_url}}console.log(`finish to build ${a}`),s.rmSync(t.join(e,a),{recursive:!0})}}const o=t.join(e,"TTMG_ODR_CONFIG.json");s.writeFileSync(o,JSON.stringify(c,null,2),"utf-8"),l.info(`TTMG_ODR_CONFIG.json 已生成: ${o}`)},exports.buildPkgs=async function(e){const{entry:a,output:n,build:i}=e;let c=Date.now();l.init(n,!0),l.info("TTMG_PACK_VERSION: 0.0.29"),l.info(`pack start, startTime:${c}`),await N({entryDir:a,config:e}),await G({config:e,gameEntry:a,gameOutput:n}),(null==i?void 0:i.enableOdr)&&await async function(e){let a=Date.now();l.info(`makeOdrPkgs start, ${a}`);const n=t.join(e,b),i=JSON.parse(s.readFileSync(n,"utf-8")),c=i.packages;for(const a in c){const n=t.join(e,a),i=t.join(e,`${a}${h}`),o=t.join(e,`${a}${y}`);d(i),d(o),s.cpSync(n,i,{recursive:!0}),s.cpSync(n,o,{recursive:!0}),q(i),w(o),c[`${a}${h}`]=Object.assign(Object.assign({},c[a]),{code_url:"",code_md5:"",output:`${a}${h}${_}`}),c[`${a}${y}`]=Object.assign(Object.assign({},c[a]),{asset_url:"",asset_md5:"",output:`${a}${y}${_}`})}s.writeFileSync(n,JSON.stringify(i,null,2)),l.info(`makeOdrPkgs end, ${Date.now()-a}ms`)}(n),l.info(`pack end:${Date.now()-c}ms`)},exports.debugPkgs=async function(e){const{entry:a,output:n,dev:{enableLog:i}}=e;l.init(n,i);try{await N({entryDir:a,config:e}),await G({gameEntry:a,gameOutput:n,config:e}),await function(e){l.info("mergePkgs start");const a=t.join(e,b);let n;try{n=JSON.parse(s.readFileSync(a,"utf-8"))}catch(s){return void l.error(`读取配置文件失败: ${a}, err: ${s.message}`)}const i=n.packages;if(i&&"object"==typeof i){for(const a of Object.keys(i)){const n=t.join(e,a);if(!s.existsSync(n)){l.warn(`package 目录不存在: ${n}`);continue}const i=s.readdirSync(n);for(const a of i){const i=t.join(n,a),c=t.join(e,a);try{const e=s.statSync(i);if(e.isFile())s.copyFileSync(i,c);else if(e.isDirectory())s.cpSync(i,c,{recursive:!0});else if(e.isSymbolicLink()){const t=s.readlinkSync(i);s.existsSync(c)&&s.rmSync(c,{force:!0}),s.symlinkSync(t,c,e.isDirectory()?"dir":"file")}l.info(`合并文件/目录: ${i} -> ${c}`)}catch(s){l.error(`处理文件失败: ${i}, err: ${s.message}`)}}try{s.rmSync(n,{recursive:!0,force:!0}),l.info(`已删除 package 目录: ${n}`)}catch(s){l.error(`删除 package 目录失败: ${n}, err: ${s.message}`)}}l.info("mergePkgs 完成")}else l.error("配置文件中 packages 字段无效, 请检查配置")}(n);const i=s.readFileSync(t.join(n,b),"utf-8");return{isSuccess:!0,packages:JSON.parse(i).packages}}catch(s){return{isSuccess:!1,errorMsg:s.message}}},exports.writeOdrConfig=async function(s){l.info("writeOdrPackagesConfig start");const e=g.join(s,b),t=JSON.parse(u.readFileSync(e,"utf-8")),a=t.packages,n=t.odr_packages||{};for(const s in a){if(s.endsWith(h)){const e=a[s],t=s.split(h)[0];n[t]||(n[t]={}),n[t]=Object.assign(Object.assign({},n[t]),{root:e.root,code_output:e.output,code_md5:e.md5,main:e.main}),delete a[s]}if(s.endsWith(y)){const e=s.split(y)[0],t=a[s];n[e]=Object.assign(Object.assign({},n[e]),{root:t.root,asset_output:t.output,asset_md5:t.md5}),delete a[s]}}t.odr_packages=n,u.writeFileSync(e,JSON.stringify(t,null,2)),l.info("writeOdrPackagesConfig end")};
9
+ "use strict";var s=require("fs"),e=require("winston"),t=require("path");require("crypto"),require("zlib");var a=require("fs/promises"),n=require("node-fetch"),i=require("acorn"),c=require("glob"),o=require("magic-string"),r=require("esbuild");function m(s){var e=Object.create(null);return s&&Object.keys(s).forEach(function(t){if("default"!==t){var a=Object.getOwnPropertyDescriptor(s,t);Object.defineProperty(e,t,a.get?a:{enumerable:!0,get:function(){return s[t]}})}}),e.default=s,Object.freeze(e)}var u=m(s),g=m(t);function d(e){s.existsSync(e)||s.mkdirSync(e,{recursive:!0})}const l=new class{constructor(){this.logger=null}init(s,a=!0){this.enableLog=a,this.logger=e.createLogger({level:"info",format:e.format.combine(e.format.timestamp(),e.format.json()),transports:[new e.transports.File({filename:t.join(s,"pack.log")}),new e.transports.Console]})}info(s){this.enableLog&&this.logger.info(s)}error(s){this.enableLog&&this.logger.error(s)}warn(s){this.enableLog&&this.logger.warn(s)}debug(s){this.enableLog&&this.logger.debug(s)}log(s){this.logger.info(s)}setOutput(s){this.output=s}};function f(e){if(!s.existsSync(e))return!1;if(!s.statSync(e).isDirectory())return!1;let a=!0;const n=s.readdirSync(e);for(const i of n){const n=t.join(e,i);if(s.statSync(n).isDirectory()){f(n)||(a=!1)}else a=!1}return!!a&&(s.rmSync(e,{recursive:!0}),!0)}const b="packageConfig.json",p="project.config.json",k="game.json",j="__GAME__",_=".txt",h="_code",y="_asset",v=62914560,S=["ttmg_odr_high_channel","ttmg_odr_middle_channel","ttmg_odr_normal_channel"];function x(e,a=[]){let n=0;if(!s.existsSync(e))return 0;const i=s.readdirSync(e,{withFileTypes:!0});for(const c of i){const i=t.join(e,c.name);c.isDirectory()?a.includes(c.name)||(n+=x(i,a)):c.isFile()&&(n+=s.statSync(i).size)}return n}function w(e){const a=s.readdirSync(e,{withFileTypes:!0});for(const n of a){const a=t.join(e,n.name);if(n.isDirectory())w(a);else if(n.isFile()&&(a.endsWith(".js")||a.endsWith(".js.map")))try{s.unlinkSync(a)}catch(s){}}}function q(e){const a=s.readdirSync(e,{withFileTypes:!0});for(const n of a){const a=t.join(e,n.name);if(n.isDirectory())q(a);else if(n.isFile()&&!a.endsWith(".js")&&!a.endsWith(".js.map"))try{s.unlinkSync(a)}catch(s){}}}const $=["node_modules","__MACOSX"],O=[".DS_Store","Thumbs.db"];async function M(s,e,i=5){const c=[];for(const n of s){const{id:s,packages:i}=n,o=t.join(e,s);await a.mkdir(o,{recursive:!0});for(const s in i){const e=i[s],{code_url:a}=e,n=`${s}.txt`,r=t.join(o,n);c.push({code_url:a,filePath:r,packageName:s})}}await async function(s,e,t){const a=[],n=[];for(const i of e){const c=Promise.resolve().then(()=>t(i));if(a.push(c),s<=e.length){const e=c.then(()=>n.splice(n.indexOf(e),1));n.push(e),n.length>=s&&await Promise.race(n)}}return Promise.all(a)}(i,c,async s=>{const{code_url:e,filePath:t,packageName:i}=s;console.log(`start to download ${i}`);try{const s=await n(e);if(!s.ok)throw new Error(`Failed to fetch ${e}: ${s.statusText}`);const c=Buffer.from(await s.arrayBuffer());await a.writeFile(t,c),console.log(`finish to download ${i}`)}catch(s){console.error(`Error downloading ${i}:`,s)}})}var D={MinisPackagingInfoMap:{mgt083fix6swgscq:{ClientKey:"mgt083fix6swgscq",MinisStage:1,MinisURL:"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us",ODRPackages:'{"__GAME__":{"asset_md5":"dbee9c4f704800eb5bf482be01aecadc","asset_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/__GAME___asset/dbee9c4f704800eb5bf482be01aecadc.txt","code_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/__GAME___code/b42b2a68ce373eb274eedc22351aac02.txt","root":"","main":"game.js"},"chapter":{"asset_md5":"9c4b6cb8dc0b39bfcb275efa0c6b8493","asset_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/chapter_asset/9c4b6cb8dc0b39bfcb275efa0c6b8493.txt","code_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/chapter_code/9ee175f09ca69c65b630cfee23c0e42c.txt","root":"subpackages/chapter","main":"subpackages/chapter/game.js"},"108":{"asset_md5":"b7b3aeafdd70aed9e77fb2f1554d6675","asset_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/108_asset/b7b3aeafdd70aed9e77fb2f1554d6675.txt","code_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/108_code/bdac7d266b4a15af9ca109d1673168a6.txt","root":"subpackages/108","main":"subpackages/108/game.js"},"110":{"asset_md5":"24da51736441ceb88b3d331775004551","asset_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/110_asset/24da51736441ceb88b3d331775004551.txt","code_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/110_code/f7c97cb3aed7acb4091feaf613c56dd3.txt","root":"subpackages/110","main":"subpackages/110/game.js"},"116":{"asset_md5":"690814b650564724a235a4f155cfe5e3","asset_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/116_asset/690814b650564724a235a4f155cfe5e3.txt","code_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/116_code/ddc0d442aef316e3e45cdbac9ccb88eb.txt","root":"subpackages/116","main":"subpackages/116/game.js"},"109":{"asset_md5":"926ebc459e3329a4d9cda7ddf9718bf4","asset_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/109_asset/926ebc459e3329a4d9cda7ddf9718bf4.txt","code_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/109_code/19cbdc3d88a72dbd0c5eb52e89e2635a.txt","root":"subpackages/109","main":"subpackages/109/game.js"},"practice":{"asset_md5":"01d63b100e2cfb80d2d7568d11f346f8","asset_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/practice_asset/01d63b100e2cfb80d2d7568d11f346f8.txt","code_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/practice_code/2275ac8e93d1c5dd100427aa948cd23c.txt","root":"subpackages/practice","main":"subpackages/practice/game.js"},"game2":{"asset_md5":"9f1bb086f7587aada8312315f2dd94fc","asset_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/game2_asset/9f1bb086f7587aada8312315f2dd94fc.txt","code_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/game2_code/49d07e848cae8eb08428bfbf225a6f30.txt","root":"subpackages/game2","main":"subpackages/game2/game.js"},"game3":{"asset_md5":"bc4b09b1177a35fd8516b8fd5bb9b4e4","asset_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/game3_asset/bc4b09b1177a35fd8516b8fd5bb9b4e4.txt","code_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/game3_code/7f3c18114afd5b3d4fd8c39dd2481cf1.txt","root":"subpackages/game3","main":"subpackages/game3/game.js"},"resSps":{"asset_md5":"4e72c930e3c8f77bda25be975e3c8019","asset_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/resSps_asset/4e72c930e3c8f77bda25be975e3c8019.txt","code_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/resSps_code/c6ac2ebde3c8c421ca75ff649280d90b.txt","root":"subpackages/resSps","main":"subpackages/resSps/game.js"},"adapter":{"asset_md5":"a44f0cd93ad08da6db427c9dc3ab6fe4","asset_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/adapter_asset/a44f0cd93ad08da6db427c9dc3ab6fe4.txt","code_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/adapter_code/6c3090ba10c12ad637aefa993fe838fc.txt","root":"subpackages/adapter","main":"subpackages/adapter/game.js"},"102":{"asset_md5":"8b39712d9f0ae7549382da9041cc5f56","asset_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/102_asset/8b39712d9f0ae7549382da9041cc5f56.txt","code_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/102_code/b70fb4ea0d05b866a4a32ab4cae418c4.txt","root":"subpackages/102","main":"subpackages/102/game.js"},"106":{"asset_md5":"b22052c8f569db2f00a2ae6fcb8872e6","asset_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/106_asset/b22052c8f569db2f00a2ae6fcb8872e6.txt","code_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/106_code/f13ed6653a2ebb49703d0bc882255cfd.txt","root":"subpackages/106","main":"subpackages/106/game.js"},"118":{"asset_md5":"f787456ee45eccc4c13f20ee21c61858","asset_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/118_asset/f787456ee45eccc4c13f20ee21c61858.txt","code_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/118_code/e595f8ed244752fe2ddc72def8452cd5.txt","root":"subpackages/118","main":"subpackages/118/game.js"},"112":{"asset_md5":"9fe63b5fc31e9b4ccd1ee9fa9ed2913b","asset_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/112_asset/9fe63b5fc31e9b4ccd1ee9fa9ed2913b.txt","code_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/112_code/ebb1a6d341c0013a445f3dbf2600c9ae.txt","root":"subpackages/112","main":"subpackages/112/game.js"},"113":{"asset_md5":"f53882a23326919614b0e9031d28ed39","asset_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/113_asset/f53882a23326919614b0e9031d28ed39.txt","code_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/113_code/666bb07aea74f0a408136c0ac16a04b8.txt","root":"subpackages/113","main":"subpackages/113/game.js"},"game5":{"asset_md5":"6a75dd22dcf0d7c117cfcb03185696e6","asset_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/game5_asset/6a75dd22dcf0d7c117cfcb03185696e6.txt","code_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/game5_code/ed2c8ca8023418099d1232fdc6ac09ae.txt","root":"subpackages/game5","main":"subpackages/game5/game.js"},"main":{"asset_md5":"ecadb8f2a4138a73459e04a8a0c5f470","asset_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/main_asset/ecadb8f2a4138a73459e04a8a0c5f470.txt","code_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/main_code/3b7a7f0869e5392f1e244eef40ad8abe.txt","root":"subpackages/main","main":"subpackages/main/game.js"},"103":{"asset_md5":"069620ed43643956f6b6448c5d360471","asset_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/103_asset/069620ed43643956f6b6448c5d360471.txt","code_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/103_code/64a9caf580b6cd991888751e8ea51222.txt","root":"subpackages/103","main":"subpackages/103/game.js"},"105":{"asset_md5":"82c8cde04fec4456ac6bab8adaef0028","asset_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/105_asset/82c8cde04fec4456ac6bab8adaef0028.txt","code_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/105_code/74e319194a7f5a204504fc3d83131112.txt","root":"subpackages/105","main":"subpackages/105/game.js"},"107":{"asset_md5":"652c5385223642c4a19f823666c8a682","asset_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/107_asset/652c5385223642c4a19f823666c8a682.txt","code_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/107_code/9e717b17251bdc8eefb7b8135fcb6996.txt","root":"subpackages/107","main":"subpackages/107/game.js"},"101":{"asset_md5":"ad3f476d334e695c01f96eef67308f26","asset_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/101_asset/ad3f476d334e695c01f96eef67308f26.txt","code_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/101_code/dcb5f8547d5285c5e116a1726dc1ecdb.txt","root":"subpackages/101","main":"subpackages/101/game.js"},"game4":{"asset_md5":"b98a8892ccb76e5999cbf7a8e81c4cb5","asset_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/game4_asset/b98a8892ccb76e5999cbf7a8e81c4cb5.txt","code_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/game4_code/ebbcf2b74998d340cb8cf85249748992.txt","root":"subpackages/game4","main":"subpackages/game4/game.js"},"sound":{"asset_md5":"65c37817ffc86d942d1942443b5e3fb4","asset_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/sound_asset/65c37817ffc86d942d1942443b5e3fb4.txt","code_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/sound_code/2662512b5aaa6801b6742eb661c44828.txt","root":"subpackages/sound","main":"subpackages/sound/game.js"},"game6":{"asset_md5":"b1407de78d19f60644b53436f1791ee6","asset_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/game6_asset/b1407de78d19f60644b53436f1791ee6.txt","code_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/game6_code/155651953a65a663f67b95475cd5c941.txt","root":"subpackages/game6","main":"subpackages/game6/game.js"},"newYear":{"asset_md5":"c2cb90fbaac0b4b86d1afa7caabd2f20","asset_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/newYear_asset/c2cb90fbaac0b4b86d1afa7caabd2f20.txt","code_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/newYear_code/a7d962b4f7a95e8114fcf00bbe27b8ac.txt","root":"subpackages/newYear","main":"subpackages/newYear/game.js"},"prefab":{"asset_md5":"4c4ba8d442bae683575460e884ddba00","asset_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/prefab_asset/4c4ba8d442bae683575460e884ddba00.txt","code_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/prefab_code/7f037cd7f3b83e90765e749d28f32e3e.txt","root":"subpackages/prefab","main":"subpackages/prefab/game.js"},"104":{"asset_md5":"160c617e3e3adef19c94f57bc4520dba","asset_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/104_asset/160c617e3e3adef19c94f57bc4520dba.txt","code_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/104_code/ef86df3a24fca9ecffc55f7c33ff3747.txt","root":"subpackages/104","main":"subpackages/104/game.js"},"111":{"asset_md5":"3452f073e30ecc6b3727f072a856068b","asset_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/111_asset/3452f073e30ecc6b3727f072a856068b.txt","code_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/111_code/3ca9e57876b82945faedce2ca0ab414e.txt","root":"subpackages/111","main":"subpackages/111/game.js"},"114":{"asset_md5":"c2f81aaf93311b9302995dba105d69d0","asset_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/114_asset/c2f81aaf93311b9302995dba105d69d0.txt","code_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/114_code/7574a218fb4053e2005497d84a56132c.txt","root":"subpackages/114","main":"subpackages/114/game.js"},"other":{"asset_md5":"473ad574dee1813610988dba22fb0acc","asset_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/other_asset/473ad574dee1813610988dba22fb0acc.txt","code_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/other_code/003784b887ff99fb82d47899798e1ee0.txt","root":"subpackages/other","main":"subpackages/other/game.js"},"zh_CN":{"asset_md5":"2b1c715a0c624c630acb29b4fdfcb240","asset_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/zh_CN_asset/2b1c715a0c624c630acb29b4fdfcb240.txt","code_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/zh_CN_code/bb44d46f30e57f29d20bf0678426c7c5.txt","root":"subpackages/zh_CN","main":"subpackages/zh_CN/game.js"},"115":{"asset_md5":"6831f12abfeccc9ff720155d9ece2d53","asset_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/115_asset/6831f12abfeccc9ff720155d9ece2d53.txt","code_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/115_code/76b85e96a57c33c8ba9ff2f316290416.txt","root":"subpackages/115","main":"subpackages/115/game.js"},"117":{"asset_md5":"60206e41273a6a1f6d21bbf634023962","asset_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/117_asset/60206e41273a6a1f6d21bbf634023962.txt","code_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/117_code/1a85a85048eca0d650ad4b8b198cefdc.txt","root":"subpackages/117","main":"subpackages/117/game.js"},"jigsaw":{"asset_md5":"4782715dda5ea0d10897d866a84bca19","asset_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/jigsaw_asset/4782715dda5ea0d10897d866a84bca19.txt","code_url":"https://minis-sbmgsljglm6ntcq9u4-vpkg-1.tiktok-minis.us/jigsaw_code/799004f65797d4620549e0d4b27e3794.txt","root":"subpackages/jigsaw","main":"subpackages/jigsaw/game.js"}}',UpdatedTime:1756737196e3,AssetType:1}}};function E(e,a){l.info("start check project"),function(s,e){l.info("start check project size");const{build:{pkgSizeLimit:t},dev:a}=e,n=x(s,[]),i=Math.round(n/1048576),c=Math.round(t/1048576);if(n>t){const s=`Game size ${i}MB, must not exceed ${c}MB`;if(l.error(s),!a.enable)throw new Error(s);console.log("%s",s)}else l.info(`Game size ${i}MB, check successfully!`),l.info("Game size check successfully!")}(e,a),function(e){l.info("start check config");const a=t.join(e,k);if(!s.existsSync(a)){const s="can not find game.json in game source code, please check it";throw l.error(s),new Error(s)}l.info("check config successfully")}(e),function(e){l.info("start check project config");const a=t.join(e,p);if(!s.existsSync(a)){const s="can not find project.config.json in game source code, please check it";throw l.error(s),new Error(s)}l.info("check project.config.json successfully");let n;try{n=JSON.parse(s.readFileSync(a,"utf-8"))}catch(s){throw l.error("check project.config.json failed, your project.config.json is invalid json format"),s}if(!(null==n?void 0:n.appid)){const s="can not find appid in project.config.json, you should add appid(client_key) in project.config.json";throw l.error(s),new Error(s)}}(e),l.info("check project successfully")}function F(s,e){l.info("start check main package"),l.info("check game.js");const t=g.join(s,"game.js");if(!u.existsSync(t)){const s="game.js must exist in main package!";throw l.error(s),new Error(s)}l.info("check game.js successfully"),function({entryDir:s,config:e}){l.info("start check main package size");const{build:t,dev:a}=e,n=x(s,["subpackages"]),i=Math.round(n/1048576),c=Math.round(t.pkgSizeLimit/1048576);if(n>t.pkgSizeLimit){const s=`Main package size ${i}MB, must not exceed ${c}MB`;if(!a.enable)throw l.error(s),new Error(s);console.log("%s",s)}else l.info(`Main package size ${i}MB, check successfully!`)}({entryDir:s,config:e}),l.info("check main package successfully")}function P(e,a){const{build:n}=a||{},{subPkgSizeLimit:i}=n||{};l.info("start check subpackages in game.json");const c=t.join(e,k),o=JSON.parse(s.readFileSync(c,"utf-8")).subpackages||[];(null==o?void 0:o.length)?o.forEach(a=>{if(!a.name||!a.root){const s="The subpackages configuration in game.json is invalid: the root or name field in one or more subpackages is empty. Please ensure that all subpackages have non-empty root and name values.";throw l.error(s),new Error(s)}const n=t.join(e,a.root);if(!s.existsSync(n)){const s=`The subpackages configuration in game.json is invalid: can not find subpackage ${a.name} entry dir, please check it`;throw l.error(s),new Error(s)}const c=a.root;if(!s.existsSync(t.join(e,c))){const s=`The subpackages configuration in game.json is invalid: can not find subpackage ${a.name} root, please check it`;throw l.error(s),new Error(s)}i&&function({entryDir:s,subPkgName:e,limit:a}){const n=t.join(s,"subpackages",e),i=x(n,[]),c=Math.round(i/1048576);if(c>a){const s=`${e} Sub package size ${c}MB, must not exceed ${a/1048576}MB`;throw l.error(s),new Error(s)}l.info(`${e} Sub package size ${c}MB, check successfully!`)}({entryDir:e,subPkgName:a.name,limit:i})}):l.info("subpackages is empty"),l.info("check subpackages in game.json successfully")}async function N({entryDir:s,config:e}){l.info("开始校验项目"),E(s,e),F(s,e),P(s,e),l.info("校验项目完成")}async function T(e,a){l.info("开始基于源代码中的 game.json 生成 packageConfig.json");const n=t.join(e,k),i=JSON.parse(s.readFileSync(n,"utf-8")),c={};c[j]={url:"",md5:"",root:"",main:"game.js",output:`${j}${_}`},function(s){if(!s||0===s.length)return[];function e(s){return String(s).replace(/^\/+|\/+$/g,"")}function a(s){return n(s)?t.join(s,"game.js"):s}function n(s){return s.endsWith("/")||!/\.[a-zA-Z0-9]+$/.test(s)}function i(s){return s.replace(/^subpackages\/([^/]+).*$/,"subpackages/$1")}return s.map(s=>{const t=e(s.name);return{main:a(s.root),root:i(s.root),name:t}})}(i.subpackages).forEach(({name:s,root:e,main:t})=>{c[s]={url:"",md5:"",root:e,main:t,output:`${s}${_}`}});const o={packages:c};return Object.keys(c).forEach(a=>{const n=t.join(e,c[a].main);if(!s.existsSync(n)){const s=`开发者源代码包中的子包 ${a} 中的 main 文件 ${c[a].main} 不存在`;throw l.error(s),new Error(s)}}),s.existsSync(a)&&s.rmSync(a,{recursive:!0}),s.mkdirSync(a),s.writeFileSync(t.join(a,b),JSON.stringify(o,null,2)),l.info("基于源代码中的 game.json 生成 packageConfig.json 成功"),o}function C(s){const e=[];return Object.values(s).forEach(s=>{Object.values(s).forEach(s=>{e.push(...s)})}),e}function z(e,a=[".js",".ts",".jsx",".tsx"],n=[]){let i=[];if(!s.existsSync(e))return i;const c=s.readdirSync(e,{withFileTypes:!0});for(const s of c){const c=t.join(e,s.name);if(s.isDirectory()){if(n.includes(s.name))continue;i=i.concat(z(c,a,[]))}else a.some(e=>s.name.endsWith(e))&&i.push(c)}return i}function R(e,a){const n=function(e){return s.readdirSync(e).filter(a=>{const n=t.join(e,a);return s.statSync(n).isDirectory()&&!["node_modules","dist","build","output"].includes(a)}).map(s=>s+"/")}(e),o=c.sync("**/*.js",{cwd:e,ignore:[]}),r=[];o.forEach(a=>{const c=t.join(e,a),o=s.readFileSync(c,"utf-8");let m;try{m=i.parse(o,{ecmaVersion:"latest",sourceType:"module"})}catch(s){return}L(m,a=>{if("CallExpression"===a.type&&"Identifier"===a.callee.type&&("require"===a.callee.name||"requireAsync"===a.callee.name)&&a.arguments.length>0&&"Literal"===a.arguments[0].type){const i=a.arguments[0].value;let o=null;if(i.startsWith("."))o=t.resolve(t.dirname(c),i);else if(i.startsWith("/"))o=t.resolve(e,"."+i);else for(const s of n)if(i.startsWith(s)){o=t.resolve(e,i);break}o&&!function(e){if(s.existsSync(e)&&s.statSync(e).isFile())return!0;const t=[".js",".ts",".jsx",".tsx"];for(const a of t)if(s.existsSync(e+a)&&s.statSync(e+a).isFile())return!0;return!1}(o)&&(o=null),r.push({file:t.relative(e,c),callee:a.callee.name,requirePath:i,resolvedPath:o?t.relative(e,o):""})}})});const m=r.map(s=>{let e="";Object.keys(a).forEach(t=>{s.resolvedPath&&s.resolvedPath.startsWith(a[t].root)&&(e=t)});let t="";return Object.keys(a).forEach(e=>{s.file.startsWith(a[e].root)&&(t=e)}),Object.assign(Object.assign({},s),{curModule:t,depModule:e})}),u=[".js",".ts",".jsx",".tsx"];return m.reduce((s,e)=>{return s[e.curModule]||(s[e.curModule]={}),e.curModule===e.depModule||e.resolvedPath&&(t=e.resolvedPath,u.some(s=>t.endsWith(s)))&&(s[e.curModule]=Object.assign(Object.assign({},s[e.curModule]),{[e.resolvedPath]:e.depModule})),s;var t},{})}function L(s,e){e(s);for(let t in s)if(s.hasOwnProperty(t)){const a=s[t];Array.isArray(a)?a.forEach(s=>s&&"string"==typeof s.type&&L(s,e)):a&&"string"==typeof a.type&&L(a,e)}}async function A({pkgRoot:e,destRoot:a,packedFiles:n,gameEntry:i,gameOutput:c,skipDirs:o=[],isRoot:r=!0}){if(!s.existsSync(e))return;const m=s.readdirSync(e,{withFileTypes:!0});for(const u of m){const m=t.join(e,u.name),g=t.join(a,u.name);r&&u.isDirectory()&&o.includes(u.name)||(u.isDirectory()?A({pkgRoot:m,destRoot:g,gameOutput:c,packedFiles:n,gameEntry:i,skipDirs:o,isRoot:!1}):(d(t.dirname(g)),n.includes(t.relative(i,m))||s.copyFileSync(m,g)))}}async function G({gameEntry:e,gameOutput:a,config:n}){let i=Date.now();!function(e){!function e(a){let n;try{n=s.readdirSync(a)}catch(s){return void l.warn(`无法访问目录: ${a}, ${s.message}`)}n.forEach(n=>{const i=t.join(a,n);try{const t=s.statSync(i);t.isDirectory()?$.includes(n)?(s.rmSync(i,{recursive:!0,force:!0}),l.info(`已删除无用目录: ${i}`)):e(i):t.isFile()&&O.includes(n)&&(s.rmSync(i,{force:!0}),l.info(`已删除无用文件: ${i}`))}catch(s){l.warn(`无法处理: ${i}, ${s.message}`)}})}(e)}(e),l.info(`pack start,startTime:${i}`);const{packages:c}=await T(e,a),m=R(e,c),u=function(s,e){l.info("开始基于游戏源代码收集分包中的 JS 文件");const a={},n=Object.values(e).filter(s=>s.root&&""!==s.root).map(s=>s.root.split(t.sep)[0]).filter(Boolean),i=Array.from(new Set(n));for(const n in e){const c=e[n];let o,r;"__GAME__"===n?(r=z(s,[".js",".ts",".jsx",".tsx"],i),o=s):(o=t.join(s,c.root),r=z(o));const m=[];r.forEach(e=>{m.push(t.relative(s,e).replace(/\\/g,"/"))});const u=e[n].root;a[n]={[u?`${u}/game.pack.js`:"game.pack.js"]:m}}return l.info("基于游戏源代码收集分包中的 JS 文件完成"),a}(e,c);return await async function(s,e,t){const a=[],n=[];for(const i of e){const c=Promise.resolve().then(()=>t(i));if(a.push(c),s<=e.length){const e=c.then(()=>{n.splice(n.indexOf(e),1)});n.push(e),n.length>=s&&await Promise.race(n)}}return Promise.all(a)}(10,Object.keys(u),async i=>{l.info(`开始基于游戏源代码打包,包名:${i}`);let g=Date.now();const b=c[i],p=t.join(e,b.root),k=t.join(a,i,b.root);await function({gameEntry:e,pkgName:a,allDeps:n,allMaps:i,pkgConfig:c,destRoot:m,config:u}){var g,f,b,p;let k=Date.now();l.info(`pack start,startTime:${k}`);const j=i[a],_={main:c.main,deps:n[a]||{},map:i[a]};d(m),s.writeFileSync(t.join(m,"moduleConfig.json"),JSON.stringify(_));for(const n in j){const i=j[n];if(!Array.isArray(i)||0===i.length)continue;const c=new o.Bundle({separator:"\n"});for(const a of i){const i=t.join(e,a);if(s.existsSync(i)&&t.basename(i)!==n&&/\.js$/i.test(a))try{const{code:e}=r.transformSync(s.readFileSync(i,"utf-8"),{loader:"js",format:"cjs",target:"es2015"}),t=a.replace(/\\/g,"/"),n=`define("game:${t}", ["require", "requireAsync", "module", "exports", "sandboxGlobal"], function(require, requireAsync, module, exports, sandboxGlobal){\nwith(sandboxGlobal){\n`,m="\n}\n});\n",u=new o(e,{filename:t});u.prepend(n),u.append(m),c.addSource({content:u,filename:t})}catch(s){l.error(`pack error, relPath:${a},e:${s}`)}}const d=t.join(m,t.basename(n)),k=c.toString();if(null===(g=null==u?void 0:u.dev)||void 0===g?void 0:g.enableSourcemap){const e=c.generateMap({hires:!0,includeContent:!0,file:t.basename(n)});if(null===(f=null==u?void 0:u.dev)||void 0===f?void 0:f.inlineSourcemap){const t=k+`\n//# sourceMappingURL=data:application/json;base64,${Buffer.from(e.toString()).toString("base64")}`+`\n//# sourceURL=${n}`;s.writeFileSync(d,t,"utf-8")}else{const a=`http://${null===(b=null==u?void 0:u.dev)||void 0===b?void 0:b.host}:${null===(p=null==u?void 0:u.dev)||void 0===p?void 0:p.port}/game/files`,i=t.basename(n)+".map",c=t.join(m,i);s.writeFileSync(c,e.toString(),"utf-8");const o=k+`\n//# sourceMappingURL=${a}/${n}.map`+`\n//# sourceURL=${n}`;s.writeFileSync(d,o,"utf-8")}}else{const e=k+`\n//# sourceURL=${n}`;s.writeFileSync(d,e,"utf-8")}l.info(`pack end,packName:${a}`)}}({gameEntry:e,allDeps:m,allMaps:u,pkgName:i,pkgConfig:b,destRoot:k,config:n}),await A({gameEntry:e,gameOutput:a,pkgRoot:p,destRoot:k,packedFiles:C(u),skipDirs:["subpackages"]});f(t.join(a,i)),l.info(`基于游戏源代码打包分包完成,包名:${i}`),l.info(`基于游戏源代码打包分包耗时,包名:${i},耗时:${Date.now()-g}ms`)}),l.info(`pack end,duration:${Date.now()-i}ms`),{}}exports.buildOdrPkgs=async function({tempDir:e}){s.existsSync(e)&&s.rmSync(e,{recursive:!0}),s.mkdirSync(e);const a=function(){const{MinisPackagingInfoMap:s}=D;return Object.keys(s).map(e=>({id:e,packages:JSON.parse(s[e].ODRPackages)}))}();l.info("odr_games"),await M(a,e);const n={};for(const s of a){const{id:a}=s,i=t.join(e,a);n[a]=x(i)}const i={};S.forEach(s=>{i[s]=[]});const c={};for(const o of a){const{id:a,packages:r}=o,m=n[a];if(m>v)continue;let u=null;for(const c of S){const o=t.join(e,c);s.existsSync(o)||s.mkdirSync(o);if(i[c].reduce((s,e)=>s+n[e],0)+m<=v){const n=t.join(e,a),r=t.join(o,a);s.cpSync(n,r,{recursive:!0}),i[c].push(a),u=c;break}}if(u){c[a]={tag:u,packages:{}};for(const s in r){const e=r[s];l.info(`TTMGODRConfig[gameId].packages, ${e}, ${s}`),c[a].packages[s]={root:e.root,main:e.main,asset_md5:e.asset_md5,asset_url:e.asset_url}}console.log(`finish to build ${a}`),s.rmSync(t.join(e,a),{recursive:!0})}}const o=t.join(e,"TTMG_ODR_CONFIG.json");s.writeFileSync(o,JSON.stringify(c,null,2),"utf-8"),l.info(`TTMG_ODR_CONFIG.json 已生成: ${o}`)},exports.buildPkgs=async function(e){const{entry:a,output:n,build:i}=e;let c=Date.now();l.init(n,!0),l.info("TTMG_PACK_VERSION: 0.0.30"),l.info(`pack start, startTime:${c}`),await N({entryDir:a,config:e}),await G({config:e,gameEntry:a,gameOutput:n}),(null==i?void 0:i.enableOdr)&&await async function(e){let a=Date.now();l.info(`makeOdrPkgs start, ${a}`);const n=t.join(e,b),i=JSON.parse(s.readFileSync(n,"utf-8")),c=i.packages;for(const a in c){const n=t.join(e,a),i=t.join(e,`${a}${h}`),o=t.join(e,`${a}${y}`);d(i),d(o),s.cpSync(n,i,{recursive:!0}),s.cpSync(n,o,{recursive:!0}),q(i),w(o),c[`${a}${h}`]=Object.assign(Object.assign({},c[a]),{code_url:"",code_md5:"",output:`${a}${h}${_}`}),c[`${a}${y}`]=Object.assign(Object.assign({},c[a]),{asset_url:"",asset_md5:"",output:`${a}${y}${_}`})}s.writeFileSync(n,JSON.stringify(i,null,2)),l.info(`makeOdrPkgs end, ${Date.now()-a}ms`)}(n),l.info(`pack end:${Date.now()-c}ms`)},exports.debugPkgs=async function(e){const{entry:a,output:n,dev:{enableLog:i}}=e;l.init(n,i);try{await N({entryDir:a,config:e}),await G({gameEntry:a,gameOutput:n,config:e}),await function(e){l.info("mergePkgs start");const a=t.join(e,b);let n;try{n=JSON.parse(s.readFileSync(a,"utf-8"))}catch(s){return void l.error(`读取配置文件失败: ${a}, err: ${s.message}`)}const i=n.packages;if(i&&"object"==typeof i){for(const a of Object.keys(i)){const n=t.join(e,a);if(!s.existsSync(n)){l.warn(`package 目录不存在: ${n}`);continue}const i=s.readdirSync(n);for(const a of i){const i=t.join(n,a),c=t.join(e,a);try{const e=s.statSync(i);if(e.isFile())s.copyFileSync(i,c);else if(e.isDirectory())s.cpSync(i,c,{recursive:!0});else if(e.isSymbolicLink()){const t=s.readlinkSync(i);s.existsSync(c)&&s.rmSync(c,{force:!0}),s.symlinkSync(t,c,e.isDirectory()?"dir":"file")}l.info(`合并文件/目录: ${i} -> ${c}`)}catch(s){l.error(`处理文件失败: ${i}, err: ${s.message}`)}}try{s.rmSync(n,{recursive:!0,force:!0}),l.info(`已删除 package 目录: ${n}`)}catch(s){l.error(`删除 package 目录失败: ${n}, err: ${s.message}`)}}l.info("mergePkgs 完成")}else l.error("配置文件中 packages 字段无效, 请检查配置")}(n);const i=s.readFileSync(t.join(n,b),"utf-8");return{isSuccess:!0,packages:JSON.parse(i).packages}}catch(s){return{isSuccess:!1,errorMsg:s.message}}},exports.writeOdrConfig=async function(s){l.info("writeOdrPackagesConfig start");const e=g.join(s,b),t=JSON.parse(u.readFileSync(e,"utf-8")),a=t.packages,n=t.odr_packages||{};for(const s in a){if(s.endsWith(h)){const e=a[s],t=s.split(h)[0];n[t]||(n[t]={}),n[t]=Object.assign(Object.assign({},n[t]),{root:e.root,code_output:e.output,code_md5:e.md5,main:e.main}),delete a[s]}if(s.endsWith(y)){const e=s.split(y)[0],t=a[s];n[e]=Object.assign(Object.assign({},n[e]),{root:t.root,asset_output:t.output,asset_md5:t.md5}),delete a[s]}}t.odr_packages=n,u.writeFileSync(e,JSON.stringify(t,null,2)),l.info("writeOdrPackagesConfig end")};
10
10
  //# sourceMappingURL=index.js.map
@@ -17,7 +17,7 @@ export interface CheckConfig {
17
17
  export interface BuildConfig {
18
18
  entry: string;
19
19
  output: string;
20
- dev: {
20
+ dev?: {
21
21
  enable: boolean;
22
22
  port: number;
23
23
  host: string;
package/package.json CHANGED
@@ -1,14 +1,15 @@
1
1
  {
2
2
  "name": "ttmg-pack",
3
3
  "author": "ttmg",
4
- "version": "0.0.29",
4
+ "version": "0.0.30",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
7
  "scripts": {
8
8
  "build": "rollup -c && tsc-alias -p tsconfig.json",
9
9
  "prepublishOnly": "npm run build",
10
10
  "watch": "rollup -c --watch",
11
- "test": "npm run build && node __TEST__/index.js"
11
+ "test": "npm run build && node __TEST__/index.js",
12
+ "debug": "npm run build && node __TEST__/debug.js"
12
13
  },
13
14
  "files": [
14
15
  "dist"