alchemy 2.0.0-beta.47 → 2.0.0-beta.48
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/bin/exec.js.map +1 -1
- package/lib/AWS/Lambda/BucketEventSource.d.ts +1 -1
- package/lib/AWS/Lambda/BucketEventSource.d.ts.map +1 -1
- package/lib/AWS/Lambda/EventBridgeEventSource.d.ts +1 -1
- package/lib/AWS/Lambda/EventBridgeEventSource.d.ts.map +1 -1
- package/lib/AWS/Lambda/QueueEventSource.d.ts +1 -1
- package/lib/AWS/Lambda/QueueEventSource.d.ts.map +1 -1
- package/lib/AWS/Lambda/StreamEventSource.d.ts +1 -1
- package/lib/AWS/Lambda/StreamEventSource.d.ts.map +1 -1
- package/lib/AWS/Lambda/TableEventSource.d.ts +1 -1
- package/lib/AWS/Lambda/TableEventSource.d.ts.map +1 -1
- package/lib/AWS/Lambda/TopicEventSource.d.ts +1 -1
- package/lib/AWS/Lambda/TopicEventSource.d.ts.map +1 -1
- package/lib/Cli/commands/cloudflare.d.ts +4 -1
- package/lib/Cli/commands/cloudflare.d.ts.map +1 -1
- package/lib/Cli/commands/cloudflare.js +274 -1
- package/lib/Cli/commands/cloudflare.js.map +1 -1
- package/lib/Cloudflare/AiGateway/AiGateway.d.ts.map +1 -1
- package/lib/Cloudflare/AiGateway/AiGateway.js +2 -1
- package/lib/Cloudflare/AiGateway/AiGateway.js.map +1 -1
- package/lib/Cloudflare/ApiToken/AccountApiToken.d.ts +40 -2
- package/lib/Cloudflare/ApiToken/AccountApiToken.d.ts.map +1 -1
- package/lib/Cloudflare/ApiToken/AccountApiToken.js +49 -6
- package/lib/Cloudflare/ApiToken/AccountApiToken.js.map +1 -1
- package/lib/Cloudflare/ApiToken/Common.d.ts +26 -3
- package/lib/Cloudflare/ApiToken/Common.d.ts.map +1 -1
- package/lib/Cloudflare/ApiToken/Common.js +8 -0
- package/lib/Cloudflare/ApiToken/Common.js.map +1 -1
- package/lib/Cloudflare/ApiToken/UserApiToken.d.ts +38 -2
- package/lib/Cloudflare/ApiToken/UserApiToken.d.ts.map +1 -1
- package/lib/Cloudflare/ApiToken/UserApiToken.js +47 -6
- package/lib/Cloudflare/ApiToken/UserApiToken.js.map +1 -1
- package/lib/Cloudflare/Browser/Browser.d.ts +121 -0
- package/lib/Cloudflare/Browser/Browser.d.ts.map +1 -0
- package/lib/Cloudflare/{BrowserRendering/BrowserRendering.js → Browser/Browser.js} +19 -26
- package/lib/Cloudflare/Browser/Browser.js.map +1 -0
- package/lib/Cloudflare/Browser/BrowserBinding.d.ts +55 -0
- package/lib/Cloudflare/Browser/BrowserBinding.d.ts.map +1 -0
- package/lib/Cloudflare/{BrowserRendering/BrowserRenderingBinding.js → Browser/BrowserBinding.js} +11 -11
- package/lib/Cloudflare/Browser/BrowserBinding.js.map +1 -0
- package/lib/Cloudflare/Browser/index.d.ts +3 -0
- package/lib/Cloudflare/Browser/index.d.ts.map +1 -0
- package/lib/Cloudflare/Browser/index.js +3 -0
- package/lib/Cloudflare/Browser/index.js.map +1 -0
- package/lib/Cloudflare/Container/ContainerBinding.d.ts +2 -1
- package/lib/Cloudflare/Container/ContainerBinding.d.ts.map +1 -1
- package/lib/Cloudflare/D1/D1Database.d.ts.map +1 -1
- package/lib/Cloudflare/D1/D1Database.js +2 -1
- package/lib/Cloudflare/D1/D1Database.js.map +1 -1
- package/lib/Cloudflare/Email/EmailRouting.d.ts +1 -1
- package/lib/Cloudflare/Email/EmailRouting.d.ts.map +1 -1
- package/lib/Cloudflare/Email/EmailRouting.js +1 -1
- package/lib/Cloudflare/Email/EmailRouting.js.map +1 -1
- package/lib/Cloudflare/Email/EmailRule.d.ts +1 -1
- package/lib/Cloudflare/Email/EmailRule.d.ts.map +1 -1
- package/lib/Cloudflare/Email/EmailRule.js +1 -1
- package/lib/Cloudflare/Email/EmailRule.js.map +1 -1
- package/lib/Cloudflare/Images/Images.d.ts +32 -23
- package/lib/Cloudflare/Images/Images.d.ts.map +1 -1
- package/lib/Cloudflare/Images/Images.js +10 -13
- package/lib/Cloudflare/Images/Images.js.map +1 -1
- package/lib/Cloudflare/Providers.d.ts.map +1 -1
- package/lib/Cloudflare/Providers.js +10 -3
- package/lib/Cloudflare/Providers.js.map +1 -1
- package/lib/Cloudflare/R2/R2Bucket.d.ts +1 -1
- package/lib/Cloudflare/R2/R2Bucket.d.ts.map +1 -1
- package/lib/Cloudflare/R2/R2Bucket.js +13 -7
- package/lib/Cloudflare/R2/R2Bucket.js.map +1 -1
- package/lib/Cloudflare/RateLimit/RateLimit.d.ts +132 -0
- package/lib/Cloudflare/RateLimit/RateLimit.d.ts.map +1 -0
- package/lib/Cloudflare/RateLimit/RateLimit.js +80 -0
- package/lib/Cloudflare/RateLimit/RateLimit.js.map +1 -0
- package/lib/Cloudflare/RateLimit/RateLimitBinding.d.ts +30 -0
- package/lib/Cloudflare/RateLimit/RateLimitBinding.d.ts.map +1 -0
- package/lib/Cloudflare/RateLimit/RateLimitBinding.js +50 -0
- package/lib/Cloudflare/RateLimit/RateLimitBinding.js.map +1 -0
- package/lib/Cloudflare/RateLimit/index.d.ts +3 -0
- package/lib/Cloudflare/RateLimit/index.d.ts.map +1 -0
- package/lib/Cloudflare/RateLimit/index.js +3 -0
- package/lib/Cloudflare/RateLimit/index.js.map +1 -0
- package/lib/Cloudflare/SecretsStore/Secret.d.ts +2 -1
- package/lib/Cloudflare/SecretsStore/Secret.d.ts.map +1 -1
- package/lib/Cloudflare/SecretsStore/Secret.js +7 -4
- package/lib/Cloudflare/SecretsStore/Secret.js.map +1 -1
- package/lib/Cloudflare/Tunnel/Tunnel.d.ts +27 -0
- package/lib/Cloudflare/Tunnel/Tunnel.d.ts.map +1 -1
- package/lib/Cloudflare/Tunnel/Tunnel.js +27 -0
- package/lib/Cloudflare/Tunnel/Tunnel.js.map +1 -1
- package/lib/Cloudflare/Tunnel/TunnelBinding.d.ts +48 -0
- package/lib/Cloudflare/Tunnel/TunnelBinding.d.ts.map +1 -0
- package/lib/Cloudflare/Tunnel/TunnelBinding.js +56 -0
- package/lib/Cloudflare/Tunnel/TunnelBinding.js.map +1 -0
- package/lib/Cloudflare/Tunnel/TunnelRead.d.ts +83 -0
- package/lib/Cloudflare/Tunnel/TunnelRead.d.ts.map +1 -0
- package/lib/Cloudflare/Tunnel/TunnelRead.js +79 -0
- package/lib/Cloudflare/Tunnel/TunnelRead.js.map +1 -0
- package/lib/Cloudflare/Tunnel/TunnelReadWrite.d.ts +70 -0
- package/lib/Cloudflare/Tunnel/TunnelReadWrite.d.ts.map +1 -0
- package/lib/Cloudflare/Tunnel/TunnelReadWrite.js +63 -0
- package/lib/Cloudflare/Tunnel/TunnelReadWrite.js.map +1 -0
- package/lib/Cloudflare/Tunnel/TunnelWrite.d.ts +92 -0
- package/lib/Cloudflare/Tunnel/TunnelWrite.d.ts.map +1 -0
- package/lib/Cloudflare/Tunnel/TunnelWrite.js +88 -0
- package/lib/Cloudflare/Tunnel/TunnelWrite.js.map +1 -0
- package/lib/Cloudflare/Tunnel/index.d.ts +4 -0
- package/lib/Cloudflare/Tunnel/index.d.ts.map +1 -1
- package/lib/Cloudflare/Tunnel/index.js +4 -0
- package/lib/Cloudflare/Tunnel/index.js.map +1 -1
- package/lib/Cloudflare/Vectorize/VectorizeIndex.js +1 -0
- package/lib/Cloudflare/Vectorize/VectorizeIndex.js.map +1 -1
- package/lib/Cloudflare/VpcService/VpcService.d.ts +1 -1
- package/lib/Cloudflare/VpcService/VpcService.d.ts.map +1 -1
- package/lib/Cloudflare/VpcService/VpcService.js.map +1 -1
- package/lib/Cloudflare/Workers/DynamicWorkerLoader.d.ts +119 -11
- package/lib/Cloudflare/Workers/DynamicWorkerLoader.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/DynamicWorkerLoader.js +88 -9
- package/lib/Cloudflare/Workers/DynamicWorkerLoader.js.map +1 -1
- package/lib/Cloudflare/Workers/InferEnv.d.ts +1 -1
- package/lib/Cloudflare/Workers/InferEnv.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/LocalWorkerProvider.js +2 -0
- package/lib/Cloudflare/Workers/LocalWorkerProvider.js.map +1 -1
- package/lib/Cloudflare/Workers/WorkerAsyncBindings.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/WorkerAsyncBindings.js +18 -2
- package/lib/Cloudflare/Workers/WorkerAsyncBindings.js.map +1 -1
- package/lib/Cloudflare/Workers/WorkerBinding.d.ts +5 -3
- package/lib/Cloudflare/Workers/WorkerBinding.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/WorkerBinding.js +1 -1
- package/lib/Cloudflare/Workers/WorkerBinding.js.map +1 -1
- package/lib/Cloudflare/Zaraz/ZarazConfig.d.ts +1 -1
- package/lib/Cloudflare/Zaraz/ZarazConfig.d.ts.map +1 -1
- package/lib/Cloudflare/Zaraz/ZarazConfig.js +1 -1
- package/lib/Cloudflare/Zaraz/ZarazConfig.js.map +1 -1
- package/lib/Cloudflare/Zone/Zone.d.ts +170 -0
- package/lib/Cloudflare/Zone/Zone.d.ts.map +1 -0
- package/lib/Cloudflare/Zone/Zone.js +180 -0
- package/lib/Cloudflare/Zone/Zone.js.map +1 -0
- package/lib/Cloudflare/Zone/index.d.ts +3 -0
- package/lib/Cloudflare/Zone/index.d.ts.map +1 -0
- package/lib/Cloudflare/Zone/index.js +3 -0
- package/lib/Cloudflare/Zone/index.js.map +1 -0
- package/lib/Cloudflare/Zone/lookup.d.ts +33 -0
- package/lib/Cloudflare/Zone/lookup.d.ts.map +1 -0
- package/lib/Cloudflare/{Zone.js → Zone/lookup.js} +2 -2
- package/lib/Cloudflare/Zone/lookup.js.map +1 -0
- package/lib/Cloudflare/index.d.ts +3 -1
- package/lib/Cloudflare/index.d.ts.map +1 -1
- package/lib/Cloudflare/index.js +3 -1
- package/lib/Cloudflare/index.js.map +1 -1
- package/lib/Platform.d.ts +5 -5
- package/lib/Platform.d.ts.map +1 -1
- package/lib/Platform.js.map +1 -1
- package/lib/RemovalPolicy.js +2 -2
- package/lib/RemovalPolicy.js.map +1 -1
- package/lib/Resource.d.ts +14 -1
- package/lib/Resource.d.ts.map +1 -1
- package/lib/Resource.js +3 -2
- package/lib/Resource.js.map +1 -1
- package/lib/tsconfig.test.tsbuildinfo +1 -1
- package/package.json +7 -7
- package/src/Cli/commands/cloudflare.ts +394 -1
- package/src/Cloudflare/AiGateway/AiGateway.ts +2 -1
- package/src/Cloudflare/ApiToken/AccountApiToken.ts +60 -7
- package/src/Cloudflare/ApiToken/Common.ts +32 -3
- package/src/Cloudflare/ApiToken/UserApiToken.ts +58 -7
- package/src/Cloudflare/Browser/Browser.ts +140 -0
- package/src/Cloudflare/Browser/BrowserBinding.ts +128 -0
- package/src/Cloudflare/Browser/index.ts +11 -0
- package/src/Cloudflare/D1/D1Database.ts +6 -2
- package/src/Cloudflare/Email/EmailRouting.ts +1 -1
- package/src/Cloudflare/Email/EmailRule.ts +6 -6
- package/src/Cloudflare/Images/Images.ts +40 -27
- package/src/Cloudflare/Providers.ts +15 -3
- package/src/Cloudflare/R2/R2Bucket.ts +17 -9
- package/src/Cloudflare/RateLimit/RateLimit.ts +160 -0
- package/src/Cloudflare/RateLimit/RateLimitBinding.ts +90 -0
- package/src/Cloudflare/RateLimit/index.ts +2 -0
- package/src/Cloudflare/SecretsStore/Secret.ts +12 -6
- package/src/Cloudflare/Tunnel/Tunnel.ts +27 -0
- package/src/Cloudflare/Tunnel/TunnelBinding.ts +114 -0
- package/src/Cloudflare/Tunnel/TunnelRead.ts +168 -0
- package/src/Cloudflare/Tunnel/TunnelReadWrite.ts +88 -0
- package/src/Cloudflare/Tunnel/TunnelWrite.ts +194 -0
- package/src/Cloudflare/Tunnel/index.ts +4 -0
- package/src/Cloudflare/Vectorize/VectorizeIndex.ts +2 -1
- package/src/Cloudflare/VpcService/VpcService.ts +4 -2
- package/src/Cloudflare/Workers/DynamicWorkerLoader.ts +139 -13
- package/src/Cloudflare/Workers/InferEnv.ts +19 -15
- package/src/Cloudflare/Workers/LocalWorkerProvider.ts +13 -2
- package/src/Cloudflare/Workers/WorkerAsyncBindings.ts +16 -2
- package/src/Cloudflare/Workers/WorkerBinding.ts +6 -2
- package/src/Cloudflare/Zaraz/ZarazConfig.ts +1 -1
- package/src/Cloudflare/Zone/Zone.ts +349 -0
- package/src/Cloudflare/Zone/index.ts +2 -0
- package/src/Cloudflare/{Zone.ts → Zone/lookup.ts} +16 -3
- package/src/Cloudflare/index.ts +3 -1
- package/src/Platform.ts +8 -12
- package/src/RemovalPolicy.ts +2 -2
- package/src/Resource.ts +18 -1
- package/lib/Cloudflare/BrowserRendering/BrowserRendering.d.ts +0 -116
- package/lib/Cloudflare/BrowserRendering/BrowserRendering.d.ts.map +0 -1
- package/lib/Cloudflare/BrowserRendering/BrowserRendering.js.map +0 -1
- package/lib/Cloudflare/BrowserRendering/BrowserRenderingBinding.d.ts +0 -55
- package/lib/Cloudflare/BrowserRendering/BrowserRenderingBinding.d.ts.map +0 -1
- package/lib/Cloudflare/BrowserRendering/BrowserRenderingBinding.js.map +0 -1
- package/lib/Cloudflare/BrowserRendering/index.d.ts +0 -3
- package/lib/Cloudflare/BrowserRendering/index.d.ts.map +0 -1
- package/lib/Cloudflare/BrowserRendering/index.js +0 -3
- package/lib/Cloudflare/BrowserRendering/index.js.map +0 -1
- package/lib/Cloudflare/Zone.d.ts +0 -14
- package/lib/Cloudflare/Zone.d.ts.map +0 -1
- package/lib/Cloudflare/Zone.js.map +0 -1
- package/src/Cloudflare/BrowserRendering/BrowserRendering.ts +0 -132
- package/src/Cloudflare/BrowserRendering/BrowserRenderingBinding.ts +0 -137
- package/src/Cloudflare/BrowserRendering/index.ts +0 -11
package/src/Resource.ts
CHANGED
|
@@ -135,6 +135,20 @@ export type Resource<
|
|
|
135
135
|
[attr in keyof Attributes]-?: Output.Output<Attributes[attr], never>;
|
|
136
136
|
};
|
|
137
137
|
|
|
138
|
+
export interface ResourceOptions {
|
|
139
|
+
/**
|
|
140
|
+
* Default removal policy for this resource type when the caller has not
|
|
141
|
+
* explicitly provided one via `RemovalPolicy` / `destroy()` / `retain()`.
|
|
142
|
+
*
|
|
143
|
+
* Useful for resources that wrap unrecoverable real-world identifiers
|
|
144
|
+
* (DNS zones, customer accounts, etc.) where the safe default is to
|
|
145
|
+
* leave the cloud object alone on stack destroy.
|
|
146
|
+
*
|
|
147
|
+
* @default "destroy"
|
|
148
|
+
*/
|
|
149
|
+
defaultRemovalPolicy?: RemovalPolicy["Service"];
|
|
150
|
+
}
|
|
151
|
+
|
|
138
152
|
/**
|
|
139
153
|
* Creates a resource constructor for a concrete resource type.
|
|
140
154
|
*
|
|
@@ -145,7 +159,9 @@ export type Resource<
|
|
|
145
159
|
*/
|
|
146
160
|
export function Resource<R extends ResourceLike>(
|
|
147
161
|
type: R["Type"],
|
|
162
|
+
options?: ResourceOptions,
|
|
148
163
|
): ResourceClass<R> {
|
|
164
|
+
const defaultRemovalPolicy = options?.defaultRemovalPolicy ?? "destroy";
|
|
149
165
|
type Props = Input<R["Props"]>;
|
|
150
166
|
const self = Self<R>(type);
|
|
151
167
|
const constructor = (
|
|
@@ -228,7 +244,7 @@ export function Resource<R extends ResourceLike>(
|
|
|
228
244
|
Props: props,
|
|
229
245
|
Provider: ProviderTag as Provider<any>,
|
|
230
246
|
RemovalPolicy: yield* Effect.serviceOption(RemovalPolicy).pipe(
|
|
231
|
-
Effect.map(Option.getOrElse(() =>
|
|
247
|
+
Effect.map(Option.getOrElse(() => defaultRemovalPolicy)),
|
|
232
248
|
),
|
|
233
249
|
bind,
|
|
234
250
|
toString(this: typeof target) {
|
|
@@ -285,6 +301,7 @@ export function Resource<R extends ResourceLike>(
|
|
|
285
301
|
options?: { stage?: string; stack?: string },
|
|
286
302
|
): Effect.Effect<R> =>
|
|
287
303
|
Effect.succeed(Output.of(makeRef<R>(id, options)) as unknown as R),
|
|
304
|
+
|
|
288
305
|
Type: type,
|
|
289
306
|
Provider: ProviderTag,
|
|
290
307
|
Self: self,
|
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
import * as Effect from "effect/Effect";
|
|
2
|
-
import { BrowserRenderingBinding } from "./BrowserRenderingBinding.ts";
|
|
3
|
-
type BrowserRenderingTypeId = typeof BrowserRenderingTypeId;
|
|
4
|
-
declare const BrowserRenderingTypeId: "Cloudflare.BrowserRendering";
|
|
5
|
-
export type BrowserRenderingProps = {
|
|
6
|
-
/**
|
|
7
|
-
* Binding name used when `Cloudflare.BrowserRendering.bind(browser)` attaches
|
|
8
|
-
* Browser Rendering from inside a Worker init phase. When Browser Rendering
|
|
9
|
-
* is passed through `Worker({ bindings: { ... } })`, the object key remains
|
|
10
|
-
* the binding name.
|
|
11
|
-
*
|
|
12
|
-
* @default "BROWSER"
|
|
13
|
-
*/
|
|
14
|
-
name?: string;
|
|
15
|
-
};
|
|
16
|
-
/**
|
|
17
|
-
* Marker for a Cloudflare Browser Rendering binding.
|
|
18
|
-
*
|
|
19
|
-
* Browser Rendering bindings are configured directly on Workers and do not
|
|
20
|
-
* have a standalone provisioning API. The Worker provider sees this object in
|
|
21
|
-
* `bindings: { ... }` and emits the corresponding `{ type: "browser" }`
|
|
22
|
-
* metadata binding to the script.
|
|
23
|
-
*/
|
|
24
|
-
export type BrowserRendering = {
|
|
25
|
-
kind: BrowserRenderingTypeId;
|
|
26
|
-
name: string;
|
|
27
|
-
};
|
|
28
|
-
export declare const isBrowserRendering: (value: unknown) => value is BrowserRendering;
|
|
29
|
-
/**
|
|
30
|
-
* A Cloudflare Browser Rendering binding for launching headless browser
|
|
31
|
-
* sessions from Workers via `@cloudflare/puppeteer`.
|
|
32
|
-
*
|
|
33
|
-
* @binding
|
|
34
|
-
*
|
|
35
|
-
* @section Effect-style Worker (recommended)
|
|
36
|
-
* @example Render a page title with managed browser cleanup
|
|
37
|
-
* ```typescript
|
|
38
|
-
* import puppeteer from "@cloudflare/puppeteer";
|
|
39
|
-
* import * as Effect from "effect/Effect";
|
|
40
|
-
*
|
|
41
|
-
* const Browser = Cloudflare.BrowserRendering({ name: "BROWSER" });
|
|
42
|
-
*
|
|
43
|
-
* Cloudflare.Worker(
|
|
44
|
-
* "BrowserWorker",
|
|
45
|
-
* { main: import.meta.filename },
|
|
46
|
-
* Effect.gen(function* () {
|
|
47
|
-
* const browserRendering = yield* Cloudflare.BrowserRendering.bind(
|
|
48
|
-
* yield* Browser,
|
|
49
|
-
* );
|
|
50
|
-
*
|
|
51
|
-
* return {
|
|
52
|
-
* fetch: browserRendering.withBrowser(puppeteer, (browser) =>
|
|
53
|
-
* Effect.gen(function* () {
|
|
54
|
-
* const page = yield* Effect.tryPromise(() => browser.newPage());
|
|
55
|
-
* yield* Effect.tryPromise(() => page.goto("https://example.com"));
|
|
56
|
-
* const title = yield* Effect.tryPromise(() => page.title());
|
|
57
|
-
* return Response.json({ title });
|
|
58
|
-
* }),
|
|
59
|
-
* ),
|
|
60
|
-
* };
|
|
61
|
-
* }).pipe(Effect.provide(Cloudflare.BrowserRenderingBindingLive)),
|
|
62
|
-
* );
|
|
63
|
-
* ```
|
|
64
|
-
*
|
|
65
|
-
* @section Declaring Browser Rendering
|
|
66
|
-
* @example
|
|
67
|
-
* ```typescript
|
|
68
|
-
* const Browser = yield* Cloudflare.BrowserRendering({ name: "BROWSER" });
|
|
69
|
-
* ```
|
|
70
|
-
*
|
|
71
|
-
* @section Worker binding metadata
|
|
72
|
-
* @example
|
|
73
|
-
* ```typescript
|
|
74
|
-
* export const Worker = Cloudflare.Worker("Worker", {
|
|
75
|
-
* main: "./src/worker.ts",
|
|
76
|
-
* bindings: {
|
|
77
|
-
* BROWSER: Cloudflare.BrowserRendering(),
|
|
78
|
-
* },
|
|
79
|
-
* });
|
|
80
|
-
*
|
|
81
|
-
* export type WorkerEnv = Cloudflare.InferEnv<typeof Worker>;
|
|
82
|
-
* // { BROWSER: Fetcher }
|
|
83
|
-
* ```
|
|
84
|
-
*
|
|
85
|
-
* @example Async-style worker with the raw runtime binding
|
|
86
|
-
* ```typescript
|
|
87
|
-
* import puppeteer from "@cloudflare/puppeteer";
|
|
88
|
-
* import type { WorkerEnv } from "../alchemy.run.ts";
|
|
89
|
-
*
|
|
90
|
-
* export default {
|
|
91
|
-
* async fetch(request: Request, env: WorkerEnv) {
|
|
92
|
-
* const browser = await puppeteer.launch(env.BROWSER);
|
|
93
|
-
* const page = await browser.newPage();
|
|
94
|
-
* await page.goto("https://example.com");
|
|
95
|
-
* const screenshot = await page.screenshot();
|
|
96
|
-
* await browser.close();
|
|
97
|
-
*
|
|
98
|
-
* return new Response(screenshot, {
|
|
99
|
-
* headers: { "content-type": "image/png" },
|
|
100
|
-
* });
|
|
101
|
-
* },
|
|
102
|
-
* };
|
|
103
|
-
* ```
|
|
104
|
-
*
|
|
105
|
-
* @see https://developers.cloudflare.com/browser-rendering/workers-binding-api/
|
|
106
|
-
*/
|
|
107
|
-
export declare const BrowserRendering: {
|
|
108
|
-
(props?: BrowserRenderingProps): Effect.Effect<BrowserRendering>;
|
|
109
|
-
/**
|
|
110
|
-
* Bind Browser Rendering to the surrounding Worker, returning a small client
|
|
111
|
-
* with access to the native Workers runtime binding.
|
|
112
|
-
*/
|
|
113
|
-
bind: typeof BrowserRenderingBinding.bind;
|
|
114
|
-
};
|
|
115
|
-
export {};
|
|
116
|
-
//# sourceMappingURL=BrowserRendering.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"BrowserRendering.d.ts","sourceRoot":"","sources":["../../../src/Cloudflare/BrowserRendering/BrowserRendering.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAEvE,KAAK,sBAAsB,GAAG,OAAO,sBAAsB,CAAC;AAC5D,QAAA,MAAM,sBAAsB,EAAG,6BAAsC,CAAC;AAEtE,MAAM,MAAM,qBAAqB,GAAG;IAClC;;;;;;;OAOG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,sBAAsB,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,gBAEC,CAAC;AAE/D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6EG;AACH,eAAO,MAAM,gBAAgB,EAAE;IAC7B,CAAC,KAAK,CAAC,EAAE,qBAAqB,GAAG,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;IACjE;;;OAGG;IACH,IAAI,EAAE,OAAO,uBAAuB,CAAC,IAAI,CAAC;CAY3C,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"BrowserRendering.js","sourceRoot":"","sources":["../../../src/Cloudflare/BrowserRendering/BrowserRendering.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAGvE,MAAM,sBAAsB,GAAG,6BAAsC,CAAC;AA2BtE,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,KAAc,EAA6B,EAAE,CAC9E,OAAO,KAAK,KAAK,QAAQ;IACxB,KAA0B,EAAE,IAAI,KAAK,sBAAsB,CAAC;AAE/D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6EG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAOzB,MAAM,CAAC,MAAM,CACf,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,KAA6B;IAChD,OAAO;QACL,IAAI,EAAE,sBAAsB;QAC5B,IAAI,EAAE,KAAK,EAAE,IAAI,IAAI,SAAS;KACJ,CAAC;AAC/B,CAAC,CAAC,EACF;IACE,IAAI,EAAE,CAAC,GAAG,IAAqD,EAAE,EAAE,CACjE,uBAAuB,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CACxC,CACF,CAAC"}
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import type * as cf from "@cloudflare/workers-types";
|
|
2
|
-
import * as Effect from "effect/Effect";
|
|
3
|
-
import * as Layer from "effect/Layer";
|
|
4
|
-
import * as Binding from "../../Binding.ts";
|
|
5
|
-
import { WorkerEnvironment } from "../Workers/Worker.ts";
|
|
6
|
-
import type { BrowserRendering as BrowserRenderingLike } from "./BrowserRendering.ts";
|
|
7
|
-
declare const BrowserRenderingError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
|
|
8
|
-
readonly _tag: "BrowserRenderingError";
|
|
9
|
-
} & Readonly<A>;
|
|
10
|
-
export declare class BrowserRenderingError extends BrowserRenderingError_base<{
|
|
11
|
-
message: string;
|
|
12
|
-
cause: unknown;
|
|
13
|
-
}> {
|
|
14
|
-
}
|
|
15
|
-
export interface BrowserRenderingBrowser {
|
|
16
|
-
close(): Promise<void>;
|
|
17
|
-
}
|
|
18
|
-
export interface BrowserRenderingPuppeteer<Browser extends BrowserRenderingBrowser> {
|
|
19
|
-
launch(binding: cf.Fetcher): Promise<Browser>;
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Effect-native client for a Cloudflare Browser Rendering binding.
|
|
23
|
-
*
|
|
24
|
-
* Browser Rendering's Workers binding is consumed by `@cloudflare/puppeteer`.
|
|
25
|
-
* Alchemy keeps Puppeteer as a caller-provided dependency while wrapping
|
|
26
|
-
* launch and cleanup in Effects.
|
|
27
|
-
*/
|
|
28
|
-
export interface BrowserRenderingClient {
|
|
29
|
-
/**
|
|
30
|
-
* Effect resolving to the raw Cloudflare Browser Rendering runtime binding.
|
|
31
|
-
*/
|
|
32
|
-
raw: Effect.Effect<cf.Fetcher, never, WorkerEnvironment>;
|
|
33
|
-
/**
|
|
34
|
-
* Launch a Browser Rendering session through `@cloudflare/puppeteer`.
|
|
35
|
-
*/
|
|
36
|
-
launch<Browser extends BrowserRenderingBrowser>(puppeteer: BrowserRenderingPuppeteer<Browser>): Effect.Effect<Browser, BrowserRenderingError, WorkerEnvironment>;
|
|
37
|
-
/**
|
|
38
|
-
* Launch a browser, run an Effect with it, and close it afterward.
|
|
39
|
-
*/
|
|
40
|
-
withBrowser<Browser extends BrowserRenderingBrowser, A, E, R>(puppeteer: BrowserRenderingPuppeteer<Browser>, use: (browser: Browser) => Effect.Effect<A, E, R>): Effect.Effect<A, BrowserRenderingError | E, WorkerEnvironment | R>;
|
|
41
|
-
}
|
|
42
|
-
declare const BrowserRenderingBinding_base: Binding.Service<BrowserRenderingBinding, "Cloudflare.BrowserRendering.Binding", (browser: BrowserRenderingLike) => Effect.Effect<BrowserRenderingClient>> & {
|
|
43
|
-
bind: (browser: BrowserRenderingLike) => Effect.Effect<any, any, any>;
|
|
44
|
-
};
|
|
45
|
-
export declare class BrowserRenderingBinding extends BrowserRenderingBinding_base {
|
|
46
|
-
}
|
|
47
|
-
export declare const BrowserRenderingBindingLive: Layer.Layer<BrowserRenderingBinding, never, BrowserRenderingBindingPolicy>;
|
|
48
|
-
declare const BrowserRenderingBindingPolicy_base: Binding.Policy<BrowserRenderingBindingPolicy, "Policy<Cloudflare.BrowserRendering.Binding>", (browser: BrowserRenderingLike) => Effect.Effect<void>>;
|
|
49
|
-
export declare class BrowserRenderingBindingPolicy extends BrowserRenderingBindingPolicy_base {
|
|
50
|
-
}
|
|
51
|
-
export declare const BrowserRenderingBindingPolicyLive: Layer.Layer<BrowserRenderingBindingPolicy, never, never>;
|
|
52
|
-
/** @internal */
|
|
53
|
-
export declare const makeBrowserRenderingClient: (raw: Effect.Effect<cf.Fetcher, never, WorkerEnvironment>) => BrowserRenderingClient;
|
|
54
|
-
export {};
|
|
55
|
-
//# sourceMappingURL=BrowserRenderingBinding.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"BrowserRenderingBinding.d.ts","sourceRoot":"","sources":["../../../src/Cloudflare/BrowserRendering/BrowserRenderingBinding.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAErD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAC;AAE5C,OAAO,EAAY,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,KAAK,EAAE,gBAAgB,IAAI,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;;;;AAEtF,qBAAa,qBAAsB,SAAQ,2BAEzC;IACA,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;CAChB,CAAC;CAAG;AAEL,MAAM,WAAW,uBAAuB;IACtC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,MAAM,WAAW,yBAAyB,CACxC,OAAO,SAAS,uBAAuB;IAEvC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC/C;AAED;;;;;;GAMG;AACH,MAAM,WAAW,sBAAsB;IACrC;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,iBAAiB,CAAC,CAAC;IACzD;;OAEG;IACH,MAAM,CAAC,OAAO,SAAS,uBAAuB,EAC5C,SAAS,EAAE,yBAAyB,CAAC,OAAO,CAAC,GAC5C,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,CAAC,CAAC;IACpE;;OAEG;IACH,WAAW,CAAC,OAAO,SAAS,uBAAuB,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC1D,SAAS,EAAE,yBAAyB,CAAC,OAAO,CAAC,EAC7C,GAAG,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAChD,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,qBAAqB,GAAG,CAAC,EAAE,iBAAiB,GAAG,CAAC,CAAC,CAAC;CACvE;sIAIW,oBAAoB,KAAK,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC;;;AAF1E,qBAAa,uBAAwB,SAAQ,4BAGH;CAAG;AAE7C,eAAO,MAAM,2BAA2B,4EAevC,CAAC;yJAIU,oBAAoB,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;AAFxD,qBAAa,6BAA8B,SAAQ,kCAGT;CAAG;AAE7C,eAAO,MAAM,iCAAiC,0DAoB3C,CAAC;AAiBJ,gBAAgB;AAChB,eAAO,MAAM,0BAA0B,GACrC,KAAK,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,iBAAiB,CAAC,KACvD,sBAgBF,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"BrowserRenderingBinding.js","sourceRoot":"","sources":["../../../src/Cloudflare/BrowserRendering/BrowserRenderingBinding.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
export * from "./BrowserRendering.ts";
|
|
2
|
-
export { BrowserRenderingBinding, BrowserRenderingBindingLive, BrowserRenderingBindingPolicy, BrowserRenderingBindingPolicyLive, BrowserRenderingError, type BrowserRenderingBrowser, type BrowserRenderingClient, type BrowserRenderingPuppeteer, } from "./BrowserRenderingBinding.ts";
|
|
3
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/Cloudflare/BrowserRendering/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,OAAO,EACL,uBAAuB,EACvB,2BAA2B,EAC3B,6BAA6B,EAC7B,iCAAiC,EACjC,qBAAqB,EACrB,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,EAC3B,KAAK,yBAAyB,GAC/B,MAAM,8BAA8B,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/Cloudflare/BrowserRendering/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,OAAO,EACL,uBAAuB,EACvB,2BAA2B,EAC3B,6BAA6B,EAC7B,iCAAiC,EACjC,qBAAqB,GAItB,MAAM,8BAA8B,CAAC"}
|
package/lib/Cloudflare/Zone.d.ts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { Credentials } from "@distilled.cloud/cloudflare/Credentials";
|
|
2
|
-
import * as Effect from "effect/Effect";
|
|
3
|
-
export type ZoneReference = string | {
|
|
4
|
-
zoneId: string;
|
|
5
|
-
name?: string;
|
|
6
|
-
};
|
|
7
|
-
export declare const isZoneId: (zone: string) => boolean;
|
|
8
|
-
export declare const matchesZoneHostname: (zoneName: string, hostname: string) => boolean;
|
|
9
|
-
export declare const resolveZoneId: ({ accountId, zone, hostname, }: {
|
|
10
|
-
accountId: string;
|
|
11
|
-
zone: ZoneReference | undefined;
|
|
12
|
-
hostname: string;
|
|
13
|
-
}) => Effect.Effect<string, Error, Credentials>;
|
|
14
|
-
//# sourceMappingURL=Zone.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Zone.d.ts","sourceRoot":"","sources":["../../src/Cloudflare/Zone.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EAEZ,MAAM,yCAAyC,CAAC;AACjD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvE,eAAO,MAAM,QAAQ,GAAI,MAAM,MAAM,KAAG,OAAuC,CAAC;AAEhF,eAAO,MAAM,mBAAmB,GAC9B,UAAU,MAAM,EAChB,UAAU,MAAM,KACf,OAAqE,CAAC;AAEzE,eAAO,MAAM,aAAa,GAAI,gCAI3B;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,aAAa,GAAG,SAAS,CAAC;IAChC,QAAQ,EAAE,MAAM,CAAC;CAClB,8CAaG,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Zone.js","sourceRoot":"","sources":["../../src/Cloudflare/Zone.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
import * as Effect from "effect/Effect";
|
|
2
|
-
import { BrowserRenderingBinding } from "./BrowserRenderingBinding.ts";
|
|
3
|
-
|
|
4
|
-
type BrowserRenderingTypeId = typeof BrowserRenderingTypeId;
|
|
5
|
-
const BrowserRenderingTypeId = "Cloudflare.BrowserRendering" as const;
|
|
6
|
-
|
|
7
|
-
export type BrowserRenderingProps = {
|
|
8
|
-
/**
|
|
9
|
-
* Binding name used when `Cloudflare.BrowserRendering.bind(browser)` attaches
|
|
10
|
-
* Browser Rendering from inside a Worker init phase. When Browser Rendering
|
|
11
|
-
* is passed through `Worker({ bindings: { ... } })`, the object key remains
|
|
12
|
-
* the binding name.
|
|
13
|
-
*
|
|
14
|
-
* @default "BROWSER"
|
|
15
|
-
*/
|
|
16
|
-
name?: string;
|
|
17
|
-
};
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Marker for a Cloudflare Browser Rendering binding.
|
|
21
|
-
*
|
|
22
|
-
* Browser Rendering bindings are configured directly on Workers and do not
|
|
23
|
-
* have a standalone provisioning API. The Worker provider sees this object in
|
|
24
|
-
* `bindings: { ... }` and emits the corresponding `{ type: "browser" }`
|
|
25
|
-
* metadata binding to the script.
|
|
26
|
-
*/
|
|
27
|
-
export type BrowserRendering = {
|
|
28
|
-
kind: BrowserRenderingTypeId;
|
|
29
|
-
name: string;
|
|
30
|
-
};
|
|
31
|
-
|
|
32
|
-
export const isBrowserRendering = (value: unknown): value is BrowserRendering =>
|
|
33
|
-
typeof value === "object" &&
|
|
34
|
-
(value as BrowserRendering)?.kind === BrowserRenderingTypeId;
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* A Cloudflare Browser Rendering binding for launching headless browser
|
|
38
|
-
* sessions from Workers via `@cloudflare/puppeteer`.
|
|
39
|
-
*
|
|
40
|
-
* @binding
|
|
41
|
-
*
|
|
42
|
-
* @section Effect-style Worker (recommended)
|
|
43
|
-
* @example Render a page title with managed browser cleanup
|
|
44
|
-
* ```typescript
|
|
45
|
-
* import puppeteer from "@cloudflare/puppeteer";
|
|
46
|
-
* import * as Effect from "effect/Effect";
|
|
47
|
-
*
|
|
48
|
-
* const Browser = Cloudflare.BrowserRendering({ name: "BROWSER" });
|
|
49
|
-
*
|
|
50
|
-
* Cloudflare.Worker(
|
|
51
|
-
* "BrowserWorker",
|
|
52
|
-
* { main: import.meta.filename },
|
|
53
|
-
* Effect.gen(function* () {
|
|
54
|
-
* const browserRendering = yield* Cloudflare.BrowserRendering.bind(
|
|
55
|
-
* yield* Browser,
|
|
56
|
-
* );
|
|
57
|
-
*
|
|
58
|
-
* return {
|
|
59
|
-
* fetch: browserRendering.withBrowser(puppeteer, (browser) =>
|
|
60
|
-
* Effect.gen(function* () {
|
|
61
|
-
* const page = yield* Effect.tryPromise(() => browser.newPage());
|
|
62
|
-
* yield* Effect.tryPromise(() => page.goto("https://example.com"));
|
|
63
|
-
* const title = yield* Effect.tryPromise(() => page.title());
|
|
64
|
-
* return Response.json({ title });
|
|
65
|
-
* }),
|
|
66
|
-
* ),
|
|
67
|
-
* };
|
|
68
|
-
* }).pipe(Effect.provide(Cloudflare.BrowserRenderingBindingLive)),
|
|
69
|
-
* );
|
|
70
|
-
* ```
|
|
71
|
-
*
|
|
72
|
-
* @section Declaring Browser Rendering
|
|
73
|
-
* @example
|
|
74
|
-
* ```typescript
|
|
75
|
-
* const Browser = yield* Cloudflare.BrowserRendering({ name: "BROWSER" });
|
|
76
|
-
* ```
|
|
77
|
-
*
|
|
78
|
-
* @section Worker binding metadata
|
|
79
|
-
* @example
|
|
80
|
-
* ```typescript
|
|
81
|
-
* export const Worker = Cloudflare.Worker("Worker", {
|
|
82
|
-
* main: "./src/worker.ts",
|
|
83
|
-
* bindings: {
|
|
84
|
-
* BROWSER: Cloudflare.BrowserRendering(),
|
|
85
|
-
* },
|
|
86
|
-
* });
|
|
87
|
-
*
|
|
88
|
-
* export type WorkerEnv = Cloudflare.InferEnv<typeof Worker>;
|
|
89
|
-
* // { BROWSER: Fetcher }
|
|
90
|
-
* ```
|
|
91
|
-
*
|
|
92
|
-
* @example Async-style worker with the raw runtime binding
|
|
93
|
-
* ```typescript
|
|
94
|
-
* import puppeteer from "@cloudflare/puppeteer";
|
|
95
|
-
* import type { WorkerEnv } from "../alchemy.run.ts";
|
|
96
|
-
*
|
|
97
|
-
* export default {
|
|
98
|
-
* async fetch(request: Request, env: WorkerEnv) {
|
|
99
|
-
* const browser = await puppeteer.launch(env.BROWSER);
|
|
100
|
-
* const page = await browser.newPage();
|
|
101
|
-
* await page.goto("https://example.com");
|
|
102
|
-
* const screenshot = await page.screenshot();
|
|
103
|
-
* await browser.close();
|
|
104
|
-
*
|
|
105
|
-
* return new Response(screenshot, {
|
|
106
|
-
* headers: { "content-type": "image/png" },
|
|
107
|
-
* });
|
|
108
|
-
* },
|
|
109
|
-
* };
|
|
110
|
-
* ```
|
|
111
|
-
*
|
|
112
|
-
* @see https://developers.cloudflare.com/browser-rendering/workers-binding-api/
|
|
113
|
-
*/
|
|
114
|
-
export const BrowserRendering: {
|
|
115
|
-
(props?: BrowserRenderingProps): Effect.Effect<BrowserRendering>;
|
|
116
|
-
/**
|
|
117
|
-
* Bind Browser Rendering to the surrounding Worker, returning a small client
|
|
118
|
-
* with access to the native Workers runtime binding.
|
|
119
|
-
*/
|
|
120
|
-
bind: typeof BrowserRenderingBinding.bind;
|
|
121
|
-
} = Object.assign(
|
|
122
|
-
Effect.fn(function* (props?: BrowserRenderingProps) {
|
|
123
|
-
return {
|
|
124
|
-
kind: BrowserRenderingTypeId,
|
|
125
|
-
name: props?.name ?? "BROWSER",
|
|
126
|
-
} satisfies BrowserRendering;
|
|
127
|
-
}),
|
|
128
|
-
{
|
|
129
|
-
bind: (...args: Parameters<typeof BrowserRenderingBinding.bind>) =>
|
|
130
|
-
BrowserRenderingBinding.bind(...args),
|
|
131
|
-
},
|
|
132
|
-
);
|
|
@@ -1,137 +0,0 @@
|
|
|
1
|
-
import type * as cf from "@cloudflare/workers-types";
|
|
2
|
-
import * as Data from "effect/Data";
|
|
3
|
-
import * as Effect from "effect/Effect";
|
|
4
|
-
import * as Layer from "effect/Layer";
|
|
5
|
-
import * as Binding from "../../Binding.ts";
|
|
6
|
-
import type { ResourceLike } from "../../Resource.ts";
|
|
7
|
-
import { isWorker, WorkerEnvironment } from "../Workers/Worker.ts";
|
|
8
|
-
import type { BrowserRendering as BrowserRenderingLike } from "./BrowserRendering.ts";
|
|
9
|
-
|
|
10
|
-
export class BrowserRenderingError extends Data.TaggedError(
|
|
11
|
-
"BrowserRenderingError",
|
|
12
|
-
)<{
|
|
13
|
-
message: string;
|
|
14
|
-
cause: unknown;
|
|
15
|
-
}> {}
|
|
16
|
-
|
|
17
|
-
export interface BrowserRenderingBrowser {
|
|
18
|
-
close(): Promise<void>;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export interface BrowserRenderingPuppeteer<
|
|
22
|
-
Browser extends BrowserRenderingBrowser,
|
|
23
|
-
> {
|
|
24
|
-
launch(binding: cf.Fetcher): Promise<Browser>;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* Effect-native client for a Cloudflare Browser Rendering binding.
|
|
29
|
-
*
|
|
30
|
-
* Browser Rendering's Workers binding is consumed by `@cloudflare/puppeteer`.
|
|
31
|
-
* Alchemy keeps Puppeteer as a caller-provided dependency while wrapping
|
|
32
|
-
* launch and cleanup in Effects.
|
|
33
|
-
*/
|
|
34
|
-
export interface BrowserRenderingClient {
|
|
35
|
-
/**
|
|
36
|
-
* Effect resolving to the raw Cloudflare Browser Rendering runtime binding.
|
|
37
|
-
*/
|
|
38
|
-
raw: Effect.Effect<cf.Fetcher, never, WorkerEnvironment>;
|
|
39
|
-
/**
|
|
40
|
-
* Launch a Browser Rendering session through `@cloudflare/puppeteer`.
|
|
41
|
-
*/
|
|
42
|
-
launch<Browser extends BrowserRenderingBrowser>(
|
|
43
|
-
puppeteer: BrowserRenderingPuppeteer<Browser>,
|
|
44
|
-
): Effect.Effect<Browser, BrowserRenderingError, WorkerEnvironment>;
|
|
45
|
-
/**
|
|
46
|
-
* Launch a browser, run an Effect with it, and close it afterward.
|
|
47
|
-
*/
|
|
48
|
-
withBrowser<Browser extends BrowserRenderingBrowser, A, E, R>(
|
|
49
|
-
puppeteer: BrowserRenderingPuppeteer<Browser>,
|
|
50
|
-
use: (browser: Browser) => Effect.Effect<A, E, R>,
|
|
51
|
-
): Effect.Effect<A, BrowserRenderingError | E, WorkerEnvironment | R>;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
export class BrowserRenderingBinding extends Binding.Service<
|
|
55
|
-
BrowserRenderingBinding,
|
|
56
|
-
(browser: BrowserRenderingLike) => Effect.Effect<BrowserRenderingClient>
|
|
57
|
-
>()("Cloudflare.BrowserRendering.Binding") {}
|
|
58
|
-
|
|
59
|
-
export const BrowserRenderingBindingLive = Layer.effect(
|
|
60
|
-
BrowserRenderingBinding,
|
|
61
|
-
Effect.gen(function* () {
|
|
62
|
-
const Policy = yield* BrowserRenderingBindingPolicy;
|
|
63
|
-
|
|
64
|
-
return Effect.fn(function* (browser: BrowserRenderingLike) {
|
|
65
|
-
yield* Policy(browser);
|
|
66
|
-
// Cloudflare exposes Browser Rendering as a service-style binding for
|
|
67
|
-
// @cloudflare/puppeteer; workers-types has no narrower interface.
|
|
68
|
-
const raw = WorkerEnvironment.useSync(
|
|
69
|
-
(env) => (env as Record<string, cf.Fetcher>)[browser.name]!,
|
|
70
|
-
);
|
|
71
|
-
return makeBrowserRenderingClient(raw);
|
|
72
|
-
});
|
|
73
|
-
}),
|
|
74
|
-
);
|
|
75
|
-
|
|
76
|
-
export class BrowserRenderingBindingPolicy extends Binding.Policy<
|
|
77
|
-
BrowserRenderingBindingPolicy,
|
|
78
|
-
(browser: BrowserRenderingLike) => Effect.Effect<void>
|
|
79
|
-
>()("Cloudflare.BrowserRendering.Binding") {}
|
|
80
|
-
|
|
81
|
-
export const BrowserRenderingBindingPolicyLive =
|
|
82
|
-
BrowserRenderingBindingPolicy.layer.succeed(
|
|
83
|
-
Effect.fn(function* (host: ResourceLike, browser: BrowserRenderingLike) {
|
|
84
|
-
if (isWorker(host)) {
|
|
85
|
-
yield* host.bind(browser.name, {
|
|
86
|
-
bindings: [
|
|
87
|
-
{
|
|
88
|
-
type: "browser",
|
|
89
|
-
name: browser.name,
|
|
90
|
-
},
|
|
91
|
-
],
|
|
92
|
-
});
|
|
93
|
-
} else {
|
|
94
|
-
return yield* Effect.die(
|
|
95
|
-
new Error(
|
|
96
|
-
`BrowserRenderingBinding does not support runtime '${host.Type}'`,
|
|
97
|
-
),
|
|
98
|
-
);
|
|
99
|
-
}
|
|
100
|
-
}),
|
|
101
|
-
);
|
|
102
|
-
|
|
103
|
-
const tryPromise = <T>(
|
|
104
|
-
fn: () => Promise<T>,
|
|
105
|
-
): Effect.Effect<T, BrowserRenderingError> =>
|
|
106
|
-
Effect.tryPromise({
|
|
107
|
-
try: fn,
|
|
108
|
-
catch: (error) =>
|
|
109
|
-
new BrowserRenderingError({
|
|
110
|
-
message:
|
|
111
|
-
error instanceof Error
|
|
112
|
-
? error.message
|
|
113
|
-
: "Unknown Browser Rendering error",
|
|
114
|
-
cause: error,
|
|
115
|
-
}),
|
|
116
|
-
});
|
|
117
|
-
|
|
118
|
-
/** @internal */
|
|
119
|
-
export const makeBrowserRenderingClient = (
|
|
120
|
-
raw: Effect.Effect<cf.Fetcher, never, WorkerEnvironment>,
|
|
121
|
-
): BrowserRenderingClient => {
|
|
122
|
-
const launch = <Browser extends BrowserRenderingBrowser>(
|
|
123
|
-
puppeteer: BrowserRenderingPuppeteer<Browser>,
|
|
124
|
-
) =>
|
|
125
|
-
raw.pipe(
|
|
126
|
-
Effect.flatMap((binding) => tryPromise(() => puppeteer.launch(binding))),
|
|
127
|
-
);
|
|
128
|
-
|
|
129
|
-
return {
|
|
130
|
-
raw,
|
|
131
|
-
launch,
|
|
132
|
-
withBrowser: (puppeteer, use) =>
|
|
133
|
-
Effect.acquireUseRelease(launch(puppeteer), use, (browser) =>
|
|
134
|
-
tryPromise(() => browser.close()),
|
|
135
|
-
),
|
|
136
|
-
} satisfies BrowserRenderingClient;
|
|
137
|
-
};
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
export * from "./BrowserRendering.ts";
|
|
2
|
-
export {
|
|
3
|
-
BrowserRenderingBinding,
|
|
4
|
-
BrowserRenderingBindingLive,
|
|
5
|
-
BrowserRenderingBindingPolicy,
|
|
6
|
-
BrowserRenderingBindingPolicyLive,
|
|
7
|
-
BrowserRenderingError,
|
|
8
|
-
type BrowserRenderingBrowser,
|
|
9
|
-
type BrowserRenderingClient,
|
|
10
|
-
type BrowserRenderingPuppeteer,
|
|
11
|
-
} from "./BrowserRenderingBinding.ts";
|