@opennextjs/cloudflare 0.0.0-9758666 → 0.0.0-9aff12e

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Deploy Next.js apps to Cloudflare!
4
4
 
5
- OpenNext for Cloudflare is Cloudflare specific adapter that enables deployment of Next.js applications to Cloudflare.
5
+ [OpenNext for Cloudflare](https://opennext.js.org/cloudflare) is Cloudflare specific adapter that enables deployment of Next.js applications to Cloudflare.
6
6
 
7
7
  ## Getting started
8
8
 
@@ -13,7 +13,13 @@ You can use [`create-next-app`](https://nextjs.org/docs/pages/api-reference/cli/
13
13
  - add the following `devDependencies` to the `package.json`:
14
14
 
15
15
  ```bash
16
+ npm add -D wrangler@latest @opennextjs/cloudflare
17
+ # or
16
18
  pnpm add -D wrangler@latest @opennextjs/cloudflare
19
+ # or
20
+ yarn add -D wrangler@latest @opennextjs/cloudflare
21
+ # or
22
+ bun add -D wrangler@latest @opennextjs/cloudflare
17
23
  ```
18
24
 
19
25
  - add a `wrangler.toml` at the root of your project
@@ -27,9 +33,34 @@ You can use [`create-next-app`](https://nextjs.org/docs/pages/api-reference/cli/
27
33
  compatibility_flags = ["nodejs_compat"]
28
34
 
29
35
  # Use the new Workers + Assets to host the static frontend files
30
- experimental_assets = { directory = ".worker-next/assets", binding = "ASSETS" }
36
+ assets = { directory = ".worker-next/assets", binding = "ASSETS" }
31
37
  ```
32
38
 
39
+ You can enable Incremental Static Regeneration ([ISR](https://nextjs.org/docs/app/building-your-application/data-fetching/incremental-static-regeneration)) by adding a KV binding named `NEXT_CACHE_WORKERS_KV` to your `wrangler.toml`:
40
+
41
+ - Create the binding
42
+
43
+ ```bash
44
+ npx wrangler kv namespace create NEXT_CACHE_WORKERS_KV
45
+ # or
46
+ pnpm wrangler kv namespace create NEXT_CACHE_WORKERS_KV
47
+ # or
48
+ yarn wrangler kv namespace create NEXT_CACHE_WORKERS_KV
49
+ # or
50
+ bun wrangler kv namespace create NEXT_CACHE_WORKERS_KV
51
+ ```
52
+
53
+ - Paste the snippet to your `wrangler.toml`:
54
+
55
+ ```bash
56
+ [[kv_namespaces]]
57
+ binding = "NEXT_CACHE_WORKERS_KV"
58
+ id = "..."
59
+ ```
60
+
61
+ > [!WARNING]
62
+ > The current support for ISR is limited.
63
+
33
64
  ## Local development
34
65
 
35
66
  - you can use the regular `next` CLI to start the Next.js dev server:
@@ -41,13 +72,25 @@ Run the following commands to preview the production build of your application l
41
72
  - build the app and adapt it for Cloudflare
42
73
 
43
74
  ```bash
44
- pnpx cloudflare
75
+ npx cloudflare
76
+ # or
77
+ pnpm cloudflare
78
+ # or
79
+ yarn cloudflare
80
+ # or
81
+ bun cloudflare
45
82
  ```
46
83
 
47
84
  - Preview the app in Wrangler
48
85
 
49
86
  ```bash
87
+ npx wrangler dev
88
+ # or
50
89
  pnpm wrangler dev
90
+ # or
91
+ yarn wrangler dev
92
+ # or
93
+ bun wrangler dev
51
94
  ```
52
95
 
53
96
  ## Deploy your app
@@ -57,9 +100,11 @@ Deploy your application to production with the following:
57
100
  - build the app and adapt it for Cloudflare
58
101
 
59
102
  ```bash
60
- pnpx cloudflare
61
- ```
62
-
63
- ```bash
64
- pnpm wrangler deploy
103
+ npx cloudflare && npx wrangler deploy
104
+ # or
105
+ pnpm cloudflare && pnpm wrangler deploy
106
+ # or
107
+ yarn cloudflare && yarn wrangler deploy
108
+ # or
109
+ bun cloudflare && bun wrangler deploy
65
110
  ```
@@ -0,0 +1,32 @@
1
+ // src/api/get-cloudflare-context.ts
2
+ import "server-only";
3
+ var cloudflareContextSymbol = Symbol.for("__cloudflare-context__");
4
+ async function getCloudflareContext() {
5
+ const global = globalThis;
6
+ const cloudflareContext = global[cloudflareContextSymbol];
7
+ if (!cloudflareContext) {
8
+ return getCloudflareContextInNextDev();
9
+ }
10
+ return cloudflareContext;
11
+ }
12
+ var cloudflareContextInNextDevSymbol = Symbol.for("__next-dev/cloudflare-context__");
13
+ async function getCloudflareContextInNextDev() {
14
+ const global = globalThis;
15
+ if (!global[cloudflareContextInNextDevSymbol]) {
16
+ const { getPlatformProxy } = await import(
17
+ /* webpackIgnore: true */
18
+ `${"__wrangler".replaceAll("_", "")}`
19
+ );
20
+ const { env, cf, ctx } = await getPlatformProxy();
21
+ global[cloudflareContextInNextDevSymbol] = {
22
+ env,
23
+ cf,
24
+ ctx
25
+ };
26
+ }
27
+ return global[cloudflareContextInNextDevSymbol];
28
+ }
29
+
30
+ export {
31
+ getCloudflareContext
32
+ };
@@ -0,0 +1,26 @@
1
+ declare global {
2
+ interface CloudflareEnv {
3
+ }
4
+ }
5
+ type CloudflareContext<CfProperties extends Record<string, unknown> = IncomingRequestCfProperties, Context = ExecutionContext> = {
6
+ /**
7
+ * the worker's [bindings](https://developers.cloudflare.com/workers/runtime-apis/bindings/)
8
+ */
9
+ env: CloudflareEnv;
10
+ /**
11
+ * the request's [cf properties](https://developers.cloudflare.com/workers/runtime-apis/request/#the-cf-property-requestinitcfproperties)
12
+ */
13
+ cf: CfProperties;
14
+ /**
15
+ * the current [execution context](https://developers.cloudflare.com/workers/runtime-apis/context)
16
+ */
17
+ ctx: Context;
18
+ };
19
+ /**
20
+ * Utility to get the current Cloudflare context
21
+ *
22
+ * @returns the cloudflare context
23
+ */
24
+ declare function getCloudflareContext<CfProperties extends Record<string, unknown> = IncomingRequestCfProperties, Context = ExecutionContext>(): Promise<CloudflareContext<CfProperties, Context>>;
25
+
26
+ export { type CloudflareContext, getCloudflareContext };
@@ -0,0 +1,6 @@
1
+ import {
2
+ getCloudflareContext
3
+ } from "./chunk-VTBEIZPQ.mjs";
4
+ export {
5
+ getCloudflareContext
6
+ };
@@ -0,0 +1 @@
1
+ export { CloudflareContext, getCloudflareContext } from './get-cloudflare-context.mjs';
@@ -0,0 +1,6 @@
1
+ import {
2
+ getCloudflareContext
3
+ } from "./chunk-VTBEIZPQ.mjs";
4
+ export {
5
+ getCloudflareContext
6
+ };
@@ -1,6 +1,6 @@
1
1
  import "./chunk-UJCSKKID.mjs";
2
2
 
3
- // src/cache-handler.ts
3
+ // src/cli/cache-handler.ts
4
4
  var CfWorkersKvCacheHandler = class _CfWorkersKvCacheHandler {
5
5
  constructor(ctx) {
6
6
  this.ctx = ctx;
@@ -18,7 +18,7 @@ var CfWorkersKvCacheHandler = class _CfWorkersKvCacheHandler {
18
18
  return null;
19
19
  }
20
20
  }
21
- async set(key, entry, ctx) {
21
+ async set(key, entry, _ctx) {
22
22
  if (_CfWorkersKvCacheHandler.maybeKVNamespace === void 0) {
23
23
  return;
24
24
  }