summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/integrations/cloudflare/src/entrypoints/image-endpoint.ts17
-rw-r--r--packages/integrations/cloudflare/test/fixtures/compile-image-service/astro.config.mjs9
-rw-r--r--packages/integrations/cloudflare/test/fixtures/compile-image-service/package.json9
-rw-r--r--packages/integrations/cloudflare/test/fixtures/compile-image-service/src/content/blog/post/index.md5
-rw-r--r--packages/integrations/cloudflare/test/fixtures/compile-image-service/src/content/blog/post/placeholder.jpgbin0 -> 38690 bytes
-rw-r--r--packages/integrations/cloudflare/test/fixtures/compile-image-service/src/content/config.ts23
-rw-r--r--packages/integrations/cloudflare/test/fixtures/compile-image-service/src/env.d.ts2
-rw-r--r--packages/integrations/cloudflare/test/fixtures/compile-image-service/src/pages/blog/[...slug].astro35
8 files changed, 98 insertions, 2 deletions
diff --git a/packages/integrations/cloudflare/src/entrypoints/image-endpoint.ts b/packages/integrations/cloudflare/src/entrypoints/image-endpoint.ts
index ab51f42f2..dbc1e1f5a 100644
--- a/packages/integrations/cloudflare/src/entrypoints/image-endpoint.ts
+++ b/packages/integrations/cloudflare/src/entrypoints/image-endpoint.ts
@@ -1,2 +1,15 @@
-// NOTE: this file is empty on purpose
-// it allows use to offer `imageService: 'compile'`
+import type { APIRoute } from 'astro';
+
+export const prerender = false;
+
+export const GET: APIRoute = (ctx) => {
+ const href = ctx.url.searchParams.get('href');
+ if (!href) {
+ return new Response("Missing 'href' query parameter", {
+ status: 400,
+ statusText: "Missing 'href' query parameter",
+ });
+ }
+
+ return fetch(new URL(href, ctx.url.origin));
+};
diff --git a/packages/integrations/cloudflare/test/fixtures/compile-image-service/astro.config.mjs b/packages/integrations/cloudflare/test/fixtures/compile-image-service/astro.config.mjs
new file mode 100644
index 000000000..7c569595e
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/compile-image-service/astro.config.mjs
@@ -0,0 +1,9 @@
+import cloudflare from '@astrojs/cloudflare';
+import { defineConfig } from 'astro/config';
+
+export default defineConfig({
+ adapter: cloudflare({
+ imageService: 'compile',
+ }),
+ output: 'hybrid',
+});
diff --git a/packages/integrations/cloudflare/test/fixtures/compile-image-service/package.json b/packages/integrations/cloudflare/test/fixtures/compile-image-service/package.json
new file mode 100644
index 000000000..6e12fff65
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/compile-image-service/package.json
@@ -0,0 +1,9 @@
+{
+ "name": "@test/astro-cloudflare-compile-image-service",
+ "version": "0.0.0",
+ "private": true,
+ "dependencies": {
+ "@astrojs/cloudflare": "workspace:*",
+ "astro": "^4.3.5"
+ }
+}
diff --git a/packages/integrations/cloudflare/test/fixtures/compile-image-service/src/content/blog/post/index.md b/packages/integrations/cloudflare/test/fixtures/compile-image-service/src/content/blog/post/index.md
new file mode 100644
index 000000000..01654f3ea
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/compile-image-service/src/content/blog/post/index.md
@@ -0,0 +1,5 @@
+---
+image: './placeholder.jpg'
+---
+
+![placeholder](./placeholder.jpg)
diff --git a/packages/integrations/cloudflare/test/fixtures/compile-image-service/src/content/blog/post/placeholder.jpg b/packages/integrations/cloudflare/test/fixtures/compile-image-service/src/content/blog/post/placeholder.jpg
new file mode 100644
index 000000000..f4fc88e29
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/compile-image-service/src/content/blog/post/placeholder.jpg
Binary files differ
diff --git a/packages/integrations/cloudflare/test/fixtures/compile-image-service/src/content/config.ts b/packages/integrations/cloudflare/test/fixtures/compile-image-service/src/content/config.ts
new file mode 100644
index 000000000..ce06042f6
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/compile-image-service/src/content/config.ts
@@ -0,0 +1,23 @@
+import type { ImageMetadata } from 'astro';
+import { defineCollection, z } from 'astro:content';
+
+const blog = defineCollection({
+ schema: ({ image }) =>
+ z.object({
+ image: z
+ .string()
+ .regex(/^https:.*/)
+ .transform(
+ (url) =>
+ ({
+ src: url,
+ width: 1200,
+ height: 630,
+ format: 'jpeg',
+ }) satisfies ImageMetadata
+ )
+ .or(image()),
+ }),
+});
+
+export const collections = { blog };
diff --git a/packages/integrations/cloudflare/test/fixtures/compile-image-service/src/env.d.ts b/packages/integrations/cloudflare/test/fixtures/compile-image-service/src/env.d.ts
new file mode 100644
index 000000000..c13bd73c7
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/compile-image-service/src/env.d.ts
@@ -0,0 +1,2 @@
+/// <reference path="../.astro/types.d.ts" />
+/// <reference types="astro/client" /> \ No newline at end of file
diff --git a/packages/integrations/cloudflare/test/fixtures/compile-image-service/src/pages/blog/[...slug].astro b/packages/integrations/cloudflare/test/fixtures/compile-image-service/src/pages/blog/[...slug].astro
new file mode 100644
index 000000000..82f3ce6a2
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/compile-image-service/src/pages/blog/[...slug].astro
@@ -0,0 +1,35 @@
+---
+import { Image } from "astro:assets";
+import { getEntry, type CollectionEntry } from "astro:content";
+
+export const prerender = false;
+
+type Props = CollectionEntry<"blog">;
+
+// biome-ignore lint/style/noNonNullAssertion: <explanation>
+const post = await getEntry("blog", Astro.params.slug!);
+if (!post) return Astro.rewrite("/404");
+
+const { Content } = await post.render();
+
+---
+
+<html lang="en">
+ <head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width" />
+ <meta name="generator" content={Astro.generator} />
+ <title>Document</title>
+ </head>
+ <body>
+ <div class="aspect-video w-full overflow-hidden flex items-end rounded-lg">
+ <Image
+ class="aspect-[4/3] object-cover object-left w-full"
+ src={post.data.image}
+ alt=""
+ />
+ </div>
+
+ <Content />
+ </body>
+</html>