1import type * as Binding from "./Binding.ts";
2import { makeBindingLayer } from "./BindingLayer.ts";
3import {
4 VersionMetadata,
5 type VersionMetadataAccessor,
6 type WorkerVersionMetadata,
7} from "./VersionMetadata.ts";
8
9/** The binding value produced by calling {@link VersionMetadata} (declared on `env` or `yield*`-ed). */
10export type VersionMetadataBinding = Binding.Binding<
11 VersionMetadata["key"],
12 VersionMetadataAccessor,
13 VersionMetadata
14>;
15
16/**
17 * The layer that provides the Effect-native interface for the Cloudflare
18 * Workers Version Metadata binding.
19 *
20 * Provide it on the Worker effect (`Effect.provide(Cloudflare.Workers.VersionMetadataBinding)`)
21 * so that yielding a {@link VersionMetadata} binding attaches the native
22 * `version_metadata` binding to the surrounding Worker at deploy time and, at
23 * runtime, resolves to a deferred {@link VersionMetadataAccessor} (yield it to
24 * read the {@link WorkerVersionMetadata}).
25 */
26export const VersionMetadataBinding = makeBindingLayer<
27 VersionMetadata,
28 WorkerVersionMetadata,
29 VersionMetadataAccessor
30>(VersionMetadata, (raw) => raw);