dsh-config-manager 0.1.3 → 0.1.5
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/README.md +14 -93
- package/README.zh-CN.md +15 -94
- package/lib/adapters/providers.js +13 -3
- package/lib/adapters/providers.js.map +1 -1
- package/lib/adapters/settings.d.ts +5 -1
- package/lib/adapters/settings.js +24 -3
- package/lib/adapters/settings.js.map +1 -1
- package/lib/adapters/test-helpers.d.ts +21 -3
- package/lib/adapters/test-helpers.js +29 -4
- package/lib/adapters/test-helpers.js.map +1 -1
- package/lib/client.js +75 -75
- package/lib/client.js.map +1 -1
- package/lib/core/analyzer.js +5 -1
- package/lib/core/analyzer.js.map +1 -1
- package/package.json +1 -1
- package/src/adapters/providers.test.ts +1 -0
- package/src/adapters/providers.ts +12 -3
- package/src/adapters/roundtrip.test.ts +2 -0
- package/src/adapters/settings.test.ts +11 -4
- package/src/adapters/settings.ts +22 -3
- package/src/adapters/test-helpers.ts +27 -3
- package/src/adapters/ui.test.ts +1 -0
- package/src/client/import/ImportWizardView.tsx +7 -4
- package/src/core/analyzer.ts +7 -1
- package/src/profiles/profile-manager.test.ts +2 -0
package/README.md
CHANGED
|
@@ -30,7 +30,7 @@ DSH is your AI assistant workbench — it holds your settings: model configs, pl
|
|
|
30
30
|
| 🚀 | **One-click Export** | Package your recommended config into a ZIP |
|
|
31
31
|
| 📦 | **One-click Import** | Restore your environment on another machine |
|
|
32
32
|
| 👀 | **Preview before import** | Full preview first — **never touches your config silently** |
|
|
33
|
-
| ⚔️ | **Conflict handling** | Keep Current / Use Imported
|
|
33
|
+
| ⚔️ | **Conflict handling** | Keep Current / Use Imported — you decide |
|
|
34
34
|
| 🗺️ | **Path auto-mapping** | Detects dead absolute paths and lets you remap them |
|
|
35
35
|
| 🔒 | **Secret safety** | API Keys are never exported; re-enter them after import |
|
|
36
36
|
| ↩️ | **Automatic rollback** | Failed import restores everything automatically |
|
|
@@ -66,26 +66,14 @@ It's a standard **DSH plugin** — two steps:
|
|
|
66
66
|
|
|
67
67
|
```bash
|
|
68
68
|
# ① Install the plugin
|
|
69
|
-
dsh plugin --profile web add dsh-config-manager --config.auto-install-peers=false
|
|
69
|
+
dsh plugin --profile web add dsh-config-manager@latest --config.auto-install-peers=false
|
|
70
70
|
|
|
71
71
|
# ② Restart DSH (a "Backup & Migration" entry appears in Settings)
|
|
72
72
|
```
|
|
73
73
|
|
|
74
|
-
> 💡
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
```bash
|
|
79
|
-
npm run build && npm pack # produces dsh-config-manager-0.1.2.tgz
|
|
80
|
-
dsh plugin --profile web add file:/absolute/path/dsh-config-manager-0.1.2.tgz
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
> 🧪 **Try it without touching your real environment?** Use an isolated `DSH_HOME`:
|
|
84
|
-
> ```bash
|
|
85
|
-
> $env:DSH_HOME = "D:\tmp\dsh-home" # Windows PowerShell
|
|
86
|
-
> dsh plugin --profile test add dsh-config-manager --config.auto-install-peers=false
|
|
87
|
-
> dsh --profile test --dump-config | Select-String config-manager
|
|
88
|
-
> ```
|
|
74
|
+
> 💡 Just copy-paste the command: `--config.auto-install-peers=false` skips a few DSH core packages that aren't on the public registry yet (the DSH runtime provides them), and `@latest` ensures you get the newest build.
|
|
75
|
+
>
|
|
76
|
+
> 🐛 **`@latest` installed an old version?** pnpm caches registry metadata, so `@latest` may resolve to a stale release. Use an exact version instead: `dsh plugin --profile web add dsh-config-manager@0.1.4 --config.auto-install-peers=false`.
|
|
89
77
|
|
|
90
78
|
---
|
|
91
79
|
|
|
@@ -144,7 +132,8 @@ When the target already has a same-named item, you choose:
|
|
|
144
132
|
|---|---|
|
|
145
133
|
| **Keep Current** | Leave the target's config untouched |
|
|
146
134
|
| **Use Imported** | Overwrite with the backup's value |
|
|
147
|
-
|
|
135
|
+
|
|
136
|
+
> Note: a "decide later / review" option is intentionally **not** offered — an undecided conflict would block the import from proceeding. Every conflict must be resolved before continuing.
|
|
148
137
|
|
|
149
138
|
### 🗺️ Path mapping
|
|
150
139
|
|
|
@@ -167,27 +156,6 @@ Save multiple configurations (Work / Personal) and switch anytime; switching inc
|
|
|
167
156
|
|
|
168
157
|
---
|
|
169
158
|
|
|
170
|
-
## 📦 What's inside a backup?
|
|
171
|
-
|
|
172
|
-
```
|
|
173
|
-
dsh-config-2026-08-14.zip
|
|
174
|
-
├── manifest.json # backup manifest: version / source / time / sections
|
|
175
|
-
├── config/
|
|
176
|
-
│ ├── settings.json # settings (redacted)
|
|
177
|
-
│ └── ui.json # UI preferences
|
|
178
|
-
├── ai/providers.json # AI providers / models
|
|
179
|
-
├── plugins/ # plugin manifest (binaries are never packaged)
|
|
180
|
-
├── mcp/servers.json # MCP server configs
|
|
181
|
-
├── custom/ # prompts / skills
|
|
182
|
-
├── agents/presets/ # agent presets
|
|
183
|
-
├── workspaces/ # workspaces
|
|
184
|
-
├── security/credentials.json # credential state (no values)
|
|
185
|
-
├── security/secrets.enc # encrypted backups only
|
|
186
|
-
└── integrity/checksums.json # SHA-256 checksums
|
|
187
|
-
```
|
|
188
|
-
|
|
189
|
-
---
|
|
190
|
-
|
|
191
159
|
## 🛡️ Security
|
|
192
160
|
|
|
193
161
|
- **The default backup contains no secret values** — a hard invariant, enforced at export
|
|
@@ -228,62 +196,15 @@ No. Items are deduplicated by stable IDs (plugin ID / MCP name / skill name…);
|
|
|
228
196
|
|
|
229
197
|
---
|
|
230
198
|
|
|
231
|
-
##
|
|
232
|
-
|
|
233
|
-
```bash
|
|
234
|
-
npm install --legacy-peer-deps # install dependencies
|
|
235
|
-
npm run typecheck # type checking
|
|
236
|
-
npm run build # build (host lib/ + client bundle)
|
|
237
|
-
npm test # run tests (192)
|
|
238
|
-
npm run bundle # rebuild the client bundle only
|
|
239
|
-
```
|
|
240
|
-
|
|
241
|
-
**Architecture**: the core engine is decoupled from the DSH runtime (mock-testable) → per-category adapters → security modules → centralized schema migrations.
|
|
242
|
-
|
|
243
|
-
**Auto-publish**: push a tag → automatically published to npm (GitHub Actions + OIDC, no stored secrets):
|
|
244
|
-
|
|
245
|
-
```bash
|
|
246
|
-
npm version patch # 0.1.2 → 0.1.3
|
|
247
|
-
git push origin main --tags # CI: test → build → publish
|
|
248
|
-
```
|
|
249
|
-
|
|
250
|
-
> One-time OIDC trusted-publisher setup:
|
|
251
|
-
> ```bash
|
|
252
|
-
> npm login
|
|
253
|
-
> npm trust github dsh-config-manager --file publish.yml --repo xiajiajun516/dsh-config-manager --allow-publish
|
|
254
|
-
> ```
|
|
255
|
-
> Or add the GitHub Actions trusted publisher on the package page (Settings → Publishing access).
|
|
256
|
-
|
|
257
|
-
---
|
|
258
|
-
|
|
259
|
-
## 🧪 Testing
|
|
260
|
-
|
|
261
|
-
**All 192 tests pass** (Node's built-in test runner, zero extra dependencies), covering:
|
|
199
|
+
## 📋 Known limitations (user-facing)
|
|
262
200
|
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
| Security | malicious ZIP / corrupt archive / checksum mismatch / path traversal |
|
|
269
|
-
| Cross-platform | Windows ↔ macOS ↔ Linux path handling |
|
|
270
|
-
| Migration | schema upgrade mechanism |
|
|
271
|
-
|
|
272
|
-
---
|
|
201
|
+
1. **Installing / updating plugins or MCP takes effect after restarting DSH**
|
|
202
|
+
2. **Some UI state is not migrated** (e.g. task board data, panel widths — they live in the browser, not in DSH's config files)
|
|
203
|
+
3. **keybindings / workflow configs / commands / rules** — DSH has no such concepts, so nothing is exported for them
|
|
204
|
+
4. **History/session migration is off by default** (v1 copies files only)
|
|
205
|
+
5. **Encrypted backups**: a lost password means the `secrets.enc` can't be decrypted (by design — keep your password safe)
|
|
273
206
|
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
1. **Workspace: create/rename title only** — DSH has no whole-overwrite write channel; paths & session lists are maintained by DSH itself (path mapping adapts cross-device)
|
|
277
|
-
2. **Some DSH core packages are not public** — features depending on their APIs only work in a local DSH; install needs `--config.auto-install-peers=false`
|
|
278
|
-
3. **No MCP management API** — MCP is imported as config lines and takes effect after restarting DSH
|
|
279
|
-
4. **Plugin install requires a restart**
|
|
280
|
-
5. **Browser UI state (localStorage) is not migrated** — e.g. task board data, panel widths
|
|
281
|
-
6. **keybindings / workflows / commands / rules** — DSH has no such concepts; no fake sections
|
|
282
|
-
7. **Credential values can't be rolled back** — re-enter manually after a rollback that touched them
|
|
283
|
-
8. **Newly created items can't be rollback-deleted** — DSH settings have no delete semantics
|
|
284
|
-
9. **Schema migration** — the mechanism is ready; the v1→v2 chain is a placeholder (v1 is current)
|
|
285
|
-
10. **History/session migration is off by default** — v1 copies files only
|
|
286
|
-
11. **Encrypted backups** — a lost password means the `secrets.enc` can't be decrypted (by design)
|
|
207
|
+
> Maintainers & developers: see [DEVELOPERS.md](DEVELOPERS.md) for build, testing, auto-publishing and full technical notes.
|
|
287
208
|
|
|
288
209
|
---
|
|
289
210
|
|
package/README.zh-CN.md
CHANGED
|
@@ -30,7 +30,7 @@ DSH 是你的 AI 助手工作台,里面存着你的各种设置:模型配置
|
|
|
30
30
|
| 🚀 | **一键导出** | 点一下,把推荐配置打包成一个 ZIP |
|
|
31
31
|
| 📦 | **一键导入** | 在另一台电脑点一下,环境就回来了 |
|
|
32
32
|
| 👀 | **先预览再导入** | 导入前完整预览,**绝不偷偷改你的配置** |
|
|
33
|
-
| ⚔️ | **冲突处理** | 遇到同名配置,让你自己选:保留现有的 / 用导入的
|
|
33
|
+
| ⚔️ | **冲突处理** | 遇到同名配置,让你自己选:保留现有的 / 用导入的 |
|
|
34
34
|
| 🗺️ | **路径自动映射** | 换了电脑路径变了?自动检测并让你重新指定 |
|
|
35
35
|
| 🔒 | **密钥安全** | API Key 默认不导出;导入后提醒你重新填写 |
|
|
36
36
|
| ↩️ | **自动回滚** | 导入失败自动恢复原样,不会弄坏现有配置 |
|
|
@@ -66,26 +66,14 @@ DSH 是你的 AI 助手工作台,里面存着你的各种设置:模型配置
|
|
|
66
66
|
|
|
67
67
|
```bash
|
|
68
68
|
# ① 安装插件
|
|
69
|
-
dsh plugin --profile web add dsh-config-manager --config.auto-install-peers=false
|
|
69
|
+
dsh plugin --profile web add dsh-config-manager@latest --config.auto-install-peers=false
|
|
70
70
|
|
|
71
71
|
# ② 重启 DSH(设置页就会出现「备份与迁移」入口)
|
|
72
72
|
```
|
|
73
73
|
|
|
74
|
-
> 💡
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
```bash
|
|
79
|
-
npm run build && npm pack # 产出 dsh-config-manager-0.1.2.tgz
|
|
80
|
-
dsh plugin --profile web add file:/绝对路径/dsh-config-manager-0.1.2.tgz
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
> 🧪 **想先试不碰正式环境?** 用隔离目录测试,完全不触碰 `~/.dsh`:
|
|
84
|
-
> ```bash
|
|
85
|
-
> $env:DSH_HOME = "D:\tmp\dsh-home" # Windows PowerShell
|
|
86
|
-
> dsh plugin --profile test add dsh-config-manager --config.auto-install-peers=false
|
|
87
|
-
> dsh --profile test --dump-config | Select-String config-manager
|
|
88
|
-
> ```
|
|
74
|
+
> 💡 照着复制就行:`--config.auto-install-peers=false` 跳过几个尚未公开发布的 DSH 核心依赖(运行时由 DSH 自己提供),`@latest` 确保装到最新版。
|
|
75
|
+
>
|
|
76
|
+
> 🐛 **`@latest` 装到了旧版?** pnpm 会缓存 registry 元数据,`@latest` 可能解析到过期版本。改用精确版本即可:`dsh plugin --profile web add dsh-config-manager@0.1.4 --config.auto-install-peers=false`。
|
|
89
77
|
|
|
90
78
|
---
|
|
91
79
|
|
|
@@ -101,7 +89,7 @@ dsh plugin --profile web add file:/绝对路径/dsh-config-manager-0.1.2.tgz
|
|
|
101
89
|
1. 打开 DSH → 「备份与迁移」→「导入配置」
|
|
102
90
|
2. 选择 ZIP → 等待分析 → 查看「导入预览」
|
|
103
91
|
3. 有路径问题?→ 选择新路径(可批量映射)
|
|
104
|
-
4. 有同名配置冲突?→ 选择
|
|
92
|
+
4. 有同名配置冲突?→ 选择 保留现有的 / 用导入的
|
|
105
93
|
5. 确认导入 → 等待完成
|
|
106
94
|
6. 按提示重新填写缺失的 API Key
|
|
107
95
|
7. ✅ 设置 / 插件 / MCP / 技能 / 工作区都回来了
|
|
@@ -144,7 +132,8 @@ dsh plugin --profile web add file:/绝对路径/dsh-config-manager-0.1.2.tgz
|
|
|
144
132
|
|---|---|
|
|
145
133
|
| **保留现有的** | 不动目标电脑的原配置 |
|
|
146
134
|
| **用导入的** | 用备份里的配置覆盖 |
|
|
147
|
-
|
|
135
|
+
|
|
136
|
+
> 说明:刻意**不提供**「稍后决定 / 再看看」选项——未决的冲突会让导入无法继续,每个冲突都必须在继续前做出选择。
|
|
148
137
|
|
|
149
138
|
### 🗺️ 路径映射
|
|
150
139
|
|
|
@@ -167,27 +156,6 @@ dsh plugin --profile web add file:/绝对路径/dsh-config-manager-0.1.2.tgz
|
|
|
167
156
|
|
|
168
157
|
---
|
|
169
158
|
|
|
170
|
-
## 📦 备份里有什么?(文件结构)
|
|
171
|
-
|
|
172
|
-
```
|
|
173
|
-
dsh-config-2026-08-14.zip
|
|
174
|
-
├── manifest.json # 备份清单:版本 / 来源 / 时间 / 包含项
|
|
175
|
-
├── config/
|
|
176
|
-
│ ├── settings.json # 设置(已脱敏)
|
|
177
|
-
│ └── ui.json # 界面偏好
|
|
178
|
-
├── ai/providers.json # AI 模型 / 服务商配置
|
|
179
|
-
├── plugins/ # 插件清单(不打包插件本体)
|
|
180
|
-
├── mcp/servers.json # MCP 服务配置
|
|
181
|
-
├── custom/ # 提示词 / 技能
|
|
182
|
-
├── agents/presets/ # Agent 预设
|
|
183
|
-
├── workspaces/ # 工作区
|
|
184
|
-
├── security/credentials.json # 密钥状态(不含值)
|
|
185
|
-
├── security/secrets.enc # 仅加密备份时存在
|
|
186
|
-
└── integrity/checksums.json # SHA-256 校验和
|
|
187
|
-
```
|
|
188
|
-
|
|
189
|
-
---
|
|
190
|
-
|
|
191
159
|
## 🛡️ 安全
|
|
192
160
|
|
|
193
161
|
- **默认备份不包含任何密钥值** —— 这是硬性规则,导出时强制执行
|
|
@@ -228,62 +196,15 @@ dsh-config-2026-08-14.zip
|
|
|
228
196
|
|
|
229
197
|
---
|
|
230
198
|
|
|
231
|
-
##
|
|
232
|
-
|
|
233
|
-
```bash
|
|
234
|
-
npm install --legacy-peer-deps # 安装依赖
|
|
235
|
-
npm run typecheck # 类型检查
|
|
236
|
-
npm run build # 构建(Host lib/ + client bundle)
|
|
237
|
-
npm test # 运行测试(192 个)
|
|
238
|
-
npm run bundle # 仅重建 client bundle
|
|
239
|
-
```
|
|
240
|
-
|
|
241
|
-
**架构**:核心引擎与 DSH 运行时解耦(可 mock 测试)→ 各配置分类适配器 → 安全模块 → 迁移逻辑集中。
|
|
242
|
-
|
|
243
|
-
**自动发布**:打 tag 即自动发布到 npm(GitHub Actions + OIDC,无需任何密钥):
|
|
244
|
-
|
|
245
|
-
```bash
|
|
246
|
-
npm version patch # 0.1.2 → 0.1.3
|
|
247
|
-
git push origin main --tags # CI 自动: 测试 → 构建 → 发布
|
|
248
|
-
```
|
|
249
|
-
|
|
250
|
-
> 首次配置 OIDC 可信发布方(只需一次):
|
|
251
|
-
> ```bash
|
|
252
|
-
> npm login
|
|
253
|
-
> npm trust github dsh-config-manager --file publish.yml --repo xiajiajun516/dsh-config-manager --allow-publish
|
|
254
|
-
> ```
|
|
255
|
-
> 或在 npm 包设置页(Settings → Publishing access)添加 GitHub Actions 可信发布方。
|
|
256
|
-
|
|
257
|
-
---
|
|
258
|
-
|
|
259
|
-
## 🧪 测试
|
|
260
|
-
|
|
261
|
-
**192 个测试全部通过**(Node 内置测试框架,零额外依赖),覆盖:
|
|
199
|
+
## 📋 已知限制(用户须知)
|
|
262
200
|
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
| 安全 | 恶意 ZIP / 损坏文件 / 校验和不匹配 / 路径穿越 |
|
|
269
|
-
| 跨平台 | Windows ↔ macOS ↔ Linux 路径处理 |
|
|
270
|
-
| 迁移 | 版本升级机制 |
|
|
271
|
-
|
|
272
|
-
---
|
|
201
|
+
1. **安装/更新插件或 MCP 后需重启 DSH 才生效**
|
|
202
|
+
2. **部分界面状态不迁移**(如任务看板数据、面板宽度——它们存在浏览器里,不在 DSH 配置文件内)
|
|
203
|
+
3. **keybindings / workflows 配置 / commands / rules**:DSH 当前没有这些概念,因此不会导出相关内容
|
|
204
|
+
4. **历史会话默认不迁移**(v1 仅支持文件级复制)
|
|
205
|
+
5. **加密备份**:密码丢失则无法解密(设计使然——请牢记密码)
|
|
273
206
|
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
1. **工作区只能创建/改标题**:DSH 无整体覆盖写通道,路径与会话列表由 DSH 自行维护(路径映射适配跨设备)
|
|
277
|
-
2. **部分 DSH 核心包未公开发布**:依赖其 API 的功能仅在本地 DSH 环境可用;安装需跳过 peer 自动安装(见安装说明)
|
|
278
|
-
3. **MCP 无管理 API**:MCP 以配置行导入,需重启 DSH 生效
|
|
279
|
-
4. **插件安装需重启**:安装插件后重启 DSH 生效
|
|
280
|
-
5. **浏览器 UI 状态(localStorage)不迁移**:如任务看板数据、面板宽度
|
|
281
|
-
6. **keybindings / workflows / commands / rules**:DSH 当前无这些概念,不做假分区
|
|
282
|
-
7. **密钥值无法回滚**:导入中覆盖的密钥在回滚时需人工重新填写
|
|
283
|
-
8. **新建项无法回滚删除**:DSH 设置无删除语义,新建的配置项回滚时需人工处理
|
|
284
|
-
9. **Schema 迁移**:机制已就绪,v1→v2 迁移链为占位(当前版本即 v1)
|
|
285
|
-
10. **历史会话默认不迁移**:v1 仅支持文件级复制
|
|
286
|
-
11. **加密备份**:密码丢失则无法解密(设计使然,请牢记密码)
|
|
207
|
+
> 维护者与开发者:构建、测试、自动发布与完整技术说明见 [DEVELOPERS.md](DEVELOPERS.md)。
|
|
287
208
|
|
|
288
209
|
---
|
|
289
210
|
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* 每项携带 raw(该 namespace 的完整 redacted 值)用于整体写回,apiKey 值经 credentials 状态占位(不导出值)。
|
|
7
7
|
*/
|
|
8
8
|
import { isDeepStrictEqual } from 'node:util';
|
|
9
|
-
import { resolveNamespaces } from "./settings.js";
|
|
9
|
+
import { resolveNamespaces, isEmptyValue } from "./settings.js";
|
|
10
10
|
export const DEFAULT_PROVIDER_NAMESPACES = ['llm-deepseek', 'llm-pi-ai'];
|
|
11
11
|
/** 无 raw 时的兜底重建:只取 ProviderEntry 已知字段 */
|
|
12
12
|
function stripEntry(entry) {
|
|
@@ -68,13 +68,23 @@ export class ProvidersAdapter {
|
|
|
68
68
|
for (const [route, entry] of Object.entries(data.providers)) {
|
|
69
69
|
const id = `provider:${route}`;
|
|
70
70
|
let current = null;
|
|
71
|
+
let targetUnavailable = false;
|
|
71
72
|
try {
|
|
72
73
|
current = await ctx.target.settings.describe(entry.namespace, { redactSecrets: true });
|
|
73
74
|
}
|
|
74
75
|
catch {
|
|
75
|
-
|
|
76
|
+
// 目标未注册该 namespace(缺少提供它的插件)→ 写入必失败,按依赖缺失处理(§15)
|
|
77
|
+
targetUnavailable = true;
|
|
76
78
|
}
|
|
77
|
-
if (
|
|
79
|
+
if (targetUnavailable) {
|
|
80
|
+
items.push({
|
|
81
|
+
id, kind: 'MissingDependency', adapter: 'providers',
|
|
82
|
+
description: `Provider ${route} 的命名空间 ${entry.namespace} 在目标未注册(可能需要安装对应插件)`,
|
|
83
|
+
severity: 'warning', target: { adapter: 'providers', ref: entry.namespace },
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
else if (current === null || isEmptyValue(current.value)) {
|
|
87
|
+
// 目标已注册但为空 → 初始化(Create)
|
|
78
88
|
items.push({
|
|
79
89
|
id, kind: 'Create', adapter: 'providers',
|
|
80
90
|
description: `创建 Provider ${route}(namespace ${entry.namespace})`, severity: 'info',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"providers.js","sourceRoot":"","sources":["../../src/adapters/providers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAM9C,OAAO,EAAE,iBAAiB,EAA0B,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"providers.js","sourceRoot":"","sources":["../../src/adapters/providers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAM9C,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAA0B,MAAM,eAAe,CAAC;AAexF,MAAM,CAAC,MAAM,2BAA2B,GAAsB,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;AAE5F,yCAAyC;AACzC,SAAS,UAAU,CAAC,KAA0B;IAC5C,MAAM,GAAG,GAA4B,EAAE,CAAC;IACxC,KAAK,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,aAAa,EAAE,SAAS,EAAE,QAAQ,EAAE,gBAAgB,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa,CAAU,EAAE,CAAC;QACxI,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,SAAS;YAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,OAAO,gBAAgB;IAClB,EAAE,GAAG,WAAoB,CAAC;IAC1B,WAAW,GAAG,oBAAoB,CAAC;IACnC,eAAe,GAAG,IAAI,CAAC;IACvB,WAAW,GAAG,UAAmB,CAAC;IAC1B,UAAU,CAA+B;IAE1D,YAAY,aAA2C,2BAAkD;QACvG,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAgB,EAAE,QAAuB;QACpD,MAAM,SAAS,GAAwC,EAAE,CAAC;QAC1D,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,KAAK,MAAM,EAAE,IAAI,MAAM,iBAAiB,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,EAAE,CAAC;YAC/D,IAAI,IAAmB,CAAC;YACxB,IAAI,CAAC;gBACH,IAAI,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;YAClE,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,QAAQ,CAAC,IAAI,CAAC,sBAAsB,EAAE,iBAAiB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAC3G,SAAS;YACX,CAAC;YACD,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAA4B,CAAC;YAC5D,uFAAuF;YACvF,MAAM,MAAM,GACV,KAAK,CAAC,SAAS,KAAK,IAAI,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ;gBAC7D,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,SAAoC,CAAC;gBAC5D,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;YACpB,KAAK,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC;gBACjC,iEAAiE;gBACjE,8EAA8E;gBAC9E,SAAS,CAAC,KAAK,CAAC,GAAG;oBACjB,KAAK;oBACL,SAAS,EAAE,EAAE;oBACb,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,OAAO,EAAE,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC;oBACtC,GAAG,eAAe,CAAC,EAA6B,CAAC;oBACjD,GAAG,EAAE,eAAe,CAAC,KAAK,CAAC;iBAC5B,CAAC;YACJ,CAAC;QACH,CAAC;QACD,OAAO;YACL,SAAS,EAAE,WAAW;YACtB,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE;YAC/B,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE;YACpD,QAAQ;SACT,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,IAA2B,EAAE,GAAkB;QACjE,MAAM,KAAK,GAAe,EAAE,CAAC;QAC7B,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YAC5D,MAAM,EAAE,GAAG,YAAY,KAAK,EAAE,CAAC;YAC/B,IAAI,OAAO,GAAyB,IAAI,CAAC;YACzC,IAAI,iBAAiB,GAAG,KAAK,CAAC;YAC9B,IAAI,CAAC;gBACH,OAAO,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;YACzF,CAAC;YAAC,MAAM,CAAC;gBACP,iDAAiD;gBACjD,iBAAiB,GAAG,IAAI,CAAC;YAC3B,CAAC;YACD,IAAI,iBAAiB,EAAE,CAAC;gBACtB,KAAK,CAAC,IAAI,CAAC;oBACT,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,WAAW;oBACnD,WAAW,EAAE,YAAY,KAAK,UAAU,KAAK,CAAC,SAAS,qBAAqB;oBAC5E,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,KAAK,CAAC,SAAS,EAAE;iBAC5E,CAAC,CAAC;YACL,CAAC;iBAAM,IAAI,OAAO,KAAK,IAAI,IAAI,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC3D,yBAAyB;gBACzB,KAAK,CAAC,IAAI,CAAC;oBACT,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW;oBACxC,WAAW,EAAE,eAAe,KAAK,cAAc,KAAK,CAAC,SAAS,GAAG,EAAE,QAAQ,EAAE,MAAM;oBACnF,MAAM,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,KAAK,CAAC,SAAS,EAAE;iBACvD,CAAC,CAAC;YACL,CAAC;iBAAM,IAAI,iBAAiB,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;gBAC5E,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,KAAK,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;YACjH,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,IAAI,CAAC;oBACT,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW;oBAC1C,WAAW,EAAE,YAAY,KAAK,QAAQ;oBACtC,MAAM,EAAE,aAAa,KAAK,CAAC,SAAS,YAAY,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;oBACxJ,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,KAAK,CAAC,SAAS,EAAE;iBAC5E,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,IAAc,EAAE,GAAkB;QAChD,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;QAChD,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAsC,CAAC;QAChF,MAAM,KAAK,GAAG,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,CAAC,KAAK;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,mBAAmB,KAAK,EAAE,EAAE,CAAC;QACtE,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;QAC7C,IAAI,QAA4B,CAAC;QACjC,IAAI,CAAC;YACH,QAAQ,GAAG,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;QACrG,CAAC;QAAC,MAAM,CAAC;YACP,QAAQ,GAAG,SAAS,CAAC,CAAC,2BAA2B;QACnD,CAAC;QACD,MAAM,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;QACpE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,IAA2B;QACxC,MAAM,MAAM,GAA+B,EAAE,CAAC;QAC9C,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC9C,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;QACpG,CAAC;QACD,IAAI,IAAI,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,oBAAoB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QAC5G,CAAC;QACD,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,IAAI,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;YAClE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QACpF,CAAC;aAAM,CAAC;YACN,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC5D,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;oBAChD,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,KAAK,EAAE,EAAE,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;oBAC5F,SAAS;gBACX,CAAC;gBACD,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,IAAI,KAAK,CAAC,SAAS,KAAK,EAAE,EAAE,CAAC;oBAClE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,KAAK,YAAY,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;gBACtG,CAAC;gBACD,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;oBACvC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,KAAK,WAAW,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;gBACrG,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACtF,CAAC;CACF"}
|
|
@@ -5,7 +5,11 @@ export type NamespaceProvider = (ctx: HostContext) => Promise<string[]> | string
|
|
|
5
5
|
export declare function resolveNamespaces(namespaces: string[] | NamespaceProvider, ctx: HostContext): Promise<string[]>;
|
|
6
6
|
/** 批量读取 namespace 的 redacted 记录(settings/ui 共用;单项失败跳过并告警) */
|
|
7
7
|
export declare function collectNamespaceRecords(ctx: HostContext, names: string[], warnings: string[]): Promise<Record<string, NamespaceRecord>>;
|
|
8
|
-
/**
|
|
8
|
+
/** 值是否“空”(目标已注册但从未配置 → 视为待初始化,Create 而非 Conflict) */
|
|
9
|
+
export declare function isEmptyValue(v: unknown): boolean;
|
|
10
|
+
/** 对比导入记录与目标当前值:不存在 → Create;一致 → Skip;不同 → Conflict;
|
|
11
|
+
* 目标端 describe 抛错(命名空间未注册:提供它的插件在目标未激活/未安装)→ MissingDependency(§15 依赖检测),
|
|
12
|
+
* 此时 Create/Update 必然失败,标记为“需注意”让导入继续,而不是整体失败。纯计算,零写入。 */
|
|
9
13
|
export declare function planNamespaceItems(data: Record<string, NamespaceRecord>, adapter: 'settings' | 'ui', ctx: ImportContext): Promise<PlanItem[]>;
|
|
10
14
|
/** 写入单个 namespace(settings/ui 共用):读时锁 + expectedRevision 乐观锁,防覆盖并发修改 */
|
|
11
15
|
export declare function applyNamespaceItem(item: PlanItem, sectionId: 'settings' | 'ui', ctx: ImportContext): Promise<ApplyResult>;
|
package/lib/adapters/settings.js
CHANGED
|
@@ -31,19 +31,40 @@ export async function collectNamespaceRecords(ctx, names, warnings) {
|
|
|
31
31
|
}
|
|
32
32
|
return namespaces;
|
|
33
33
|
}
|
|
34
|
-
/**
|
|
34
|
+
/** 值是否“空”(目标已注册但从未配置 → 视为待初始化,Create 而非 Conflict) */
|
|
35
|
+
export function isEmptyValue(v) {
|
|
36
|
+
if (v === undefined || v === null)
|
|
37
|
+
return true;
|
|
38
|
+
if (typeof v === 'object')
|
|
39
|
+
return Object.keys(v).length === 0;
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
/** 对比导入记录与目标当前值:不存在 → Create;一致 → Skip;不同 → Conflict;
|
|
43
|
+
* 目标端 describe 抛错(命名空间未注册:提供它的插件在目标未激活/未安装)→ MissingDependency(§15 依赖检测),
|
|
44
|
+
* 此时 Create/Update 必然失败,标记为“需注意”让导入继续,而不是整体失败。纯计算,零写入。 */
|
|
35
45
|
export async function planNamespaceItems(data, adapter, ctx) {
|
|
36
46
|
const items = [];
|
|
37
47
|
for (const [name, rec] of Object.entries(data)) {
|
|
38
48
|
let current = null;
|
|
49
|
+
let targetUnavailable = false;
|
|
39
50
|
try {
|
|
40
51
|
current = await ctx.target.settings.describe(name, { redactSecrets: true });
|
|
41
52
|
}
|
|
42
53
|
catch {
|
|
43
|
-
|
|
54
|
+
// 目标连 describe 都失败 → 命名空间未注册(缺少提供插件)或目标不可读:
|
|
55
|
+
// 不能假定“不存在就创建”(replace 会同样失败),按依赖缺失处理。
|
|
56
|
+
targetUnavailable = true;
|
|
44
57
|
}
|
|
45
58
|
const id = `${adapter}:${name}`;
|
|
46
|
-
if (
|
|
59
|
+
if (targetUnavailable) {
|
|
60
|
+
items.push({
|
|
61
|
+
id, kind: 'MissingDependency', adapter,
|
|
62
|
+
description: `设置命名空间 ${name} 在目标未注册(可能需要安装提供它的插件)`,
|
|
63
|
+
severity: 'warning', target: { adapter, ref: name },
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
else if (current === null || isEmptyValue(current.value)) {
|
|
67
|
+
// 目标已注册但从未配置(空值)→ 初始化(Create)
|
|
47
68
|
items.push({
|
|
48
69
|
id, kind: 'Create', adapter, description: `创建设置 ${name}`, severity: 'info',
|
|
49
70
|
target: { adapter, ref: name },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/adapters/settings.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAM9C,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAKxC,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,UAAwC,EACxC,GAAgB;IAEhB,OAAO,OAAO,UAAU,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;AACzE,CAAC;AAED,6DAA6D;AAC7D,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,GAAgB,EAChB,KAAe,EACf,QAAkB;IAElB,MAAM,UAAU,GAAoC,EAAE,CAAC;IACvD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;YACxE,UAAU,CAAC,IAAI,CAAC,GAAG;gBACjB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,OAAO,EAAE,IAAI,CAAC,OAAO;aACtB,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,QAAQ,CAAC,IAAI,CAAC,gBAAgB,IAAI,UAAU,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClG,CAAC;IACH,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,
|
|
1
|
+
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/adapters/settings.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,8 +15,20 @@ export declare class MemFs implements FileSystemFacade {
|
|
|
15
15
|
listRecursive(dir: string): Promise<string[]>;
|
|
16
16
|
mkdir(): Promise<void>;
|
|
17
17
|
}
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
/** ns.set 时自动注册(有值即视为对应插件已激活;对齐真实 dsh-settings 的注册语义) */
|
|
19
|
+
declare class AutoRegisterMap extends Map<string, {
|
|
20
|
+
value: unknown;
|
|
21
|
+
base?: unknown;
|
|
22
|
+
revision: number;
|
|
23
|
+
applies?: string[];
|
|
24
|
+
secrets: {
|
|
25
|
+
path: string[];
|
|
26
|
+
set: boolean;
|
|
27
|
+
}[];
|
|
28
|
+
}> {
|
|
29
|
+
private readonly registered;
|
|
30
|
+
constructor(registered: Set<string>);
|
|
31
|
+
set(key: string, value: {
|
|
20
32
|
value: unknown;
|
|
21
33
|
base?: unknown;
|
|
22
34
|
revision: number;
|
|
@@ -25,7 +37,13 @@ export declare class MemSettings implements SettingsFacade {
|
|
|
25
37
|
path: string[];
|
|
26
38
|
set: boolean;
|
|
27
39
|
}[];
|
|
28
|
-
}
|
|
40
|
+
}): this;
|
|
41
|
+
}
|
|
42
|
+
export declare class MemSettings implements SettingsFacade {
|
|
43
|
+
/** 已注册命名空间(对齐真实 dsh-settings:插件激活时注册;未注册的 describe/replace 抛错) */
|
|
44
|
+
registered: Set<string>;
|
|
45
|
+
/** 有值的命名空间自动视为已注册 */
|
|
46
|
+
ns: AutoRegisterMap;
|
|
29
47
|
describe(namespace: string, _opts?: {
|
|
30
48
|
redactSecrets?: boolean;
|
|
31
49
|
}): Promise<NamespaceInfo>;
|
|
@@ -48,15 +48,38 @@ export class MemFs {
|
|
|
48
48
|
}
|
|
49
49
|
async mkdir() { }
|
|
50
50
|
}
|
|
51
|
+
/** ns.set 时自动注册(有值即视为对应插件已激活;对齐真实 dsh-settings 的注册语义) */
|
|
52
|
+
class AutoRegisterMap extends Map {
|
|
53
|
+
registered;
|
|
54
|
+
constructor(registered) {
|
|
55
|
+
super();
|
|
56
|
+
this.registered = registered;
|
|
57
|
+
}
|
|
58
|
+
set(key, value) {
|
|
59
|
+
this.registered.add(key);
|
|
60
|
+
return super.set(key, value);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
51
63
|
export class MemSettings {
|
|
52
|
-
|
|
64
|
+
/** 已注册命名空间(对齐真实 dsh-settings:插件激活时注册;未注册的 describe/replace 抛错) */
|
|
65
|
+
registered = new Set();
|
|
66
|
+
/** 有值的命名空间自动视为已注册 */
|
|
67
|
+
ns = new AutoRegisterMap(this.registered);
|
|
53
68
|
async describe(namespace, _opts) {
|
|
69
|
+
if (!this.registered.has(namespace))
|
|
70
|
+
throw new Error(`settings namespace "${namespace}" is not registered`);
|
|
54
71
|
const rec = this.ns.get(namespace);
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
72
|
+
return {
|
|
73
|
+
value: rec?.value,
|
|
74
|
+
base: rec?.base,
|
|
75
|
+
revision: rec?.revision ?? 0,
|
|
76
|
+
applies: rec?.applies,
|
|
77
|
+
secrets: rec?.secrets ?? [],
|
|
78
|
+
};
|
|
58
79
|
}
|
|
59
80
|
async replace(namespace, value, expectedRevision) {
|
|
81
|
+
if (!this.registered.has(namespace))
|
|
82
|
+
throw new Error(`settings namespace "${namespace}" is not registered`);
|
|
60
83
|
const rec = this.ns.get(namespace);
|
|
61
84
|
if (expectedRevision !== undefined && rec && rec.revision !== expectedRevision) {
|
|
62
85
|
throw new Error(`SETTINGS_CONFLICT: ${namespace} revision ${rec.revision} !== ${expectedRevision}`);
|
|
@@ -66,6 +89,8 @@ export class MemSettings {
|
|
|
66
89
|
});
|
|
67
90
|
}
|
|
68
91
|
async update(namespace, patch, expectedRevision) {
|
|
92
|
+
if (!this.registered.has(namespace))
|
|
93
|
+
throw new Error(`settings namespace "${namespace}" is not registered`);
|
|
69
94
|
const rec = this.ns.get(namespace);
|
|
70
95
|
if (expectedRevision !== undefined && rec && rec.revision !== expectedRevision) {
|
|
71
96
|
throw new Error(`SETTINGS_CONFLICT: ${namespace} revision ${rec.revision} !== ${expectedRevision}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-helpers.js","sourceRoot":"","sources":["../../src/adapters/test-helpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAe,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAQhD,MAAM,OAAO,KAAK;IAChB,KAAK,GAAG,IAAI,GAAG,EAAsB,CAAC;IACrB,OAAO,CAAS;IACjC,YAAY,OAAe;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IACO,GAAG,CAAC,CAAS;QACnB,OAAO,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,IAAI,CAAC,EAAE,CAAC,CAAC;IAChF,CAAC;IACD,KAAK,CAAC,QAAQ,CAAC,OAAe;QAC5B,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;QAC5C,IAAI,CAAC,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,WAAW,OAAO,EAAE,CAAC,CAAC;QAC3D,OAAO,CAAC,CAAC;IACX,CAAC;IACD,KAAK,CAAC,SAAS,CAAC,OAAe,EAAE,IAAgB;QAC/C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC;IAC1C,CAAC;IACD,KAAK,CAAC,MAAM,CAAC,OAAe;QAC1B,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3C,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,IAAY,EAAE,EAAU;QACjC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QACzC,IAAI,CAAC,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;QACxD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAClC,CAAC;IACD,KAAK,CAAC,MAAM,CAAC,OAAe;QAC1B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;IACvC,CAAC;IACD,KAAK,CAAC,aAAa,CAAC,GAAW;QAC7B,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;QAClF,MAAM,GAAG,GAAa,EAAE,CAAC;QACzB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;YAClC,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,GAAG,GAAG,CAAC,EAAE,CAAC;gBAC/C,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;QACD,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;IACpB,CAAC;IACD,KAAK,CAAC,KAAK,KAAoC,CAAC;CACjD;AAED,MAAM,
|
|
1
|
+
{"version":3,"file":"test-helpers.js","sourceRoot":"","sources":["../../src/adapters/test-helpers.ts"],"names":[],"mappings":"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"}
|