- 重写 README.md,添加在线体验、API 文档、部署指南、技术栈等 - 添加 MIT LICENSE - 添加 CONTRIBUTING.md 贡献指南 - 添加 GitHub Issue/PR 模板 - 完善 .gitignore,防止原始图片和敏感文件误提交 - 从 git 中移除 25 个原始图片文件(.png/.jpg/非序号 webp) - 项目结构迁移:functions/ -> src/,根目录静态文件 -> public/ - 添加 wrangler.toml 与 package.json 配置
37 lines
1.3 KiB
JavaScript
37 lines
1.3 KiB
JavaScript
import { buildAssetUrl, detectVariant, getVariantPayload, loadManifest, pickRandom } from '../lib/background.js';
|
|
|
|
/** @param {Request} request @param {{ ASSETS?: { fetch(input: RequestInfo, init?: RequestInit): Promise<Response> } }} env */
|
|
export async function handleRandomGet(request, env) {
|
|
const url = new URL(request.url);
|
|
const format = (url.searchParams.get('format') || 'redirect').toLowerCase();
|
|
const manifest = await loadManifest(request, env);
|
|
const variant = detectVariant(request);
|
|
const { folder, images } = getVariantPayload(manifest, variant);
|
|
|
|
if (!images.length) {
|
|
return Response.json(
|
|
{ error: 'no images available', variant, folder },
|
|
{ status: 404, headers: { 'Cache-Control': 'no-store, max-age=0', 'Access-Control-Allow-Origin': '*' } },
|
|
);
|
|
}
|
|
|
|
const filename = pickRandom(images);
|
|
const assetUrl = buildAssetUrl(request, folder, filename);
|
|
|
|
if (format === 'json') {
|
|
return Response.json(
|
|
{ variant, folder, filename, url: assetUrl, count: images.length },
|
|
{ headers: { 'Cache-Control': 'no-store, max-age=0', 'Access-Control-Allow-Origin': '*' } },
|
|
);
|
|
}
|
|
|
|
return new Response(null, {
|
|
status: 302,
|
|
headers: {
|
|
Location: assetUrl,
|
|
'Cache-Control': 'no-store, max-age=0',
|
|
'Access-Control-Allow-Origin': '*',
|
|
},
|
|
});
|
|
}
|