@nsnanocat/preference-panes 0.1.0 → 0.3.0
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 +63 -77
- package/dist/preference-panes.mjs +766 -678
- package/dist/preference-panes.request.js +1771 -2126
- package/package.json +64 -67
- package/src/SettingsHandler.mjs +142 -0
- package/src/browser/client.mjs +228 -0
- package/src/browser/index.d.ts +153 -0
- package/src/browser/index.mjs +7 -0
- package/src/browser/panel.css +140 -0
- package/src/browser/panel.mjs +432 -0
- package/src/index.d.ts +161 -0
- package/src/index.mjs +8 -0
- package/src/lib/boxjs.mjs +141 -0
- package/src/lib/settings-path.mjs +42 -0
- package/src/proxy/request.mjs +30 -0
- package/browser/client.mjs +0 -112
- package/browser/index.mjs +0 -2
- package/browser/panel.css +0 -103
- package/browser/panel.mjs +0 -233
- package/index.mjs +0 -3
- package/lib/boxjs.mjs +0 -90
- package/lib/settings-handler.mjs +0 -113
- package/lib/settings-path.mjs +0 -20
- package/proxy/request.mjs +0 -36
- package/types/browser.d.ts +0 -32
- package/types/index.d.ts +0 -52
package/README.md
CHANGED
|
@@ -1,109 +1,95 @@
|
|
|
1
1
|
# @nsnanocat/preference-panes
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
通用 WebView 设置面板与代理持久化存储桥接。0.3.0 起,BoxJS 完全由前端解析;API 只按安装配置中的根和模块读写数据,不下载配置、不重复校验字段或枚举。
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## 目录
|
|
6
6
|
|
|
7
|
-
|
|
|
8
|
-
| --- | --- |
|
|
9
|
-
|
|
|
10
|
-
|
|
|
11
|
-
|
|
|
12
|
-
|
|
|
13
|
-
|
|
|
7
|
+
| 目录 | 内容 |
|
|
8
|
+
| --- | --- |
|
|
9
|
+
| src/SettingsHandler.mjs | 模块存储桥接 class |
|
|
10
|
+
| src/browser/ | WebView 控件、内存会话和样式 |
|
|
11
|
+
| src/lib/ | 前端 BoxJS 与通用路径解析 |
|
|
12
|
+
| src/proxy/ | 代理宿主打包入口 |
|
|
13
|
+
| test/ | 类型与行为回归测试 |
|
|
14
|
+
| examples/ | BoxJS、HTML 和 Surge 集成示例 |
|
|
15
|
+
| apifox/ | 接口说明、原生 JSON 与生成器 |
|
|
16
|
+
| .github/ | CI、双平台发布工作流 |
|
|
17
|
+
| dist/ | 构建产物,不提交 Git |
|
|
14
18
|
|
|
15
|
-
|
|
19
|
+
Biome 与 NSNanoCat Util/FlatBufferRoot 对齐:tab、LF、320 列,保留统一 lint 规则。类型声明位于 src/index.d.ts 和 src/browser/index.d.ts,JSDoc 使用中英双语。
|
|
16
20
|
|
|
17
|
-
|
|
21
|
+
## 代理接口
|
|
18
22
|
|
|
19
|
-
|
|
23
|
+
~~~js
|
|
24
|
+
import { SettingsHandler } from "@nsnanocat/preference-panes";
|
|
20
25
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
const panel = mountPreferencePanes({
|
|
26
|
-
element: document.querySelector("#preferences"),
|
|
27
|
-
title: "Preferences"
|
|
26
|
+
const handler = new SettingsHandler({
|
|
27
|
+
origin: "https://example.org",
|
|
28
|
+
storageKey: "Root",
|
|
29
|
+
module: "Module"
|
|
28
30
|
});
|
|
29
|
-
|
|
30
|
-
|
|
31
|
+
const response = await handler.handle($request);
|
|
32
|
+
// 使用现有代理宿主的 done 适配。
|
|
33
|
+
// Adapt the response with the existing proxy host's done function.
|
|
34
|
+
~~~
|
|
31
35
|
|
|
32
|
-
|
|
36
|
+
安装配置固定 Root.Module,浏览器不能通过 header 指定其它根。API 不接受 configURL、loadConfig 或 resolveSettings,也不依赖 BoxJS 是否可用。
|
|
33
37
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
/
|
|
37
|
-
|
|
38
|
+
| 请求 | 行为 |
|
|
39
|
+
| --- | --- |
|
|
40
|
+
| HEAD /api/Module/… | 确认路由可达,不读取存储 |
|
|
41
|
+
| GET /api/Module/Settings/key | 返回原值,缺失返回 404 |
|
|
42
|
+
| POST /api/Module/Settings/key | 以任意 JSON 值替换该位置,成功 200 |
|
|
43
|
+
| DELETE /api/Module/Settings/key | 删除键或子树,不存在也成功 |
|
|
44
|
+
| GET /api/Module/Caches | 返回所有 Caches |
|
|
45
|
+
| DELETE /api/Module/Caches | 清空缓存,保留 Settings |
|
|
46
|
+
| DELETE /api/Module/ | 重置模块全部数据,保留 Root 下其它模块 |
|
|
38
47
|
|
|
39
|
-
|
|
48
|
+
POST 正文就是值本身,允许对象、数组、null、字符串、数字或布尔值。不存在于 BoxJS 中的键也允许读写。使用 util Storage/Lodash 做根对象读改写,保留同级数据;每次 GET 读一次根,POST/DELETE 读一次再写一次,不发网络请求。仍检查模块归属、路径格式、请求来源、JSON 语法和正文大小;不做 BoxJS 业务校验。
|
|
40
49
|
|
|
41
|
-
|
|
42
|
-
| --- | --- | --- |
|
|
43
|
-
| `/settings/Enhanced` | 公共 HTML Mock | 通用设置页面 |
|
|
44
|
-
| `/configs/Enhanced` | Enhanced 的配置 Mock | argument config 经原有生成器生成的 BoxJS JSON |
|
|
45
|
-
| `/api/Enhanced/` 或 `/api/Enhanced/Settings/` | 通用读写脚本 | 已声明字段的持久化子树 |
|
|
46
|
-
| `/api/Enhanced/Settings/Home/Top_left` | 同一个通用读写脚本 | 单键 GET/POST/DELETE |
|
|
50
|
+
## WebView
|
|
47
51
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
通用设置页每次进入、刷新或浏览器缓存恢复时,用 `client.open(module)` GET `/configs/{module}` 一次,再 GET 持久化子树一次。用配置实时生成表单,值放在内存,不使用 localStorage/sessionStorage。保存/删除仅 HTTP 200 后更新缓存和通知,不追加 GET。现有 UI 可直接使用同一客户端的 snapshot/set/remove/leave;snapshot 返回副本。
|
|
53
|
-
|
|
54
|
-
默认 CSS 是独立的通用样式,可由调用方替换;本包不依赖 Bilibili 样式或框架。字段定义由 BoxJS 决定,通用 JS 只定义每类控件如何绘制,不编入各项目的具体选项。
|
|
52
|
+
~~~js
|
|
53
|
+
import { mountPreferencePanes } from "@nsnanocat/preference-panes/browser";
|
|
54
|
+
import "@nsnanocat/preference-panes/browser/panel.css";
|
|
55
55
|
|
|
56
|
-
|
|
56
|
+
const panel = mountPreferencePanes({ element: document.querySelector("#preferences") });
|
|
57
|
+
// 卸载时调用 panel.destroy()。
|
|
58
|
+
// Call panel.destroy() when unmounting.
|
|
59
|
+
~~~
|
|
57
60
|
|
|
58
|
-
|
|
59
|
-
import { createSettingsHandler } from "@nsnanocat/preference-panes";
|
|
60
|
-
import { fetch } from "@nsnanocat/util/polyfill/fetch";
|
|
61
|
+
同一份 HTML 从 /settings/{module} 读取模块名,再 GET /configs/{module} 取得 BoxJS 并生成控件。配置源地址写在模块的 Mock 规则中,不写入页面 query 参数或 API。
|
|
61
62
|
|
|
62
|
-
|
|
63
|
-
origin: "https://example.org",
|
|
64
|
-
loadConfig: async module => {
|
|
65
|
-
const response = await fetch(`https://assets.example.org/${module}.boxjs.json`);
|
|
66
|
-
if (response.status !== 200) throw new Error(`BoxJS HTTP ${response.status}`);
|
|
67
|
-
return JSON.parse(response.body);
|
|
68
|
-
}
|
|
69
|
-
});
|
|
70
|
-
const response = await handle($request);
|
|
71
|
-
// 接入现有平台的 done 适配;或直接使用下述打包入口。
|
|
72
|
-
```
|
|
63
|
+
每次进入主菜单仅并发 HEAD 各配置 Mock。打开、再次进入或刷新模块页,各 GET 一次 BoxJS 与设置子树;404 的设置子树按无覆盖值处理。保存/删除根据 HTTP 200 更新页面缓存并显示通知,不追加 GET。
|
|
73
64
|
|
|
74
|
-
|
|
65
|
+
模块页底部提供查看/刷新 Caches、清空 Caches 和重置模块。查看缓存按需 GET;清空和重置经确认后 DELETE,成功只更新本页状态。重置后控件显示当前 BoxJS 默认值,再次进入页面才重新读取。模块选择、设置值校验和默认值处理都在前端完成。
|
|
75
66
|
|
|
76
|
-
|
|
67
|
+
业务主菜单由调用项目维护,Biliverse 的入口和四个模块按钮归 Enhanced。未提供对应配置 Mock 的插件入口保持禁用。
|
|
77
68
|
|
|
78
|
-
|
|
69
|
+
## BoxJS 兼容
|
|
79
70
|
|
|
80
|
-
|
|
71
|
+
前端接受字段数组、单 app 和 apps 订阅。字段 ID 为 @根.模块.子路径.键;模块归属来自字段 ID,不能用 app 名称推断。
|
|
81
72
|
|
|
82
|
-
|
|
73
|
+
- name/val/type/desc/items:控件标题、默认值、类型、说明和选项。
|
|
74
|
+
- boolean/selects/checkboxes/text/textarea/number:支持的控件类型。
|
|
75
|
+
- placeholder/rows/autoGrow:输入提示、多行基础行数和自动高度。
|
|
76
|
+
- app name/author/desc/descs/repo:纯文本标题、作者、说明和项目链接。
|
|
77
|
+
- icon/icons:显式图标优先,原版 icons 为透明/彩色顺序,不是亮暗顺序。
|
|
78
|
+
- script:仅保留元数据,不下载或执行。
|
|
83
79
|
|
|
84
|
-
|
|
80
|
+
不执行 BoxJS HTML、脚本、动态字符串 items,不通过 keys 推导额外字段。WebView 使用原生网络与对象访问,不打入 util 的网络、存储或 Lodash polyfill。代理安装的 storageKey/module 应由接入方与 BoxJS 路径保持一致。
|
|
85
81
|
|
|
86
|
-
##
|
|
82
|
+
## 构建与发布
|
|
87
83
|
|
|
88
|
-
|
|
84
|
+
~~~sh
|
|
89
85
|
npm ci --registry=https://registry.npmjs.org/ --@nsnanocat:registry=https://registry.npmjs.org/
|
|
90
86
|
npm run build
|
|
91
87
|
npm run check
|
|
92
88
|
npm run apifox:generate
|
|
93
|
-
|
|
89
|
+
npm run apifox:check
|
|
94
90
|
npm pack --dry-run
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
构建生成可直接加载的 `dist/preference-panes.mjs` 和代理 IIFE `dist/preference-panes.request.js`,公共样式位于 `browser/panel.css`。代理包包括 util 的平台适配和 `@nsnanocat/url`,不依赖 Node 内置模块。
|
|
98
|
-
|
|
99
|
-
[Surge 模板](examples/surge.sgmodule)使用原生 Map Local 提供静态资源,http-request 提供持久化 API。模板中的域名均为占位,尚未部署;需要把源码资源和 dist 产物发布到自己的资源地址。其 `argument` 只配置 `origin` 和 `configURL`,不会固化字段。Map Local 下载缓存的更新时机由代理管理;浏览器 no-store 不会强制 Surge 更新资源缓存。配置 Mock 与脚本 configURL 应引用同一版本的 BoxJS。
|
|
100
|
-
|
|
101
|
-
Quantumult X 等不能通过模板传递 `$argument` 的平台,需要在构建入口注入这两个地址参数,再打包同一通用执行端;本仓库没有声称该 Surge 模板可直接安装到其它代理。隔离测试覆盖 Surge/QX 宿主 API,尚未在用户设备上安装验收。
|
|
102
|
-
|
|
103
|
-
## 接口文档与发布
|
|
91
|
+
~~~
|
|
104
92
|
|
|
105
|
-
-
|
|
106
|
-
- [Apifox 原生 JSON](apifox/preference-panes.apifox.json)
|
|
107
|
-
- [Apifox 项目](https://app.apifox.com/project/8803052)、[Git 数据源绑定记录](apifox/sync.md)
|
|
93
|
+
构建生成 dist/preference-panes.mjs 和 dist/preference-panes.request.js;公开 import 路径由 exports 保持稳定。0.3.0 的安装参数替换 0.2.0 的 configURL,HTTP 读写从声明字段变为模块内的任意数据,是一次契约升级。
|
|
108
94
|
|
|
109
|
-
|
|
95
|
+
[完整接口说明](apifox/guide.md) · [Apifox JSON](apifox/preference-panes.apifox.json) · [同步方式](apifox/README.md) · [发布工作流](.github/RELEASING.md)
|