@linkdesk/plugin-sdk 0.1.3 → 0.1.7

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.
@@ -0,0 +1,208 @@
1
+ /**
2
+ * publish 纯函数测试(E6#91e,L3.7 第 3.7.2 轮)——**CHANGELOG 切段的 B1–B10 十条边界**。
3
+ *
4
+ * 为什么值得单列一个文件:这段切段逻辑是「未装插件『更改日志』页签」的**唯一写入方**,切错了
5
+ * 是**发错信息**(把上一版的说明挂到新版本上)——比不显示更坏。故每条边界都钉一个用例。
6
+ *
7
+ * **对照基线**:文件下半 `describe("旧行为对照")` 里的 `naiveSlice` 是**朴素第一版写法**(测试专用,
8
+ * 非生产代码)。它存在的唯一理由是满足 memory `snapshot-shadows-truth-bug-class` 的硬要求——
9
+ * **回归测试必须证明「在旧行为上会红」**。光断言「新实现对」证明不了边界有被守住;断言「朴素写法在这条
10
+ * 用例上给出错误结果」才是。哪些用例两种写法一致、哪些分道扬镳,逐条写明。
11
+ */
12
+ import { describe, it, expect } from "vitest";
13
+ import { buildCatalogEntry, readmeRawUrl, sliceChangelogSection, } from "./publish.js";
14
+ /* ── 样本 ─────────────────────────────────────────────────────────────── */
15
+ const SAMPLE = [
16
+ "# 更新日志",
17
+ "",
18
+ "## v1.2.0(2026-09-11)",
19
+ "- 修了某某问题",
20
+ "- 加了某个能力",
21
+ "",
22
+ "## v1.1.0(2026-08-01)",
23
+ "- 旧的一条",
24
+ "",
25
+ "## v1.0.0(2026-07-01)",
26
+ "- 最早的一条",
27
+ "",
28
+ ].join("\n");
29
+ const view = (version) => ({ id: "demo-plugin", name: "Demo", version });
30
+ /* ── B1–B10 十条边界 ─────────────────────────────────────────────────── */
31
+ describe("sliceChangelogSection——B1–B10 边界", () => {
32
+ it("正常路径:切出目标版本正文,到下一个段标题为止", () => {
33
+ expect(sliceChangelogSection(SAMPLE, "1.2.0")).toBe("- 修了某某问题\n- 加了某个能力");
34
+ expect(sliceChangelogSection(SAMPLE, "1.0.0")).toBe("- 最早的一条");
35
+ });
36
+ it("B1 字段缺省:无 changelog 时不写该键(不是填空串)", () => {
37
+ // 「文件不存在」是 IO 层的事(collectPreview),纯函数层可断言的是**缺省即不写键**这条契约:
38
+ // 渲染层对「字段缺省」与「空串」走同一兜底,但缺省更诚实。
39
+ const entry = buildCatalogEntry(view("1.2.0"), "https://example.invalid/a.zip", 1, "owner", "2026-09-11T00:00:00Z", {});
40
+ expect("changelog" in entry.versions[0]).toBe(false);
41
+ expect("readmeUrl" in entry).toBe(false);
42
+ // 有值时两个键都在,且 changelog 落在 versions[0] 上(历史由 upsertCatalogEntry 拼)
43
+ const filled = buildCatalogEntry(view("1.2.0"), "https://example.invalid/a.zip", 1, "owner", "2026-09-11T00:00:00Z", {
44
+ readmeUrl: "https://example.invalid/README.md",
45
+ changelog: "- 一条",
46
+ });
47
+ expect(filled.readmeUrl).toBe("https://example.invalid/README.md");
48
+ expect(filled.versions[0].changelog).toBe("- 一条");
49
+ });
50
+ it("B2 版本切不到 → undefined(绝不回落到「取第一段」)", () => {
51
+ // 回落 = 把上一版的说明挂到新版本上,是发错信息——同 marketCatalog/select.ts「不发错包」的纪律
52
+ expect(sliceChangelogSection(SAMPLE, "9.9.9")).toBeUndefined();
53
+ });
54
+ it("B2b 版本号严格相等:1.0 不吃 1.0.0(不做 semver 松弛匹配)", () => {
55
+ expect(sliceChangelogSection(SAMPLE, "1.0")).toBeUndefined();
56
+ expect(sliceChangelogSection(SAMPLE, "1.2")).toBeUndefined();
57
+ });
58
+ it("B3 段标题下直接跟下一个标题(空正文)→ undefined", () => {
59
+ const text = "## v1.0.0\n\n## v0.9.0\n- 旧\n";
60
+ expect(sliceChangelogSection(text, "1.0.0")).toBeUndefined();
61
+ });
62
+ it("B4 围栏代码块内的假标题必须跳过(贴示例日志是常态)", () => {
63
+ const text = [
64
+ "# 更新日志",
65
+ "",
66
+ "## v1.2.0(2026-09-11)",
67
+ "示例(别当真):",
68
+ "",
69
+ "```markdown",
70
+ "## v1.1.0",
71
+ "- 这是代码块里的假段标题",
72
+ "```",
73
+ "",
74
+ "真·收尾一行",
75
+ "",
76
+ "## v1.1.0(2026-08-01)",
77
+ "- 真的旧版说明",
78
+ "",
79
+ ].join("\n");
80
+ // 真段标题之后的正文 = 示例块 + 收尾行,**一直到下一个真段标题**——假标题不得截断它
81
+ const got = sliceChangelogSection(text, "1.2.0");
82
+ expect(got).toContain("真·收尾一行");
83
+ expect(got).toContain("- 这是代码块里的假段标题");
84
+ expect(got).not.toContain("- 真的旧版说明");
85
+ // 而 v1.1.0 仍能正确切出真段
86
+ expect(sliceChangelogSection(text, "1.1.0")).toBe("- 真的旧版说明");
87
+ });
88
+ it("B5 CRLF 正文不带 \\r(正文内部也不带,不只是两端)", () => {
89
+ const text = "# 更新日志\r\n\r\n## v1.0.0\r\n- 第一行\r\n- 第二行\r\n\r\n## v0.9.0\r\n- 旧\r\n";
90
+ const got = sliceChangelogSection(text, "1.0.0");
91
+ expect(got).toBe("- 第一行\n- 第二行");
92
+ expect(got).not.toContain("\r");
93
+ });
94
+ it("B6 BOM 剥离——首行就是段标题时也能切到", () => {
95
+ const text = "## v1.0.0\n- 有 BOM 的一段\n";
96
+ expect(sliceChangelogSection(text, "1.0.0")).toBe("- 有 BOM 的一段");
97
+ });
98
+ it("B7 prerelease 后缀整段捕获——不与同文件里的正式版段撞号", () => {
99
+ const text = ["## v1.0.0", "- 正式版", "", "## v1.0.0-beta.1", "- 预发布版", ""].join("\n");
100
+ expect(sliceChangelogSection(text, "1.0.0-beta.1")).toBe("- 预发布版");
101
+ expect(sliceChangelogSection(text, "1.0.0")).toBe("- 正式版");
102
+ });
103
+ it("B8 一级标题 `# 更新日志` 不当段标题(那是文档标题,不是版本号)", () => {
104
+ const text = "# v1.0.0\n- 这不是版本段\n";
105
+ expect(sliceChangelogSection(text, "1.0.0")).toBeUndefined();
106
+ });
107
+ it("B9 标题后无括号日期也正常通过(日期本就可选)", () => {
108
+ expect(sliceChangelogSection("## v1.0.0 后续补记\n- 一条\n", "1.0.0")).toBe("- 一条");
109
+ });
110
+ it("B10 Keep a Changelog 风格 `## [1.0.0] - 日期` 也认(解析器适配作者,不是反过来)", () => {
111
+ const text = ["# Changelog", "", "## [1.2.0] - 2026-09-11", "- 新版", "", "## [1.1.0] - 2026-08-01", "- 旧版", ""].join("\n");
112
+ expect(sliceChangelogSection(text, "1.2.0")).toBe("- 新版");
113
+ expect(sliceChangelogSection(text, "1.1.0")).toBe("- 旧版");
114
+ });
115
+ it("B10b 两种主流写法混排互不干扰", () => {
116
+ const text = ["## [1.2.0] - 2026-09-11", "- 方括号风", "", "## v1.1.0(2026-08-01)", "- 全角括号风", "", "## 1.0.0", "- 裸版本号", ""].join("\n");
117
+ expect(sliceChangelogSection(text, "1.2.0")).toBe("- 方括号风");
118
+ expect(sliceChangelogSection(text, "1.1.0")).toBe("- 全角括号风");
119
+ expect(sliceChangelogSection(text, "1.0.0")).toBe("- 裸版本号");
120
+ });
121
+ it("B11 同版本出现多次 → 取第一个(「最新在最上」是格式约定)", () => {
122
+ const text = ["## v1.0.0", "- 第一次出现(最新)", "", "## v1.0.0", "- 第二次出现(旧)", ""].join("\n");
123
+ expect(sliceChangelogSection(text, "1.0.0")).toBe("- 第一次出现(最新)");
124
+ });
125
+ it("两侧前导 v 等价:段标题带 v、传参不带(或反之)都认", () => {
126
+ expect(sliceChangelogSection("## v1.0.0\n- 一条\n", "v1.0.0")).toBe("- 一条");
127
+ expect(sliceChangelogSection("## 1.0.0\n- 一条\n", "1.0.0")).toBe("- 一条");
128
+ });
129
+ it("`###` / `####` 容忍,`#####` 不算段标题", () => {
130
+ expect(sliceChangelogSection("### v1.0.0\n- 三级\n", "1.0.0")).toBe("- 三级");
131
+ expect(sliceChangelogSection("#### v1.0.0\n- 四级\n", "1.0.0")).toBe("- 四级");
132
+ expect(sliceChangelogSection("##### v1.0.0\n- 五级不该认\n", "1.0.0")).toBeUndefined();
133
+ });
134
+ });
135
+ /* ── readmeUrl 形态 ──────────────────────────────────────────────────── */
136
+ describe("readmeRawUrl", () => {
137
+ it("固定形态 = raw.githubusercontent.com/{owner}/{repo}/{tag}/README.md", () => {
138
+ expect(readmeRawUrl({ owner: "demo-owner", repo: "demo-repo" }, "v1.2.0")).toBe("https://raw.githubusercontent.com/demo-owner/demo-repo/v1.2.0/README.md");
139
+ });
140
+ it("用 tag 不用 default_branch——未装看到的与装上后看到的同源", () => {
141
+ expect(readmeRawUrl({ owner: "o", repo: "r" }, "v1.0.0")).not.toContain("/main/");
142
+ });
143
+ });
144
+ /* ── 旧行为对照(证明上面这些边界在朴素写法上会红)──────────────────── */
145
+ /**
146
+ * 朴素第一版写法——**测试专用,非生产代码**。特征:按 `##` 行找段标题、正则**只捕三段版本号**、
147
+ * 不剥 BOM、不跳围栏、`split("\n")` 不兼容 CRLF。这是真正会有人写出来的第一版,不是稻草人。
148
+ */
149
+ function naiveSlice(text, version) {
150
+ const lines = text.split("\n");
151
+ // 🔴 关键缺陷就在这条正则:只捕 `\d+.\d+.\d+` 三段——预发布号与方括号风格都漏
152
+ const heading = /^##\s+v?(\d+\.\d+\.\d+)/;
153
+ const target = version.replace(/^v/, "");
154
+ let start = -1;
155
+ let end = lines.length;
156
+ for (let i = 0; i < lines.length; i++) {
157
+ const m = heading.exec(lines[i] ?? "");
158
+ if (!m)
159
+ continue;
160
+ if (start < 0) {
161
+ if (m[1] === target)
162
+ start = i + 1;
163
+ }
164
+ else {
165
+ end = i;
166
+ break;
167
+ }
168
+ }
169
+ if (start < 0)
170
+ return undefined;
171
+ return lines.slice(start, end).join("\n").trim() || undefined;
172
+ }
173
+ describe("旧行为对照——朴素写法在这几条上会红", () => {
174
+ it("B4 围栏:朴素写法把代码块里的假标题当真段标题,正文被提前截断", () => {
175
+ const text = ["## v1.2.0", "正文甲", "```", "## v1.1.0", "```", "正文乙", "", "## v1.1.0", "- 真旧版", ""].join("\n");
176
+ expect(sliceChangelogSection(text, "1.2.0")).toBe("正文甲\n```\n## v1.1.0\n```\n正文乙");
177
+ // 朴素:在块内的假标题处就 break → 正文腰斩(实测值 = 正文甲 + 围栏起止行;「正文乙」整段丢失)
178
+ expect(naiveSlice(text, "1.2.0")).toBe("正文甲\n```");
179
+ });
180
+ it("B5 CRLF:朴素写法在正文内部留下 \\r", () => {
181
+ const text = "## v1.0.0\r\n- 第一行\r\n- 第二行\r\n";
182
+ expect(sliceChangelogSection(text, "1.0.0")).toBe("- 第一行\n- 第二行");
183
+ expect(naiveSlice(text, "1.0.0")).toContain("\r");
184
+ });
185
+ it("B6 BOM:朴素写法匹配不到首行段标题 → 整段丢失", () => {
186
+ const text = "## v1.0.0\n- 有 BOM 的一段\n";
187
+ expect(sliceChangelogSection(text, "1.0.0")).toBe("- 有 BOM 的一段");
188
+ expect(naiveSlice(text, "1.0.0")).toBeUndefined();
189
+ });
190
+ it("B7 预发布:朴素写法只捕三段 → 预发布版整段切不到(两条段撞成同一个版本号)", () => {
191
+ const text = ["## v1.0.0", "- 正式版", "", "## v1.0.0-beta.1", "- 预发布版", ""].join("\n");
192
+ expect(sliceChangelogSection(text, "1.0.0-beta.1")).toBe("- 预发布版");
193
+ // 朴素:两段都被捕成 "1.0.0",预发布版这一版**永远切不到**(真机症状 = 该版显示「此版本未提供变更说明」)
194
+ expect(naiveSlice(text, "1.0.0-beta.1")).toBeUndefined();
195
+ });
196
+ it("B10 Keep a Changelog:朴素写法认不得方括号 → 整段丢失", () => {
197
+ const text = "## [1.0.0] - 2026-09-11\n- 方括号风\n";
198
+ expect(sliceChangelogSection(text, "1.0.0")).toBe("- 方括号风");
199
+ expect(naiveSlice(text, "1.0.0")).toBeUndefined();
200
+ });
201
+ it("诚实记账:这几条朴素写法与生产写法**一致**(不假装它们也是边界)", () => {
202
+ // B1/B3/B8/B9 以及「切不到→undefined」在朴素写法上本来就对——写出来免得读者以为十条都靠新写法救
203
+ expect(naiveSlice(SAMPLE, "9.9.9")).toBeUndefined(); // B2:两边都 undefined
204
+ expect(naiveSlice(SAMPLE, "1.0.0")).toBe("- 最早的一条"); // 常规路径:两边都对
205
+ expect(naiveSlice("## v1.0.0\n\n## v0.9.0\n- 旧\n", "1.0.0")).toBeUndefined(); // B3:两边都 undefined
206
+ });
207
+ });
208
+ //# sourceMappingURL=publish.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish.test.js","sourceRoot":"","sources":["../src/publish.test.ts"],"names":[],"mappings":"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"}
@@ -11,6 +11,9 @@
11
11
  * - **必填/contributes 以 plugin.schema.json 为唯一真源**(判据⑧归一性)——读包内 schema 副本做
