rssany 0.3.4 → 0.3.5

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 (50) hide show
  1. package/app/webui/build/200.html +6 -6
  2. package/app/webui/build/_app/immutable/assets/14.Dej-duOb.css +1 -0
  3. package/app/webui/build/_app/immutable/assets/18.DKwaKios.css +1 -0
  4. package/app/webui/build/_app/immutable/chunks/{BZY5aksi.js → BVeSE1NJ.js} +1 -1
  5. package/app/webui/build/_app/immutable/chunks/CdnuzsHd.js +1 -0
  6. package/app/webui/build/_app/immutable/chunks/{SvdgnirT.js → Ce-r0j9k.js} +1 -1
  7. package/app/webui/build/_app/immutable/chunks/{B8StT3Do.js → CflZmztn.js} +1 -1
  8. package/app/webui/build/_app/immutable/chunks/{pd_p3yYy.js → D6JgZyc_.js} +1 -1
  9. package/app/webui/build/_app/immutable/chunks/DCl8F8Io.js +2 -0
  10. package/app/webui/build/_app/immutable/chunks/{B0czyjwj.js → DP-sZIv3.js} +1 -1
  11. package/app/webui/build/_app/immutable/chunks/DQE6YZMg.js +1 -0
  12. package/app/webui/build/_app/immutable/chunks/{qwlQuQWi.js → H8yPhK_g.js} +1 -1
  13. package/app/webui/build/_app/immutable/chunks/{Czo-EcYU.js → NqUZvg9q.js} +1 -1
  14. package/app/webui/build/_app/immutable/chunks/{CIsxbQ9B.js → sgw2KQ1B.js} +1 -1
  15. package/app/webui/build/_app/immutable/entry/app.BG3erHoA.js +2 -0
  16. package/app/webui/build/_app/immutable/entry/start.BhD5QUgT.js +1 -0
  17. package/app/webui/build/_app/immutable/nodes/0.H78afcWu.js +16 -0
  18. package/app/webui/build/_app/immutable/nodes/{1.DzLFxso0.js → 1.DtZrhmtl.js} +1 -1
  19. package/app/webui/build/_app/immutable/nodes/10.CwtFnSO9.js +1 -0
  20. package/app/webui/build/_app/immutable/nodes/11.DdcAhkmZ.js +3 -0
  21. package/app/webui/build/_app/immutable/nodes/{12.eeQ9B6bg.js → 12.BLGRqrcl.js} +1 -1
  22. package/app/webui/build/_app/immutable/nodes/13.B7g5xlgP.js +1 -0
  23. package/app/webui/build/_app/immutable/nodes/14.Cz521LxG.js +1 -0
  24. package/app/webui/build/_app/immutable/nodes/15.BS5L9nKz.js +1 -0
  25. package/app/webui/build/_app/immutable/nodes/{16.BO-9BBQ5.js → 16.DedKEzpT.js} +2 -2
  26. package/app/webui/build/_app/immutable/nodes/{17.BWRgFCUw.js → 17.DmUpw-Q0.js} +1 -1
  27. package/app/webui/build/_app/immutable/nodes/18.DP4-TI9w.js +166 -0
  28. package/app/webui/build/_app/immutable/nodes/{3.CJw5Nx2o.js → 3.Bc2dV2pk.js} +1 -1
  29. package/app/webui/build/_app/immutable/nodes/5.Db9o3qWa.js +2 -0
  30. package/app/webui/build/_app/immutable/nodes/{6.trFT-trT.js → 6.W2s8fUuH.js} +2 -2
  31. package/app/webui/build/_app/immutable/nodes/7.C4cs3Mya.js +1 -0
  32. package/app/webui/build/_app/immutable/nodes/{8.DG_T-wWN.js → 8.BY_h7x8A.js} +1 -1
  33. package/app/webui/build/_app/immutable/nodes/9.7_sJV3Bn.js +1 -0
  34. package/app/webui/build/_app/version.json +1 -1
  35. package/package.json +1 -1
  36. package/app/webui/build/_app/immutable/assets/14.BCCBoMGj.css +0 -1
  37. package/app/webui/build/_app/immutable/chunks/DhZZHWov.js +0 -1
  38. package/app/webui/build/_app/immutable/chunks/WW6La7Nt.js +0 -2
  39. package/app/webui/build/_app/immutable/entry/app.CsaNbZ85.js +0 -2
  40. package/app/webui/build/_app/immutable/entry/start.BZt_oICN.js +0 -1
  41. package/app/webui/build/_app/immutable/nodes/0.zuqEMBQT.js +0 -11
  42. package/app/webui/build/_app/immutable/nodes/10.BC-1FXeC.js +0 -1
  43. package/app/webui/build/_app/immutable/nodes/11.CePwEHqu.js +0 -3
  44. package/app/webui/build/_app/immutable/nodes/13.BLKI9iZo.js +0 -1
  45. package/app/webui/build/_app/immutable/nodes/14.T9l5Rh19.js +0 -1
  46. package/app/webui/build/_app/immutable/nodes/15.39GHtAg1.js +0 -1
  47. package/app/webui/build/_app/immutable/nodes/5.9zgwFV6I.js +0 -2
  48. package/app/webui/build/_app/immutable/nodes/7.DCqiDq6O.js +0 -1
  49. package/app/webui/build/_app/immutable/nodes/9.FiPTezQy.js +0 -1
  50. /package/app/webui/build/_app/immutable/nodes/{18.BtYZF6FM.js → 19.BtYZF6FM.js} +0 -0
