dsh-life-pack 0.3.39 → 0.3.40
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/client.js +4999 -2684
- package/dist/client.js.map +1 -1
- package/dist/config-panel-contract.d.ts +84 -2
- package/dist/config-panel-contract.d.ts.map +1 -1
- package/dist/config-panel-contract.js +84 -2
- package/dist/config-panel-contract.js.map +1 -1
- package/dist/config-panel-view.d.ts +11 -0
- package/dist/config-panel-view.d.ts.map +1 -1
- package/dist/config-panel-view.js +147 -16
- package/dist/config-panel-view.js.map +1 -1
- package/dist/config-panel.js +1 -1
- package/dist/config-panel.js.map +1 -1
- package/dist/directory-browser-parts.d.ts.map +1 -1
- package/dist/directory-browser-parts.js +39 -2
- package/dist/directory-browser-parts.js.map +1 -1
- package/dist/directory-browser-ui.d.ts.map +1 -1
- package/dist/directory-browser-ui.js +65 -6
- package/dist/directory-browser-ui.js.map +1 -1
- package/dist/health-fetch.d.ts +3 -3
- package/dist/health-fetch.d.ts.map +1 -1
- package/dist/health-view.d.ts.map +1 -1
- package/dist/health-view.js +8 -1
- package/dist/health-view.js.map +1 -1
- package/dist/index.d.ts +16 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +37 -30
- package/dist/index.js.map +1 -1
- package/dist/seal-scroll.d.ts +3 -1
- package/dist/seal-scroll.d.ts.map +1 -1
- package/dist/seal-scroll.js +26 -14
- package/dist/seal-scroll.js.map +1 -1
- package/dist/update-batch.d.ts +17 -0
- package/dist/update-batch.d.ts.map +1 -0
- package/dist/update-batch.js +84 -0
- package/dist/update-batch.js.map +1 -0
- package/dist/update-contract.d.ts +4 -63
- package/dist/update-contract.d.ts.map +1 -1
- package/dist/update-contract.js +9 -95
- package/dist/update-contract.js.map +1 -1
- package/dist/update-dialog.d.ts +16 -0
- package/dist/update-dialog.d.ts.map +1 -0
- package/dist/update-dialog.js +72 -0
- package/dist/update-dialog.js.map +1 -0
- package/dist/update-targets.d.ts +2 -7
- package/dist/update-targets.d.ts.map +1 -1
- package/dist/update-targets.js +5 -11
- package/dist/update-targets.js.map +1 -1
- package/package.json +2 -2
package/dist/update-contract.js
CHANGED
|
@@ -1,113 +1,27 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/** 总管与面板之间的共享常量:载体、槽名、电话名、版本降级字面量。
|
|
2
2
|
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
|
|
3
|
+
* 说明(票 1168 缺席态):本仓更新代码已全部移除,更新区藏入口。
|
|
4
|
+
* 本文件仅保留仍被非更新代码取用的共享位,更新专用部分已随更新代码删除。
|
|
5
|
+
* 0.5.1 新接线由 wire 票 1170 重建,此处不预留。
|
|
6
|
+
*/
|
|
7
7
|
export const CONFIG_TAB_SLOT = 'ilife.config-tab';
|
|
8
|
-
/** 载体基段:`connection.rpc.call` 的**第一段**参数,宿主注册路径与它同源(`'/api' + 通道名`)。
|
|
9
|
-
*
|
|
10
|
-
* 一处定义(#735):总管自己的电话、以及面板到各家的每一通电话,第一段都必须是它。
|
|
11
|
-
* 真机实现(`dsh-client-connection/lib/client.js`):URL = `${第一段}/${第二段}`、信封 `method` = 第二段。
|
|
12
|
-
* 传错第一段就是 404:总管自己的电话在 #678 栽过一次,各家的配置体检在 #735 又栽过一次
|
|
13
|
-
* (那次传的是通道名 `/ilife-<技能>`,拼出来的地址上没有注册过那条路由,六家全 404)。 */
|
|
14
8
|
export const CARRIER_BASE = '/api';
|
|
15
|
-
/** 载体:宿主注册 `connection.fetch.register` 的路径 / 面板 `connection.rpc.call` 的两段参数。 */
|
|
16
9
|
export const MANAGER_RPC = {
|
|
17
|
-
/** 载体基段(`connection.rpc.call` 的**第一段**参数)。传错第一段就是 404:真机上踩过一次。 */
|
|
18
10
|
base: CARRIER_BASE,
|
|
19
|
-
/** 单段通道名,须 match `/^\/[A-Za-z0-9._~-]+$/`(cookbook §6)。 */
|
|
20
11
|
channel: '/ilife-manager',
|
|
21
|
-
/** 面板侧第二段参数(等于通道名去掉前导斜杠那一段)。 */
|
|
22
12
|
endpoint: 'ilife-manager',
|
|
23
|
-
/** 宿主侧注册的完整路径(= `base` + `channel`)。 */
|
|
24
13
|
path: '/api/ilife-manager',
|
|
25
14
|
};
|
|
26
|
-
/** 总管自有电话名:更新包的三个动作名是冻结集合(`config.ts:14`),这里另起名字不撞车。 */
|
|
27
15
|
export const MANAGER_ACTIONS = {
|
|
28
|
-
/** 装上缺席的目标包:入参 `{packageName, version}`,回包 `{packageName, version}`。 */
|
|
29
|
-
install: 'ilife-manager.install',
|
|
30
|
-
/** 七个更新目标的表:入参 `{}`,回包 `{targets: [{key, title, packageName, phones, runningVersion, installedVersion, panelRegistered, skill}]}`。
|
|
31
|
-
*
|
|
32
|
-
* 电话名为什么由宿主转交而不是面板侧写死:更新包的三个电话名只有它自己知道
|
|
33
|
-
* (`update.phoneNames`,`host.ts:335`);面板侧既不能 import 更新包(浏览器产物纯度门)
|
|
34
|
-
* 也不该把名字再写一份(写两份必然走散)。宿主把名字表连同版本行一起交出去,
|
|
35
|
-
* 面板一行字面量都不留。 */
|
|
36
|
-
targets: 'ilife-manager.targets',
|
|
37
|
-
/** 本机「根」清单(票 #744):入参 `{}`,回包 `{roots: [{path, kind}]}`。
|
|
38
|
-
*
|
|
39
|
-
* 为什么这条能力住在总管:浏览器里没有卷清单接口,而宿主那条目录选择接缝只有
|
|
40
|
-
* `list`/`createDirectory` 两格——「这台机器上有哪些盘」只能由宿主去问操作系统。
|
|
41
|
-
* 六家的目录浏览器都取这一通电话,故名字与实现都只有这一处(清单本身见 `roots.ts`)。
|
|
42
|
-
* 回包**恒成功**:列不出来是空清单,不是错误码(界面据此只是不画那一行)。 */
|
|
43
16
|
roots: 'ilife-manager.roots',
|
|
44
17
|
};
|
|
45
|
-
/** 版本读不到时的降级字面量(读的人照原样看到 `unknown`,不假装知道版本;票 #918 的 `installedVersionOf` 用它)。
|
|
46
|
-
*
|
|
47
|
-
* 面板那行版本号**不再用它**(票 #986:构建期注入,没有「读不到」这一态);本字面量现在只服务宿主半。 */
|
|
48
18
|
export const VERSION_UNKNOWN = 'unknown';
|
|
49
|
-
/** 挂载取数失败的退避重试表(票 #982,更新目标表用)。
|
|
50
|
-
*
|
|
51
|
-
* 挂载时首次传输失败(宿主路由尚未就绪)会使错误态常驻整个会话;单次直返是当时的缺口。
|
|
52
|
-
* 次数有界、调用方负责卸载清理(见 `update-panel.ts` 的取数),不是无界轮询。 */
|
|
53
|
-
export const LOAD_RETRY_MS = [1000, 3000, 8000];
|
|
54
|
-
/** 更新包默认官方源(`config.ts:20`,总管侧拼手工命令时用同一个值)。 */
|
|
55
|
-
export const DEFAULT_REGISTRY = 'https://registry.npmjs.org/';
|
|
56
|
-
/** 装不了 / 装不成的人话原因表:八种 `blockedReason` + 过程错误码(更新包 README 第 8、12 节)。
|
|
57
|
-
*
|
|
58
|
-
* 每条都要三段齐全(票 #740 的文案判据):**事实**(哪里对不上)→ **后果**(这家现在能不能装)
|
|
59
|
-
* → **动作**(用户做得到、且面板上真有的那一步;面板代劳不了的走「下面这条命令」)。
|
|
60
|
-
* 禁用口语与自造词:「半截任务」「电话没接上」「回执异常」「还出现就重装」「查宿主日志」一律不写。
|
|
61
|
-
*
|
|
62
|
-
* 点名的按钮必须是**这一行上真够得着**的那颗(票 #740 第三轮):结果浮层一开就盖住题头的
|
|
63
|
-
* 「检查更新」,所以「改完再读一次」这类下一步一律写「重新检查」(画在那一行上);
|
|
64
|
-
* 只有发生在**重启之后**的下一步才写「检查更新」。反过来,凡是写着「下面这条命令」的那几句,
|
|
65
|
-
* 那一行的命令块必须真出来(判据 `Verdict.manualHint`)——两处都由门禁守着。 */
|
|
66
19
|
const REASON_TEXT = {
|
|
67
|
-
'
|
|
68
|
-
'
|
|
69
|
-
|
|
70
|
-
'installation-changed': '这台机器的安装清单变了(在别处装过、或清单被手工改过),这一家现在不能装。点「重新检查」重新读一次,再点「装上更新」。',
|
|
71
|
-
'pending-restart': '新版已装到磁盘,正在运行的是旧版本。重启 DSH(退出后重新打开)后生效。',
|
|
72
|
-
'registry-conflict': '使用范围清单里写的版本与磁盘上的实际版本对不上。打开使用范围的 `package.json`,把这一行改成磁盘上的版本号,再点「重新检查」。',
|
|
73
|
-
'incompatible-node': '新版本要求 Node 22 或更高,当前运行的是更低版本。升级 Node、重启 DSH 后,再点「检查更新」。',
|
|
74
|
-
// 这条只在「磁盘上的版本与正在运行的一致(或磁盘那份读不到)」时才会印出来——「磁盘 ≠ 运行中」
|
|
75
|
-
// 那一态被事实判据先截走,印的是 `restartLine`。故这里**不许**再教人去重启(那在眼下没用)。
|
|
76
|
-
'recovery-required': '上次安装没有收尾。点「重试安装」再跑一次;还出现这一条,就用下面这条命令重装。',
|
|
77
|
-
'check-failed': '查不到最新版本:联网失败,或官方源(registry.npmjs.org)不可达。确认网络与源地址后,再点「重新检查」。',
|
|
78
|
-
'invalid-release': '官方源上这个版本的元数据不完整(包名或版本不合法、包地址或校验值缺失)。换一个版本,或稍后重试。',
|
|
79
|
-
'check-expired': '上次检查的结果已过期。点「重新检查」重查一次,再点「装上更新」。',
|
|
80
|
-
'update-busy': '同一时间只能安装一个插件。等这次装完,再点「装上更新」。',
|
|
81
|
-
'install-failed': '安装没有完成。在终端里执行下面这条命令把它装完,装完再点「重新检查」。',
|
|
82
|
-
'manager-unreachable': '面板连不上总管插件(宿主里没注册,或版本对不上)。重启 DSH 后重试;仍不行就在 DSH 日志里找 `[dsh-life-pack]` 的报错。',
|
|
83
|
-
'bad-request': '面板与总管之间的请求出错了(属程序缺陷)。请在 DSH 日志里找 `[dsh-life-pack]` 的报错,连同这家插件的名字报到本仓 issue。',
|
|
84
|
-
internal: '面板与总管之间的请求出错了(属程序缺陷)。请在 DSH 日志里找 `[dsh-life-pack]` 的报错,连同这家插件的名字报到本仓 issue。',
|
|
20
|
+
'manager-unreachable': '面板连不上总管插件。重启 DSH 后重试。',
|
|
21
|
+
'bad-request': '面板与总管之间的请求出错了(属程序缺陷)。',
|
|
22
|
+
internal: '面板与总管之间的请求出错了(属程序缺陷)。',
|
|
85
23
|
};
|
|
86
|
-
/** 原因码 → 人话(认不出的码不猜、原样回码并说明这是未知原因)。 */
|
|
87
24
|
export function reasonText(code) {
|
|
88
|
-
return REASON_TEXT[code] ?? '面板不认识这个原因码(' + code + '
|
|
89
|
-
}
|
|
90
|
-
/** 手工兜底命令(更新包 README 第 9 节形状):使用范围名含特殊字符时加引号。 */
|
|
91
|
-
export function manualInstallCommand(input) {
|
|
92
|
-
const name = typeof input.profileName === 'string' ? input.profileName.trim() : '';
|
|
93
|
-
if (!name || name.length > 255 || name.startsWith('-') || ['.', '..', 'node_modules'].includes(name))
|
|
94
|
-
return null;
|
|
95
|
-
const version = typeof input.version === 'string' && /^\d+\.\d+\.\d+$/.test(input.version) ? input.version : '';
|
|
96
|
-
if (!version)
|
|
97
|
-
return null;
|
|
98
|
-
const registry = input.registryUrl ?? DEFAULT_REGISTRY;
|
|
99
|
-
const profileArg = /^[A-Za-z0-9_.-]+$/.test(name) ? name : JSON.stringify(name);
|
|
100
|
-
return 'dsh plugin --profile ' + profileArg + ' add --save-exact ' + input.packageName + '@' + version + ' --registry=' + registry;
|
|
25
|
+
return REASON_TEXT[code] ?? '面板不认识这个原因码(' + code + ')。';
|
|
101
26
|
}
|
|
102
|
-
/** 八种装不了原因码(给门禁与测试对表用;值就是 `BlockedReason` 全集)。 */
|
|
103
|
-
export const BLOCKED_REASONS = [
|
|
104
|
-
'unknown-profile',
|
|
105
|
-
'source-install',
|
|
106
|
-
'invalid-installation',
|
|
107
|
-
'installation-changed',
|
|
108
|
-
'pending-restart',
|
|
109
|
-
'registry-conflict',
|
|
110
|
-
'incompatible-node',
|
|
111
|
-
'recovery-required',
|
|
112
|
-
];
|
|
113
27
|
//# sourceMappingURL=update-contract.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-contract.js","sourceRoot":"","sources":["../src/update-contract.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"update-contract.js","sourceRoot":"","sources":["../src/update-contract.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,eAAe,GAAG,kBAA2B,CAAC;AAE3D,MAAM,CAAC,MAAM,YAAY,GAAG,MAAe,CAAC;AAE5C,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,IAAI,EAAE,YAAY;IAClB,OAAO,EAAE,gBAAgB;IACzB,QAAQ,EAAE,eAAe;IACzB,IAAI,EAAE,oBAAoB;CAClB,CAAC;AAEX,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,KAAK,EAAE,qBAAqB;CACpB,CAAC;AAEX,MAAM,CAAC,MAAM,eAAe,GAAG,SAAkB,CAAC;AAElD,MAAM,WAAW,GAA2B;IAC1C,qBAAqB,EAAE,uBAAuB;IAC9C,aAAa,EAAE,uBAAuB;IACtC,QAAQ,EAAE,uBAAuB;CAClC,CAAC;AAEF,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO,WAAW,CAAC,IAAI,CAAC,IAAI,aAAa,GAAG,IAAI,GAAG,IAAI,CAAC;AAC1D,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { BatchPanelController, BatchPanelContainer } from 'dsh-plugin-update/panel-batch';
|
|
2
|
+
import type { UpdateEntryController, UpdateEntryOptions } from 'dsh-plugin-update/entry';
|
|
3
|
+
import type { RpcCallFace } from './dsh-ctx.js';
|
|
4
|
+
/** 面板调宿主: upstream 面板唯一的宿主接触面(电话名 + 参数)。 */
|
|
5
|
+
export type LifePanelCall = (name: string, args: Record<string, unknown>) => Promise<unknown>;
|
|
6
|
+
/** 把 RpcCallFace 收成面板要的一参形状:上游回包原样透传(含失败回包的 errorKind 与 diag)。
|
|
7
|
+
*
|
|
8
|
+
* 宿主电话表把上游回包整体装进回执 value(成功失败皆如此,只有宿主级故障才走外层失败信封),
|
|
9
|
+
* 故这里只拆信封、不重组回包:value 里有 ok 布尔即上游原文,原样交面板。
|
|
10
|
+
*/
|
|
11
|
+
export declare function managerCallAdapter(call: RpcCallFace | null): LifePanelCall;
|
|
12
|
+
/** 挂入口按钮(点击打开批量弹窗,状态取总管自己一行的只读快照)。 */
|
|
13
|
+
export declare function mountLifeUpdateEntry(container: BatchPanelContainer, call: LifePanelCall, onOpen: () => void, overrides?: Partial<Pick<UpdateEntryOptions, 'autoCheck' | 'label'>> | undefined): UpdateEntryController;
|
|
14
|
+
/** 挂批量面板(内嵌形态进自家弹窗壳,离开时 unmount 只停轮询)。 */
|
|
15
|
+
export declare function mountLifeBatchPanel(container: BatchPanelContainer, call: LifePanelCall): BatchPanelController;
|
|
16
|
+
//# sourceMappingURL=update-dialog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-dialog.d.ts","sourceRoot":"","sources":["../src/update-dialog.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAE/F,OAAO,KAAK,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAGzF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,4CAA4C;AAC5C,MAAM,MAAM,aAAa,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAa9F;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,GAAG,aAAa,CAwB1E;AAED,sCAAsC;AACtC,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,mBAAmB,EAC9B,IAAI,EAAE,aAAa,EACnB,MAAM,EAAE,MAAM,IAAI,EAClB,SAAS,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,kBAAkB,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,GAC/E,qBAAqB,CAYvB;AAED,0CAA0C;AAC1C,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,mBAAmB,EAAE,IAAI,EAAE,aAAa,GAAG,oBAAoB,CAE7G"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/** 面板薄包装(票 1170,浏览器侧:无 node 内建,可进 client 束)。
|
|
2
|
+
*
|
|
3
|
+
* 只定死三组参数,不自建文案与样式:入口形态 button、打开策略 manual(点击交由 onOpen 打开批量弹窗)、
|
|
4
|
+
* 皮肤 archive;批量面板内嵌形态(弹窗壳由本包自家 overlay 提供,关闭由自家按钮收)+ 皮肤 archive;
|
|
5
|
+
* 轮询与更新日志沿上游缺省,中文标题沿目标表(不传 titles 覆盖)。
|
|
6
|
+
*/
|
|
7
|
+
import { mountUpdateBatchPanel } from 'dsh-plugin-update/panel-batch';
|
|
8
|
+
import { mountUpdateEntry } from 'dsh-plugin-update/entry';
|
|
9
|
+
import { MANAGER_RPC } from './update-contract.js';
|
|
10
|
+
import { BATCH_PREFIX, MANAGER_TARGET_KEY, UPDATE_TARGETS } from './update-targets.js';
|
|
11
|
+
/** 总管自己那一行的电话名前缀(入口件状态源,取自目标表,不手写字面量)。 */
|
|
12
|
+
function managerPrefix() {
|
|
13
|
+
const row = UPDATE_TARGETS.find((target) => target.key === MANAGER_TARGET_KEY);
|
|
14
|
+
return row !== undefined ? row.phonePrefix : 'ilife-life-pack';
|
|
15
|
+
}
|
|
16
|
+
/** 总管自己在批量内的插件标识(与宿主侧上游缺省 batchPrefix-key 同口径)。 */
|
|
17
|
+
function managerPluginId() {
|
|
18
|
+
return BATCH_PREFIX + '-' + MANAGER_TARGET_KEY;
|
|
19
|
+
}
|
|
20
|
+
/** 把 RpcCallFace 收成面板要的一参形状:上游回包原样透传(含失败回包的 errorKind 与 diag)。
|
|
21
|
+
*
|
|
22
|
+
* 宿主电话表把上游回包整体装进回执 value(成功失败皆如此,只有宿主级故障才走外层失败信封),
|
|
23
|
+
* 故这里只拆信封、不重组回包:value 里有 ok 布尔即上游原文,原样交面板。
|
|
24
|
+
*/
|
|
25
|
+
export function managerCallAdapter(call) {
|
|
26
|
+
return async (name, args) => {
|
|
27
|
+
if (typeof call !== 'function')
|
|
28
|
+
return { ok: false, error: 'manager-unreachable', errorKind: 'manager-unreachable' };
|
|
29
|
+
let result;
|
|
30
|
+
try {
|
|
31
|
+
result = await call(MANAGER_RPC.base, MANAGER_RPC.endpoint, { method: name, payload: args });
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return { ok: false, error: 'manager-unreachable', errorKind: 'manager-unreachable' };
|
|
35
|
+
}
|
|
36
|
+
if (typeof result !== 'object' || result === null || result.ok !== true) {
|
|
37
|
+
const problem = result?.error;
|
|
38
|
+
const code = typeof problem?.code === 'string' && problem.code.length > 0 ? problem.code : 'manager-unreachable';
|
|
39
|
+
const details = problem?.details ?? {};
|
|
40
|
+
const kind = typeof details.errorKind === 'string' && details.errorKind.length > 0
|
|
41
|
+
? details.errorKind
|
|
42
|
+
: code;
|
|
43
|
+
const raw = { ok: false, error: code, errorKind: kind };
|
|
44
|
+
if (details.diag !== undefined)
|
|
45
|
+
raw.diag = details.diag;
|
|
46
|
+
return raw;
|
|
47
|
+
}
|
|
48
|
+
const value = result.value;
|
|
49
|
+
if (typeof value === 'object' && value !== null && typeof value.ok === 'boolean')
|
|
50
|
+
return value;
|
|
51
|
+
return { ok: false, error: 'internal', errorKind: 'internal' };
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
/** 挂入口按钮(点击打开批量弹窗,状态取总管自己一行的只读快照)。 */
|
|
55
|
+
export function mountLifeUpdateEntry(container, call, onOpen, overrides) {
|
|
56
|
+
return mountUpdateEntry(container, {
|
|
57
|
+
pluginId: managerPluginId(),
|
|
58
|
+
prefix: managerPrefix(),
|
|
59
|
+
call,
|
|
60
|
+
variant: 'button',
|
|
61
|
+
openOn: 'manual',
|
|
62
|
+
theme: 'archive',
|
|
63
|
+
autoCheck: overrides?.autoCheck ?? 'mount',
|
|
64
|
+
label: overrides?.label,
|
|
65
|
+
onActivate: () => { onOpen(); },
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
/** 挂批量面板(内嵌形态进自家弹窗壳,离开时 unmount 只停轮询)。 */
|
|
69
|
+
export function mountLifeBatchPanel(container, call) {
|
|
70
|
+
return mountUpdateBatchPanel(container, { prefix: BATCH_PREFIX, call, theme: 'archive', mode: 'embedded' });
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=update-dialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-dialog.js","sourceRoot":"","sources":["../src/update-dialog.ts"],"names":[],"mappings":"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"}
|
package/dist/update-targets.d.ts
CHANGED
|
@@ -1,17 +1,12 @@
|
|
|
1
1
|
export interface UpdateTarget {
|
|
2
|
-
/** 稳定键(= 导航表的 `skill`;总管自己用 `life-pack`)。 */
|
|
3
2
|
readonly key: string;
|
|
4
|
-
/** 中文名(面板行首用)。 */
|
|
5
3
|
readonly title: string;
|
|
6
|
-
/** 更新与安装的目标包。 */
|
|
7
4
|
readonly packageName: string;
|
|
8
|
-
/** 更新包的电话名前缀(七个必须互不相同,否则串台)。 */
|
|
9
5
|
readonly phonePrefix: string;
|
|
10
6
|
}
|
|
11
|
-
/** 总管自己的键:不占六个技能的键名。 */
|
|
12
7
|
export declare const MANAGER_TARGET_KEY: "life-pack";
|
|
13
|
-
/**
|
|
8
|
+
/** 批量电话前缀:宿主与面板共用,唯一定义地(面板 mount 参数与宿主登记同源)。 */
|
|
9
|
+
export declare const BATCH_PREFIX: "life";
|
|
14
10
|
export declare const UPDATE_TARGETS: readonly UpdateTarget[];
|
|
15
|
-
/** 按包名取一个目标(总管自有的「装上」电话只认这七个,别的一律拒绝)。 */
|
|
16
11
|
export declare function targetFor(packageName: string): UpdateTarget | undefined;
|
|
17
12
|
//# sourceMappingURL=update-targets.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-targets.d.ts","sourceRoot":"","sources":["../src/update-targets.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"update-targets.d.ts","sourceRoot":"","sources":["../src/update-targets.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,eAAO,MAAM,kBAAkB,EAAG,WAAoB,CAAC;AAEvD,gDAAgD;AAChD,eAAO,MAAM,YAAY,EAAG,MAAe,CAAC;AAE5C,eAAO,MAAM,cAAc,EAAE,SAAS,YAAY,EAQjD,CAAC;AAEF,wBAAgB,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAEvE"}
|
package/dist/update-targets.js
CHANGED
|
@@ -1,18 +1,13 @@
|
|
|
1
|
-
/** 七个更新目标(总管自己 +
|
|
1
|
+
/** 七个更新目标(总管自己 + 六个单品),薄接线唯一定义地(票 1170)。
|
|
2
2
|
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* (更新包 README 第 12 节:前缀相同就是串台)。
|
|
6
|
-
*
|
|
7
|
-
* 包名不新开一处定义:六个单品的包名取自 `nav.ts` 的 `MANAGER_TABS`(导航表是唯一真相),
|
|
8
|
-
* 总管自己的包名取自 `install.ts` 的 `MANAGER_PACKAGE`。
|
|
9
|
-
* 安装与更新的单位都是**插件包**:技能包是插件包精确 pin 的传递依赖,不单独查更新。
|
|
3
|
+
* 包名不新开第二源:六单品取自 nav.ts 的 MANAGER_TABS,总管自己取自 install.ts。
|
|
4
|
+
* 七个 phonePrefix 必须互不相同,否则串台。
|
|
10
5
|
*/
|
|
11
6
|
import { MANAGER_PACKAGE } from './install.js';
|
|
12
7
|
import { MANAGER_TABS } from './nav.js';
|
|
13
|
-
/** 总管自己的键:不占六个技能的键名。 */
|
|
14
8
|
export const MANAGER_TARGET_KEY = 'life-pack';
|
|
15
|
-
/**
|
|
9
|
+
/** 批量电话前缀:宿主与面板共用,唯一定义地(面板 mount 参数与宿主登记同源)。 */
|
|
10
|
+
export const BATCH_PREFIX = 'life';
|
|
16
11
|
export const UPDATE_TARGETS = [
|
|
17
12
|
{ key: MANAGER_TARGET_KEY, title: '爱生活', packageName: MANAGER_PACKAGE, phonePrefix: 'ilife-life-pack' },
|
|
18
13
|
...MANAGER_TABS.map((tab) => ({
|
|
@@ -22,7 +17,6 @@ export const UPDATE_TARGETS = [
|
|
|
22
17
|
phonePrefix: 'ilife-' + tab.skill,
|
|
23
18
|
})),
|
|
24
19
|
];
|
|
25
|
-
/** 按包名取一个目标(总管自有的「装上」电话只认这七个,别的一律拒绝)。 */
|
|
26
20
|
export function targetFor(packageName) {
|
|
27
21
|
return UPDATE_TARGETS.find((target) => target.packageName === packageName);
|
|
28
22
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-targets.js","sourceRoot":"","sources":["../src/update-targets.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"update-targets.js","sourceRoot":"","sources":["../src/update-targets.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AASxC,MAAM,CAAC,MAAM,kBAAkB,GAAG,WAAoB,CAAC;AAEvD,gDAAgD;AAChD,MAAM,CAAC,MAAM,YAAY,GAAG,MAAe,CAAC;AAE5C,MAAM,CAAC,MAAM,cAAc,GAA4B;IACrD,EAAE,GAAG,EAAE,kBAAkB,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,WAAW,EAAE,iBAAiB,EAAE;IACvG,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC5B,GAAG,EAAE,GAAG,CAAC,KAAK;QACd,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,WAAW,EAAE,GAAG,CAAC,MAAM;QACvB,WAAW,EAAE,QAAQ,GAAG,GAAG,CAAC,KAAK;KAClC,CAAC,CAAC;CACJ,CAAC;AAEF,MAAM,UAAU,SAAS,CAAC,WAAmB;IAC3C,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,KAAK,WAAW,CAAC,CAAC;AAC7E,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-life-pack",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.40",
|
|
4
4
|
"description": "爱生活总管插件:单 DSH设置面板槽(爱生活卡)+ 爱生活页签槽 children,技能设置页动态聚合,不依赖单品、不 import 单品页",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
"test": "node --test test/*.test.mjs"
|
|
53
53
|
},
|
|
54
54
|
"dependencies": {
|
|
55
|
-
"dsh-plugin-update": "^0.
|
|
55
|
+
"dsh-plugin-update": "^0.5.1"
|
|
56
56
|
},
|
|
57
57
|
"devDependencies": {
|
|
58
58
|
"@types/react": "19.2.18",
|