@yunzai-ng/core 0.1.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.
Files changed (357) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +51 -0
  3. package/dist/adapter/accounts.d.ts +174 -0
  4. package/dist/adapter/accounts.d.ts.map +1 -0
  5. package/dist/adapter/accounts.js +653 -0
  6. package/dist/adapter/accounts.js.map +1 -0
  7. package/dist/adapter/bots.d.ts +142 -0
  8. package/dist/adapter/bots.d.ts.map +1 -0
  9. package/dist/adapter/bots.js +454 -0
  10. package/dist/adapter/bots.js.map +1 -0
  11. package/dist/adapter/host.d.ts +114 -0
  12. package/dist/adapter/host.d.ts.map +1 -0
  13. package/dist/adapter/host.js +90 -0
  14. package/dist/adapter/host.js.map +1 -0
  15. package/dist/adapter/login.d.ts +174 -0
  16. package/dist/adapter/login.d.ts.map +1 -0
  17. package/dist/adapter/login.js +345 -0
  18. package/dist/adapter/login.js.map +1 -0
  19. package/dist/adapter/registry.d.ts +102 -0
  20. package/dist/adapter/registry.d.ts.map +1 -0
  21. package/dist/adapter/registry.js +150 -0
  22. package/dist/adapter/registry.js.map +1 -0
  23. package/dist/config/core-config.d.ts +151 -0
  24. package/dist/config/core-config.d.ts.map +1 -0
  25. package/dist/config/core-config.js +338 -0
  26. package/dist/config/core-config.js.map +1 -0
  27. package/dist/config/schema.d.ts +449 -0
  28. package/dist/config/schema.d.ts.map +1 -0
  29. package/dist/config/schema.js +871 -0
  30. package/dist/config/schema.js.map +1 -0
  31. package/dist/config/store.d.ts +184 -0
  32. package/dist/config/store.d.ts.map +1 -0
  33. package/dist/config/store.js +428 -0
  34. package/dist/config/store.js.map +1 -0
  35. package/dist/config/yaml.d.ts +23 -0
  36. package/dist/config/yaml.d.ts.map +1 -0
  37. package/dist/config/yaml.js +108 -0
  38. package/dist/config/yaml.js.map +1 -0
  39. package/dist/http/client.d.ts +82 -0
  40. package/dist/http/client.d.ts.map +1 -0
  41. package/dist/http/client.js +658 -0
  42. package/dist/http/client.js.map +1 -0
  43. package/dist/index.d.ts +77 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +94 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/kernel/app.d.ts +244 -0
  48. package/dist/kernel/app.d.ts.map +1 -0
  49. package/dist/kernel/app.js +654 -0
  50. package/dist/kernel/app.js.map +1 -0
  51. package/dist/kernel/kv-sink.d.ts +34 -0
  52. package/dist/kernel/kv-sink.d.ts.map +1 -0
  53. package/dist/kernel/kv-sink.js +25 -0
  54. package/dist/kernel/kv-sink.js.map +1 -0
  55. package/dist/kernel/policy.d.ts +77 -0
  56. package/dist/kernel/policy.d.ts.map +1 -0
  57. package/dist/kernel/policy.js +99 -0
  58. package/dist/kernel/policy.js.map +1 -0
  59. package/dist/kernel/runtime.d.ts +117 -0
  60. package/dist/kernel/runtime.d.ts.map +1 -0
  61. package/dist/kernel/runtime.js +197 -0
  62. package/dist/kernel/runtime.js.map +1 -0
  63. package/dist/kernel/sql-sink.d.ts +36 -0
  64. package/dist/kernel/sql-sink.d.ts.map +1 -0
  65. package/dist/kernel/sql-sink.js +114 -0
  66. package/dist/kernel/sql-sink.js.map +1 -0
  67. package/dist/logger/format.d.ts +67 -0
  68. package/dist/logger/format.d.ts.map +1 -0
  69. package/dist/logger/format.js +218 -0
  70. package/dist/logger/format.js.map +1 -0
  71. package/dist/logger/index.d.ts +97 -0
  72. package/dist/logger/index.d.ts.map +1 -0
  73. package/dist/logger/index.js +363 -0
  74. package/dist/logger/index.js.map +1 -0
  75. package/dist/logger/rotate.d.ts +47 -0
  76. package/dist/logger/rotate.d.ts.map +1 -0
  77. package/dist/logger/rotate.js +242 -0
  78. package/dist/logger/rotate.js.map +1 -0
  79. package/dist/message/segment.d.ts +255 -0
  80. package/dist/message/segment.d.ts.map +1 -0
  81. package/dist/message/segment.js +510 -0
  82. package/dist/message/segment.js.map +1 -0
  83. package/dist/message/split.d.ts +34 -0
  84. package/dist/message/split.d.ts.map +1 -0
  85. package/dist/message/split.js +79 -0
  86. package/dist/message/split.js.map +1 -0
  87. package/dist/message/target.d.ts +29 -0
  88. package/dist/message/target.d.ts.map +1 -0
  89. package/dist/message/target.js +34 -0
  90. package/dist/message/target.js.map +1 -0
  91. package/dist/pipeline/cooldown.d.ts +84 -0
  92. package/dist/pipeline/cooldown.d.ts.map +1 -0
  93. package/dist/pipeline/cooldown.js +94 -0
  94. package/dist/pipeline/cooldown.js.map +1 -0
  95. package/dist/pipeline/dispatch.d.ts +98 -0
  96. package/dist/pipeline/dispatch.d.ts.map +1 -0
  97. package/dist/pipeline/dispatch.js +323 -0
  98. package/dist/pipeline/dispatch.js.map +1 -0
  99. package/dist/pipeline/event.d.ts +130 -0
  100. package/dist/pipeline/event.d.ts.map +1 -0
  101. package/dist/pipeline/event.js +538 -0
  102. package/dist/pipeline/event.js.map +1 -0
  103. package/dist/pipeline/middleware.d.ts +63 -0
  104. package/dist/pipeline/middleware.d.ts.map +1 -0
  105. package/dist/pipeline/middleware.js +174 -0
  106. package/dist/pipeline/middleware.js.map +1 -0
  107. package/dist/pipeline/prompt.d.ts +80 -0
  108. package/dist/pipeline/prompt.d.ts.map +1 -0
  109. package/dist/pipeline/prompt.js +155 -0
  110. package/dist/pipeline/prompt.js.map +1 -0
  111. package/dist/pipeline/router.d.ts +98 -0
  112. package/dist/pipeline/router.d.ts.map +1 -0
  113. package/dist/pipeline/router.js +489 -0
  114. package/dist/pipeline/router.js.map +1 -0
  115. package/dist/platform/detect.d.ts +24 -0
  116. package/dist/platform/detect.d.ts.map +1 -0
  117. package/dist/platform/detect.js +178 -0
  118. package/dist/platform/detect.js.map +1 -0
  119. package/dist/platform/paths.d.ts +38 -0
  120. package/dist/platform/paths.d.ts.map +1 -0
  121. package/dist/platform/paths.js +129 -0
  122. package/dist/platform/paths.js.map +1 -0
  123. package/dist/platform/system.d.ts +71 -0
  124. package/dist/platform/system.d.ts.map +1 -0
  125. package/dist/platform/system.js +242 -0
  126. package/dist/platform/system.js.map +1 -0
  127. package/dist/plugin/context.d.ts +92 -0
  128. package/dist/plugin/context.d.ts.map +1 -0
  129. package/dist/plugin/context.js +573 -0
  130. package/dist/plugin/context.js.map +1 -0
  131. package/dist/plugin/define.d.ts +92 -0
  132. package/dist/plugin/define.d.ts.map +1 -0
  133. package/dist/plugin/define.js +82 -0
  134. package/dist/plugin/define.js.map +1 -0
  135. package/dist/plugin/discover.d.ts +106 -0
  136. package/dist/plugin/discover.d.ts.map +1 -0
  137. package/dist/plugin/discover.js +254 -0
  138. package/dist/plugin/discover.js.map +1 -0
  139. package/dist/plugin/events.d.ts +109 -0
  140. package/dist/plugin/events.d.ts.map +1 -0
  141. package/dist/plugin/events.js +209 -0
  142. package/dist/plugin/events.js.map +1 -0
  143. package/dist/plugin/hooks.d.ts +266 -0
  144. package/dist/plugin/hooks.d.ts.map +1 -0
  145. package/dist/plugin/hooks.js +84 -0
  146. package/dist/plugin/hooks.js.map +1 -0
  147. package/dist/plugin/host.d.ts +160 -0
  148. package/dist/plugin/host.d.ts.map +1 -0
  149. package/dist/plugin/host.js +546 -0
  150. package/dist/plugin/host.js.map +1 -0
  151. package/dist/plugin/market.d.ts +264 -0
  152. package/dist/plugin/market.d.ts.map +1 -0
  153. package/dist/plugin/market.js +700 -0
  154. package/dist/plugin/market.js.map +1 -0
  155. package/dist/plugin/services.d.ts +116 -0
  156. package/dist/plugin/services.d.ts.map +1 -0
  157. package/dist/plugin/services.js +213 -0
  158. package/dist/plugin/services.js.map +1 -0
  159. package/dist/plugin/tar.d.ts +65 -0
  160. package/dist/plugin/tar.d.ts.map +1 -0
  161. package/dist/plugin/tar.js +277 -0
  162. package/dist/plugin/tar.js.map +1 -0
  163. package/dist/render/registry.d.ts +127 -0
  164. package/dist/render/registry.d.ts.map +1 -0
  165. package/dist/render/registry.js +306 -0
  166. package/dist/render/registry.js.map +1 -0
  167. package/dist/scheduler/index.d.ts +67 -0
  168. package/dist/scheduler/index.d.ts.map +1 -0
  169. package/dist/scheduler/index.js +279 -0
  170. package/dist/scheduler/index.js.map +1 -0
  171. package/dist/server/api.d.ts +179 -0
  172. package/dist/server/api.d.ts.map +1 -0
  173. package/dist/server/api.js +602 -0
  174. package/dist/server/api.js.map +1 -0
  175. package/dist/server/auth.d.ts +83 -0
  176. package/dist/server/auth.d.ts.map +1 -0
  177. package/dist/server/auth.js +178 -0
  178. package/dist/server/auth.js.map +1 -0
  179. package/dist/server/browse.d.ts +60 -0
  180. package/dist/server/browse.d.ts.map +1 -0
  181. package/dist/server/browse.js +187 -0
  182. package/dist/server/browse.js.map +1 -0
  183. package/dist/server/files.d.ts +27 -0
  184. package/dist/server/files.d.ts.map +1 -0
  185. package/dist/server/files.js +76 -0
  186. package/dist/server/files.js.map +1 -0
  187. package/dist/server/index.d.ts +189 -0
  188. package/dist/server/index.d.ts.map +1 -0
  189. package/dist/server/index.js +1123 -0
  190. package/dist/server/index.js.map +1 -0
  191. package/dist/server/table.d.ts +105 -0
  192. package/dist/server/table.d.ts.map +1 -0
  193. package/dist/server/table.js +289 -0
  194. package/dist/server/table.js.map +1 -0
  195. package/dist/store/index.d.ts +50 -0
  196. package/dist/store/index.d.ts.map +1 -0
  197. package/dist/store/index.js +120 -0
  198. package/dist/store/index.js.map +1 -0
  199. package/dist/store/json.d.ts +73 -0
  200. package/dist/store/json.d.ts.map +1 -0
  201. package/dist/store/json.js +174 -0
  202. package/dist/store/json.js.map +1 -0
  203. package/dist/store/kv.d.ts +126 -0
  204. package/dist/store/kv.d.ts.map +1 -0
  205. package/dist/store/kv.js +232 -0
  206. package/dist/store/kv.js.map +1 -0
  207. package/dist/store/level.d.ts +103 -0
  208. package/dist/store/level.d.ts.map +1 -0
  209. package/dist/store/level.js +119 -0
  210. package/dist/store/level.js.map +1 -0
  211. package/dist/store/memory.d.ts +61 -0
  212. package/dist/store/memory.d.ts.map +1 -0
  213. package/dist/store/memory.js +94 -0
  214. package/dist/store/memory.js.map +1 -0
  215. package/dist/store/sql.d.ts +142 -0
  216. package/dist/store/sql.d.ts.map +1 -0
  217. package/dist/store/sql.js +246 -0
  218. package/dist/store/sql.js.map +1 -0
  219. package/dist/testing/fake.d.ts +109 -0
  220. package/dist/testing/fake.d.ts.map +1 -0
  221. package/dist/testing/fake.js +196 -0
  222. package/dist/testing/fake.js.map +1 -0
  223. package/dist/testing/index.d.ts +16 -0
  224. package/dist/testing/index.d.ts.map +1 -0
  225. package/dist/testing/index.js +16 -0
  226. package/dist/testing/index.js.map +1 -0
  227. package/dist/testing/mock-adapter.d.ts +205 -0
  228. package/dist/testing/mock-adapter.d.ts.map +1 -0
  229. package/dist/testing/mock-adapter.js +309 -0
  230. package/dist/testing/mock-adapter.js.map +1 -0
  231. package/dist/util/deep.d.ts +108 -0
  232. package/dist/util/deep.d.ts.map +1 -0
  233. package/dist/util/deep.js +275 -0
  234. package/dist/util/deep.js.map +1 -0
  235. package/dist/util/defer.d.ts +107 -0
  236. package/dist/util/defer.d.ts.map +1 -0
  237. package/dist/util/defer.js +163 -0
  238. package/dist/util/defer.js.map +1 -0
  239. package/dist/util/dispose.d.ts +88 -0
  240. package/dist/util/dispose.d.ts.map +1 -0
  241. package/dist/util/dispose.js +143 -0
  242. package/dist/util/dispose.js.map +1 -0
  243. package/dist/util/duration.d.ts +28 -0
  244. package/dist/util/duration.d.ts.map +1 -0
  245. package/dist/util/duration.js +77 -0
  246. package/dist/util/duration.js.map +1 -0
  247. package/dist/util/fs.d.ts +110 -0
  248. package/dist/util/fs.d.ts.map +1 -0
  249. package/dist/util/fs.js +269 -0
  250. package/dist/util/fs.js.map +1 -0
  251. package/dist/util/id.d.ts +49 -0
  252. package/dist/util/id.d.ts.map +1 -0
  253. package/dist/util/id.js +87 -0
  254. package/dist/util/id.js.map +1 -0
  255. package/dist/util/lru.d.ts +74 -0
  256. package/dist/util/lru.d.ts.map +1 -0
  257. package/dist/util/lru.js +156 -0
  258. package/dist/util/lru.js.map +1 -0
  259. package/dist/util/queue.d.ts +64 -0
  260. package/dist/util/queue.d.ts.map +1 -0
  261. package/dist/util/queue.js +147 -0
  262. package/dist/util/queue.js.map +1 -0
  263. package/dist/util/text.d.ts +86 -0
  264. package/dist/util/text.d.ts.map +1 -0
  265. package/dist/util/text.js +182 -0
  266. package/dist/util/text.js.map +1 -0
  267. package/package.json +44 -0
  268. package/src/adapter/accounts.ts +758 -0
  269. package/src/adapter/bots.ts +582 -0
  270. package/src/adapter/host.ts +224 -0
  271. package/src/adapter/login.ts +481 -0
  272. package/src/adapter/registry.ts +202 -0
  273. package/src/config/core-config.test.ts +60 -0
  274. package/src/config/core-config.ts +401 -0
  275. package/src/config/schema.test.ts +179 -0
  276. package/src/config/schema.ts +1036 -0
  277. package/src/config/store.test.ts +245 -0
  278. package/src/config/store.ts +506 -0
  279. package/src/config/yaml.ts +119 -0
  280. package/src/http/client.test.ts +568 -0
  281. package/src/http/client.ts +777 -0
  282. package/src/index.ts +106 -0
  283. package/src/kernel/app.test.ts +267 -0
  284. package/src/kernel/app.ts +843 -0
  285. package/src/kernel/kv-sink.ts +58 -0
  286. package/src/kernel/policy.ts +120 -0
  287. package/src/kernel/runtime.test.ts +542 -0
  288. package/src/kernel/runtime.ts +307 -0
  289. package/src/kernel/sql-sink.ts +154 -0
  290. package/src/logger/format.ts +259 -0
  291. package/src/logger/index.ts +427 -0
  292. package/src/logger/rotate.ts +265 -0
  293. package/src/message/segment.test.ts +335 -0
  294. package/src/message/segment.ts +569 -0
  295. package/src/message/split.ts +97 -0
  296. package/src/message/target.ts +48 -0
  297. package/src/pipeline/cooldown.ts +136 -0
  298. package/src/pipeline/dispatch.ts +419 -0
  299. package/src/pipeline/event.ts +735 -0
  300. package/src/pipeline/middleware.test.ts +426 -0
  301. package/src/pipeline/middleware.ts +199 -0
  302. package/src/pipeline/prompt.ts +212 -0
  303. package/src/pipeline/router.test.ts +432 -0
  304. package/src/pipeline/router.ts +575 -0
  305. package/src/platform/detect.ts +178 -0
  306. package/src/platform/paths.ts +147 -0
  307. package/src/platform/system.test.ts +102 -0
  308. package/src/platform/system.ts +289 -0
  309. package/src/plugin/context.test.ts +459 -0
  310. package/src/plugin/context.ts +757 -0
  311. package/src/plugin/define.test.ts +120 -0
  312. package/src/plugin/define.ts +142 -0
  313. package/src/plugin/discover.test.ts +253 -0
  314. package/src/plugin/discover.ts +353 -0
  315. package/src/plugin/events.test.ts +162 -0
  316. package/src/plugin/events.ts +266 -0
  317. package/src/plugin/hooks.ts +373 -0
  318. package/src/plugin/host.test.ts +696 -0
  319. package/src/plugin/host.ts +738 -0
  320. package/src/plugin/market.test.ts +781 -0
  321. package/src/plugin/market.ts +870 -0
  322. package/src/plugin/services.test.ts +135 -0
  323. package/src/plugin/services.ts +261 -0
  324. package/src/plugin/tar.test.ts +158 -0
  325. package/src/plugin/tar.ts +309 -0
  326. package/src/render/registry.test.ts +127 -0
  327. package/src/render/registry.ts +439 -0
  328. package/src/scheduler/index.ts +357 -0
  329. package/src/server/api.test.ts +802 -0
  330. package/src/server/api.ts +869 -0
  331. package/src/server/auth.ts +201 -0
  332. package/src/server/browse.test.ts +193 -0
  333. package/src/server/browse.ts +240 -0
  334. package/src/server/files.ts +97 -0
  335. package/src/server/index.test.ts +566 -0
  336. package/src/server/index.ts +1386 -0
  337. package/src/server/table.ts +351 -0
  338. package/src/store/index.ts +156 -0
  339. package/src/store/json.ts +198 -0
  340. package/src/store/kv.test.ts +307 -0
  341. package/src/store/kv.ts +256 -0
  342. package/src/store/level.ts +167 -0
  343. package/src/store/memory.ts +109 -0
  344. package/src/store/sql.test.ts +204 -0
  345. package/src/store/sql.ts +324 -0
  346. package/src/testing/fake.ts +297 -0
  347. package/src/testing/index.ts +15 -0
  348. package/src/testing/mock-adapter.ts +588 -0
  349. package/src/util/deep.ts +272 -0
  350. package/src/util/defer.ts +211 -0
  351. package/src/util/dispose.ts +169 -0
  352. package/src/util/duration.ts +82 -0
  353. package/src/util/fs.ts +279 -0
  354. package/src/util/id.ts +94 -0
  355. package/src/util/lru.ts +185 -0
  356. package/src/util/queue.ts +167 -0
  357. package/src/util/text.ts +189 -0