@@ -0,0 +1,166 @@
1
+ import{a as u,f as g}from"../chunks/DIeahUKq.js";import"../chunks/CEWi_rGa.js";import{o as S}from"../chunks/DptdhtA1.js";import{at as v,aC as A,aD as R,az as y,au as h,d as x,a5 as _,$,av as t,aw as k,ax as s,k as b,F as w}from"../chunks/BsQ08Wq_.js";import{s as U}from"../chunks/BK0ygNWX.js";import{h as j}from"../chunks/DO5OXNYS.js";import{i as I}from"../chunks/Nd0ktDhd.js";import{P as O}from"../chunks/DQE6YZMg.js";var M=g('<div class="feed-wrap svelte-j8n4iu"><div class="feed-col svelte-j8n4iu"><div class="skill-toolbar-block svelte-j8n4iu"><div class="admin-feed-header skill-header svelte-j8n4iu"><div class="admin-feed-header__left"><h2>Skill</h2> <p class="admin-feed-header__desc">给 Agent 使用的 RssAny 能力增强说明</p></div></div></div> <div class="skill-body-scroll svelte-j8n4iu"><div class="body svelte-j8n4iu"><section class="skill-section svelte-j8n4iu"><pre class="skill-text svelte-j8n4iu"> </pre></section></div></div></div></div>');function q(c,f){v(f,!1);const r=w();let e="http://127.0.0.1:18473";const m=()=>String.raw`# RssAny Agent 能力增强说明
2
+
3
+ 用途:当 Agent 需要获得持续信息输入、追踪订阅更新、补充任务上下文、整理外部链接或建立监控型工作流时,使用本说明。RssAny 负责把网页列表、RSS/Atom、邮件等信源转成统一条目库,并输出 JSON / RSS。Agent 的重点不是维护 RssAny,而是把这些条目转化为更可靠的观察、判断和行动。
4
+
5
+ 能力目标
6
+ 1. 持续感知:从订阅源读取最新条目,减少只依赖一次性搜索或过期记忆。
7
+ 2. 上下文补给:在回答、写作、研究、复盘前,先读取相关 feed 作为近期背景。
8
+ 3. 主题监控:围绕关键词、来源、标签或固定信源,持续观察是否出现新变化。
9
+ 4. 证据保留:输出结论时保留标题、链接、来源、发布时间,方便用户追溯。
10
+ 5. 协作交接:把 feed 条目整理成摘要、候选链接、待办、判断依据或下游 Agent 的上下文。
11
+ 6. 信源扩展:当目标网站没有可用 feed 时,写信源插件,把网页列表转成 Agent 可消费的条目。
12
+
13
+ 用 npm 包安装 RssAny
14
+ 1. 需要 Node.js 20 到 23。
15
+ 2. 全局安装:
16
+ npm install -g rssany
17
+ 3. 启动服务:
18
+ rssany start
19
+ 4. 默认访问地址:
20
+ http://127.0.0.1:18473/
21
+ 5. 停止服务:
22
+ rssany stop
23
+ 6. 更新到最新 npm 包:
24
+ rssany update
25
+ 7. 指定端口:
26
+ PORT=18473 rssany start
27
+ 8. 指定用户数据目录:
28
+ RSSANY_USER_DIR=/path/to/rssany-data rssany start
29
+ 9. 如果全局安装遇到 EACCES,优先把 npm 全局 prefix 改到用户目录,而不是直接使用 sudo:
30
+ npm config set prefix "$HOME/.local"
31
+ export PATH="$HOME/.local/bin:$PATH"
32
+ npm install -g rssany
33
+
34
+ RssAny 如何使用
35
+ 1. 打开 Web UI:${e}/
36
+ 2. 添加订阅源:在首页添加 RSS、网页列表、插件支持的站点 URL 或邮箱类信源。
37
+ 3. 查看条目:Web UI 会展示抓取入库后的统一条目。
38
+ 4. 强制拉取某个信源:
39
+ rssany crawl <sourceRef>
40
+ 5. 读取 JSON feed:
41
+ ${e}/api/feed?limit=50
42
+ 6. 读取 RSS:
43
+ ${e}/rss?limit=50
44
+ 7. 管理插件:${e}/plugins
45
+ 8. 后台设置:${e}/admin
46
+ 9. 重置本地数据:
47
+ rssany reset
48
+ 这个命令会重置本地数据,只有用户明确要求清空时才使用。
49
+ 10. RssAny 的核心用途是把分散来源变成统一条目库;Agent 应把它当作信息入口、监控入口和可追溯上下文入口。
50
+
51
+ 可用信息源
52
+ - 最新 JSON 条目:${e}/api/feed?limit=50
53
+ - 指定信源条目:${e}/api/feed?ref=<sourceRef>&limit=50
54
+ - RSS XML 输出:${e}/rss?limit=50
55
+ - 指定信源 RSS:${e}/rss?ref=<sourceRef>&limit=50
56
+ - 关键词筛选:${e}/rss?q=<关键词>&limit=50
57
+ - 标签筛选:${e}/rss?tags=<tag1>,<tag2>&limit=50
58
+
59
+ 读取原则
60
+ 1. 优先读取 JSON feed,因为它更适合 Agent 解析、过滤和重组。
61
+ 2. 只需要标准订阅格式时读取 RSS XML。
62
+ 3. 处理具体任务时,先取 20 到 50 条,避免一次塞入过多低价值上下文。
63
+ 4. 需要聚焦某个来源时使用 ref;需要聚焦主题时使用 q 或 tags。
64
+ 5. 条目链接是事实入口,摘要只是线索;关键判断应回到原文链接核对。
65
+ 6. RSS XML 通常按请求生成,不要假设本机有静态 RSS 文件。
66
+
67
+ 标准使用流程
68
+ 1. 明确任务主题:先把用户问题转成关键词、来源范围或标签范围。
69
+ 2. 读取近期条目:从 JSON feed 拉取最新内容,保留 title、link、summary、pubDate、sourceRef。
70
+ 3. 过滤噪声:去掉重复、过旧、无关或只有标题党价值的条目。
71
+ 4. 建立上下文:按主题、时间、来源或可信度分组。
72
+ 5. 选择深读对象:只打开最相关的原文链接,避免把所有链接都当成等权证据。
73
+ 6. 形成输出:给用户答案、摘要、行动建议、风险提醒或下一步观察清单。
74
+
75
+ 增强研究能力
76
+ 1. 在开始研究前读取相关 feed,确认近期是否已有重要更新。
77
+ 2. 对每个结论至少保留一个可追溯链接。
78
+ 3. 区分事实、推断和建议;feed 条目只能证明“某来源发布了什么”,不能自动证明内容完全正确。
79
+ 4. 对时间敏感主题,优先按发布时间排序,并指出信息的新旧程度。
80
+ 5. 如果多个来源给出相互冲突的信息,列出冲突点,而不是强行合并。
81
+
82
+ 增强监控能力
83
+ 1. 为用户关心的主题建立关键词或标签清单。
84
+ 2. 定期读取对应 feed,比较这次与上次的新增条目。
85
+ 3. 对新增条目做三层筛选:是否新、是否相关、是否需要行动。
86
+ 4. 输出监控结果时优先给“发生了什么”“为什么重要”“建议做什么”。
87
+ 5. 没有重要更新时直接说明,不要为了凑内容扩大解释。
88
+
89
+ 增强写作与汇报能力
90
+ 1. 先把条目按主题聚类,再写摘要,避免流水账。
91
+ 2. 每组最多保留 3 到 5 个代表链接。
92
+ 3. 摘要中写清楚来源和时间,不把 feed 内容伪装成 Agent 自己的常识。
93
+ 4. 适合输出的形态包括:今日简报、竞品动态、技术趋势、风险清单、候选选题、行动项。
94
+ 5. 如果用户要可交接内容,把结论、证据链接、未确认点分开写。
95
+
96
+ 增强协作能力
97
+ 1. 给另一个 Agent 交接时,提供任务目标、筛选条件、关键条目、已排除噪声和待核验链接。
98
+ 2. 不要把整段 feed 原样塞给下游;先压缩成结构化上下文。
99
+ 3. 保留 sourceRef,方便下游 Agent 继续追踪同一来源。
100
+ 4. 对需要持续跟进的事项,给出下一次应检查的关键词、来源或标签。
101
+
102
+ 新增信息覆盖
103
+ 1. 如果用户觉得 Agent 缺少某类信息,先判断缺的是来源、关键词、标签还是更新频率。
104
+ 2. 可以建议用户在 RssAny 中增加对应订阅源,或调整现有订阅的标签和名称。
105
+ 3. 新来源加入后,Agent 应读取 feed 验证是否真的出现了可用条目。
106
+ 4. 判断新增来源价值时看四点:更新频率、内容相关性、链接稳定性、摘要质量。
107
+ 5. 不要把无关来源加入长期上下文;信息越多不等于能力越强。
108
+
109
+ 扩展信源能力:写插件
110
+ 1. 当目标信息只存在于网页列表、站点索引或非标准页面里,写插件就是增强 Agent 感知范围的一部分。
111
+ 2. 插件的目标不是“写完整爬虫”,而是稳定产出可去重、可追溯、可订阅的条目。
112
+ 3. 优先覆盖高价值来源:用户反复关注、更新稳定、条目链接清晰、内容能支撑决策的站点。
113
+ 4. 插件应使用 ESM 命名导出,核心字段是 id、listUrlPattern、fetchItems。
114
+ 5. fetchItems 返回数组;每条至少提供 guid、title、link 或 url、pubDate、summary 或 content。
115
+ 6. guid 要稳定,优先使用详情页 URL;不要用每次都会变化的随机值。
116
+ 7. 优先使用 RssAny 提供的上下文能力获取和解析页面,例如 ctx.fetchHtml、ctx.deps.parseHtml、ctx.extractItem。
117
+ 8. 不要修改内置插件;新增或覆盖能力应放在用户插件目录,由同 id 覆盖实现替换。
118
+
119
+ 最小插件形态
120
+ export const id = "example-site";
121
+ export const name = "Example Site";
122
+ export const listUrlPattern = "https://example.com/news";
123
+ export const refreshInterval = "1day";
124
+
125
+ export async function fetchItems(sourceId, ctx) {
126
+ const { html, finalUrl } = await ctx.fetchHtml(sourceId, {
127
+ waitMs: 2000,
128
+ purify: true,
129
+ });
130
+ const root = ctx.deps.parseHtml(html);
131
+ const links = root.querySelectorAll("a.article");
132
+ return links.map((a) => {
133
+ const href = a.getAttribute("href") || "";
134
+ const url = new URL(href, finalUrl).href;
135
+ return {
136
+ guid: url,
137
+ title: a.text.trim(),
138
+ link: url,
139
+ url,
140
+ pubDate: new Date(),
141
+ summary: "",
142
+ };
143
+ });
144
+ }
145
+
146
+ 插件能力验收
147
+ 1. 能否匹配目标 sourceRef。
148
+ 2. 能否返回非空条目数组。
149
+ 3. 每条是否有稳定 guid 和可打开链接。
150
+ 4. 再次读取同一来源时是否能去重,而不是重复制造新条目。
151
+ 5. 在 JSON feed 或 RSS 输出里能否看到该来源的新条目。
152
+ 6. 如果条目质量不足,优先修正选择器、标题、链接、发布时间和摘要,而不是扩大抓取范围。
153
+
154
+ 质量检查
155
+ 1. 是否读取了最新 feed,而不是只靠记忆回答。
156
+ 2. 是否保留了关键条目的链接和发布时间。
157
+ 3. 是否把相关条目和无关条目分开处理。
158
+ 4. 是否说明了哪些内容已经核对、哪些只是待确认线索。
159
+ 5. 是否把输出转成用户可行动的形式,而不是只复述标题。
160
+
161
+ 边界
162
+ 1. RssAny 是订阅与条目管线,不是替代 Agent 思考的研究产品。
163
+ 2. feed 负责提供输入,Agent 负责判断、筛选、整合和表达。
164
+ 3. 不要把没有来源链接的内容当成确定事实。
165
+ 4. 不要为了“看起来更完整”引入与任务无关的条目。
166
+ 5. 不要删除、重置或破坏 RssAny 的用户数据;能力增强应体现在更好的读取、过滤、追踪和交接上。`;S(()=>{window.location.origin&&(e=window.location.origin)}),A(()=>{},()=>{_(r,m())}),R(),I();var a=M();j("j8n4iu",N=>{x(()=>{$.title=`Skill - ${O}`})});var i=t(a),n=k(t(i),2),l=t(n),o=t(l),d=t(o),p=t(d,!0);s(d),s(o),s(l),s(n),s(i),s(a),y(()=>U(p,b(r))),u(c,a),h()}export{q as component};
@@ -1 +1 @@
1
- import{a as t,f as r}from"../chunks/DIeahUKq.js";import"../chunks/CEWi_rGa.js";import{d as m,$ as s}from"../chunks/BsQ08Wq_.js";import{h as p}from"../chunks/DO5OXNYS.js";import{S as n}from"../chunks/qwlQuQWi.js";import{P as f}from"../chunks/WW6La7Nt.js";var i=r('<meta name="description" content="Subscribed sources: labels, counts, pull and manage feeds."/>');function S(e){p("1uha8ag",o=>{var a=i();m(()=>{s.title=`Sources — ${f}`}),t(o,a)}),n(e,{})}export{S as component};
1
+ import{a as t,f as r}from"../chunks/DIeahUKq.js";import"../chunks/CEWi_rGa.js";import{d as m,$ as s}from"../chunks/BsQ08Wq_.js";import{h as p}from"../chunks/DO5OXNYS.js";import{S as n}from"../chunks/H8yPhK_g.js";import{P as f}from"../chunks/DQE6YZMg.js";var i=r('<meta name="description" content="Subscribed sources: labels, counts, pull and manage feeds."/>');function S(e){p("1uha8ag",o=>{var a=i();m(()=>{s.title=`Sources — ${f}`}),t(o,a)}),n(e,{})}export{S as component};
@@ -0,0 +1,2 @@
1
+ import{a as u,f as p}from"../chunks/DIeahUKq.js";import"../chunks/CEWi_rGa.js";import{o as V,a as W}from"../chunks/DptdhtA1.js";import{at as Z,au as ee,d as te,$ as ae,av as s,aw as v,k as r,ax as t,ay as se,az as $,a5 as Y,F as re,y as L,aA as z,aB as le}from"../chunks/BsQ08Wq_.js";import{s as g}from"../chunks/BK0ygNWX.js";import{i as ie}from"../chunks/rNwPv4DZ.js";import{e as y,i as D}from"../chunks/B553hBXT.js";import{h as ne}from"../chunks/DO5OXNYS.js";import{s as oe,a as de,b as ce}from"../chunks/DCl8F8Io.js";import{i as ve}from"../chunks/Nd0ktDhd.js";import{P as fe}from"../chunks/DQE6YZMg.js";var ue=p("<span></span>"),pe=p('<div class="scheduler-row svelte-1jef3w8"><div class="scheduler-left svelte-1jef3w8"><span class="scheduler-name svelte-1jef3w8"> </span> <span class="scheduler-meta svelte-1jef3w8"> </span></div> <div class="scheduler-slots svelte-1jef3w8"></div></div>'),me=p('<section class="scheduler-section svelte-1jef3w8"><h3 class="section-title svelte-1jef3w8">调度任务</h3> <div class="scheduler-card svelte-1jef3w8"></div></section>'),he=p('<a class="card svelte-1jef3w8"><div class="card-main svelte-1jef3w8"><span class="card-label svelte-1jef3w8"> </span> <span class="card-desc svelte-1jef3w8"> </span></div> <span class="card-arrow svelte-1jef3w8">›</span></a>'),_e=p('<section class="links-section svelte-1jef3w8"><h3 class="section-title svelte-1jef3w8"> </h3> <div class="links svelte-1jef3w8"></div></section>'),we=p('<div class="feed-wrap svelte-1jef3w8"><div class="feed-col svelte-1jef3w8"><div class="settings-toolbar-block svelte-1jef3w8"><div class="admin-feed-header settings-header svelte-1jef3w8"><div class="admin-feed-header__left"><h2>设置</h2> <p class="admin-feed-header__desc">管理入口与调试工具</p></div></div></div> <div class="settings-body-scroll svelte-1jef3w8"><div class="body svelte-1jef3w8"><!> <!></div></div></div></div>');function ke(U,q){Z(q,!1);function B(l){if(l===void 0)return"";if(l===0)return"· 正在执行";if(l===-1)return"· 无定时任务";const e=new Date(l),o=Date.now(),i=l-o;if(i<=0)return"· 即将执行";if(i<6e4)return`· 约 ${Math.round(i/1e3)} 秒后`;if(i<36e5)return`· 约 ${Math.round(i/6e4)} 分钟后`;const c=e.toLocaleTimeString("zh-CN",{hour:"2-digit",minute:"2-digit"}),n=new Date(o),m=e.getDate()===n.getDate()&&e.getMonth()===n.getMonth()&&e.getFullYear()===n.getFullYear(),a=new Date(n);a.setDate(a.getDate()+1);const d=e.getDate()===a.getDate()&&e.getMonth()===a.getMonth()&&e.getFullYear()===a.getFullYear();return m?`· 下次 ${c}`:d?`· 下次 明天 ${c}`:`· 下次 ${e.toLocaleDateString("zh-CN",{month:"numeric",day:"numeric"})} ${c}`}const E=[{title:"管理",links:[{href:"/admin/tags",label:"标签",desc:"系统标签库,新入库条目由 LLM 自动匹配打标签"},{href:"/admin/pipeline",label:"Pipeline",desc:"入库前处理(打标签、翻译),支持顺序与开关"}]},{title:"集成",links:[{href:"/admin/llm",label:"LLM",desc:"OpenAI 兼容 API(解析、Pipeline、标签与翻译);可替代 .env 中的 OPENAI_*"},{href:"/admin/proxy",label:"代理",desc:"维护代理列表,并选择全局默认代理;信源可从列表中单独选择"},{href:"/admin/deliver",label:"投递",desc:"配置下游 URL 与可选 Bearer 令牌;非空 URL 时在写库与 Pipeline 后额外 POST 条目"}]},{title:"调试",links:[{href:"/admin/parse",label:"Parse",desc:"从列表页解析条目,返回 JSON"}]}];let j=re({}),M=null;async function O(){try{const e=await(await de("/api/scheduler/stats")).text();Y(j,e.trim()?JSON.parse(e):{})}catch{Y(j,{})}}V(()=>{O(),M=setInterval(O,2e3)}),W(()=>{M&&clearInterval(M)});const J=5;ve();var x=we();ne("1jef3w8",l=>{te(()=>{ae.title=`设置 - ${fe}`})});var P=s(x),k=v(s(P),2),N=s(k),A=s(N);{var R=l=>{var e=me(),o=v(s(e),2);y(o,5,()=>Object.entries(r(j)),D,(i,c)=>{var n=z(()=>le(r(c),2));let m=()=>r(n)[0],a=()=>r(n)[1];const d=L(()=>a().running),b=L(()=>a().completedCount??0),h=L(()=>Math.min(a().concurrency,J));var _=pe(),f=s(_),w=s(f),H=s(w,!0);t(w);var C=v(w,2),K=s(C);t(C),t(f);var F=v(f,2);y(F,5,()=>Array(r(h)),D,(S,ge,Q)=>{var I=ue();let T;$(()=>T=ce(I,1,"slot svelte-1jef3w8",null,T,{filled:Q<r(d)})),u(S,I)}),t(F),t(_),$(S=>{g(H,m()),g(K,`执行中 ${r(d)??""}/${a().concurrency??""} · 排队 ${a().queued??""} · 定时 ${a().scheduledCount??""} · 已完成 ${r(b)??""}
2
+ ${S??""}`)},[()=>B(a().nextRunTime)]),u(i,_)}),t(o),t(e),u(l,e)},X=z(()=>Object.keys(r(j)).length>0);ie(A,l=>{r(X)&&l(R)})}var G=v(A,2);y(G,1,()=>E,D,(l,e)=>{var o=_e(),i=s(o),c=s(i,!0);t(i);var n=v(i,2);y(n,5,()=>r(e).links,D,(m,a)=>{var d=he(),b=s(d),h=s(b),_=s(h,!0);t(h);var f=v(h,2),w=s(f,!0);t(f),t(b),se(2),t(d),$(()=>{oe(d,"href",r(a).href),g(_,r(a).label),g(w,r(a).desc)}),u(m,d)}),t(n),t(o),$(()=>g(c,r(e).title)),u(l,o)}),t(N),t(k),t(P),t(x),u(U,x),ee()}export{ke as component};
@@ -1,2 +1,2 @@
1
- import{a as p,f as d}from"../chunks/DIeahUKq.js";import"../chunks/CEWi_rGa.js";import{o as Y}from"../chunks/DptdhtA1.js";import{at as Z,az as ee,au as te,d as se,k as s,F as h,av as o,aw as c,$ as ae,ax as r,ay as P,a5 as a,f as J}from"../chunks/BsQ08Wq_.js";import{e as N,s as x}from"../chunks/BK0ygNWX.js";import{i as R}from"../chunks/rNwPv4DZ.js";import{h as oe}from"../chunks/DO5OXNYS.js";import{P as re,c as S,r as z}from"../chunks/WW6La7Nt.js";import{b as A}from"../chunks/BnqaikL8.js";import{i as ie}from"../chunks/Nd0ktDhd.js";import{B as ne}from"../chunks/CIsxbQ9B.js";import{s as f}from"../chunks/4TuV_psf.js";var ce=d('<p class="hint svelte-bhaf7m">加载中…</p>'),le=d('<input type="url" class="url-input svelte-bhaf7m" placeholder="https://agidaily.cc/api/gateway"/> <p class="hint svelte-bhaf7m">保存后生效;测试仅向 <code>…/test</code> 发一条合并的连通性请求(示例 items + 当前 sources),不写本地库。</p>',1),fe=d('<p class="hint svelte-bhaf7m">加载中…</p>'),me=d('<input type="password" class="url-input svelte-bhaf7m" placeholder="与下游 token.txt 内容一致,留空则不发送 Authorization" autocomplete="off"/> <p class="hint svelte-bhaf7m">非空时出站请求携带 Bearer。清空并保存可从配置中移除 token 字段。</p>',1),ve=d(`<div class="feed-wrap svelte-bhaf7m"><div class="feed-col svelte-bhaf7m"><div class="body svelte-bhaf7m"><!> <p class="intro svelte-bhaf7m">填写<strong>Gateway 基址</strong>(到 <code class="svelte-bhaf7m">/api/gateway</code> 为止,不要带 <code class="svelte-bhaf7m">/items</code>)。非空时:入库与 Pipeline
2
- 完成后会 <code class="svelte-bhaf7m"> </code>(体为 <code class="svelte-bhaf7m">sourceRef</code> + <code class="svelte-bhaf7m">items</code>);<code class="svelte-bhaf7m">sources.json</code> 变更后会 <code class="svelte-bhaf7m">POST …/sources</code>(正文与本地信源文件一致)。下游按固定路径接收即可。</p> <section class="form-section svelte-bhaf7m"><h3 class="section-title svelte-bhaf7m">Gateway 基址</h3> <!></section> <section class="form-section svelte-bhaf7m"><h3 class="section-title svelte-bhaf7m">Gateway 令牌(可选)</h3> <!></section> <section class="form-section svelte-bhaf7m"><div class="btn-row svelte-bhaf7m"><button type="button" class="btn btn-primary svelte-bhaf7m"> </button> <button type="button" class="btn btn-secondary svelte-bhaf7m"> </button></div></section></div></div></div>`);function xe(F,M){Z(M,!1);let i=h(""),n=h(""),l=h(!0),b=h(!1),u=h(!1);async function U(){a(l,!0);try{const e=await S("/api/deliver");a(i,(e==null?void 0:e.gateway)??""),a(n,(e==null?void 0:e.token)??"")}catch{a(i,""),a(n,"")}finally{a(l,!1)}}async function $(){a(b,!0);try{const e=await S("/api/deliver",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({gateway:s(i).trim(),token:s(n).trim()})});if(!(e!=null&&e.ok))throw new Error((e==null?void 0:e.message)??"保存失败");a(i,(e==null?void 0:e.gateway)??s(i)),a(n,(e==null?void 0:e.token)??s(n)),f("已保存","success")}catch(e){f("保存失败: "+(e instanceof Error?e.message:String(e)),"error")}finally{a(b,!1)}}async function D(){const e=s(i).trim();if(!e){f("请先填写 Gateway 基址","error");return}a(u,!0);try{const t=await S("/api/deliver/test",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({gateway:e,token:s(n).trim()})});t!=null&&t.ok?f("Gateway 测试投递成功(POST …/test)","success"):f("测试失败: "+((t==null?void 0:t.message)??"未知错误"),"error")}catch(t){f("测试失败: "+(t instanceof Error?t.message:String(t)),"error")}finally{a(u,!1)}}Y(U),ie();var _=ve();oe("bhaf7m",e=>{se(()=>{ae.title=`投递 - ${re}`})});var O=o(_),G=o(O),E=o(G);ne(E,{});var g=c(E,2),j=c(o(g),7),q=o(j);r(j),P(9),r(g);var w=c(g,2),H=c(o(w),2);{var I=e=>{var t=ce();p(e,t)},K=e=>{var t=le(),v=J(t);z(v),P(2),A(v,()=>s(i),T=>a(i,T)),p(e,t)};R(H,e=>{s(l)?e(I):e(K,-1)})}r(w);var k=c(w,2),L=c(o(k),2);{var Q=e=>{var t=fe();p(e,t)},V=e=>{var t=me(),v=J(t);z(v),P(2),A(v,()=>s(n),T=>a(n,T)),p(e,t)};R(L,e=>{s(l)?e(Q):e(V,-1)})}r(k);var B=c(k,2),C=o(B),m=o(C),W=o(m,!0);r(m);var y=c(m,2),X=o(y,!0);r(y),r(C),r(B),r(G),r(O),r(_),ee(e=>{x(q,`POST ${(s(i)||"…")??""}/items`),m.disabled=s(b)||s(l),x(W,s(b)?"保存中…":"保存"),y.disabled=e,x(X,s(u)?"测试中…":"测试 Gateway")},[()=>s(u)||s(l)||!s(i).trim()]),N("click",m,$),N("click",y,D),p(F,_),te()}export{xe as component};
1
+ import{a as p,f as d}from"../chunks/DIeahUKq.js";import"../chunks/CEWi_rGa.js";import{o as Y}from"../chunks/DptdhtA1.js";import{at as Z,az as ee,au as te,d as se,k as s,F as h,av as o,aw as c,$ as ae,ax as r,ay as P,a5 as a,f as J}from"../chunks/BsQ08Wq_.js";import{e as N,s as x}from"../chunks/BK0ygNWX.js";import{i as R}from"../chunks/rNwPv4DZ.js";import{h as oe}from"../chunks/DO5OXNYS.js";import{c as S,r as z}from"../chunks/DCl8F8Io.js";import{b as A}from"../chunks/BnqaikL8.js";import{i as re}from"../chunks/Nd0ktDhd.js";import{P as ie}from"../chunks/DQE6YZMg.js";import{B as ne}from"../chunks/sgw2KQ1B.js";import{s as m}from"../chunks/4TuV_psf.js";var ce=d('<p class="hint svelte-bhaf7m">加载中…</p>'),le=d('<input type="url" class="url-input svelte-bhaf7m" placeholder="https://agidaily.cc/api/gateway"/> <p class="hint svelte-bhaf7m">保存后生效;测试仅向 <code>…/test</code> 发一条合并的连通性请求(示例 items + 当前 sources),不写本地库。</p>',1),me=d('<p class="hint svelte-bhaf7m">加载中…</p>'),fe=d('<input type="password" class="url-input svelte-bhaf7m" placeholder="与下游 token.txt 内容一致,留空则不发送 Authorization" autocomplete="off"/> <p class="hint svelte-bhaf7m">非空时出站请求携带 Bearer。清空并保存可从配置中移除 token 字段。</p>',1),ve=d(`<div class="feed-wrap svelte-bhaf7m"><div class="feed-col svelte-bhaf7m"><div class="body svelte-bhaf7m"><!> <p class="intro svelte-bhaf7m">填写<strong>Gateway 基址</strong>(到 <code class="svelte-bhaf7m">/api/gateway</code> 为止,不要带 <code class="svelte-bhaf7m">/items</code>)。非空时:入库与 Pipeline
2
+ 完成后会 <code class="svelte-bhaf7m"> </code>(体为 <code class="svelte-bhaf7m">sourceRef</code> + <code class="svelte-bhaf7m">items</code>);<code class="svelte-bhaf7m">sources.json</code> 变更后会 <code class="svelte-bhaf7m">POST …/sources</code>(正文与本地信源文件一致)。下游按固定路径接收即可。</p> <section class="form-section svelte-bhaf7m"><h3 class="section-title svelte-bhaf7m">Gateway 基址</h3> <!></section> <section class="form-section svelte-bhaf7m"><h3 class="section-title svelte-bhaf7m">Gateway 令牌(可选)</h3> <!></section> <section class="form-section svelte-bhaf7m"><div class="btn-row svelte-bhaf7m"><button type="button" class="btn btn-primary svelte-bhaf7m"> </button> <button type="button" class="btn btn-secondary svelte-bhaf7m"> </button></div></section></div></div></div>`);function Se(F,M){Z(M,!1);let i=h(""),n=h(""),l=h(!0),b=h(!1),u=h(!1);async function U(){a(l,!0);try{const e=await S("/api/deliver");a(i,(e==null?void 0:e.gateway)??""),a(n,(e==null?void 0:e.token)??"")}catch{a(i,""),a(n,"")}finally{a(l,!1)}}async function $(){a(b,!0);try{const e=await S("/api/deliver",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({gateway:s(i).trim(),token:s(n).trim()})});if(!(e!=null&&e.ok))throw new Error((e==null?void 0:e.message)??"保存失败");a(i,(e==null?void 0:e.gateway)??s(i)),a(n,(e==null?void 0:e.token)??s(n)),m("已保存","success")}catch(e){m("保存失败: "+(e instanceof Error?e.message:String(e)),"error")}finally{a(b,!1)}}async function D(){const e=s(i).trim();if(!e){m("请先填写 Gateway 基址","error");return}a(u,!0);try{const t=await S("/api/deliver/test",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({gateway:e,token:s(n).trim()})});t!=null&&t.ok?m("Gateway 测试投递成功(POST …/test)","success"):m("测试失败: "+((t==null?void 0:t.message)??"未知错误"),"error")}catch(t){m("测试失败: "+(t instanceof Error?t.message:String(t)),"error")}finally{a(u,!1)}}Y(U),re();var _=ve();oe("bhaf7m",e=>{se(()=>{ae.title=`投递 - ${ie}`})});var O=o(_),G=o(O),E=o(G);ne(E,{});var g=c(E,2),j=c(o(g),7),q=o(j);r(j),P(9),r(g);var w=c(g,2),H=c(o(w),2);{var I=e=>{var t=ce();p(e,t)},K=e=>{var t=le(),v=J(t);z(v),P(2),A(v,()=>s(i),T=>a(i,T)),p(e,t)};R(H,e=>{s(l)?e(I):e(K,-1)})}r(w);var k=c(w,2),L=c(o(k),2);{var Q=e=>{var t=me();p(e,t)},V=e=>{var t=fe(),v=J(t);z(v),P(2),A(v,()=>s(n),T=>a(n,T)),p(e,t)};R(L,e=>{s(l)?e(Q):e(V,-1)})}r(k);var B=c(k,2),C=o(B),f=o(C),W=o(f,!0);r(f);var y=c(f,2),X=o(y,!0);r(y),r(C),r(B),r(G),r(O),r(_),ee(e=>{x(q,`POST ${(s(i)||"…")??""}/items`),f.disabled=s(b)||s(l),x(W,s(b)?"保存中…":"保存"),y.disabled=e,x(X,s(u)?"测试中…":"测试 Gateway")},[()=>s(u)||s(l)||!s(i).trim()]),N("click",f,$),N("click",y,D),p(F,_),te()}export{Se as component};
@@ -0,0 +1 @@
1
+ import{a as v,f as p,t as ve}from"../chunks/DIeahUKq.js";import"../chunks/CEWi_rGa.js";import{o as ce}from"../chunks/DptdhtA1.js";import{at as pe,az as R,au as me,d as fe,av as i,aw as n,$ as de,k as o,ax as l,a5 as s,F as c,f as ue,ay as j}from"../chunks/BsQ08Wq_.js";import{e as $,s as z}from"../chunks/BK0ygNWX.js";import{i as b}from"../chunks/rNwPv4DZ.js";import{h as ge}from"../chunks/DO5OXNYS.js";import{c as U,r as E,s as O}from"../chunks/DCl8F8Io.js";import{b as C}from"../chunks/BnqaikL8.js";import{i as _e}from"../chunks/Nd0ktDhd.js";import{P as ye}from"../chunks/DQE6YZMg.js";import{B as he}from"../chunks/sgw2KQ1B.js";import{s as w}from"../chunks/4TuV_psf.js";var be=p('<p class="hint svelte-1a0dvmg">加载中…</p>'),we=p('<input type="url" class="text-input svelte-1a0dvmg" placeholder="https://api.openai.com/v1" autocomplete="off"/>'),xe=p('<input type="text" class="text-input svelte-1a0dvmg" placeholder="gpt-4o-mini" autocomplete="off"/>'),Ke=p('<p class="hint svelte-1a0dvmg">加载中…</p>'),Pe=p("当前<strong>可用</strong>(文件或环境变量)。",1),ke=p("未检测到 Key,请填写或设置 <code>OPENAI_API_KEY</code>。",1),Ae=p('<input type="password" class="text-input svelte-1a0dvmg" autocomplete="new-password"/> <p class="hint svelte-1a0dvmg"><!> <!></p>',1),Ie=p('<div class="feed-wrap svelte-1a0dvmg"><div class="feed-col svelte-1a0dvmg"><div class="body svelte-1a0dvmg"><!> <p class="intro svelte-1a0dvmg">与 OpenAI 兼容的 Chat Completions API,用于列表解析、正文提取、Pipeline 打标签与翻译等。</p> <section class="form-section svelte-1a0dvmg"><h3 class="section-title svelte-1a0dvmg">API Base URL</h3> <!></section> <section class="form-section svelte-1a0dvmg"><h3 class="section-title svelte-1a0dvmg">模型</h3> <!></section> <section class="form-section svelte-1a0dvmg"><h3 class="section-title svelte-1a0dvmg">API Key</h3> <!></section> <section class="form-section svelte-1a0dvmg"><div class="btn-row svelte-1a0dvmg"><button type="button" class="btn btn-primary svelte-1a0dvmg"> </button> <button type="button" class="btn btn-secondary svelte-1a0dvmg"> </button></div></section></div></div></div>');function je(D,Y){pe(Y,!1);let m=c(""),f=c(""),u=c(""),g=c(!1),_=c(!1),d=c(!0),x=c(!1),K=c(!1);async function q(){s(d,!0);try{const e=await U("/api/llm");s(m,(e==null?void 0:e.baseUrl)??""),s(f,(e==null?void 0:e.model)??""),s(g,!!(e!=null&&e.hasApiKey)),s(_,!!(e!=null&&e.apiKeyInFile)),s(u,"")}catch{s(m,""),s(f,""),s(g,!1),s(_,!1)}finally{s(d,!1)}}async function G(){s(x,!0);try{const e={baseUrl:o(m).trim(),model:o(f).trim()},a=o(u).trim();a&&(e.apiKey=a);const t=await U("/api/llm",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!(t!=null&&t.ok))throw new Error((t==null?void 0:t.message)??"保存失败");s(m,(t==null?void 0:t.baseUrl)??o(m)),s(f,(t==null?void 0:t.model)??o(f)),s(g,!!(t!=null&&t.hasApiKey)),s(_,!!(t!=null&&t.apiKeyInFile)),s(u,""),w("已保存","success")}catch(e){w("保存失败: "+(e instanceof Error?e.message:String(e)),"error")}finally{s(x,!1)}}async function H(){s(K,!0);try{const e=await U("/api/llm/test",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({})});if(e!=null&&e.ok){const a=typeof e.reply=="string"?e.reply.trim():"";w(a?`连接成功:${a.slice(0,120)}${a.length>120?"…":""}`:"连接成功","success")}else w("测试失败: "+((e==null?void 0:e.message)??"未知错误"),"error")}catch(e){w("测试失败: "+(e instanceof Error?e.message:String(e)),"error")}finally{s(K,!1)}}ce(q),_e();var k=Ie();ge("1a0dvmg",e=>{fe(()=>{de.title=`LLM - ${ye}`})});var F=i(k),S=i(F),N=i(S);he(N,{});var A=n(N,4),Q=n(i(A),2);{var V=e=>{var a=be();v(e,a)},W=e=>{var a=we();E(a),C(a,()=>o(m),t=>s(m,t)),v(e,a)};b(Q,e=>{o(d)?e(V):e(W,-1)})}l(A);var I=n(A,2),X=n(i(I),2);{var Z=e=>{var a=xe();E(a),O(a,"spellcheck",!1),C(a,()=>o(f),t=>s(f,t)),v(e,a)};b(X,e=>{o(d)||e(Z)})}l(I);var T=n(I,2),ee=n(i(T),2);{var te=e=>{var a=Ke();v(e,a)},se=e=>{var a=Ae(),t=ue(a);E(t),O(t,"spellcheck",!1);var L=n(t,2),M=i(L);{var re=r=>{var h=Pe();j(2),v(r,h)},ie=r=>{var h=ke();j(2),v(r,h)};b(M,r=>{o(g)?r(re):r(ie,-1)})}var le=n(M,2);{var ne=r=>{var h=ve("已写入配置文件。");v(r,h)};b(le,r=>{o(_)&&r(ne)})}l(L),R(()=>O(t,"placeholder",o(_)?"已保存在配置中,留空表示不修改":"sk-...")),C(t,()=>o(u),r=>s(u,r)),v(e,a)};b(ee,e=>{o(d)?e(te):e(se,-1)})}l(T);var B=n(T,2),J=i(B),y=i(J),ae=i(y,!0);l(y);var P=n(y,2),oe=i(P,!0);l(P),l(J),l(B),l(S),l(F),l(k),R(()=>{y.disabled=o(x)||o(d),z(ae,o(x)?"保存中…":"保存"),P.disabled=o(K)||o(d)||!o(g),z(oe,o(K)?"测试中…":"测试连接")}),$("click",y,G),$("click",P,H),v(D,k),me()}export{je as component};
@@ -1 +1 @@
1
- import{a as e,f as m}from"../chunks/DIeahUKq.js";import"../chunks/CEWi_rGa.js";import{o as i}from"../chunks/DptdhtA1.js";import{at as f,au as n}from"../chunks/BsQ08Wq_.js";import{s as l,a as u}from"../chunks/BI_ale1m.js";import{i as c}from"../chunks/Nd0ktDhd.js";import{g}from"../chunks/DhZZHWov.js";import{p as $}from"../chunks/Czo-EcYU.js";var v=m('<p class="muted svelte-1w6l7vk">正在跳转…</p>');function b(o,t){f(t,!1);const a=()=>u($,"$page",r),[r,s]=l();i(()=>{g("/logs"+a().url.search,{replaceState:!0})}),c();var p=v();e(o,p),n(),s()}export{b as component};
1
+ import{a as e,f as m}from"../chunks/DIeahUKq.js";import"../chunks/CEWi_rGa.js";import{o as i}from"../chunks/DptdhtA1.js";import{at as f,au as n}from"../chunks/BsQ08Wq_.js";import{s as l,a as u}from"../chunks/BI_ale1m.js";import{i as c}from"../chunks/Nd0ktDhd.js";import{g}from"../chunks/CdnuzsHd.js";import{p as $}from"../chunks/NqUZvg9q.js";var v=m('<p class="muted svelte-1w6l7vk">正在跳转…</p>');function b(o,t){f(t,!1);const a=()=>u($,"$page",r),[r,s]=l();i(()=>{g("/logs"+a().url.search,{replaceState:!0})}),c();var p=v();e(o,p),n(),s()}export{b as component};
@@ -0,0 +1 @@
1
+ import{a as d,f as _,c as de,t as pe}from"../chunks/DIeahUKq.js";import"../chunks/CEWi_rGa.js";import{o as ue}from"../chunks/DptdhtA1.js";import{at as fe,aC as q,aD as me,az as g,k as e,au as _e,d as xe,av as s,a5 as a,F as n,$ as he,ay as K,ax as l,aw as v,f as A,u as C}from"../chunks/BsQ08Wq_.js";import{e as ye,s as b}from"../chunks/BK0ygNWX.js";import{i as D}from"../chunks/rNwPv4DZ.js";import{e as $e}from"../chunks/B553hBXT.js";import{h as ge}from"../chunks/DO5OXNYS.js";import{r as be,c as Pe}from"../chunks/DCl8F8Io.js";import{b as we}from"../chunks/BnqaikL8.js";import{p as Se}from"../chunks/Bfc47y5P.js";import{i as Oe}from"../chunks/Nd0ktDhd.js";import{P as Ce}from"../chunks/DQE6YZMg.js";import{B as Te}from"../chunks/sgw2KQ1B.js";import{S as ke,a as Ie,C as Ne,b as Je,c as Le,d as Re}from"../chunks/CflZmztn.js";import{P as Ue}from"../chunks/D6JgZyc_.js";var qe=_("<span> </span> <!>",1),Ae=_("<!> <!>",1),De=_('<p class="field-hint svelte-1x680s0">暂无代理列表,可在后台「代理」中添加。</p>'),ze=_('<div class="result-error svelte-1x680s0" role="alert"> </div>'),Be=_('<div class="result-wrap svelte-1x680s0"><p class="result-label svelte-1x680s0">解析结果(与下方接口一致)</p> <pre class="result-json svelte-1x680s0"> </pre></div>'),Ee=_('<div class="feed-wrap svelte-1x680s0"><div class="feed-col svelte-1x680s0"><div class="feed-header svelte-1x680s0"><!> <h2 class="svelte-1x680s0">Parse</h2> <p class="page-desc svelte-1x680s0">从列表页解析条目结构,返回 JSON,用于调试插件 Parser 规则</p></div> <div class="body svelte-1x680s0"><form><div class="url-row svelte-1x680s0"><input type="url" placeholder="输入列表页地址…" required="" autocomplete="url" class="svelte-1x680s0"/></div> <div class="proxy-row svelte-1x680s0"><!> <!></div> <div class="action-row svelte-1x680s0"><button type="submit" class="svelte-1x680s0"> </button></div></form> <!> <!></div></div></div>');function lt(Q,X){fe(X,!1);const T=n(),x=n(),z=n();let f=n(""),o=n(""),c=n([]),P=n(!1),h=n(""),y=n("");function Y(t){a(o,t)}async function Z(){try{const t=await Pe("/api/proxy");a(c,Array.isArray(t.proxyList)?t.proxyList.filter(r=>typeof r=="string"&&r.trim().length>0):[])}catch{a(c,[])}}async function ee(){if(e(f).trim()){a(P,!0),a(h,""),a(y,"");try{const t=e(f).startsWith("http")?e(f):"https://"+e(f),r=new URLSearchParams,i=e(o).trim();i&&r.set("proxy",i);const p=r.toString(),$=await fetch("/admin/parse/"+encodeURIComponent(t)+(p?"?"+p:""),{credentials:"include"}),u=await $.text();if(!$.ok){a(h,u||`HTTP ${$.status}`);return}try{a(y,JSON.stringify(JSON.parse(u),null,2))}catch{a(y,u)}}catch(t){a(h,t instanceof Error?t.message:String(t))}finally{a(P,!1)}}}ue(Z),q(()=>(e(o),e(c)),()=>{a(T,e(o).trim()&&!e(c).includes(e(o).trim()))}),q(()=>(e(T),e(o),e(c)),()=>{a(x,[{value:"",label:"使用默认代理"},...e(T)?[{value:e(o),label:`${e(o)}(当前配置,未在代理列表中)`}]:[],...e(c).map(t=>({value:t,label:t}))])}),q(()=>(e(x),e(o)),()=>{var t;a(z,((t=e(x).find(r=>r.value===e(o)))==null?void 0:t.label)??"使用默认代理")}),me(),Oe();var k=Ee();ge("1x680s0",t=>{xe(()=>{he.title=`Parse - ${Ce}`})});var B=s(k),I=s(B),te=s(I);Te(te,{}),K(4),l(I);var E=v(I,2),w=s(E),N=s(w),F=s(N);be(F),l(N);var J=v(N,2),M=s(J);ke(M,{type:"single",get value(){return e(o)},onValueChange:Y,get items(){return e(x)},children:(t,r)=>{var i=Ae(),p=A(i);Ie(p,{class:"proxy-select-trigger","aria-label":"代理",children:(u,ne)=>{var S=qe(),O=A(S),R=s(O,!0);l(O);var V=v(O,2);Ne(V,{size:14,"aria-hidden":"true"}),g(()=>b(R,e(z))),d(u,S)},$$slots:{default:!0}});var $=v(p,2);Ue($,{children:(u,ne)=>{Je(u,{class:"proxy-select-content",sideOffset:4,children:(S,O)=>{Le(S,{class:"proxy-select-viewport",children:(R,V)=>{var W=de(),ve=A(W);$e(ve,1,()=>e(x),U=>U.value,(U,m)=>{Re(U,{class:"proxy-select-item",get value(){return e(m),C(()=>e(m).value)},get label(){return e(m),C(()=>e(m).label)},children:(ce,Fe)=>{K();var G=pe();g(()=>b(G,(e(m),C(()=>e(m).label)))),d(ce,G)},$$slots:{default:!0}})}),d(R,W)},$$slots:{default:!0}})},$$slots:{default:!0}})},$$slots:{default:!0}}),d(t,i)},$$slots:{default:!0}});var re=v(M,2);{var ae=t=>{var r=De();d(t,r)};D(re,t=>{e(c),C(()=>e(c).length===0)&&t(ae)})}l(J);var j=v(J,2),L=s(j),se=s(L,!0);l(L),l(j),l(w);var H=v(w,2);{var le=t=>{var r=ze(),i=s(r,!0);l(r),g(()=>b(i,e(h))),d(t,r)};D(H,t=>{e(h)&&t(le)})}var oe=v(H,2);{var ie=t=>{var r=Be(),i=v(s(r),2),p=s(i,!0);l(i),l(r),g(()=>b(p,e(y))),d(t,r)};D(oe,t=>{e(y)&&t(ie)})}l(E),l(B),l(k),g(()=>{L.disabled=e(P),b(se,e(P)?"解析中…":"解析")}),we(F,()=>e(f),t=>a(f,t)),ye("submit",w,Se(ee)),d(Q,k),_e()}export{lt as component};
@@ -1 +1 @@
1
- {"version":"1781605764291"}
1
+ {"version":"1782211192530"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rssany",
3
- "version": "0.3.4",
3
+ "version": "0.3.5",
4
4
  "description": "Universal RSS/Atom/JSON Feed pipeline — fetches, extracts, parses and converts any web content into consumable feeds with plugin support",
5
5
  "author": "Joo",
6
6
  "type": "module",
@@ -1 +0,0 @@
1
- .feed-wrap.svelte-1lsf4ps{--feed-sticky-gap-after: 0;margin-top:calc(-1 * var(--main-padding-top));width:100%;max-width:100%;display:flex;flex-direction:column;flex:1;min-height:0;overflow:hidden}.feed-col.svelte-1lsf4ps{flex:1;display:flex;flex-direction:column;overflow:hidden;min-height:0;background:transparent}.feed-toolbar-block.svelte-1lsf4ps{flex-shrink:0;padding-top:var(--main-padding-top);padding-bottom:var(--feed-sticky-gap-after)}.feed-toolbar-block.svelte-1lsf4ps .admin-feed-header{min-height:4.1rem}.log-filter-input.svelte-1lsf4ps{width:min(16rem,34vw)}.log-level-trigger.svelte-1lsf4ps{width:7.25rem;min-width:7.25rem;height:2.25rem;box-sizing:border-box;display:inline-flex;align-items:center;justify-content:space-between;gap:.5rem;padding:.45rem .65rem;font-size:.8125rem;font-family:inherit;color:var(--color-foreground);background:var(--color-card-elevated);border:1px solid var(--color-input);border-radius:6px;flex-shrink:0;cursor:pointer;font-variant-numeric:tabular-nums;transition:border-color .15s,background .15s,box-shadow .15s}.log-level-trigger.svelte-1lsf4ps:hover{border-color:var(--color-border)}.log-level-trigger.svelte-1lsf4ps:focus-visible{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 3px var(--color-primary-light)}.log-level-label.svelte-1lsf4ps{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.log-level-trigger.svelte-1lsf4ps svg{flex-shrink:0;color:var(--color-muted-foreground)}.log-level-content{z-index:120;min-width:7rem;padding:.25rem;background:var(--color-card-elevated);border:1px solid var(--color-border);border-radius:var(--radius-md);box-shadow:var(--shadow-panel)}.log-level-viewport{display:flex;flex-direction:column;gap:.05rem}.log-level-item{display:flex;align-items:center;min-height:1.85rem;padding:.35rem .55rem;font-size:.8125rem;line-height:1.25;color:var(--color-foreground);border-radius:var(--radius-sm);outline:none;cursor:pointer;font-variant-numeric:tabular-nums}.log-level-item[data-highlighted]{background:var(--color-muted)}.log-level-item[data-selected]{color:var(--color-primary);background:var(--color-primary-light)}.log-body-scroll.svelte-1lsf4ps,.log-has-data.svelte-1lsf4ps{flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden}.log-table-scroll.svelte-1lsf4ps{flex:1;min-height:0;overflow-y:auto;overflow-x:hidden;overscroll-behavior-y:contain;-webkit-overflow-scrolling:touch}.log-table-scroll.svelte-1lsf4ps::-webkit-scrollbar{width:4px}.log-table-scroll.svelte-1lsf4ps::-webkit-scrollbar-thumb{background:var(--color-scrollbar-thumb);border-radius:2px}.btn.svelte-1lsf4ps{display:inline-flex;align-items:center;padding:.4rem .9rem;border:none;border-radius:var(--radius-sm);cursor:pointer;font-size:.875rem;font-family:inherit;transition:background .15s}.btn-primary.svelte-1lsf4ps{background:var(--color-primary);color:var(--color-primary-foreground)}.btn-primary.svelte-1lsf4ps:hover:not(:disabled){background:var(--color-primary-hover)}.btn-secondary.svelte-1lsf4ps{background:var(--color-muted);color:var(--color-foreground);border:1px solid var(--color-border)}.btn-secondary.svelte-1lsf4ps:hover:not(:disabled){background:var(--color-accent)}.btn.svelte-1lsf4ps:disabled{opacity:.4;cursor:not-allowed}.btn-sm.svelte-1lsf4ps{padding:.25rem .5rem;font-size:.75rem}.table-wrap.svelte-1lsf4ps{width:100%}table.svelte-1lsf4ps{width:100%;table-layout:fixed;border-collapse:collapse}thead.svelte-1lsf4ps th:where(.svelte-1lsf4ps){position:sticky;top:0;z-index:3;background:var(--color-card-elevated);font-size:.72rem;font-weight:600;color:var(--color-muted-foreground);text-transform:uppercase;letter-spacing:.04em;padding:.5rem .75rem;text-align:left;border-bottom:1px solid var(--color-border);box-shadow:0 1px 0 var(--color-border)}tbody.svelte-1lsf4ps tr:where(.svelte-1lsf4ps){border-bottom:1px solid var(--color-border-muted)}tbody.svelte-1lsf4ps tr:where(.svelte-1lsf4ps):hover{background:var(--color-muted)}tbody.svelte-1lsf4ps td:where(.svelte-1lsf4ps){padding:.5rem .75rem;font-size:.8125rem;vertical-align:middle}.th-time.svelte-1lsf4ps{width:130px}.th-level.svelte-1lsf4ps{width:68px}.th-cat.svelte-1lsf4ps{width:7rem;max-width:28vw}.th-msg.svelte-1lsf4ps{min-width:0}.log-row.svelte-1lsf4ps{cursor:pointer}.log-row.svelte-1lsf4ps:focus{outline:1px dotted var(--color-muted-foreground);outline-offset:-1px}.td-time.svelte-1lsf4ps{color:var(--color-muted-foreground);white-space:nowrap}.td-level.svelte-1lsf4ps{white-space:nowrap}.badge.svelte-1lsf4ps{display:inline-block;padding:.12rem .4rem;border-radius:4px;font-size:.7rem;font-weight:500}.badge.level-error.svelte-1lsf4ps{background:color-mix(in srgb,var(--color-destructive) 18%,transparent);color:var(--color-destructive);border:1px solid color-mix(in srgb,var(--color-destructive) 45%,transparent)}.badge.level-warn.svelte-1lsf4ps{background:#eab30824;color:#fbbf24;border:1px solid rgba(234,179,8,.35)}.badge.level-info.svelte-1lsf4ps{background:var(--color-primary-light);color:var(--color-primary-hover);border:1px solid color-mix(in srgb,var(--color-primary) 40%,transparent)}.badge.level-debug.svelte-1lsf4ps{background:var(--color-muted);color:var(--color-muted-foreground-strong);border:1px solid var(--color-border)}.td-cat.svelte-1lsf4ps{color:var(--color-muted-foreground-strong)}.td-msg.svelte-1lsf4ps{word-break:break-word;max-width:320px}.payload-row.svelte-1lsf4ps td:where(.svelte-1lsf4ps){padding:.25rem .75rem .65rem;background:transparent;border-bottom:1px solid var(--color-border-muted);vertical-align:top}.payload-content.svelte-1lsf4ps{margin:0;padding:0;font-family:Menlo,Monaco,Consolas,monospace;font-size:.72rem;line-height:1.5;background:transparent;border:none;border-radius:0;overflow-x:auto;max-height:200px;overflow-y:auto;white-space:pre-wrap;word-break:break-all;color:var(--color-muted-foreground-strong)}.log-toolbar.svelte-1lsf4ps{display:flex;align-items:center;justify-content:space-between;padding:.65rem 0 .85rem;flex-shrink:0}.pagination-info.svelte-1lsf4ps{font-size:.8125rem;color:var(--color-muted-foreground)}.pagination-btns.svelte-1lsf4ps{display:flex;gap:.5rem}.state.svelte-1lsf4ps{flex:1;display:flex;align-items:center;justify-content:center;text-align:center;padding:3rem 1.5rem;color:var(--color-muted-foreground-soft);font-size:.875rem}.state.err.svelte-1lsf4ps{flex:1;align-self:stretch;color:var(--color-destructive);background:color-mix(in srgb,var(--color-destructive) 12%,transparent);border-radius:var(--radius-md);padding:1rem;margin:.75rem 0}@media(max-width:720px){.feed-wrap.svelte-1lsf4ps{max-width:100%}.payload-row.svelte-1lsf4ps td:where(.svelte-1lsf4ps){padding-left:.5rem}.payload-row.svelte-1lsf4ps td[colspan="4"]:where(.svelte-1lsf4ps){padding-left:.5rem}}
@@ -1 +0,0 @@
1
- var Zt=t=>{throw TypeError(t)};var Ne=(t,e,n)=>e.has(t)||Zt("Cannot "+n);var v=(t,e,n)=>(Ne(t,e,"read from private field"),n?n.call(t):e.get(t)),A=(t,e,n)=>e.has(t)?Zt("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(t):e.set(t,n);import{b8 as P,k as T,a5 as I,t as gt,bu as De}from"./BsQ08Wq_.js";import{w as Dt}from"./FDS7fbwH.js";import{b as qe,H as qt,S as Vt,R as zt}from"./BUApaBEI.js";import{o as te}from"./DptdhtA1.js";new URL("sveltekit-internal://");function Ve(t,e){return t==="/"||e==="ignore"?t:e==="never"?t.endsWith("/")?t.slice(0,-1):t:e==="always"&&!t.endsWith("/")?t+"/":t}function ze(t){return t.split("%25").map(decodeURI).join("%25")}function Be(t){for(const e in t)t[e]=decodeURIComponent(t[e]);return t}function At({href:t}){return t.split("#")[0]}function Ke(t,e,n,a=!1){const r=new URL(t);Object.defineProperty(r,"searchParams",{value:new Proxy(r.searchParams,{get(i,o){if(o==="get"||o==="getAll"||o==="has")return(c,...p)=>(n(c),i[o](c,...p));e();const l=Reflect.get(i,o);return typeof l=="function"?l.bind(i):l}}),enumerable:!0,configurable:!0});const s=["href","pathname","search","toString","toJSON"];a&&s.push("hash");for(const i of s)Object.defineProperty(r,i,{get(){return e(),t[i]},enumerable:!0,configurable:!0});return r}function Fe(...t){let e=5381;for(const n of t)if(typeof n=="string"){let a=n.length;for(;a;)e=e*33^n.charCodeAt(--a)}else if(ArrayBuffer.isView(n)){const a=new Uint8Array(n.buffer,n.byteOffset,n.byteLength);let r=a.length;for(;r;)e=e*33^a[--r]}else throw new TypeError("value must be a string or TypedArray");return(e>>>0).toString(36)}const Ge=window.fetch;window.fetch=(t,e)=>((t instanceof Request?t.method:(e==null?void 0:e.method)||"GET")!=="GET"&&Y.delete(Bt(t)),Ge(t,e));const Y=new Map;function He(t,e){const n=Bt(t,e),a=document.querySelector(n);if(a!=null&&a.textContent){a.remove();let{body:r,...s}=JSON.parse(a.textContent);const i=a.getAttribute("data-ttl");return i&&Y.set(n,{body:r,init:s,ttl:1e3*Number(i)}),a.getAttribute("data-b64")!==null&&(r=qe(r)),Promise.resolve(new Response(r,s))}return window.fetch(t,e)}function Me(t,e,n){if(Y.size>0){const a=Bt(t,n),r=Y.get(a);if(r){if(performance.now()<r.ttl&&["default","force-cache","only-if-cached",void 0].includes(n==null?void 0:n.cache))return new Response(r.body,r.init);Y.delete(a)}}return window.fetch(e,n)}function Bt(t,e){let a=`script[data-sveltekit-fetched][data-url=${JSON.stringify(t instanceof Request?t.url:t)}]`;if(e!=null&&e.headers||e!=null&&e.body){const r=[];e.headers&&r.push([...new Headers(e.headers)].join(",")),e.body&&(typeof e.body=="string"||ArrayBuffer.isView(e.body))&&r.push(e.body),a+=`[data-hash="${Fe(...r)}"]`}return a}const We=/^(\[)?(\.\.\.)?(\w+)(?:=(\w+))?(\])?$/;function Ye(t){const e=[];return{pattern:t==="/"?/^\/$/:new RegExp(`^${Xe(t).map(a=>{const r=/^\[\.\.\.(\w+)(?:=(\w+))?\]$/.exec(a);if(r)return e.push({name:r[1],matcher:r[2],optional:!1,rest:!0,chained:!0}),"(?:/([^]*))?";const s=/^\[\[(\w+)(?:=(\w+))?\]\]$/.exec(a);if(s)return e.push({name:s[1],matcher:s[2],optional:!0,rest:!1,chained:!0}),"(?:/([^/]+))?";if(!a)return;const i=a.split(/\[(.+?)\](?!\])/);return"/"+i.map((l,c)=>{if(c%2){if(l.startsWith("x+"))return Pt(String.fromCharCode(parseInt(l.slice(2),16)));if(l.startsWith("u+"))return Pt(String.fromCharCode(...l.slice(2).split("-").map(f=>parseInt(f,16))));const p=We.exec(l),[,h,_,g,d]=p;return e.push({name:g,matcher:d,optional:!!h,rest:!!_,chained:_?c===1&&i[0]==="":!1}),_?"([^]*?)":h?"([^/]*)?":"([^/]+?)"}return Pt(l)}).join("")}).join("")}/?$`),params:e}}function Je(t){return t!==""&&!/^\([^)]+\)$/.test(t)}function Xe(t){return t.slice(1).split("/").filter(Je)}function Qe(t,e,n){const a={},r=t.slice(1),s=r.filter(o=>o!==void 0);let i=0;for(let o=0;o<e.length;o+=1){const l=e[o];let c=r[o-i];if(l.chained&&l.rest&&i&&(c=r.slice(o-i,o+1).filter(p=>p).join("/"),i=0),c===void 0)if(l.rest)c="";else continue;if(!l.matcher||n[l.matcher](c)){a[l.name]=c;const p=e[o+1],h=r[o+1];p&&!p.rest&&p.optional&&h&&l.chained&&(i=0),!p&&!h&&Object.keys(a).length===s.length&&(i=0);continue}if(l.optional&&l.chained){i++;continue}return}if(!i)return a}function Pt(t){return t.normalize().replace(/[[\]]/g,"\\$&").replace(/%/g,"%25").replace(/\//g,"%2[Ff]").replace(/\?/g,"%3[Ff]").replace(/#/g,"%23").replace(/[.*+?^${}()|\\]/g,"\\$&")}function Ze({nodes:t,server_loads:e,dictionary:n,matchers:a}){const r=new Set(e);return Object.entries(n).map(([o,[l,c,p]])=>{const{pattern:h,params:_}=Ye(o),g={id:o,exec:d=>{const f=h.exec(d);if(f)return Qe(f,_,a)},errors:[1,...p||[]].map(d=>t[d]),layouts:[0,...c||[]].map(i),leaf:s(l)};return g.errors.length=g.layouts.length=Math.max(g.errors.length,g.layouts.length),g});function s(o){const l=o<0;return l&&(o=~o),[l,t[o]]}function i(o){return o===void 0?o:[r.has(o),t[o]]}}function ge(t,e=JSON.parse){try{return e(sessionStorage[t])}catch{}}function ee(t,e,n=JSON.stringify){const a=n(e);try{sessionStorage[t]=a}catch{}}var fe;const U=((fe=globalThis.__sveltekit_c0lzti)==null?void 0:fe.base)??"";var ue;const tn=((ue=globalThis.__sveltekit_c0lzti)==null?void 0:ue.assets)??U??"",en="1781605764291",me="sveltekit:snapshot",_e="sveltekit:scroll",we="sveltekit:states",nn="sveltekit:pageurl",K="sveltekit:history",X="sveltekit:navigation",D={tap:1,hover:2,viewport:3,eager:4,off:-1,false:-1},Et=location.origin;function Kt(t){if(t instanceof URL)return t;let e=document.baseURI;if(!e){const n=document.getElementsByTagName("base");e=n.length?n[0].href:document.URL}return new URL(t,e)}function V(){return{x:pageXOffset,y:pageYOffset}}function B(t,e){return t.getAttribute(`data-sveltekit-${e}`)}const ne={...D,"":D.hover};function ve(t){let e=t.assignedSlot??t.parentNode;return(e==null?void 0:e.nodeType)===11&&(e=e.host),e}function ye(t,e){for(;t&&t!==e;){if(t.nodeName.toUpperCase()==="A"&&t.hasAttribute("href"))return t;t=ve(t)}}function Ot(t,e,n){let a;try{if(a=new URL(t instanceof SVGAElement?t.href.baseVal:t.href,document.baseURI),n&&a.hash.match(/^#[^/]/)){const o=location.hash.split("#")[1]||"/";a.hash=`#${o}${a.hash}`}}catch{}const r=t instanceof SVGAElement?t.target.baseVal:t.target,s=!a||!!r||St(a,e,n)||(t.getAttribute("rel")||"").split(/\s+/).includes("external"),i=(a==null?void 0:a.origin)===Et&&t.hasAttribute("download");return{url:a,external:s,target:r,download:i}}function mt(t){let e=null,n=null,a=null,r=null,s=null,i=null,o=t;for(;o&&o!==document.documentElement;)a===null&&(a=B(o,"preload-code")),r===null&&(r=B(o,"preload-data")),e===null&&(e=B(o,"keepfocus")),n===null&&(n=B(o,"noscroll")),s===null&&(s=B(o,"reload")),i===null&&(i=B(o,"replacestate")),o=ve(o);function l(c){switch(c){case"":case"true":return!0;case"off":case"false":return!1;default:return}}return{preload_code:ne[a??"off"],preload_data:ne[r??"off"],keepfocus:l(e),noscroll:l(n),reload:l(s),replace_state:l(i)}}function re(t){const e=Dt(t);let n=!0;function a(){n=!0,e.update(i=>i)}function r(i){n=!1,e.set(i)}function s(i){let o;return e.subscribe(l=>{(o===void 0||n&&l!==o)&&i(o=l)})}return{notify:a,set:r,subscribe:s}}const be={v:()=>{}};function rn(){const{set:t,subscribe:e}=Dt(!1);let n;async function a(){clearTimeout(n);try{const r=await fetch(`${tn}/_app/version.json`,{headers:{pragma:"no-cache","cache-control":"no-cache"}});if(!r.ok)return!1;const i=(await r.json()).version!==en;return i&&(t(!0),be.v(),clearTimeout(n)),i}catch{return!1}}return{subscribe:e,check:a}}function St(t,e,n){return t.origin!==Et||!t.pathname.startsWith(e)?!0:n?t.pathname!==location.pathname:!1}function Cn(t){}const ke=new Set(["load","prerender","csr","ssr","trailingSlash","config"]);[...ke];const an=new Set([...ke]);[...an];function on(t){return t.filter(e=>e!=null)}function Ft(t){return t instanceof qt||t instanceof Vt?t.status:500}function sn(t){return t instanceof Vt?t.text:"Internal Error"}let S,Q,Tt;const ln=te.toString().includes("$$")||/function \w+\(\) \{\}/.test(te.toString()),ae="a:";var rt,at,ot,it,st,lt,ct,ft,de,ut,he,dt,pe;ln?(S={data:{},form:null,error:null,params:{},route:{id:null},state:{},status:-1,url:new URL(ae)},Q={current:null},Tt={current:!1}):(S=new(de=class{constructor(){A(this,rt,P({}));A(this,at,P(null));A(this,ot,P(null));A(this,it,P({}));A(this,st,P({id:null}));A(this,lt,P({}));A(this,ct,P(-1));A(this,ft,P(new URL(ae)))}get data(){return T(v(this,rt))}set data(e){I(v(this,rt),e)}get form(){return T(v(this,at))}set form(e){I(v(this,at),e)}get error(){return T(v(this,ot))}set error(e){I(v(this,ot),e)}get params(){return T(v(this,it))}set params(e){I(v(this,it),e)}get route(){return T(v(this,st))}set route(e){I(v(this,st),e)}get state(){return T(v(this,lt))}set state(e){I(v(this,lt),e)}get status(){return T(v(this,ct))}set status(e){I(v(this,ct),e)}get url(){return T(v(this,ft))}set url(e){I(v(this,ft),e)}},rt=new WeakMap,at=new WeakMap,ot=new WeakMap,it=new WeakMap,st=new WeakMap,lt=new WeakMap,ct=new WeakMap,ft=new WeakMap,de),Q=new(he=class{constructor(){A(this,ut,P(null))}get current(){return T(v(this,ut))}set current(e){I(v(this,ut),e)}},ut=new WeakMap,he),Tt=new(pe=class{constructor(){A(this,dt,P(!1))}get current(){return T(v(this,dt))}set current(e){I(v(this,dt),e)}},dt=new WeakMap,pe),be.v=()=>Tt.current=!0);function cn(t){Object.assign(S,t)}const oe={spanContext(){return fn},setAttribute(){return this},setAttributes(){return this},addEvent(){return this},setStatus(){return this},updateName(){return this},end(){return this},isRecording(){return!1},recordException(){return this},addLink(){return this},addLinks(){return this}},fn={traceId:"",spanId:"",traceFlags:0},un=new Set(["icon","shortcut icon","apple-touch-icon"]);let M=null;const j=ge(_e)??{},Z=ge(me)??{},$={url:re({}),page:re({}),navigating:Dt(null),updated:rn()};function Gt(t){j[t]=V()}function dn(t,e){let n=t+1;for(;j[n];)delete j[n],n+=1;for(n=e+1;Z[n];)delete Z[n],n+=1}function tt(t,e=!1){return e?location.replace(t.href):location.href=t.href,new Promise(()=>{})}async function Re(){if("serviceWorker"in navigator){const t=await navigator.serviceWorker.getRegistration(U||"/");t&&await t.update()}}function ie(){}let Ht,Ct,_t,O,$t,k;const wt=[],vt=[];let b=null;function jt(){var t;(t=b==null?void 0:b.fork)==null||t.then(e=>e==null?void 0:e.discard()),b=null}const pt=new Map,Ee=new Set,hn=new Set,J=new Set;let w={branch:[],error:null,url:null},Se=!1,yt=!1,se=!0,et=!1,W=!1,xe=!1,Mt=!1,Le,R,L,q;const bt=new Set,le=new Map;async function Dn(t,e,n){var s,i,o,l,c;(s=globalThis.__sveltekit_c0lzti)!=null&&s.data&&globalThis.__sveltekit_c0lzti.data,document.URL!==location.href&&(location.href=location.href),k=t,await((o=(i=t.hooks).init)==null?void 0:o.call(i)),Ht=Ze(t),O=document.documentElement,$t=e,Ct=t.nodes[0],_t=t.nodes[1],Ct(),_t(),R=(l=history.state)==null?void 0:l[K],L=(c=history.state)==null?void 0:c[X],R||(R=L=Date.now(),history.replaceState({...history.state,[K]:R,[X]:L},""));const a=j[R];function r(){a&&(history.scrollRestoration="manual",scrollTo(a.x,a.y))}n?(r(),await Sn($t,n)):(await F({type:"enter",url:Kt(k.hash?Un(new URL(location.href)):location.href),replace_state:!0}),r()),En()}function pn(){wt.length=0,Mt=!1}function Ue(t){vt.some(e=>e==null?void 0:e.snapshot)&&(Z[t]=vt.map(e=>{var n;return(n=e==null?void 0:e.snapshot)==null?void 0:n.capture()}))}function Ae(t){var e;(e=Z[t])==null||e.forEach((n,a)=>{var r,s;(s=(r=vt[a])==null?void 0:r.snapshot)==null||s.restore(n)})}function ce(){Gt(R),ee(_e,j),Ue(L),ee(me,Z)}async function Pe(t,e,n,a){let r;e.invalidateAll&&jt(),await F({type:"goto",url:Kt(t),keepfocus:e.keepFocus,noscroll:e.noScroll,replace_state:e.replaceState,state:e.state,redirect_count:n,nav_token:a,accept:()=>{e.invalidateAll&&(Mt=!0,r=[...le.keys()]),e.invalidate&&e.invalidate.forEach(Rn)}}),e.invalidateAll&&gt().then(gt).then(()=>{le.forEach(({resource:s},i)=>{var o;r!=null&&r.includes(i)&&((o=s.refresh)==null||o.call(s))})})}async function gn(t){if(t.id!==(b==null?void 0:b.id)){jt();const e={};bt.add(e),b={id:t.id,token:e,promise:Oe({...t,preload:e}).then(n=>(bt.delete(e),n.type==="loaded"&&n.state.error&&jt(),n)),fork:null}}return b.promise}async function It(t){var n;const e=(n=await xt(t,!1))==null?void 0:n.route;e&&await Promise.all([...e.layouts,e.leaf].filter(Boolean).map(a=>a[1]()))}async function Te(t,e,n){var s;const a={params:w.params,route:{id:((s=w.route)==null?void 0:s.id)??null},url:new URL(location.href)};w={...t.state,nav:a};const r=document.querySelector("style[data-sveltekit]");if(r&&r.remove(),Object.assign(S,t.props.page),Le=new k.root({target:e,props:{...t.props,stores:$,components:vt},hydrate:n,sync:!1,transformError:void 0}),await Promise.resolve(),Ae(L),n){const i={from:null,to:{...a,scroll:j[R]??V()},willUnload:!1,type:"enter",complete:Promise.resolve()};J.forEach(o=>o(i))}yt=!0}async function kt({url:t,params:e,branch:n,errors:a,status:r,error:s,route:i,form:o}){let l="never";if(U&&(t.pathname===U||t.pathname===U+"/"))l="always";else for(const d of n)(d==null?void 0:d.slash)!==void 0&&(l=d.slash);t.pathname=Ve(t.pathname,l),t.search=t.search;const c={type:"loaded",state:{url:t,params:e,branch:n,error:s,route:i},props:{constructors:on(n).map(d=>d.node.component),page:Qt(S)}};o!==void 0&&(c.props.form=o);let p={},h=!S,_=0;for(let d=0;d<Math.max(n.length,w.branch.length);d+=1){const f=n[d],u=w.branch[d];(f==null?void 0:f.data)!==(u==null?void 0:u.data)&&(h=!0),f&&(p={...p,...f.data},h&&(c.props[`data_${_}`]=p),_+=1)}return(!w.url||t.href!==w.url.href||w.error!==s||o!==void 0&&o!==S.form||h)&&(c.props.page={error:s,params:e,route:{id:(i==null?void 0:i.id)??null},state:{},status:r,url:new URL(t),form:o??null,data:h?p:S.data}),c}async function Wt({loader:t,parent:e,url:n,params:a,route:r,server_data_node:s}){var p,h,_;let i=null,o=!0;const l={dependencies:new Set,params:new Set,parent:!1,route:!1,url:!1,search_params:new Set},c=await t();if((p=c.universal)!=null&&p.load){let g=function(...f){for(const u of f){const{href:m}=new URL(u,n);l.dependencies.add(m)}};const d={tracing:{enabled:!1,root:oe,current:oe},route:new Proxy(r,{get:(f,u)=>(o&&(l.route=!0),f[u])}),params:new Proxy(a,{get:(f,u)=>(o&&l.params.add(u),f[u])}),data:(s==null?void 0:s.data)??null,url:Ke(n,()=>{o&&(l.url=!0)},f=>{o&&l.search_params.add(f)},k.hash),async fetch(f,u){f instanceof Request&&(u={body:f.method==="GET"||f.method==="HEAD"?void 0:await f.blob(),cache:f.cache,credentials:f.credentials,headers:[...f.headers].length>0?f==null?void 0:f.headers:void 0,integrity:f.integrity,keepalive:f.keepalive,method:f.method,mode:f.mode,redirect:f.redirect,referrer:f.referrer,referrerPolicy:f.referrerPolicy,signal:f.signal,...u});const{resolved:m,promise:y}=Ie(f,u,n);return o&&g(m.href),y},setHeaders:()=>{},depends:g,parent(){return o&&(l.parent=!0),e()},untrack(f){o=!1;try{return f()}finally{o=!0}}};i=await c.universal.load.call(null,d)??null}return{node:c,loader:t,server:s,universal:(h=c.universal)!=null&&h.load?{type:"data",data:i,uses:l}:null,data:i??(s==null?void 0:s.data)??null,slash:((_=c.universal)==null?void 0:_.trailingSlash)??(s==null?void 0:s.slash)}}function Ie(t,e,n){let a=t instanceof Request?t.url:t;const r=new URL(a,n);r.origin===n.origin&&(a=r.href.slice(n.origin.length));const s=yt?Me(a,r.href,e):He(a,e);return{resolved:r,promise:s}}function mn(t,e,n,a,r,s){if(Mt)return!0;if(!r)return!1;if(r.parent&&t||r.route&&e||r.url&&n)return!0;for(const i of r.search_params)if(a.has(i))return!0;for(const i of r.params)if(s[i]!==w.params[i])return!0;for(const i of r.dependencies)if(wt.some(o=>o(new URL(i))))return!0;return!1}function Yt(t,e){return(t==null?void 0:t.type)==="data"?t:(t==null?void 0:t.type)==="skip"?e??null:null}function _n(t,e){if(!t)return new Set(e.searchParams.keys());const n=new Set([...t.searchParams.keys(),...e.searchParams.keys()]);for(const a of n){const r=t.searchParams.getAll(a),s=e.searchParams.getAll(a);r.every(i=>s.includes(i))&&s.every(i=>r.includes(i))&&n.delete(a)}return n}function wn({error:t,url:e,route:n,params:a}){return{type:"loaded",state:{error:t,url:e,route:n,params:a,branch:[]},props:{page:Qt(S),constructors:[]}}}async function Oe({id:t,invalidating:e,url:n,params:a,route:r,preload:s}){if((b==null?void 0:b.id)===t)return bt.delete(b.token),b.promise;const{errors:i,layouts:o,leaf:l}=r,c=[...o,l];i.forEach(u=>u==null?void 0:u().catch(()=>{})),c.forEach(u=>u==null?void 0:u[1]().catch(()=>{}));const p=w.url?t!==Rt(w.url):!1,h=w.route?r.id!==w.route.id:!1,_=_n(w.url,n);let g=!1;const d=c.map(async(u,m)=>{var C;if(!u)return;const y=w.branch[m];return u[1]===(y==null?void 0:y.loader)&&!mn(g,h,p,_,(C=y.universal)==null?void 0:C.uses,a)?y:(g=!0,Wt({loader:u[1],url:n,params:a,route:r,parent:async()=>{var ht;const N={};for(let z=0;z<m;z+=1)Object.assign(N,(ht=await d[z])==null?void 0:ht.data);return N},server_data_node:Yt(u[0]?{type:"skip"}:null,u[0]?y==null?void 0:y.server:void 0)}))});for(const u of d)u.catch(()=>{});const f=[];for(let u=0;u<c.length;u+=1)if(c[u])try{f.push(await d[u])}catch(m){if(m instanceof zt)return{type:"redirect",location:m.location};if(bt.has(s))return wn({error:await nt(m,{params:a,url:n,route:{id:r.id}}),url:n,params:a,route:r});let y=Ft(m),x;if(m instanceof qt)x=m.body;else{if(await $.updated.check())return await Re(),await tt(n);x=await nt(m,{params:a,url:n,route:{id:r.id}})}const C=await vn(u,f,i);return C?kt({url:n,params:a,branch:f.slice(0,C.idx).concat(C.node),errors:i,status:y,error:x,route:r}):await $e(n,{id:r.id},x,y)}else f.push(void 0);return kt({url:n,params:a,branch:f,errors:i,status:200,error:null,route:r,form:e?void 0:null})}async function vn(t,e,n){for(;t--;)if(n[t]){let a=t;for(;!e[a];)a-=1;try{return{idx:a+1,node:{node:await n[t](),loader:n[t],data:{},server:null,universal:null}}}catch{continue}}}async function Jt({status:t,error:e,url:n,route:a}){const r={};let s=null;try{const i=await Wt({loader:Ct,url:n,params:r,route:a,parent:()=>Promise.resolve({}),server_data_node:Yt(s)}),o={node:await _t(),loader:_t,universal:null,server:null,data:null};return kt({url:n,params:r,branch:[i,o],status:t,error:e,errors:[],route:null})}catch(i){if(i instanceof zt)return Pe(new URL(i.location,location.href),{},0);throw i}}async function yn(t){const e=t.href;if(pt.has(e))return pt.get(e);let n;try{const a=(async()=>{let r=await k.hooks.reroute({url:new URL(t),fetch:async(s,i)=>Ie(s,i,t).promise})??t;if(typeof r=="string"){const s=new URL(t);k.hash?s.hash=r:s.pathname=r,r=s}return r})();pt.set(e,a),n=await a}catch{pt.delete(e);return}return n}async function xt(t,e){if(t&&!St(t,U,k.hash)){const n=await yn(t);if(!n)return;const a=bn(n);for(const r of Ht){const s=r.exec(a);if(s)return{id:Rt(t),invalidating:e,route:r,params:Be(s),url:t}}}}function bn(t){return ze(k.hash?t.hash.replace(/^#/,"").replace(/[?#].+/,""):t.pathname.slice(U.length))||"/"}function Rt(t){return(k.hash?t.hash.replace(/^#/,""):t.pathname)+t.search}function Ce({url:t,type:e,intent:n,delta:a,event:r,scroll:s}){let i=!1;const o=Xt(w,n,t,e,s??null);a!==void 0&&(o.navigation.delta=a),r!==void 0&&(o.navigation.event=r);const l={...o.navigation,cancel:()=>{i=!0,o.reject(new Error("navigation cancelled"))}};return et||Ee.forEach(c=>c(l)),i?null:o}async function F({type:t,url:e,popped:n,keepfocus:a,noscroll:r,replace_state:s,state:i={},redirect_count:o=0,nav_token:l={},accept:c=ie,block:p=ie,event:h}){var z;const _=q;q=l;const g=await xt(e,!1),d=t==="enter"?Xt(w,g,e,t):Ce({url:e,type:t,delta:n==null?void 0:n.delta,intent:g,scroll:n==null?void 0:n.scroll,event:h});if(!d){p(),q===l&&(q=_);return}const f=R,u=L;c(),et=!0,yt&&d.navigation.type!=="enter"&&$.navigating.set(Q.current=d.navigation);let m=g&&await Oe(g);if(!m){if(St(e,U,k.hash))return await tt(e,s);m=await $e(e,{id:null},await nt(new Vt(404,"Not Found",`Not found: ${e.pathname}`),{url:e,params:{},route:{id:null}}),404,s)}if(e=(g==null?void 0:g.url)||e,q!==l)return d.reject(new Error("navigation aborted")),!1;if(m.type==="redirect"){if(o<20){await F({type:t,url:new URL(m.location,e),popped:n,keepfocus:a,noscroll:r,replace_state:s,state:i,redirect_count:o+1,nav_token:l}),d.fulfil(void 0);return}m=await Jt({status:500,error:await nt(new Error("Redirect loop"),{url:e,params:{},route:{id:null}}),url:e,route:{id:null}})}else m.props.page.status>=400&&await $.updated.check()&&(await Re(),await tt(e,s));if(pn(),Gt(f),Ue(u),m.props.page.url.pathname!==e.pathname&&(e.pathname=m.props.page.url.pathname),i=n?n.state:i,!n){const E=s?0:1,G={[K]:R+=E,[X]:L+=E,[we]:i};(s?history.replaceState:history.pushState).call(history,G,"",e),s||dn(R,L)}const y=g&&(b==null?void 0:b.id)===g.id?b.fork:null;b=null,m.props.page.state=i;let x;if(yt){const E=(await Promise.all(Array.from(hn,H=>H(d.navigation)))).filter(H=>typeof H=="function");if(E.length>0){let H=function(){E.forEach(Ut=>{J.delete(Ut)})};E.push(H),E.forEach(Ut=>{J.add(Ut)})}const G=d.navigation.to;w={...m.state,nav:{params:G.params,route:G.route,url:G.url}},m.props.page&&(m.props.page.url=e);const Lt=y&&await y;Lt?x=Lt.commit():(M=null,Le.$set(m.props),M&&Object.assign(m.props.page,M),cn(m.props.page),x=(z=De)==null?void 0:z()),xe=!0}else await Te(m,$t,!1);const{activeElement:C}=document;await x,await gt(),await gt();let N=null;if(se){const E=n?n.scroll:r?V():null;E?scrollTo(E.x,E.y):(N=e.hash&&document.getElementById(je(e)))?N.scrollIntoView():scrollTo(0,0)}const ht=document.activeElement!==C&&document.activeElement!==document.body;!a&&!ht&&Ln(e,!N),se=!0,m.props.page&&(M&&Object.assign(m.props.page,M),Object.assign(S,m.props.page)),et=!1,t==="popstate"&&Ae(L),d.fulfil(void 0),d.navigation.to&&(d.navigation.to.scroll=V()),J.forEach(E=>E(d.navigation)),$.navigating.set(Q.current=null)}async function $e(t,e,n,a,r){return t.origin===Et&&t.pathname===location.pathname&&!Se?await Jt({status:a,error:n,url:t,route:e}):await tt(t,r)}function kn(){let t,e={element:void 0,href:void 0},n;O.addEventListener("mousemove",o=>{const l=o.target;clearTimeout(t),t=setTimeout(()=>{s(l,D.hover)},20)});function a(o){o.defaultPrevented||s(o.composedPath()[0],D.tap)}O.addEventListener("mousedown",a),O.addEventListener("touchstart",a,{passive:!0});const r=new IntersectionObserver(o=>{for(const l of o)l.isIntersecting&&(It(new URL(l.target.href)),r.unobserve(l.target))},{threshold:0});async function s(o,l){const c=ye(o,O),p=c===e.element&&(c==null?void 0:c.href)===e.href&&l>=n;if(!c||p)return;const{url:h,external:_,download:g}=Ot(c,U,k.hash);if(_||g)return;const d=mt(c),f=h&&Rt(w.url)===Rt(h);if(!(d.reload||f))if(l<=d.preload_data){e={element:c,href:c.href},n=D.tap;const u=await xt(h,!1);if(!u)return;gn(u)}else l<=d.preload_code&&(e={element:c,href:c.href},n=l,It(h))}function i(){r.disconnect();for(const o of O.querySelectorAll("a")){const{url:l,external:c,download:p}=Ot(o,U,k.hash);if(c||p)continue;const h=mt(o);h.reload||(h.preload_code===D.viewport&&r.observe(o),h.preload_code===D.eager&&It(l))}}J.add(i),i()}function nt(t,e){if(t instanceof qt)return t.body;const n=Ft(t),a=sn(t);return k.hooks.handleError({error:t,event:e,status:n,message:a})??{message:a}}function qn(t,e={}){return t=new URL(Kt(t)),t.origin!==Et?Promise.reject(new Error("goto: invalid URL")):Pe(t,e,0)}function Rn(t){if(typeof t=="function")wt.push(t);else{const{href:e}=new URL(t,location.href);wt.push(n=>n.href===e)}}function En(){var e;history.scrollRestoration="manual",addEventListener("beforeunload",n=>{let a=!1;if(ce(),!et){const r=Xt(w,void 0,null,"leave"),s={...r.navigation,cancel:()=>{a=!0,r.reject(new Error("navigation cancelled"))}};Ee.forEach(i=>i(s))}a?(n.preventDefault(),n.returnValue=""):history.scrollRestoration="auto"}),addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"&&ce()}),(e=navigator.connection)!=null&&e.saveData||kn(),O.addEventListener("click",async n=>{if(n.button||n.which!==1||n.metaKey||n.ctrlKey||n.shiftKey||n.altKey||n.defaultPrevented)return;const a=ye(n.composedPath()[0],O);if(!a)return;const{url:r,external:s,target:i,download:o}=Ot(a,U,k.hash);if(!r)return;if(i==="_parent"||i==="_top"){if(window.parent!==window)return}else if(i&&i!=="_self")return;const l=mt(a);if(!(a instanceof SVGAElement)&&r.protocol!==location.protocol&&!(r.protocol==="https:"||r.protocol==="http:")||o)return;const[p,h]=(k.hash?r.hash.replace(/^#/,""):r.href).split("#"),_=p===At(location);if(s||l.reload&&(!_||!h)){Ce({url:r,type:"link",event:n})?et=!0:n.preventDefault();return}if(h!==void 0&&_){const[,g]=w.url.href.split("#");if(g===h){if(n.preventDefault(),h===""||h==="top"&&a.ownerDocument.getElementById("top")===null)scrollTo({top:0});else{const d=a.ownerDocument.getElementById(decodeURIComponent(h));d&&(d.scrollIntoView(),d.focus())}return}if(W=!0,Gt(R),t(r),!l.replace_state)return;W=!1}n.preventDefault(),await new Promise(g=>{requestAnimationFrame(()=>{setTimeout(g,0)}),setTimeout(g,100)}),await F({type:"link",url:r,keepfocus:l.keepfocus,noscroll:l.noscroll,replace_state:l.replace_state??r.href===location.href,event:n})}),O.addEventListener("submit",n=>{if(n.defaultPrevented)return;const a=HTMLFormElement.prototype.cloneNode.call(n.target),r=n.submitter;if(((r==null?void 0:r.formTarget)||a.target)==="_blank"||((r==null?void 0:r.formMethod)||a.method)!=="get")return;const o=new URL((r==null?void 0:r.hasAttribute("formaction"))&&(r==null?void 0:r.formAction)||a.action);if(St(o,U,!1))return;const l=n.target,c=mt(l);if(c.reload)return;n.preventDefault(),n.stopPropagation();const p=new FormData(l,r);o.search=new URLSearchParams(p).toString(),F({type:"form",url:o,keepfocus:c.keepfocus,noscroll:c.noscroll,replace_state:c.replace_state??o.href===location.href,event:n})}),addEventListener("popstate",async n=>{var a;if(!Nt){if((a=n.state)!=null&&a[K]){const r=n.state[K];if(q={},r===R)return;const s=j[r],i=n.state[we]??{},o=new URL(n.state[nn]??location.href),l=n.state[X],c=w.url?At(location)===At(w.url):!1;if(l===L&&(xe||c)){i!==S.state&&(S.state=i),t(o),j[R]=V(),s&&scrollTo(s.x,s.y),R=r;return}const h=r-R;await F({type:"popstate",url:o,popped:{state:i,scroll:s,delta:h},accept:()=>{R=r,L=l},block:()=>{history.go(-h)},nav_token:q,event:n})}else if(!W){const r=new URL(location.href);t(r),k.hash&&location.reload()}}}),addEventListener("hashchange",()=>{W&&(W=!1,history.replaceState({...history.state,[K]:++R,[X]:L},"",location.href))});for(const n of document.querySelectorAll("link"))un.has(n.rel)&&(n.href=n.href);addEventListener("pageshow",n=>{n.persisted&&$.navigating.set(Q.current=null)});function t(n){w.url=S.url=n,$.page.set(Qt(S)),$.page.notify()}}async function Sn(t,{status:e=200,error:n,node_ids:a,params:r,route:s,server_route:i,data:o,form:l}){Se=!0;const c=new URL(location.href);let p;({params:r={},route:s={id:null}}=await xt(c,!1)||{}),p=Ht.find(({id:g})=>g===s.id);let h,_=!0;try{const g=a.map(async(f,u)=>{const m=o[u];return m!=null&&m.uses&&(m.uses=xn(m.uses)),Wt({loader:k.nodes[f],url:c,params:r,route:s,parent:async()=>{const y={};for(let x=0;x<u;x+=1)Object.assign(y,(await g[x]).data);return y},server_data_node:Yt(m)})}),d=await Promise.all(g);if(p){const f=p.layouts;for(let u=0;u<f.length;u++)f[u]||d.splice(u,0,void 0)}h=await kt({url:c,params:r,branch:d,status:e,error:n,errors:p==null?void 0:p.errors,form:l,route:p??null})}catch(g){if(g instanceof zt){await tt(new URL(g.location,location.href));return}h=await Jt({status:Ft(g),error:await nt(g,{url:c,params:r,route:s}),url:c,route:s}),t.textContent="",_=!1}h.props.page&&(h.props.page.state={}),await Te(h,t,_)}function xn(t){return{dependencies:new Set((t==null?void 0:t.dependencies)??[]),params:new Set((t==null?void 0:t.params)??[]),parent:!!(t!=null&&t.parent),route:!!(t!=null&&t.route),url:!!(t!=null&&t.url),search_params:new Set((t==null?void 0:t.search_params)??[])}}let Nt=!1;function Ln(t,e=!0){const n=document.querySelector("[autofocus]");if(n)n.focus();else{const a=je(t);if(a&&document.getElementById(a)){const{x:s,y:i}=V();setTimeout(()=>{const o=history.state;Nt=!0,location.replace(new URL(`#${a}`,location.href)),history.replaceState(o,"",t),e&&scrollTo(s,i),Nt=!1})}else{const s=document.body,i=s.getAttribute("tabindex");s.tabIndex=-1,s.focus({preventScroll:!0,focusVisible:!1}),i!==null?s.setAttribute("tabindex",i):s.removeAttribute("tabindex")}const r=getSelection();if(r&&r.type!=="None"){const s=[];for(let i=0;i<r.rangeCount;i+=1)s.push(r.getRangeAt(i));setTimeout(()=>{if(r.rangeCount===s.length){for(let i=0;i<r.rangeCount;i+=1){const o=s[i],l=r.getRangeAt(i);if(o.commonAncestorContainer!==l.commonAncestorContainer||o.startContainer!==l.startContainer||o.endContainer!==l.endContainer||o.startOffset!==l.startOffset||o.endOffset!==l.endOffset)return}r.removeAllRanges()}})}}}function Xt(t,e,n,a,r=null){var c,p;let s,i;const o=new Promise((h,_)=>{s=h,i=_});return o.catch(()=>{}),{navigation:{from:{params:t.params,route:{id:((c=t.route)==null?void 0:c.id)??null},url:t.url,scroll:V()},to:n&&{params:(e==null?void 0:e.params)??null,route:{id:((p=e==null?void 0:e.route)==null?void 0:p.id)??null},url:n,scroll:r},willUnload:!e,type:a,complete:o},fulfil:s,reject:i}}function Qt(t){return{data:t.data,error:t.error,form:t.form,params:t.params,route:t.route,state:t.state,status:t.status,url:t.url}}function Un(t){const e=new URL(t);return e.hash=decodeURIComponent(t.hash),e}function je(t){let e;if(k.hash){const[,,n]=t.hash.split("#",3);e=n??""}else e=t.hash.slice(1);return decodeURIComponent(e)}export{Dn as a,qn as g,Cn as l,S as p,$ as s};
@@ -1,2 +0,0 @@
1
- import{b9 as F,Q as M,v as K,X as Y,h as w,z as W,ba as m,bb as x,ah as rr,bc as tr,bd as ir,be as fr,k as sr,bf as er,bg as ar,bh as P,e as R,bi as ur,bj as or,S as cr,bk as nr,bl as lr}from"./BsQ08Wq_.js";import{i as vr,a as dr,d as br,c as hr,n as gr,b as Ar}from"./BK0ygNWX.js";function _r(r,i){var t=void 0,f;F(()=>{t!==(t=i())&&(f&&(M(f),f=null),t&&(f=K(()=>{Y(()=>t(r))})))})}function z(r){var i,t,f="";if(typeof r=="string"||typeof r=="number")f+=r;else if(typeof r=="object")if(Array.isArray(r)){var s=r.length;for(i=0;i<s;i++)r[i]&&(t=z(r[i]))&&(f&&(f+=" "),f+=t)}else for(t in r)r[t]&&(f&&(f+=" "),f+=t);return f}function Tr(){for(var r,i,t=0,f="",s=arguments.length;t<s;t++)(r=arguments[t])&&(i=z(r))&&(f&&(f+=" "),f+=i);return f}function wr(r){return typeof r=="object"?Tr(r):r??""}const H=[...`
2
- \r\f \v\uFEFF`];function Er(r,i,t){var f=r==null?"":""+r;if(i&&(f=f?f+" "+i:i),t){for(var s of Object.keys(t))if(t[s])f=f?f+" "+s:s;else if(f.length)for(var e=s.length,u=0;(u=f.indexOf(s,u))>=0;){var n=u+e;(u===0||H.includes(f[u-1]))&&(n===f.length||H.includes(f[n]))?f=(u===0?"":f.substring(0,u))+f.substring(n+1):u=n}}return f===""?null:f}function V(r,i=!1){var t=i?" !important;":";",f="";for(var s of Object.keys(r)){var e=r[s];e!=null&&e!==""&&(f+=" "+s+": "+e+t)}return f}function k(r){return r[0]!=="-"||r[1]!=="-"?r.toLowerCase():r}function Nr(r,i){if(i){var t="",f,s;if(Array.isArray(i)?(f=i[0],s=i[1]):f=i,r){r=String(r).replaceAll(/\s*\/\*.*?\*\/\s*/g,"").trim();var e=!1,u=0,n=!1,d=[];f&&d.push(...Object.keys(f).map(k)),s&&d.push(...Object.keys(s).map(k));var l=0,g=-1;const N=r.length;for(var v=0;v<N;v++){var a=r[v];if(n?a==="/"&&r[v-1]==="*"&&(n=!1):e?e===a&&(e=!1):a==="/"&&r[v+1]==="*"?n=!0:a==='"'||a==="'"?e=a:a==="("?u++:a===")"&&u--,!n&&e===!1&&u===0){if(a===":"&&g===-1)g=v;else if(a===";"||v===N-1){if(g!==-1){var E=k(r.substring(l,g).trim());if(!d.includes(E)){a!==";"&&v++;var T=r.substring(l,v).trim();t+=" "+T+";"}}l=v+1,g=-1}}}}return f&&(t+=V(f)),s&&(t+=V(s,!0)),t=t.trim(),t===""?null:t}return r==null?null:String(r)}function Sr(r,i,t,f,s,e){var u=r.__className;if(w||u!==t||u===void 0){var n=Er(t,f,e);(!w||n!==r.getAttribute("class"))&&(n==null?r.removeAttribute("class"):i?r.className=n:r.setAttribute("class",n)),r.__className=t}else if(e&&s!==e)for(var d in e){var l=!!e[d];(s==null||l!==!!s[d])&&r.classList.toggle(d,l)}return e}function C(r,i={},t,f){for(var s in t){var e=t[s];i[s]!==e&&(t[s]==null?r.style.removeProperty(s):r.style.setProperty(s,e,f))}}function Ir(r,i,t,f){var s=r.__style;if(w||s!==i){var e=Nr(i,f);(!w||e!==r.getAttribute("style"))&&(e==null?r.removeAttribute("style"):r.style.cssText=e),r.__style=i}else f&&(Array.isArray(f)?(C(r,t==null?void 0:t[0],f[0]),C(r,t==null?void 0:t[1],f[1],"important")):C(r,t,f));return f}function $(r,i,t=!1){if(r.multiple){if(i==null)return;if(!W(i))return m();for(var f of r.options)f.selected=i.includes(B(f));return}for(f of r.options){var s=B(f);if(x(s,i)){f.selected=!0;return}}(!t||i!==void 0)&&(r.selectedIndex=-1)}function pr(r){var i=new MutationObserver(()=>{$(r,r.__value)});i.observe(r,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["value"]}),rr(()=>{i.disconnect()})}function B(r){return"__value"in r?r.__value:r.value}const p=Symbol("class"),O=Symbol("style"),J=Symbol("is custom element"),X=Symbol("is html"),Or=P?"link":"LINK",Lr=P?"input":"INPUT",Pr=P?"option":"OPTION",kr=P?"select":"SELECT";function Cr(r){if(w){var i=!1,t=()=>{if(!i){if(i=!0,r.hasAttribute("value")){var f=r.value;L(r,"value",null),r.value=f}if(r.hasAttribute("checked")){var s=r.checked;L(r,"checked",null),r.checked=s}}};r.__on_r=t,cr(t),nr()}}function Ur(r,i){var t=j(r);t.checked!==(t.checked=i??void 0)&&(r.checked=i)}function Mr(r,i){i?r.hasAttribute("selected")||r.setAttribute("selected",""):r.removeAttribute("selected")}function L(r,i,t,f){var s=j(r);w&&(s[i]=r.getAttribute(i),i==="src"||i==="srcset"||i==="href"&&r.nodeName===Or)||s[i]!==(s[i]=t)&&(i==="loading"&&(r[lr]=t),t==null?r.removeAttribute(i):typeof t!="string"&&q(r).includes(i)?r[i]=t:r.setAttribute(i,t))}function $r(r,i,t,f,s=!1,e=!1){if(w&&s&&r.nodeName===Lr){var u=r,n=u.type==="checkbox"?"defaultChecked":"defaultValue";n in t||Cr(u)}var d=j(r),l=d[J],g=!d[X];let v=w&&l;v&&R(!1);var a=i||{},E=r.nodeName===Pr;for(var T in i)T in t||(t[T]=null);t.class?t.class=wr(t.class):t[p]&&(t.class=null),t[O]&&(t.style??(t.style=null));var N=q(r);for(const o in t){let c=t[o];if(E&&o==="value"&&c==null){r.value=r.__value="",a[o]=c;continue}if(o==="class"){var I=r.namespaceURI==="http://www.w3.org/1999/xhtml";Sr(r,I,c,f,i==null?void 0:i[p],t[p]),a[o]=c,a[p]=t[p];continue}if(o==="style"){Ir(r,c,i==null?void 0:i[O],t[O]),a[o]=c,a[O]=t[O];continue}var A=a[o];if(!(c===A&&!(c===void 0&&r.hasAttribute(o)))){a[o]=c;var y=o[0]+o[1];if(y!=="$$")if(y==="on"){const _={},S="$$"+o;let h=o.slice(2);var U=Ar(h);if(vr(h)&&(h=h.slice(0,-7),_.capture=!0),!U&&A){if(c!=null)continue;r.removeEventListener(h,a[S],_),a[S]=null}if(U)dr(h,r,c),br([h]);else if(c!=null){let Q=function(Z){a[o].call(this,Z)};a[S]=hr(h,r,Q,_)}}else if(o==="style")L(r,o,c);else if(o==="autofocus")ur(r,!!c);else if(!l&&(o==="__value"||o==="value"&&c!=null))r.value=r.__value=c;else if(o==="selected"&&E)Mr(r,c);else{var b=o;g||(b=gr(b));var G=b==="defaultValue"||b==="defaultChecked";if(c==null&&!l&&!G)if(d[o]=null,b==="value"||b==="checked"){let _=r;const S=i===void 0;if(b==="value"){let h=_.defaultValue;_.removeAttribute(b),_.defaultValue=h,_.value=_.__value=S?h:null}else{let h=_.defaultChecked;_.removeAttribute(b),_.defaultChecked=h,_.checked=S?h:!1}}else r.removeAttribute(o);else G||N.includes(b)&&(l||typeof c!="string")?(r[b]=c,b in d&&(d[b]=or)):typeof c!="function"&&L(r,b,c)}}}return v&&R(!0),a}function Gr(r,i,t=[],f=[],s=[],e,u=!1,n=!1){tr(s,t,f,d=>{var l=void 0,g={},v=r.nodeName===kr,a=!1;if(F(()=>{var T=i(...d.map(sr)),N=$r(r,l,T,e,u,n);a&&v&&"value"in T&&$(r,T.value);for(let A of Object.getOwnPropertySymbols(g))T[A]||M(g[A]);for(let A of Object.getOwnPropertySymbols(T)){var I=T[A];A.description===er&&(!l||I!==l[A])&&(g[A]&&M(g[A]),g[A]=K(()=>_r(r,()=>I))),N[A]=I}l=N}),v){var E=r;Y(()=>{$(E,l.value,!0),pr(E)})}a=!0})}function j(r){return r.__attributes??(r.__attributes={[J]:r.nodeName.includes("-"),[X]:r.namespaceURI===ir})}var D=new Map;function q(r){var i=r.getAttribute("is")||r.nodeName,t=D.get(i);if(t)return t;D.set(i,t=[]);for(var f,s=r,e=Element.prototype;e!==s;){f=ar(s);for(var u in f)f[u].set&&t.push(u);s=fr(s)}return t}const Rr="rssany",Hr="https://github.com/joohw/rssany";function Vr(r,i){return fetch(r,i)}async function Br(r,i){const t=await fetch(r,i),s=(await t.text()).trim();if(!t.ok){const e=s.length>100?s.slice(0,100)+"…":s;throw new Error(`请求失败 ${t.status} ${t.statusText}${e?`:${e}`:""}`)}if(!s)throw new Error("API 返回空内容");try{const e=JSON.parse(s);if(e===null&&s==="null")throw new Error("API 返回 null");return e}catch(e){if(e instanceof Error&&e.message==="API 返回 null")throw e;const u=e instanceof SyntaxError?e.message:String(e),n=s.length>80?s.slice(0,80)+"…":s;throw new Error(`API 返回格式异常: ${u}。响应预览: ${n}`)}}export{Hr as G,Rr as P,Vr as a,Sr as b,Br as c,Ur as d,Ir as e,Gr as f,Tr as g,Cr as r,L as s};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["../nodes/0.zuqEMBQT.js","../chunks/DIeahUKq.js","../chunks/BsQ08Wq_.js","../chunks/CEWi_rGa.js","../chunks/BI_ale1m.js","../chunks/FDS7fbwH.js","../chunks/BK0ygNWX.js","../chunks/rNwPv4DZ.js","../chunks/Cc7aBSsN.js","../chunks/WW6La7Nt.js","../chunks/Nd0ktDhd.js","../chunks/Czo-EcYU.js","../chunks/DhZZHWov.js","../chunks/BUApaBEI.js","../chunks/DptdhtA1.js","../chunks/4TuV_psf.js","../chunks/BZY5aksi.js","../chunks/B553hBXT.js","../chunks/C9wTDiHH.js","../chunks/D8G961Hm.js","../chunks/pd_p3yYy.js","../chunks/IhDlsCxD.js","../chunks/B0czyjwj.js","../assets/homeFeedPanelStore.CE6xTfsa.css","../assets/0.BLOTwIuF.css","../nodes/1.DzLFxso0.js","../nodes/2.BOYqXdCa.js","../nodes/3.CJw5Nx2o.js","../chunks/DO5OXNYS.js","../chunks/qwlQuQWi.js","../chunks/BnqaikL8.js","../chunks/SvdgnirT.js","../chunks/B8StT3Do.js","../assets/chevron-down.CV-KWLNP.css","../assets/SourcesList.ke66uOSi.css","../nodes/4.BIzqhTqv.js","../chunks/hp4PFHFv.js","../nodes/5.9zgwFV6I.js","../assets/5.Di6rvlY-.css","../nodes/6.trFT-trT.js","../chunks/CIsxbQ9B.js","../assets/BackToParentRoute.DGk-X5ow.css","../assets/6.Cm_jpHOq.css","../nodes/7.DCqiDq6O.js","../assets/7.CJ3BjogD.css","../nodes/8.DG_T-wWN.js","../assets/8.CrNxmd8B.css","../nodes/9.FiPTezQy.js","../chunks/Bfc47y5P.js","../assets/9.CATKVZ-n.css","../nodes/10.BC-1FXeC.js","../assets/10.CmGYYZFR.css","../nodes/11.CePwEHqu.js","../assets/11.Dkz3VS_N.css","../nodes/12.eeQ9B6bg.js","../assets/12.qYZMiTb0.css","../nodes/13.BLKI9iZo.js","../assets/13.DfJcfUWl.css","../nodes/14.T9l5Rh19.js","../assets/14.BCCBoMGj.css","../nodes/15.39GHtAg1.js","../assets/15.DfMfOrS3.css","../nodes/16.BO-9BBQ5.js","../chunks/CAKuIoAf.js","../assets/16.Cw9oSkcO.css","../nodes/17.BWRgFCUw.js","../assets/17.nNGjXhCQ.css","../nodes/18.BtYZF6FM.js"])))=>i.map(i=>d[i]);
2
- var Z=r=>{throw TypeError(r)};var M=(r,t,e)=>t.has(r)||Z("Cannot "+e);var l=(r,t,e)=>(M(r,t,"read from private field"),e?e.call(r):t.get(r)),Y=(r,t,e)=>t.has(r)?Z("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(r):t.set(r,e),H=(r,t,e,i)=>(M(r,t,"write to private field"),i?i.call(r,e):t.set(r,e),e);import{a5 as U,af as it,k as v,b7 as mt,ai as ut,F as ct,at as lt,am as _t,an as dt,t as ft,f as A,aw as vt,au as ht,b8 as J,av as gt,ax as Et,aA as k,az as Pt}from"../chunks/BsQ08Wq_.js";import{h as pt,m as Rt,u as yt,s as Ot}from"../chunks/BK0ygNWX.js";import{a as E,c as I,f as $,t as bt}from"../chunks/DIeahUKq.js";import{o as Lt}from"../chunks/DptdhtA1.js";import{i as B}from"../chunks/rNwPv4DZ.js";import{c as x}from"../chunks/C9wTDiHH.js";import{b as S}from"../chunks/CAKuIoAf.js";import{p as q}from"../chunks/D8G961Hm.js";function At(r){return class extends Tt{constructor(t){super({component:r,...t})}}}var P,_;class Tt{constructor(t){Y(this,P);Y(this,_);var p;var e=new Map,i=(o,a)=>{var m=ct(a,!1,!1);return e.set(o,m),m};const u=new Proxy({...t.props||{},$$events:{}},{get(o,a){return v(e.get(a)??i(a,Reflect.get(o,a)))},has(o,a){return a===it?!0:(v(e.get(a)??i(a,Reflect.get(o,a))),Reflect.has(o,a))},set(o,a,m){return U(e.get(a)??i(a,m),m),Reflect.set(o,a,m)}});H(this,_,(t.hydrate?pt:Rt)(t.component,{target:t.target,anchor:t.anchor,props:u,context:t.context,intro:t.intro??!1,recover:t.recover,transformError:t.transformError})),(!((p=t==null?void 0:t.props)!=null&&p.$$host)||t.sync===!1)&&mt(),H(this,P,u.$$events);for(const o of Object.keys(l(this,_)))o==="$set"||o==="$destroy"||o==="$on"||ut(this,o,{get(){return l(this,_)[o]},set(a){l(this,_)[o]=a},enumerable:!0});l(this,_).$set=o=>{Object.assign(u,o)},l(this,_).$destroy=()=>{yt(l(this,_))}}$set(t){l(this,_).$set(t)}$on(t,e){l(this,P)[t]=l(this,P)[t]||[];const i=(...u)=>e.call(this,...u);return l(this,P)[t].push(i),()=>{l(this,P)[t]=l(this,P)[t].filter(u=>u!==i)}}$destroy(){l(this,_).$destroy()}}P=new WeakMap,_=new WeakMap;const Dt="modulepreload",It=function(r,t){return new URL(r,t).href},N={},s=function(t,e,i){let u=Promise.resolve();if(e&&e.length>0){let o=function(c){return Promise.all(c.map(h=>Promise.resolve(h).then(R=>({status:"fulfilled",value:R}),R=>({status:"rejected",reason:R}))))};const a=document.getElementsByTagName("link"),m=document.querySelector("meta[property=csp-nonce]"),j=(m==null?void 0:m.nonce)||(m==null?void 0:m.getAttribute("nonce"));u=o(e.map(c=>{if(c=It(c,i),c in N)return;N[c]=!0;const h=c.endsWith(".css"),R=h?'[rel="stylesheet"]':"";if(!!i)for(let y=a.length-1;y>=0;y--){const n=a[y];if(n.href===c&&(!h||n.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${c}"]${R}`))return;const g=document.createElement("link");if(g.rel=h?"stylesheet":Dt,h||(g.as="script"),g.crossOrigin="",g.href=c,j&&g.setAttribute("nonce",j),document.head.appendChild(g),h)return new Promise((y,n)=>{g.addEventListener("load",y),g.addEventListener("error",()=>n(new Error(`Unable to preload CSS for ${c}`)))})}))}function p(o){const a=new Event("vite:preloadError",{cancelable:!0});if(a.payload=o,window.dispatchEvent(a),!a.defaultPrevented)throw o}return u.then(o=>{for(const a of o||[])a.status==="rejected"&&p(a.reason);return t().catch(p)})},Ht={};var Vt=$('<div id="svelte-announcer" aria-live="assertive" aria-atomic="true" style="position: absolute; left: 0; top: 0; clip: rect(0 0 0 0); clip-path: inset(50%); overflow: hidden; white-space: nowrap; width: 1px; height: 1px"><!></div>'),wt=$("<!> <!>",1);function kt(r,t){lt(t,!0);let e=q(t,"components",23,()=>[]),i=q(t,"data_0",3,null),u=q(t,"data_1",3,null),p=q(t,"data_2",3,null);_t(()=>t.stores.page.set(t.page)),dt(()=>{t.stores,t.page,t.constructors,e(),t.form,i(),u(),p(),t.stores.page.notify()});let o=J(!1),a=J(!1),m=J(null);Lt(()=>{const n=t.stores.page.subscribe(()=>{v(o)&&(U(a,!0),ft().then(()=>{U(m,document.title||"untitled page",!0)}))});return U(o,!0),n});const j=k(()=>t.constructors[2]);var c=wt(),h=A(c);{var R=n=>{const O=k(()=>t.constructors[0]);var b=I(),V=A(b);x(V,()=>v(O),(L,T)=>{S(T(L,{get data(){return i()},get form(){return t.form},get params(){return t.page.params},children:(d,St)=>{var Q=I(),et=A(Q);{var rt=D=>{const z=k(()=>t.constructors[1]);var w=I(),F=A(w);x(F,()=>v(z),(G,W)=>{S(W(G,{get data(){return u()},get form(){return t.form},get params(){return t.page.params},children:(f,jt)=>{var X=I(),ot=A(X);x(ot,()=>v(j),(st,nt)=>{S(nt(st,{get data(){return p()},get form(){return t.form},get params(){return t.page.params}}),C=>e()[2]=C,()=>{var C;return(C=e())==null?void 0:C[2]})}),E(f,X)},$$slots:{default:!0}}),f=>e()[1]=f,()=>{var f;return(f=e())==null?void 0:f[1]})}),E(D,w)},at=D=>{const z=k(()=>t.constructors[1]);var w=I(),F=A(w);x(F,()=>v(z),(G,W)=>{S(W(G,{get data(){return u()},get form(){return t.form},get params(){return t.page.params}}),f=>e()[1]=f,()=>{var f;return(f=e())==null?void 0:f[1]})}),E(D,w)};B(et,D=>{t.constructors[2]?D(rt):D(at,-1)})}E(d,Q)},$$slots:{default:!0}}),d=>e()[0]=d,()=>{var d;return(d=e())==null?void 0:d[0]})}),E(n,b)},K=n=>{const O=k(()=>t.constructors[0]);var b=I(),V=A(b);x(V,()=>v(O),(L,T)=>{S(T(L,{get data(){return i()},get form(){return t.form},get params(){return t.page.params}}),d=>e()[0]=d,()=>{var d;return(d=e())==null?void 0:d[0]})}),E(n,b)};B(h,n=>{t.constructors[1]?n(R):n(K,-1)})}var g=vt(h,2);{var y=n=>{var O=Vt(),b=gt(O);{var V=L=>{var T=bt();Pt(()=>Ot(T,v(m))),E(L,T)};B(b,L=>{v(a)&&L(V)})}Et(O),E(n,O)};B(g,n=>{v(o)&&n(y)})}E(r,c),ht()}const Jt=At(kt),Kt=[()=>s(()=>import("../nodes/0.zuqEMBQT.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24]),import.meta.url),()=>s(()=>import("../nodes/1.DzLFxso0.js"),__vite__mapDeps([25,1,2,3,6,10,12,5,13,14]),import.meta.url),()=>s(()=>import("../nodes/2.BOYqXdCa.js"),__vite__mapDeps([26,1,2,3,8]),import.meta.url),()=>s(()=>import("../nodes/3.CJw5Nx2o.js"),__vite__mapDeps([27,1,2,3,28,29,14,6,4,5,7,17,9,30,10,11,12,13,15,16,18,19,20,8,21,22,23,31,32,33,34]),import.meta.url),()=>s(()=>import("../nodes/4.BIzqhTqv.js"),__vite__mapDeps([35,36,13]),import.meta.url),()=>s(()=>import("../nodes/5.9zgwFV6I.js"),__vite__mapDeps([37,1,2,3,14,6,7,17,28,9,10,38]),import.meta.url),()=>s(()=>import("../nodes/6.trFT-trT.js"),__vite__mapDeps([39,1,2,3,14,6,7,28,9,30,10,40,4,5,11,12,13,41,15,42]),import.meta.url),()=>s(()=>import("../nodes/7.DCqiDq6O.js"),__vite__mapDeps([43,1,2,3,14,6,7,28,9,30,10,40,4,5,11,12,13,41,15,44]),import.meta.url),()=>s(()=>import("../nodes/8.DG_T-wWN.js"),__vite__mapDeps([45,1,2,3,14,4,5,10,12,13,11,46]),import.meta.url),()=>s(()=>import("../nodes/9.FiPTezQy.js"),__vite__mapDeps([47,1,2,3,14,6,7,17,28,9,30,48,10,40,4,5,11,12,13,41,32,20,8,19,21,18,33,49]),import.meta.url),()=>s(()=>import("../nodes/10.BC-1FXeC.js"),__vite__mapDeps([50,1,2,3,14,6,7,17,28,9,10,40,4,5,11,12,13,41,15,51]),import.meta.url),()=>s(()=>import("../nodes/11.CePwEHqu.js"),__vite__mapDeps([52,1,2,3,14,6,7,17,28,30,10,9,40,4,5,11,12,13,41,15,32,20,8,19,21,18,33,53]),import.meta.url),()=>s(()=>import("../nodes/12.eeQ9B6bg.js"),__vite__mapDeps([54,1,2,3,28,29,14,6,4,5,7,17,9,30,10,11,12,13,15,16,18,19,20,8,21,22,23,31,32,33,34,40,41,55]),import.meta.url),()=>s(()=>import("../nodes/13.BLKI9iZo.js"),__vite__mapDeps([56,1,2,3,14,6,7,17,28,9,30,48,10,40,4,5,11,12,13,41,15,57]),import.meta.url),()=>s(()=>import("../nodes/14.T9l5Rh19.js"),__vite__mapDeps([58,1,2,3,14,6,7,17,28,9,30,10,15,5,32,20,8,19,4,21,18,33,59]),import.meta.url),()=>s(()=>import("../nodes/15.39GHtAg1.js"),__vite__mapDeps([60,1,2,3,14,6,5,7,17,28,9,30,10,11,12,13,15,31,8,19,4,20,21,22,61]),import.meta.url),()=>s(()=>import("../nodes/16.BO-9BBQ5.js"),__vite__mapDeps([62,1,2,3,4,5,6,7,21,28,10,9,11,12,13,14,15,63,19,40,41,64]),import.meta.url),()=>s(()=>import("../nodes/17.BWRgFCUw.js"),__vite__mapDeps([65,1,2,3,14,28,10,12,5,13,66]),import.meta.url),()=>s(()=>import("../nodes/18.BtYZF6FM.js"),__vite__mapDeps([67,36,13]),import.meta.url)],Qt=[],Xt={"/":[3],"/admin":[5,[2]],"/admin/deliver":[6,[2]],"/admin/llm":[7,[2]],"/admin/logs":[8,[2]],"/admin/parse":[9,[2]],"/admin/pipeline":[10,[2]],"/admin/proxy":[11,[2]],"/admin/sources":[12,[2]],"/admin/tags":[13,[2]],"/logs":[14],"/plugins":[15],"/plugins/new":[17],"/plugins/[id]":[16],"/tags":[18],"/[sub]":[4]},tt={handleError:(({error:r})=>{console.error(r)}),reroute:(()=>{}),transport:{}},xt=Object.fromEntries(Object.entries(tt.transport).map(([r,t])=>[r,t.decode])),Zt=Object.fromEntries(Object.entries(tt.transport).map(([r,t])=>[r,t.encode])),Mt=!1,Nt=(r,t)=>xt[r](t);export{Nt as decode,xt as decoders,Xt as dictionary,Zt as encoders,Mt as hash,tt as hooks,Ht as matchers,Kt as nodes,Jt as root,Qt as server_loads};
@@ -1 +0,0 @@
1
- import{l as o,a as r}from"../chunks/DhZZHWov.js";export{o as load_css,r as start};
@@ -1,11 +0,0 @@
1
- import{c as V,a as $,f as B}from"../chunks/DIeahUKq.js";import"../chunks/CEWi_rGa.js";import{f as S,at as la,au as ra,av as t,ax as s,az as ia,aC as P,aD as Fa,a5 as O,k as a,aw as h,aq as Ga,u as m,F as W,y as _}from"../chunks/BsQ08Wq_.js";import{s as oa,a as T}from"../chunks/BI_ale1m.js";import{s as na}from"../chunks/BK0ygNWX.js";import{i as va}from"../chunks/rNwPv4DZ.js";import{s as D}from"../chunks/Cc7aBSsN.js";import{b as g,s as I,G as Ra,P as ta}from"../chunks/WW6La7Nt.js";import{i as ca}from"../chunks/Nd0ktDhd.js";import{p as Ca}from"../chunks/Czo-EcYU.js";import{t as Na}from"../chunks/4TuV_psf.js";import{R as Oa,P as Wa,h as w,S as Ia}from"../chunks/BZY5aksi.js";import{l as ua,s as da}from"../chunks/D8G961Hm.js";import{I as ha}from"../chunks/pd_p3yYy.js";const Ta=!1,Va=!1,ce=Object.freeze(Object.defineProperty({__proto__:null,prerender:Va,ssr:Ta},Symbol.toStringTag,{value:"Module"})),Ba='<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>',Da='</title><path d="',La='"/></svg>',sa={title:"GitHub",slug:"github",get svg(){return Ba+"GitHub"+Da+this.path+La},path:"M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12",source:"https://github.com/logos",hex:"181717",guidelines:"https://github.com/logos"};function Ua(f,o){const n=ua(o,["children","$$slots","$$events","$$legacy"]);/**
2
- * @license lucide-svelte v0.460.1 - ISC
3
- *
4
- * This source code is licensed under the ISC license.
5
- * See the LICENSE file in the root directory of this source tree.
6
- */const l=[["path",{d:"M15 12h-5"}],["path",{d:"M15 8h-5"}],["path",{d:"M19 17V5a2 2 0 0 0-2-2H4"}],["path",{d:"M8 21h12a2 2 0 0 0 2-2v-1a1 1 0 0 0-1-1H11a1 1 0 0 0-1 1v1a2 2 0 1 1-4 0V5a2 2 0 1 0-4 0v2a1 1 0 0 0 1 1h3"}]];ha(f,da({name:"scroll-text"},()=>n,{get iconNode(){return l},children:(u,p)=>{var e=V(),d=S(e);D(d,o,"default",{}),$(u,e)},$$slots:{default:!0}}))}function ja(f,o){const n=ua(o,["children","$$slots","$$events","$$legacy"]);/**
7
- * @license lucide-svelte v0.460.1 - ISC
8
- *
9
- * This source code is licensed under the ISC license.
10
- * See the LICENSE file in the root directory of this source tree.
11
- */const l=[["path",{d:"M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"}],["circle",{cx:"12",cy:"12",r:"3"}]];ha(f,da({name:"settings"},()=>n,{get iconNode(){return l},children:(u,p)=>{var e=V(),d=S(e);D(d,o,"default",{}),$(u,e)},$$slots:{default:!0}}))}var Aa=B("<div> </div>");function Ea(f,o){la(o,!1);const n=()=>T(Na,"$toast",l),[l,u]=oa();ca();var p=V(),e=S(p);{var d=v=>{var c=Aa(),H=t(c,!0);s(c),ia(()=>{g(c,1,`toast ${n().type??""}`,"svelte-zemmny"),na(H,n().msg)}),$(v,c)};va(e,v=>{n().msg&&v(d)})}$(f,p),ra(),u()}var Ja=B('<div class="layout-feed-rail layout-feed-rail--home svelte-12qhfyh"><!></div>'),Ka=B('<div class="layout-outer svelte-12qhfyh"><div class="layout-app svelte-12qhfyh"><div id="layout-inner-scroll" class="layout-merged-cluster svelte-12qhfyh"><aside class="layout-nav-rail svelte-12qhfyh" aria-label="主导航"><nav class="nav-rail-links svelte-12qhfyh"><div class="nav-rail-cluster svelte-12qhfyh"><a href="/" title="信源" aria-label="信源"><!></a> <a href="/logs" title="日志" aria-label="日志"><!></a> <a href="/plugins" title="插件" aria-label="插件"><!></a> <a href="/admin" title="设置" aria-label="设置"><!></a></div></nav> <div class="nav-rail-footer svelte-12qhfyh"><a class="nav-rail-github svelte-12qhfyh" target="_blank" rel="noopener noreferrer" aria-label="在 GitHub 打开源码仓库" title="GitHub"><svg class="nav-rail-github-icon svelte-12qhfyh" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"><path fill="currentColor"></path></svg></a> <a class="nav-rail-brand svelte-12qhfyh" href="/" aria-label="返回信源首页"> </a></div></aside> <div><main><!></main></div> <!></div></div></div> <!>',1);function ue(f,o){la(o,!1);const n=()=>T(Ca,"$page",u),l=()=>T(w,"$homeFeedPanelSource",u),[u,p]=oa(),e=W(),d=W(),v=W(),c=18;function H(i){return!!(i==="/"||i==="/admin"||i==="/admin/sources"||i==="/admin/tags"||i==="/plugins"||i==="/logs"||i.startsWith("/plugins/")||i.startsWith("/logs/"))}P(()=>n(),()=>{O(e,n().url.pathname)}),P(()=>a(e),()=>{O(d,H(a(e)))}),P(()=>(a(e),w),()=>{a(e)!=="/"&&w.set(null)}),P(()=>a(e),()=>{O(v,{sources:a(e)==="/"||a(e)==="/admin/sources",logs:a(e)==="/logs"||a(e).startsWith("/logs/"),plugins:a(e).startsWith("/plugins"),settings:a(e)==="/admin"||a(e).startsWith("/admin/")})}),Fa(),ca();var L=Ka(),k=S(L),U=t(k),j=t(U),M=t(j),F=t(M),A=t(F),y=t(A);let E;var fa=t(y);Oa(fa,{size:c}),s(y);var b=h(y,2);let J;var ga=t(b);Ua(ga,{size:c}),s(b);var q=h(b,2);let K;var pa=t(q);Wa(pa,{size:c}),s(q);var G=h(q,2);let Q;var ma=t(G);ja(ma,{size:c}),s(G),s(A),s(F);var X=h(F,2),x=t(X),Y=t(x),_a=t(Y);s(Y),s(x);var R=h(x,2),$a=t(R,!0);s(R),s(X),s(M);var z=h(M,2);let Z;var C=t(z);let aa;var ya=t(C);D(ya,o,"default",{}),s(C),s(z);var ba=h(z,2);{var qa=i=>{var N=Ja(),za=t(N);{let Pa=_(()=>l()!=null),wa=_(()=>(l(),m(()=>{var r;return((r=l())==null?void 0:r.ref)??""}))),Sa=_(()=>(l(),m(()=>{var r;return((r=l())==null?void 0:r.displayLabel)??""}))),Ha=_(()=>(l(),m(()=>{var r;return((r=l())==null?void 0:r.description)??""}))),ka=_(()=>(l(),m(()=>{var r,ea;return((ea=(r=l())==null?void 0:r.proxy)==null?void 0:ea.trim())??""}))),Ma=_(()=>(l(),m(()=>{var r;return((r=l())==null?void 0:r.parseHint)??null})));Ia(za,{variant:"inline",get open(){return a(Pa)},get sourceRef(){return a(wa)},get sourceLabel(){return a(Sa)},get sourceDescription(){return a(Ha)},get sourceProxy(){return a(ka)},get sourceParseHint(){return a(Ma)},onOpenChange:r=>{r||w.set(null)}})}s(N),$(i,N)};va(ba,i=>{a(e)==="/"&&i(qa)})}s(j),s(U),s(k);var xa=h(k,2);Ea(xa,{}),ia(()=>{E=g(y,1,"nav-rail-link svelte-12qhfyh",null,E,{active:a(v).sources}),J=g(b,1,"nav-rail-link svelte-12qhfyh",null,J,{active:a(v).logs}),K=g(q,1,"nav-rail-link svelte-12qhfyh",null,K,{active:a(v).plugins}),Q=g(G,1,"nav-rail-link svelte-12qhfyh",null,Q,{active:a(v).settings}),I(x,"href",Ra),I(_a,"d",(Ga(sa),m(()=>sa.path))),I(R,"title",ta),na($a,ta),Z=g(z,1,"shell-frame svelte-12qhfyh",null,Z,{"shell-frame--with-feed-rail":a(e)==="/"}),aa=g(C,1,"main shell svelte-12qhfyh",null,aa,{"main-fill":a(d)})}),$(f,L),ra(),p()}export{ue as component,ce as universal};
@@ -1 +0,0 @@
1
- import{a as u,f as b}from"../chunks/DIeahUKq.js";import"../chunks/CEWi_rGa.js";import{o as se}from"../chunks/DptdhtA1.js";import{at as te,au as re,d as le,av as o,$ as ie,ay as B,ax as i,aw as c,k as a,a5 as r,F as g,az as S,aA as oe}from"../chunks/BsQ08Wq_.js";import{s as F,e as f}from"../chunks/BK0ygNWX.js";import{i as I}from"../chunks/rNwPv4DZ.js";import{e as ne,i as de}from"../chunks/B553hBXT.js";import{h as ve}from"../chunks/DO5OXNYS.js";import{P as ce,c as O,r as fe,b as pe,d as me}from"../chunks/WW6La7Nt.js";import{i as ue}from"../chunks/Nd0ktDhd.js";import{B as ge}from"../chunks/CIsxbQ9B.js";import{s as $}from"../chunks/4TuV_psf.js";var be=b('<div class="state svelte-jqd85f">加载中…</div>'),_e=b('<div role="listitem" draggable="true"><span class="drag-handle svelte-jqd85f" title="拖拽排序">⋮⋮</span> <label class="toggle-wrap svelte-jqd85f"><input type="checkbox" class="svelte-jqd85f"/> <span class="toggle-slider svelte-jqd85f"></span></label> <span class="step-label svelte-jqd85f"> </span></div>'),he=b('<button type="button" class="btn-add svelte-jqd85f">+ 添加步骤</button>'),je=b('<div class="body svelte-jqd85f"><section class="pipeline-section svelte-jqd85f"><h3 class="section-title svelte-jqd85f">Pipeline(入库前)</h3> <p class="hint svelte-jqd85f">对每条新入库条目执行,顺序由上到下。</p> <div class="step-list svelte-jqd85f" role="list"></div> <!></section> <div class="save-row svelte-jqd85f"><button type="button" class="btn btn-primary svelte-jqd85f"> </button></div></div>'),qe=b('<div class="feed-wrap svelte-jqd85f"><div class="feed-col svelte-jqd85f"><div class="feed-header svelte-jqd85f"><!> <h2 class="svelte-jqd85f">Pipeline</h2> <p class="page-desc svelte-jqd85f">入库前处理(打标签、翻译),可调整顺序与开关。</p></div> <!></div></div>');function Ie(C,J){te(J,!1);const L={qualityFilter:"质量过滤",tagger:"打标签",translator:"翻译"};let t=g([]),_=g([]),q=g(!0),p=g(!1),m=g(null);async function M(){r(q,!0);try{const e=await O("/api/pipeline");r(t,(e==null?void 0:e.steps)??[]),r(_,(e==null?void 0:e.availableIds)??[])}catch{r(t,[]),r(_,[])}finally{r(q,!1)}}async function N(){r(p,!0);try{const e=await O("/api/pipeline",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({steps:a(t)})});if(!(e!=null&&e.ok))throw new Error((e==null?void 0:e.message)??"保存失败");r(t,(e==null?void 0:e.steps)??a(t)),$("已保存","success")}catch(e){$("保存失败: "+(e instanceof Error?e.message:String(e)),"error")}finally{r(p,!1)}}function R(e){r(t,a(t).map((s,l)=>l===e?{...s,enabled:!s.enabled}:s))}function U(e){r(m,e)}function z(e){e.preventDefault(),e.dataTransfer&&(e.dataTransfer.dropEffect="move")}function G(e){if(a(m)==null)return;const s=[...a(t)],[l]=s.splice(a(m),1);s.splice(e,0,l),r(t,s),r(m,null)}function H(){const e=new Set(a(t).map(l=>l.id)),s=a(_).find(l=>!e.has(l));s&&r(t,[...a(t),{id:s,enabled:!1}])}se(M),ue();var y=qe();ve("jqd85f",e=>{le(()=>{ie.title=`Pipeline - ${ce}`})});var T=o(y),w=o(T),K=o(w);ge(K,{}),B(4),i(w);var Q=c(w,2);{var V=e=>{var s=be();u(e,s)},W=e=>{var s=je(),l=o(s),x=c(o(l),4);ne(x,5,()=>a(t),de,(d,n,j)=>{var v=_e();let D;var k=c(o(v),2),P=o(k);fe(P),B(2),i(k);var A=c(k,2),ae=o(A,!0);i(A),i(v),S(()=>{D=pe(v,1,"step-row svelte-jqd85f",null,D,{dragging:a(m)===j}),me(P,a(n).enabled),F(ae,L[a(n).id]??a(n).id)}),f("change",P,()=>R(j)),f("dragstart",v,()=>U(j)),f("dragover",v,z),f("drop",v,()=>G(j)),u(d,v)}),i(x);var X=c(x,2);{var Y=d=>{var n=he();S(()=>n.disabled=a(p)),f("click",n,H),u(d,n)},Z=oe(()=>a(_).some(d=>!a(t).some(n=>n.id===d)));I(X,d=>{a(Z)&&d(Y)})}i(l);var E=c(l,2),h=o(E),ee=o(h,!0);i(h),i(E),i(s),S(()=>{h.disabled=a(p),F(ee,a(p)?"保存中…":"保存")}),f("click",h,N),u(e,s)};I(Q,e=>{a(q)?e(V):e(W,-1)})}i(T),i(y),u(C,y),re()}export{Ie as component};
@@ -1,3 +0,0 @@
1
- import{a as o,f as p,c as pe,t as de}from"../chunks/DIeahUKq.js";import"../chunks/CEWi_rGa.js";import{o as me}from"../chunks/DptdhtA1.js";import{at as ue,aC as j,aD as _e,az as A,au as ye,k as t,d as he,F as l,av as i,a5 as s,$ as ge,aw as v,ax as n,f as g,aE as xe,ay as O,u as E}from"../chunks/BsQ08Wq_.js";import{d as be,a as Pe,s as R}from"../chunks/BK0ygNWX.js";import{i as X}from"../chunks/rNwPv4DZ.js";import{e as $e}from"../chunks/B553hBXT.js";import{h as je}from"../chunks/DO5OXNYS.js";import{b as ze}from"../chunks/BnqaikL8.js";import{i as we}from"../chunks/Nd0ktDhd.js";import{c as Y,P as Te}from"../chunks/WW6La7Nt.js";import{B as Le}from"../chunks/CIsxbQ9B.js";import{s as V}from"../chunks/4TuV_psf.js";import{S as Se,a as ke,C as Ce,b as Ae,c as Oe,d as Ee}from"../chunks/B8StT3Do.js";import{P as Re}from"../chunks/pd_p3yYy.js";var He=p('<p class="hint svelte-1f24zj">加载中…</p>'),Ne=p('<textarea class="text-input svelte-1f24zj" rows="5" placeholder="http://127.0.0.1:7890 http://user:pass@host:port" autocomplete="off" spellcheck="false"></textarea> <p class="hint svelte-1f24zj">一行一个代理,支持带账号:<code>http://user:pass@host:port</code></p>',1),Be=p('<p class="hint svelte-1f24zj">加载中…</p>'),De=p("<span> </span> <!>",1),Fe=p("<!> <!>",1),Ge=p('<!> <p class="hint svelte-1f24zj">全局代理作为信源未指定代理时的默认值。</p>',1),Ie=p('<div class="feed-wrap svelte-1f24zj"><div class="feed-col svelte-1f24zj"><div class="body svelte-1f24zj"><!> <p class="intro svelte-1f24zj">写入 <code class="svelte-1f24zj">.rssany/config.json</code> 的 <code class="svelte-1f24zj">proxyList</code> 与 <code class="svelte-1f24zj">globalProxy</code>。信源可从代理列表中选择单源代理;未指定单源代理时使用全局代理;未填写时仍可使用环境变量 <code class="svelte-1f24zj">HTTP_PROXY</code> / <code class="svelte-1f24zj">HTTPS_PROXY</code>。</p> <section class="form-section svelte-1f24zj"><h3 class="section-title svelte-1f24zj">代理列表</h3> <!></section> <section class="form-section svelte-1f24zj"><h3 class="section-title svelte-1f24zj">全局 HTTP(S) 代理</h3> <!></section> <div class="btn-row svelte-1f24zj"><button type="button" class="btn btn-primary svelte-1f24zj"> </button></div></div></div></div>');function ot(q,K){ue(K,!1);const d=l(),z=l(),u=l(),H=l();let a=l(""),c=l(""),_=l(!0),x=l(!1);function Q(e){const r=new Set,f=[];for(const y of e.split(/\r?\n/)){const h=y.trim();!h||r.has(h)||(r.add(h),f.push(h))}return f}function W(e){s(a,e)}async function Z(){s(_,!0);try{const e=await Y("/api/proxy");s(a,typeof(e==null?void 0:e.globalProxy)=="string"?e.globalProxy:""),s(c,Array.isArray(e==null?void 0:e.proxyList)?e.proxyList.join(`
2
- `):"")}catch{s(a,""),s(c,"")}finally{s(_,!1)}}async function ee(){s(x,!0);try{const e=await Y("/api/proxy",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({globalProxy:t(a).trim(),proxyList:t(d)})});if(!(e!=null&&e.ok))throw new Error("保存失败");s(a,typeof e.globalProxy=="string"?e.globalProxy:""),s(c,Array.isArray(e.proxyList)?e.proxyList.join(`
3
- `):""),V("已保存","success")}catch(e){V("保存失败: "+(e instanceof Error?e.message:String(e)),"error")}finally{s(x,!1)}}me(Z),j(()=>t(c),()=>{s(d,Q(t(c)))}),j(()=>(t(a),t(d)),()=>{s(z,t(a).trim()&&!t(d).includes(t(a).trim()))}),j(()=>(t(z),t(a),t(d)),()=>{s(u,[{value:"",label:"不设置全局代理"},...t(z)?[{value:t(a),label:`${t(a)}(当前配置,未在列表中)`}]:[],...t(d).map(e=>({value:e,label:e}))])}),j(()=>(t(u),t(a)),()=>{var e;s(H,((e=t(u).find(r=>r.value===t(a)))==null?void 0:e.label)??"不设置全局代理")}),_e(),we();var w=Ie();je("1f24zj",e=>{he(()=>{ge.title=`代理 - ${Te}`})});var N=i(w),B=i(N),D=i(B);Le(D,{});var T=v(D,4),te=v(i(T),2);{var se=e=>{var r=He();o(e,r)},ae=e=>{var r=Ne(),f=g(r);xe(f),O(2),ze(f,()=>t(c),y=>s(c,y)),o(e,r)};X(te,e=>{t(_)?e(se):e(ae,-1)})}n(T);var L=v(T,2),re=v(i(L),2);{var oe=e=>{var r=Be();o(e,r)},le=e=>{var r=Ge(),f=g(r);Se(f,{type:"single",get value(){return t(a)},onValueChange:W,get items(){return t(u)},children:(y,h)=>{var G=Fe(),I=g(G);ke(I,{class:"proxy-select-trigger","aria-label":"全局代理",children:(S,ce)=>{var P=De(),$=g(P),k=i($,!0);n($);var J=v($,2);Ce(J,{size:14,"aria-hidden":"true"}),A(()=>R(k,t(H))),o(S,P)},$$slots:{default:!0}});var ne=v(I,2);Re(ne,{children:(S,ce)=>{Ae(S,{class:"proxy-select-content",sideOffset:4,children:(P,$)=>{Oe(P,{class:"proxy-select-viewport",children:(k,J)=>{var M=pe(),fe=g(M);$e(fe,1,()=>t(u),C=>C.value,(C,m)=>{Ee(C,{class:"proxy-select-item",get value(){return t(m),E(()=>t(m).value)},get label(){return t(m),E(()=>t(m).label)},children:(ve,Je)=>{O();var U=de();A(()=>R(U,(t(m),E(()=>t(m).label)))),o(ve,U)},$$slots:{default:!0}})}),o(k,M)},$$slots:{default:!0}})},$$slots:{default:!0}})},$$slots:{default:!0}}),o(y,G)},$$slots:{default:!0}}),O(2),o(e,r)};X(re,e=>{t(_)?e(oe):e(le,-1)})}n(L);var F=v(L,2),b=i(F),ie=i(b,!0);n(b),n(F),n(B),n(N),n(w),A(()=>{b.disabled=t(_)||t(x),R(ie,t(x)?"保存中…":"保存")}),Pe("click",b,ee),o(q,w),ye()}be(["click"]);export{ot as component};
@@ -1 +0,0 @@
1
- import{a as u,f as d}from"../chunks/DIeahUKq.js";import"../chunks/CEWi_rGa.js";import{o as ke}from"../chunks/DptdhtA1.js";import{z as we,at as Ce,f as Te,az as E,k as s,au as Le,d as Ee,av as n,a5 as a,F as w,aw as i,$ as $e,ax as r,y as Me}from"../chunks/BsQ08Wq_.js";import{e as f,s as S}from"../chunks/BK0ygNWX.js";import{i as F}from"../chunks/rNwPv4DZ.js";import{e as se,i as ae}from"../chunks/B553hBXT.js";import{h as Pe}from"../chunks/DO5OXNYS.js";import{P as Se,r as Fe,c as X,e as Oe,s as re}from"../chunks/WW6La7Nt.js";import{b as Je}from"../chunks/BnqaikL8.js";import{s as Y}from"../chunks/Bfc47y5P.js";import{i as Ne}from"../chunks/Nd0ktDhd.js";import{B as je}from"../chunks/CIsxbQ9B.js";import{s as O}from"../chunks/4TuV_psf.js";function ze(z,$){var C;var o=(C=z.$$events)==null?void 0:C[$.type],p=we(o)?o.slice():o==null?[]:[o];for(var m of p)m.call(this,$)}var Be=d('<div class="state svelte-1s5glru">加载中…</div>'),De=d('<p class="empty-hint svelte-1s5glru">暂无标签。添加后,pipeline 会对新入库条目自动打标签。</p>'),Ie=d('<span class="tag-meta svelte-1s5glru"> </span>'),Re=d('<div class="tag-badge svelte-1s5glru" role="button" tabindex="0"><span class="tag-name svelte-1s5glru"> </span> <!> <button type="button" class="tag-remove svelte-1s5glru" title="从系统标签中删除">×</button></div>'),Ue=d('<div class="tag-list svelte-1s5glru"></div>'),qe=d('<div class="tag-badge suggested svelte-1s5glru" role="button" tabindex="0"><span class="tag-name svelte-1s5glru"> </span> <span class="tag-meta svelte-1s5glru"> </span> <button type="button" class="tag-add svelte-1s5glru" title="添加到系统标签">+</button></div>'),Ae=d('<div class="suggested-section svelte-1s5glru"><h3 class="section-title svelte-1s5glru">建议添加(文章中出现但未在系统标签库中)</h3> <div class="tag-list svelte-1s5glru"></div></div>'),Xe=d('<div class="body svelte-1s5glru"><div class="tags-section svelte-1s5glru"><h3 class="section-title svelte-1s5glru"> </h3> <!></div> <!></div>'),Ye=d('<div class="context-menu svelte-1s5glru" role="menu" tabindex="-1"><button type="button" class="context-menu-item svelte-1s5glru">从所有文章中移除该标签</button></div>'),Ge=d('<div class="feed-wrap svelte-1s5glru"><div class="feed-col svelte-1s5glru"><div class="feed-toolbar-block svelte-1s5glru"><!> <div class="admin-feed-header"><div class="admin-feed-header__left"><h2>系统标签</h2> <p class="admin-feed-header__desc">系统标签库,新入库条目会由 LLM 自动匹配打标签。</p></div> <div class="admin-feed-header__actions"><input type="text" class="admin-toolbar-input" placeholder="输入新标签,回车添加"/> <button type="button" class="admin-toolbar-btn admin-toolbar-btn--primary">添加</button></div></div></div> <div class="feed-body-scroll"><!></div></div></div> <!>',1);function lt(z,$){Ce($,!1);let o=w([]),p=[],m=w([]),C=w(!0),_=w(!1),M=w(""),b=w(null),J=w(!1);async function oe(){a(C,!0);try{const t=await X("/api/tags");a(o,(t==null?void 0:t.tags)??[]),p=(t==null?void 0:t.stats)??[],a(m,(t==null?void 0:t.suggestedTags)??[])}catch{a(o,[]),p=[],a(m,[])}finally{a(C,!1)}}function ne(t){return p.find(e=>e.name.toLowerCase()===t.toLowerCase())}async function B(t){a(_,!0);try{const e=await X("/api/tags",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({tags:t})});if(!(e!=null&&e.ok))throw new Error((e==null?void 0:e.message)??"保存失败");a(o,(e==null?void 0:e.tags)??t),p=(e==null?void 0:e.stats)??[],a(m,(e==null?void 0:e.suggestedTags)??[]),O("已保存","success")}catch(e){O("保存失败: "+(e instanceof Error?e.message:String(e)),"error")}finally{a(_,!1)}}function G(){const t=s(M).trim();if(!(!t||s(_))){if(s(o).some(e=>e.toLowerCase()===t.toLowerCase())){O("标签已存在","error");return}a(M,""),B([...s(o),t])}}function ie(t){s(_)||B(s(o).filter(e=>e!==t))}function le(t){s(_)||s(o).some(e=>e.toLowerCase()===t.toLowerCase())||B([...s(o),t])}function H(t,e){t.preventDefault(),t.stopPropagation(),a(b,{x:t.clientX,y:t.clientY,tag:e})}function D(){a(b,null)}async function ve(t){if(!s(J)){a(J,!0),a(b,null);try{const e=await X("/api/tags/remove-from-items",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({tag:t})});if(!(e!=null&&e.ok))throw new Error((e==null?void 0:e.message)??"操作失败");a(o,(e==null?void 0:e.tags)??s(o)),p=(e==null?void 0:e.stats)??p,a(m,(e==null?void 0:e.suggestedTags)??s(m)),O(`已从 ${(e==null?void 0:e.removedCount)??0} 篇文章中移除该标签`,"success")}catch(e){O("操作失败: "+(e instanceof Error?e.message:String(e)),"error")}finally{a(J,!1)}}}ke(()=>{oe();const t=()=>D(),e=()=>D();return document.addEventListener("click",t),document.addEventListener("contextmenu",e),()=>{document.removeEventListener("click",t),document.removeEventListener("contextmenu",e)}}),Ne();var K=Ge();Pe("1s5glru",t=>{Ee(()=>{$e.title=`标签 - ${Se}`})});var I=Te(K),Q=n(I),R=n(Q),V=n(R);je(V,{});var W=i(V,2),Z=i(n(W),2),N=n(Z);Fe(N);var ee=i(N,2);r(Z),r(W),r(R);var te=i(R,2),ce=n(te);{var ue=t=>{var e=Be();u(t,e)},de=t=>{var e=Xe(),T=n(e),h=n(T),fe=n(h);r(h);var pe=i(h,2);{var _e=v=>{var g=De();u(v,g)},be=v=>{var g=Ue();se(g,5,()=>s(o),ae,(j,y)=>{const c=Me(()=>ne(s(y)));var l=Re(),x=n(l),U=n(x,!0);r(x);var L=i(x,2);{var q=k=>{var A=Ie(),xe=n(A);r(A),E(()=>S(xe,`${s(c).count??""} 篇 · 热度 ${s(c).hotness??""}`)),u(k,A)};F(L,k=>{s(c)&&k(q)})}var P=i(L,2);r(l),E(()=>{re(l,"aria-label",`标签 ${s(y)},右键打开菜单`),S(U,s(y)),P.disabled=s(_)}),f("click",P,Y(()=>ie(s(y)))),f("contextmenu",l,k=>H(k,s(y))),u(j,l)}),r(g),u(v,g)};F(pe,v=>{s(o).length===0?v(_e):v(be,-1)})}r(T);var he=i(T,2);{var ye=v=>{var g=Ae(),j=i(n(g),2);se(j,5,()=>s(m),ae,(y,c)=>{var l=qe(),x=n(l),U=n(x,!0);r(x);var L=i(x,2),q=n(L);r(L);var P=i(L,2);r(l),E(()=>{re(l,"aria-label",`建议标签 ${s(c).name},右键打开菜单`),S(U,s(c).name),S(q,`${s(c).count??""} 篇 · 热度 ${s(c).hotness??""}`),P.disabled=s(_)}),f("click",P,Y(()=>le(s(c).name))),f("contextmenu",l,k=>H(k,s(c).name)),u(y,l)}),r(j),r(g),u(v,g)};F(he,v=>{s(m).length>0&&v(ye)})}r(e),E(()=>S(fe,`当前标签 (${s(o).length??""})`)),u(t,e)};F(ce,t=>{s(C)?t(ue):t(de,-1)})}r(te),r(Q),r(I);var me=i(I,2);{var ge=t=>{var e=Ye(),T=n(e);r(e),E(()=>{Oe(e,`left: ${s(b).x??""}px; top: ${s(b).y??""}px`),T.disabled=s(J)}),f("click",T,()=>ve(s(b).tag)),f("click",e,Y(function(h){ze.call(this,$,h)})),f("keydown",e,h=>h.key==="Escape"&&D()),u(t,e)};F(me,t=>{s(b)&&t(ge)})}E(t=>ee.disabled=t,[()=>!s(M).trim()||s(_)]),Je(N,()=>s(M),t=>a(M,t)),f("keydown",N,t=>t.key==="Enter"&&G()),f("click",ee,G),u(z,K),Le()}export{lt as component};
@@ -1 +0,0 @@
1
- import{a as f,c as Ut,f as m,t as Vt}from"../chunks/DIeahUKq.js";import"../chunks/CEWi_rGa.js";import{o as zt,a as Jt}from"../chunks/DptdhtA1.js";import{at as Rt,aC as jt,aD as At,az as $,k as t,au as Ht,d as Bt,av as l,aw as v,f as R,a5 as o,F as p,$ as Gt,ax as a,ay as Zt,u as d}from"../chunks/BsQ08Wq_.js";import{e as T,s as _}from"../chunks/BK0ygNWX.js";import{i as ct}from"../chunks/rNwPv4DZ.js";import{e as ft}from"../chunks/B553hBXT.js";import{h as qt}from"../chunks/DO5OXNYS.js";import{a as pt,P as Kt,r as Qt,b as Wt}from"../chunks/WW6La7Nt.js";import{b as Xt}from"../chunks/BnqaikL8.js";import{i as Yt}from"../chunks/Nd0ktDhd.js";import{s as Y}from"../chunks/4TuV_psf.js";import{S as te,a as ee,C as se,b as ae,c as le,d as re}from"../chunks/B8StT3Do.js";import{P as oe}from"../chunks/pd_p3yYy.js";var ie=m('<span class="log-level-label svelte-1lsf4ps"> </span> <!>',1),ne=m("<!> <!>",1),ve=m('<div class="state err svelte-1lsf4ps"> </div>'),de=m('<div class="state svelte-1lsf4ps">加载中…</div>'),ce=m('<div class="state svelte-1lsf4ps">暂无日志</div>'),fe=m('<tr class="payload-row svelte-1lsf4ps"><td colspan="4" class="svelte-1lsf4ps"><pre class="payload-content svelte-1lsf4ps"> </pre></td></tr>'),pe=m('<tr class="log-row svelte-1lsf4ps" role="button" tabindex="0"><td class="td-time svelte-1lsf4ps"> </td><td class="td-level svelte-1lsf4ps"><span> </span></td><td class="td-cat svelte-1lsf4ps"> </td><td class="td-msg svelte-1lsf4ps"> </td></tr> <!>',1),ue=m('<div class="log-has-data svelte-1lsf4ps"><div class="log-table-scroll svelte-1lsf4ps"><div class="table-wrap svelte-1lsf4ps"><table class="svelte-1lsf4ps"><thead class="svelte-1lsf4ps"><tr><th class="th-time svelte-1lsf4ps">时间</th><th class="th-level svelte-1lsf4ps">级别</th><th class="th-cat svelte-1lsf4ps">分类</th><th class="th-msg svelte-1lsf4ps">消息</th></tr></thead><tbody class="svelte-1lsf4ps"></tbody></table></div></div> <div class="log-toolbar svelte-1lsf4ps"><span class="pagination-info svelte-1lsf4ps"> </span> <div class="pagination-btns svelte-1lsf4ps"><button class="btn btn-secondary btn-sm svelte-1lsf4ps">上一页</button> <button class="btn btn-secondary btn-sm svelte-1lsf4ps">下一页</button></div></div></div>'),_e=m('<div class="feed-wrap svelte-1lsf4ps"><div class="feed-col svelte-1lsf4ps"><div class="feed-toolbar-block svelte-1lsf4ps"><div class="admin-feed-header"><div class="admin-feed-header__left"><h2>日志</h2> <p class="admin-feed-header__desc">查看运行日志、筛选分类与级别</p></div> <div class="admin-feed-header__actions"><input type="search" class="admin-toolbar-input log-filter-input svelte-1lsf4ps" placeholder="过滤…" autocomplete="off" spellcheck="false" aria-label="分类"/> <!> <button class="admin-toolbar-btn admin-toolbar-btn--danger" type="button" title="清空全部日志">清空</button></div></div></div> <div class="log-body-scroll svelte-1lsf4ps"><!></div></div></div>');function De(ut,_t){Rt(_t,!1);const tt=p(),j=[{value:"",label:"全部"},...["error","warn","info","debug"].map(e=>({value:e,label:e}))],mt=350;let c=p([]),w=p(0),h=p(!1),F=p(""),x=p(""),A=p(""),C=null,i=p(0),D=p(null),H=p(!1);const B=100;function G(){C&&(clearTimeout(C),C=null)}function ht(){G(),C=setTimeout(()=>{C=null,o(i,0),S()},mt)}function bt(e){o(x,e),o(i,0),S()}zt(()=>{S()}),Jt(()=>{G()});function gt(){const e=new URLSearchParams;e.set("limit",String(B)),e.set("offset",String(t(i))),t(x)&&e.set("level",t(x));const s=t(A).trim();return s&&e.set("category",s),"/api/logs?"+e.toString()}async function S(){o(h,!0),o(F,"");try{const e=await pt(gt());if(!e.ok)throw new Error(await e.text().catch(()=>`HTTP ${e.status}`));const s=await e.json();o(c,s.items??[]),o(w,s.total??0)}catch(e){o(F,e instanceof Error?e.message:String(e)),o(c,[]),o(w,0)}finally{o(h,!1)}}async function yt(){if(confirm("确定清空全部日志?此操作不可恢复。")){o(H,!0),G();try{const e=await pt("/api/logs",{method:"DELETE"}),s=await e.text();let n={};try{n=s?JSON.parse(s):{}}catch{n={}}if(!e.ok){Y(n.error||s||`HTTP ${e.status}`,"error");return}n.ok&&(Y(n.deleted!=null?`已清空 ${n.deleted} 条`:"已清空日志","success"),o(i,0),o(D,null),await S())}catch(e){Y(e instanceof Error?e.message:String(e),"error")}finally{o(H,!1)}}}function $t(){t(i)<=0||(o(i,Math.max(0,t(i)-B)),S())}function wt(){t(i)+t(c).length>=t(w)||(o(i,t(i)+B),S())}function et(e){o(D,t(D)===e?null:e)}function xt(e){try{return new Date(e).toLocaleString("zh-CN",{month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"})}catch{return e}}function St(e){if(!e)return"";try{return JSON.stringify(JSON.parse(e),null,2)}catch{return e}}jt(()=>t(x),()=>{var e;o(tt,((e=j.find(s=>s.value===t(x)))==null?void 0:e.label)??"全部")}),At(),Yt();var Z=_e();qt("1lsf4ps",e=>{Bt(()=>{Gt.title=`日志 - ${Kt}`})});var st=l(Z),q=l(st),at=l(q),lt=v(l(at),2),M=l(lt);Qt(M);var rt=v(M,2);te(rt,{type:"single",get value(){return t(x)},onValueChange:bt,get items(){return j},children:(e,s)=>{var n=ne(),O=R(n);ee(O,{class:"log-level-trigger","aria-label":"级别",children:(E,V)=>{var b=ie(),P=R(b),L=l(P,!0);a(P);var k=v(P,2);se(k,{size:14,"aria-hidden":"true"}),$(()=>_(L,t(tt))),f(E,b)},$$slots:{default:!0}});var U=v(O,2);oe(U,{children:(E,V)=>{ae(E,{class:"log-level-content",sideOffset:4,children:(b,P)=>{le(b,{class:"log-level-viewport",children:(L,k)=>{var I=Ut(),N=R(I);ft(N,1,()=>j,r=>r.value,(r,u)=>{re(r,{class:"log-level-item",get value(){return t(u),d(()=>t(u).value)},get label(){return t(u),d(()=>t(u).label)},children:(g,z)=>{Zt();var J=Vt();$(()=>_(J,(t(u),d(()=>t(u).label)))),f(g,J)},$$slots:{default:!0}})}),f(L,I)},$$slots:{default:!0}})},$$slots:{default:!0}})},$$slots:{default:!0}}),f(e,n)},$$slots:{default:!0}});var ot=v(rt,2);a(lt),a(at),a(q);var it=v(q,2),Et=l(it);{var Pt=e=>{var s=ve(),n=l(s,!0);a(s),$(()=>_(n,t(F))),f(e,s)},Lt=e=>{var s=de();f(e,s)},kt=e=>{var s=ce();f(e,s)},Tt=e=>{var s=ue(),n=l(s),O=l(n),U=l(O),E=v(l(U));ft(E,5,()=>t(c),N=>N.id,(N,r)=>{var u=pe(),g=R(u),z=l(g),J=l(z,!0);a(z);var K=v(z),Q=l(K),Ct=l(Q,!0);a(Q),a(K);var W=v(K),Dt=l(W,!0);a(W);var nt=v(W),Ot=l(nt,!0);a(nt),a(g);var It=v(g,2);{var Nt=y=>{var X=fe(),vt=l(X),dt=l(vt),Ft=l(dt,!0);a(dt),a(vt),a(X),$(Mt=>_(Ft,Mt),[()=>(t(r),d(()=>St(t(r).payload)))]),f(y,X)};ct(It,y=>{t(D),t(r),d(()=>t(D)===t(r).id&&t(r).payload)&&y(Nt)})}$(y=>{_(J,y),Wt(Q,1,`badge level-${t(r),d(()=>t(r).level)??""}`,"svelte-1lsf4ps"),_(Ct,(t(r),d(()=>t(r).level))),_(Dt,(t(r),d(()=>t(r).category))),_(Ot,(t(r),d(()=>t(r).message)))},[()=>(t(r),d(()=>xt(t(r).created_at)))]),T("click",g,()=>et(t(r).id)),T("keydown",g,y=>y.key==="Enter"&&et(t(r).id)),f(N,u)}),a(E),a(U),a(O),a(n);var V=v(n,2),b=l(V),P=l(b);a(b);var L=v(b,2),k=l(L),I=v(k,2);a(L),a(V),a(s),$(()=>{_(P,`共 ${t(w)??""} 条,当前 ${t(c),t(i),d(()=>t(c).length?`${t(i)+1}–${t(i)+t(c).length}`:"—")??""}`),k.disabled=t(i)<=0||t(h),I.disabled=(t(i),t(c),t(w),t(h),d(()=>t(i)+t(c).length>=t(w)||t(h)))}),T("click",k,$t),T("click",I,wt),f(e,s)};ct(Et,e=>{t(F)?e(Pt):(t(h),t(c),d(()=>t(h)&&t(c).length===0)?e(Lt,1):(t(c),d(()=>t(c).length===0)?e(kt,2):e(Tt,-1)))})}a(it),a(st),a(Z),$(()=>ot.disabled=t(h)||t(H)),Xt(M,()=>t(A),e=>o(A,e)),T("input",M,ht),T("click",ot,yt),f(ut,Z),Ht()}export{De as component};
@@ -1 +0,0 @@
1
- import{a as u,t as st,f as p}from"../chunks/DIeahUKq.js";import"../chunks/CEWi_rGa.js";import{o as Tt}from"../chunks/DptdhtA1.js";import{at as Et,aC as ht,aD as Lt,f as rt,k as t,au as Ot,d as Nt,av as l,az as lt,a5 as o,aw as c,F as h,$ as zt,ax as s,u as b,ay as K}from"../chunks/BsQ08Wq_.js";import{d as Ft,a as D,e as Jt,s as Q}from"../chunks/BK0ygNWX.js";import{g as Mt}from"../chunks/FDS7fbwH.js";import{i as q}from"../chunks/rNwPv4DZ.js";import{e as Bt}from"../chunks/B553hBXT.js";import{h as Ht}from"../chunks/DO5OXNYS.js";import{s as O,P as Kt,r as ot,a as G}from"../chunks/WW6La7Nt.js";import{b as it}from"../chunks/BnqaikL8.js";import{i as Qt}from"../chunks/Nd0ktDhd.js";import{p as qt}from"../chunks/Czo-EcYU.js";import{g as nt}from"../chunks/DhZZHWov.js";import{s as m}from"../chunks/4TuV_psf.js";import{P as Gt}from"../chunks/SvdgnirT.js";import{D as Vt,a as Wt,b as Xt,c as Yt,d as bt}from"../chunks/B0czyjwj.js";import{P as Zt}from"../chunks/pd_p3yYy.js";var te=p('<div class="state svelte-1nj0iur">加载中…</div>'),ee=p('<div class="state error svelte-1nj0iur"> </div>'),ae=p('<div class="state svelte-1nj0iur">暂无已加载插件。可 <button type="button" class="link-btn svelte-1nj0iur">添加插件</button> 从模板创建,或在 <code>app/plugins/builtin/</code>、<code>.rssany/plugins/</code> 放置 *.rssany.js / *.rssany.ts</div>'),se=p('<div class="state svelte-1nj0iur">无匹配结果</div>'),re=p('<span class="kind-badge svelte-1nj0iur">Source</span>'),le=p('<button type="button" class="cell-btn cell-btn--primary svelte-1nj0iur">登录</button>'),oe=p('<span class="cell-dash svelte-1nj0iur" title="未声明站点登录">—</span>'),ie=p('<button type="button" class="cell-btn cell-btn--secondary svelte-1nj0iur">检查登录</button>'),ne=p('<span class="cell-dash svelte-1nj0iur" title="未声明站点登录">—</span>'),de=p('<tr class="plugin-row svelte-1nj0iur" tabindex="0"><td class="td-name svelte-1nj0iur"><div class="name-cell svelte-1nj0iur"><span class="plugin-id-text svelte-1nj0iur"> </span> <!></div></td><td class="td-pattern svelte-1nj0iur"><span class="pattern-text svelte-1nj0iur"> </span></td><td class="td-login svelte-1nj0iur"><!></td><td class="td-check svelte-1nj0iur"><!></td></tr>'),ce=p('<div class="plugin-table-wrap svelte-1nj0iur"><table class="plugin-table svelte-1nj0iur"><thead class="svelte-1nj0iur"><tr><th class="th-name svelte-1nj0iur" scope="col">插件名</th><th class="th-pattern svelte-1nj0iur" scope="col">匹配规则</th><th class="th-login svelte-1nj0iur" scope="col">登录</th><th class="th-check svelte-1nj0iur" scope="col">检查登录</th></tr></thead><tbody class="svelte-1nj0iur"></tbody></table></div>'),ve=p('<div class="modal-header svelte-1nj0iur"><!> <!></div> <form class="modal-body svelte-1nj0iur"><p class="add-hint svelte-1nj0iur">对于不支持RSS的站点,添加插件可以覆盖特定站点的解析规则</p> <div class="field svelte-1nj0iur"><span class="field-label svelte-1nj0iur">站点匹配规则</span> <input class="field-input svelte-1nj0iur" type="text" name="listUrlPattern" placeholder="例如 https://www.example.com/* 或 https://example.com/list/{segment}" autocomplete="off"/></div> <div class="field svelte-1nj0iur"><span class="field-label svelte-1nj0iur">插件 id</span> <input class="field-input svelte-1nj0iur" type="text" name="pluginId" placeholder="例如 my-site" autocomplete="off"/></div> <div class="modal-footer svelte-1nj0iur"><div class="modal-footer-right svelte-1nj0iur"><!> <button type="submit" class="btn-save svelte-1nj0iur"> </button></div></div></form>',1),ue=p("<!> <!>",1),pe=p('<div class="feed-wrap svelte-1nj0iur"><div class="feed-col svelte-1nj0iur"><div class="plugins-toolbar-block svelte-1nj0iur"><div class="admin-feed-header"><div class="admin-feed-header__left"><h2>插件</h2> <p class="admin-feed-header__desc">管理站点解析插件与登录检查</p></div> <div class="admin-feed-header__actions"><input class="admin-toolbar-input" type="search" placeholder="过滤…" autocomplete="off"/> <button type="button" class="btn-add svelte-1nj0iur" title="添加插件" aria-label="添加插件"><!></button></div></div></div> <div class="plugins-body-scroll svelte-1nj0iur"><!></div></div></div> <!>',1);function Ie(gt,jt){Et(jt,!1);const C=h(),N=h();let $=h([]),z=h(""),V=h(!0),S=h(!1),j=h(""),y=h(""),U=h(!1),F=h("");function dt(){o(j,""),o(y,""),o(S,!0)}function yt(e){o(S,e),e||(o(j,""),o(y,""))}async function wt(e){e.preventDefault();const a=t(j).trim(),i=t(y).trim();if(!a){m("请填写插件 id","error");return}if(!i){m("请填写支持的站点(URL 或匹配规则)","error");return}o(U,!0);try{const n=await G("/api/plugins",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:a,listUrlPattern:i})}),_=await n.text();let r={};try{r=_?JSON.parse(_):{}}catch{r={}}if(!n.ok){m(r.error||_||`HTTP ${n.status}`,"error");return}r.ok&&(m("已创建插件文件","success"),o(S,!1),o(j,""),o(y,""),await ct(),await nt("/plugins/"+encodeURIComponent(a)))}catch(n){m("请求失败: "+(n instanceof Error?n.message:String(n)),"error")}finally{o(U,!1)}}async function ct(){o(V,!0),o(z,"");try{const a=await(await G("/api/plugins")).json();o($,[...a].sort((i,n)=>(n.hasAuth?1:0)-(i.hasAuth?1:0)))}catch(e){o(z,"加载失败: "+(e instanceof Error?e.message:String(e)))}finally{o(V,!1)}}async function Pt(e,a){a.preventDefault(),a.stopPropagation();try{const n=await(await G(`/auth/check?siteId=${encodeURIComponent(e.id)}`)).json();n.ok?m(`${e.id}:${n.authenticated?"✓ 已登录":"✗ 未登录"}`,n.authenticated?"success":"error"):m(n.message||"检查失败","error")}catch(i){m("请求失败: "+(i instanceof Error?i.message:String(i)),"error")}}function vt(e){nt("/plugins/"+encodeURIComponent(e.id))}function kt(e,a){(a.key==="Enter"||a.key===" ")&&(a.preventDefault(),vt(e))}async function $t(e,a){a.preventDefault(),a.stopPropagation();try{const n=await(await G(`/auth/open?siteId=${encodeURIComponent(e.id)}`,{method:"POST"})).json();n.ok?m(n.message||"已打开登录页面","success"):m(n.message||"打开失败","error")}catch(i){m("请求失败: "+(i instanceof Error?i.message:String(i)),"error")}}Tt(()=>{ct(),Mt(qt).url.searchParams.get("openAdd")==="1"&&(o(j,""),o(y,""),o(S,!0),nt("/plugins",{replaceState:!0}))}),ht(()=>t(F),()=>{o(C,t(F).trim().toLowerCase())}),ht(()=>(t(C),t($)),()=>{o(N,t(C)?t($).filter(e=>e.id.toLowerCase().includes(t(C))||e.listUrlPattern.toLowerCase().includes(t(C))):t($))}),Lt(),Qt();var ut=pe();Ht("1nj0iur",e=>{Nt(()=>{zt.title=`插件 - ${Kt}`})});var W=rt(ut),pt=l(W),X=l(pt),ft=l(X),mt=c(l(ft),2),J=l(mt);ot(J),O(J,"spellcheck",!1);var Y=c(J,2),xt=l(Y);Gt(xt,{size:16,"aria-hidden":"true"}),s(Y),s(mt),s(ft),s(X);var _t=c(X,2),Dt=l(_t);{var Ct=e=>{var a=te();u(e,a)},St=e=>{var a=ee(),i=l(a,!0);s(a),lt(()=>Q(i,t(z))),u(e,a)},Ut=e=>{var a=ae(),i=c(l(a));K(5),s(a),D("click",i,dt),u(e,a)},At=e=>{var a=se();u(e,a)},It=e=>{var a=ce(),i=l(a),n=c(l(i));Bt(n,5,()=>t(N),_=>_.id,(_,r)=>{var g=de(),A=l(g),Z=l(A),x=l(Z),I=l(x,!0);s(x);var M=c(x,2);{var tt=d=>{var v=re();u(d,v)};q(M,d=>{t(r),b(()=>t(r).kind==="source")&&d(tt)})}s(Z),s(A);var w=c(A),P=l(w),R=l(P,!0);s(P),s(w);var k=c(w),T=l(k);{var B=d=>{var v=le();D("click",v,at=>$t(t(r),at)),u(d,v)},H=d=>{var v=oe();u(d,v)};q(T,d=>{t(r),b(()=>t(r).hasAuth)?d(B):d(H,-1)})}s(k);var E=c(k),L=l(E);{var et=d=>{var v=ie();D("click",v,at=>Pt(t(r),at)),u(d,v)},f=d=>{var v=ne();u(d,v)};q(L,d=>{t(r),b(()=>t(r).hasAuth)?d(et):d(f,-1)})}s(E),s(g),lt(()=>{O(g,"aria-label",`打开插件 ${t(r),b(()=>t(r).id)??""}`),Q(I,(t(r),b(()=>t(r).id))),O(P,"title",(t(r),b(()=>t(r).listUrlPattern))),Q(R,(t(r),b(()=>t(r).listUrlPattern)))}),D("click",g,()=>vt(t(r))),D("keydown",g,d=>kt(t(r),d)),u(_,g)}),s(n),s(i),s(a),u(e,a)};q(Dt,e=>{t(V)?e(Ct):t(z)?e(St,1):(t($),b(()=>t($).length===0)?e(Ut,2):(t(N),b(()=>t(N).length===0)?e(At,3):e(It,-1)))})}s(_t),s(pt),s(W);var Rt=c(W,2);Vt(Rt,{get open(){return t(S)},onOpenChange:yt,children:(e,a)=>{Zt(e,{children:(i,n)=>{var _=ue(),r=rt(_);Wt(r,{class:"modal-overlay"});var g=c(r,2);Xt(g,{class:"modal","aria-describedby":void 0,children:(A,Z)=>{var x=ve(),I=rt(x),M=l(I);Yt(M,{class:"modal-title",children:(f,d)=>{K();var v=st("添加插件");u(f,v)},$$slots:{default:!0}});var tt=c(M,2);bt(tt,{class:"modal-close","aria-label":"关闭",children:(f,d)=>{K();var v=st("✕");u(f,v)},$$slots:{default:!0}}),s(I);var w=c(I,2),P=c(l(w),2),R=c(l(P),2);ot(R),O(R,"spellcheck",!1),s(P);var k=c(P,2),T=c(l(k),2);ot(T),O(T,"spellcheck",!1),s(k);var B=c(k,2),H=l(B),E=l(H);bt(E,{class:"btn-cancel",get disabled(){return t(U)},type:"button",children:(f,d)=>{K();var v=st("取消");u(f,v)},$$slots:{default:!0}});var L=c(E,2),et=l(L,!0);s(L),s(H),s(B),s(w),lt(()=>{L.disabled=t(U),Q(et,t(U)?"创建中…":"创建并打开编辑")}),Jt("submit",w,wt),it(R,()=>t(y),f=>o(y,f)),it(T,()=>t(j),f=>o(j,f)),u(A,x)},$$slots:{default:!0}}),u(i,_)},$$slots:{default:!0}})},$$slots:{default:!0}}),it(J,()=>t(F),e=>o(F,e)),D("click",Y,dt),u(gt,ut),Ot()}Ft(["click","keydown"]);export{Ie as component};