@linkdesk/plugin-sdk 0.1.1 → 0.1.3

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
@@ -60,6 +60,27 @@ npm run build # 包自带 bin,等价 linkdesk-plugin-sdk build
60
60
  npm run validate # 或 linkdesk-plugin-sdk validate ./plugin.json
61
61
  ```
62
62
 
63
+ ### 主题/图标数据文件 schema(E6#60——主题/图标作者 npm 通道)
64
+
65
+ `schemas/theme.schema.json` + `schemas/icon-theme.schema.json` 随包分发(与仓库 `public/schemas/` live 字节同步,漂移由 `check-plugin-schema-sync` 守卫)。主题/图标作者在数据 JSON 首行引 `$schema` 拿 IntelliSense:
66
+
67
+ ```jsonc
68
+ // themes/my-glass.json(相对插件根)
69
+ {
70
+ "$schema": "./node_modules/@linkdesk/plugin-sdk/schemas/theme.schema.json",
71
+ // …
72
+ }
73
+ ```
74
+
75
+ 数据文件**非 JSONC**(严格 JSON,同引擎加载)。构建期/CI 可用 validate 家族拦格式错(与仓库 `check-theme-schema.mjs` 同一 schema 文件,规则永不漂移):
76
+
77
+ ```js
78
+ import { validateThemeJson, validateIconThemeJson } from "@linkdesk/plugin-sdk";
79
+
80
+ validateThemeJson("themes/my-glass.json"); // theme.schema.json
81
+ validateIconThemeJson("icons/my-icons.json"); // icon-theme.schema.json(匹配表双形态契约)
82
+ ```
83
+
63
84
  ### index.bundle.js 约定
64
85
 
65
86
  打包产物 `export default` 一个 React 组件——壳以 `{ isActive }` 渲染它:
@@ -0,0 +1,47 @@
1
+ /**
2
+ * dev 宿主入口(E6#23.5/#24b)——纯浏览器最小壳:顶部 dev 条 + React root 渲染正在开发的插件。
3
+ *
4
+ * 接线(均由 `linkdesk-plugin-sdk dev` 的 vite 配置注入,见 src/dev-server.ts):
5
+ * - `__linkdesk_dev_entry__`:resolve.alias 虚拟 id → 插件根 plugin.json 的 entry 绝对路径。
6
+ * 静态 import → 入口是模块图常规成员 → vite 标准 HMR 全链(改码即热更)。
7
+ * - `__LINKDESK_DEV_I18N__`:define 字面量 = { 语言码: { translation: {…} } }(现读插件
8
+ * contributes.i18n 声明的各语言 JSON)。
9
+ * - `__LINKDESK_DEV_PLUGIN_ID__`:define 字面量 = pluginId(顶部 dev 条展示)。
10
+ *
11
+ * 契约:宿主把插件当「激活标签」渲染({ isActive: true })——对标壳渲染视图插件的语义;
12
+ * keep-alive / tabId / sourceId 在纯浏览器 dev 无对应物(那是壳标签页系统的概念)。
13
+ * i18n:lng = 插件第一个声明的语言(通常 en);key 缺失时 i18next 返回 key 本身——中文 key 即中文兜底。
14
+ */
15
+ import { createRoot } from "react-dom/client";
16
+ import i18n from "i18next";
17
+ import { initReactI18next, I18nextProvider } from "react-i18next";
18
+ import { injectDevMockApi } from "./mock.js";
19
+ import PluginView from "__linkdesk_dev_entry__";
20
+
21
+ declare const __LINKDESK_DEV_I18N__: Record<string, { translation: Record<string, unknown> }>;
22
+ declare const __LINKDESK_DEV_PLUGIN_ID__: string;
23
+
24
+ const resources = __LINKDESK_DEV_I18N__;
25
+ const lng = Object.keys(resources)[0] ?? "en";
26
+
27
+ void i18n.use(initReactI18next).init({
28
+ resources,
29
+ lng,
30
+ fallbackLng: false,
31
+ interpolation: { escapeValue: false },
32
+ react: { useSuspense: false },
33
+ });
34
+
35
+ injectDevMockApi();
36
+
37
+ const pluginIdEl = document.getElementById("ld-plugin-id");
38
+ if (pluginIdEl) pluginIdEl.textContent = __LINKDESK_DEV_PLUGIN_ID__;
39
+
40
+ const rootEl = document.getElementById("ld-root");
41
+ if (rootEl) {
42
+ createRoot(rootEl).render(
43
+ <I18nextProvider i18n={i18n}>
44
+ <PluginView isActive />
45
+ </I18nextProvider>,
46
+ );
47
+ }
@@ -0,0 +1,50 @@
1
+ <!doctype html>
2
+ <html lang="zh-CN">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <title>LinkDesk dev 宿主</title>
7
+ <style>
8
+ /* dev 宿主页 = SDK 工具 UI(非壳/非产品),中性配色 + 兜底主题变量让插件 var(--xxx) 不至全黑。
9
+ 固定值允许——不违反壳硬约束 16(那约束壳 UI;此页不属于壳渲染树)。 */
10
+ :root {
11
+ --text: #e8e8ea;
12
+ --text-muted: #9a9aa2;
13
+ --border: #2c2c33;
14
+ --bg: #16161a;
15
+ --bg-alt: #1f1f25;
16
+ --accent: #4cc38a;
17
+ }
18
+ * { box-sizing: border-box; }
19
+ html, body { margin: 0; height: 100%; }
20
+ body {
21
+ background: var(--bg);
22
+ color: var(--text);
23
+ font-family: system-ui, -apple-system, "Segoe UI", Roboto, "PingFang SC", "Microsoft YaHei", sans-serif;
24
+ }
25
+ #ld-topbar {
26
+ position: sticky; top: 0; z-index: 10;
27
+ display: flex; align-items: center; gap: 8px;
28
+ padding: 5px 12px; font-size: 12px;
29
+ background: var(--bg-alt); border-bottom: 1px solid var(--border);
30
+ user-select: none;
31
+ }
32
+ #ld-topbar .dot { width: 8px; height: 8px; border-radius: 50%; background: var(--accent); }
33
+ #ld-topbar .sep { opacity: 0.4; }
34
+ #ld-topbar code { color: #9fd0ff; font-family: ui-monospace, "Cascadia Code", Consolas, monospace; }
35
+ #ld-topbar .hint { color: var(--text-muted); margin-left: auto; }
36
+ #ld-root { padding: 0; }
37
+ </style>
38
+ </head>
39
+ <body>
40
+ <div id="ld-topbar">
41
+ <span class="dot"></span>
42
+ <span>LinkDesk dev 宿主</span>
43
+ <span class="sep">·</span>
44
+ <code id="ld-plugin-id"></code>
45
+ <span class="hint">本地预览 · 无 Electron/IPC · 改码 HMR</span>
46
+ </div>
47
+ <div id="ld-root"></div>
48
+ <script type="module" src="/dev-main.tsx"></script>
49
+ </body>
50
+ </html>
@@ -0,0 +1,34 @@
1
+ /**
2
+ * dev 宿主 mock 注入锚点(E6#23.5c 位置定案)。
3
+ *
4
+ * 纯浏览器 dev 没有真实 preload → `window.linkdesk` 不存在。现役注入体 = **throw-on-call 兜底**:
5
+ * 任何未 mock 的 API 调用抛「仅在生产环境可用」而非静默 `undefined`/`TypeError`——防「dev 正常、
6
+ * 装进 LinkDesk 才炸」的反向落差(E6#27b 精神,先落行为、后补方法表)。
7
+ *
8
+ * 🔵 承接锚:真方法默认值表 = E6#27(generate-contract.mjs 第二输出目标,第 2.3 轮)——
9
+ * 届时替换本文件注入体(代理内填充生成的方法),`injectDevMockApi()` 签名与调用点不变。
10
+ */
11
+ export function injectDevMockApi(): void {
12
+ if (typeof window === "undefined") return;
13
+ if ((window as unknown as Record<string, unknown>).linkdesk) return;
14
+
15
+ // path 跟踪代理:window.linkdesk.configuration.get() → 报「configuration.get 未 mock」
16
+ const makeNs = (path: string[]): unknown =>
17
+ new Proxy(function () {
18
+ /* placeholder: 调用时走 apply trap */
19
+ } as unknown as () => unknown, {
20
+ apply(): never {
21
+ const dotted = path.join(".") || "(根)";
22
+ throw new Error(
23
+ `[dev] window.linkdesk${dotted ? "." + dotted : ""} 未 mock——该 API 仅在生产环境可用` +
24
+ `(build → 装进 LinkDesk 走真实 IPC)。E6#27 生成 mock 落地前,UI 骨架开发请先不调真实 API。`,
25
+ );
26
+ },
27
+ get(_target, prop): unknown {
28
+ if (prop === "then") return undefined; // 防 Promise.resolve(proxy) 探测无限递归
29
+ return makeNs([...path, String(prop)]);
30
+ },
31
+ });
32
+
33
+ (window as unknown as Record<string, unknown>).linkdesk = makeNs([]);
34
+ }
package/dist/bin.js CHANGED
@@ -13,6 +13,7 @@ import { join } 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 { runPluginDev } from "./dev-server.js";
16
17
  import { runPluginLint, renderPluginLintReport } from "./eslint/lint.js";
