@clize/clize 0.33.0 → 0.35.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/cli.js +5 -3
- package/dist/cli.js.map +1 -1
- package/dist/core/install.js +20 -5
- package/dist/core/install.js.map +1 -1
- package/dist/core/seo-classify.js +41 -1
- package/dist/core/seo-classify.js.map +1 -1
- package/dist/core/seo-pages.js +222 -0
- package/dist/core/seo-pages.js.map +1 -0
- package/dist/core/seo.js +216 -22
- package/dist/core/seo.js.map +1 -1
- package/dist/core/site-manifest.js +355 -0
- package/dist/core/site-manifest.js.map +1 -0
- package/dist/core/sites.js +211 -8
- package/dist/core/sites.js.map +1 -1
- package/dist/i18n/zh.js +4 -1
- package/dist/i18n/zh.js.map +1 -1
- package/dist/lib/cloudflare.js +6 -2
- package/dist/lib/cloudflare.js.map +1 -1
- package/dist/providers/seo/gsc.js +26 -0
- package/dist/providers/seo/gsc.js.map +1 -1
- package/package.json +1 -1
- package/skills/clize-seo/SKILL.md +312 -187
|
@@ -0,0 +1,355 @@
|
|
|
1
|
+
import { CloudflareError } from "../lib/cloudflare.js";
|
|
2
|
+
export const SITE_MANIFEST_VERSION = 1;
|
|
3
|
+
export const manifestKey = (host) => `::manifest::${host.toLowerCase()}`;
|
|
4
|
+
export const cfgKey = (host) => `::cfg::${host.toLowerCase()}`;
|
|
5
|
+
// ───────── 路径纯函数(与 serving worker 里的同名逻辑保持一致) ─────────
|
|
6
|
+
const normPath = (p) => (p.startsWith("/") ? p : "/" + p);
|
|
7
|
+
export const isHtmlPath = (p) => /\.html?$/i.test(p);
|
|
8
|
+
/** 页面的 URL 形:/a/index.html → /a/,/index.html → /,/about.html 原样。 */
|
|
9
|
+
export function pageUrlPath(p) {
|
|
10
|
+
return normPath(p).replace(/\/index\.html?$/i, "/");
|
|
11
|
+
}
|
|
12
|
+
/** 该路径是否进 sitemap / llms.txt / hreflang 族:只看 .html,排除 /404.html 与任一段以 _ 或 . 开头的路径。 */
|
|
13
|
+
export function isIndexablePage(p) {
|
|
14
|
+
const n = normPath(p);
|
|
15
|
+
if (!isHtmlPath(n) || n.toLowerCase() === "/404.html")
|
|
16
|
+
return false;
|
|
17
|
+
return !n
|
|
18
|
+
.split("/")
|
|
19
|
+
.slice(1)
|
|
20
|
+
.some((s) => s.startsWith("_") || s.startsWith("."));
|
|
21
|
+
}
|
|
22
|
+
// ───────── hreflang 族推导 ─────────
|
|
23
|
+
/** ISO 639-1 全表(184 个两字母语言码)。目录名命中它(可带 -Script / -REGION)才当语言目录;
|
|
24
|
+
* /js/ /css/ /img/ /app/ /assets/ 这类天然不在表里。 */
|
|
25
|
+
export const ISO_639_1 = new Set(("aa ab ae af ak am an ar as av ay az ba be bg bh bi bm bn bo br bs ca ce ch co cr cs cu cv cy " +
|
|
26
|
+
"da de dv dz ee el en eo es et eu fa ff fi fj fo fr fy ga gd gl gn gu gv ha he hi ho hr ht hu hy hz " +
|
|
27
|
+
"ia id ie ig ii ik io is it iu ja jv ka kg ki kj kk kl km kn ko kr ks ku kv kw ky la lb lg li ln lo " +
|
|
28
|
+
"lt lu lv mg mh mi mk ml mn mr ms mt my na nb nd ne ng nl nn no nr nv ny oc oj om or os pa pi pl ps " +
|
|
29
|
+
"pt qu rm rn ro ru rw sa sc sd se sg si sk sl sm sn so sq sr ss st su sv sw ta te tg th ti tk tl tn " +
|
|
30
|
+
"to tr ts tt tw ty ug uk ur uz ve vi vo wa wo xh yi yo za zh zu").split(" "));
|
|
31
|
+
/** 目录名 → 规范化 locale 标签;不是语言目录 → null。
|
|
32
|
+
* de → de;pt-br → pt-BR;zh-hant → zh-Hant;es-419 → es-419;js / css / xx → null。 */
|
|
33
|
+
export function localeOfSegment(seg) {
|
|
34
|
+
const m = /^([a-z]{2})(?:-([a-z]{2}|[a-z]{4}|[0-9]{3}))?$/i.exec(seg);
|
|
35
|
+
if (!m)
|
|
36
|
+
return null;
|
|
37
|
+
const lang = m[1].toLowerCase();
|
|
38
|
+
if (!ISO_639_1.has(lang))
|
|
39
|
+
return null;
|
|
40
|
+
const sub = m[2];
|
|
41
|
+
if (!sub)
|
|
42
|
+
return lang;
|
|
43
|
+
if (/^[0-9]{3}$/.test(sub))
|
|
44
|
+
return `${lang}-${sub}`; // UN M.49 区域码(es-419)
|
|
45
|
+
if (sub.length === 2)
|
|
46
|
+
return `${lang}-${sub.toUpperCase()}`; // 地区
|
|
47
|
+
return `${lang}-${sub[0].toUpperCase()}${sub.slice(1).toLowerCase()}`; // 文字(Hant / Hans / Latn)
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* 从全站路径推 hreflang 族。规则(seo-production-ring §4A「范围加一项」):
|
|
51
|
+
* · 只看 .html;首段目录名是 locale(见 localeOfSegment)→ 去掉该段后的路径为 stem;
|
|
52
|
+
* · 同一 stem 出现在 根目录 + ≥1 个语言目录、或 ≥2 个语言目录下,即成一族;
|
|
53
|
+
* · 根目录成员记为 x-default,且在没有显式 /en/ 时同时作 en;没有根成员时 x-default 取 en(有的话)。
|
|
54
|
+
* 返回 { "<stem URL 形>": { "x-default": "/p/", en: "/p/", de: "/de/p/" } };值全是 URL 形(目录形)。
|
|
55
|
+
*/
|
|
56
|
+
export function deriveFamilies(paths) {
|
|
57
|
+
const groups = new Map();
|
|
58
|
+
for (const raw of [...paths].map(normPath).sort()) {
|
|
59
|
+
if (!isIndexablePage(raw))
|
|
60
|
+
continue;
|
|
61
|
+
const segs = raw.split("/"); // ["", "de", "pricing", "index.html"]
|
|
62
|
+
const loc = segs.length > 2 ? localeOfSegment(segs[1]) : null;
|
|
63
|
+
// stem 用 URL 形分组:/pricing/index.html 与 /fr/pricing/index.htm 是同一页的两种语言
|
|
64
|
+
const stem = pageUrlPath(loc ? "/" + segs.slice(2).join("/") : raw);
|
|
65
|
+
let g = groups.get(stem);
|
|
66
|
+
if (!g) {
|
|
67
|
+
g = { locales: new Map() };
|
|
68
|
+
groups.set(stem, g);
|
|
69
|
+
}
|
|
70
|
+
if (loc) {
|
|
71
|
+
if (!g.locales.has(loc))
|
|
72
|
+
g.locales.set(loc, raw); // 同一 locale 两种写法(zh-hant / zh-Hant)→ 先到先得
|
|
73
|
+
}
|
|
74
|
+
else
|
|
75
|
+
g.root = raw;
|
|
76
|
+
}
|
|
77
|
+
const out = {};
|
|
78
|
+
for (const [stem, g] of groups) {
|
|
79
|
+
if (!g.locales.size || g.locales.size + (g.root ? 1 : 0) < 2)
|
|
80
|
+
continue;
|
|
81
|
+
const fam = {};
|
|
82
|
+
for (const [loc, p] of [...g.locales].sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0)))
|
|
83
|
+
fam[loc] = pageUrlPath(p);
|
|
84
|
+
if (g.root) {
|
|
85
|
+
const r = pageUrlPath(g.root);
|
|
86
|
+
if (!fam.en)
|
|
87
|
+
fam.en = r;
|
|
88
|
+
fam["x-default"] = r;
|
|
89
|
+
}
|
|
90
|
+
else if (fam.en)
|
|
91
|
+
fam["x-default"] = fam.en;
|
|
92
|
+
out[stem] = fam;
|
|
93
|
+
}
|
|
94
|
+
return out;
|
|
95
|
+
}
|
|
96
|
+
// ───────── title / description 抽取 ─────────
|
|
97
|
+
const ENTITIES = {
|
|
98
|
+
amp: "&",
|
|
99
|
+
lt: "<",
|
|
100
|
+
gt: ">",
|
|
101
|
+
quot: '"',
|
|
102
|
+
apos: "'",
|
|
103
|
+
nbsp: " ",
|
|
104
|
+
mdash: "—",
|
|
105
|
+
ndash: "–",
|
|
106
|
+
hellip: "…",
|
|
107
|
+
copy: "©",
|
|
108
|
+
};
|
|
109
|
+
function decodeEntities(s) {
|
|
110
|
+
return s.replace(/&(#x[0-9a-f]+|#[0-9]+|[a-z]+);/gi, (m, e) => {
|
|
111
|
+
if (e[0] === "#") {
|
|
112
|
+
const code = e[1] === "x" || e[1] === "X" ? parseInt(e.slice(2), 16) : parseInt(e.slice(1), 10);
|
|
113
|
+
return Number.isFinite(code) && code > 0 && code < 0x110000 ? String.fromCodePoint(code) : m;
|
|
114
|
+
}
|
|
115
|
+
return ENTITIES[e.toLowerCase()] ?? m;
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
const clean = (s, max) => decodeEntities(s).replace(/\s+/g, " ").trim().slice(0, max);
|
|
119
|
+
/** 只扫前 64KB(设计说 4KB 即可;内联 CSS / 脚本堆在 <title> 前面的页不少,放宽不花钱)。 */
|
|
120
|
+
const META_WINDOW = 64 * 1024;
|
|
121
|
+
/** 抽首个 <title> 与 meta[name=description](属性顺序无关);抽不到的键不出现。 */
|
|
122
|
+
export function extractHtmlMeta(html) {
|
|
123
|
+
const head = html.slice(0, META_WINDOW);
|
|
124
|
+
const out = {};
|
|
125
|
+
const t = /<title[^>]*>([\s\S]*?)<\/title>/i.exec(head);
|
|
126
|
+
if (t) {
|
|
127
|
+
const title = clean(t[1], 300);
|
|
128
|
+
if (title)
|
|
129
|
+
out.title = title;
|
|
130
|
+
}
|
|
131
|
+
const metaRe = /<meta\s[^>]*>/gi;
|
|
132
|
+
let m;
|
|
133
|
+
while ((m = metaRe.exec(head))) {
|
|
134
|
+
const tag = m[0];
|
|
135
|
+
if (!/\bname\s*=\s*["']?description["']?(?=[\s/>])/i.test(tag))
|
|
136
|
+
continue;
|
|
137
|
+
const c = /\bcontent\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s"'>]+))/i.exec(tag);
|
|
138
|
+
if (c) {
|
|
139
|
+
const d = clean(c[1] ?? c[2] ?? c[3] ?? "", 500);
|
|
140
|
+
if (d)
|
|
141
|
+
out.description = d;
|
|
142
|
+
}
|
|
143
|
+
break;
|
|
144
|
+
}
|
|
145
|
+
return out;
|
|
146
|
+
}
|
|
147
|
+
/** base64 → 文本(只解前 ~64KB:title / description 都在页头,整页解码对 25MiB 的 HTML 是浪费)。 */
|
|
148
|
+
function base64Head(b64) {
|
|
149
|
+
const cut = b64.slice(0, Math.ceil((META_WINDOW * 4) / 3 / 4) * 4);
|
|
150
|
+
try {
|
|
151
|
+
const bin = atob(cut);
|
|
152
|
+
const bytes = new Uint8Array(bin.length);
|
|
153
|
+
for (let i = 0; i < bin.length; i++)
|
|
154
|
+
bytes[i] = bin.charCodeAt(i);
|
|
155
|
+
return new TextDecoder("utf-8", { fatal: false }).decode(bytes);
|
|
156
|
+
}
|
|
157
|
+
catch {
|
|
158
|
+
return "";
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
/** 一批 deploy 文件里的 HTML → { titles, desc }(desc 只收 /index.html)。 */
|
|
162
|
+
export function extractBatchMeta(files) {
|
|
163
|
+
const titles = {};
|
|
164
|
+
const desc = {};
|
|
165
|
+
for (const f of files) {
|
|
166
|
+
const p = normPath(f.path);
|
|
167
|
+
if (!(isHtmlPath(p) || /^text\/html/i.test(f.ct ?? "")))
|
|
168
|
+
continue;
|
|
169
|
+
const meta = extractHtmlMeta(base64Head(f.base64));
|
|
170
|
+
if (meta.title)
|
|
171
|
+
titles[p] = meta.title;
|
|
172
|
+
if (meta.description && p.toLowerCase() === "/index.html")
|
|
173
|
+
desc[p] = meta.description;
|
|
174
|
+
}
|
|
175
|
+
return { titles, desc };
|
|
176
|
+
}
|
|
177
|
+
// ───────── 清单合并 ─────────
|
|
178
|
+
export function emptyManifest(now) {
|
|
179
|
+
return { v: SITE_MANIFEST_VERSION, updatedAt: now, files: {}, titles: {}, desc: {}, families: {} };
|
|
180
|
+
}
|
|
181
|
+
/** 把 KV 里读到的任意 JSON 收成合法清单形(缺的容器补空);不是清单 → null。 */
|
|
182
|
+
function normalizeManifest(raw) {
|
|
183
|
+
if (!raw || typeof raw !== "object")
|
|
184
|
+
return null;
|
|
185
|
+
const m = raw;
|
|
186
|
+
if (m.v !== SITE_MANIFEST_VERSION)
|
|
187
|
+
return null;
|
|
188
|
+
const obj = (x) => (x && typeof x === "object" && !Array.isArray(x) ? x : {});
|
|
189
|
+
return {
|
|
190
|
+
v: SITE_MANIFEST_VERSION,
|
|
191
|
+
updatedAt: typeof m.updatedAt === "string" ? m.updatedAt : "",
|
|
192
|
+
files: obj(m.files),
|
|
193
|
+
titles: obj(m.titles),
|
|
194
|
+
desc: obj(m.desc),
|
|
195
|
+
families: obj(m.families),
|
|
196
|
+
...(Array.isArray(m.pending) ? { pending: m.pending.filter((p) => typeof p === "string") } : {}),
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* plan 的全量清单 → 新 files(只收 HTML)+ 本次变化页。
|
|
201
|
+
* · hash 不变的页保留旧 mtime;新页 / hash 变化的页 mtime = now;plan 里没有的页删掉。
|
|
202
|
+
* · pending = 新增或 hash 变化的可索引页 ∪ 上次 plan 后没收尾成功而遗留的 pending(仍存在的)。
|
|
203
|
+
*/
|
|
204
|
+
export function mergeManifestFiles(prev, plan, now) {
|
|
205
|
+
const files = {};
|
|
206
|
+
const pending = new Set();
|
|
207
|
+
const prevFiles = prev?.files ?? {};
|
|
208
|
+
for (const f of plan) {
|
|
209
|
+
const p = normPath(f.path);
|
|
210
|
+
if (!isHtmlPath(p))
|
|
211
|
+
continue;
|
|
212
|
+
const old = prevFiles[p];
|
|
213
|
+
const changed = !old || old.hash !== f.hash;
|
|
214
|
+
files[p] = { hash: f.hash, size: f.size, mtime: !changed && old?.mtime ? old.mtime : now };
|
|
215
|
+
if (changed && isIndexablePage(p))
|
|
216
|
+
pending.add(p);
|
|
217
|
+
}
|
|
218
|
+
for (const p of prev?.pending ?? [])
|
|
219
|
+
if (files[p] && isIndexablePage(p))
|
|
220
|
+
pending.add(p);
|
|
221
|
+
return { files, pending: [...pending].sort() };
|
|
222
|
+
}
|
|
223
|
+
// ───────── KV 读写(走控制面的 CF REST API;serving worker 用 binding 读同一命名空间) ─────────
|
|
224
|
+
const kvPath = (ctx, kvId, key) => `/accounts/${ctx.cf.accountId}/storage/kv/namespaces/${kvId}/values/${encodeURIComponent(key)}`;
|
|
225
|
+
/** 取单值(values 端点返回裸文本,不是 CF envelope);键不存在 → null;其他失败照抛。 */
|
|
226
|
+
async function kvGetRaw(ctx, kvId, key) {
|
|
227
|
+
try {
|
|
228
|
+
return await ctx.cf.getRaw(kvPath(ctx, kvId, key));
|
|
229
|
+
}
|
|
230
|
+
catch (e) {
|
|
231
|
+
const status = e instanceof CloudflareError ? e.status : undefined;
|
|
232
|
+
if (status === 404 || (status === undefined && /\b404\b/.test(e instanceof Error ? e.message : String(e))))
|
|
233
|
+
return null;
|
|
234
|
+
throw e;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
async function kvPut(ctx, kvId, key, value) {
|
|
238
|
+
await ctx.cf.request("PUT", `/accounts/${ctx.cf.accountId}/storage/kv/namespaces/${kvId}/bulk`, [{ key, value }]);
|
|
239
|
+
}
|
|
240
|
+
/** 读清单;不存在 / 不是合法 JSON / 版本不认 → null(当作没有);API 失败照抛,由调用方决定是否吞。 */
|
|
241
|
+
export async function readSiteManifest(ctx, kvId, host) {
|
|
242
|
+
const raw = await kvGetRaw(ctx, kvId, manifestKey(host));
|
|
243
|
+
if (!raw)
|
|
244
|
+
return null;
|
|
245
|
+
try {
|
|
246
|
+
return normalizeManifest(JSON.parse(raw));
|
|
247
|
+
}
|
|
248
|
+
catch {
|
|
249
|
+
return null;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
export async function writeSiteManifest(ctx, kvId, host, m) {
|
|
253
|
+
await kvPut(ctx, kvId, manifestKey(host), JSON.stringify(m));
|
|
254
|
+
}
|
|
255
|
+
/** 读 per-host 配置;键不存在 → null;坏 JSON → {}(当空配置,别让一条坏记录卡死 deploy);API 失败照抛。 */
|
|
256
|
+
export async function readSiteCfg(ctx, kvId, host) {
|
|
257
|
+
const raw = await kvGetRaw(ctx, kvId, cfgKey(host));
|
|
258
|
+
if (raw === null)
|
|
259
|
+
return null;
|
|
260
|
+
try {
|
|
261
|
+
const v = JSON.parse(raw);
|
|
262
|
+
return v && typeof v === "object" && !Array.isArray(v) ? v : {};
|
|
263
|
+
}
|
|
264
|
+
catch {
|
|
265
|
+
return {};
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
export async function writeSiteCfg(ctx, kvId, host, cfg) {
|
|
269
|
+
await kvPut(ctx, kvId, cfgKey(host), JSON.stringify(cfg));
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* plan 处理器调用:全量清单 → 读旧清单 → 合并 files / pending → 重算 families → 剪掉消失页的 titles / desc → 写回。
|
|
273
|
+
* 读失败(非 404)也照常重建(丢的只是旧 mtime 与 titles,下一批 deploy 会把 titles 补回来)。
|
|
274
|
+
*/
|
|
275
|
+
export async function updateManifestFromPlan(ctx, kvId, host, plan) {
|
|
276
|
+
const now = new Date().toISOString();
|
|
277
|
+
const prev = await readSiteManifest(ctx, kvId, host).catch(() => null);
|
|
278
|
+
const { files, pending } = mergeManifestFiles(prev, plan, now);
|
|
279
|
+
const keep = (rec) => Object.fromEntries(Object.entries(rec).filter(([p]) => p in files));
|
|
280
|
+
const m = {
|
|
281
|
+
v: SITE_MANIFEST_VERSION,
|
|
282
|
+
updatedAt: now,
|
|
283
|
+
files,
|
|
284
|
+
titles: keep(prev?.titles ?? {}),
|
|
285
|
+
desc: keep(prev?.desc ?? {}),
|
|
286
|
+
families: deriveFamilies(Object.keys(files)),
|
|
287
|
+
...(pending.length ? { pending } : {}),
|
|
288
|
+
};
|
|
289
|
+
await writeSiteManifest(ctx, kvId, host, m);
|
|
290
|
+
return m;
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* /v1/deploy 各批调用:把这批 HTML 的 title / description 合进清单(读-改-写;批次顺序发送,不会互相冲掉)。
|
|
294
|
+
* · 清单缺失(老 CLI 没走 plan)且这批有 HTML → 建一份只含 titles 的清单(files 为空 → serving 侧页索引走 list 兜底,
|
|
295
|
+
* 但 llms.txt / JSON-LD 仍能用上 title);
|
|
296
|
+
* · finalize(收尾批)→ 取走 pending 交给 IndexNow,并从清单里清掉。
|
|
297
|
+
* 返回 pending(非收尾批恒空)。API 失败照抛,调用方吞掉(清单是增强层)。
|
|
298
|
+
*/
|
|
299
|
+
export async function absorbDeployBatch(ctx, kvId, host, files, opts) {
|
|
300
|
+
const now = new Date().toISOString();
|
|
301
|
+
const meta = extractBatchMeta(files);
|
|
302
|
+
const nTitles = Object.keys(meta.titles).length;
|
|
303
|
+
const hasMeta = nTitles > 0 || Object.keys(meta.desc).length > 0;
|
|
304
|
+
let m = await readSiteManifest(ctx, kvId, host);
|
|
305
|
+
const existed = !!m;
|
|
306
|
+
if (!m) {
|
|
307
|
+
if (!hasMeta)
|
|
308
|
+
return { pending: [], titles: 0 };
|
|
309
|
+
m = emptyManifest(now);
|
|
310
|
+
}
|
|
311
|
+
Object.assign(m.titles, meta.titles);
|
|
312
|
+
Object.assign(m.desc, meta.desc);
|
|
313
|
+
const pending = opts.finalize ? (m.pending ?? []) : [];
|
|
314
|
+
if (opts.finalize)
|
|
315
|
+
delete m.pending;
|
|
316
|
+
const dirty = hasMeta || !existed || (opts.finalize && pending.length > 0);
|
|
317
|
+
if (dirty) {
|
|
318
|
+
m.updatedAt = now;
|
|
319
|
+
await writeSiteManifest(ctx, kvId, host, m);
|
|
320
|
+
}
|
|
321
|
+
return { pending, titles: nTitles };
|
|
322
|
+
}
|
|
323
|
+
// ───────── IndexNow ─────────
|
|
324
|
+
/** 每 host 一次性生成的 IndexNow key(32 位 hex;协议要求 8–128 位 [a-zA-Z0-9-]) */
|
|
325
|
+
export function newIndexNowKey() {
|
|
326
|
+
return [...crypto.getRandomValues(new Uint8Array(16))].map((b) => b.toString(16).padStart(2, "0")).join("");
|
|
327
|
+
}
|
|
328
|
+
export const INDEXNOW_ENDPOINT = "https://api.indexnow.org/indexnow";
|
|
329
|
+
/** 协议单次上限 */
|
|
330
|
+
export const INDEXNOW_MAX_URLS = 10_000;
|
|
331
|
+
/**
|
|
332
|
+
* 向 IndexNow 报本次变化的 URL(一次 POST,≤10,000 条)。失败不抛 —— 返回 ok:false + error 让调用方记进 notes:
|
|
333
|
+
* 搜索引擎迟早会从 sitemap 捡到,ping 只是加速,不该反过来让 deploy 失败。
|
|
334
|
+
*/
|
|
335
|
+
export async function pingIndexNow(host, key, urls) {
|
|
336
|
+
const urlList = urls.slice(0, INDEXNOW_MAX_URLS);
|
|
337
|
+
if (!urlList.length)
|
|
338
|
+
return { ok: true, count: 0 };
|
|
339
|
+
try {
|
|
340
|
+
const signal = typeof AbortSignal !== "undefined" && "timeout" in AbortSignal ? AbortSignal.timeout(8000) : undefined;
|
|
341
|
+
const res = await fetch(INDEXNOW_ENDPOINT, {
|
|
342
|
+
method: "POST",
|
|
343
|
+
headers: { "content-type": "application/json; charset=utf-8" },
|
|
344
|
+
body: JSON.stringify({ host, key, keyLocation: `https://${host}/${key}.txt`, urlList }),
|
|
345
|
+
...(signal ? { signal } : {}),
|
|
346
|
+
});
|
|
347
|
+
return res.ok
|
|
348
|
+
? { ok: true, count: urlList.length, status: res.status }
|
|
349
|
+
: { ok: false, count: urlList.length, status: res.status, error: `HTTP ${res.status}` };
|
|
350
|
+
}
|
|
351
|
+
catch (e) {
|
|
352
|
+
return { ok: false, count: urlList.length, error: e instanceof Error ? e.message : String(e) };
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
//# sourceMappingURL=site-manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"site-manifest.js","sourceRoot":"","sources":["../../src/core/site-manifest.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAU,CAAC;AAmChD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,eAAe,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;AACzF,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,UAAU,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;AAE/E,yDAAyD;AAEzD,MAAM,QAAQ,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AAC1E,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAS,EAAW,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAEtE,oEAAoE;AACpE,MAAM,UAAU,WAAW,CAAC,CAAS;IACnC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;AACtD,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,eAAe,CAAC,CAAS;IACvC,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACtB,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,KAAK,WAAW;QAAE,OAAO,KAAK,CAAC;IACpE,OAAO,CAAC,CAAC;SACN,KAAK,CAAC,GAAG,CAAC;SACV,KAAK,CAAC,CAAC,CAAC;SACR,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;AACzD,CAAC;AAED,mCAAmC;AAEnC;gDACgD;AAChD,MAAM,CAAC,MAAM,SAAS,GAAwB,IAAI,GAAG,CACnD,CACE,+FAA+F;IAC/F,qGAAqG;IACrG,qGAAqG;IACrG,qGAAqG;IACrG,qGAAqG;IACrG,gEAAgE,CACjE,CAAC,KAAK,CAAC,GAAG,CAAC,CACb,CAAC;AAEF;oFACoF;AACpF,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,MAAM,CAAC,GAAG,iDAAiD,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACtE,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACpB,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAChC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACtC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACjB,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,IAAI,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC,sBAAsB;IAC3E,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,GAAG,IAAI,IAAI,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,KAAK;IAClE,OAAO,GAAG,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,yBAAyB;AAClG,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,KAAe;IAC5C,MAAM,MAAM,GAAG,IAAI,GAAG,EAA2D,CAAC;IAClF,KAAK,MAAM,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QAClD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;YAAE,SAAS;QACpC,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,sCAAsC;QACnE,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC9D,uEAAuE;QACvE,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACpE,IAAI,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACzB,IAAI,CAAC,CAAC,EAAE,CAAC;YACP,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;YAC3B,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACtB,CAAC;QACD,IAAI,GAAG,EAAE,CAAC;YACR,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,0CAA0C;QAC9F,CAAC;;YAAM,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC;IACtB,CAAC;IACD,MAAM,GAAG,GAA2C,EAAE,CAAC;IACvD,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,MAAM,EAAE,CAAC;QAC/B,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YAAE,SAAS;QACvE,MAAM,GAAG,GAA2B,EAAE,CAAC;QACvC,KAAK,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAAE,GAAG,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QAClH,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;YACX,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC9B,IAAI,CAAC,GAAG,CAAC,EAAE;gBAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;YACxB,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC;aAAM,IAAI,GAAG,CAAC,EAAE;YAAE,GAAG,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;QAC7C,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;IAClB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,6CAA6C;AAE7C,MAAM,QAAQ,GAA2B;IACvC,GAAG,EAAE,GAAG;IACR,EAAE,EAAE,GAAG;IACP,EAAE,EAAE,GAAG;IACP,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,GAAG;IACT,KAAK,EAAE,GAAG;IACV,KAAK,EAAE,GAAG;IACV,MAAM,EAAE,GAAG;IACX,IAAI,EAAE,GAAG;CACV,CAAC;AACF,SAAS,cAAc,CAAC,CAAS;IAC/B,OAAO,CAAC,CAAC,OAAO,CAAC,kCAAkC,EAAE,CAAC,CAAC,EAAE,CAAS,EAAE,EAAE;QACpE,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YACjB,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAChG,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/F,CAAC;QACD,OAAO,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;AACL,CAAC;AACD,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,GAAW,EAAU,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAE9G,+DAA+D;AAC/D,MAAM,WAAW,GAAG,EAAE,GAAG,IAAI,CAAC;AAE9B,6DAA6D;AAC7D,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;IACxC,MAAM,GAAG,GAA6C,EAAE,CAAC;IACzD,MAAM,CAAC,GAAG,kCAAkC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxD,IAAI,CAAC,EAAE,CAAC;QACN,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC/B,IAAI,KAAK;YAAE,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC;IAC/B,CAAC;IACD,MAAM,MAAM,GAAG,iBAAiB,CAAC;IACjC,IAAI,CAAyB,CAAC;IAC9B,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QAC/B,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACjB,IAAI,CAAC,+CAA+C,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,SAAS;QACzE,MAAM,CAAC,GAAG,sDAAsD,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3E,IAAI,CAAC,EAAE,CAAC;YACN,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC;YACjD,IAAI,CAAC;gBAAE,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC;QAC7B,CAAC;QACD,MAAM;IACR,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,8EAA8E;AAC9E,SAAS,UAAU,CAAC,GAAW;IAC7B,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACnE,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;QACtB,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE;YAAE,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAClE,OAAO,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAClE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,gBAAgB,CAAC,KAAsD;IAIrF,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,MAAM,IAAI,GAA2B,EAAE,CAAC;IACxC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC3B,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;YAAE,SAAS;QAClE,MAAM,IAAI,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QACnD,IAAI,IAAI,CAAC,KAAK;YAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;QACvC,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC,WAAW,EAAE,KAAK,aAAa;YAAE,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;IACxF,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AAC1B,CAAC;AAED,2BAA2B;AAE3B,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,OAAO,EAAE,CAAC,EAAE,qBAAqB,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;AACrG,CAAC;AAED,oDAAoD;AACpD,SAAS,iBAAiB,CAAC,GAAY;IACrC,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACjD,MAAM,CAAC,GAAG,GAA4B,CAAC;IACvC,IAAI,CAAC,CAAC,CAAC,KAAK,qBAAqB;QAAE,OAAO,IAAI,CAAC;IAC/C,MAAM,GAAG,GAAG,CAAC,CAAU,EAAyB,EAAE,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,CAA2B,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACzI,OAAO;QACL,CAAC,EAAE,qBAAqB;QACxB,SAAS,EAAE,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE;QAC7D,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;QACnB,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;QACrB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;QACjB,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC;QACzB,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9G,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAChC,IAAyB,EACzB,IAAoD,EACpD,GAAW;IAEX,MAAM,KAAK,GAAiC,EAAE,CAAC;IAC/C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,MAAM,SAAS,GAAG,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;IACpC,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC3B,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;YAAE,SAAS;QAC7B,MAAM,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC;QAC5C,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,OAAO,IAAI,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QAC3F,IAAI,OAAO,IAAI,eAAe,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,OAAO,IAAI,EAAE;QAAE,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,eAAe,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACxF,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;AACjD,CAAC;AAED,gFAAgF;AAEhF,MAAM,MAAM,GAAG,CAAC,GAAY,EAAE,IAAY,EAAE,GAAW,EAAU,EAAE,CACjE,aAAa,GAAG,CAAC,EAAE,CAAC,SAAS,0BAA0B,IAAI,WAAW,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC;AAElG,6DAA6D;AAC7D,KAAK,UAAU,QAAQ,CAAC,GAAY,EAAE,IAAY,EAAE,GAAW;IAC7D,IAAI,CAAC;QACH,OAAO,MAAM,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;IACrD,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,MAAM,GAAG,CAAC,YAAY,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;QACnE,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QACxH,MAAM,CAAC,CAAC;IACV,CAAC;AACH,CAAC;AAED,KAAK,UAAU,KAAK,CAAC,GAAY,EAAE,IAAY,EAAE,GAAW,EAAE,KAAa;IACzE,MAAM,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,aAAa,GAAG,CAAC,EAAE,CAAC,SAAS,0BAA0B,IAAI,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AACpH,CAAC;AAED,kEAAkE;AAClE,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,GAAY,EAAE,IAAY,EAAE,IAAY;IAC7E,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;IACzD,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,IAAI,CAAC;QACH,OAAO,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,GAAY,EAAE,IAAY,EAAE,IAAY,EAAE,CAAe;IAC/F,MAAM,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/D,CAAC;AAED,6EAA6E;AAC7E,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,GAAY,EAAE,IAAY,EAAE,IAAY;IACxE,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IACpD,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC9B,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAY,CAAC;QACrC,OAAO,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,CAAa,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAY,EAAE,IAAY,EAAE,IAAY,EAAE,GAAY;IACvF,MAAM,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,GAAY,EACZ,IAAY,EACZ,IAAY,EACZ,IAAoD;IAEpD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IACvE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;IAC/D,MAAM,IAAI,GAAG,CAAC,GAA2B,EAA0B,EAAE,CACnE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;IACtE,MAAM,CAAC,GAAiB;QACtB,CAAC,EAAE,qBAAqB;QACxB,SAAS,EAAE,GAAG;QACd,KAAK;QACL,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,IAAI,EAAE,CAAC;QAChC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC;QAC5B,QAAQ,EAAE,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5C,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACvC,CAAC;IACF,MAAM,iBAAiB,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC5C,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,GAAY,EACZ,IAAY,EACZ,IAAY,EACZ,KAAsD,EACtD,IAA2B;IAE3B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,IAAI,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACrC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;IAChD,MAAM,OAAO,GAAG,OAAO,GAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IACjE,IAAI,CAAC,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;IACpB,IAAI,CAAC,CAAC,EAAE,CAAC;QACP,IAAI,CAAC,OAAO;YAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QAChD,CAAC,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IACD,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACrC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IACjC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACvD,IAAI,IAAI,CAAC,QAAQ;QAAE,OAAO,CAAC,CAAC,OAAO,CAAC;IACpC,MAAM,KAAK,GAAG,OAAO,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC3E,IAAI,KAAK,EAAE,CAAC;QACV,CAAC,CAAC,SAAS,GAAG,GAAG,CAAC;QAClB,MAAM,iBAAiB,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AACtC,CAAC;AAED,+BAA+B;AAE/B,qEAAqE;AACrE,MAAM,UAAU,cAAc;IAC5B,OAAO,CAAC,GAAG,MAAM,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC9G,CAAC;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG,mCAAmC,CAAC;AACrE,aAAa;AACb,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC;AAExC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,IAAY,EACZ,GAAW,EACX,IAAc;IAEd,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC;IACjD,IAAI,CAAC,OAAO,CAAC,MAAM;QAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IACnD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,OAAO,WAAW,KAAK,WAAW,IAAI,SAAS,IAAI,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACtH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,iBAAiB,EAAE;YACzC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,iCAAiC,EAAE;YAC9D,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,WAAW,IAAI,IAAI,GAAG,MAAM,EAAE,OAAO,EAAE,CAAC;YACvF,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC9B,CAAC,CAAC;QACH,OAAO,GAAG,CAAC,EAAE;YACX,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE;YACzD,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC;IAC5F,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IACjG,CAAC;AACH,CAAC"}
|