diff options
Diffstat (limited to 'src/pages/pkg')
| -rw-r--r-- | src/pages/pkg/corvos@[version].ts | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/pages/pkg/corvos@[version].ts b/src/pages/pkg/corvos@[version].ts new file mode 100644 index 0000000..6dcb65a --- /dev/null +++ b/src/pages/pkg/corvos@[version].ts | |||
| @@ -0,0 +1,35 @@ | |||
| 1 | import * as zip from "@zip-js/zip-js"; | ||
| 2 | import { Page, PipelineStageError } from "corvos"; | ||
| 3 | import { binaryLoader } from "corvos/core/loaders/binary.ts"; | ||
| 4 | |||
| 5 | import { strapiLoader } from "$/deps/strapi.tsx"; | ||
| 6 | import { releaseStrapiSchema } from "$/schemas/releases.ts"; | ||
| 7 | import site from "@/corvos.config.ts"; | ||
| 8 | |||
| 9 | export const pages = site.$.pageGenerator(async function* () { | ||
| 10 | for await (const item of strapiLoader.loadCollection("corvos-releases", releaseStrapiSchema, { | ||
| 11 | "populate[0]": "files", | ||
| 12 | "sort[0]": "date:desc", | ||
| 13 | })) { | ||
| 14 | if (item instanceof PipelineStageError) { | ||
| 15 | yield item; | ||
| 16 | continue; | ||
| 17 | } | ||
| 18 | |||
| 19 | const res = await binaryLoader(new URL(item.files.url)); | ||
| 20 | const reader = new zip.ZipReader(new zip.Uint8ArrayReader(res.content)); | ||
| 21 | |||
| 22 | for await (const entry of reader.getEntriesGenerator()) { | ||
| 23 | if (entry.directory) { | ||
| 24 | continue; | ||
| 25 | } | ||
| 26 | |||
| 27 | yield new Page( | ||
| 28 | ".", | ||
| 29 | new Uint8Array(await entry.arrayBuffer()), | ||
| 30 | { version: item.version }, | ||
| 31 | `/pkg/corvos@${item.version}/${entry.filename}`, | ||
| 32 | ); | ||
| 33 | } | ||
| 34 | } | ||
| 35 | }); | ||
