diff --git a/examples/hattip-app/pages/+config.ts b/examples/hattip-app/pages/+config.ts
index c94eeca..49bbdb5 100644
--- a/examples/hattip-app/pages/+config.ts
+++ b/examples/hattip-app/pages/+config.ts
@@ -1,4 +1,5 @@
import vikeSolid from "vike-solid/config";
+import vikeCloudflare from "vike-cloudflare/config";
import type { Config } from "vike/types";
import Head from "../layouts/HeadDefault.js";
import Layout from "../layouts/LayoutDefault.js";
@@ -9,5 +10,9 @@ export default {
Head,
title: "My Vike App",
stream: "web",
- extends: vikeSolid,
+ server: {
+ kind: "hattip",
+ entry: "hattip-entry.ts",
+ },
+ extends: [vikeSolid, vikeCloudflare],
} satisfies Config;
diff --git a/examples/hattip-app/vite.config.ts b/examples/hattip-app/vite.config.ts
index 9a97856..affcc6e 100644
--- a/examples/hattip-app/vite.config.ts
+++ b/examples/hattip-app/vite.config.ts
@@ -1,5 +1,4 @@
import { hattip } from "@hattip/vite";
-import { pages } from "vike-cloudflare";
import vikeSolid from "vike-solid/vite";
import vike from "vike/plugin";
import { defineConfig } from "vite";
@@ -8,15 +7,5 @@ export default defineConfig({
build: {
target: "es2022",
},
- plugins: [
- hattip(),
- vike({}),
- vikeSolid(),
- pages({
- server: {
- kind: "hattip",
- entry: "hattip-entry.ts",
- },
- }),
- ],
+ plugins: [hattip(), vike(), vikeSolid()],
});
diff --git a/examples/hono-app/pages/+config.ts b/examples/hono-app/pages/+config.ts
index fdb9049..ee95fa0 100644
--- a/examples/hono-app/pages/+config.ts
+++ b/examples/hono-app/pages/+config.ts
@@ -1,4 +1,5 @@
import vikeSolid from "vike-solid/config";
+import vikeCloudflare from "vike-cloudflare/config";
import type { Config } from "vike/types";
import Head from "../layouts/HeadDefault.js";
import Layout from "../layouts/LayoutDefault.js";
@@ -9,5 +10,9 @@ export default {
Head,
//
title: "My Vike App",
- extends: vikeSolid,
+ server: {
+ kind: "hono",
+ entry: "hono-entry.ts",
+ },
+ extends: [vikeSolid, vikeCloudflare],
} satisfies Config;
diff --git a/examples/hono-app/vite.config.ts b/examples/hono-app/vite.config.ts
index 5df1e8f..79a7ca1 100644
--- a/examples/hono-app/vite.config.ts
+++ b/examples/hono-app/vite.config.ts
@@ -1,6 +1,5 @@
import devServer from "@hono/vite-dev-server";
import adapter from "@hono/vite-dev-server/cloudflare";
-import { pages } from "vike-cloudflare";
import vikeSolid from "vike-solid/vite";
import vike from "vike/plugin";
import { defineConfig } from "vite";
@@ -26,13 +25,7 @@ export default defineConfig({
injectClientScript: false,
}),
- vike({}),
+ vike(),
vikeSolid(),
- pages({
- server: {
- kind: "hono",
- entry: "hono-entry.ts",
- },
- }),
],
});
diff --git a/examples/vike-app/pages/+config.ts b/examples/vike-app/pages/+config.ts
index fdb9049..96b745d 100644
--- a/examples/vike-app/pages/+config.ts
+++ b/examples/vike-app/pages/+config.ts
@@ -1,4 +1,5 @@
import vikeSolid from "vike-solid/config";
+import vikeCloudflare from "vike-cloudflare/config";
import type { Config } from "vike/types";
import Head from "../layouts/HeadDefault.js";
import Layout from "../layouts/LayoutDefault.js";
@@ -9,5 +10,5 @@ export default {
Head,
//
title: "My Vike App",
- extends: vikeSolid,
+ extends: [vikeSolid, vikeCloudflare],
} satisfies Config;
diff --git a/examples/vike-app/vite.config.ts b/examples/vike-app/vite.config.ts
index ff3d962..0f4ede2 100644
--- a/examples/vike-app/vite.config.ts
+++ b/examples/vike-app/vite.config.ts
@@ -1,4 +1,3 @@
-import { pages } from "vike-cloudflare";
import vikeSolid from "vike-solid/vite";
import vike from "vike/plugin";
import { defineConfig } from "vite";
@@ -7,5 +6,5 @@ export default defineConfig({
build: {
target: "es2022",
},
- plugins: [vike({}), vikeSolid(), pages()],
+ plugins: [vike(), vikeSolid()],
});
diff --git a/packages/vike-cloudflare/package.json b/packages/vike-cloudflare/package.json
index 12ec035..032f16a 100644
--- a/packages/vike-cloudflare/package.json
+++ b/packages/vike-cloudflare/package.json
@@ -44,6 +44,7 @@
"types": "./dist/index.d.ts",
"default": "./dist/index.js"
},
+ "./config": "./dist/config.js",
"./types": {
"types": "./vike.d.ts"
}
diff --git a/packages/vike-cloudflare/src/config.ts b/packages/vike-cloudflare/src/config.ts
new file mode 100644
index 0000000..b6a4d9b
--- /dev/null
+++ b/packages/vike-cloudflare/src/config.ts
@@ -0,0 +1,31 @@
+export { config as default };
+
+import { pages as plugin, type VikeCloudflarePagesOptions } from "./index";
+import type { Config } from "vike/types";
+
+const config = {
+ name: "vike-cloudflare",
+ require: {
+ vike: ">=0.4.219",
+ },
+ vite: {
+ plugins: [plugin()],
+ },
+ /* TODO/now
+ prerender: {
+ value: null,
+ disableAutoFullBuild: true
+ },
+ */
+ meta: {
+ server: { env: { config: true }, global: true },
+ },
+} satisfies Config;
+
+declare global {
+ namespace Vike {
+ interface Config {
+ server?: VikeCloudflarePagesOptions["server"];
+ }
+ }
+}
diff --git a/packages/vike-cloudflare/src/index.ts b/packages/vike-cloudflare/src/index.ts
index b2033a3..79cf948 100644
--- a/packages/vike-cloudflare/src/index.ts
+++ b/packages/vike-cloudflare/src/index.ts
@@ -6,6 +6,20 @@ import { normalizePath, type Plugin, type ResolvedConfig } from "vite";
import hattipAsset from "../assets/hattip.js?raw";
import honoAsset from "../assets/hono.js?raw";
import vikeAsset from "../assets/vike.js?raw";
+import type { Config } from "vike/types";
+
+declare module "vite" {
+ interface UserConfig {
+ // TODO/now:
+ // - Re-use declaration merging done by Vike
+ // - Extend ResolvedConfig ?
+ vike?: {
+ global: {
+ config: Config;
+ };
+ };
+ }
+}
const NAME = "vike-cloudflare";
const WORKER_JS_NAME = "_worker.js";
@@ -36,25 +50,17 @@ function getAsset(kind: SupportedServers | undefined) {
}
}
-export const pages = (options?: VikeCloudflarePagesOptions): Plugin[] => {
+export const pages = (): any => {
const virtualEntryId = "virtual:vike-cloudflare-entry";
const virtualServerId = "virtual:vike-cloudflare-server";
const resolvedVirtualServerId = `\0${virtualServerId}`;
let resolvedConfig: ResolvedConfig;
let shouldPrerender = false;
+ let options: VikeCloudflarePagesOptions;
return [
{
name: `${NAME}:disableAutoFullBuild`,
- // @ts-ignore
- config() {
- return {
- // TODO/next-major-release: remove this and require >=vike@0.4.219
- vitePluginSsr: {
- disableAutoFullBuild: "prerender",
- },
- };
- },
},
{
name: NAME,
@@ -101,9 +107,8 @@ export const pages = (options?: VikeCloudflarePagesOptions): Plugin[] => {
},
configResolved: async (config) => {
resolvedConfig = config;
- // TODO/next-major-release: remove this and require >=vike@0.4.219
- // biome-ignore lint/suspicious/noExplicitAny:
- shouldPrerender = !!(await (config as any).configVikePromise).prerender;
+ options = { server: config.vike!.global.config.server };
+ shouldPrerender = !!config.vike!.global.config.prerender;
},
options(inputOptions) {
assert(
@@ -196,7 +201,7 @@ export default handler;
},
},
},
- ];
+ ] satisfies Plugin[];
};
async function symlinkOrCopy(target: string, path: string) {
diff --git a/packages/vike-cloudflare/tsup.config.ts b/packages/vike-cloudflare/tsup.config.ts
index 40152bc..c7a0ebc 100644
--- a/packages/vike-cloudflare/tsup.config.ts
+++ b/packages/vike-cloudflare/tsup.config.ts
@@ -5,7 +5,7 @@ export default defineConfig({
target: "node18",
format: "esm",
dts: true,
- entry: ["src/index.ts"],
+ entry: ["src/index.ts", "src/config.ts"],
clean: true,
esbuildPlugins: [RawPlugin()],
});