@linkdesk/plugin-sdk 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +21 -0
- package/dist/bin.js +12 -0
- package/dist/bin.js.map +1 -1
- package/dist/eslint/checks/css-hardcode.d.ts +14 -0
- package/dist/eslint/checks/css-hardcode.d.ts.map +1 -0
- package/dist/eslint/checks/css-hardcode.js +87 -0
- package/dist/eslint/checks/css-hardcode.js.map +1 -0
- package/dist/eslint/checks/disable.d.ts +29 -0
- package/dist/eslint/checks/disable.d.ts.map +1 -0
- package/dist/eslint/checks/disable.js +151 -0
- package/dist/eslint/checks/disable.js.map +1 -0
- package/dist/eslint/checks/font-scale.d.ts +19 -0
- package/dist/eslint/checks/font-scale.d.ts.map +1 -0
- package/dist/eslint/checks/font-scale.js +127 -0
- package/dist/eslint/checks/font-scale.js.map +1 -0
- package/dist/eslint/checks/scan.d.ts +20 -0
- package/dist/eslint/checks/scan.d.ts.map +1 -0
- package/dist/eslint/checks/scan.js +63 -0
- package/dist/eslint/checks/scan.js.map +1 -0
- package/dist/eslint/checks/spacing-grid.d.ts +14 -0
- package/dist/eslint/checks/spacing-grid.d.ts.map +1 -0
- package/dist/eslint/checks/spacing-grid.js +54 -0
- package/dist/eslint/checks/spacing-grid.js.map +1 -0
- package/dist/eslint/index.d.ts +15 -0
- package/dist/eslint/index.d.ts.map +1 -0
- package/dist/eslint/index.js +13 -0
- package/dist/eslint/index.js.map +1 -0
- package/dist/eslint/lint.d.ts +26 -0
- package/dist/eslint/lint.d.ts.map +1 -0
- package/dist/eslint/lint.js +112 -0
- package/dist/eslint/lint.js.map +1 -0
- package/dist/eslint/preset.d.ts +11 -0
- package/dist/eslint/preset.d.ts.map +1 -0
- package/dist/eslint/preset.js +88 -0
- package/dist/eslint/preset.js.map +1 -0
- package/dist/eslint/rules.d.ts +28 -0
- package/dist/eslint/rules.d.ts.map +1 -0
- package/dist/eslint/rules.js +441 -0
- package/dist/eslint/rules.js.map +1 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/validate.d.ts +9 -2
- package/dist/validate.d.ts.map +1 -1
- package/dist/validate.js +88 -24
- package/dist/validate.js.map +1 -1
- package/dist/vite-config.d.ts +29 -8
- package/dist/vite-config.d.ts.map +1 -1
- package/dist/vite-config.js +377 -67
- package/dist/vite-config.js.map +1 -1
- package/package.json +20 -3
- package/schemas/icon-theme.schema.json +97 -0
- package/schemas/plugin.schema.json +696 -687
- package/schemas/theme.schema.json +109 -0
package/dist/validate.js
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
2
|
+
* 作者面 schema 验证工具(E6#5 立 plugin.json;E6#60 扩 theme/icon 数据文件)。
|
|
3
|
+
* - validatePluginJson(plugin.schema.json,2020-12)——jsonc 解析 + JSON Schema + i18n 文件存在性。
|
|
4
|
+
* - validateThemeJson / validateIconThemeJson(theme.schema.json draft-07 / icon-theme.schema.json 2020-12)——
|
|
5
|
+
* E6#60 主题/图标作者数据文件校验,镜像 scripts/check-theme-schema.mjs 同规则(同一 schema 文件编译,永不漂移)。
|
|
6
|
+
* 纯逻辑、无 vite import——validatePluginJson 与 bin / defineLinkdeskPluginConfig 三方共用。
|
|
4
7
|
*
|
|
5
8
|
* 设计裁决:
|
|
6
9
|
* - **解析走 jsonc-parser**(对齐壳 E6#55)——作者 plugin.json 可写注释/尾逗号(对标 VS Code
|
|
@@ -20,9 +23,14 @@ import { existsSync, readFileSync } from "node:fs";
|
|
|
20
23
|
import { basename, dirname, isAbsolute, relative, resolve } from "node:path";
|
|
21
24
|
import { fileURLToPath } from "node:url";
|
|
22
25
|
import * as jsonc from "jsonc-parser";
|
|
23
|
-
import Ajv2020 from "ajv/dist/2020.js"; // ajv 无 exports
|
|
24
|
-
|
|
25
|
-
|
|
26
|
+
import Ajv2020 from "ajv/dist/2020.js"; // 2020-12(plugin.schema / icon-theme.schema)——ajv 无 exports 映射,Node ESM 需显式 .js
|
|
27
|
+
import Ajv from "ajv"; // 默认构造 = draft-07——theme.schema(E5.8#129)是 draft-07,draft 自动判定见 compileDataValidator
|
|
28
|
+
/**
|
|
29
|
+
* 包内 schema 副本定位——dist/validate.js → ../schemas = 包根/schemas;src 直跑同样上溯一级命中。
|
|
30
|
+
* 三份 author 面 schema(plugin/theme/icon-theme)包内副本字节同步由 scripts/check-plugin-schema-sync.mjs 守卫
|
|
31
|
+
* (E6#60:theme/icon-theme 收编——live public/schemas + 包内拷贝,作者 npm i @linkdesk/plugin-sdk 即达)。
|
|
32
|
+
*/
|
|
33
|
+
const SCHEMAS_DIR = new URL("../schemas/", import.meta.url);
|
|
26
34
|
/**
|
|
27
35
|
* pluginId 形状约束——复制自壳 src/pluginLoader/manifest.ts:64(独立 npm 包不能 import @src 壳源码;
|
|
28
36
|
* 加载契约 = 安装目录名 → validateInstallManifest 兜底,E6#7 钉死)。防路径穿越字符直通文件系统。
|
|
@@ -101,24 +109,45 @@ function offsetToLineCol(text, offset) {
|
|
|
101
109
|
}
|
|
102
110
|
return { line, col };
|
|
103
111
|
}
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
const
|
|
111
|
-
|
|
112
|
+
/**
|
|
113
|
+
* ajv 编译 schema 单例——schema 读一次 compile 一次(同一 schema 全进程复用)。按 schema 文件内 $schema
|
|
114
|
+
* 自动选构造($schema 是权威,防手选 Ctor 与文件漂移):2020-12 → ajv/dist/2020;draft-07 → ajv 默认。
|
|
115
|
+
*/
|
|
116
|
+
const compiledCache = new Map();
|
|
117
|
+
function getSchemaValidator(schemaFileName) {
|
|
118
|
+
const cached = compiledCache.get(schemaFileName);
|
|
119
|
+
if (cached)
|
|
120
|
+
return cached;
|
|
121
|
+
const raw = readFileSync(fileURLToPath(new URL(schemaFileName, SCHEMAS_DIR)), "utf8");
|
|
122
|
+
const parsed = JSON.parse(raw);
|
|
123
|
+
const is2020 = typeof parsed.$schema === "string" && parsed.$schema.includes("2020-12");
|
|
124
|
+
// 同一构造器签名(allErrors/strict + compile)——类型面以 Ajv 为准,运行期仍是 Ajv2020 实例
|
|
125
|
+
const Ctor = (is2020 ? Ajv2020 : Ajv);
|
|
112
126
|
// eslint-disable-next-line new-cap
|
|
113
|
-
const ajv = new
|
|
114
|
-
const validate = ajv.compile(
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
127
|
+
const ajv = new Ctor({ allErrors: true, strict: false });
|
|
128
|
+
const validate = ajv.compile(parsed);
|
|
129
|
+
const entry = {
|
|
130
|
+
check(data) {
|
|
131
|
+
const ok = validate(data);
|
|
132
|
+
entry.errors = validate.errors ?? [];
|
|
133
|
+
return ok;
|
|
134
|
+
},
|
|
135
|
+
errors: [],
|
|
120
136
|
};
|
|
121
|
-
|
|
137
|
+
compiledCache.set(schemaFileName, entry);
|
|
138
|
+
return entry;
|
|
139
|
+
}
|
|
140
|
+
/** plugin.json 校验器(plugin.schema.json,2020-12) */
|
|
141
|
+
function getPluginValidator() {
|
|
142
|
+
return getSchemaValidator("plugin.schema.json");
|
|
143
|
+
}
|
|
144
|
+
/** 主题数据文件校验器(theme.schema.json,draft-07)——E6#60 sdk 侧作者校验(对照 check-theme-schema.mjs 同规则) */
|
|
145
|
+
function getThemeValidator() {
|
|
146
|
+
return getSchemaValidator("theme.schema.json");
|
|
147
|
+
}
|
|
148
|
+
/** 图标主题 mappings 数据文件校验器(icon-theme.schema.json,2020-12)——E6#60(现无 icon-theme 校验器,一并立) */
|
|
149
|
+
function getIconThemeValidator() {
|
|
150
|
+
return getSchemaValidator("icon-theme.schema.json");
|
|
122
151
|
}
|
|
123
152
|
/** instancePath → 可读路径:/contributes/commands/0 → contributes.commands[0];空 = 顶部 */
|
|
124
153
|
function prettyInstancePath(instancePath) {
|
|
@@ -166,10 +195,10 @@ export function validatePluginJson(path) {
|
|
|
166
195
|
return { valid: false, errors: [`${err instanceof Error ? err.message : String(err)}`] };
|
|
167
196
|
}
|
|
168
197
|
// 1) JSON Schema(唯一真源)
|
|
169
|
-
const
|
|
170
|
-
const ok =
|
|
198
|
+
const validator = getPluginValidator();
|
|
199
|
+
const ok = validator.check(manifest);
|
|
171
200
|
if (!ok) {
|
|
172
|
-
for (const e of
|
|
201
|
+
for (const e of validator.errors)
|
|
173
202
|
errors.push(`${base}:${formatSchemaError(e)}`);
|
|
174
203
|
return { valid: false, errors };
|
|
175
204
|
}
|
|
@@ -187,4 +216,39 @@ export function validatePluginJson(path) {
|
|
|
187
216
|
}
|
|
188
217
|
return { valid: errors.length === 0, errors };
|
|
189
218
|
}
|
|
219
|
+
/* ── 数据文件校验器(E6#60:主题/图标主题 authors 面,镜像 check-theme-schema.mjs 同规则) ── */
|
|
220
|
+
/**
|
|
221
|
+
* 数据文件严格 JSON 读取——主题/图标 mappings 数据文件**非 JSONC**(引擎 fetchPluginDataFile JSON.parse,
|
|
222
|
+
* repo check-theme-schema.mjs JSON.parse——两者一致;plugin.json 才走 jsonc,勿混)。
|
|
223
|
+
*/
|
|
224
|
+
function readDataFileStrict(path) {
|
|
225
|
+
try {
|
|
226
|
+
return { data: JSON.parse(readFileSync(path, "utf8")) };
|
|
227
|
+
}
|
|
228
|
+
catch (err) {
|
|
229
|
+
return { error: `${basename(path)}: JSON 解析失败(${err instanceof Error ? err.message : String(err)})——数据文件非 JSONC,须严格 JSON` };
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* 校验主题/图标数据文件——schema 违规/JSON 错,格式同 validatePluginJson({ valid, errors },不抛)。
|
|
234
|
+
* schema 文件 = 唯一真源(与 repo check-theme-schema.mjs 同一份,字节同步由 check-plugin-schema-sync 守卫),
|
|
235
|
+
* 规则永不漂移;本函数跑在 schema 上,作者侧拦格式错 = repo 机械闸的第一道镜像。
|
|
236
|
+
*/
|
|
237
|
+
function validateDataFile(path, validator) {
|
|
238
|
+
const read = readDataFileStrict(path);
|
|
239
|
+
if ("error" in read)
|
|
240
|
+
return { valid: false, errors: [read.error] };
|
|
241
|
+
if (!validator.check(read.data)) {
|
|
242
|
+
return { valid: false, errors: validator.errors.map((e) => `${basename(path)}:${formatSchemaError(e)}`) };
|
|
243
|
+
}
|
|
244
|
+
return { valid: true, errors: [] };
|
|
245
|
+
}
|
|
246
|
+
/** 校验主题数据 JSON 文件(对照 theme.schema.json draft-07——E5.8#129,引擎 parseThemeRecipe 消费格式) */
|
|
247
|
+
export function validateThemeJson(path) {
|
|
248
|
+
return validateDataFile(path, getThemeValidator());
|
|
249
|
+
}
|
|
250
|
+
/** 校验图标主题 mappings JSON 文件(对照 icon-theme.schema.json 2020-12——E5.8#133 / E6#60 实收格式,引擎 normalizeIconThemeMappings 消费) */
|
|
251
|
+
export function validateIconThemeJson(path) {
|
|
252
|
+
return validateDataFile(path, getIconThemeValidator());
|
|
253
|
+
}
|
|
190
254
|
//# sourceMappingURL=validate.js.map
|
package/dist/validate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"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"}
|
package/dist/vite-config.d.ts
CHANGED
|
@@ -10,19 +10,40 @@
|
|
|
10
10
|
* 构建裁决:
|
|
11
11
|
* - React/react-dom/react-i18next/**i18next** external(壳提供——插件自打 i18next 实例 → 翻译全空,
|
|
12
12
|
* B3 教训);其他依赖 inline 完全自包含。
|
|
13
|
-
* -
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
13
|
+
* - 🔥 E6#15(多表面打包):一个插件 = 主入口 + 每 contributes.views[].render 一个编译表面。
|
|
14
|
+
* **每个表面一次独立 vite lib build**(closeBundle 编排 N 次内层 `build()`)→ 每表面单文件自包含。
|
|
15
|
+
* 不赌 vite 单 build 多 JS 入口(实测 entry facade 空 chunk——rollup 把共享图并进首个入口却丢
|
|
16
|
+
* 其余入口 default 导出;E6#15 实证)。各表面共享模块在表面间重复打包(react 等 external 除外,
|
|
17
|
+
* css 内联进各表面再合并去重)——zip 大一点,换来入口导出零失真 + 逐表面失败隔离。
|
|
18
|
+
* zip 内布局:
|
|
19
|
+
* index.bundle.js 主入口(entry default 组件 + 模块级贡献副作用)
|
|
20
|
+
* views/<View>.bundle.js 每 contributes.views[].render 的独立表面(独立 lib build 产物)
|
|
21
|
+
* index.bundle.css 全插件聚合 css(有则 loader <link> 注入,与 js 并列)
|
|
22
|
+
* dist/ 内 plugin.json 的 render 字段改写指向 `views/<View>.bundle.js`(编译产物路径)——
|
|
23
|
+
* 源码 plugin.json 保持作者视角 `src/views/X.tsx`;壳 loader 读 dist manifest 后
|
|
24
|
+
* dynamic-import `${root}/views/X.bundle.js`(既有 glob 外回退分支,E5.7#98)即命中。
|
|
25
|
+
* - CSS:每表面 lib build cssCodeSplit 强制 false → 各产单 css → packager 合并为 `index.bundle.css`
|
|
26
|
+
* (各表面 css 规则全局性,合并 = 源码模式壳 build 全插件 css 合一语义)。壳 loader 激活 bundle
|
|
27
|
+
* 插件时 `<link rel=stylesheet>` 注入、卸载移除(对标 VS Code extension css 由宿主 link 的架构模型;
|
|
28
|
+
* 入口同步 css 不会被 vite style-inject,entry css 期待 html <link>,插件 chunk 无 html 消费方)。
|
|
29
|
+
* - Worker(monaco 等):`worker.format:"es"`——lib 模式 worker 默认 iife 撞 code-split 报错
|
|
30
|
+
* (Invalid value "iife" for worker.format),es 允许 worker 内动态 import。
|
|
31
|
+
* - 打包 = 内嵌私有插件 `linkdesk-plugin-packager` 的 Vite hook 序列。外层 build 只做哑入口
|
|
32
|
+
* (虚拟模块)承载 closeBundle——真实工作全在 closeBundle:逐表面 lib build → 汇总 pkgDir →
|
|
33
|
+
* 静态清单 + jszip。归属唯一(packager),bin 只编排不重复 zip。
|
|
17
34
|
* - 静态清单从**源码 pluginRoot** 拷贝(非 outDir——outDir 每次 emptyOutDir 清空),含 plugin.json/
|
|
18
|
-
* icon/README.md/CHANGELOG.md(K2 缝隙)/ i18n
|
|
19
|
-
* outDir 深拷贝进 pkgDir。
|
|
35
|
+
* icon/README.md/CHANGELOG.md(K2 缝隙)/ i18n 声明文件。
|
|
20
36
|
* - zip 条目相对 pkgDir、正斜杠、无外层目录(loader 解压期待 plugin.json 在顶,E6#7 契约)。
|
|
21
37
|
* - dev/serve 不触发 build 系 hook → packager 天然只在 build 跑。
|
|
22
38
|
*/
|
|
23
|
-
import type
|
|
39
|
+
import { type UserConfig } from "vite";
|
|
40
|
+
/** 壳提供、插件不得重复打包的依赖——i18next 必须 external(B3:自打实例 → 翻译全空)。
|
|
41
|
+
* E6#15d 消费切换实证:`react-dom/client` 必须同列 external——池 import-map 已提供 clean 副本,
|
|
42
|
+
* 否则作者 import react-dom/client 时其 dev wrapper(createRoot 解析读 `process.env.NODE_ENV`,
|
|
43
|
+
* 顶层执行)被内联进 bundle → 池运行态 ReferenceError: process is not defined → 视图全崩。 */
|
|
44
|
+
export declare const DEFAULT_EXTERNAL: string[];
|
|
24
45
|
export interface LinkdeskPluginOptions {
|
|
25
|
-
/** 入口文件,默认 plugin.json 的 entry,再缺省 "src/index.tsx" */
|
|
46
|
+
/** 入口文件,默认 plugin.json 的 entry,再缺省 "src/index.tsx"。无 entry(纯 contributes 插件)→ 仅 views 表面 */
|
|
26
47
|
entry?: string;
|
|
27
48
|
/** 输出目录,默认 "dist" */
|
|
28
49
|
outDir?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vite-config.d.ts","sourceRoot":"","sources":["../src/vite-config.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"vite-config.d.ts","sourceRoot":"","sources":["../src/vite-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAIH,OAAO,EAAmC,KAAK,UAAU,EAAE,MAAM,MAAM,CAAC;AAWxE;;;6EAG6E;AAC7E,eAAO,MAAM,gBAAgB,UAA8F,CAAC;AAM5H,MAAM,WAAW,qBAAqB;IACpC,4FAA4F;IAC5F,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kCAAkC;IAClC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAuOD,wBAAgB,0BAA0B,CAAC,OAAO,GAAE,qBAA0B,GAAG,UAAU,CAkN1F"}
|