@linkdesk/plugin-sdk 0.1.29 → 0.1.31
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/dist/eslint/checks/command-ownership.d.ts +17 -3
- package/dist/eslint/checks/command-ownership.d.ts.map +1 -1
- package/dist/eslint/checks/command-ownership.js +10 -5
- package/dist/eslint/checks/command-ownership.js.map +1 -1
- package/dist/eslint/checks/config-ownership.d.ts +79 -0
- package/dist/eslint/checks/config-ownership.d.ts.map +1 -0
- package/dist/eslint/checks/config-ownership.js +239 -0
- package/dist/eslint/checks/config-ownership.js.map +1 -0
- package/dist/eslint/checks/disable.d.ts +2 -0
- package/dist/eslint/checks/disable.d.ts.map +1 -1
- package/dist/eslint/checks/disable.js +2 -0
- package/dist/eslint/checks/disable.js.map +1 -1
- package/dist/eslint/index.d.ts +9 -0
- package/dist/eslint/index.d.ts.map +1 -1
- package/dist/eslint/index.js +8 -0
- package/dist/eslint/index.js.map +1 -1
- package/dist/eslint/lint.d.ts +17 -0
- package/dist/eslint/lint.d.ts.map +1 -1
- package/dist/eslint/lint.js +47 -2
- package/dist/eslint/lint.js.map +1 -1
- package/dist/validate.d.ts +1 -1
- package/dist/validate.d.ts.map +1 -1
- package/dist/validate.js +27 -1
- package/dist/validate.js.map +1 -1
- package/package.json +1 -1
- package/schemas/host-reserved.json +8 -1
- package/schemas/plugin.schema.json +2 -2
|
@@ -1,10 +1,22 @@
|
|
|
1
1
|
import { type PluginIdSource } from "./plugin-prefix.js";
|
|
2
2
|
import { type CheckViolation } from "./scan.js";
|
|
3
|
-
/**
|
|
4
|
-
*
|
|
3
|
+
/**
|
|
4
|
+
* 包内宿主保留面账定位(dist/eslint/checks/x.js → ../../../schemas = 包根/schemas;src 直跑同样命中)。
|
|
5
|
+
* 🔴 写法必须是「路径式」(resolve + fileURLToPath)——`new URL(<字面量>, import.meta.url)` 是
|
|
6
|
+
* Vite 的资产 URL 惯用式,本模块一旦被 Vite 处理会被改写成构建期资产引用(validate.ts 同款坑,E6#91e)。
|
|
7
|
+
*/
|
|
8
|
+
export declare const HOST_RESERVED_FILE: string;
|
|
9
|
+
/** 本腿要读的两栏 + **E6#111d(1.34)起原地补齐另两栏**——`configKeys`(配置键归属腿:判「不得占用宿主
|
|
10
|
+
* 设置面」)与 `pseudoPluginIds`(宿主伪身份:判「不得冒充宿主身份注册」)。**同一个 loader、同一份账**——
|
|
11
|
+
* ⛔ 不许在各腿里各写一份 loader(两份 = 迟早漂,而这两条判据的输入必须是同一本账)。
|
|
12
|
+
* 剩下两栏(contextKeys / appearanceIds)由上下文旗子、外观 id 的后续轮次消费,此处不读也不删。 */
|
|
5
13
|
export interface HostReservedNames {
|
|
6
14
|
commandPrefixes: string[];
|
|
7
15
|
protocolIds: string[];
|
|
16
|
+
/** E6#111d:宿主 app.* 配置键(保护区输入;含退役键) */
|
|
17
|
+
configKeys: string[];
|
|
18
|
+
/** E6#111d:宿主伪身份(app / appearance / update)——插件用它注册 = 冒充宿主 */
|
|
19
|
+
pseudoPluginIds: string[];
|
|
8
20
|
}
|
|
9
21
|
/** 读宿主保留面账;文件缺失 ⇒ 空表 + 报告里打一条 note(静默空表 = 判据②变瞎子,不许不吭声) */
|
|
10
22
|
export declare function loadHostReserved(file?: string): HostReservedNames;
|
|
@@ -20,7 +32,9 @@ export interface CommandIdSite {
|
|
|
20
32
|
line: number;
|
|
21
33
|
id: string;
|
|
22
34
|
code: CommandIdCode;
|
|
23
|
-
/**
|
|
35
|
+
/** 应改成什么:**只换第一段**(`<pluginId>.` + 原 id 第一段之后的全部)——
|
|
36
|
+
* ⚠️ 不是「前缀插入」:`explorer.newFile` ⇒ `file-tree.newFile`(1.31 §10.2 的改名形状),
|
|
37
|
+
* 词干零变化 ⇒ 改名映射可机械生成、同笔引用点替换无歧义。 */
|
|
24
38
|
suggested: string;
|
|
25
39
|
/** code = host-reserved 时:撞上的那条宿主保留前缀 / 宿主内置协议 id */
|
|
26
40
|
reserved?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-ownership.d.ts","sourceRoot":"","sources":["../../../src/eslint/checks/command-ownership.ts"],"names":[],"mappings":"AAkCA,OAAO,EAAyB,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAChF,OAAO,EAKL,KAAK,cAAc,EACpB,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"command-ownership.d.ts","sourceRoot":"","sources":["../../../src/eslint/checks/command-ownership.ts"],"names":[],"mappings":"AAkCA,OAAO,EAAyB,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAChF,OAAO,EAKL,KAAK,cAAc,EACpB,MAAM,WAAW,CAAC;AAGnB;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,QAA0F,CAAC;AAE1H;;;qEAGqE;AACrE,MAAM,WAAW,iBAAiB;IAChC,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,uCAAuC;IACvC,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,8DAA8D;IAC9D,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,2DAA2D;AAC3D,wBAAgB,gBAAgB,CAAC,IAAI,GAAE,MAA2B,GAAG,iBAAiB,CAcrF;AAED,gBAAgB;AAChB,MAAM,MAAM,aAAa,GAAG,kBAAkB,GAAG,eAAe,CAAC;AAEjE,iFAAiF;AACjF,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,SAAS,GAAG,UAAU,CAAC;AAEhE,0DAA0D;AAC1D,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,aAAa,CAAC;IACpB,sCAAsC;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,aAAa,CAAC;IACpB;;wCAEoC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,cAAc,EAAE,cAAc,GAAG,IAAI,CAAC;IACtC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,6CAA6C;IAC7C,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,kBAAkB;IAClB,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,yDAAyD;IACzD,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,qCAAqC;IACrC,UAAU,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAC;QAAC,eAAe,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3F,iCAAiC;IACjC,UAAU,EAAE,cAAc,EAAE,CAAC;CAC9B;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,iBAAiB,EAC3B,IAAI,EAAE,aAAa,GAClB;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CActE;AAqBD,oFAAoF;AACpF,eAAO,MAAM,mBAAmB,QAAgD,CAAC;AACjF,oEAAoE;AACpE,eAAO,MAAM,oBAAoB,QAA4E,CAAC;AAE9G,yEAAyE;AACzE,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAK9D;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,MAAM,EACZ,QAAQ,GAAE,iBAAsC,EAChD,YAAY,GAAE,MAA2B,GACxC,sBAAsB,CAyGxB"}
|
|
@@ -40,13 +40,18 @@ import { buildDisableIndex, isDisabled, CHECK_IDS } from "./disable.js";
|
|
|
40
40
|
* 🔴 写法必须是「路径式」(resolve + fileURLToPath)——`new URL(<字面量>, import.meta.url)` 是
|
|
41
41
|
* Vite 的资产 URL 惯用式,本模块一旦被 Vite 处理会被改写成构建期资产引用(validate.ts 同款坑,E6#91e)。
|
|
42
42
|
*/
|
|
43
|
-
const HOST_RESERVED_FILE = resolve(dirname(fileURLToPath(import.meta.url)), "../../../schemas/host-reserved.json");
|
|
43
|
+
export const HOST_RESERVED_FILE = resolve(dirname(fileURLToPath(import.meta.url)), "../../../schemas/host-reserved.json");
|
|
44
44
|
/** 读宿主保留面账;文件缺失 ⇒ 空表 + 报告里打一条 note(静默空表 = 判据②变瞎子,不许不吭声) */
|
|
45
45
|
export function loadHostReserved(file = HOST_RESERVED_FILE) {
|
|
46
46
|
if (!existsSync(file))
|
|
47
|
-
return { commandPrefixes: [], protocolIds: [] };
|
|
47
|
+
return { commandPrefixes: [], protocolIds: [], configKeys: [], pseudoPluginIds: [] };
|
|
48
48
|
const raw = JSON.parse(readFileSync(file, "utf8"));
|
|
49
|
-
return {
|
|
49
|
+
return {
|
|
50
|
+
commandPrefixes: raw.commandPrefixes ?? [],
|
|
51
|
+
protocolIds: raw.protocolIds ?? [],
|
|
52
|
+
configKeys: raw.configKeys ?? [],
|
|
53
|
+
pseudoPluginIds: raw.pseudoPluginIds ?? [],
|
|
54
|
+
};
|
|
50
55
|
}
|
|
51
56
|
/**
|
|
52
57
|
* 一条命令/协议 id 的裁决(纯函数——单测与探针共用,别在别处再写一份判据)。
|
|
@@ -153,10 +158,10 @@ export function runCommandOwnershipCheck(root, reserved = loadHostReserved(), re
|
|
|
153
158
|
const where = face === "declared" ? "声明面(plugin.json contributes.commands)" : face === "runtime" ? "运行时面(registerCommand 字面量)" : "协议面(registerProtocol 字面量)";
|
|
154
159
|
const message = verdict.code === "host-reserved"
|
|
155
160
|
? `${where}:id "${id}" 落在**宿主保留面**(${verdict.reserved})里——占用宿主命名 = 顶替宿主命令/协议` +
|
|
156
|
-
`(宿主那条同名命令会永远不生效,且不报错)。改成 "${verdict.suggested}"
|
|
161
|
+
`(宿主那条同名命令会永远不生效,且不报错)。改成 "${verdict.suggested}"(只换第一段、"${verdict.reserved}" 之后的词干一个字不改)。`
|
|
157
162
|
: `${where}:id "${id}" 不带本仓归属(本插件 pluginId = "${pluginId}",应以 "${prefix}" 开头)` +
|
|
158
163
|
`——命令 id 是跨插件调用面,壳侧按第一段找属主:前缀不对 = 归属落到别人头上(或谁都不认)。` +
|
|
159
|
-
`改成 "${verdict.suggested}"
|
|
164
|
+
`改成 "${verdict.suggested}"(只换第一段、词干零变化)。`;
|
|
160
165
|
pushSite({ face, file, line, id, code: verdict.code, suggested: verdict.suggested, ...(verdict.reserved !== undefined ? { reserved: verdict.reserved } : {}) }, message, disabled);
|
|
161
166
|
};
|
|
162
167
|
// ── ① 声明面:contributes.commands[].id(真字段是 id;`command` 是菜单引用用的键名,别读错) ──
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-ownership.js","sourceRoot":"","sources":["../../../src/eslint/checks/command-ownership.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAuB,MAAM,oBAAoB,CAAC;AAChF,OAAO,EACL,YAAY,EACZ,eAAe,EACf,UAAU,EACV,OAAO,GAER,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAExE;;;;GAIG;AACH,MAAM,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,qCAAqC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"command-ownership.js","sourceRoot":"","sources":["../../../src/eslint/checks/command-ownership.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { type PluginIdSource } from "./plugin-prefix.js";
|
|
2
|
+
import { type HostReservedNames } from "./command-ownership.js";
|
|
3
|
+
import { type CheckViolation } from "./scan.js";
|
|
4
|
+
/** 判据命中的两种形态(与 `CommandIdCode` 同词表:红 = 占别人/宿主的面;黄 = 不带本仓归属) */
|
|
5
|
+
export type ConfigKeyCode = "host-reserved" | "no-plugin-prefix";
|
|
6
|
+
/** 扫描面:声明面 / 弱默认值面 / 运行时面(身份字面量) */
|
|
7
|
+
export type ConfigKeyFace = "declared" | "defaults" | "runtime";
|
|
8
|
+
/** 一处不合规站点(探针与腿共用同一份数据) */
|
|
9
|
+
export interface ConfigKeySite {
|
|
10
|
+
face: ConfigKeyFace;
|
|
11
|
+
/** 工程相对路径(正斜杠);声明面 / 弱默认值面恒为 `plugin.json` */
|
|
12
|
+
file: string;
|
|
13
|
+
line: number;
|
|
14
|
+
/** 配置键;`runtime` 面 = 注册调用的第一个实参(**身份字面量**,不是键) */
|
|
15
|
+
key: string;
|
|
16
|
+
code: ConfigKeyCode;
|
|
17
|
+
/** 应改成什么:**只换第一段**(`<pluginId>.` + 原键第一段之后的全部)——词干零变化 */
|
|
18
|
+
suggested: string;
|
|
19
|
+
/** code = host-reserved 时:撞上的那条宿主保留键 / 宿主伪身份 */
|
|
20
|
+
reserved?: string;
|
|
21
|
+
}
|
|
22
|
+
export interface ConfigOwnershipReport {
|
|
23
|
+
root: string;
|
|
24
|
+
pluginId: string | null;
|
|
25
|
+
pluginIdSource: PluginIdSource | null;
|
|
26
|
+
pluginIdNote: string | null;
|
|
27
|
+
/** fail-closed:非 null ⇒ 本腿报红(拿不到身份就无从判归属) */
|
|
28
|
+
error: string | null;
|
|
29
|
+
/** 🔴 必须改的(进腿报点) */
|
|
30
|
+
red: ConfigKeySite[];
|
|
31
|
+
/** 🟡 建议改的(只打印,不拦) */
|
|
32
|
+
yellow: ConfigKeySite[];
|
|
33
|
+
/** 三面的**全部**名(合规 + 不合规,按出现顺序去重)——探针的读数面(口径:名数,非站点数) */
|
|
34
|
+
declaredKeys: string[];
|
|
35
|
+
defaultsKeys: string[];
|
|
36
|
+
runtimeIdentities: string[];
|
|
37
|
+
/** 账的加载实况(账没读到 ⇒ 判据① 空转,报告里必须能看出来) */
|
|
38
|
+
hostLedger: {
|
|
39
|
+
file: string;
|
|
40
|
+
found: boolean;
|
|
41
|
+
configKeys: number;
|
|
42
|
+
pseudoPluginIds: number;
|
|
43
|
+
};
|
|
44
|
+
/** 腿报点 = fail-closed + 全部红 */
|
|
45
|
+
violations: CheckViolation[];
|
|
46
|
+
/** 黄灯建议(`lint.ts` 打印用;**不进** `LintLeg.violations` ⇒ 不拦 CI) */
|
|
47
|
+
advisories: CheckViolation[];
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* 一个配置键的裁决(纯函数——单测与探针共用,别在别处再写一份判据)。
|
|
51
|
+
*
|
|
52
|
+
* 🔴 建议名的形状 = **只替换第一段**(`app.theme` → `myplugin.theme`,词干零变化),与 `judgeCommandId` 同形。
|
|
53
|
+
* ⚠️ `face` 在这里**真的参与判定**:`defaults` 面不判判据②(弱默认值的键天然是别人的键——见文件头)。
|
|
54
|
+
*/
|
|
55
|
+
export declare function judgeConfigKey(key: string, pluginId: string, reserved: HostReservedNames, face: ConfigKeyFace): {
|
|
56
|
+
code: ConfigKeyCode;
|
|
57
|
+
suggested: string;
|
|
58
|
+
reserved?: string;
|
|
59
|
+
} | null;
|
|
60
|
+
/**
|
|
61
|
+
* 运行时面:注册调用**第一个实参**(身份字面量)的裁决(纯函数)。
|
|
62
|
+
* 🔴 落在 `pseudoPluginIds` ⇒ 冒充宿主身份(红):用 "app" 注册 ⇒ 壳的冲突检测永不响(因为宿主自己就是 "app"),
|
|
63
|
+
* 且注销插件时会**摘掉宿主自己的条目**。改法 = 用自己的 pluginId(或干脆别在插件源码里调这两支 API)。
|
|
64
|
+
*/
|
|
65
|
+
export declare function judgeRegisterIdentity(id: string, pluginId: string, reserved: HostReservedNames): {
|
|
66
|
+
code: ConfigKeyCode;
|
|
67
|
+
suggested: string;
|
|
68
|
+
reserved?: string;
|
|
69
|
+
} | null;
|
|
70
|
+
/** 运行时面:`registerConfiguration("<字面量>", …)` + `registerConfigurationDefaults("<字面量>", …)`
|
|
71
|
+
* (两支 API 的第一个实参都是身份;`(?:Defaults)?` 让一条正则覆盖两支——⛔ 别拆成两条) */
|
|
72
|
+
export declare const RE_REGISTER_CONFIGURATION: RegExp;
|
|
73
|
+
/** 取 manifest 里某个键的行号(JSONC 原文里找 `"<key>":`;找不到 ⇒ 1,不许当成「不存在」) */
|
|
74
|
+
export declare function manifestKeyLine(raw: string, key: string): number;
|
|
75
|
+
/**
|
|
76
|
+
* 跑本仓配置键归属判据。返回结构化报告(探针用)+ 腿报点(`lint.ts` 用)——**同一份实现**。
|
|
77
|
+
*/
|
|
78
|
+
export declare function runConfigOwnershipCheck(root: string, reserved?: HostReservedNames, reservedFile?: string): ConfigOwnershipReport;
|
|
79
|
+
//# sourceMappingURL=config-ownership.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-ownership.d.ts","sourceRoot":"","sources":["../../../src/eslint/checks/config-ownership.ts"],"names":[],"mappings":"AAsCA,OAAO,EAAyB,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAChF,OAAO,EAAwC,KAAK,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AACtG,OAAO,EAKL,KAAK,cAAc,EACpB,MAAM,WAAW,CAAC;AAGnB,+DAA+D;AAC/D,MAAM,MAAM,aAAa,GAAG,eAAe,GAAG,kBAAkB,CAAC;AAEjE,oCAAoC;AACpC,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS,CAAC;AAEhE,2BAA2B;AAC3B,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,aAAa,CAAC;IACpB,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,aAAa,CAAC;IACpB,yDAAyD;IACzD,SAAS,EAAE,MAAM,CAAC;IAClB,gDAAgD;IAChD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,cAAc,EAAE,cAAc,GAAG,IAAI,CAAC;IACtC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,6CAA6C;IAC7C,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,oBAAoB;IACpB,GAAG,EAAE,aAAa,EAAE,CAAC;IACrB,sBAAsB;IACtB,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,uDAAuD;IACvD,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,sCAAsC;IACtC,UAAU,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1F,8BAA8B;IAC9B,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,8DAA8D;IAC9D,UAAU,EAAE,cAAc,EAAE,CAAC;CAC9B;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,iBAAiB,EAC3B,IAAI,EAAE,aAAa,GAClB;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAQtE;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,iBAAiB,GAC1B;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAItE;AAED;6DAC6D;AAC7D,eAAO,MAAM,yBAAyB,QAAmE,CAAC;AAiB1G,kEAAkE;AAClE,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAKhE;AAuBD;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,MAAM,EACZ,QAAQ,GAAE,iBAAsC,EAChD,YAAY,GAAE,MAA2B,GACxC,qBAAqB,CAuIvB"}
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* check-config-ownership 腿·**配置键归属判据**(E6#111d · 轮次 1.34)。
|
|
3
|
+
*
|
|
4
|
+
* ── 为什么(本件立项的那条轴)──
|
|
5
|
+
* 配置键是**用户数据面**:`settings.json` 里以键存值,壳的设置页按 pluginId 分组渲染。
|
|
6
|
+
* 插件占宿主的 `app.*` 键 = 顶掉宿主设置面(宿主那条键的生效值被插件的值串掉,而**两边都不报错**);
|
|
7
|
+
* 两个插件用同一个键 = 后注册者的值静默胜出(用户改一个设置,另一个插件的行为跟着变)。
|
|
8
|
+
* 1.31 实测:官方 18 仓有 **19 个键**不带本仓归属(`explorer.confirmDelete` 之类,属主其实是别人的壳面)。
|
|
9
|
+
*
|
|
10
|
+
* ── 两条判据(与壳仓 `scripts/gen-host-reserved.mjs` 的账同源)──
|
|
11
|
+
* ① **宿主保留面**(🔴 红):键落在账(包内 `schemas/host-reserved.json`)的 `configKeys` 里
|
|
12
|
+
* ⇒ 占用宿主设置面。**含退役键**——宿主不再写入的键也不腾位(老 `settings.json` 里可能仍有值,
|
|
13
|
+
* 迁移代码还会读它)。判据出处 = 1.33 §11.1 裁决(丙)·(甲)。
|
|
14
|
+
* ② **本仓前缀**(🟡 黄):**新键**第一段应是本仓 `pluginId`(`<pluginId>.<你的名字>`)。
|
|
15
|
+
* 与命令 id 同形(`judgeCommandId` 的「只换第一段、词干零变化」)。
|
|
16
|
+
* ⚠️ 只对 **`declared` 面**判——`defaults` 面的键**天然是别人的键**(`configurationDefaults` 的语义
|
|
17
|
+
* 就是"为已存在的键建议一个弱默认值",要求它带本仓前缀等于取消这个能力)。运行时面同理不判键。
|
|
18
|
+
* ③ **宿主伪身份**(🔴 红):源码里 `registerConfiguration("<字面量>", …)` / `registerConfigurationDefaults(...)`
|
|
19
|
+
* 的第一个实参落在账的 `pseudoPluginIds`(app / appearance / update)⇒ 冒充宿主身份注册。
|
|
20
|
+
*
|
|
21
|
+
* ── 扫描面(三面)──
|
|
22
|
+
* · **声明面** `declared` = `plugin.json` 的 `contributes.configuration.properties` 的**键名**(权威面);
|
|
23
|
+
* · **弱默认值面** `defaults` = `plugin.json` 的 `contributes.configurationDefaults` 的**键名**;
|
|
24
|
+
* · **运行时面** `runtime` = 源码里注册调用的**第一个实参**(身份字面量)。
|
|
25
|
+
* ⚠️ 实测宿主侧口径:插件**零使用**这两支 API(插件声明走 `plugin.json`)——本面是给"哪天真有人这么写"留的,
|
|
26
|
+
* 面要量全但**今日恒为空**(空面不是判据失效,报告里能看出来)。
|
|
27
|
+
*
|
|
28
|
+
* ── 🔴 分工:本腿报红的那一条,运行时也报 ──
|
|
29
|
+
* 判据① 在**运行时**(壳 `ConfigurationRegistry` 的保护区)同样生效——本腿是**提前在作者仓里**把同一件事报出来
|
|
30
|
+
* (作者不必等装上壳才发现自己的键被拒)。判据② 运行时**不管**(存量 19 个反例还在,运行时拒前缀不合规的键
|
|
31
|
+
* 会把存量插件当场弄坏)⇒ 判据② 只在这里、且只是黄。
|
|
32
|
+
*
|
|
33
|
+
* 知情绕行 = 标准 disable 注释(`CHECK_IDS.configOwnership`)。⚠️ **fail-closed 不参与豁免**:
|
|
34
|
+
* 拿不到 `pluginId` 说的不是「你的键怎么写」,而是「你的身份读不到」——那是工程根的问题。
|
|
35
|
+
*/
|
|
36
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
37
|
+
import { join, resolve } from "node:path";
|
|
38
|
+
import { readPluginManifest } from "../../validate.js";
|
|
39
|
+
import { resolvePluginIdForCss } from "./plugin-prefix.js";
|
|
40
|
+
import { HOST_RESERVED_FILE, loadHostReserved } from "./command-ownership.js";
|
|
41
|
+
import { collectFiles, isTestOrMockRel, readSource, relPath, } from "./scan.js";
|
|
42
|
+
import { buildDisableIndex, isDisabled, CHECK_IDS } from "./disable.js";
|
|
43
|
+
/**
|
|
44
|
+
* 一个配置键的裁决(纯函数——单测与探针共用,别在别处再写一份判据)。
|
|
45
|
+
*
|
|
46
|
+
* 🔴 建议名的形状 = **只替换第一段**(`app.theme` → `myplugin.theme`,词干零变化),与 `judgeCommandId` 同形。
|
|
47
|
+
* ⚠️ `face` 在这里**真的参与判定**:`defaults` 面不判判据②(弱默认值的键天然是别人的键——见文件头)。
|
|
48
|
+
*/
|
|
49
|
+
export function judgeConfigKey(key, pluginId, reserved, face) {
|
|
50
|
+
const dot = key.indexOf(".");
|
|
51
|
+
const suggested = `${pluginId}.${dot > 0 ? key.slice(dot + 1) : key}`;
|
|
52
|
+
// ① 宿主保留面(比**全等**——保留面是一张逐个列出的键名清单,不是前缀面)
|
|
53
|
+
if (reserved.configKeys.includes(key))
|
|
54
|
+
return { code: "host-reserved", suggested, reserved: key };
|
|
55
|
+
// ② 本仓前缀——只对声明面判(弱默认值面的键不是"插件新键",运行时面压根不是键)
|
|
56
|
+
if (face === "declared" && !key.startsWith(`${pluginId}.`))
|
|
57
|
+
return { code: "no-plugin-prefix", suggested };
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* 运行时面:注册调用**第一个实参**(身份字面量)的裁决(纯函数)。
|
|
62
|
+
* 🔴 落在 `pseudoPluginIds` ⇒ 冒充宿主身份(红):用 "app" 注册 ⇒ 壳的冲突检测永不响(因为宿主自己就是 "app"),
|
|
63
|
+
* 且注销插件时会**摘掉宿主自己的条目**。改法 = 用自己的 pluginId(或干脆别在插件源码里调这两支 API)。
|
|
64
|
+
*/
|
|
65
|
+
export function judgeRegisterIdentity(id, pluginId, reserved) {
|
|
66
|
+
if (reserved.pseudoPluginIds.includes(id))
|
|
67
|
+
return { code: "host-reserved", suggested: pluginId, reserved: id };
|
|
68
|
+
if (id !== pluginId)
|
|
69
|
+
return { code: "no-plugin-prefix", suggested: pluginId };
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
/** 运行时面:`registerConfiguration("<字面量>", …)` + `registerConfigurationDefaults("<字面量>", …)`
|
|
73
|
+
* (两支 API 的第一个实参都是身份;`(?:Defaults)?` 让一条正则覆盖两支——⛔ 别拆成两条) */
|
|
74
|
+
export const RE_REGISTER_CONFIGURATION = /registerConfiguration(?:Defaults)?\s*\(\s*["'`]([^"'`]+)["'`]/g;
|
|
75
|
+
/** 源码字面量扫描:`collect` 返回 id——行号按 1-based 计(与 `command-ownership.ts` 同实现,口径一致) */
|
|
76
|
+
function scanLiterals(src, re, collect) {
|
|
77
|
+
const out = [];
|
|
78
|
+
for (const m of src.matchAll(re)) {
|
|
79
|
+
const id = collect(m);
|
|
80
|
+
if (!id)
|
|
81
|
+
continue;
|
|
82
|
+
out.push({ id, line: src.slice(0, m.index ?? 0).split("\n").length });
|
|
83
|
+
}
|
|
84
|
+
return out;
|
|
85
|
+
}
|
|
86
|
+
/** 取 manifest 里某个键的行号(JSONC 原文里找 `"<key>":`;找不到 ⇒ 1,不许当成「不存在」) */
|
|
87
|
+
export function manifestKeyLine(raw, key) {
|
|
88
|
+
const esc = key.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
89
|
+
const m = raw.match(new RegExp(`"${esc}"\\s*:`));
|
|
90
|
+
if (!m || m.index === undefined)
|
|
91
|
+
return 1;
|
|
92
|
+
return raw.slice(0, m.index).split("\n").length;
|
|
93
|
+
}
|
|
94
|
+
/** `contributes.configuration` 允许对象或对象数组 ⇒ 统一摊平成 properties 记录(读不出 ⇒ null) */
|
|
95
|
+
function configPropertiesOf(node) {
|
|
96
|
+
const one = (v) => {
|
|
97
|
+
const props = v?.properties;
|
|
98
|
+
return props && typeof props === "object" && !Array.isArray(props) ? props : null;
|
|
99
|
+
};
|
|
100
|
+
if (Array.isArray(node)) {
|
|
101
|
+
const out = {};
|
|
102
|
+
let any = false;
|
|
103
|
+
for (const item of node) {
|
|
104
|
+
const props = one(item);
|
|
105
|
+
if (props) {
|
|
106
|
+
Object.assign(out, props);
|
|
107
|
+
any = true;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
return any ? out : null;
|
|
111
|
+
}
|
|
112
|
+
return one(node);
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* 跑本仓配置键归属判据。返回结构化报告(探针用)+ 腿报点(`lint.ts` 用)——**同一份实现**。
|
|
116
|
+
*/
|
|
117
|
+
export function runConfigOwnershipCheck(root, reserved = loadHostReserved(), reservedFile = HOST_RESERVED_FILE) {
|
|
118
|
+
const absRoot = resolve(root);
|
|
119
|
+
const manifestPath = join(absRoot, "plugin.json");
|
|
120
|
+
const resolution = resolvePluginIdForCss(absRoot);
|
|
121
|
+
const violations = [];
|
|
122
|
+
const report = {
|
|
123
|
+
root: absRoot,
|
|
124
|
+
pluginId: resolution.pluginId,
|
|
125
|
+
pluginIdSource: resolution.source,
|
|
126
|
+
pluginIdNote: resolution.note,
|
|
127
|
+
error: resolution.error,
|
|
128
|
+
red: [],
|
|
129
|
+
yellow: [],
|
|
130
|
+
declaredKeys: [],
|
|
131
|
+
defaultsKeys: [],
|
|
132
|
+
runtimeIdentities: [],
|
|
133
|
+
hostLedger: {
|
|
134
|
+
file: reservedFile,
|
|
135
|
+
found: existsSync(reservedFile),
|
|
136
|
+
configKeys: reserved.configKeys.length,
|
|
137
|
+
pseudoPluginIds: reserved.pseudoPluginIds.length,
|
|
138
|
+
},
|
|
139
|
+
violations,
|
|
140
|
+
advisories: [],
|
|
141
|
+
};
|
|
142
|
+
// ── fail-closed(不可豁免:拿不到身份 = 判据①② 全部无从谈起)──
|
|
143
|
+
if (resolution.error || !resolution.pluginId) {
|
|
144
|
+
violations.push({
|
|
145
|
+
file: "plugin.json",
|
|
146
|
+
line: 1,
|
|
147
|
+
message: `拿不到本仓 pluginId:${resolution.error}。归属判据以「本仓身份」为唯一前缀来源——读不到它就无从判` +
|
|
148
|
+
`「这个键是不是你的」。在插件工程根修好 plugin.json(或显式声明 pluginId),` +
|
|
149
|
+
`别用 disable 注释绕:这是身份问题,不受豁免注释管辖。`,
|
|
150
|
+
});
|
|
151
|
+
return report;
|
|
152
|
+
}
|
|
153
|
+
const pluginId = resolution.pluginId;
|
|
154
|
+
const prefix = `${pluginId}.`;
|
|
155
|
+
const manifestRaw = existsSync(manifestPath) ? readFileSync(manifestPath, "utf8") : "";
|
|
156
|
+
const manifestDisabled = buildDisableIndex(manifestRaw, [CHECK_IDS.configOwnership]);
|
|
157
|
+
const push = (site, message, disabled) => {
|
|
158
|
+
if (disabled && isDisabled(disabled.idx, disabled.line, CHECK_IDS.configOwnership))
|
|
159
|
+
return;
|
|
160
|
+
if (site.code === "host-reserved") {
|
|
161
|
+
report.red.push(site);
|
|
162
|
+
violations.push({ file: site.file, line: site.line, message });
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
report.yellow.push(site);
|
|
166
|
+
report.advisories.push({ file: site.file, line: site.line, message });
|
|
167
|
+
}
|
|
168
|
+
};
|
|
169
|
+
/** 判据①②合一的报点(声明面 / 弱默认值面) */
|
|
170
|
+
const judgeAndPush = (face, key, line) => {
|
|
171
|
+
const verdict = judgeConfigKey(key, pluginId, reserved, face);
|
|
172
|
+
if (!verdict)
|
|
173
|
+
return;
|
|
174
|
+
const where = face === "declared"
|
|
175
|
+
? "声明面(plugin.json contributes.configuration.properties)"
|
|
176
|
+
: "弱默认值面(plugin.json contributes.configurationDefaults)";
|
|
177
|
+
const message = verdict.code === "host-reserved"
|
|
178
|
+
? `${where}:配置键 "${key}" 属于**宿主的保留名字空间**(保留键清单见包内 schemas/host-reserved.json 的 configKeys)。` +
|
|
179
|
+
`占用它 = 顶替宿主设置面——宿主那条键的生效值会被你的值串掉,**两边都不报错**(用户在设置页看到的值与宿主实际行为不一致)。` +
|
|
180
|
+
`改法:改成 "${verdict.suggested}"(只换第一段、词干零变化)。`
|
|
181
|
+
: `${where}:配置键 "${key}" 不带本仓归属(本插件 pluginId = "${pluginId}",新键应以 "${prefix}" 开头)` +
|
|
182
|
+
`——键是**用户数据面**:同名键被两个插件声明时只有一个能生效(壳 1.34 起"首撞保留",后到者被拒),` +
|
|
183
|
+
`改名后归属才唯一。改成 "${verdict.suggested}"(只换第一段、词干零变化)。`;
|
|
184
|
+
push({ face, file: "plugin.json", line, key, code: verdict.code, suggested: verdict.suggested, ...(verdict.reserved !== undefined ? { reserved: verdict.reserved } : {}) }, message, { idx: manifestDisabled, line });
|
|
185
|
+
};
|
|
186
|
+
// ── ①② 声明面 + 弱默认值面:plugin.json(读不出 ⇒ 两面跳过——plugin-prefix 腿已对同一件事 fail-closed 报红,不重复报)
|
|
187
|
+
if (manifestRaw) {
|
|
188
|
+
let manifest = null;
|
|
189
|
+
try {
|
|
190
|
+
manifest = readPluginManifest(manifestPath);
|
|
191
|
+
}
|
|
192
|
+
catch {
|
|
193
|
+
manifest = null;
|
|
194
|
+
}
|
|
195
|
+
const contributes = manifest?.contributes;
|
|
196
|
+
const props = configPropertiesOf(contributes?.configuration);
|
|
197
|
+
if (props) {
|
|
198
|
+
for (const key of Object.keys(props)) {
|
|
199
|
+
if (!report.declaredKeys.includes(key))
|
|
200
|
+
report.declaredKeys.push(key);
|
|
201
|
+
judgeAndPush("declared", key, manifestKeyLine(manifestRaw, key));
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
const defaults = contributes?.configurationDefaults;
|
|
205
|
+
if (defaults && typeof defaults === "object" && !Array.isArray(defaults)) {
|
|
206
|
+
for (const key of Object.keys(defaults)) {
|
|
207
|
+
if (!report.defaultsKeys.includes(key))
|
|
208
|
+
report.defaultsKeys.push(key);
|
|
209
|
+
judgeAndPush("defaults", key, manifestKeyLine(manifestRaw, key));
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
// ── ③ 运行时面:源码里注册调用的第一个实参(只扫真源码——测试/mock 跳过,与另几条腿同口径) ──
|
|
214
|
+
for (const abs of collectFiles(absRoot, [".ts", ".tsx", ".js", ".jsx"])) {
|
|
215
|
+
const rel = relPath(absRoot, abs);
|
|
216
|
+
if (isTestOrMockRel(rel))
|
|
217
|
+
continue;
|
|
218
|
+
const src = readSource(abs);
|
|
219
|
+
const idx = buildDisableIndex(src, [CHECK_IDS.configOwnership]);
|
|
220
|
+
for (const hit of scanLiterals(src, RE_REGISTER_CONFIGURATION, (m) => m[1])) {
|
|
221
|
+
if (!report.runtimeIdentities.includes(hit.id))
|
|
222
|
+
report.runtimeIdentities.push(hit.id);
|
|
223
|
+
const verdict = judgeRegisterIdentity(hit.id, pluginId, reserved);
|
|
224
|
+
if (!verdict)
|
|
225
|
+
continue;
|
|
226
|
+
const message = verdict.code === "host-reserved"
|
|
227
|
+
? `运行时面(源码里 registerConfiguration* 的第一个实参):身份 "${hit.id}" 是**宿主自己的身份**` +
|
|
228
|
+
`(app / appearance / update 由宿主用来注册配置/外观/更新)——插件用它注册 ⇒ 壳的冲突检测永不响` +
|
|
229
|
+
`(因为宿主自己就是这个身份),且**注销插件时会摘掉宿主自己的条目**。改用本仓 pluginId "${pluginId}"。` +
|
|
230
|
+
`⚠️ 插件声明配置的正常路径是 plugin.json 的 contributes.configuration——别在自己的源码里调壳的注册 API。`
|
|
231
|
+
: `运行时面(源码里 registerConfiguration* 的第一个实参):身份 "${hit.id}" 与本仓 pluginId "${pluginId}" 不同` +
|
|
232
|
+
`——身份是归属的唯一来源,用别人的 id 注册会让这些键挂到别人名下(注销时按身份摘条目,摘错人)。` +
|
|
233
|
+
`改用 "${pluginId}"(若这是给别人的键建议弱默认值,键名照旧、身份仍须是你自己)。`;
|
|
234
|
+
push({ face: "runtime", file: rel, line: hit.line, key: hit.id, code: verdict.code, suggested: verdict.suggested, ...(verdict.reserved !== undefined ? { reserved: verdict.reserved } : {}) }, message, { idx, line: hit.line });
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
return report;
|
|
238
|
+
}
|
|
239
|
+
//# sourceMappingURL=config-ownership.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-ownership.js","sourceRoot":"","sources":["../../../src/eslint/checks/config-ownership.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAuB,MAAM,oBAAoB,CAAC;AAChF,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAA0B,MAAM,wBAAwB,CAAC;AACtG,OAAO,EACL,YAAY,EACZ,eAAe,EACf,UAAU,EACV,OAAO,GAER,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AA8CxE;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAC5B,GAAW,EACX,QAAgB,EAChB,QAA2B,EAC3B,IAAmB;IAEnB,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC7B,MAAM,SAAS,GAAG,GAAG,QAAQ,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;IACtE,0CAA0C;IAC1C,IAAI,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;IAClG,4CAA4C;IAC5C,IAAI,IAAI,KAAK,UAAU,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,QAAQ,GAAG,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,kBAAkB,EAAE,SAAS,EAAE,CAAC;IAC3G,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CACnC,EAAU,EACV,QAAgB,EAChB,QAA2B;IAE3B,IAAI,QAAQ,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IAC/G,IAAI,EAAE,KAAK,QAAQ;QAAE,OAAO,EAAE,IAAI,EAAE,kBAAkB,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;IAC9E,OAAO,IAAI,CAAC;AACd,CAAC;AAED;6DAC6D;AAC7D,MAAM,CAAC,MAAM,yBAAyB,GAAG,gEAAgE,CAAC;AAE1G,gFAAgF;AAChF,SAAS,YAAY,CACnB,GAAW,EACX,EAAU,EACV,OAA+C;IAE/C,MAAM,GAAG,GAAmC,EAAE,CAAC;IAC/C,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;QACjC,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,CAAC,EAAE;YAAE,SAAS;QAClB,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,eAAe,CAAC,GAAW,EAAE,GAAW;IACtD,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;IACvD,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC;IACjD,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS;QAAE,OAAO,CAAC,CAAC;IAC1C,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;AAClD,CAAC;AAED,8EAA8E;AAC9E,SAAS,kBAAkB,CAAC,IAAa;IACvC,MAAM,GAAG,GAAG,CAAC,CAAU,EAAkC,EAAE;QACzD,MAAM,KAAK,GAAI,CAAqC,EAAE,UAAU,CAAC;QACjE,OAAO,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAE,KAAiC,CAAC,CAAC,CAAC,IAAI,CAAC;IACjH,CAAC,CAAC;IACF,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,MAAM,GAAG,GAA4B,EAAE,CAAC;QACxC,IAAI,GAAG,GAAG,KAAK,CAAC;QAChB,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;YACxB,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;YACxB,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBAC1B,GAAG,GAAG,IAAI,CAAC;YACb,CAAC;QACH,CAAC;QACD,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1B,CAAC;IACD,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CACrC,IAAY,EACZ,WAA8B,gBAAgB,EAAE,EAChD,eAAuB,kBAAkB;IAEzC,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IAClD,MAAM,UAAU,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAClD,MAAM,UAAU,GAAqB,EAAE,CAAC;IACxC,MAAM,MAAM,GAA0B;QACpC,IAAI,EAAE,OAAO;QACb,QAAQ,EAAE,UAAU,CAAC,QAAQ;QAC7B,cAAc,EAAE,UAAU,CAAC,MAAM;QACjC,YAAY,EAAE,UAAU,CAAC,IAAI;QAC7B,KAAK,EAAE,UAAU,CAAC,KAAK;QACvB,GAAG,EAAE,EAAE;QACP,MAAM,EAAE,EAAE;QACV,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,EAAE;QAChB,iBAAiB,EAAE,EAAE;QACrB,UAAU,EAAE;YACV,IAAI,EAAE,YAAY;YAClB,KAAK,EAAE,UAAU,CAAC,YAAY,CAAC;YAC/B,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC,MAAM;YACtC,eAAe,EAAE,QAAQ,CAAC,eAAe,CAAC,MAAM;SACjD;QACD,UAAU;QACV,UAAU,EAAE,EAAE;KACf,CAAC;IAEF,6CAA6C;IAC7C,IAAI,UAAU,CAAC,KAAK,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;QAC7C,UAAU,CAAC,IAAI,CAAC;YACd,IAAI,EAAE,aAAa;YACnB,IAAI,EAAE,CAAC;YACP,OAAO,EACL,kBAAkB,UAAU,CAAC,KAAK,+BAA+B;gBACjE,kDAAkD;gBAClD,iCAAiC;SACpC,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC;IACrC,MAAM,MAAM,GAAG,GAAG,QAAQ,GAAG,CAAC;IAC9B,MAAM,WAAW,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACvF,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,CAAC;IAErF,MAAM,IAAI,GAAG,CACX,IAAmB,EACnB,OAAe,EACf,QAAsE,EAChE,EAAE;QACR,IAAI,QAAQ,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,eAAe,CAAC;YAAE,OAAO;QAC3F,IAAI,IAAI,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;YAClC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtB,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QACjE,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACzB,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QACxE,CAAC;IACH,CAAC,CAAC;IAEF,6BAA6B;IAC7B,MAAM,YAAY,GAAG,CAAC,IAA6B,EAAE,GAAW,EAAE,IAAY,EAAQ,EAAE;QACtF,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC9D,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,MAAM,KAAK,GACT,IAAI,KAAK,UAAU;YACjB,CAAC,CAAC,uDAAuD;YACzD,CAAC,CAAC,sDAAsD,CAAC;QAC7D,MAAM,OAAO,GACX,OAAO,CAAC,IAAI,KAAK,eAAe;YAC9B,CAAC,CAAC,GAAG,KAAK,SAAS,GAAG,sEAAsE;gBAC1F,mEAAmE;gBACnE,UAAU,OAAO,CAAC,SAAS,iBAAiB;YAC9C,CAAC,CAAC,GAAG,KAAK,SAAS,GAAG,4BAA4B,QAAQ,WAAW,MAAM,OAAO;gBAChF,yDAAyD;gBACzD,gBAAgB,OAAO,CAAC,SAAS,iBAAiB,CAAC;QACzD,IAAI,CACF,EAAE,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EACrK,OAAO,EACP,EAAE,GAAG,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAChC,CAAC;IACJ,CAAC,CAAC;IAEF,uFAAuF;IACvF,IAAI,WAAW,EAAE,CAAC;QAChB,IAAI,QAAQ,GAAY,IAAI,CAAC;QAC7B,IAAI,CAAC;YACH,QAAQ,GAAG,kBAAkB,CAAC,YAAY,CAAC,CAAC;QAC9C,CAAC;QAAC,MAAM,CAAC;YACP,QAAQ,GAAG,IAAI,CAAC;QAClB,CAAC;QACD,MAAM,WAAW,GAAI,QAA6D,EAAE,WAAW,CAAC;QAChG,MAAM,KAAK,GAAG,kBAAkB,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;QAC7D,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBACrC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC;oBAAE,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACtE,YAAY,CAAC,UAAU,EAAE,GAAG,EAAE,eAAe,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC;YACnE,CAAC;QACH,CAAC;QACD,MAAM,QAAQ,GAAG,WAAW,EAAE,qBAAqB,CAAC;QACpD,IAAI,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzE,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,QAAmC,CAAC,EAAE,CAAC;gBACnE,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC;oBAAE,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACtE,YAAY,CAAC,UAAU,EAAE,GAAG,EAAE,eAAe,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC;YACnE,CAAC;QACH,CAAC;IACH,CAAC;IAED,yDAAyD;IACzD,KAAK,MAAM,GAAG,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;QACxE,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAClC,IAAI,eAAe,CAAC,GAAG,CAAC;YAAE,SAAS;QACnC,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;QAC5B,MAAM,GAAG,GAAG,iBAAiB,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,CAAC;QAChE,KAAK,MAAM,GAAG,IAAI,YAAY,CAAC,GAAG,EAAE,yBAAyB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5E,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAAE,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACtF,MAAM,OAAO,GAAG,qBAAqB,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAClE,IAAI,CAAC,OAAO;gBAAE,SAAS;YACvB,MAAM,OAAO,GACX,OAAO,CAAC,IAAI,KAAK,eAAe;gBAC9B,CAAC,CAAC,+CAA+C,GAAG,CAAC,EAAE,gBAAgB;oBACrE,iEAAiE;oBACjE,sDAAsD,QAAQ,IAAI;oBAClE,6EAA6E;gBAC/E,CAAC,CAAC,+CAA+C,GAAG,CAAC,EAAE,mBAAmB,QAAQ,MAAM;oBACtF,oDAAoD;oBACpD,OAAO,QAAQ,kCAAkC,CAAC;YACxD,IAAI,CACF,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EACxL,OAAO,EACP,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CACxB,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -20,6 +20,8 @@ export declare const CHECK_IDS: {
|
|
|
20
20
|
readonly cssNamespace: "linkdesk/no-reserved-class-name";
|
|
21
21
|
/** E6#111b(1.32):命令 id / 协议 id 必须带本仓 `<pluginId>.` 前缀,且不得占用宿主保留面 */
|
|
22
22
|
readonly commandOwnership: "linkdesk/no-unowned-command-id";
|
|
23
|
+
/** E6#111d(1.34):配置键必须带本仓 `<pluginId>.` 前缀(🟡 黄),且不得占用宿主保留键(🔴 红) */
|
|
24
|
+
readonly configOwnership: "linkdesk/no-unowned-config-key";
|
|
23
25
|
};
|
|
24
26
|
export interface DisableIndex {
|
|
25
27
|
/** 1-based 行 → 该行豁免的 id 集合(行级 next-line/line + 文件级 disable 区间) */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"disable.d.ts","sourceRoot":"","sources":["../../../src/eslint/checks/disable.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,SAAS;;;;;IAKpB,oEAAoE;;
|
|
1
|
+
{"version":3,"file":"disable.d.ts","sourceRoot":"","sources":["../../../src/eslint/checks/disable.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,SAAS;;;;;IAKpB,oEAAoE;;IAEpE,qEAAqE;;CAE7D,CAAC;AAoFX,MAAM,WAAW,YAAY;IAC3B,kEAAkE;IAClE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;CAClC;AAED,wEAAwE;AACxE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,YAAY,CAmDnF;AAED,oCAAoC;AACpC,wBAAgB,UAAU,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAGjF"}
|
|
@@ -20,6 +20,8 @@ export const CHECK_IDS = {
|
|
|
20
20
|
cssNamespace: "linkdesk/no-reserved-class-name",
|
|
21
21
|
/** E6#111b(1.32):命令 id / 协议 id 必须带本仓 `<pluginId>.` 前缀,且不得占用宿主保留面 */
|
|
22
22
|
commandOwnership: "linkdesk/no-unowned-command-id",
|
|
23
|
+
/** E6#111d(1.34):配置键必须带本仓 `<pluginId>.` 前缀(🟡 黄),且不得占用宿主保留键(🔴 红) */
|
|
24
|
+
configOwnership: "linkdesk/no-unowned-config-key",
|
|
23
25
|
};
|
|
24
26
|
/** 单遍注释 tokenizer:产出全部 // 行注释与 /* 块注释(块注释可跨行)。 */
|
|
25
27
|
function tokenizeComments(source) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"disable.js","sourceRoot":"","sources":["../../../src/eslint/checks/disable.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,WAAW,EAAE,2BAA2B;IACxC,SAAS,EAAE,iCAAiC;IAC5C,WAAW,EAAE,iCAAiC;IAC9C,YAAY,EAAE,iCAAiC;IAC/C,oEAAoE;IACpE,gBAAgB,EAAE,gCAAgC;
|
|
1
|
+
{"version":3,"file":"disable.js","sourceRoot":"","sources":["../../../src/eslint/checks/disable.ts"],"names":[],"mappings":"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"}
|
package/dist/eslint/index.d.ts
CHANGED
|
@@ -37,4 +37,13 @@ export type { SelectorFormReport, SelectorFormSite, SelectorFormCode } from "./c
|
|
|
37
37
|
*/
|
|
38
38
|
export { runCommandOwnershipCheck, judgeCommandId, loadHostReserved } from "./checks/command-ownership.js";
|
|
39
39
|
export type { CommandOwnershipReport, CommandIdSite, CommandIdCode, CommandIdFace, HostReservedNames, } from "./checks/command-ownership.js";
|
|
40
|
+
/**
|
|
41
|
+
* 🔴 E6#111d(1.34):同一纪律再加一个 —— `runConfigOwnershipCheck`(配置键归属判据)。壳仓只读探针
|
|
42
|
+
* 用它与 `runCommandOwnershipCheck` 拼出「设置面」读数;**同样不是第二条判据路径**
|
|
43
|
+
* (`lint.ts` 的第六条腿用的就是它——同一份实现,改一处两边一起变)。
|
|
44
|
+
* 分级:判据① 占宿主保留键 = 红(进腿报点);判据② 新键不带本仓前缀 = 黄(`configAdvisories`,只打印)。
|
|
45
|
+
* `loadHostReserved` 沿用上面命令腿那一个(**同一个 loader**——⛔ 不许在配置腿上再写一份)。
|
|
46
|
+
*/
|
|
47
|
+
export { runConfigOwnershipCheck, judgeConfigKey, judgeRegisterIdentity, manifestKeyLine } from "./checks/config-ownership.js";
|
|
48
|
+
export type { ConfigOwnershipReport, ConfigKeySite, ConfigKeyCode, ConfigKeyFace } from "./checks/config-ownership.js";
|
|
40
49
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/eslint/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACvD,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAClE,YAAY,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AACxF,YAAY,EAAE,kBAAkB,EAAE,UAAU,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AACpH,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACpF,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAChG,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACvG,YAAY,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAExG;;;;;GAKG;AACH,OAAO,EAAE,wBAAwB,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAC3G,YAAY,EACV,sBAAsB,EACtB,aAAa,EACb,aAAa,EACb,aAAa,EACb,iBAAiB,GAClB,MAAM,+BAA+B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/eslint/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACvD,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAClE,YAAY,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AACxF,YAAY,EAAE,kBAAkB,EAAE,UAAU,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AACpH,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACpF,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAChG,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACvG,YAAY,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAExG;;;;;GAKG;AACH,OAAO,EAAE,wBAAwB,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAC3G,YAAY,EACV,sBAAsB,EACtB,aAAa,EACb,aAAa,EACb,aAAa,EACb,iBAAiB,GAClB,MAAM,+BAA+B,CAAC;AAEvC;;;;;;GAMG;AACH,OAAO,EAAE,uBAAuB,EAAE,cAAc,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/H,YAAY,EAAE,qBAAqB,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC"}
|
package/dist/eslint/index.js
CHANGED
|
@@ -31,4 +31,12 @@ export { runSelectorFormCheck, judgeSelectorForm, SELECTOR_FORM_WHY } from "./ch
|
|
|
31
31
|
* ⚠️ 本格(1.32)该判据**只判黄**(`bin lint` 退出码只看 eslint severity 2),1.49 收紧为红。
|
|
32
32
|
*/
|
|
33
33
|
export { runCommandOwnershipCheck, judgeCommandId, loadHostReserved } from "./checks/command-ownership.js";
|
|
34
|
+
/**
|
|
35
|
+
* 🔴 E6#111d(1.34):同一纪律再加一个 —— `runConfigOwnershipCheck`(配置键归属判据)。壳仓只读探针
|
|
36
|
+
* 用它与 `runCommandOwnershipCheck` 拼出「设置面」读数;**同样不是第二条判据路径**
|
|
37
|
+
* (`lint.ts` 的第六条腿用的就是它——同一份实现,改一处两边一起变)。
|
|
38
|
+
* 分级:判据① 占宿主保留键 = 红(进腿报点);判据② 新键不带本仓前缀 = 黄(`configAdvisories`,只打印)。
|
|
39
|
+
* `loadHostReserved` 沿用上面命令腿那一个(**同一个 loader**——⛔ 不许在配置腿上再写一份)。
|
|
40
|
+
*/
|
|
41
|
+
export { runConfigOwnershipCheck, judgeConfigKey, judgeRegisterIdentity, manifestKeyLine } from "./checks/config-ownership.js";
|
|
34
42
|
//# sourceMappingURL=index.js.map
|
package/dist/eslint/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/eslint/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAEvD,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAElE,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAExF,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAEpF,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAGvG;;;;;GAKG;AACH,OAAO,EAAE,wBAAwB,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/eslint/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAEvD,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAElE,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAExF,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAEpF,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAGvG;;;;;GAKG;AACH,OAAO,EAAE,wBAAwB,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAS3G;;;;;;GAMG;AACH,OAAO,EAAE,uBAAuB,EAAE,cAAc,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC"}
|
package/dist/eslint/lint.d.ts
CHANGED
|
@@ -42,6 +42,23 @@ export interface PluginLintReport {
|
|
|
42
42
|
protocol: number;
|
|
43
43
|
bad: number;
|
|
44
44
|
};
|
|
45
|
+
/** 🟡 E6#111d(1.34)配置键归属判据的**黄灯建议**(判据②:新键不带本仓前缀)——**只打印、不拦** */
|
|
46
|
+
configAdvisories: CheckViolation[];
|
|
47
|
+
/** 配置键归属判据的计数(`runtime` = 源码里注册调用的身份名数;`bad` = 红站点数;`advisory` = 黄建议数) */
|
|
48
|
+
configOwnershipCounts: {
|
|
49
|
+
declared: number;
|
|
50
|
+
defaults: number;
|
|
51
|
+
runtime: number;
|
|
52
|
+
bad: number;
|
|
53
|
+
advisory: number;
|
|
54
|
+
};
|
|
55
|
+
/** 宿主保留键账的加载实况(configKeys / pseudoPluginIds 两栏——账没读到 ⇒ 判据① 空转,必须能看出来) */
|
|
56
|
+
hostConfigLedger: {
|
|
57
|
+
file: string;
|
|
58
|
+
found: boolean;
|
|
59
|
+
configKeys: number;
|
|
60
|
+
pseudoPluginIds: number;
|
|
61
|
+
} | null;
|
|
45
62
|
/** 宿主保留面账的加载实况(账没读到 ⇒ 判据②空转——报告里必须能看出来,不许静默) */
|
|
46
63
|
hostReservedLedger: {
|
|
47
64
|
file: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lint.d.ts","sourceRoot":"","sources":["../../src/eslint/lint.ts"],"names":[],"mappings":"AA4BA,OAAO,EAA4B,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"lint.d.ts","sourceRoot":"","sources":["../../src/eslint/lint.ts"],"names":[],"mappings":"AA4BA,OAAO,EAA4B,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAU/E,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAKvD,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,cAAc,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,IAAI,EAAE,OAAO,EAAE,CAAC;IAChB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,4DAA4D;IAC5D,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,gEAAgE;IAChE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,+DAA+D;IAC/D,eAAe,EAAE,cAAc,EAAE,CAAC;IAClC,+CAA+C;IAC/C,WAAW,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,6DAA6D;IAC7D,kBAAkB,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/D,wEAAwE;IACxE,sBAAsB,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7F,iEAAiE;IACjE,gBAAgB,EAAE,cAAc,EAAE,CAAC;IACnC,0EAA0E;IAC1E,qBAAqB,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9G,yEAAyE;IACzE,gBAAgB,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACvG,gDAAgD;IAChD,kBAAkB,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAC;QAAC,eAAe,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CAC3G;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA6J5G;AAED,2DAA2D;AAC3D,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAkGvE"}
|
package/dist/eslint/lint.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `runPluginLint()`——`npm run lint` 门禁编排(E6#54d):eslint 规则腿 +
|
|
2
|
+
* `runPluginLint()`——`npm run lint` 门禁编排(E6#54d):eslint 规则腿 + 六条 check 扫描腿双轨。
|
|
3
3
|
*
|
|
4
4
|
* E6#109h-b①:`check-css-namespace` 腿升级为**双判据**——「裸定义类名/关键帧必须以本仓 `<pluginId>-`
|
|
5
5
|
* 开头」(`checks/plugin-prefix.ts`,拍板 Q1=(A),**不需要任何清单**)⊕「不得裸定义宿主保留名」
|
|
@@ -35,6 +35,7 @@ import { runPluginPrefixCheck } from "./checks/plugin-prefix.js";
|
|
|
35
35
|
import { runTokenScopeCheck } from "./checks/token-scope.js";
|
|
36
36
|
import { runSelectorFormCheck } from "./checks/selector-form.js";
|
|
37
37
|
import { runCommandOwnershipCheck } from "./checks/command-ownership.js";
|
|
38
|
+
import { runConfigOwnershipCheck } from "./checks/config-ownership.js";
|
|
38
39
|
import {} from "./checks/scan.js";
|
|
39
40
|
/** 示例用的门禁 id(打印知情绕行格式);伪 id 与 check 脚本 CHECK_IDS 同源 */
|
|
40
41
|
const LEG_HINT_ID = "linkdesk/no-hardcoded-hex";
|
|
@@ -120,6 +121,16 @@ export async function runPluginLint(root, options = {}) {
|
|
|
120
121
|
* 前缀腿在 `plugin.json:1` 上会各报一次——**那是两件不同的事**(一个说身份读不到,一个说前缀拿不到)。
|
|
121
122
|
*/
|
|
122
123
|
const commandOwnership = runCommandOwnershipCheck(absRoot);
|
|
124
|
+
/**
|
|
125
|
+
* 🔴 E6#111d(1.34):第六条 check 腿 —— **配置键归属**(`checks/config-ownership.ts`)。
|
|
126
|
+
* 三面:声明面(`contributes.configuration.properties` 的键)/弱默认值面(`contributes.configurationDefaults`
|
|
127
|
+
* 的键)/运行时面(源码里 `registerConfiguration*` 第一个实参 = 身份字面量)。
|
|
128
|
+
* 🔴 **分级与前一条腿不同**:判据①(占用宿主保留键)=**红**,进腿报点;判据②(新键不带本仓前缀)=**黄**,
|
|
129
|
+
* 进 `configAdvisories` 只打印不拦。理由:① 是真害(顶替宿主设置面、用户数据被串),
|
|
130
|
+
* ② 是存量欠账(官方 18 仓 19 个键,运行时都不拦——见 1.34 任务书 §五)。
|
|
131
|
+
* ⚠️ 与另几条腿**刻意不合并**(同命令腿的理由):本腿的红站点将来要独立收紧/独立统计。
|
|
132
|
+
*/
|
|
133
|
+
const configOwnership = runConfigOwnershipCheck(absRoot);
|
|
123
134
|
const prefixKeys = new Set(prefix.violations.map((v) => `${v.file}:${v.line}`));
|
|
124
135
|
const tokenKeys = new Set(tokenScope.violations.map((v) => `${v.file}:${v.line}`));
|
|
125
136
|
const formKeys = new Set(selectorForm.violations.map((v) => `${v.file}:${v.line}`));
|
|
@@ -143,8 +154,13 @@ export async function runPluginLint(root, options = {}) {
|
|
|
143
154
|
label: "check-command-ownership",
|
|
144
155
|
violations: commandOwnership.violations,
|
|
145
156
|
},
|
|
157
|
+
{
|
|
158
|
+
id: "linkdesk/no-unowned-config-key(配置键不得占用宿主保留键;新键应带本仓 <pluginId>. 前缀)",
|
|
159
|
+
label: "check-config-ownership",
|
|
160
|
+
violations: configOwnership.violations,
|
|
161
|
+
},
|
|
146
162
|
];
|
|
147
|
-
const totalCheckViolations = css.length + font.length + spacing.length + namespace.length + commandOwnership.violations.length;
|
|
163
|
+
const totalCheckViolations = css.length + font.length + spacing.length + namespace.length + commandOwnership.violations.length + configOwnership.violations.length;
|
|
148
164
|
return {
|
|
149
165
|
files: results.length,
|
|
150
166
|
eslintRows,
|
|
@@ -163,6 +179,15 @@ export async function runPluginLint(root, options = {}) {
|
|
|
163
179
|
bad: commandOwnership.sites.length,
|
|
164
180
|
},
|
|
165
181
|
hostReservedLedger: commandOwnership.hostLedger,
|
|
182
|
+
configAdvisories: configOwnership.advisories,
|
|
183
|
+
configOwnershipCounts: {
|
|
184
|
+
declared: configOwnership.declaredKeys.length,
|
|
185
|
+
defaults: configOwnership.defaultsKeys.length,
|
|
186
|
+
runtime: configOwnership.runtimeIdentities.length,
|
|
187
|
+
bad: configOwnership.red.length,
|
|
188
|
+
advisory: configOwnership.yellow.length,
|
|
189
|
+
},
|
|
190
|
+
hostConfigLedger: configOwnership.hostLedger,
|
|
166
191
|
};
|
|
167
192
|
}
|
|
168
193
|
/** 打印报告(人机双通道的即时反馈环);返回进程退出码(真 error 才 1,WARN 永不 fail)。 */
|
|
@@ -221,6 +246,26 @@ export function renderPluginLintReport(report) {
|
|
|
221
246
|
lines.push(` ⚠ 宿主保留面账没读到(${report.hostReservedLedger.file})——判据②(不得占用宿主保留面)本轮**空转**。` +
|
|
222
247
|
`SDK 安装不完整?重装 @linkdesk/plugin-sdk 后再跑。`);
|
|
223
248
|
}
|
|
249
|
+
// 🟡 E6#111d(1.34)配置键归属:黄灯建议(判据②)+ 三面读数
|
|
250
|
+
if (report.configAdvisories.length > 0) {
|
|
251
|
+
lines.push(`
|
|
252
|
+
🟡 check-config-ownership(配置键归属 · 新键不带本仓前缀):${report.configAdvisories.length} 处**建议**(不拦 build)——` +
|
|
253
|
+
`键是用户数据面,同名键被两个插件声明时只有一个能生效;改成"<你的 pluginId>.<名字>"归属才唯一。`);
|
|
254
|
+
for (const v of report.configAdvisories)
|
|
255
|
+
lines.push(` ${v.file}:${v.line} ${v.message}`);
|
|
256
|
+
}
|
|
257
|
+
const cfg = report.configOwnershipCounts;
|
|
258
|
+
lines.push(`
|
|
259
|
+
🔴 check-config-ownership(配置键归属):` +
|
|
260
|
+
`声明面 ${cfg.declared} 键 / 弱默认值面 ${cfg.defaults} 键 / 运行时面 ${cfg.runtime} 身份——` +
|
|
261
|
+
(cfg.bad === 0
|
|
262
|
+
? `无占用宿主保留键的站点。`
|
|
263
|
+
: `${cfg.bad} 处占用**宿主保留键**(宿主的 app.* 设置面,运行时会直接拒绝注册)。`) +
|
|
264
|
+
(cfg.advisory > 0 ? `另有 ${cfg.advisory} 处前缀建议(见上)。` : ``));
|
|
265
|
+
if (report.hostConfigLedger) {
|
|
266
|
+
lines.push(` 账 configKeys ${report.hostConfigLedger.configKeys} 个 / 伪身份 ${report.hostConfigLedger.pseudoPluginIds} 个` +
|
|
267
|
+
(report.hostConfigLedger.found ? `(${report.hostConfigLedger.file})` : ` ⚠ 账没读到——判据① 本轮**空转**`));
|
|
268
|
+
}
|
|
224
269
|
lines.push(`\n门禁 = 警告不是封锁(07 §六·三档):未处理偏离可修可绕——知情绕行写标准注释\n` +
|
|
225
270
|
` // eslint-disable-next-line ${LEG_HINT_ID} -- 理由 (行级)\n` +
|
|
226
271
|
` /* eslint-disable ${LEG_HINT_ID} -- 内容画布 */ (文件级:内容/画布整文件豁免)\n` +
|
package/dist/eslint/lint.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lint.js","sourceRoot":"","sources":["../../src/eslint/lint.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,wBAAwB,EAA0B,MAAM,aAAa,CAAC;AAC/E,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAuB,MAAM,kBAAkB,CAAC;AAEvD,uDAAuD;AACvD,MAAM,WAAW,GAAG,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"lint.js","sourceRoot":"","sources":["../../src/eslint/lint.ts"],"names":[],"mappings":"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"}
|
package/dist/validate.d.ts
CHANGED
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
* `plugin.json:<instancePath 美化>: <中文消息>`;语法错才有 :行:列。
|
|
24
24
|
*/
|
|
25
25
|
/**
|
|
26
|
-
* pluginId 形状约束——复制自壳 src/pluginLoader/manifest.ts:64(独立 npm 包不能 import @src 壳源码;
|
|
26
|
+
* pluginId 形状约束——复制自壳 src/pluginLoader/discovery/manifest.ts:64(独立 npm 包不能 import @src 壳源码;
|
|
27
27
|
* 加载契约 = 安装目录名 → validateInstallManifest 兜底,E6#7 钉死)。防路径穿越字符直通文件系统。
|
|
28
28
|
*/
|
|
29
29
|
export declare const SAFE_PLUGIN_ID: RegExp;
|
package/dist/validate.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAuBH;;;GAGG;AACH,eAAO,MAAM,cAAc,QAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAuBH;;;GAGG;AACH,eAAO,MAAM,cAAc,QAAiC,CAAC;AAwB7D,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AA2DD,+DAA+D;AAC/D,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,kBAAkB,GAAG,MAAM,CAAC;CACrC;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,OAAO,GAAG,QAAQ,EAAE,CAc9D;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CA0B/E;AAED,yEAAyE;AACzE,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAWxD;AA+FD,oDAAoD;AACpD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAGlE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAqCjE;AA8BD,uFAAuF;AACvF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAEhE;AAED,yHAAyH;AACzH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAEpE"}
|
package/dist/validate.js
CHANGED
|
@@ -41,10 +41,30 @@ import Ajv from "ajv"; // 默认构造 = draft-07——theme.schema(E5.8#129
|
|
|
41
41
|
*/
|
|
42
42
|
const SCHEMAS_DIR = resolve(dirname(fileURLToPath(import.meta.url)), "../schemas");
|
|
43
43
|
/**
|
|
44
|
-
* pluginId 形状约束——复制自壳 src/pluginLoader/manifest.ts:64(独立 npm 包不能 import @src 壳源码;
|
|
44
|
+
* pluginId 形状约束——复制自壳 src/pluginLoader/discovery/manifest.ts:64(独立 npm 包不能 import @src 壳源码;
|
|
45
45
|
* 加载契约 = 安装目录名 → validateInstallManifest 兜底,E6#7 钉死)。防路径穿越字符直通文件系统。
|
|
46
46
|
*/
|
|
47
47
|
export const SAFE_PLUGIN_ID = /^[A-Za-z0-9][A-Za-z0-9._-]*$/;
|
|
48
|
+
/**
|
|
49
|
+
* 宿主伪身份(`app` / `appearance` / `update`)——**读账**(包内 `schemas/host-reserved.json` 的
|
|
50
|
+
* `pseudoPluginIds`),⛔ 不在这里手写一份清单:手写 = 第二真相源(账里加一个伪身份时这份不会跟着变)。
|
|
51
|
+
* 账读不到 ⇒ 这条判据**退化为不生效**(不是「全部合法」——形状校验 SAFE_PLUGIN_ID 仍在)。
|
|
52
|
+
*
|
|
53
|
+
* 🔴 为什么身份禁令不塞进 `SAFE_PLUGIN_ID` 的正则里(E6#111d/1.34 拍板):那个正则的语义是
|
|
54
|
+
* **字符集 + 路径安全**(三个调用点共用,`src/core/api/types.ts:138` 的文档也照着它写)。
|
|
55
|
+
* 把身份规则折进去 ⇒ 失败信息分不清「形状不对」还是「你用了宿主的身份」,且静默改变了这个导出正则
|
|
56
|
+
* 对其它调用点的含义。两条规则分开写 = 两条独立可测判据(manifest schema 那一层没有代码分支,
|
|
57
|
+
* 只能在 pattern 里用负向先行断言,故那一层是正则)。
|
|
58
|
+
*/
|
|
59
|
+
const HOST_PSEUDO_PLUGIN_IDS = (() => {
|
|
60
|
+
try {
|
|
61
|
+
const raw = JSON.parse(readFileSync(resolve(SCHEMAS_DIR, "host-reserved.json"), "utf8"));
|
|
62
|
+
return raw.pseudoPluginIds ?? [];
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
return [];
|
|
66
|
+
}
|
|
67
|
+
})();
|
|
48
68
|
/**
|
|
49
69
|
* 已移除的 manifest 字段墓碑——**这不是「第二份字段清单」**(合法字段的真源仍是 plugin.schema.json,
|
|
50
70
|
* 不手写第二份是文件头铁律)。它回答的是**另一个问题**:「什么字段曾经合法、现已移除、替代方案是什么」。
|
|
@@ -146,6 +166,12 @@ export function derivePluginId(manifest, sourceDirName) {
|
|
|
146
166
|
throw new Error(`pluginId "${pluginId}" 不合法(只允许字母/数字/._-,开头须为字母或数字)` +
|
|
147
167
|
`——plugin.json 未声明 pluginId 时以项目目录名兜底,请改名目录或在 plugin.json 声明 pluginId`);
|
|
148
168
|
}
|
|
169
|
+
// E6#111d(1.34)判据 4:pluginId 不得落在宿主伪身份面(这条与形状判据是**两件事**,故两条分支)
|
|
170
|
+
if (HOST_PSEUDO_PLUGIN_IDS.includes(pluginId)) {
|
|
171
|
+
throw new Error(`pluginId "${pluginId}" 是宿主自己的身份:"app" / "appearance" / "update" 是宿主自己的身份` +
|
|
172
|
+
`(宿主用它注册配置/外观/更新),插件用它 ⇒ 冲突检测永不响、注销会摘掉宿主条目。` +
|
|
173
|
+
`改用别的 id(例如 "${pluginId}-你的插件名")——目录名兜底这条路径同样受限,故也必须改目录名。`);
|
|
174
|
+
}
|
|
149
175
|
return pluginId;
|
|
150
176
|
}
|
|
151
177
|
/** jsonc 读插件 manifest——注释/尾逗号容忍,语法错抛清晰错误。validate 与 packager 共用同一读取路径 */
|
package/dist/validate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnF,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,OAAO,MAAM,kBAAkB,CAAC,CAAC,gFAAgF;AACxH,OAAO,GAAG,MAAM,KAAK,CAAC,CAAC,qFAAqF;AAG5G;;;;;;;;;;GAUG;AACH,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;AAEnF;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnF,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,OAAO,MAAM,kBAAkB,CAAC,CAAC,gFAAgF;AACxH,OAAO,GAAG,MAAM,KAAK,CAAC,CAAC,qFAAqF;AAG5G;;;;;;;;;;GAUG;AACH,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;AAEnF;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,8BAA8B,CAAC;AAE7D;;;;;;;;;;GAUG;AACH,MAAM,sBAAsB,GAAsB,CAAC,GAAG,EAAE;IACtD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,WAAW,EAAE,oBAAoB,CAAC,EAAE,MAAM,CAAC,CAEtF,CAAC;QACF,OAAO,GAAG,CAAC,eAAe,IAAI,EAAE,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC,CAAC,EAAE,CAAC;AASL;;;;;;;;;;;;;;GAcG;AACH,MAAM,uBAAuB,GAA2B;IACtD,SAAS,EAAE,2CAA2C;IACtD,MAAM,EAAE,kCAAkC;CAC3C,CAAC;AAEF,4CAA4C;AAC5C,SAAS,2BAA2B,CAAC,QAAiB,EAAE,IAAY;IAClE,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IACzD,MAAM,CAAC,GAAG,QAAmC,CAAC;IAC9C,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,uBAAuB,CAAC,EAAE,CAAC;QAC3E,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;YACnD,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,OAAO,KAAK,iCAAiC,WAAW,EAAE,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAS,sBAAsB,CAAC,QAAiB,EAAE,IAAY;IAC7D,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IACzD,MAAM,CAAC,GAAG,QAAmC,CAAC;IAC9C,mEAAmE;IACnE,yDAAyD;IACzD,IAAI,OAAO,CAAC,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,EAAE,CAAC;IAC1E,OAAO;QACL,GAAG,IAAI,gDAAgD;YACrD,uCAAuC;YACvC,oDAAoD;KACvD,CAAC;AACJ,CAAC;AAQD;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAiB;IAChD,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IACzD,MAAM,CAAC,GAAG,QAAmC,CAAC;IAC9C,MAAM,GAAG,GAAe,EAAE,CAAC;IAC3B,MAAM,IAAI,GAAG,CAAC,CAAU,EAAE,MAA0B,EAAQ,EAAE;QAC5D,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;YAAE,OAAO;QAC5D,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,CAA4B,CAAC,EAAE,CAAC;YAC5D,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE;gBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC,CAAC;IACF,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACrB,MAAM,CAAC,GAAG,CAAC,CAAC,WAAkD,CAAC;IAC/D,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,kBAAkB,CAAC,CAAC;IAClC,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,QAAiB,EAAE,aAAqB;IACrE,MAAM,CAAC,GAAG,QAAsD,CAAC;IACjE,IAAI,QAAgB,CAAC;IACrB,MAAM,KAAK,GAAG,CAAC,EAAE,QAAQ,CAAC;IAC1B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAC1C,QAAQ,GAAG,aAAa,CAAC;IAC3B,CAAC;SAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACnD,CAAC;SAAM,CAAC;QACN,QAAQ,GAAG,KAAK,CAAC;IACnB,CAAC;IACD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CACb,aAAa,QAAQ,+BAA+B;YAClD,sEAAsE,CACzE,CAAC;IACJ,CAAC;IACD,+DAA+D;IAC/D,IAAI,sBAAsB,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CACb,aAAa,QAAQ,qDAAqD;YACxE,4CAA4C;YAC5C,eAAe,QAAQ,mCAAmC,CAC7D,CAAC;IACJ,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACxC,MAAM,WAAW,GAAuB,EAAE,CAAC;IAC3C,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC,CAAC;IACpG,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,eAAe,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACnE,MAAM,IAAI,KAAK,CACb,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,GAAG,KAAK,KAAK,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,oBAAoB,CACzG,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,oEAAoE;AACpE,SAAS,eAAe,CAAC,IAAY,EAAE,MAAc;IACnD,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACrB,IAAI,EAAE,CAAC;YACP,GAAG,GAAG,CAAC,CAAC;QACV,CAAC;aAAM,CAAC;YACN,GAAG,EAAE,CAAC;QACR,CAAC;IACH,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AACvB,CAAC;AASD;;;GAGG;AACH,MAAM,aAAa,GAAG,IAAI,GAAG,EAA0B,CAAC;AACxD,SAAS,kBAAkB,CAAC,cAAsB;IAChD,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IACjD,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAC1B,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAAC;IACpE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAyB,CAAC;IACvD,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IACxF,oEAAoE;IACpE,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAe,CAAC;IACpD,mCAAmC;IACnC,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IACzD,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,MAAgB,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAmB;QAC5B,KAAK,CAAC,IAAa;YACjB,MAAM,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAY,CAAC;YACrC,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC;YACrC,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,EAAE,EAAE;KACX,CAAC;IACF,aAAa,CAAC,GAAG,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACzC,OAAO,KAAK,CAAC;AACf,CAAC;AAED,kDAAkD;AAClD,SAAS,kBAAkB;IACzB,OAAO,kBAAkB,CAAC,oBAAoB,CAAC,CAAC;AAClD,CAAC;AAED,4FAA4F;AAC5F,SAAS,iBAAiB;IACxB,OAAO,kBAAkB,CAAC,mBAAmB,CAAC,CAAC;AACjD,CAAC;AAED,0FAA0F;AAC1F,SAAS,qBAAqB;IAC5B,OAAO,kBAAkB,CAAC,wBAAwB,CAAC,CAAC;AACtD,CAAC;AAED,mFAAmF;AACnF,SAAS,kBAAkB,CAAC,YAAoB;IAC9C,IAAI,CAAC,YAAY;QAAE,OAAO,IAAI,CAAC;IAC/B,OAAO,YAAY;SAChB,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;SAClB,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC;SAC9B,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC;SAC5B,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACzB,CAAC;AAED,wEAAwE;AACxE,SAAS,iBAAiB,CAAC,GAAgB;IACzC,MAAM,EAAE,GAAG,kBAAkB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAChD,IAAI,GAAG,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAI,GAAG,CAAC,MAAsC,CAAC,eAAe,CAAC;QAC5E,OAAO,GAAG,EAAE,aAAa,OAAO,GAAG,CAAC;IACtC,CAAC;IACD,IAAI,GAAG,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAI,GAAG,CAAC,MAA2B,CAAC,IAAI,CAAC;QACnD,OAAO,GAAG,EAAE,YAAY,IAAI,EAAE,CAAC;IACjC,CAAC;IACD,IAAI,GAAG,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;QAC5B,OAAO,GAAG,EAAE,UAAU,IAAI,CAAC,SAAS,CAAE,GAAG,CAAC,MAAoC,CAAC,YAAY,CAAC,EAAE,CAAC;IACjG,CAAC;IACD,OAAO,GAAG,EAAE,mBAAmB,GAAG,CAAC,OAAO,EAAE,CAAC;AAC/C,CAAC;AAED,oDAAoD;AACpD,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,MAAc;IACvD,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACnC,OAAO,GAAG,KAAK,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,IAAI,CAAC,CAAC;AACnF,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAE5B,IAAI,QAAiB,CAAC;IACtB,IAAI,CAAC;QACH,QAAQ,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;IAC3F,CAAC;IAED,uBAAuB;IACvB,MAAM,SAAS,GAAG,kBAAkB,EAAE,CAAC;IACvC,MAAM,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACrC,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,KAAK,MAAM,CAAC,IAAI,SAAS,CAAC,MAAM;YAAE,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACjF,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAClC,CAAC;IAED,yCAAyC;IACzC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACvC,KAAK,MAAM,IAAI,IAAI,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9C,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QAC1C,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC;YACnC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,OAAO,IAAI,CAAC,MAAM,iBAAiB,CAAC,CAAC;YAC5D,SAAS;QACX,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACxB,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,OAAO,IAAI,CAAC,MAAM,YAAY,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAED,2DAA2D;IAC3D,sDAAsD;IACtD,MAAM,QAAQ,GAAG,CAAC,GAAG,2BAA2B,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,GAAG,sBAAsB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;IAE7G,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AAC9F,CAAC;AAED,0EAA0E;AAE1E;;;GAGG;AACH,SAAS,kBAAkB,CAAC,IAAY;IACtC,IAAI,CAAC;QACH,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;IAC1D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,eAAe,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,yBAAyB,EAAE,CAAC;IAC9H,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,gBAAgB,CAAC,IAAY,EAAE,SAAyB;IAC/D,MAAM,IAAI,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,OAAO,IAAI,IAAI;QAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;IACnE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAChC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IAC5G,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;AACrC,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,OAAO,gBAAgB,CAAC,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC;AACrD,CAAC;AAED,yHAAyH;AACzH,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAChD,OAAO,gBAAgB,CAAC,IAAI,EAAE,qBAAqB,EAAE,CAAC,CAAC;AACzD,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@linkdesk/plugin-sdk",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.31",
|
|
4
4
|
"description": "@linkdesk/plugin-sdk——LinkDesk 插件作者 SDK(对标 @types/vscode):window.linkdesk.* 类型 + 一键 build(.linkdesk-plugin) + dev 宿主 + plugin.json 验证 + eslint 门禁(E6#54d)。作者 npm i 后零壳源码依赖。",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"$comment": "宿主保留面账(生成式·定稿 E6#111b/1.32)——插件不得占用这些名字;改动本账 = 一次公共面决策,改完壳仓命令/设置/协议面必须重跑 scripts/gen-host-reserved.mjs(npm run audit:plugin-scope:regen
|
|
2
|
+
"$comment": "宿主保留面账(生成式·定稿 E6#111b/1.32)——插件不得占用这些名字;改动本账 = 一次公共面决策,改完壳仓命令/设置/协议面必须重跑 scripts/gen-host-reserved.mjs(npm run audit:plugin-scope:regen)。⚠️ configKeys 含**退役键**(曾被宿主使用、现已不再写入的键):退役键**不腾出保留面**——老 settings.json 里可能还留着值,插件此刻占它 = 顶掉的是宿主的历史数据(且迁移代码仍会读它)。",
|
|
3
3
|
"commandPrefixes": [
|
|
4
4
|
"app.",
|
|
5
5
|
"core.",
|
|
@@ -24,13 +24,20 @@
|
|
|
24
24
|
"app.glassSaturate",
|
|
25
25
|
"app.glassTint",
|
|
26
26
|
"app.iconTheme",
|
|
27
|
+
"app.language",
|
|
28
|
+
"app.menuStyle",
|
|
27
29
|
"app.mixBackground",
|
|
28
30
|
"app.mixFont",
|
|
29
31
|
"app.mixMode",
|
|
30
32
|
"app.mixReset",
|
|
33
|
+
"app.osIntegration.dirMenu",
|
|
34
|
+
"app.osIntegration.fileAssoc",
|
|
35
|
+
"app.osIntegration.fileMenu",
|
|
36
|
+
"app.schemaVersion",
|
|
31
37
|
"app.surfaceRadius",
|
|
32
38
|
"app.theme",
|
|
33
39
|
"app.themeColor",
|
|
40
|
+
"app.themeColorMode",
|
|
34
41
|
"app.uiFontScale",
|
|
35
42
|
"app.update.mode",
|
|
36
43
|
"app.update.showReleaseNotes",
|
|
@@ -13,8 +13,8 @@
|
|
|
13
13
|
},
|
|
14
14
|
"pluginId": {
|
|
15
15
|
"type": "string",
|
|
16
|
-
"pattern": "^(?!ldk
|
|
17
|
-
"description": "🔴 Plugin identity — immutable once published (mirrors VS Code's publisher.name). Everything keys off it: install directory {userData}/plugins/<pluginId>/, distribution file name <pluginId>.linkdesk-plugin, marketplace dedup key, uninstall tombstone key, and update reconciliation. Strongly recommended to declare it explicitly: when omitted it falls back to the project directory name, but repository names and local directory names are free-form — rename the directory and the identity changes with it, and none of the five consequences (two install directories side by side / tombstone mismatch / duplicate marketplace entries / silently broken update chain / plugin data appearing lost) reports an error. Character set: letters, digits, `.`, `_`, `-`; the first character must be a letter or a digit. It must not start with `ldk-`: that whole namespace belongs to the host and its shared components, and since your CSS class prefix is derived from this id (`<pluginId>-your-class`), an `ldk-` id would land in host territory by construction and void the plugin-prefix rule (SDK check-css-namespace leg)."
|
|
16
|
+
"pattern": "^(?!(ldk-|app$|appearance$|update$))[A-Za-z0-9][A-Za-z0-9._-]*$",
|
|
17
|
+
"description": "🔴 Plugin identity — immutable once published (mirrors VS Code's publisher.name). Everything keys off it: install directory {userData}/plugins/<pluginId>/, distribution file name <pluginId>.linkdesk-plugin, marketplace dedup key, uninstall tombstone key, and update reconciliation. Strongly recommended to declare it explicitly: when omitted it falls back to the project directory name, but repository names and local directory names are free-form — rename the directory and the identity changes with it, and none of the five consequences (two install directories side by side / tombstone mismatch / duplicate marketplace entries / silently broken update chain / plugin data appearing lost) reports an error. Character set: letters, digits, `.`, `_`, `-`; the first character must be a letter or a digit. It must not start with `ldk-`: that whole namespace belongs to the host and its shared components, and since your CSS class prefix is derived from this id (`<pluginId>-your-class`), an `ldk-` id would land in host territory by construction and void the plugin-prefix rule (SDK check-css-namespace leg). It must also not be exactly `app`, `appearance`, or `update`: those three are the **host's own registration identities** (the shell registers its general / appearance / update configuration under them). A plugin using one of them would never trip the cross-plugin key-ownership check (the host already owns that identity) and its uninstall disposer would remove the host's own entries — the runtime rejects such registrations, and this pattern makes the manifest fail validation first."
|
|
18
18
|
},
|
|
19
19
|
"type": {
|
|
20
20
|
"type": "string",
|