Skip to content
File

Blob: src/workerd/api/export-loopback.c++

1.4 KB
1// Copyright (c) 2017-2025 Cloudflare, Inc.
2// Licensed under the Apache 2.0 license found in the LICENSE file or at:
3// https://opensource.org/licenses/Apache-2.0
4 
5#include "export-loopback.h"
6 
7#include <workerd/io/frankenvalue.h>
8 
9namespace workerd::api {
10 
11jsg::Ref<Fetcher> LoopbackServiceStub::callImpl(jsg::Lock& js,
12 jsg::Optional<jsg::JsRef<jsg::JsObject>> propsMaybe,
13 jsg::Optional<OptionsWithVersion::Version> versionMaybe) {
14 Frankenvalue props;
15 KJ_IF_SOME(p, propsMaybe) {
16 props = Frankenvalue::fromJs(js, p.getHandle(js));
17 }
18 kj::Maybe<IoChannelFactory::VersionRequest> versionRequest;
19 KJ_IF_SOME(version, kj::mv(versionMaybe)) {
20 versionRequest = IoChannelFactory::VersionRequest{
21 .cohort = kj::mv(version.cohort).orDefault(kj::none),
22 };
23 }
24 
25 IoContext& ioctx = IoContext::current();
26 auto channelObj = ioctx.getIoChannelFactory().getSubrequestChannel(
27 channel, kj::mv(props), kj::mv(versionRequest));
28 return js.alloc<Fetcher>(ioctx.addObject(kj::mv(channelObj)));
29}
30 
31jsg::Ref<DurableObjectClass> LoopbackDurableObjectClass::call(jsg::Lock& js, Options options) {
32 Frankenvalue props;
33 KJ_IF_SOME(p, options.props) {
34 props = Frankenvalue::fromJs(js, p.getHandle(js));
35 }
36 
37 IoContext& ioctx = IoContext::current();
38 auto channelObj = ioctx.getIoChannelFactory().getActorClass(channel, kj::mv(props));
39 return js.alloc<DurableObjectClass>(ioctx.addObject(kj::mv(channelObj)));
40}
41 
42} // namespace workerd::api