FR
Traduction bêta

@core / blocks

1.0.0 ▾
vérifiéMIT
GitHub

Blocs de page : 15 sections accessibles (hero, tarifs, FAQ avec JSON-LD…), éditeur d'admin et registre extensible

Code25 fichiersContexte~681 tokensanalyse réussie

L’arborescence exacte qui sera injectée, après .genpmignore. Épinglée à

src/lib/blocks/media.tslecture seule · a255d6d
// Resolución de imágenes de @core/media para los bloques, en una sola consulta.
import { and, eq, inArray } from 'drizzle-orm';
import type { Executor } from '../db/index.ts';
import { getDb } from '../db/index.ts';
import { imgAttrs, media } from '../media/index.ts';
import type { ResolvedImage } from '../rich-text/index.ts';
import { type BlockInstance, type BlockRegistry, collectMediaIds } from './define.ts';

/** `const images = await loadBlockMedia(page.blocks, blocks)` → `<RenderBlocks media={images} />`. */
export async function loadBlockMedia(
  blocks: BlockInstance[] | null | undefined,
  registry: BlockRegistry,
  opts: { sizes?: string; db?: Executor } = {},
): Promise<Record<string, ResolvedImage>> {
  const ids = collectMediaIds(blocks ?? [], registry);
  if (!ids.length) return {};
  const rows = await (opts.db ?? getDb())
    .select()
    .from(media)
    .where(and(inArray(media.id, ids), eq(media.status, 'ready')));
  const out: Record<string, ResolvedImage> = {};
  for (const m of rows) {
    const a = imgAttrs(m, { sizes: opts.sizes ?? '(min-width: 1024px) 50vw, 100vw' });
    out[m.id] = { src: a.src, alt: a.alt, ...(a.width && { width: a.width }), ...(a.height && { height: a.height }), ...(a.srcSet && { srcSet: a.srcSet }), ...(a.sizes && { sizes: a.sizes }) };
  }
  return out;
}

Signaler @core/blocks

Connectez-vous avec GitHub pour signaler un paquet.