diff --git a/cloudflare/internal/cfruntimecontext/cfruntimecontext.go b/cloudflare/internal/cfruntimecontext/cfruntimecontext.go index cbc2228..69d076f 100644 --- a/cloudflare/internal/cfruntimecontext/cfruntimecontext.go +++ b/cloudflare/internal/cfruntimecontext/cfruntimecontext.go @@ -2,6 +2,7 @@ package cfruntimecontext import ( "context" + "errors" "syscall/js" "github.com/syumai/workers/internal/runtimecontext" @@ -13,6 +14,7 @@ import ( * type RuntimeContext { * env: Env; * ctx: ExecutionContext; + * ... * } * ``` * This type is based on the type definition of ExportedHandlerFetchHandler. @@ -33,3 +35,16 @@ func GetExecutionContext(ctx context.Context) js.Value { runtimeCtxValue := runtimecontext.MustExtract(ctx) return runtimeCtxValue.Get("ctx") } + +var ErrValueNotFound = errors.New("execution context value for specified key not found") + +// GetRuntimeContextValue gets value for specified key from RuntimeContext. +// - if the value is undefined, return error. +func GetRuntimeContextValue(ctx context.Context, key string) (js.Value, error) { + runtimeCtxValue := runtimecontext.MustExtract(ctx) + v := runtimeCtxValue.Get(key) + if v.IsUndefined() { + return js.Value{}, ErrValueNotFound + } + return v, nil +} diff --git a/cmd/workers-assets-gen/assets/common/shim.mjs b/cmd/workers-assets-gen/assets/common/shim.mjs index 741c70d..4d6ad60 100644 --- a/cmd/workers-assets-gen/assets/common/shim.mjs +++ b/cmd/workers-assets-gen/assets/common/shim.mjs @@ -1,5 +1,6 @@ import "./polyfill_performance.js"; import "./wasm_exec.js"; +import { connect } from 'cloudflare:sockets'; const go = new Go(); @@ -18,19 +19,27 @@ async function run() { await readyPromise; } +function createRuntimeContext(env, ctx) { + return { + env, + ctx, + connect, + } +} + export async function fetch(req, env, ctx) { await run(); - return handleRequest(req, { env, ctx }); + return handleRequest(req, createRuntimeContext(env, ctx)); } export async function scheduled(event, env, ctx) { await run(); - return runScheduler(event, { env, ctx }); + return runScheduler(event, createRuntimeContext(env, ctx)); } // onRequest handles request to Cloudflare Pages export async function onRequest(ctx) { await run(); const { request, env } = ctx; - return handleRequest(request, { env, ctx }); + return handleRequest(request, createRuntimeContext(env, ctx)); } \ No newline at end of file