12
12
  * ajv-2020 全量校验,不手写第二份字段清单。schema 改 → 校验自动跟上。副本漂移由
13
13
  * scripts/check-plugin-schema-sync.mjs 整文件守卫。
14
+ * - **墓碑提示(E6#91d)**:schema 顶层 `additionalProperties: true` ⇒ 删掉某个 `properties` 定义**不会**
15
+ * 让作者收到报错(只静默忽略),作者永远查不出为什么写法不生效。故在 schema 校验之后加一道
16
+ * `REMOVED_MANIFEST_FIELDS` 扫描,命中 → **警告不是错误**(见该常量上方注释:它**不是**第二份字段清单)。
14
17
  * - **i18n 文件存在性**是 schema 管不了的第二类检查(schema 只验声明形状,不验文件存在)。
15
18
  * - **entry 语义洞(H2,E6#5a 注记)**:schema 的 entry 条件块只认**废弃 `type`**(const view/card/
16
19
  * protocol,allOf/if/then);E5.8 后插件走 pluginRole/factoryRole 无 type → schema 拦不住「现代
@@ -27,6 +30,8 @@ export declare const SAFE_PLUGIN_ID: RegExp;
27
30
  export interface ValidationResult {
28
31
  valid: boolean;
29
32
  errors: string[];
33
+ /** 非阻断提醒(E6#91d 墓碑提示)——**不影响 `valid`**。可选字段:存量调用方(bin / vite-config)零改动。 */
34
+ warnings?: string[];
30
35
  }
31
36
  /** i18n 声明(相对插件根路径 + 声明来源)——validate 存在性检查与 packager 拷贝清单共用 */
32
37
  export interface I18nDecl {
@@ -1 +1 @@
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"}
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"}
package/dist/validate.js CHANGED
@@ -11,6 +11,9 @@
11
11
  * - **必填/contributes 以 plugin.schema.json 为唯一真源**(判据⑧归一性)——读包内 schema 副本做
12
12
  * ajv-2020 全量校验,不手写第二份字段清单。schema 改 → 校验自动跟上。副本漂移由
13
13
  * scripts/check-plugin-schema-sync.mjs 整文件守卫。
14
+ * - **墓碑提示(E6#91d)**:schema 顶层 `additionalProperties: true` ⇒ 删掉某个 `properties` 定义**不会**
15
+ * 让作者收到报错(只静默忽略),作者永远查不出为什么写法不生效。故在 schema 校验之后加一道
16
+ * `REMOVED_MANIFEST_FIELDS` 扫描,命中 → **警告不是错误**(见该常量上方注释:它**不是**第二份字段清单)。
14
17
  * - **i18n 文件存在性**是 schema 管不了的第二类检查(schema 只验声明形状,不验文件存在)。
15
18
  * - **entry 语义洞(H2,E6#5a 注记)**:schema 的 entry 条件块只认**废弃 `type`**(const view/card/
16
19
  * protocol,allOf/if/then);E5.8 后插件走 pluginRole/factoryRole 无 type → schema 拦不住「现代
@@ -20,7 +23,7 @@
20
23
  * `plugin.json:<instancePath 美化>: <中文消息>`;语法错才有 :行:列。
21
24
  */
22
25
  import { existsSync, readFileSync } from "node:fs";
23
- import { basename, dirname, isAbsolute, relative, resolve } from "node:path";
26
+ import { basename, dirname, isAbsolute, join, relative, resolve } from "node:path";
24
27
  import { fileURLToPath } from "node:url";
25
28
  import * as jsonc from "jsonc-parser";
26
29
  import Ajv2020 from "ajv/dist/2020.js"; // 2020-12(plugin.schema / icon-theme.schema)——ajv 无 exports 映射,Node ESM 需显式 .js
@@ -29,13 +32,51 @@ import Ajv from "ajv"; // 默认构造 = draft-07——theme.schema(E5.8#129
29
32
  * 包内 schema 副本定位——dist/validate.js → ../schemas = 包根/schemas;src 直跑同样上溯一级命中。
30
33
  * 三份 author 面 schema(plugin/theme/icon-theme)包内副本字节同步由 scripts/check-plugin-schema-sync.mjs 守卫
31
34
  * (E6#60:theme/icon-theme 收编——live public/schemas + 包内拷贝,作者 npm i @linkdesk/plugin-sdk 即达)。
35
+ *
36
+ * 🔴 **写法必须是「路径式」不能是 `new URL("../schemas/", import.meta.url)`**(E6#91e 实测):
37
+ * `new URL(<字面量>, import.meta.url)` 是 **Vite 的资产 URL 惯用式**,本模块一旦被 Vite 处理(作者
38
+ * `vite.config.ts` 侧 / 本仓 vitest),这行会被重写成 `http://localhost:3000/packages/…`,随后
39
+ * `fileURLToPath` 抛 "The URL must be of scheme file"。纯 Node(本包真实运行形态)下两者等价,故这是
40
+ * **零行为变化的写法加固**——把「只在被测时炸」的雷拆掉。
32
41
  */
33
- const SCHEMAS_DIR = new URL("../schemas/", import.meta.url);
42
+ const SCHEMAS_DIR = resolve(dirname(fileURLToPath(import.meta.url)), "../schemas");
34
43
  /**
35
44
  * pluginId 形状约束——复制自壳 src/pluginLoader/manifest.ts:64(独立 npm 包不能 import @src 壳源码;
36
45
  * 加载契约 = 安装目录名 → validateInstallManifest 兜底,E6#7 钉死)。防路径穿越字符直通文件系统。
37
46
  */
38
47
  export const SAFE_PLUGIN_ID = /^[A-Za-z0-9][A-Za-z0-9._-]*$/;
48
+ /**
49
+ * 已移除的 manifest 字段墓碑——**这不是「第二份字段清单」**(合法字段的真源仍是 plugin.schema.json,
50
+ * 不手写第二份是文件头铁律)。它回答的是**另一个问题**:「什么字段曾经合法、现已移除、替代方案是什么」。
51
+ * 两者语义正交:字段清单会随 schema 漂移(schema 改了名单没跟上 = bug);墓碑**只增不减**、永不与 schema
52
+ * 同步——移除了就是移除了,不因 schema 新增字段而变化。
53
+ *
54
+ * **为什么必须有这道兜底**:schema 顶层 `additionalProperties: true`(实测),删掉 `properties` 里的定义
55
+ * **不会**让作者收到任何报错——只会被静默忽略。作者写了 27 条更新日志、市场页签却显示「未附带更改日志」,
56
+ * 他**永远查不出为什么**。同理不能把 `additionalProperties` 翻成 `false`:那会把第三方插件的任何自定义字段
57
+ * 一并判错 = 整个生态的破坏性变更(能增量就不许动大版本)。
58
+ *
59
+ * 行为 = **警告不是错误**(`valid` 仍为 true):存量第三方插件的 plugin.json 里可能有这两个字段,判错会让
60
+ * 他们的 `npm run build` 突然炸——为一个**从无读取方**的字段破坏构建不值。官方插件由仓库门禁红灯兜底
61
+ * (scripts 侧),作者侧软提醒 + 自有仓库侧硬拦截,两处合起来覆盖完整。
62
+ */
63
+ const REMOVED_MANIFEST_FIELDS = {
64
+ changelog: "改用插件根目录的 CHANGELOG.md(市场详情页「更改日志」页签的唯一真源)",
65
+ readme: "改用插件根目录的 README.md(文件名固定,无需声明路径)",
66
+ };
67
+ /** 扫顶层已移除字段 → 可读警告。**只扫顶层**(这两个字段从来只在顶层) */
68
+ function collectRemovedFieldWarnings(manifest, base) {
69
+ if (!manifest || typeof manifest !== "object")
70
+ return [];
71
+ const m = manifest;
72
+ const out = [];
73
+ for (const [field, replacement] of Object.entries(REMOVED_MANIFEST_FIELDS)) {
74
+ if (Object.prototype.hasOwnProperty.call(m, field)) {
75
+ out.push(`${base} 的 "${field}" 字段已移除且无任何读取方——写了不生效、只会被静默忽略。${replacement}`);
76
+ }
77
+ }
78
+ return out;
79
+ }
39
80
  /**
40
81
  * 收集插件 i18n 声明——顶层**废弃** `manifest.i18n` + `contributes.i18n` 两层(schema 243/623 行:
41
82
  * 顶层 i18n @deprecated,contributes 为现役)。shape = { 语言代码: 相对路径 }。
@@ -118,7 +159,7 @@ function getSchemaValidator(schemaFileName) {
118
159
  const cached = compiledCache.get(schemaFileName);
119
160
  if (cached)
120
161
  return cached;
121
- const raw = readFileSync(fileURLToPath(new URL(schemaFileName, SCHEMAS_DIR)), "utf8");
162
+ const raw = readFileSync(join(SCHEMAS_DIR, schemaFileName), "utf8");
122
163
  const parsed = JSON.parse(raw);
123
164
  const is2020 = typeof parsed.$schema === "string" && parsed.$schema.includes("2020-12");
124
165
  // 同一构造器签名(allErrors/strict + compile)——类型面以 Ajv 为准,运行期仍是 Ajv2020 实例
@@ -214,7 +255,9 @@ export function validatePluginJson(path) {
214
255
  errors.push(`${decl.rel}: 在 ${decl.origin} 中声明但文件不存在`);
215
256
  }
216
257
  }
217
- return { valid: errors.length === 0, errors };
258
+ // 3) 已移除字段墓碑提示(E6#91d)——schema 顶层 additionalProperties: true 这一步是作者**唯一**能被告知的通道
259
+ const warnings = collectRemovedFieldWarnings(manifest, base);
260
+ return { valid: errors.length === 0, errors, ...(warnings.length > 0 ? { warnings } : {}) };
218
261
  }
219
262
  /* ── 数据文件校验器(E6#60:主题/图标主题 authors 面,镜像 check-theme-schema.mjs 同规则) ── */
220
263
  /**
@@ -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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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=validate.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.test.d.ts","sourceRoot":"","sources":["../src/validate.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * validate 墓碑提示测试(E6#91d,L3.7 第 3.7.2 轮)。
3
+ *
4
+ * 钉死两件事:
5
+ * ① 旧写法(`plugin.json` 里还有 `changelog` / `readme`)→ **有警告、仍 `valid`**(警告不是错误——
6
+ * 判错会让存量第三方插件的 `npm run build` 突然炸,为一个从无读取方的字段破坏构建不值)。
7
+ * ② 新写法(干净 manifest)→ **无警告**(墓碑不能变成噪音——那会让人习惯性忽略它)。
8
+ *
9
+ * fixture 一律用明显虚构值(硬约束 21:测试桩不指向真实插件)。
10
+ */
11
+ import { afterEach, describe, expect, it } from "vitest";
12
+ import { mkdtempSync, rmSync, writeFileSync } from "node:fs";
13
+ import { tmpdir } from "node:os";
14
+ import { join } from "node:path";
15
+ import { validatePluginJson } from "./validate.js";
16
+ const dirs = [];
17
+ /** 造一个临时插件工程(写到盘上——validatePluginJson 是路径入口,含真实文件 IO) */
18
+ function fixture(manifest) {
19
+ const dir = mkdtempSync(join(tmpdir(), "linkdesk-fixture-"));
20
+ dirs.push(dir);
21
+ writeFileSync(join(dir, "plugin.json"), JSON.stringify({ name: "Demo Fixture", version: "1.0.0", ...manifest }, null, 2), "utf8");
22
+ return join(dir, "plugin.json");
23
+ }
24
+ afterEach(() => {
25
+ while (dirs.length > 0)
26
+ rmSync(dirs.pop(), { recursive: true, force: true });
27
+ });
28
+ describe("validatePluginJson——墓碑提示(E6#91d)", () => {
29
+ it("干净 manifest → 无 warnings 键(墓碑不是噪音)", () => {
30
+ const res = validatePluginJson(fixture({}));
31
+ expect(res.valid).toBe(true);
32
+ expect(res.errors).toEqual([]);
33
+ expect(res.warnings).toBeUndefined();
34
+ });
35
+ it("旧写法 changelog → 警告、valid 仍为 true(构建不炸)", () => {
36
+ const res = validatePluginJson(fixture({ changelog: [{ version: "1.0.0", date: "2026-09-11", changes: ["一条"] }] }));
37
+ expect(res.valid).toBe(true);
38
+ expect(res.errors).toEqual([]);
39
+ expect(res.warnings).toHaveLength(1);
40
+ expect(res.warnings?.[0]).toContain("changelog");
41
+ expect(res.warnings?.[0]).toContain("CHANGELOG.md"); // 警告必须给出**去哪**
42
+ });
43
+ it("旧写法 readme → 警告、valid 仍为 true", () => {
44
+ const res = validatePluginJson(fixture({ readme: "./README.md" }));
45
+ expect(res.valid).toBe(true);
46
+ expect(res.warnings).toHaveLength(1);
47
+ expect(res.warnings?.[0]).toContain("readme");
48
+ expect(res.warnings?.[0]).toContain("README.md");
49
+ });
50
+ it("两个都写 → 两条警告(各自指路,不合并成一条)", () => {
51
+ const res = validatePluginJson(fixture({ readme: "./README.md", changelog: [{ version: "1.0.0", date: "2026-09-11" }] }));
52
+ expect(res.valid).toBe(true);
53
+ expect(res.warnings).toHaveLength(2);
54
+ });
55
+ it("嵌套同名字段不算命中——只扫顶层(`cardDocMap` 里的键名 changelog 与墓碑无关)", () => {
56
+ // `cardDocMap` 是合法的「任意键」顶层对象——用它的**键名**叫 changelog 来证明扫描只看顶层 key,
57
+ // 不递归进子对象(递归 = 把用户数据当字段名,会误报)
58
+ const res = validatePluginJson(fixture({ cardDocMap: { changelog: "resources/demo.md", readme: "resources/demo.md" } }));
59
+ expect(res.valid).toBe(true);
60
+ expect(res.warnings).toBeUndefined();
61
+ });
62
+ it("schema 已经拦下的 manifest → 提前返回,不产 warnings(先修错,别看噪音)", () => {
63
+ // 缺 version(schema required)→ 走 valid:false 分支
64
+ const dir = mkdtempSync(join(tmpdir(), "linkdesk-fixture-"));
65
+ dirs.push(dir);
66
+ const p = join(dir, "plugin.json");
67
+ writeFileSync(p, JSON.stringify({ name: "Demo Fixture", changelog: [] }), "utf8");
68
+ const res = validatePluginJson(p);
69
+ expect(res.valid).toBe(false);
70
+ expect(res.warnings).toBeUndefined();
71
+ });
72
+ });
73
+ //# sourceMappingURL=validate.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.test.js","sourceRoot":"","sources":["../src/validate.test.ts"],"names":[],"mappings":"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"}
@@ -49,6 +49,8 @@ export interface LinkdeskPluginOptions {
49
49
  outDir?: string;
50
50
  /** 额外 external 依赖(壳还可能提供别的共享件) */
51
51
  external?: string[];
52
+ /** E6#28.5 真机环:跳过 zip 分发件与「Ready to publish」banner——只产 dist/<id>.linkdesk-plugin/ 物化目录供 dev --real 直写 */
53
+ real?: boolean;
52
54
  }
53
55
  export declare function defineLinkdeskPluginConfig(options?: LinkdeskPluginOptions): UserConfig;
54
56
  //# sourceMappingURL=vite-config.d.ts.map
@@ -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;AAuQD,wBAAgB,0BAA0B,CAAC,OAAO,GAAE,qBAA0B,GAAG,UAAU,CAwN1F"}
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;IACpB,yGAAyG;IACzG,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AA8TD,wBAAgB,0BAA0B,CAAC,OAAO,GAAE,qBAA0B,GAAG,UAAU,CAqO1F"}