@linkdesk/plugin-sdk 0.1.13 → 0.1.15

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 CHANGED
@@ -1,26 +1,26 @@
1
1
  # @linkdesk/plugin-sdk
2
2
 
3
- LinkDesk 插件作者 SDK——对标 `@types/vscode`:装一个包,拿到 **`window.linkdesk.*` 类型提示 + 一键构建 `.linkdesk-plugin` + plugin.json 验证**。零壳源码依赖。
3
+ The LinkDesk plugin author SDK — the counterpart to `@types/vscode`: install one package and get **`window.linkdesk.*` type hints + one-command builds of `.linkdesk-plugin` + plugin.json validation**. Zero dependency on the shell source.
4
4
 
5
- > 类型真相源 = `@linkdesk/contracts`(本包依赖转发,不复制生成物——契约漂移你的 tsc 立即红)。
6
- > 插件作者写代码一律走 `window.linkdesk.*`(preload 注入),**禁止 `import @src/core`**。
5
+ > The source of truth for types = `@linkdesk/contracts` (this package re-exports it and does not copy the generated artifact — contract drift your tsc turns red immediately).
6
+ > Plugin authors always write code against `window.linkdesk.*` (injected by the preload); **`import @src/core` is forbidden**.
7
7
 
8
- ## 安装
8
+ ## Installation
9
9
 
10
10
  ```bash
11
11
  npm install -D @linkdesk/plugin-sdk
12
12
  ```
13
13
 
14
- ## API 速查表
14
+ ## API cheat sheet
15
15
 
16
16
  <!-- BEGIN API-CHEATSHEET -->
17
17
 
18
18
  > 自动生成,**勿手改**——由 `scripts/generate-api-cheatsheet.mjs` 从 `@linkdesk/contracts` 的 `linkdesk.d.ts` 现读产出,
19
19
  > `npm run check` 机械盯漂。完整签名与逐方法说明见 `linkdesk.d.ts` 本体(IDE 里可直接跳转)。
20
20
 
21
- **15 个域接口 → 46 个命名空间 / 243 个方法**,全部经 `window.linkdesk.<命名空间>.<方法>` 调用。(另含 1 个废弃别名 `config`,方法不重复计入)
21
+ **15 个域接口 → 46 个命名空间 / 243 个方法**,全部经 `window.linkdesk.<命名空间>.<方法>` 调用。 (plus 1 deprecated alias/es `config`, not counted twice)
22
22
 
23
- | 命名空间 | 方法数 | 方法 | 说明 |
23
+ | Namespace | Methods | Method | Notes |
24
24
  |:--|:--:|:--|:--|
25
25
  | `commands` | 5 | `execute` `executeCommand` `registerCommand` `unregisterCommands` `getCommands` | 命令——对标 VS Code vscode.commands |
26
26
  | `configuration` | 15 | `get` `set` `getSchema` `onChange` `getConfigurationContributions` `inspectConfiguration` `getUserSettings` `onDidChangeConfiguration` `onPluginLifecycleChange` `consumeSettingsGroup` `onRequestSettingsGroup` `consumeScrollToSetting` `onRequestScrollToSetting` `consumeOpenKeybindings` `onRequestOpenKeybindings` | 配置—新名——对标 VS Code vscode.workspace.getConfiguration |
