@ttmg/cli 0.4.1 → 0.4.2
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/dist/index.js +126 -18
- package/dist/index.js.map +1 -1
- package/dist/public/assets/Detail-DNF1PK-R.js +1 -0
- package/dist/public/assets/Detail-DNF1PK-R.js.br +0 -0
- package/dist/public/assets/MonetizationMode-C59U6Ari.js +1 -0
- package/dist/public/assets/MonetizationModeSummary-BR2LJFsU.js +1 -0
- package/dist/public/assets/SectionHeader-CCjfBKcF.js +1 -0
- package/dist/public/assets/Tag-DON36Of0.js +1 -0
- package/dist/public/assets/baseForm-B3oZF8Vp.js +10 -0
- package/dist/public/assets/baseForm-B3oZF8Vp.js.br +0 -0
- package/dist/public/assets/baseForm-BAvk37jF.css +1 -0
- package/dist/public/assets/baseForm-BAvk37jF.css.br +0 -0
- package/dist/public/assets/{boxes-C7RoIbId.js → boxes-EbMNfQ6U.js} +1 -1
- package/dist/public/assets/{chevron-right-B1WBZrrD.js → chevron-right-CsmjM7t0.js} +1 -1
- package/dist/public/assets/col-BXewy14r.css +1 -0
- package/dist/public/assets/col-BXewy14r.css.br +0 -0
- package/dist/public/assets/col-DWGIx7fj.js +1 -0
- package/dist/public/assets/{compass-VJNhHwqW.js → compass-bMD5nDM8.js} +1 -1
- package/dist/public/assets/index-B4j49Ts7.js +1 -0
- package/dist/public/assets/index-B4j49Ts7.js.br +0 -0
- package/dist/public/assets/{index-a-rMUS2V.js → index-B5JnznvI.js} +1 -1
- package/dist/public/assets/index-BCV7VBUL.js +1 -0
- package/dist/public/assets/index-BCV7VBUL.js.br +0 -0
- package/dist/public/assets/index-BKOO94x-.css +1 -0
- package/dist/public/assets/index-BPqSXmk6.js +1 -0
- package/dist/public/assets/index-Bn_Zugqv.js +1 -0
- package/dist/public/assets/index-Bn_Zugqv.js.br +0 -0
- package/dist/public/assets/index-BtO50Nho.js +1 -0
- package/dist/public/assets/index-BtO50Nho.js.br +0 -0
- package/dist/public/assets/{index-C_npSvtQ.js → index-BzEQAUVA.js} +1 -1
- package/dist/public/assets/{index-Dn5HHf-0.js → index-CAoj7RMM.js} +1 -1
- package/dist/public/assets/index-CKUVWl_O.css +1 -0
- package/dist/public/assets/index-CMwzPrAh.css +1 -0
- package/dist/public/assets/index-CMwzPrAh.css.br +0 -0
- package/dist/public/assets/index-CYnulX57.css +1 -0
- package/dist/public/assets/index-CYnulX57.css.br +0 -0
- package/dist/public/assets/{index-BH099q_U.js → index-Ca-cQ1Oq.js} +1 -1
- package/dist/public/assets/{index-s_30KWiA.js → index-CdJUBcSF.js} +1 -1
- package/dist/public/assets/{index-bQUQ2Wmz.js → index-Cf8aH-xI.js} +1 -1
- package/dist/public/assets/{index-DMsjcIN8.js → index-D4lGRib1.js} +1 -1
- package/dist/public/assets/index-D5-FwYf-.js +1 -0
- package/dist/public/assets/index-D5-FwYf-.js.br +0 -0
- package/dist/public/assets/{index-BO5MBsdm.js → index-DH7hBDqZ.js} +1 -1
- package/dist/public/assets/index-DKxf26_O.css +1 -0
- package/dist/public/assets/index-DOMxPC_v.css +1 -0
- package/dist/public/assets/index-DOMxPC_v.css.br +0 -0
- package/dist/public/assets/index-DRr-Punk.js +1 -0
- package/dist/public/assets/index-DV0N-QmJ.js +1 -0
- package/dist/public/assets/index-DV0N-QmJ.js.br +0 -0
- package/dist/public/assets/index-DXEfgIqc.js +1 -0
- package/dist/public/assets/{index-BBR3CPkN.js → index-DaOr2P0A.js} +1 -1
- package/dist/public/assets/index-DaOr2P0A.js.br +0 -0
- package/dist/public/assets/index-Dv0bhjYp.js +1 -0
- package/dist/public/assets/{index-qqnHwFjO.js → index-Dx-boSFk.js} +1 -1
- package/dist/public/assets/{index-C1C34gtn.js → index-FYgsnJbm.js} +1 -1
- package/dist/public/assets/index-HqjZ5P-l.css +1 -0
- package/dist/public/assets/{index-BJZ4gOGZ.css → index-V1Go68Vw.css} +1 -1
- package/dist/public/assets/index-V1Go68Vw.css.br +0 -0
- package/dist/public/assets/index-VvBtuIHK.css +1 -0
- package/dist/public/assets/index-VvBtuIHK.css.br +0 -0
- package/dist/public/assets/index-VvUpVuij.js +21 -0
- package/dist/public/assets/index-VvUpVuij.js.br +0 -0
- package/dist/public/assets/index-VzIFpCiL.js +1 -0
- package/dist/public/assets/{index-DbxY65Om.js → index-bASdAMHs.js} +1 -1
- package/dist/public/assets/index-q7fKJFmZ.js +1 -0
- package/dist/public/assets/index-vlN_-PRJ.css +1 -0
- package/dist/public/assets/{layers-Biv61qtE.js → layers-C8HCSIXn.js} +1 -1
- package/dist/public/assets/list-checks-B6t2uu5m.js +1 -0
- package/dist/public/assets/{sparkles-Bv2GxrFr.js → sparkles-pLu1TMVV.js} +1 -1
- package/dist/public/assets/triangle-alert-Dm4_sEwV.js +1 -0
- package/dist/public/assets/{zap-CjkC_qWZ.js → zap-tefJh46p.js} +1 -1
- package/dist/public/index.html +2 -2
- package/dist/scripts/docs/README.md +80 -0
- package/dist/scripts/docs/capture.js +84 -6
- package/dist/scripts/docs/check.js +184 -0
- package/dist/scripts/docs/render.js +283 -6
- package/dist/scripts/docs/scenarios/devtool-guide.mjs +802 -0
- package/package.json +1 -1
- package/CHANGELOG.md +0 -267
- package/dist/public/assets/Card-ASGGlJ8S.js +0 -1
- package/dist/public/assets/Detail-DY__Zw0r.js +0 -1
- package/dist/public/assets/Detail-DY__Zw0r.js.br +0 -0
- package/dist/public/assets/MonetizationMode-sHN_4ybQ.js +0 -1
- package/dist/public/assets/MonetizationModeSummary-DLvyriLM.js +0 -1
- package/dist/public/assets/SectionHeader-B7dueBCf.js +0 -1
- package/dist/public/assets/Tag-BsX0d6UL.js +0 -1
- package/dist/public/assets/arrow-left-uixm7Sd1.js +0 -1
- package/dist/public/assets/baseForm-C8XfTFyG.js +0 -10
- package/dist/public/assets/baseForm-C8XfTFyG.js.br +0 -0
- package/dist/public/assets/baseForm-Dl4zA6hU.css +0 -1
- package/dist/public/assets/baseForm-Dl4zA6hU.css.br +0 -0
- package/dist/public/assets/circle-check-wUxXeINd.js +0 -1
- package/dist/public/assets/index-BAud2cRu.css +0 -1
- package/dist/public/assets/index-BBR3CPkN.js.br +0 -0
- package/dist/public/assets/index-BJZ4gOGZ.css.br +0 -0
- package/dist/public/assets/index-BNc8JtET.js +0 -1
- package/dist/public/assets/index-Bd-f8ERX.js +0 -1
- package/dist/public/assets/index-ByX5RuFA.css +0 -1
- package/dist/public/assets/index-C7Tmy9g3.js +0 -1
- package/dist/public/assets/index-CCKb9Y-j.js +0 -14
- package/dist/public/assets/index-CCKb9Y-j.js.br +0 -0
- package/dist/public/assets/index-CFd8iglC.css +0 -1
- package/dist/public/assets/index-CFd8iglC.css.br +0 -0
- package/dist/public/assets/index-CKhfKyA3.js +0 -1
- package/dist/public/assets/index-CKhfKyA3.js.br +0 -0
- package/dist/public/assets/index-Cc1ilXmc.css +0 -1
- package/dist/public/assets/index-DHXlsTU6.css +0 -1
- package/dist/public/assets/index-DHXlsTU6.css.br +0 -0
- package/dist/public/assets/index-DNd8ZTok.js +0 -1
- package/dist/public/assets/index-DNd8ZTok.js.br +0 -0
- package/dist/public/assets/index-DpkktYot.css +0 -1
- package/dist/public/assets/index-DtoDrber.js +0 -1
- package/dist/public/assets/index-DtoDrber.js.br +0 -0
- package/dist/public/assets/index-ZHPtAdJM.js +0 -1
- package/dist/public/assets/index-ZHPtAdJM.js.br +0 -0
- package/dist/public/assets/index-ZtlCPCV9.js +0 -1
- package/dist/public/assets/index-_6n0s04V.css +0 -1
- package/dist/public/assets/index-_6n0s04V.css.br +0 -0
- package/dist/public/assets/index-r3aSeNL1.js +0 -1
- package/dist/public/assets/index-t4JeqZ4a.js +0 -1
package/dist/index.js
CHANGED
|
@@ -6615,8 +6615,9 @@ function verboseWarn(...args) {
|
|
|
6615
6615
|
/**
|
|
6616
6616
|
* PPE / 测试环境开关。
|
|
6617
6617
|
*
|
|
6618
|
-
*
|
|
6619
|
-
*
|
|
6618
|
+
* 除登录和本地客户端请求外,CLI 后端接口(`stark_wasm/v4/*`,
|
|
6619
|
+
* `wasm-collect/v1/*`, portal 业务接口等)都共用本文件的 `request()`,
|
|
6620
|
+
* 所以在这里统一注入 PPE header 就能覆盖主要平台请求。
|
|
6620
6621
|
* 不在 `DEV_HEADERS` 里改是因为那份常量只被 `remotePipeline.ts` 里的老
|
|
6621
6622
|
* 远程分包接口 spread 用;新加的 `startSession.ts` / `finishSession.ts` /
|
|
6622
6623
|
* `getCollectedFuncIds.ts` 都没 spread,漏一处就会绕开 PPE。
|
|
@@ -6624,8 +6625,8 @@ function verboseWarn(...args) {
|
|
|
6624
6625
|
* 要切回线上环境,直接把 `CLI_PPE_ENV` 设成空串即可(下方条件 spread 会
|
|
6625
6626
|
* 自动不带这两个 header)。
|
|
6626
6627
|
*/
|
|
6627
|
-
|
|
6628
|
-
const
|
|
6628
|
+
const CLI_PPE_ENV = 'ppe_role_perm'; // 走权限体系 PPE 环境
|
|
6629
|
+
const NETWORK_PROXY_ERROR_CODE = -1001;
|
|
6629
6630
|
function getAxiosProxyConfig() {
|
|
6630
6631
|
const config = getTTMGRC();
|
|
6631
6632
|
// 优先级: http-proxy > socks-proxy > proxy (老字段兼容)
|
|
@@ -6818,21 +6819,31 @@ async function request({ url, method, data, headers, params, logRequestBody = tr
|
|
|
6818
6819
|
};
|
|
6819
6820
|
}
|
|
6820
6821
|
catch (err) {
|
|
6822
|
+
const axiosError = err;
|
|
6823
|
+
const responseData = axiosError.response?.data;
|
|
6824
|
+
const networkError = responseData
|
|
6825
|
+
? responseData
|
|
6826
|
+
: {
|
|
6827
|
+
StatusCode: NETWORK_PROXY_ERROR_CODE,
|
|
6828
|
+
StatusMessage: 'Platform API request failed. Check whether the terminal proxy or VPN is applied to ttmg.',
|
|
6829
|
+
NetworkCode: axiosError.code,
|
|
6830
|
+
NetworkMessage: axiosError.message,
|
|
6831
|
+
};
|
|
6821
6832
|
if (isVerboseEnabled()) {
|
|
6822
6833
|
printApiResponseLog('API Error', {
|
|
6823
|
-
status:
|
|
6824
|
-
logid:
|
|
6825
|
-
data:
|
|
6834
|
+
status: axiosError.response?.status,
|
|
6835
|
+
logid: axiosError.response?.headers['x-tt-logid'],
|
|
6836
|
+
data: networkError,
|
|
6826
6837
|
});
|
|
6827
6838
|
}
|
|
6828
6839
|
// @ts-ignore
|
|
6829
6840
|
return {
|
|
6830
6841
|
data: null,
|
|
6831
6842
|
ctx: {
|
|
6832
|
-
logid:
|
|
6833
|
-
httpStatusCode:
|
|
6843
|
+
logid: axiosError.response?.headers['x-tt-logid'],
|
|
6844
|
+
httpStatusCode: axiosError.response?.status ?? 0,
|
|
6834
6845
|
},
|
|
6835
|
-
error:
|
|
6846
|
+
error: networkError,
|
|
6836
6847
|
};
|
|
6837
6848
|
}
|
|
6838
6849
|
}
|
|
@@ -6995,6 +7006,7 @@ async function fetchGameAssets({ miniGameId, }) {
|
|
|
6995
7006
|
});
|
|
6996
7007
|
}
|
|
6997
7008
|
|
|
7009
|
+
const GAME_INFO_NETWORK_ERROR_CODE = -1001;
|
|
6998
7010
|
async function fetchGameInfo(clientKey) {
|
|
6999
7011
|
// 访问 V4 接口
|
|
7000
7012
|
const response = await request({
|
|
@@ -7005,10 +7017,14 @@ async function fetchGameInfo(clientKey) {
|
|
|
7005
7017
|
},
|
|
7006
7018
|
});
|
|
7007
7019
|
if (!response?.data) {
|
|
7020
|
+
const error = response?.error;
|
|
7021
|
+
const hasHttpResponse = Boolean(response?.ctx?.httpStatusCode);
|
|
7022
|
+
const fallbackErrorCode = hasHttpResponse ? -1 : GAME_INFO_NETWORK_ERROR_CODE;
|
|
7008
7023
|
return {
|
|
7009
7024
|
error: {
|
|
7010
|
-
errorCode:
|
|
7011
|
-
errorMsg:
|
|
7025
|
+
errorCode: error?.StatusCode ?? fallbackErrorCode,
|
|
7026
|
+
errorMsg: error?.StatusMessage ||
|
|
7027
|
+
'Platform API request failed. Check terminal proxy or VPN configuration.',
|
|
7012
7028
|
clientKey: clientKey,
|
|
7013
7029
|
},
|
|
7014
7030
|
data: null,
|
|
@@ -7189,6 +7205,7 @@ const messages = {
|
|
|
7189
7205
|
'cli.command.reset.desc': 'Reset local CLI state',
|
|
7190
7206
|
'cli.command.init.desc': 'Initialize project',
|
|
7191
7207
|
'cli.command.dev.desc': 'Open browser dev environment',
|
|
7208
|
+
'cli.command.dev.clientKey': 'Client Key of the Mini Game',
|
|
7192
7209
|
'cli.command.build.desc': 'Bundle project',
|
|
7193
7210
|
'cli.command.config.desc': 'Manage configuration',
|
|
7194
7211
|
'cli.command.config.set.desc': 'Set a configuration value',
|
|
@@ -7320,6 +7337,7 @@ const messages = {
|
|
|
7320
7337
|
'cli.command.reset.desc': '重置本地 CLI 状态',
|
|
7321
7338
|
'cli.command.init.desc': '初始化项目',
|
|
7322
7339
|
'cli.command.dev.desc': '打开浏览器调试环境',
|
|
7340
|
+
'cli.command.dev.clientKey': '小游戏的 Client Key',
|
|
7323
7341
|
'cli.command.build.desc': '打包项目',
|
|
7324
7342
|
'cli.command.config.desc': '管理配置',
|
|
7325
7343
|
'cli.command.config.set.desc': '设置配置项',
|
|
@@ -8873,7 +8891,14 @@ function getLocalIP() {
|
|
|
8873
8891
|
return '127.0.0.1';
|
|
8874
8892
|
}
|
|
8875
8893
|
|
|
8876
|
-
async function init() {
|
|
8894
|
+
async function init(options = {}) {
|
|
8895
|
+
const providedClientKey = options.clientKey?.trim();
|
|
8896
|
+
if (providedClientKey) {
|
|
8897
|
+
setTTMGRC({
|
|
8898
|
+
clientKey: providedClientKey,
|
|
8899
|
+
});
|
|
8900
|
+
return;
|
|
8901
|
+
}
|
|
8877
8902
|
const promptModule = inquirer.createPromptModule();
|
|
8878
8903
|
const { clientKey: lastUsedClientKey } = getTTMGRC() || {};
|
|
8879
8904
|
if (lastUsedClientKey) {
|
|
@@ -9440,6 +9465,33 @@ const gameCheckRoute = {
|
|
|
9440
9465
|
};
|
|
9441
9466
|
|
|
9442
9467
|
const changelog = [
|
|
9468
|
+
{
|
|
9469
|
+
title: '0.4.2',
|
|
9470
|
+
target: {
|
|
9471
|
+
iOS: '>=43.1',
|
|
9472
|
+
Android: '>=43.1',
|
|
9473
|
+
},
|
|
9474
|
+
changes: {
|
|
9475
|
+
optimize: [
|
|
9476
|
+
{
|
|
9477
|
+
desc: {
|
|
9478
|
+
'zh-CN': "优化异常状态提示文案,更准确地引导开发者解决问题",
|
|
9479
|
+
'en-US': "Optimize exception status prompt text, guide developers to solve problems more accurately",
|
|
9480
|
+
},
|
|
9481
|
+
module: 'new',
|
|
9482
|
+
},
|
|
9483
|
+
],
|
|
9484
|
+
feature: [
|
|
9485
|
+
{
|
|
9486
|
+
desc: {
|
|
9487
|
+
'zh-CN': '新增版本信息模块,展示游戏版本信息,包括版本号、发布时间、发布者等',
|
|
9488
|
+
'en-US': 'Add version information module to display game version information, including version number, release time, release author, etc.',
|
|
9489
|
+
},
|
|
9490
|
+
module: 'detail',
|
|
9491
|
+
},
|
|
9492
|
+
],
|
|
9493
|
+
},
|
|
9494
|
+
},
|
|
9443
9495
|
{
|
|
9444
9496
|
title: '0.4.1',
|
|
9445
9497
|
target: {
|
|
@@ -13249,6 +13301,35 @@ function collectPreloadSubpackages(entry, reported) {
|
|
|
13249
13301
|
}
|
|
13250
13302
|
return { entry, parallelPreloadSubpackages };
|
|
13251
13303
|
}
|
|
13304
|
+
/**
|
|
13305
|
+
* 重新收集前清除当前入口已写入的预加载配置。
|
|
13306
|
+
*
|
|
13307
|
+
* 与空采集写入不同,这里直接删除 `parallelPreloadSubpackages` 字段,让源码
|
|
13308
|
+
* game.json 回到“未配置”的状态,避免下一轮真机预览仍携带旧启动预加载策略。
|
|
13309
|
+
*/
|
|
13310
|
+
function clearPreloadSubpackagesConfig(entry) {
|
|
13311
|
+
const game = readRawGameJson();
|
|
13312
|
+
validateCollect(game, entry, []);
|
|
13313
|
+
let started = false;
|
|
13314
|
+
try {
|
|
13315
|
+
const container = isGameEntry(entry)
|
|
13316
|
+
? game.json
|
|
13317
|
+
: findSubpackage(game, entry);
|
|
13318
|
+
if (!container) {
|
|
13319
|
+
throw new Error(`入口 ${entry} 不存在`);
|
|
13320
|
+
}
|
|
13321
|
+
started = true;
|
|
13322
|
+
delete container[PRELOAD_FIELD_NAME];
|
|
13323
|
+
writeGameJson(game);
|
|
13324
|
+
}
|
|
13325
|
+
catch (err) {
|
|
13326
|
+
if (started) {
|
|
13327
|
+
restoreGameJson(game);
|
|
13328
|
+
}
|
|
13329
|
+
throw err;
|
|
13330
|
+
}
|
|
13331
|
+
return { entry, parallelPreloadSubpackages: [] };
|
|
13332
|
+
}
|
|
13252
13333
|
|
|
13253
13334
|
/**
|
|
13254
13335
|
* 读取某个启动入口已有的 parallelPreloadSubpackages(只读),用于 UI 初始化
|
|
@@ -13327,6 +13408,31 @@ const gameCollectPreloadSubpackagesRoute = {
|
|
|
13327
13408
|
},
|
|
13328
13409
|
};
|
|
13329
13410
|
|
|
13411
|
+
/**
|
|
13412
|
+
* 删除某个启动入口已写入的 parallelPreloadSubpackages,用于重新收集前清理
|
|
13413
|
+
* 旧配置,避免下一轮真机预览仍携带上一轮结果。
|
|
13414
|
+
*
|
|
13415
|
+
* body: `{ entry }`(缺省按主包 `__GAME__` 处理)。
|
|
13416
|
+
*/
|
|
13417
|
+
const gameClearPreloadSubpackagesConfigRoute = {
|
|
13418
|
+
method: 'post',
|
|
13419
|
+
path: '/game/clear-preload-subpackages-config',
|
|
13420
|
+
handler: async (req, res) => {
|
|
13421
|
+
const entry = req.body?.entry || GAME_ENTRY;
|
|
13422
|
+
console.log('clear-preload-subpackages-config', { entry });
|
|
13423
|
+
try {
|
|
13424
|
+
const data = clearPreloadSubpackagesConfig(entry);
|
|
13425
|
+
res.send({ code: successCode, data });
|
|
13426
|
+
}
|
|
13427
|
+
catch (err) {
|
|
13428
|
+
res.send({
|
|
13429
|
+
code: errorCode,
|
|
13430
|
+
error: { message: err.message },
|
|
13431
|
+
});
|
|
13432
|
+
}
|
|
13433
|
+
},
|
|
13434
|
+
};
|
|
13435
|
+
|
|
13330
13436
|
const routes = [
|
|
13331
13437
|
gameAssetPreviewUrlRoute,
|
|
13332
13438
|
gameAssetsRoute,
|
|
@@ -13363,6 +13469,7 @@ const routes = [
|
|
|
13363
13469
|
gamePreloadSubpackagesConfigRoute,
|
|
13364
13470
|
gamePreloadSubpackageCandidatesRoute,
|
|
13365
13471
|
gameCollectPreloadSubpackagesRoute,
|
|
13472
|
+
gameClearPreloadSubpackagesConfigRoute,
|
|
13366
13473
|
];
|
|
13367
13474
|
/**
|
|
13368
13475
|
* Express 4 does not catch rejections from async route handlers — an
|
|
@@ -13444,9 +13551,9 @@ async function start() {
|
|
|
13444
13551
|
openUrl(url);
|
|
13445
13552
|
}
|
|
13446
13553
|
|
|
13447
|
-
async function dev() {
|
|
13554
|
+
async function dev(options = {}) {
|
|
13448
13555
|
await check();
|
|
13449
|
-
await init();
|
|
13556
|
+
await init({ clientKey: options.clientKey });
|
|
13450
13557
|
await start();
|
|
13451
13558
|
await compile();
|
|
13452
13559
|
listen$1();
|
|
@@ -13950,14 +14057,15 @@ withVerboseOption(program
|
|
|
13950
14057
|
withVerboseOption(program
|
|
13951
14058
|
.option('--h5', t('cli.option.h5'))
|
|
13952
14059
|
.command('dev')
|
|
13953
|
-
.description(t('cli.command.dev.desc'))
|
|
13954
|
-
.
|
|
14060
|
+
.description(t('cli.command.dev.desc'))
|
|
14061
|
+
.option('-ck, --client-key <clientKey>', t('cli.command.dev.clientKey')))
|
|
14062
|
+
.action(async (cmd) => {
|
|
13955
14063
|
const options = program.opts();
|
|
13956
14064
|
if (options.h5) {
|
|
13957
14065
|
await dev$1();
|
|
13958
14066
|
}
|
|
13959
14067
|
else {
|
|
13960
|
-
await dev();
|
|
14068
|
+
await dev({ clientKey: cmd.clientKey });
|
|
13961
14069
|
}
|
|
13962
14070
|
checkUpdate();
|
|
13963
14071
|
});
|