@linkdesk/plugin-sdk 0.1.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/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 }` 渲染它:
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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@linkdesk/plugin-sdk",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
4
4
  "description": "@linkdesk/plugin-sdk——LinkDesk 插件作者 SDK(对标 @types/vscode):window.linkdesk.* 类型 + 一键 build(.linkdesk-plugin) + plugin.json 验证 + eslint 门禁(E6#54d)。作者 npm i 后零壳源码依赖。",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -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
+ }
@@ -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
+ }