docs: better documentation for runtime (#8190)

This commit is contained in:
Emanuele Stoppa 2023-08-23 16:00:56 +01:00 committed by GitHub
parent ee06c4fe5c
commit 0be8d9bfa9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 60 additions and 5 deletions

View file

@ -0,0 +1,5 @@
---
'@astrojs/cloudflare': patch
---
Improve documentation and export the types needed to type the `runtime` object.

View file

@ -75,12 +75,59 @@ It's then possible to update the preview script in your `package.json` to `"prev
You can access all the Cloudflare bindings and environment variables from Astro components and API routes through `Astro.locals`.
```js
If you're inside an `.astro` file, you access the runtime using the `Astro.locals` global:
```astro
const env = Astro.locals.runtime.env;
```
From an endpoint:
```js
// src/pages/api/someFile.js
export function get(context) {
const runtime = context.locals.runtime;
return new Response("Some body");
}
```
Depending on your adapter mode (advanced = worker, directory = pages), the runtime object will look a little different due to differences in the Cloudflare API.
If you're using the `advanced` runtime, you can type the `runtime` object as following:
```ts
// src/env.d.ts
/// <reference types="astro/client" />
import type { AdvancedRuntime } from "@astrojs/cloudflare"
declare namespace App {
interface Locals extends AdvancedRuntime {
user: {
name: string;
surname: string;
};
}
}
```
If you're using the `directory` runtime, you can type the `runtime` object as following:
```ts
// src/env.d.ts
/// <reference types="astro/client" />
import type { DirectoryRuntime } from "@astrojs/cloudflare"
declare namespace App {
interface Locals extends DirectoryRuntime {
user: {
name: string;
surname: string;
};
}
}
```
## Environment Variables
See Cloudflare's documentation for [working with environment variables](https://developers.cloudflare.com/pages/platform/functions/bindings/#environment-variables).

View file

@ -7,6 +7,9 @@ import { sep } from 'node:path';
import { fileURLToPath, pathToFileURL } from 'node:url';
import glob from 'tiny-glob';
export type { AdvancedRuntime } from './server.advanced';
export type { DirectoryRuntime } from './server.directory';
type Options = {
mode: 'directory' | 'advanced';
};

View file

@ -12,7 +12,7 @@ type Env = {
name: string;
};
interface WorkerRuntime {
export interface AdvancedRuntime {
runtime: {
waitUntil: (promise: Promise<any>) => void;
env: Env;
@ -57,7 +57,7 @@ export function createExports(manifest: SSRManifest) {
},
});
const locals: WorkerRuntime = {
const locals: AdvancedRuntime = {
runtime: {
waitUntil: (promise: Promise<any>) => {
context.waitUntil(promise);

View file

@ -7,7 +7,7 @@ if (!isNode) {
process.env = getProcessEnvProxy();
}
interface FunctionRuntime {
export interface DirectoryRuntime {
runtime: {
waitUntil: (promise: Promise<any>) => void;
env: EventContext<unknown, string, unknown>['env'];
@ -54,7 +54,7 @@ export function createExports(manifest: SSRManifest) {
cf: request.cf,
});
const locals: FunctionRuntime = {
const locals: DirectoryRuntime = {
runtime: {
waitUntil: (promise: Promise<any>) => {
context.waitUntil(promise);