17
18
  const VITE_CONFIG_FILES = [
18
19
  "vite.config.ts",
@@ -25,6 +26,8 @@ const VITE_CONFIG_FILES = [
25
26
  const USAGE = `linkdesk-plugin-sdk <command>
26
27
 
27
28
  命令:
29
+ dev 在插件工程根起 dev 宿主(E6#24)——读 plugin.json → Vite dev server(端口 1421)
30
+ → 浏览器打开纯前端预览 + HMR。只支持带 entry 的视图插件(脚手架 tab 形态)
28
31
  build 在插件工程根构建 .linkdesk-plugin(读 plugin.json → Vite build → zip)
29
32
  validate 校验 plugin.json(参数 = 路径,默认 ./plugin.json)
30
33
  lint E6#54d 门禁(eslint 12 规则 + 三 check 双轨,全 WARN 永不 fail;知情绕行 =
@@ -62,6 +65,11 @@ async function main() {
62
65
  const [, , command, arg] = process.argv;
63
66
  let code;
64
67
  switch (command) {
68
+ case "dev":
69
+ // 挂起直到 Ctrl+C(server.close 后 resolve)——dev 无退出码语义,正常退出 = 0
70
+ await runPluginDev(process.cwd());
71
+ code = 0;
72
+ break;
65
73
  case "build":
66
74
  code = await cmdBuild();
67
75
  break;
package/dist/bin.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export declare const DEV_PORT: number;
2
+ /** dev 宿主目录(SDK 包根 dev-host/,与 dist 平级)——供 bin/测试定位 */
3
+ export declare function devHostDir(): string;
4
+ /**
5
+ * 起 dev 宿主并挂起进程(Ctrl+C → server.close)。
6
+ * 设计要点:define 把 i18n resources + pluginId 作为「字面量表达式」注入宿主——
7
+ * 宿主 import 一个对象不是 URL,避免每插件一条虚拟模块路径维护。
8
+ */
9
+ export declare function runPluginDev(root: string): Promise<void>;
10
+ //# sourceMappingURL=dev-server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-server.d.ts","sourceRoot":"","sources":["../src/dev-server.ts"],"names":[],"mappings":"AAgCA,eAAO,MAAM,QAAQ,QAAgD,CAAC;AAEtE,uDAAuD;AACvD,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAgED;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA2C9D"}
@@ -0,0 +1,136 @@
1
+ /**
2
+ * `linkdesk-plugin-sdk dev`——E6#23.5/#24:SDK 自带独立宿主页,在作者自己的 Vite dev server 下
3
+ * 加载正在开发的插件源码 + HMR。纯浏览器预览,无 Electron、无 IPC。
4
+ *
5
+ * 形态(第 2.2 轮审视拍板,见 02-本地预览环境.md §九/§十;本模块 = 实装决策记录):
6
+ * - **宿主 = SDK 自带 dev-host/**(index.html + dev-main.tsx + mock.ts),随包 raw 资产,
7
+ * vite dev 现役转换 tsx——不预编译(precompile 到 js 会杀掉 HMR 所需的源码模块态)。
8
+ * - **root = dev-host 目录**;插件入口经 `resolve.alias` 把虚拟 id `__linkdesk_dev_entry__`
9
+ * 映射到插件根 plugin.json 声明的 entry **绝对路径** → 入口成为模块图常规成员 + 静态 import
10
+ * → HMR 走 vite 标准全链。比「浏览器端运行时 import('/@fs/…')」更稳——计算型动态 import 不在
11
+ * 静态图,HMR 会退化成整页刷新(`/@fs/` 语义由 alias 到绝对路径达成:vite 对 alias 解析出的
12
+ * 绝对路径文件同样按需转换 + 注入 HMR,等效于 /@fs/ 加载)。
13
+ * - **fs.allow 放行插件根**——root 在 node_modules 内(SDK 随装),vite 默认 allow 不含作者工程。
14
+ * - **react/react-dom/react-i18next/i18next = SDK dependencies**(非 devDep):dev 宿主渲染插件
15
+ * 需要它们;构建面仍 external 不打进 .linkdesk-plugin。作者零配置(npm i SDK 即达)。
16
+ * - **mock**:#23.5c 锚点 = dev-host/mock.ts 的 throw-on-call Proxy(未 mock 的 API 调用抛
17
+ * 「仅生产可用」而非静默 undefined,防 dev 正常/装机炸的反向落差)。真方法默认值表归 E6#27
18
+ * (generate-contract 第二输出目标,2.3 轮)——届时替换 mock.ts 注入体,锚点(injectDevMockApi)
19
+ * 不变。
20
+ *
21
+ * 端口 1421(对齐设计稿,避开壳 dev 1420)。`LINKDESK_DEV_PORT` 环境变量可覆盖(CI/占用冲突逃生门)。
22
+ */
23
+ import { existsSync, readFileSync } from "node:fs";
24
+ import { basename, dirname, join, resolve } from "node:path";
25
+ import { fileURLToPath } from "node:url";
26
+ import { spawn } from "node:child_process";
27
+ import { createServer } from "vite";
28
+ import react from "@vitejs/plugin-react";
29
+ import { collectI18nDecls, derivePluginId, readPluginManifest } from "./validate.js";
30
+ const DEV_HOST_DIR = join(dirname(fileURLToPath(import.meta.url)), "../dev-host");
31
+ export const DEV_PORT = Number(process.env.LINKDESK_DEV_PORT ?? 1421);
32
+ /** dev 宿主目录(SDK 包根 dev-host/,与 dist 平级)——供 bin/测试定位 */
33
+ export function devHostDir() {
34
+ return DEV_HOST_DIR;
35
+ }
36
+ /** 从插件根读 plugin.json → 定位 dev 目标(entry 必须存在——dev 宿主当前支持「entry 视图插件」形态) */
37
+ function loadPluginContext(root) {
38
+ const manifestPath = join(root, "plugin.json");
39
+ if (!existsSync(manifestPath)) {
40
+ throw new Error(`当前目录不是插件工程——找不到 ${manifestPath}。请 cd 进插件项目根再跑 linkdesk-plugin-sdk dev`);
41
+ }
42
+ const manifest = readPluginManifest(manifestPath);
43
+ const pluginId = derivePluginId(manifest, basename(root));
44
+ const entry = manifest?.entry;
45
+ if (typeof entry !== "string" || !entry.trim()) {
46
+ throw new Error(`「${pluginId}」plugin.json 缺 entry——dev 宿主当前支持带 entry 的视图插件(脚手架 tab 形态:` +
47
+ `src/index.tsx default 导出组件)。纯 contributes 分区视图插件的壳侧 dev 见 E6#28(02-本地预览环境.md §10.3)`);
48
+ }
49
+ const entryAbs = resolve(root, entry);
50
+ if (!existsSync(entryAbs)) {
51
+ throw new Error(`「${pluginId}」entry "${entry}" 不存在:${entryAbs}`);
52
+ }
53
+ // i18n resources——与 validate 同一读取面(collectI18nDecls),语言码 = 文件名去 .json
54
+ const resources = {};
55
+ for (const decl of collectI18nDecls(manifest)) {
56
+ const p = resolve(root, decl.rel);
57
+ if (!existsSync(p))
58
+ continue;
59
+ const lang = basename(decl.rel, ".json");
60
+ try {
61
+ resources[lang] = { translation: JSON.parse(readFileSync(p, "utf8")) };
62
+ }
63
+ catch {
64
+ // 单语言文件坏 → 跳过该语言(宿主仍起,validate 会报真错)——dev 不阻断
65
+ }
66
+ }
67
+ return { pluginId, entryAbs, resources };
68
+ }
69
+ /** 平台开浏览器(Vite 默认依赖 open 包,SDK 不想为此加 dep——3 行 spawn 足矣) */
70
+ function openBrowser(url) {
71
+ let cmd;
72
+ let args;
73
+ if (process.platform === "win32") {
74
+ cmd = "cmd";
75
+ args = ["/c", "start", "", url];
76
+ }
77
+ else if (process.platform === "darwin") {
78
+ cmd = "open";
79
+ args = [url];
80
+ }
81
+ else {
82
+ cmd = "xdg-open";
83
+ args = [url];
84
+ }
85
+ try {
86
+ spawn(cmd, args, { stdio: "ignore", detached: true }).unref();
87
+ }
88
+ catch {
89
+ // 开不了(无 GUI/沙箱)→ 用户手抄 URL,不阻断
90
+ }
91
+ }
92
+ /**
93
+ * 起 dev 宿主并挂起进程(Ctrl+C → server.close)。
94
+ * 设计要点:define 把 i18n resources + pluginId 作为「字面量表达式」注入宿主——
95
+ * 宿主 import 一个对象不是 URL,避免每插件一条虚拟模块路径维护。
96
+ */
97
+ export async function runPluginDev(root) {
98
+ const { pluginId, entryAbs, resources } = loadPluginContext(root);
99
+ const hostHtml = join(DEV_HOST_DIR, "index.html");
100
+ if (!existsSync(hostHtml)) {
101
+ throw new Error(`dev 宿主缺失:${hostHtml}——SDK 包损坏或安装不全?`);
102
+ }
103
+ const server = await createServer({
104
+ root: DEV_HOST_DIR,
105
+ server: {
106
+ port: DEV_PORT,
107
+ strictPort: true,
108
+ fs: { allow: [DEV_HOST_DIR, root] },
109
+ },
110
+ resolve: {
111
+ alias: [{ find: /^__linkdesk_dev_entry__$/, replacement: entryAbs }],
112
+ },
113
+ define: {
114
+ __LINKDESK_DEV_I18N__: JSON.stringify(resources),
115
+ __LINKDESK_DEV_PLUGIN_ID__: JSON.stringify(pluginId),
116
+ },
117
+ plugins: [react()],
118
+ });
119
+ await server.listen();
120
+ const url = `http://localhost:${DEV_PORT}/?pluginId=${encodeURIComponent(pluginId)}`;
121
+ // 宿主已起:URL 打印(Git Bash / CI 也看得到)+ 尽力开浏览器(开不了不阻断)
122
+ console.log("");
123
+ console.log(` LinkDesk dev 宿主 → ${url}`);
124
+ console.log(` 预览插件「${pluginId}」——改 src/ 下源码即 HMR;Ctrl+C 停止`);
125
+ console.log("");
126
+ openBrowser(url);
127
+ // 挂起直到 Ctrl+C——main() 的 process.exit 在 runPluginDev resolve 后才跑
128
+ await new Promise((stop) => {
129
+ const shutdown = () => {
130
+ server.close().then(stop).catch(stop);
131
+ };
132
+ process.once("SIGINT", shutdown);
133
+ process.once("SIGTERM", shutdown);
134
+ });
135
+ }
136
+ //# sourceMappingURL=dev-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-server.js","sourceRoot":"","sources":["../src/dev-server.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,7 +1,8 @@
1
1
  /**
2
2
  * @linkdesk/plugin-sdk 公共出口(barrel)。
3
3
  *
4
- * 运行面只有两个函数:`defineLinkdeskPluginConfig()`(构建)+ `validatePluginJson()`(验证);
4
+ * 运行面:`defineLinkdeskPluginConfig()`(构建)+ validate 家族(plugin.json / 主题数据 / 图标主题数据;
5
+ * E6#60 起主题/图标作者也走 npm 通道——validateThemeJson / validateIconThemeJson);
5
6
  * 类型面经 types.js 全量转发 @linkdesk/contracts(window.linkdesk.* 全局声明随契约进 program,E6#2b)。
6
7
  * validate 的内部 helper(collectI18nDecls/derivePluginId/SAFE_PLUGIN_ID 等)供 vite-config/packager
7
8
  * 跨模块复用,但**不进 barrel**——公共 API 面保持最小(对标 @types/vscode 只给类型+工具)。
@@ -9,6 +10,7 @@
9
10
  export { defineLinkdeskPluginConfig } from "./vite-config.js";
10
11
  export type { LinkdeskPluginOptions } from "./vite-config.js";
11
12
  export { validatePluginJson } from "./validate.js";
13
+ export { validateThemeJson, validateIconThemeJson } from "./validate.js";
12
14
  export type { ValidationResult } from "./validate.js";
13
15
  export type * from "./types.js";
14
16
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;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,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,mBAAmB,YAAY,CAAC"}
package/dist/index.js CHANGED
@@ -1,11 +1,13 @@
1
1
  /**
2
2
  * @linkdesk/plugin-sdk 公共出口(barrel)。
3
3
  *
4
- * 运行面只有两个函数:`defineLinkdeskPluginConfig()`(构建)+ `validatePluginJson()`(验证);
4
+ * 运行面:`defineLinkdeskPluginConfig()`(构建)+ validate 家族(plugin.json / 主题数据 / 图标主题数据;
5
+ * E6#60 起主题/图标作者也走 npm 通道——validateThemeJson / validateIconThemeJson);
5
6
  * 类型面经 types.js 全量转发 @linkdesk/contracts(window.linkdesk.* 全局声明随契约进 program,E6#2b)。
6
7
  * validate 的内部 helper(collectI18nDecls/derivePluginId/SAFE_PLUGIN_ID 等)供 vite-config/packager
7
8
  * 跨模块复用,但**不进 barrel**——公共 API 面保持最小(对标 @types/vscode 只给类型+工具)。
8
9
  */
