JA
ベータ版の翻訳

@core / media

1.1.0 ▾
認証済みMIT
GitHub

メディアライブラリ:署名付き直接アップロード、実ファイル形式の検証、EXIF/GPS 除去、代替テキスト、焦点、srcset

コード13 ファイルコンテキスト約 777 トークンスキャン合格

.genpmignore 適用後に組み込まれる正確なツリーです。固定先:

src/lib/media/adapters/http.ts読み取り専用 · 868490c
// Rutas de subida comunes: POST /uploads y POST /uploads/:id/confirm. `authorize` decide quién puede subir.
import { z } from 'zod';
import { confirmUpload, createUpload, MediaError } from '../index.ts';

export type Authorize = (req: Request) => Promise<{ userId: string } | null>;

const Body = z.object({ filename: z.string().min(1).max(200), mime: z.string().max(100), size: z.number().int().positive(), folder: z.string().optional(), alt: z.string().optional() });

const fail = (e: unknown) => {
  if (e instanceof MediaError) return Response.json({ error: e.code, message: e.message }, { status: e.code === 'not_found' ? 404 : 400 });
  if (e instanceof z.ZodError) return Response.json({ error: 'invalid_input' }, { status: 400 });
  throw e;
};

export async function handleCreateUpload(req: Request, authorize: Authorize): Promise<Response> {
  const who = await authorize(req);
  if (!who) return Response.json({ error: 'forbidden' }, { status: 403 });
  try {
    const body = Body.parse(await req.json());
    const { media, upload } = await createUpload({ ...body, uploadedBy: who.userId });
    return Response.json({ id: media.id, upload }, { status: 201 });
  } catch (e) {
    return fail(e);
  }
}

export async function handleConfirmUpload(req: Request, id: string, authorize: Authorize): Promise<Response> {
  if (!(await authorize(req))) return Response.json({ error: 'forbidden' }, { status: 403 });
  try {
    return Response.json(await confirmUpload(id));
  } catch (e) {
    return fail(e);
  }
}

@core/media を報告

パッケージを報告するには GitHub でログインしてください。

GitHub で続ける