sol_adapter_cloudflare

    Cloudflare adapter utilities for Sol

    sol
    cloudflare
    wrangler
    moonbit
    Download zip
    Author
    Version
    0.23.3
    License
    MIT
    Last updated
    3 hours ago
    Downloads
    542

    Dependencies

    #sol_adapter_cloudflare

    Cloudflare adapter utilities for Sol.

    This package depends on mizchi/sol and keeps Cloudflare/Wrangler-specific route conversion outside the Sol core package.

    #Worker runtime

    Use this package from a Cloudflare-targeted Sol server entry:

    async fn main {
    @sol_cloudflare.run_app(fn() {
    @sol.create_app(routes(), config=config())
    })
    }

    The exported app supports the Worker shape:

    export default { fetch(request, env, ctx) { return solApp.fetch(request, env, ctx); }, };

    env and ctx are passed into Mars/Sol request context, so route handlers and middleware can use ctx.env_var("NAME") and ctx.wait_until(...).

    #Binding validation

    Declare the bindings a Worker expects and fail early in local tests or Worker entry code:

    let missing = @sol_cloudflare.missing_required_bindings(env, [
    @sol_cloudflare.env_var("API_TOKEN"),
    @sol_cloudflare.kv_namespace("CACHE"),
    @sol_cloudflare.r2_bucket("MEDIA"),
    ])

    #Generators

    • generate_cloudflare_server_entry_js(...) creates an edge-safe Sol server module wrapper without top-level timers or Node imports.
    • generate_worker_entry_js(...) creates a host Worker composition entry that routes /api/* before delegating to Sol.
    • generate_wrangler_toml(...) and generate_wrangler_assets_config(...) generate Wrangler config fragments with string escaping handled by the adapter.

    App

    using @mizchi/mars { type Server as App }

    Mars app type used by Sol.

    Env

    using @mizchi/mars { type JsEnv as Env }

    Cloudflare Workers environment object.

    ExecutionContext

    using @mizchi/mars { type JsExecCtx as ExecutionContext }

    Cloudflare Workers execution context.

    BindingKey

    pub(all) struct BindingKey[T] {
    name : String
    kind : BindingKind
    optional : Bool
    _type : T?
    }

    Phantom-typed binding key for generated env contracts.

    BindingKey::kind

    fn[T] BindingKey::kind(self : BindingKey[T]) -> BindingKind

    BindingKey::name

    fn[T] BindingKey::name(self : BindingKey[T]) -> String

    BindingKey::optional

    fn[T] BindingKey::optional(self : BindingKey[T]) -> Bool

    BindingKind

    pub(all) enum BindingKind {
    EnvVar
    Secret
    KV
    R2
    D1
    DurableObject
    Service
    AI
    Queue
    }

    Cloudflare binding category used for dev/test validation and docs.

    BindingKind::label

    fn BindingKind::label(self : BindingKind) -> String

    BindingSpec

    pub(all) struct BindingSpec {
    name : String
    kind : BindingKind
    optional : Bool
    }

    One expected Cloudflare binding.

    MissingBinding

    pub(all) struct MissingBinding {
    name : String
    kind : BindingKind
    }

    A required binding that is missing from the Worker env.

    ai_binding

    fn ai_binding(name : String, optional? : Bool) -> BindingSpec

    Required Workers AI binding.

    binding

    fn binding(name : String, kind : BindingKind, optional? : Bool) -> BindingSpec

    binding_key

    fn[T] binding_key(name : String, kind : BindingKind, optional? : Bool) -> BindingKey[T]

    bindings_typescript_decl

    fn bindings_typescript_decl(specs : Array[BindingSpec], interface_name? : String) -> String

    d1_database

    fn d1_database(name : String, optional? : Bool) -> BindingSpec

    Required D1 database binding.

    describe_missing_bindings

    fn describe_missing_bindings(missing : Array[MissingBinding]) -> String

    Human-readable validation error for missing bindings.

    durable_object

    fn durable_object(name : String, optional? : Bool) -> BindingSpec

    Required Durable Object namespace binding.

    env_var

    fn env_var(name : String, optional? : Bool) -> BindingSpec

    Required plain env var.

    env_var_key

    fn env_var_key(name : String, optional? : Bool) -> BindingKey[String]

    export_app

    fn export_app(app :
    Server
    ) -> Unit

    Export a Sol app as a Cloudflare Worker fetch(request, env, ctx) app.

    extract_worker_first_patterns

    fn extract_worker_first_patterns(routes : Array[
    SolRoutes
    ]) -> Array[String]

    Extract Cloudflare run_worker_first patterns from Sol routes.

    generate_cloudflare_server_entry_js

    fn generate_cloudflare_server_entry_js(main_module : String) -> String

    Generate an edge-safe server module that imports a generated Sol app.

    generate_worker_entry_js

    fn generate_worker_entry_js(sol_module : String, api_prefix? : String) -> String

    Generate a host Worker entry that routes platform APIs before Sol pages.

    generate_wrangler_assets_config

    fn generate_wrangler_assets_config(routes : Array[
    SolRoutes
    ], output_dir : String) -> String

    Generate a Wrangler assets config fragment for Cloudflare Workers.

    generate_wrangler_toml

    fn generate_wrangler_toml(name : String, main? : String, compatibility_date? : String, no_bundle? : Bool) -> String

    Generate a minimal Wrangler TOML config for a Sol Worker.

    kv_namespace

    fn kv_namespace(name : String, optional? : Bool) -> BindingSpec

    Required KV namespace binding.

    missing_required_bindings

    fn missing_required_bindings(env :
    JsEnv
    , specs : Array[BindingSpec]) -> Array[MissingBinding]

    Return all missing required bindings for a Cloudflare Worker env.

    queue_binding

    fn queue_binding(name : String, optional? : Bool) -> BindingSpec

    Required Queue binding.

    r2_bucket

    fn r2_bucket(name : String, optional? : Bool) -> BindingSpec

    Required R2 bucket binding.

    route_pattern_to_worker_glob

    fn route_pattern_to_worker_glob(path : String) -> String

    Convert a Sol route pattern to a Cloudflare run_worker_first glob.

    run

    fn run(configure : (
    Server
    ) -> Unit) -> Unit

    Run a configured Sol app in Cloudflare adapter mode.

    run_app

    fn run_app(create_and_configure : () ->
    Server
    ) -> Unit

    Run a Sol app factory in Cloudflare adapter mode.

    secret

    fn secret(name : String, optional? : Bool) -> BindingSpec

    Required secret env var.

    secret_key

    fn secret_key(name : String, optional? : Bool) -> BindingKey[String]

    service_binding

    fn service_binding(name : String, optional? : Bool) -> BindingSpec

    Required Service Binding.

    validate_bindings

    fn validate_bindings(env :
    JsEnv
    , specs : Array[BindingSpec]) -> Bool

    True when every required binding exists.

    Powered by MoonBit

    Site sourceReport issuePackagesBuild queueSkillsStatistics

    © 2026 mooncakes.io