9
10
  export { defineLinkdeskPluginConfig } from "./vite-config.js";
10
11
  export { validatePluginJson } from "./validate.js";
12
+ export { validateThemeJson, validateIconThemeJson } from "./validate.js";
11
13
  //# 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;;;;;;;GAOG;AACH,OAAO,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAE9D,OAAO,EAAE,kBAAkB,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"}
@@ -1,6 +1,9 @@
1
1
  /**
2
- * plugin.json 验证工具(E6#5)——jsonc 解析 + JSON Schema(ajv-2020)+ i18n 文件存在性。
3
- * 纯逻辑、无 vite import——`validatePluginJson` bin / defineLinkdeskPluginConfig 三方共用。
2
+ * 作者面 schema 验证工具(E6#5 plugin.json;E6#60 theme/icon 数据文件)。
3
+ * - validatePluginJson(plugin.schema.json,2020-12)——jsonc 解析 + JSON Schema + i18n 文件存在性。
4
+ * - validateThemeJson / validateIconThemeJson(theme.schema.json draft-07 / icon-theme.schema.json 2020-12)——
5
+ * E6#60 主题/图标作者数据文件校验,镜像 scripts/check-theme-schema.mjs 同规则(同一 schema 文件编译,永不漂移)。
6
+ * 纯逻辑、无 vite import——validatePluginJson 与 bin / defineLinkdeskPluginConfig 三方共用。
4
7
  *
5
8
  * 设计裁决:
6
9
  * - **解析走 jsonc-parser**(对齐壳 E6#55)——作者 plugin.json 可写注释/尾逗号(对标 VS Code
@@ -50,4 +53,8 @@ export declare function isWithinRoot(root: string, target: string): boolean;
50
53
  * 顺序:读文件 → jsonc 语法 → schema 全量 → i18n 文件存在性(schema 干净才查第二类,防噪音)。
51
54
  */