@@ -0,0 +1,264 @@
1
+ import type { HttpClient, Logger } from "@yunzai-ng/types";
2
+ /** 安装来源 */
3
+ export interface MarketInstallSpec {
4
+ /** 取源方式 */
5
+ readonly type: "git" | "tarball";
6
+ /** 仓库地址或归档地址 */
7
+ readonly url: string;
8
+ /** git 分支,缺省由远端决定 */
9
+ readonly branch?: string;
10
+ }
11
+ /** 索引中的一个插件条目 */
12
+ export interface MarketEntry {
13
+ /** 插件名,同时是安装目录名与配置文件名 */
14
+ readonly name: string;
15
+ /** 展示标题 */
16
+ readonly title: string;
17
+ /** 一句话说明 */
18
+ readonly description: string;
19
+ /** 作者 */
20
+ readonly author?: string;
21
+ /** 索引声明的版本 */
22
+ readonly version?: string;
23
+ /** 项目主页 */
24
+ readonly homepage?: string;
25
+ /** 分类标签 */
26
+ readonly tags: readonly string[];
27
+ /** 是否为官方维护 */
28
+ readonly official: boolean;
29
+ /** 要求的最低内核版本 */
30
+ readonly minCore?: string;
31
+ /** 安装来源 */
32
+ readonly install: MarketInstallSpec;
33
+ /** 该条目来自哪个索引地址 */
34
+ readonly source: string;
35
+ }
36
+ /** 附带本地安装状态的条目 */
37
+ export interface MarketListing extends MarketEntry {
38
+ /** 插件目录下是否已存在同名目录 */
39
+ readonly installed: boolean;
40
+ }
41
+ /** 一次索引获取的结果 */
42
+ export interface MarketSourceResult {
43
+ /** 索引地址 */
44
+ readonly url: string;
45
+ /** 是否取到并解析成功 */
46
+ readonly ok: boolean;
47
+ /** 失败原因 */
48
+ readonly error?: string;
49
+ /** 该索引贡献的条目数 */
50
+ readonly count: number;
51
+ }
52
+ /** 索引快照 */
53
+ export interface MarketSnapshot {
54
+ /** 获取时间戳 */
55
+ readonly fetchedAt: number;
56
+ /** 是否来自缓存而非本次网络请求 */
57
+ readonly cached: boolean;
58
+ /** 逐个索引的获取结果 */
59
+ readonly sources: readonly MarketSourceResult[];
60
+ /** 合并去重后的条目,按名称排序 */
61
+ readonly plugins: readonly MarketListing[];
62
+ }
63
+ /**
64
+ * 一次安装的取源方式
65
+ *
66
+ * `pull` 是更新独有的一种:目录已是一个 git 仓库,就地拉取而非重新下载。
67
+ * 与 `git` 分开记录,因为两者对使用者的可见后果不同 —— `pull` 保住了
68
+ * `node_modules` 与目录内的其他文件,`git` 是一份全新的目录。
69
+ */
70
+ export type InstallVia = MarketInstallSpec["type"] | "pull";
71
+ /** 一次安装的结果 */
72
+ export interface InstallResult {
73
+ /** 插件名 */
74
+ readonly name: string;
75
+ /** 安装目录 */
76
+ readonly dir: string;
77
+ /** 取源方式 */
78
+ readonly via: InstallVia;
79
+ /** package.json 中声明的版本;无 package.json 时为索引声明的版本 */
80
+ readonly version: string;
81
+ /** 是否声明了运行时依赖且尚未安装 */
82
+ readonly needsDependencies: boolean;
83
+ /**
84
+ * 就地拉取时的旧版本号,仅 `via` 为 `pull` 时存在
85
+ *
86
+ * 供面板显示「1.0.0 → 1.1.0」。重新安装那条路上没有它:旧目录已被删除,
87
+ * 而在删除之前去读一遍它的 package.json 只为显示一个数字,不值得多一次失败点。
88
+ */
89
+ readonly fromVersion?: string;
90
+ /**
91
+ * 就地拉取时是否确实有新提交
92
+ *
93
+ * `false` 表示已是最新。面板据此说「已是最新版本」而非「已更新」——
94
+ * 后者会让使用者以为拉到了东西,转而去找那个并不存在的变化。
95
+ */
96
+ readonly changed?: boolean;
97
+ /**
98
+ * 此后的更新会走哪条路
99
+ *
100
+ * 由 `via` 纯推导:git 克隆与就地拉取都留下 `.git`,故此后可 `fetch` + `reset`,
101
+ * 那条路**保住包目录里的 `node_modules`**;归档装出来的目录没有 `.git`,每次更新都是
102
+ * 整目录重下重装,依赖跟着重装一遍。
103
+ *
104
+ * 这个差别在装完的那一刻不可见,却决定此后每一次更新的代价(依赖动辄几十兆),
105
+ * 故在装完就说出来 —— 而不是等使用者问「为什么我的更新比别人慢」。
106
+ */
107
+ readonly updatable: "pull" | "reinstall";
108
+ }
109
+ /** 市场行为的可配置项,由内核配置提供 */
110
+ export interface MarketSettings {
111
+ /** 索引地址列表,靠前者优先 */
112
+ readonly sources: readonly string[];
113
+ /** 镜像前缀,为空表示直连 */
114
+ readonly mirror: string;
115
+ /** 索引缓存生存期毫秒 */
116
+ readonly cacheTtl: number;
117
+ /** 单次网络请求超时毫秒 */
118
+ readonly timeout: number;
119
+ }
120
+ /**
121
+ * 执行一次 git 命令的函数形态
122
+ *
123
+ * 抽成类型是为了让测试替换它。就地拉取那条路的正确性几乎全在**命令序列**上 ——
124
+ * `stash` 必须先于 `reset --hard`(次序反了就是数据丢失)、必须是 `fetch` 而非
125
+ * `pull`、`fetch` 的地址必须每次现算。这些都不是真网络测得出来的:一次真实的拉取
126
+ * 只告诉你"最后目录对了",而上述任一条错掉都仍可能得到一个对的目录,直到某个
127
+ * 使用者的改动被无声吃掉。故留这道缝,用例据此逐条钉住实际下发的参数。
128
+ * @param args 命令参数
129
+ * @param cwd 工作目录
130
+ * @param timeout 超时毫秒
131
+ * @returns 标准输出
132
+ */
133
+ export type GitRunner = (args: readonly string[], cwd: string, timeout: number) => Promise<string>;
134
+ /** 构造插件市场所需的依赖 */
135
+ export interface MarketDeps {
136
+ /** HTTP 客户端 */
137
+ readonly http: HttpClient;
138
+ /** 日志器 */
139
+ readonly logger: Logger;
140
+ /** 插件安装目录 */
141
+ readonly pluginsDir: string;
142
+ /** 临时目录,下载与解包在此完成 */
143
+ readonly tempDir: string;
144
+ /** 索引缓存文件路径 */
145
+ readonly cacheFile: string;
146
+ /** 读取当前配置 */
147
+ readonly settings: () => MarketSettings;
148
+ /** 当前内核版本,用于 `minCore` 判定 */
149
+ readonly coreVersion: string;
150
+ /** 执行 git 命令,缺省调用本机的 git */
151
+ readonly git?: GitRunner;
152
+ }
153
+ /**
154
+ * 校验插件名
155
+ *
156
+ * 该校验先于路径拼接执行。路径越界校验能挡住 `../`,但挡不住 `.git`、`node_modules`
157
+ * 这类落在目录之内却会破坏运行环境的名称,因此此处采用白名单而非黑名单。
158
+ * @param name 待校验的名称
159
+ * @returns 名称本身
160
+ * @throws 名称为空、含非法字符或为保留名时
161
+ */
162
+ export declare function assertPluginName(name: string): string;
163
+ /**
164
+ * 比较两个版本号
165
+ *
166
+ * 仅比较点分数值段,忽略预发布标识。内核版本与 `minCore` 都由本项目自己产出,
167
+ * 不需要完整的 semver 语义,引入依赖的收益低于其体积。
168
+ * @param a 左操作数
169
+ * @param b 右操作数
170
+ * @returns a 大于 b 时为正,小于时为负,相等时为零
171
+ */
172
+ export declare function compareVersion(a: string, b: string): number;
173
+ /**
174
+ * 对白名单主机的地址应用镜像前缀
175
+ *
176
+ * 只处理白名单内的主机:镜像站点通常只代理 GitHub,把任意地址都套上前缀会让
177
+ * 自建源无法访问,且更难排查 —— 用户看到的会是镜像站的 404 而不是自己的地址写错。
178
+ * @param url 原始地址
179
+ * @param mirror 镜像前缀,空串表示直连
180
+ * @returns 应用镜像后的地址
181
+ */
182
+ export declare function applyMirror(url: string, mirror: string): string;
183
+ /**
184
+ * 把 git 仓库地址换算为 codeload 归档地址
185
+ *
186
+ * git 不可用时的退路。仅识别 GitHub:其归档地址可由仓库地址推导,而通用的
187
+ * git 服务端不存在统一的归档端点,推断得出的地址仅会导致一次无谓的失败请求。
188
+ * @param url 仓库地址
189
+ * @param branch 分支名,缺省取 HEAD
190
+ * @returns 归档地址;无法推导时 undefined
191
+ */
192
+ export declare function tarballFromGit(url: string, branch?: string): string | undefined;
193
+ /**
194
+ * 解析一份索引文档
195
+ *
196
+ * 接受两种形状:`{ plugins: [...] }` 与顶层直接是数组。后者便于用户把一个手写的
197
+ * 数组挂到静态文件服务上作为私有源。
198
+ * @param raw 已解析的 JSON
199
+ * @param source 索引地址
200
+ * @returns 合法条目列表
201
+ * @throws 文档既不是数组也不含 `plugins` 数组时
202
+ */
203
+ export declare function parseIndex(raw: unknown, source: string): MarketEntry[];
204
+ /**
205
+ * 插件市场
206
+ *
207
+ * 索引缓存同时驻留内存与磁盘:内存缓存服务于同一次运行内的反复浏览,磁盘缓存
208
+ * 服务于重启后的首次打开 —— 面板在无网络时也应当能列出上次看到的插件,
209
+ * 而不是显示一个空列表。
210
+ */
211
+ export declare class PluginMarket {
212
+ #private;
213
+ /**
214
+ * @param deps 依赖
215
+ */
216
+ constructor(deps: MarketDeps);
217
+ /**
218
+ * 列出市场中的插件
219
+ *
220
+ * 缓存未过期时不发起网络请求。安装状态每次都重新读取文件系统:用户可能在面板
221
+ * 之外手动删掉了插件目录,沿用缓存里的状态会让"卸载"按钮对着一个不存在的目录。
222
+ * @param force 忽略缓存,强制重新获取
223
+ * @returns 索引快照
224
+ */
225
+ list(force?: boolean): Promise<MarketSnapshot>;
226
+ /**
227
+ * 按名称取一个条目
228
+ * @param name 插件名
229
+ * @returns 条目;索引中没有时 undefined
230
+ */
231
+ entry(name: string): Promise<MarketEntry | undefined>;
232
+ /**
233
+ * 安装一个插件
234
+ *
235
+ * 全过程在临时目录内完成,仅在校验通过后才移入插件目录,因此失败时插件目录
236
+ * 保持原状。安装完成后不加载插件:加载时机由调用方决定,面板据返回值提示用户
237
+ * 是否需要先安装依赖。
238
+ * @param name 插件名
239
+ * @param opts 可选参数
240
+ * @param opts.replace 目标已存在时先删除再安装
241
+ * @returns 安装结果
242
+ * @throws 名称不合法、索引中无此插件、内核版本不满足、目标已存在或取源失败时
243
+ */
244
+ install(name: string, opts?: {
245
+ replace?: boolean;
246
+ }): Promise<InstallResult>;
247
+ /**
248
+ * 卸载一个插件
249
+ *
250
+ * 只删除插件目录。配置文件与数据库另行存放,保留它们使得重新安装后原有配置仍然有效。
251
+ * @param name 插件名
252
+ * @returns 是否确实删除了目录
253
+ * @throws 名称不合法时
254
+ */
255
+ remove(name: string): Promise<boolean>;
256
+ /**
257
+ * 更新一个插件:目录已是 git 仓库时就地拉取,否则退回重新安装
258
+ * @param name 插件名
259
+ * @returns 安装结果
260
+ * @throws 与 `install` 相同;就地拉取失败时抛出 git 的错误
261
+ */
262
+ update(name: string): Promise<InstallResult>;
263
+ }
264
+ //# sourceMappingURL=market.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"market.d.ts","sourceRoot":"","sources":["../../src/plugin/market.ts"],"names":[],"mappings":"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"}