@@ -62,91 +62,91 @@ npm install -D @linkdesk/plugin-sdk
62
62
  | `window` | 11 | `minimize` `maximize` `unmaximize` `close` `setZoom` `toggleDevTools` `isMaximized` `onMaximizeChange` `setAlwaysOnTop` `isAlwaysOnTop` `onAlwaysOnTopChange` | 窗口控制——TitleBar 按钮映射,双端注入(11 方法同通道,共享模块 electron/window-name… |
63
63
  | `shell` | 6 | `showItemInFolder` `openInTerminal` `pluginLocation` `openPluginFolder` `startDrag` `relaunch`° | 壳级命令——revealInOS / openInTerminal / startDrag / relaunch,双端… |
64
64
  | `hotExit` ⚠️ | 3 | `save` `load` `clear` | 热退出暂存——编辑器未保存内容落盘(E5.7#53) |
65
- | `getFilePath` | 0 | (顶层函数)`getFilePath: (file: File) => string;` | OS 拖入文件路径获取——双端注入 |
65
+ | `getFilePath` | 0 | (top-level function)`getFilePath: (file: File) => string;` | OS 拖入文件路径获取——双端注入 |
66
66
  | `panel` | 2 | `reveal` `revealFloating` | —— |
67
67
  | `settings` | 3 | `list` `getActive` `setActive` | —— |
68
68
  | `factorySlots` | 4 | `listRoles` `list` `getActive` `setActive` | —— |
69
69
  | `app` | 1 | `getVersion` | app 命名空间——只读产品身份 |
70
70
  | `update` | 1 | `getState` | update 命名空间——只读更新状态(供「关于」类插件读宿主版本/更新态) |
71
71
 
72
- ⚠️ = 契约可选命名空间(只在一侧注入):`bridge` `hotExit`——调用前先判断是否存在,另一侧为 `undefined`。
73
- ° = 契约标 `?` 的成员:只在一侧 preload 注入(绝大多数是壳侧独有),**插件跑在池里**——调用前先判存在。
72
+ ⚠️ = optional namespace in the contract (injected on one side only): `bridge` `hotExit` — check for existence before calling; on the other side it is undefined.
73
+ ° = member marked `?` in the contract: injected in one side's preload only (almost always shell-side). **Your plugin runs in the pool** — check for existence before calling.
74
74
 
75
75
  <!-- END API-CHEATSHEET -->
76
76
 
77
- ## 使用
77
+ ## Usage
78
78
 
79
- ### 1. tsconfig——让 `window.linkdesk.` 有类型
79
+ ### 1. tsconfig — give `window.linkdesk.` its types
80
80
 
81
81
  ```jsonc
82
82
  {
83
83
  "compilerOptions": {
84
- "types": ["@linkdesk/plugin-sdk"], // 全局 window.linkdesk 声明随契约注入
84
+ "types": ["@linkdesk/plugin-sdk"], // the global window.linkdesk declarations come in with the contracts
85
85
  "jsx": "react-jsx"
86
86
  }
87
87
  }
88
88
  ```
89
89
 
90
- 不建任何 global.d.ts。`.ts/.tsx` `window.linkdesk.tabs.create({...})` 直接有参数类型与返回类型检查。
90
+ Create no global.d.ts at all. In `.ts`/`.tsx`, `window.linkdesk.tabs.create({...})` gets parameter and return type checking directly.
91
91
 
92
- ### 2. plugin.json——声明插件(必填 `name`+`version`,可注释/尾逗号)
92
+ ### 2. plugin.json — declare the plugin (required `name` + `version`; comments and trailing commas allowed)
93
93
 
94
94
  ```jsonc
95
95
  {
96
- "name": "My Plugin", // 显示名
96
+ "name": "My Plugin", // display name
97
97
  "version": "1.0.0",
98
- "entry": "src/index.tsx", // view/card/protocol 型插件必需
98
+ "entry": "src/index.tsx", // required for view/card/protocol plugins
99
99
  "contributes": { "i18n": { "en": "i18n/en.json" } }
100
100
  }
101
101
  ```
102
102
 
103
- ### 3. 构建——产出 `.linkdesk-plugin` 分发文件
103
+ ### 3. Build — produce the `.linkdesk-plugin` distributable
104
104
 
105
105
  ```bash
106
- npm run build # 包自带 bin,等价 linkdesk-plugin-sdk build
106
+ npm run build # the package ships its own bin; equivalent to linkdesk-plugin-sdk build
107
107
  ```
108
108
 
109
- 构建自动完成:**validate plugin.json → Vite 打包 `src/index.tsx` `index.bundle.js` → 收拢 manifest/图标/i18n/README `dist/<id>.linkdesk-plugin/` → zip 成项目根 `<id>.linkdesk-plugin`**。
109
+ The build does all of this automatically: **validate plugin.json → Vite bundles `src/index.tsx` into `index.bundle.js` → gather manifest/icons/i18n/README into `dist/<id>.linkdesk-plugin/` → zip it into `<id>.linkdesk-plugin` at the project root**.
110
110
 
111
- - `react` / `react-dom` / `react-i18next` / `i18next` 由壳提供,**不打包**——其他依赖全部 inline,插件自包含。
112
- - 插件 id = `plugin.json` `pluginId` 字段;不声明则以**项目目录名**兜底(对齐壳加载契约)。
113
- - 想自定义入口/输出目录/额外 external:
111
+ - `react` / `react-dom` / `react-i18next` / `i18next` are provided by the shell and are **not bundled** — every other dependency is inlined, so plugins are self-contained.
112
+ - Plugin id = the `pluginId` field of `plugin.json`; if it is not declared, the **project directory name** is used as a fallback (matching the shell's loading contract).
113
+ - To customize the entry, output directory, or extra externals:
114
114
  ```js
115
115
  // vite.config.ts
116
116
  import { defineLinkdeskPluginConfig } from "@linkdesk/plugin-sdk";
117
117
  export default defineLinkdeskPluginConfig({ entry: "src/index.tsx", outDir: "dist" });
118
118
  ```
119
119
 
120
- ### 单独校验
120
+ ### Standalone validation
121
121
 
122
122
  ```bash
123
- npm run validate # linkdesk-plugin-sdk validate ./plugin.json
123
+ npm run validate # or linkdesk-plugin-sdk validate ./plugin.json
124
124
  ```
125
125
 
126
- ### 主题/图标数据文件 schema(E6#60——主题/图标作者 npm 通道)
126
+ ### Theme/icon data file schemas (the npm channel for theme and icon authors)
127
127
 
128
- `schemas/theme.schema.json` + `schemas/icon-theme.schema.json` 随包分发(与仓库 `public/schemas/` live 字节同步,漂移由 `check-plugin-schema-sync` 守卫)。主题/图标作者在数据 JSON 首行引 `$schema` IntelliSense
128
+ `schemas/theme.schema.json` + `schemas/icon-theme.schema.json` ship with the package (kept byte-synced with the repository's `public/schemas/`; drift is caught by `check-plugin-schema-sync`). Theme and icon authors reference `$schema` on the first line of their data JSON to get IntelliSense:
129
129
 
130
130
  ```jsonc
131
- // themes/my-glass.json(相对插件根)
131
+ // themes/my-glass.json (relative to the plugin root)
132
132
  {
133
133
  "$schema": "./node_modules/@linkdesk/plugin-sdk/schemas/theme.schema.json",
134
134
  // …
135
135
  }
136
136
  ```
137
137
 
138
- 数据文件**非 JSONC**(严格 JSON,同引擎加载)。构建期/CI 可用 validate 家族拦格式错(与仓库 `check-theme-schema.mjs` 同一 schema 文件,规则永不漂移):
138
+ Data files are **not JSONC** (strict JSON, loaded by the same engine). At build time or in CI, the validate family can catch format errors (the same schema files the repository's `check-theme-schema.mjs` uses, so the rules never drift):
139
139
 
140
140
  ```js
141
141
  import { validateThemeJson, validateIconThemeJson } from "@linkdesk/plugin-sdk";
142
142
 
143
143
  validateThemeJson("themes/my-glass.json"); // theme.schema.json
144
- validateIconThemeJson("icons/my-icons.json"); // icon-theme.schema.json(匹配表双形态契约)
144
+ validateIconThemeJson("icons/my-icons.json"); // icon-theme.schema.json (dual-form contract for the match table)
145
145
  ```
146
146
 
147
- ### index.bundle.js 约定
147
+ ### index.bundle.js conventions
148
148
 
149
- 打包产物 `export default` 一个 React 组件——壳以 `{ isActive }` 渲染它:
149
+ The bundle `export default`s a React component — the shell renders it with `{ isActive }`:
150
150
 
151
151
  ```tsx
152
152
  export default function MyView({ isActive }: { isActive: boolean }) {
@@ -154,7 +154,7 @@ export default function MyView({ isActive }: { isActive: boolean }) {
154
154
  }
155
155
  ```
156
156
 
157
- ## 限制
157
+ ## Limitations
158
158
 
159
- - **dev 预览**(壳内源码 glob 加载)对 plugin.json 走严格 JSON 解析;本 SDK validate 容忍注释/尾逗号是发布向能力——若插件要在 dev 预览跑,plugin.json 请保持无注释。
160
- - plugin.json 若带注释直接放进壳 `plugins/` dev 目录,预览加载会崩(壳侧 jsonc 支持是后续轮)。
159
+ - **dev preview** (source glob loading inside the shell) parses plugin.json as strict JSON; this SDK's validate tolerating comments/trailing commas is a publish-time capability — if a plugin needs to run in dev preview, keep plugin.json free of comments.
160
+ - Dropping a commented plugin.json straight into the shell's `plugins/` dev directory breaks preview loading (jsonc support on the shell side is still to come).
package/dist/bin.js CHANGED
@@ -9,10 +9,11 @@
9
9
  * - validate:跑 validatePluginJson 逐行打错,exit 1/0
10
10
  */
11
11
  import { existsSync } from "node:fs";
12
- import { join } from "node:path";
12
+ import { join, relative } from "node:path";
13
13
  import { build } from "vite";
14
14
  import { validatePluginJson } from "./validate.js";
15
15
  import { defineLinkdeskPluginConfig } from "./vite-config.js";
16
+ import { packPluginData } from "./pack.js";
16
17
  import { runPluginDev } from "./dev-server.js";
17
18
  import { runPluginDevReal } from "./dev-real.js";
18
19
  import { runPluginPublish } from "./publish.js";
@@ -35,6 +36,9 @@ const USAGE = `linkdesk-plugin-sdk <command>
35
36
  真 IPC/串口/LSP 类插件的秒级真机调试(壳零新代码;LINKDESK_USER_PLUGINS_DIR /
36
37
  LINKDESK_CDP_PORT 可覆盖)
37
38
  build 在插件工程根构建 .linkdesk-plugin(读 plugin.json → Vite build → zip)
39
+ pack 纯数据插件(主题/语言/图标集——无 entry、无可编译表面)的打包通道(E6#98c):
40
+ 打包目录整树(plugin.json 在顶)→ <pluginId>.linkdesk-plugin。排除 node_modules/dist/
41
+ package.json/隐藏项。--out <path> 可指定输出文件(缺省 = 插件根 <pluginId>.linkdesk-plugin)
38
42
  publish 一键发布(E6#26)——自动链路:建 GitHub Release → 上传 .linkdesk-plugin → 更新工程
39
43
  origin 仓库根 marketplace.json(多市场源模型)。发前预览确认;--yes 跳过(CI);
40
44
  --dry-run 只预览不碰网络。token:env LINKDESK_GITHUB_TOKEN,或首跑交互输入存入本机
@@ -100,6 +104,29 @@ async function main() {
100
104
  case "build":
101
105
  code = await cmdBuild();
102
106
  break;
107
+ case "pack": {
108
+ // pack [--out <path>]——纯数据包通道(E6#98c)。只认这一个 flag,多余参数直接报用法(防拼错静默)
109
+ const outIdx = rest.indexOf("--out");
110
+ const unknown = rest.filter((a, i) => a !== "--out" && (outIdx < 0 || i !== outIdx + 1));
111
+ if (outIdx >= 0 && rest[outIdx + 1] === undefined) {
112
+ console.error("pack --out 需要一个路径参数");
113
+ code = 1;
114
+ break;
115
+ }
116
+ if (unknown.length > 0) {
117
+ console.error(USAGE);
118
+ code = 1;
119
+ break;
120
+ }
121
+ const result = await packPluginData({ root: process.cwd(), outFile: outIdx >= 0 ? rest[outIdx + 1] : undefined });
122
+ console.log(`[linkdesk-plugin-sdk] ✔ ${result.id}.linkdesk-plugin(${(result.bytes / 1024).toFixed(1)} KB, ` +
123
+ `${result.entryCount} 条目)→ ${relative(process.cwd(), result.outPath) || result.outPath}`);
124
+ if (result.normalizedCount > 0) {
125
+ console.log(`[linkdesk-plugin-sdk] 行尾归一到 LF 的条目:${result.normalizedCount}(二进制条目原样,未计入)`);
126
+ }
127
+ code = 0;
128
+ break;
129
+ }
103
130
  case "publish": {
104
131
  // publish [--yes|--dry-run]——E6#26 自动发布链路(发前预览确认)
105
132
  const flags = rest.filter((a) => a.startsWith("-"));
package/dist/bin.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AACA;;;;;;;;GAQG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAEzE,MAAM,iBAAiB,GAAG;IACxB,gBAAgB;IAChB,iBAAiB;IACjB,iBAAiB;IACjB,gBAAgB;IAChB,iBAAiB;IACjB,iBAAiB;CAClB,CAAC;AAEF,MAAM,KAAK,GAAG;;;;;;;;;;;;;;;;CAgBb,CAAC;AAEF,KAAK,UAAU,OAAO,CAAC,IAAY;IACjC,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC;IACzC,0DAA0D;IAC1D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;IAC5D,OAAO,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,KAAK,UAAU,QAAQ;IACrB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC3B,MAAM,SAAS,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3E,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,KAAK,EAAE,CAAC,CAAC,yDAAyD;IAC1E,CAAC;SAAM,CAAC;QACN,MAAM,KAAK,CAAC,0BAA0B,EAAE,CAAC,CAAC,CAAC,UAAU;IACvD,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,WAAW,CAAC,MAAc;IACjC,MAAM,GAAG,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACvC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACrC,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,MAAM;YAAE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACrD,qCAAqC;QACrC,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,QAAQ,IAAI,EAAE;YAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC9D,OAAO,CAAC,CAAC;IACX,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IAClC,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,QAAQ,IAAI,EAAE;QAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC9D,OAAO,CAAC,CAAC;AACX,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,CAAC,EAAE,AAAD,EAAG,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IACnC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,gDAAgD;IACpF,IAAI,IAAY,CAAC;IACjB,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,KAAK,CAAC,CAAC,CAAC;YACX,8EAA8E;YAC9E,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC5B,MAAM,gBAAgB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;YACxC,CAAC;iBAAM,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC,EAAE,CAAC;gBACjE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACrB,IAAI,GAAG,CAAC,CAAC;gBACT,MAAM;YACR,CAAC;iBAAM,CAAC;gBACN,2DAA2D;gBAC3D,MAAM,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;YACpC,CAAC;YACD,IAAI,GAAG,CAAC,CAAC;YACT,MAAM;QACR,CAAC;QACD,KAAK,OAAO;YACV,IAAI,GAAG,MAAM,QAAQ,EAAE,CAAC;YACxB,MAAM;QACR,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,kDAAkD;YAClD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;YACpD,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,OAAO,IAAI,CAAC,KAAK,WAAW,CAAC,CAAC;YACxE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gBAC/D,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACrB,IAAI,GAAG,CAAC,CAAC;gBACT,MAAM;YACR,CAAC;YACD,IAAI,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YAClH,MAAM;QACR,CAAC;QACD,KAAK,UAAU;YACb,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC;YAC7C,MAAM;QACR,KAAK,MAAM;YACT,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;YAC/C,MAAM;QACR;YACE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACrB,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACvB,MAAM;IACV,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrB,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,2BAA2B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC7F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -12,5 +12,7 @@ export type { LinkdeskPluginOptions } from "./vite-config.js";
12
12
  export { validatePluginJson } from "./validate.js";
13
13
  export { validateThemeJson, validateIconThemeJson } from "./validate.js";
14
14
  export type { ValidationResult } from "./validate.js";
15
+ export { packPluginData } from "./pack.js";
16
+ export type { PackResult } from "./pack.js";
15
17
  export type * from "./types.js";
16
18
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAC9D,YAAY,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACzE,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtD,mBAAmB,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAC9D,YAAY,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACzE,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,YAAY,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5C,mBAAmB,YAAY,CAAC"}
package/dist/index.js CHANGED
@@ -10,4 +10,5 @@
10
10
  export { defineLinkdeskPluginConfig } from "./vite-config.js";
11
11
  export { validatePluginJson } from "./validate.js";
12
12
  export { validateThemeJson, validateIconThemeJson } from "./validate.js";
13
+ export { packPluginData } from "./pack.js";
13
14
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAE9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAE9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAEzE,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC"}
package/dist/pack.d.ts ADDED
@@ -0,0 +1,46 @@
1
+ /**
2
+ * 条目时间戳固定——值本身无意义,只要跨机器恒定。与壳仓 `scripts/pack-bundled-plugins.mjs` 同值。
3
+ */
4
+ export declare const ZIP_ENTRY_DATE: Date;
5
+ /**
6
+ * 文本条目行尾归一——**判据照抄 git 的 `text=auto`**(不另立一套分类):前 8000 字节含 NUL ⇒ 二进制,
7
+ * 原样;其余按 UTF-8 **严格**解码(解不开也当二进制);文本一律 `\r\n → \n`——与 `.gitattributes`
8
+ * 的 `eol=lf` 同规。没有 `\r\n` 就逐字节原样(连 BOM 决策也不动),调用方可用 `normalized` 分辨
9
+ * 「这次到底动没动」。
10
+ *
11
+ * 🔴 为什么必须是这条规则(壳仓实测的病根,不是推测):`core.autocrlf=true` + `.gitattributes`
12
+ * `text=auto eol=lf` ⇒ **索引里是 LF,工作区却是 CRLF**(`git ls-files --eol` 实测 `i/lf w/crlf`——
13
+ * `.gitattributes` 管不住**已检出**的存量文件)。于是同一份源码在一台机器上重打一次,zip 的内容
14
+ * 指纹就变了 ⇒ 版本门禁判「改内容没 bump」满屏红,而源码一个字没改。
15
+ */
16
+ export declare function normalizeEol(buf: Buffer): {
17
+ buf: Buffer;
18
+ normalized: boolean;
19
+ };
20
+ /** 相对路径是否进包——见文件头「排除清单」。路径一律正斜杠 */
21
+ export declare function isPackableRelPath(rel: string): boolean;
22
+ /** 目录递归收集相对路径文件——正斜杠,**排序**(条目顺序确定性 = 跨机器同字节) */
23
+ export declare function collectPluginFiles(root: string): string[];
24
+ export interface PackResult {
25
+ /** 插件身份(`pluginId` 声明值;缺声明时退回目录名兜底) */
26
+ id: string;
27
+ version: string;
28
+ /** 产物绝对路径 */
29
+ outPath: string;
30
+ bytes: number;
31
+ entryCount: number;
32
+ /** 被归一行尾(CRLF → LF)的条目数——不为零 = 这台机器的检出是 CRLF,产物已与工作区行尾解耦 */
33
+ normalizedCount: number;
34
+ }
35
+ /**
36
+ * 把一个插件目录打成 `.linkdesk-plugin`(纯数据包)。
37
+ *
38
+ * - 先跑 `validatePluginJson`:**manifest 不合法不产 zip**(宁打包时红脸,不把坏包带进分发链)
39
+ * - `outFile` 缺省 = `<root>/<pluginId>.linkdesk-plugin`(与 `build` 同款落点,作者零心智)
40
+ * - **不抛异常给「属性不合法」之外的场景**——文件读不了就抛,调用方自己决定怎么报
41
+ */
42
+ export declare function packPluginData(options: {
43
+ root: string;
44
+ outFile?: string;
45
+ }): Promise<PackResult>;
46
+ //# sourceMappingURL=pack.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pack.d.ts","sourceRoot":"","sources":["../src/pack.ts"],"names":[],"mappings":"AAwCA;;GAEG;AACH,eAAO,MAAM,cAAc,MAA0C,CAAC;AAQtE;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,OAAO,CAAA;CAAE,CAU9E;AAED,mCAAmC;AACnC,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAQtD;AAED,iDAAiD;AACjD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAWzD;AAED,MAAM,WAAW,UAAU;IACzB,uCAAuC;IACvC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,4DAA4D;IAC5D,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CAkCrG"}
package/dist/pack.js ADDED
@@ -0,0 +1,140 @@
1
+ /**
2
+ * 纯数据插件的打包通道(E6#98c,L7 第 7.1 轮)——`linkdesk-plugin-sdk pack`。
3
+ *
4
+ * 为什么需要它:主题 / 语言/图标集这类插件**没有 entry、没有可编译表面**——`build` 的 collectSurfaces
5
+ * 会直接抛「无可编译表面」。此前它们的 zip 只由**壳仓脚本** `scripts/pack-bundled-plugins.mjs` 产出,
6
+ * 而源码搬进各自独立的仓之后,插件仓里没有那条路径 ⇒ 产不出 zip。
7
+ *
8
+ * 语义 = 打包「**目录整树**」:`plugin.json` + 全部随包资源,条目相对插件根、正斜杠、**无外层目录**
9
+ * (loader 解压期待 plugin.json 在顶,E6#7 契约)。与 `build` 的静态清单不同——`build` 只拷一份
10
+ * 白名单(plugin.json / i18n / icon / README / CHANGELOG),纯数据包的**本体**恰恰是白名单之外的
11
+ * 数据文件(`themes/*.json` / `icons/**` / `en.json`),只能走「整树」。
12
+ *
13
+ * 排除清单(两个理由,缺一不可):
14
+ * - **构建/工具产物**:`node_modules/`、`dist/`、`<id>.linkdesk-plugin`(自己上一次的产物)、`*.tgz`
15
+ * ——独立仓里跑过 `npm install` 之后,不排会把整个 node_modules 打进 zip。
16
+ * - **npm 元数据**:`package.json` / `package-lock.json`——它们描述「怎么构建这个包」,不是插件内容。
17
+ * 这个取舍与 `build` 一致(build 的静态清单从不拷 package.json)。
18
+ * 隐藏项(`.` 开头,含 `.git` / `.github` / `.gitignore` / `.npmrc`)一并排除——同属工具面。
19
+ *
20
+ * 🔴 **两条与壳仓脚本必须逐字节一致的行为**(否则同一插件走「壳内」与「插件仓」两条路径产出的内容
21
+ * 指纹不同,`scripts/check-bundled-version-bump.mjs` 的内容指纹门禁会互相打架):
22
+ * ① **文本条目行尾归一 LF**——让产物与「打包时工作区的行尾」解耦。规则本体在 `normalizeEol`(本文件),
23
+ * 壳仓侧的同源实现是 `scripts/lib/text-eol.mjs`(判据:前 8000 字节含 NUL ⇒ 二进制原样;否则严格
24
+ * UTF-8 解码,解不开也当二进制;文本一律 `\r\n → \n`)。**SDK 是独立发布的 npm 包,不能 import
25
+ * 壳仓文件**,故只能是一份同源实现——改一处必须同笔改另一处。
26
+ * ⚠️ 壳仓的 `pack-bundled-plugins.mjs` 已改为调用本模块(打包实现只此一份),因此这条「两处同源」
27
+ * 当前只剩「行尾规则」这一份判据需要人工对齐。
28
+ * ② **条目时间戳固定**(`ZIP_ENTRY_DATE`)——JSZip 默认给每个条目盖 `new Date()`,于是内容一个字没改
29
+ * 重打一次字节也全变 ⇒ 产物不可复现(`git status` 恒脏、无法用「重打一遍」验证、也判断不了某次
30
+ * diff 是真改内容还是只换时间)。值本身无意义,只要跨机器恒定。
31
+ *
32
+ * 用法:
33
+ * `linkdesk-plugin-sdk pack` → 插件根 `./<pluginId>.linkdesk-plugin`
34
+ * `linkdesk-plugin-sdk pack --out <p>` → 指定输出文件(壳仓编排脚本用)
35
+ */
36
+ import { existsSync, readdirSync, readFileSync, writeFileSync } from "node:fs";
37
+ import { join, resolve } from "node:path";
38
+ import JSZip from "jszip";
39
+ import { derivePluginId, readPluginManifest, validatePluginJson } from "./validate.js";
40
+ /**
41
+ * 条目时间戳固定——值本身无意义,只要跨机器恒定。与壳仓 `scripts/pack-bundled-plugins.mjs` 同值。
42
+ */
43
+ export const ZIP_ENTRY_DATE = new Date(Date.UTC(2020, 0, 1, 0, 0, 0));
44
+ /** 排除的目录名(任意层级)——构建/工具产物 */
45
+ const EXCLUDED_DIRS = new Set(["node_modules", "dist"]);
46
+ /** 排除的文件名(任意层级)——npm 元数据 + 本通道自己的产物 */
47
+ const EXCLUDED_FILES = new Set(["package.json", "package-lock.json"]);
48
+ /**
49
+ * 文本条目行尾归一——**判据照抄 git 的 `text=auto`**(不另立一套分类):前 8000 字节含 NUL ⇒ 二进制,
50
+ * 原样;其余按 UTF-8 **严格**解码(解不开也当二进制);文本一律 `\r\n → \n`——与 `.gitattributes`
51
+ * 的 `eol=lf` 同规。没有 `\r\n` 就逐字节原样(连 BOM 决策也不动),调用方可用 `normalized` 分辨
52
+ * 「这次到底动没动」。
53
+ *
54
+ * 🔴 为什么必须是这条规则(壳仓实测的病根,不是推测):`core.autocrlf=true` + `.gitattributes`
55
+ * `text=auto eol=lf` ⇒ **索引里是 LF,工作区却是 CRLF**(`git ls-files --eol` 实测 `i/lf w/crlf`——
56
+ * `.gitattributes` 管不住**已检出**的存量文件)。于是同一份源码在一台机器上重打一次,zip 的内容
57
+ * 指纹就变了 ⇒ 版本门禁判「改内容没 bump」满屏红,而源码一个字没改。
58
+ */
59
+ export function normalizeEol(buf) {
60
+ if (buf.subarray(0, 8000).includes(0))
61
+ return { buf, normalized: false };
62
+ let text;
63
+ try {
64
+ text = new TextDecoder("utf-8", { fatal: true }).decode(buf);
65
+ }
66
+ catch {
67
+ return { buf, normalized: false }; // 不是合法 UTF-8 —— 当二进制,一个字节都不碰
68
+ }
69
+ if (!text.includes("\r\n"))
70
+ return { buf, normalized: false }; // 已是 LF,逐字节原样
71
+ return { buf: Buffer.from(text.replace(/\r\n/g, "\n"), "utf8"), normalized: true };
72
+ }
73
+ /** 相对路径是否进包——见文件头「排除清单」。路径一律正斜杠 */
74
+ export function isPackableRelPath(rel) {
75
+ const parts = rel.split("/");
76
+ if (parts.some((p) => p.startsWith(".")))
77
+ return false; // 隐藏项(.git/.github/.gitignore/.npmrc…)
78
+ if (parts.some((p) => EXCLUDED_DIRS.has(p)))
79
+ return false;
80
+ const name = parts[parts.length - 1];
81
+ if (EXCLUDED_FILES.has(name))
82
+ return false;
83
+ if (name.endsWith(".linkdesk-plugin") || name.endsWith(".tgz"))
84
+ return false;
85
+ return true;
86
+ }
87
+ /** 目录递归收集相对路径文件——正斜杠,**排序**(条目顺序确定性 = 跨机器同字节) */
88
+ export function collectPluginFiles(root) {
89
+ const out = [];
90
+ const walk = (dir, prefix) => {
91
+ for (const e of readdirSync(dir, { withFileTypes: true })) {
92
+ const rel = prefix ? `${prefix}/${e.name}` : e.name;
93
+ if (e.isDirectory())
94
+ walk(join(dir, e.name), rel);
95
+ else if (isPackableRelPath(rel))
96
+ out.push(rel);
97
+ }
98
+ };
99
+ walk(root, "");
100
+ return out.sort();
101
+ }
102
+ /**
103
+ * 把一个插件目录打成 `.linkdesk-plugin`(纯数据包)。
104
+ *
105
+ * - 先跑 `validatePluginJson`:**manifest 不合法不产 zip**(宁打包时红脸,不把坏包带进分发链)
106
+ * - `outFile` 缺省 = `<root>/<pluginId>.linkdesk-plugin`(与 `build` 同款落点,作者零心智)
107
+ * - **不抛异常给「属性不合法」之外的场景**——文件读不了就抛,调用方自己决定怎么报
108
+ */
109
+ export async function packPluginData(options) {
110
+ const root = resolve(options.root);
111
+ const manifestPath = join(root, "plugin.json");
112
+ if (!existsSync(manifestPath)) {
113
+ throw new Error(`插件根没有 plugin.json:${root}`);
114
+ }
115
+ const res = validatePluginJson(manifestPath);
116
+ if (!res.valid) {
117
+ throw new Error(`plugin.json 验证失败:\n ${res.errors.join("\n ")}`);
118
+ }
119
+ const manifest = readPluginManifest(manifestPath);
120
+ const id = derivePluginId(manifest, root.split(/[\\/]/).filter(Boolean).pop() ?? "");
121
+ const version = typeof manifest?.version === "string" ? manifest.version : "";
122
+ const zip = new JSZip();
123
+ let normalizedCount = 0;
124
+ let entryCount = 0;
125
+ for (const rel of collectPluginFiles(root)) {
126
+ const { buf, normalized } = normalizeEol(readFileSync(join(root, rel)));
127
+ if (normalized)
128
+ normalizedCount += 1;
129
+ zip.file(rel, buf, { date: ZIP_ENTRY_DATE });
130
+ entryCount += 1;
131
+ }
132
+ if (entryCount === 0) {
133
+ throw new Error(`插件根没有任何可打包条目:${root}(plugin.json 之外全被排除?)`);
134
+ }
135
+ const buf = await zip.generateAsync({ type: "nodebuffer", compression: "DEFLATE" });
136
+ const outPath = resolve(options.outFile ?? join(root, `${id}.linkdesk-plugin`));
137
+ writeFileSync(outPath, buf);
138
+ return { id, version, outPath, bytes: buf.byteLength, entryCount, normalizedCount };
139
+ }
140
+ //# sourceMappingURL=pack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pack.js","sourceRoot":"","sources":["../src/pack.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAuBH;;;GAGG;AACH,eAAO,MAAM,cAAc,QAAiC,CAAC;AAE7D,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAmCD,+DAA+D;AAC/D,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,kBAAkB,GAAG,MAAM,CAAC;CACrC;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,OAAO,GAAG,QAAQ,EAAE,CAc9D;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAkB/E;AAED,yEAAyE;AACzE,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAWxD;AA+FD,oDAAoD;AACpD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAGlE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAoCjE;AA8BD,uFAAuF;AACvF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAEhE;AAED,yHAAyH;AACzH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAEpE"}
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAuBH;;;GAGG;AACH,eAAO,MAAM,cAAc,QAAiC,CAAC;AAE7D,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AA2DD,+DAA+D;AAC/D,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,kBAAkB,GAAG,MAAM,CAAC;CACrC;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,OAAO,GAAG,QAAQ,EAAE,CAc9D;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAkB/E;AAED,yEAAyE;AACzE,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAWxD;AA+FD,oDAAoD;AACpD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAGlE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAqCjE;AA8BD,uFAAuF;AACvF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAEhE;AAED,yHAAyH;AACzH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAEpE"}
package/dist/validate.js CHANGED
@@ -77,6 +77,31 @@ function collectRemovedFieldWarnings(manifest, base) {
77
77
  }
78
78
  return out;
79
79
  }
80
+ /**
81
+ * pluginId 显式声明提醒(E6#98g,L7 第 7.1 轮)——**警告不是错误**(`valid` 不变)。
82
+ *
83
+ * 为什么必须有这道提醒:插件身份今天可以靠「项目目录名」兜底(`derivePluginId`),而目录名与仓库名
84
+ * 是**自由**的。L7 把源码搬进各自独立的仓(名字自由)之后,目录名一改,构建出的分发件就换了身份,
85
+ * 且五条后果——安装目录并存两份 / 卸载墓碑对不上 / 市场出现两条不同 id 的条目 / 更新链静默断 /
86
+ * 插件数据看似丢失——**没有一条会报错**。
87
+ *
88
+ * 兜底路径**不删**(仓外已有存量第三方插件在吃它),但作者必须被告知它不该被依赖。官方插件由仓库侧
89
+ * 门禁兜底(18 只全部显式声明),此处是作者侧软提醒。
90
+ */
91
+ function collectPluginIdWarning(manifest, base) {
92
+ if (!manifest || typeof manifest !== "object")
93
+ return [];
94
+ const m = manifest;
95
+ // 空白串/shape 非法由 schema 的 pattern 先拦(那走 errors 分支、不会到这里);此处 trim 只为
96
+ // 「schema 无 pattern 的未来」与「直接调用本函数」两条路留一道等价守卫——两条路判据必须一致。
97
+ if (typeof m.pluginId === "string" && m.pluginId.trim() !== "")
98
+ return [];
99
+ return [
100
+ `${base} 未声明 "pluginId"——插件身份将退回「项目目录名」兜底。目录名与仓库名是自由的,` +
101
+ `一旦它们与插件身份不一致,构建出的分发件就会换一个身份,且不会有任何报错。` +
102
+ `请在 plugin.json 顶层显式声明 pluginId(值 = 当前目录名;发布后永不可改)。`,
103
+ ];
104
+ }
80
105
  /**
81
106
  * 收集插件 i18n 声明——顶层**废弃** `manifest.i18n` + `contributes.i18n` 两层(schema 243/623 行:
82
107
  * 顶层 i18n @deprecated,contributes 为现役)。shape = { 语言代码: 相对路径 }。
@@ -255,8 +280,9 @@ export function validatePluginJson(path) {
255
280
  errors.push(`${decl.rel}: 在 ${decl.origin} 中声明但文件不存在`);
256
281
  }
257
282
  }
258
- // 3) 已移除字段墓碑提示(E6#91d)——schema 顶层 additionalProperties: true ⇒ 这一步是作者**唯一**能被告知的通道
259
- const warnings = collectRemovedFieldWarnings(manifest, base);
283
+ // 3) 已移除字段墓碑提示(E6#91d)+ pluginId 显式声明提醒(E6#98g)——schema 顶层
284
+ // additionalProperties: true 这两步是作者**唯一**能被告知的通道
285
+ const warnings = [...collectRemovedFieldWarnings(manifest, base), ...collectPluginIdWarning(manifest, base)];
260
286
  return { valid: errors.length === 0, errors, ...(warnings.length > 0 ? { warnings } : {}) };
261
287
  }
262
288
  /* ── 数据文件校验器(E6#60:主题/图标主题 authors 面,镜像 check-theme-schema.mjs 同规则) ── */
@@ -1 +1 @@
1
- {"version":3,"file":"validate.js","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@linkdesk/plugin-sdk",
3
- "version": "0.1.13",
3
+ "version": "0.1.15",
4
4
  "description": "@linkdesk/plugin-sdk——LinkDesk 插件作者 SDK(对标 @types/vscode):window.linkdesk.* 类型 + 一键 build(.linkdesk-plugin) + dev 宿主 + plugin.json 验证 + eslint 门禁(E6#54d)。作者 npm i 后零壳源码依赖。",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",