52
55
  export declare function validatePluginJson(path: string): ValidationResult;
56
+ /** 校验主题数据 JSON 文件(对照 theme.schema.json draft-07——E5.8#129,引擎 parseThemeRecipe 消费格式) */
57
+ export declare function validateThemeJson(path: string): ValidationResult;
58
+ /** 校验图标主题 mappings JSON 文件(对照 icon-theme.schema.json 2020-12——E5.8#133 / E6#60 实收格式,引擎 normalizeIconThemeMappings 消费) */
59
+ export declare function validateIconThemeJson(path: string): ValidationResult;
53
60
  //# sourceMappingURL=validate.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAYH;;;GAGG;AACH,eAAO,MAAM,cAAc,QAAiC,CAAC;AAE7D,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,+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;AAiED,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,CAiCjE"}
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAiBH;;;GAGG;AACH,eAAO,MAAM,cAAc,QAAiC,CAAC;AAE7D,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,+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,CAiCjE;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
@@ -1,6 +1,9 @@
1
1
  /**
2
- * plugin.json 验证工具(E6#5)——jsonc 解析 + JSON Schema(ajv-2020)+ i18n 文件存在性。
3
- * 纯逻辑、无 vite import——`validatePluginJson` bin / defineLinkdeskPluginConfig 三方共用。
2
+ * 作者面 schema 验证工具(E6#5 plugin.json;E6#60 theme/icon 数据文件)。
3
+ * - validatePluginJson(plugin.schema.json,2020-12)——jsonc 解析 + JSON Schema + i18n 文件存在性。
4
+ * - validateThemeJson / validateIconThemeJson(theme.schema.json draft-07 / icon-theme.schema.json 2020-12)——
5
+ * E6#60 主题/图标作者数据文件校验,镜像 scripts/check-theme-schema.mjs 同规则(同一 schema 文件编译,永不漂移)。
6
+ * 纯逻辑、无 vite import——validatePluginJson 与 bin / defineLinkdeskPluginConfig 三方共用。
4
7
  *
5
8
  * 设计裁决:
6
9
  * - **解析走 jsonc-parser**(对齐壳 E6#55)——作者 plugin.json 可写注释/尾逗号(对标 VS Code
@@ -20,9 +23,14 @@ import { existsSync, readFileSync } from "node:fs";
20
23
  import { basename, dirname, isAbsolute, relative, resolve } from "node:path";
21
24
  import { fileURLToPath } from "node:url";
22
25
  import * as jsonc from "jsonc-parser";
23
- import Ajv2020 from "ajv/dist/2020.js"; // ajv 无 exports 映射——Node ESM 需显式 .js(bundler 态才可去后缀)
24
- /** 包内 schema 副本定位——dist/validate.js ../schemas = 包根/schemas;src 直跑同样上溯一级命中 */
25
- const SCHEMA_URL = new URL("../schemas/plugin.schema.json", import.meta.url);
26
+ import Ajv2020 from "ajv/dist/2020.js"; // 2020-12(plugin.schema / icon-theme.schema)——ajv 无 exports 映射,Node ESM 需显式 .js
27
+ import Ajv from "ajv"; // 默认构造 = draft-07——theme.schema(E5.8#129)是 draft-07,draft 自动判定见 compileDataValidator
28
+ /**
29
+ * 包内 schema 副本定位——dist/validate.js → ../schemas = 包根/schemas;src 直跑同样上溯一级命中。
30
+ * 三份 author 面 schema(plugin/theme/icon-theme)包内副本字节同步由 scripts/check-plugin-schema-sync.mjs 守卫
31
+ * (E6#60:theme/icon-theme 收编——live public/schemas + 包内拷贝,作者 npm i @linkdesk/plugin-sdk 即达)。
32
+ */
33
+ const SCHEMAS_DIR = new URL("../schemas/", import.meta.url);
26
34
  /**
27
35
  * pluginId 形状约束——复制自壳 src/pluginLoader/manifest.ts:64(独立 npm 包不能 import @src 壳源码;
28
36
  * 加载契约 = 安装目录名 → validateInstallManifest 兜底,E6#7 钉死)。防路径穿越字符直通文件系统。
@@ -101,24 +109,45 @@ function offsetToLineCol(text, offset) {
101
109
  }
102
110
  return { line, col };
103
111
  }
104
- let cachedValidate = null;
105
- let cachedAjvErrors = [];
106
- /** ajv-2020 单例——schema 读一次 compile 一次(同一 schema 全进程复用) */
107
- function getValidator() {
108
- if (cachedValidate)
109
- return cachedValidate;
110
- const raw = readFileSync(fileURLToPath(SCHEMA_URL), "utf8");
111
- const schema = JSON.parse(raw);
112
+ /**
113
+ * ajv 编译 schema 单例——schema 读一次 compile 一次(同一 schema 全进程复用)。按 schema 文件内 $schema
114
+ * 自动选构造($schema 是权威,防手选 Ctor 与文件漂移):2020-12 ajv/dist/2020;draft-07 → ajv 默认。
115
+ */
116
+ const compiledCache = new Map();
117
+ function getSchemaValidator(schemaFileName) {
118
+ const cached = compiledCache.get(schemaFileName);
119
+ if (cached)
120
+ return cached;
121
+ const raw = readFileSync(fileURLToPath(new URL(schemaFileName, SCHEMAS_DIR)), "utf8");
122
+ const parsed = JSON.parse(raw);
123
+ const is2020 = typeof parsed.$schema === "string" && parsed.$schema.includes("2020-12");
124
+ // 同一构造器签名(allErrors/strict + compile)——类型面以 Ajv 为准,运行期仍是 Ajv2020 实例
125
+ const Ctor = (is2020 ? Ajv2020 : Ajv);
112
126
  // eslint-disable-next-line new-cap
113
- const ajv = new Ajv2020({ allErrors: true, strict: false });
114
- const validate = ajv.compile(schema);
115
- cachedValidate = (data) => {
116
- const ok = validate(data);
117
- // validate 再取 errors——validate.errors 是上次调用的状态,顺序反了会拿到旧/空 errors
118
- cachedAjvErrors = validate.errors ?? [];
119
- return ok;
127
+ const ajv = new Ctor({ allErrors: true, strict: false });
128
+ const validate = ajv.compile(parsed);
129
+ const entry = {
130
+ check(data) {
131
+ const ok = validate(data);
132
+ entry.errors = validate.errors ?? [];
133
+ return ok;
134
+ },
135
+ errors: [],
120
136
  };
121
- return cachedValidate;
137
+ compiledCache.set(schemaFileName, entry);
138
+ return entry;
139
+ }
140
+ /** plugin.json 校验器(plugin.schema.json,2020-12) */
141
+ function getPluginValidator() {
142
+ return getSchemaValidator("plugin.schema.json");
143
+ }
144
+ /** 主题数据文件校验器(theme.schema.json,draft-07)——E6#60 sdk 侧作者校验(对照 check-theme-schema.mjs 同规则) */
145
+ function getThemeValidator() {
146
+ return getSchemaValidator("theme.schema.json");
147
+ }
148
+ /** 图标主题 mappings 数据文件校验器(icon-theme.schema.json,2020-12)——E6#60(现无 icon-theme 校验器,一并立) */
149
+ function getIconThemeValidator() {
150
+ return getSchemaValidator("icon-theme.schema.json");
122
151
  }
123
152
  /** instancePath → 可读路径:/contributes/commands/0 → contributes.commands[0];空 = 顶部 */
124
153
  function prettyInstancePath(instancePath) {
@@ -166,10 +195,10 @@ export function validatePluginJson(path) {
166
195
  return { valid: false, errors: [`${err instanceof Error ? err.message : String(err)}`] };
167
196
  }
168
197
  // 1) JSON Schema(唯一真源)
169
- const validate = getValidator();
170
- const ok = validate(manifest);
198
+ const validator = getPluginValidator();
199
+ const ok = validator.check(manifest);
171
200
  if (!ok) {
172
- for (const e of cachedAjvErrors)
201
+ for (const e of validator.errors)
173
202
  errors.push(`${base}:${formatSchemaError(e)}`);
174
203
  return { valid: false, errors };
175
204
  }
@@ -187,4 +216,39 @@ export function validatePluginJson(path) {
187
216
  }
188
217
  return { valid: errors.length === 0, errors };
189
218
  }
219
+ /* ── 数据文件校验器(E6#60:主题/图标主题 authors 面,镜像 check-theme-schema.mjs 同规则) ── */
220
+ /**
221
+ * 数据文件严格 JSON 读取——主题/图标 mappings 数据文件**非 JSONC**(引擎 fetchPluginDataFile JSON.parse,
222
+ * repo check-theme-schema.mjs JSON.parse——两者一致;plugin.json 才走 jsonc,勿混)。
223
+ */
224
+ function readDataFileStrict(path) {
225
+ try {
226
+ return { data: JSON.parse(readFileSync(path, "utf8")) };
227
+ }
228
+ catch (err) {
229
+ return { error: `${basename(path)}: JSON 解析失败(${err instanceof Error ? err.message : String(err)})——数据文件非 JSONC,须严格 JSON` };
230
+ }
231
+ }
232
+ /**
233
+ * 校验主题/图标数据文件——schema 违规/JSON 错,格式同 validatePluginJson({ valid, errors },不抛)。
234
+ * schema 文件 = 唯一真源(与 repo check-theme-schema.mjs 同一份,字节同步由 check-plugin-schema-sync 守卫),
235
+ * 规则永不漂移;本函数跑在 schema 上,作者侧拦格式错 = repo 机械闸的第一道镜像。
236
+ */
237
+ function validateDataFile(path, validator) {
238
+ const read = readDataFileStrict(path);
239
+ if ("error" in read)
240
+ return { valid: false, errors: [read.error] };
241
+ if (!validator.check(read.data)) {
242
+ return { valid: false, errors: validator.errors.map((e) => `${basename(path)}:${formatSchemaError(e)}`) };
243
+ }
244
+ return { valid: true, errors: [] };
245
+ }
246
+ /** 校验主题数据 JSON 文件(对照 theme.schema.json draft-07——E5.8#129,引擎 parseThemeRecipe 消费格式) */
247
+ export function validateThemeJson(path) {
248
+ return validateDataFile(path, getThemeValidator());
249
+ }
250
+ /** 校验图标主题 mappings JSON 文件(对照 icon-theme.schema.json 2020-12——E5.8#133 / E6#60 实收格式,引擎 normalizeIconThemeMappings 消费) */
251
+ export function validateIconThemeJson(path) {
252
+ return validateDataFile(path, getIconThemeValidator());
253
+ }
190
254
  //# sourceMappingURL=validate.js.map
@@ -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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"}
@@ -1 +1 @@
1
- {"version":3,"file":"vite-config.d.ts","sourceRoot":"","sources":["../src/vite-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAIH,OAAO,EAAmC,KAAK,UAAU,EAAE,MAAM,MAAM,CAAC;AAWxE;;;6EAG6E;AAC7E,eAAO,MAAM,gBAAgB,UAA8F,CAAC;AAM5H,MAAM,WAAW,qBAAqB;IACpC,4FAA4F;IAC5F,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kCAAkC;IAClC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAuOD,wBAAgB,0BAA0B,CAAC,OAAO,GAAE,qBAA0B,GAAG,UAAU,CAkN1F"}
1
+ {"version":3,"file":"vite-config.d.ts","sourceRoot":"","sources":["../src/vite-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAIH,OAAO,EAAmC,KAAK,UAAU,EAAE,MAAM,MAAM,CAAC;AAWxE;;;6EAG6E;AAC7E,eAAO,MAAM,gBAAgB,UAA8F,CAAC;AAM5H,MAAM,WAAW,qBAAqB;IACpC,4FAA4F;IAC5F,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kCAAkC;IAClC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAuQD,wBAAgB,0BAA0B,CAAC,OAAO,GAAE,qBAA0B,GAAG,UAAU,CAwN1F"}
@@ -138,16 +138,43 @@ function zipTree(zip, dir, prefix) {
138
138
  zip.file(rel, readFileSync(full));
139
139
  }
140
140
  }
141
+ /** Node 标准向上 node_modules 链(E6#16)——workspaces 化后插件依赖可被 hoist 提升到仓库根 node_modules,
142
+ * 仍须能随包。逐级收集存在的 node_modules 目录(插件根本地 → 父级 → … → fs 根),最近层在数组前(先查 = 本地优先)。 */
143
+ function collectNodeModulesDirs(startDir) {
144
+ const out = [];
145
+ let dir = startDir;
146
+ for (;;) {
147
+ const nm = join(dir, "node_modules");
148
+ if (existsSync(nm))
149
+ out.push(nm);
150
+ const parent = dirname(dir);
151
+ if (parent === dir)
152
+ break;
153
+ dir = parent;
154
+ }
155
+ return out;
156
+ }
157
+ /** 向上找 `<ancestor>/node_modules/<pkgRel>` 首个命中(Node 模块解析语义——本地命中优先于 hoist/父级)。找不到 → null */
158
+ function findNodeModules(startDir, pkgRel) {
159
+ let dir = startDir;
160
+ for (;;) {
161
+ const candidate = join(dir, "node_modules", ...pkgRel);
162
+ if (existsSync(candidate))
163
+ return candidate;
164
+ const parent = dirname(dir);
165
+ if (parent === dir)
166
+ return null;
167
+ dir = parent;
168
+ }
169
+ }
141
170
  /** E6#15m:node_modules 各包 package.json `bin` 声明反查表——name(.bin shim 名)→ 归属包 + 真入口相对路径。
142
171
  * 扫插件根 node_modules 顶层包 + @scope 子包;`bin` 为 string(bin 名 = 包名末段)或 object(键即 bin 名)。
143
172
  * 真入口须在包内(resolve 后仍处 node_modules 下)且物理存在——npm 单根安装禁止同名 bin 冲突,重复取首。
144
173
  * 惰性构建(首个 .bin arg 才扫;pyright 等直路 node_modules/<pkg> 零扫描成本)。 */
145
174
  function buildBinIndex(root) {
146
175
  const bins = new Map();
147
- const nmDir = join(root, "node_modules");
148
- if (!existsSync(nmDir))
149
- return bins;
150
- const record = (pkgRel, binName, rel) => {
176
+ const nmDirs = collectNodeModulesDirs(root); // 本地 → 父级 → …(E6#16 hoist 兼容)
177
+ const record = (nmDir) => (pkgRel, binName, rel) => {
151
178
  if (!rel || rel.startsWith("..") || rel.startsWith("/") || /^[a-zA-Z]:[\\/]/.test(rel))
152
179
  return; // 逸出/绝对 → 忽略
153
180
  const targetAbs = resolve(nmDir, pkgRel, rel);
@@ -156,9 +183,9 @@ function buildBinIndex(root) {
156
183
  if (!existsSync(targetAbs))
157
184
  return;
158
185
  if (!bins.has(binName))
159
- bins.set(binName, { pkg: pkgRel, rel: rel.replace(/\\/g, "/") });
186
+ bins.set(binName, { pkg: pkgRel, rel: rel.replace(/\\/g, "/") }); // 最近层优先
160
187
  };
161
- const readBin = (pkgJsonPath, pkgRel) => {
188
+ const readBin = (nmDir) => (pkgJsonPath, pkgRel) => {
162
189
  let pkg;
163
190
  try {
164
191
  pkg = JSON.parse(readFileSync(pkgJsonPath, "utf-8"));
@@ -168,25 +195,27 @@ function buildBinIndex(root) {
168
195
  }
169
196
  const bin = pkg?.bin;
170
197
  if (typeof bin === "string") {
171
- record(pkgRel, pkgRel.split("/").pop() ?? "", bin); // string bin:bin 名 = 包名末段(@scope/pkg → pkg)
198
+ record(nmDir)(pkgRel, pkgRel.split("/").pop() ?? "", bin); // string bin:bin 名 = 包名末段(@scope/pkg → pkg)
172
199
  }
173
200
  else if (bin && typeof bin === "object") {
174
201
  for (const [name, rel] of Object.entries(bin)) {
175
202
  if (typeof rel === "string")
176
- record(pkgRel, name, rel);
203
+ record(nmDir)(pkgRel, name, rel);
177
204
  }
178
205
  }
179
206
  };
180
- for (const top of readdirSync(nmDir)) {
181
- if (top.startsWith("."))
182
- continue;
183
- if (top.startsWith("@")) {
184
- for (const sub of readdirSync(join(nmDir, top))) {
185
- readBin(join(nmDir, top, sub, "package.json"), `${top}/${sub}`);
207
+ for (const nmDir of nmDirs) {
208
+ for (const top of readdirSync(nmDir)) {
209
+ if (top.startsWith("."))
210
+ continue;
211
+ if (top.startsWith("@")) {
212
+ for (const sub of readdirSync(join(nmDir, top))) {
213
+ readBin(nmDir)(join(nmDir, top, sub, "package.json"), `${top}/${sub}`);
214
+ }
215
+ }
216
+ else {
217
+ readBin(nmDir)(join(nmDir, top, "package.json"), top);
186
218
  }
187
- }
188
- else {
189
- readBin(join(nmDir, top, "package.json"), top);
190
219
  }
191
220
  }
192
221
  return bins;
@@ -250,9 +279,9 @@ function includeLspRuntimePackages(root, pkgDir, manifest, warn) {
250
279
  }
251
280
  for (const name of wanted) {
252
281
  const segs = name.split("/");
253
- const src = join(root, "node_modules", ...segs);
254
- if (!existsSync(src)) {
255
- warn(`[linkdesk-plugin-packager] lsp.args 引用依赖 "${name}" 不在插件根 node_modules——未随包(插件根须先 npm install)`);
282
+ const src = findNodeModules(root, segs); // 本地 node_modules 优先,向上 Node 解析兜底(hoist/monorepo 布局,E6#16)
283
+ if (!src) {
284
+ warn(`[linkdesk-plugin-packager] lsp.args 引用依赖 "${name}" 不在插件根 node_modules(含向上解析)——未随包(插件工程须先 npm install)`);
256
285
  continue;
257
286
  }
258
287
  const dest = join(pkgDir, "node_modules", ...segs);
@@ -435,6 +464,10 @@ export function defineLinkdeskPluginConfig(options = {}) {
435
464
  const failedKeys = results.filter((r) => !r.ok).map((r) => r.key);
436
465
  const warnSuffix = failedKeys.length > 0 ? `(⚠ 失败表面: ${failedKeys.join(", ")})` : "";
437
466
  console.log(`[linkdesk-plugin-sdk] ✔ ${pkgName}(${kb} KB, ${ok.length}/${surfaces.length} 表面)→ ${relative(process.cwd(), zipPath)}${warnSuffix}`);
467
+ if (failedKeys.length === 0) {
468
+ // E6#25a:全表面干净才宣称可发布(部分表面失败 = warnSuffix 已示警,不发 banner)
469
+ console.log(`[linkdesk-plugin-sdk] 🚀 Ready to publish! ${pkgName}——分发文件已就绪:装进 LinkDesk(插件详情 → 从本地 .linkdesk-plugin 安装)即可分发使用`);
470
+ }
438
471
  rmSync(join(outDir, ".s"), { recursive: true, force: true });
439
472
  }
440
473
  catch (e) {
@@ -1 +1 @@
1
- {"version":3,"file":"vite-config.js","sourceRoot":"","sources":["../src/vite-config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vite-config.js","sourceRoot":"","sources":["../src/vite-config.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@linkdesk/plugin-sdk",
3
- "version": "0.1.1",
4
- "description": "@linkdesk/plugin-sdk——LinkDesk 插件作者 SDK(对标 @types/vscode):window.linkdesk.* 类型 + 一键 build(.linkdesk-plugin) + plugin.json 验证 + eslint 门禁(E6#54d)。作者 npm i 后零壳源码依赖。",
3
+ "version": "0.1.3",
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",
7
7
  "types": "./dist/index.d.ts",
@@ -18,7 +18,8 @@
18
18
  },
19
19
  "files": [
20
20
  "dist",
21
- "schemas"
21
+ "schemas",
22
+ "dev-host"
22
23
  ],
23
24
  "sideEffects": false,
24
25
  "bin": {
@@ -45,8 +46,12 @@
45
46
  "eslint-import-resolver-typescript": "^4.4.5",
46
47
  "eslint-plugin-import-x": "^4.17.1",
47
48
  "eslint-plugin-react-hooks": "^7.1.1",
49
+ "i18next": "^26.3.6",
48
50
  "jsonc-parser": "^3.3.1",
49
51
  "jszip": "^3.10.1",
52
+ "react": "^18.3.1",
53
+ "react-dom": "^18.3.1",
54
+ "react-i18next": "^17.0.10",
50
55
  "vite": "^6.0.0"
51
56
  },
52
57
  "devDependencies": {
@@ -0,0 +1,97 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://linkdesk.local/schemas/icon-theme.schema.json",
4
+ "title": "LinkDesk 图标主题 mappings 数据契约",
5
+ "description": "contributes.iconThemes 指向的 mappings JSON 文件契约——镜像引擎 normalizeIconThemeMappings(src/pluginLoader/contributions/contributions.ts,E5.8#133 定案)。匹配表四段(files/extensions/folders/foldersExpanded)+ 顶层默认图标五键(file/folder/folderExpanded/rootFolder/rootFolderExpanded);条目双形态二选一:字体 glyph(class + 可选 color)或图像资产(imagePath,相对插件根)。可选顶层 font 段声明自定义图标字体。校验:npm 侧 @linkdesk/plugin-sdk validateIconThemeJson;repo 侧 check-theme-schema.mjs(contributes.iconThemes 全扫)。",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "properties": {
9
+ "$schema": {
10
+ "type": "string",
11
+ "description": "编辑器 IntelliSense 引用(可选)——npm 作者引 node_modules/@linkdesk/plugin-sdk/schemas/icon-theme.schema.json"
12
+ },
13
+ "files": {
14
+ "$ref": "#/$defs/mappingTable",
15
+ "description": "文件名 → 图标条目(命中优先级最高,未命中走 extensions)"
16
+ },
17
+ "extensions": {
18
+ "$ref": "#/$defs/mappingTable",
19
+ "description": "扩展名(含点,如 \".ts\"/\".jsx\")→ 图标条目"
20
+ },
21
+ "folders": {
22
+ "$ref": "#/$defs/mappingTable",
23
+ "description": "目录名 → 图标条目(折叠态)"
24
+ },
25
+ "foldersExpanded": {
26
+ "$ref": "#/$defs/mappingTable",
27
+ "description": "目录名 → 图标条目(展开态;缺省复用 folders)"
28
+ },
29
+ "file": {
30
+ "$ref": "#/$defs/iconMapping",
31
+ "description": "默认文件图标——未命中 files/extensions 时使用(缺省 = 壳保底图标)"
32
+ },
33
+ "folder": {
34
+ "$ref": "#/$defs/iconMapping",
35
+ "description": "默认文件夹图标——未命中 folders 时使用(缺省 = 壳保底)"
36
+ },
37
+ "folderExpanded": {
38
+ "$ref": "#/$defs/iconMapping",
39
+ "description": "默认文件夹展开图标——未命中 foldersExpanded 时使用(缺省 = 壳保底)"
40
+ },
41
+ "rootFolder": {
42
+ "$ref": "#/$defs/iconMapping",
43
+ "description": "根文件夹图标(缺省 = 壳保底)"
44
+ },
45
+ "rootFolderExpanded": {
46
+ "$ref": "#/$defs/iconMapping",
47
+ "description": "根文件夹展开图标(缺省 = 壳保底)"
48
+ },
49
+ "font": {
50
+ "$ref": "#/$defs/fontSpec",
51
+ "description": "自定义图标字体(可选)——声明后壳生成 @font-face,glyph 类由作者提供"
52
+ }
53
+ },
54
+ "$defs": {
55
+ "mappingTable": {
56
+ "type": "object",
57
+ "description": "匹配表——名字(文件名/扩展名/目录名)→ 图标条目",
58
+ "additionalProperties": { "$ref": "#/$defs/iconMapping" }
59
+ },
60
+ "iconMapping": {
61
+ "title": "图标条目——双形态二选一",
62
+ "type": "object",
63
+ "anyOf": [
64
+ {
65
+ "title": "字体 glyph 形态",
66
+ "description": "CSS 类名——codicon 保底 / 自定义图标字体(class 缺省 = 图标字体家族自带类)",
67
+ "required": ["class"],
68
+ "properties": {
69
+ "class": { "type": "string", "description": "CSS 类名(如 \"codicon codicon-typescript\" 或 \"myfont myfont-rust\")" },
70
+ "color": { "type": "string", "description": "可选每图标颜色(seti 类彩色字体;普通单色字体不写)" }
71
+ },
72
+ "additionalProperties": false
73
+ },
74
+ {
75
+ "title": "图像资产形态",
76
+ "description": "图像资产——任意多色/拟物化/贴图",
77
+ "required": ["imagePath"],
78
+ "properties": {
79
+ "imagePath": { "type": "string", "description": "图像资产相对插件根的路径(如 \"icons/js.svg\")——渲染时壳用 getPluginAssetPath 解析 linkdesk:// 绝对 URL(硬约束 12 同族),禁止写 /assets/... 绝对路径" }
80
+ },
81
+ "additionalProperties": false
82
+ }
83
+ ]
84
+ },
85
+ "fontSpec": {
86
+ "type": "object",
87
+ "description": "自定义图标字体元数据——path 相对插件根或绝对 URL;@font-face 由壳生成(池独立文档复刻),glyph 类 CSS 作者自写",
88
+ "required": ["path", "family"],
89
+ "additionalProperties": false,
90
+ "properties": {
91
+ "path": { "type": "string", "description": "字体文件相对插件根路径(或 linkdesk:// / http(s):// / data: 绝对 URL)" },
92
+ "family": { "type": "string", "description": "作者 glyph CSS 里 font-family 写的族名" },
93
+ "glyphs": { "type": "string", "description": "glyph 类 CSS 文件相对插件根路径(可选;缺省 = 仅 @font-face,无自定义 glyph 类)" }
94
+ }
95
+ }
96
+ }
97
+ }
@@ -17,12 +17,12 @@
17
17
  },
18
18
  "core": {
19
19
  "type": "boolean",
20
- "description": "核心控制面插件——不可卸载,卸载按钮在 UI 中不显示或禁用。外壳依赖此插件提供基础交互能力(如设置页、插件市场)。无此声明 = 普通插件,用户可自由装卸。默认 false。",
20
+ "description": " UI 防误删旗标——声明此插件重要,卸载入口在插件详情 UI 不显示(藏钮,新手误删不了)。无任何行为特权:禁用/卸载经 API/命令层照常生效(卸后写 removed 墓碑,boot 不复活)。设置页/市场等基础能力靠的是 factoryRole 槽位(可替换),与 core 声明无关。无此声明 = 普通插件,UI 可自由装卸。默认 false。",
21
21
  "default": false
22
22
  },
23
23
  "factoryRole": {
24
24
  "type": "string",
25
- "description": "系统插槽角色——声明此插件填充哪个系统级功能。settings=设置页(Ctrl+, 打开),marketplace=插件市场。多个插件声明同一 role 第一个 core: true 的胜出。"
25
+ "description": "系统插槽角色——声明此插件填充哪个系统级功能。settings=设置页(Ctrl+, 打开),marketplace=插件市场。同一 role 多插件合法并存(全收进槽位候选,一对多);默认 = 首注册稳定序(core:true 无行为特权,不抢默认),用户切换的活动套持久化保持。"
26
26
  },
27
27
  "pluginRole": {
28
28
  "type": "string",
@@ -35,7 +35,7 @@
35
35
  "iconBar": { "type": "string", "enum": ["top", "bottom"], "description": "图标栏位置,不填=不显示图标" },
36
36
  "sidePanel": { "type": "boolean", "description": "有侧栏视图容器,默认 false" },
37
37
  "tabBar": { "type": "boolean", "description": "可作为标签页打开,默认 false" },
38
- "statusBar": { "type": "boolean", "description": "有状态栏条目,默认 false" }
38
+ "statusBar": { "type": "boolean", "description": "有自绘(代码)状态栏组件——池侧渲染,取代 statusBar 静态贡献项;仅贡献静态条目则不必填,默认 false" }
39
39
  }
40
40
  },
41
41
  "distribution": {
@@ -0,0 +1,109 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://linkdesk.local/schemas/theme.schema.json",
4
+ "title": "LinkDesk 主题定义(ThemeRecipe,05 schema)",
5
+ "description": "contributes.themes 指向的主题 JSON 文件契约(E5.8#129 立——对标 plugin.schema.json,格式错当场拦)。镜像 src/core/types/theme.ts ThemeRecipe;解析语义见 parseThemeRecipe。新格式必备 colorways[](决策 F:引擎只读新格式);appearance 各域稀疏,缺的域继承 :root 壳默认。校验脚本 scripts/check-theme-schema.mjs(npm run check 链)。",
6
+ "type": "object",
7
+ "required": ["id", "name", "type", "colorways"],
8
+ "additionalProperties": false,
9
+ "properties": {
10
+ "$schema": {
11
+ "type": "string",
12
+ "description": "编辑器 IntelliSense 引用(可选)——相对路径 ../../../public/schemas/theme.schema.json"
13
+ },
14
+ "id": {
15
+ "type": "string",
16
+ "description": "主题 id——全局唯一(app.theme 存此;惯例 = 插件短名)"
17
+ },
18
+ "name": {
19
+ "type": "string",
20
+ "description": "主题显示名——主题选择器/浏览器标题"
21
+ },
22
+ "type": {
23
+ "type": "string",
24
+ "enum": ["light", "dark"],
25
+ "description": "基础明暗——dark 基底 :root / light 覆盖层 data-theme"
26
+ },
27
+ "appearance": {
28
+ "type": "object",
29
+ "description": "风格域(单值稀疏)——缺的域继承 :root 壳默认",
30
+ "additionalProperties": false,
31
+ "properties": {
32
+ "radius": {
33
+ "type": "object",
34
+ "description": "圆角八档(键 = 档位名,值 = px;999 = 全胶囊 pill)",
35
+ "additionalProperties": false,
36
+ "properties": {
37
+ "xs": { "type": "number" },
38
+ "sm": { "type": "number" },
39
+ "md": { "type": "number" },
40
+ "lg": { "type": "number" },
41
+ "xl": { "type": "number" },
42
+ "2xl": { "type": "number" },
43
+ "pill": { "type": "number" },
44
+ "full": { "type": "number" }
45
+ }
46
+ },
47
+ "glass": {
48
+ "type": "object",
49
+ "description": "玻璃 + 悬浮面板材质(ThemeSurface)——缺省 = 无玻璃无悬浮",
50
+ "additionalProperties": false,
51
+ "properties": {
52
+ "type": { "type": "string", "enum": ["glass"], "description": "玻璃配方——缺省 = 无玻璃" },
53
+ "blur": { "type": "number", "description": "backdrop blur px——0 = 关" },
54
+ "saturate": { "type": "number", "description": "饱和度增强——1 = 关" },
55
+ "tint": { "type": "string", "description": "玻璃面叠加色" },
56
+ "opacity": { "type": "number", "description": "玻璃面不透明度(合成层基线)——1 = 不透明 / 0 = 全透见背景" },
57
+ "specular": { "type": "number", "description": "液态玻璃顶部高光强度——0 = 关" },
58
+ "specularColor": { "type": "string", "description": "顶部高光基色——缺省 = 白;alpha 仍走 specular" },
59
+ "morph": { "type": "number", "description": "形变过渡 ms——0 = 关" },
60
+ "radius": { "type": "number", "description": "悬浮圆角 px——0 = 直角贴边" },
61
+ "shadow": { "type": "boolean", "description": "投影浮起——true = 悬浮投影(映射 --shadow-lift)" },
62
+ "texture": { "type": "string", "description": "可平铺纹理图资产路径(⑬ 纸纹分区)" },
63
+ "textureOpacity": { "type": "number", "description": "纹理不透明度——1 = 不透明" }
64
+ }
65
+ },
66
+ "font": {
67
+ "type": "object",
68
+ "description": "字体域——系统字体族名字符串 or 资产相对路径(#50.17:资产 → @font-face → 族名)",
69
+ "additionalProperties": false,
70
+ "properties": {
71
+ "ui": { "type": "string", "description": "UI 字体(--font-ui)" },
72
+ "mono": { "type": "string", "description": "等宽字体(--font-mono)" }
73
+ }
74
+ },
75
+ "background": {
76
+ "type": "object",
77
+ "description": "图片背景域(panorama 全窗 / zones 切片)",
78
+ "additionalProperties": false,
79
+ "properties": {
80
+ "image": { "type": "string", "description": "图片路径——作者提供可解析 URL,引擎写 --bg-image 时 url() 包裹" },
81
+ "opacity": { "type": "number", "description": "图片层不透明度——1 = 不透明" },
82
+ "mask": { "type": "number", "description": "图片遮罩明暗(0-1)——0 = 无遮罩" },
83
+ "maskColor": { "type": "string", "description": "遮罩基色——缺省 = 黑;alpha 仍走 mask" },
84
+ "mode": { "type": "string", "enum": ["panorama", "zones"], "description": "切片模式——panorama(默认)/ zones(同图连续切片)" }
85
+ }
86
+ }
87
+ }
88
+ },
89
+ "colorways": {
90
+ "type": "array",
91
+ "description": "配色变体列表(颜色域多值,至少 1 项)",
92
+ "minItems": 1,
93
+ "items": {
94
+ "type": "object",
95
+ "required": ["id", "name"],
96
+ "additionalProperties": false,
97
+ "properties": {
98
+ "id": { "type": "string", "description": "配色变体 id——全局唯一(app.themeColor 动态 enum 存此)" },
99
+ "name": { "type": "string", "description": "配色显示名" },
100
+ "colors": {
101
+ "type": "object",
102
+ "description": "颜色 token 集(键 = 变量契约 token 名去 -- 前缀;值 = 颜色字符串)",
103
+ "additionalProperties": { "type": "string" }
104
+ }
105
+ }
106
+ }
107
+ }
108
+ }
109
+ }