import * as zip from "@zip-js/zip-js"; import { Page, PipelineStageError } from "corvos"; import { binaryLoader } from "corvos/core/loaders/binary.ts"; import { strapiLoader } from "$/deps/strapi.tsx"; import { releaseStrapiSchema } from "$/schemas/releases.ts"; import site from "@/corvos.config.ts"; export const pages = site.$.pageGenerator(async function* () { for await (const item of strapiLoader.loadCollection("corvos-releases", releaseStrapiSchema, { "populate[0]": "files", "sort[0]": "date:desc", })) { if (item instanceof PipelineStageError) { yield item; continue; } const res = await binaryLoader(new URL(item.files.url)); const reader = new zip.ZipReader(new zip.Uint8ArrayReader(res.content)); for await (const entry of reader.getEntriesGenerator()) { if (entry.directory) { continue; } yield new Page( ".", new Uint8Array(await entry.arrayBuffer()), { version: item.version }, `/pkg/corvos@${item.version}/${entry.filename}`, ); } } });