Skip to content

Commit 0b72b82

Browse files
authored
Update api/global-scope to use KJ_IF_SOME (#1204)
1 parent d082fc9 commit 0b72b82

File tree

2 files changed

+48
-48
lines changed

2 files changed

+48
-48
lines changed

src/workerd/api/global-scope.c++

+47-47
Original file line numberDiff line numberDiff line change
@@ -148,34 +148,34 @@ kj::Promise<DeferredProxy<void>> ServiceWorkerGlobalScope::request(
148148
// TODO(cleanup): Should KJ HTTP interfaces explicitly communicate the difference between a
149149
// missing body and an empty one?
150150
kj::Maybe<Body::ExtractedBody> body;
151-
if (headers.get(kj::HttpHeaderId::CONTENT_LENGTH) != nullptr ||
152-
headers.get(kj::HttpHeaderId::TRANSFER_ENCODING) != nullptr ||
151+
if (headers.get(kj::HttpHeaderId::CONTENT_LENGTH) != kj::none ||
152+
headers.get(kj::HttpHeaderId::TRANSFER_ENCODING) != kj::none ||
153153
requestBody.tryGetLength().orDefault(1) > 0) {
154154
body = Body::ExtractedBody(jsStream.addRef());
155155
}
156156

157157
// If the request doesn't specify "Content-Length" or "Transfer-Encoding", set "Content-Length"
158158
// to the body length if it's known. This ensures handlers for worker-to-worker requests can
159159
// access known body lengths if they're set, without buffering bodies.
160-
if (body != nullptr &&
161-
headers.get(kj::HttpHeaderId::CONTENT_LENGTH) == nullptr &&
162-
headers.get(kj::HttpHeaderId::TRANSFER_ENCODING) == nullptr) {
160+
if (body != kj::none &&
161+
headers.get(kj::HttpHeaderId::CONTENT_LENGTH) == kj::none &&
162+
headers.get(kj::HttpHeaderId::TRANSFER_ENCODING) == kj::none) {
163163
// We can't use headers.set() here as headers is marked const. Instead, we call set() on the
164164
// JavaScript headers object, ignoring the REQUEST guard that usually makes them immutable.
165-
KJ_IF_MAYBE(l, requestBody.tryGetLength()) {
165+
KJ_IF_SOME(l, requestBody.tryGetLength()) {
166166
jsHeaders->setUnguarded(jsg::ByteString(kj::str("Content-Length")),
167-
jsg::ByteString(kj::str(*l)));
167+
jsg::ByteString(kj::str(l)));
168168
} else {
169169
jsHeaders->setUnguarded(jsg::ByteString(kj::str("Transfer-Encoding")),
170-
jsg::ByteString(kj::str("chunked")));
170+
jsg::ByteString(kj::str("chunked")));
171171
}
172172
}
173173

174174
auto jsRequest = jsg::alloc<Request>(
175175
method, url, Request::Redirect::MANUAL, kj::mv(jsHeaders),
176176
jsg::alloc<Fetcher>(IoContext::NEXT_CLIENT_CHANNEL,
177177
Fetcher::RequiresHostAndProtocol::YES),
178-
nullptr /** AbortSignal **/, kj::mv(cf), kj::mv(body));
178+
kj::none /** AbortSignal **/, kj::mv(cf), kj::mv(body));
179179
// I set the redirect mode to manual here, so that by default scripts that just pass requests
180180
// through to a fetch() call will behave the same as scripts which don't call .respondWith(): if
181181
// the request results in a redirect, the visitor will see that redirect.
@@ -185,9 +185,9 @@ kj::Promise<DeferredProxy<void>> ServiceWorkerGlobalScope::request(
185185
uint tasksBefore = ioContext.taskCount();
186186

187187
bool useDefaultHandling;
188-
KJ_IF_MAYBE(h, exportedHandler) {
189-
KJ_IF_MAYBE(f, h->fetch) {
190-
auto promise = (*f)(lock, event->getRequest(), h->env.addRef(js), h->getCtx());
188+
KJ_IF_SOME(h, exportedHandler) {
189+
KJ_IF_SOME(f, h.fetch) {
190+
auto promise = f(lock, event->getRequest(), h.env.addRef(js), h.getCtx());
191191
event->respondWith(lock, kj::mv(promise));
192192
useDefaultHandling = false;
193193
} else {
@@ -231,7 +231,7 @@ kj::Promise<DeferredProxy<void>> ServiceWorkerGlobalScope::request(
231231
// deferred proxy task.
232232
return DeferredProxy<void> { promise.attach(kj::mv(adapter), kj::mv(client)) };
233233
}
234-
} else KJ_IF_MAYBE(promise, event->getResponsePromise(lock)) {
234+
} else KJ_IF_SOME(promise, event->getResponsePromise(lock)) {
235235
auto body2 = kj::addRef(*ownRequestBody);
236236

237237
// HACK: If the client disconnects, the `response` reference is no longer valid. But our
@@ -244,7 +244,7 @@ kj::Promise<DeferredProxy<void>> ServiceWorkerGlobalScope::request(
244244
};
245245
auto canceled = kj::refcounted<RefcountedBool>(false);
246246

247-
return ioContext.awaitJs(lock ,promise->then(kj::implicitCast<jsg::Lock&>(lock),
247+
return ioContext.awaitJs(lock ,promise.then(kj::implicitCast<jsg::Lock&>(lock),
248248
ioContext.addFunctor(
249249
[&response, allowWebSocket = headers.isWebSocket(),
250250
canceled = kj::addRef(*canceled), &headers]
@@ -291,14 +291,14 @@ void ServiceWorkerGlobalScope::sendTraces(kj::ArrayPtr<kj::Own<Trace>> traces,
291291
Worker::Lock& lock, kj::Maybe<ExportedHandler&> exportedHandler) {
292292
auto isolate = lock.getIsolate();
293293

294-
KJ_IF_MAYBE(h, exportedHandler) {
295-
KJ_IF_MAYBE(f, h->tail) {
294+
KJ_IF_SOME(h, exportedHandler) {
295+
KJ_IF_SOME(f, h.tail) {
296296
auto tailEvent = jsg::alloc<TailEvent>(lock, "tail"_kj, traces);
297-
auto promise = (*f)(lock, tailEvent->getEvents(), h->env.addRef(isolate), h->getCtx());
297+
auto promise = f(lock, tailEvent->getEvents(), h.env.addRef(isolate), h.getCtx());
298298
tailEvent->waitUntil(kj::mv(promise));
299-
} else KJ_IF_MAYBE(f, h->trace) {
299+
} else KJ_IF_SOME(f, h.trace) {
300300
auto traceEvent = jsg::alloc<TailEvent>(lock, "trace"_kj, traces);
301-
auto promise = (*f)(lock, traceEvent->getEvents(), h->env.addRef(isolate), h->getCtx());
301+
auto promise = f(lock, traceEvent->getEvents(), h.env.addRef(isolate), h.getCtx());
302302
traceEvent->waitUntil(kj::mv(promise));
303303
} else {
304304
lock.logWarningOnce(
@@ -330,10 +330,10 @@ void ServiceWorkerGlobalScope::startScheduled(
330330

331331
auto isolate = lock.getIsolate();
332332

333-
KJ_IF_MAYBE(h, exportedHandler) {
334-
KJ_IF_MAYBE(f, h->scheduled) {
335-
auto promise = (*f)(lock, jsg::alloc<ScheduledController>(event.addRef()),
336-
h->env.addRef(isolate), h->getCtx());
333+
KJ_IF_SOME(h, exportedHandler) {
334+
KJ_IF_SOME(f, h.scheduled) {
335+
auto promise = f(lock, jsg::alloc<ScheduledController>(event.addRef()),
336+
h.env.addRef(isolate), h.getCtx());
337337
event->waitUntil(kj::mv(promise));
338338
} else {
339339
lock.logWarningOnce(
@@ -364,9 +364,9 @@ kj::Promise<WorkerInterface::AlarmResult> ServiceWorkerGlobalScope::runAlarm(
364364
auto& persistent = KJ_ASSERT_NONNULL(actor.getPersistent());
365365
auto maybeDeferredDelete = persistent.armAlarmHandler(scheduledTime);
366366

367-
KJ_IF_MAYBE(deferredDelete, maybeDeferredDelete) {
367+
KJ_IF_SOME(deferredDelete, maybeDeferredDelete) {
368368
auto& handler = KJ_REQUIRE_NONNULL(exportedHandler);
369-
if (handler.alarm == nullptr) {
369+
if (handler.alarm == kj::none) {
370370

371371
lock.logWarningOnce(
372372
"Attempted to run a scheduled alarm without a handler, "
@@ -393,7 +393,7 @@ kj::Promise<WorkerInterface::AlarmResult> ServiceWorkerGlobalScope::runAlarm(
393393
});
394394

395395
return alarmResultPromise
396-
.catch_([&context, deferredDelete = kj::mv(*deferredDelete)](kj::Exception&& e) mutable {
396+
.catch_([&context, deferredDelete = kj::mv(deferredDelete)](kj::Exception&& e) mutable {
397397
auto& actor = KJ_ASSERT_NONNULL(context.getActor());
398398
auto& persistent = KJ_ASSERT_NONNULL(actor.getPersistent());
399399
persistent.cancelDeferredAlarmDeletion();
@@ -404,8 +404,8 @@ kj::Promise<WorkerInterface::AlarmResult> ServiceWorkerGlobalScope::runAlarm(
404404
context.logUncaughtExceptionAsync(UncaughtExceptionSource::ALARM_HANDLER, kj::mv(e));
405405

406406
EventOutcome outcome = EventOutcome::EXCEPTION;
407-
KJ_IF_MAYBE(status, context.getLimitEnforcer().getLimitsExceeded()) {
408-
outcome = *status;
407+
KJ_IF_SOME(status, context.getLimitEnforcer().getLimitsExceeded()) {
408+
outcome = status;
409409
}
410410
return WorkerInterface::AlarmResult {
411411
.retry = true,
@@ -460,9 +460,9 @@ void ServiceWorkerGlobalScope::sendHibernatableWebSocketMessage(
460460
// Even if no handler is exported, we need to claim the websocket so it's removed from the map.
461461
auto websocket = event->claimWebSocket(lock, websocketId);
462462

463-
KJ_IF_MAYBE(h, exportedHandler) {
464-
KJ_IF_MAYBE(handler, h->webSocketMessage) {
465-
auto promise = (*handler)(lock, kj::mv(websocket), kj::mv(message));
463+
KJ_IF_SOME(h, exportedHandler) {
464+
KJ_IF_SOME(handler, h.webSocketMessage) {
465+
auto promise = handler(lock, kj::mv(websocket), kj::mv(message));
466466
event->waitUntil(kj::mv(promise));
467467
}
468468
// We want to deliver a message, but if no webSocketMessage handler is exported, we shouldn't fail
@@ -483,9 +483,9 @@ void ServiceWorkerGlobalScope::sendHibernatableWebSocketClose(
483483
auto websocket = kj::mv(releasePackage.webSocketRef);
484484
websocket->initiateHibernatableRelease(lock, kj::mv(releasePackage.ownedWebSocket),
485485
api::WebSocket::HibernatableReleaseState::CLOSE);
486-
KJ_IF_MAYBE(h, exportedHandler) {
487-
KJ_IF_MAYBE(handler, h->webSocketClose) {
488-
auto promise = (*handler)(lock, kj::mv(websocket), close.code, kj::mv(close.reason),
486+
KJ_IF_SOME(h, exportedHandler) {
487+
KJ_IF_SOME(handler, h.webSocketClose) {
488+
auto promise = handler(lock, kj::mv(websocket), close.code, kj::mv(close.reason),
489489
close.wasClean);
490490
event->waitUntil(kj::mv(promise));
491491
}
@@ -510,9 +510,9 @@ void ServiceWorkerGlobalScope::sendHibernatableWebSocketError(
510510
WebSocket::HibernatableReleaseState::ERROR);
511511
jsg::Lock& js(lock);
512512

513-
KJ_IF_MAYBE(h, exportedHandler) {
514-
KJ_IF_MAYBE(handler, h->webSocketError) {
515-
auto promise = (*handler)(js, kj::mv(websocket), js.exceptionToJs(kj::mv(e)));
513+
KJ_IF_SOME(h, exportedHandler) {
514+
KJ_IF_SOME(handler, h.webSocketError) {
515+
auto promise = handler(js, kj::mv(websocket), js.exceptionToJs(kj::mv(e)));
516516
event->waitUntil(kj::mv(promise));
517517
}
518518
// We want to deliver an error, but if no webSocketError handler is exported, we shouldn't fail
@@ -577,8 +577,8 @@ void ServiceWorkerGlobalScope::queueMicrotask(
577577
// to microtasks scheduled using EnqueueMicrotask, so we have to wrap in order to propagate
578578
// the context to those. Once V8 is fixed to correctly associate continuation data with
579579
// microtasks automatically, we can remove this workaround.
580-
KJ_IF_MAYBE(context, jsg::AsyncContextFrame::current(js)) {
581-
task = context->wrap(js, task);
580+
KJ_IF_SOME(context, jsg::AsyncContextFrame::current(js)) {
581+
task = context.wrap(js, task);
582582
}
583583
js.v8Isolate->EnqueueMicrotask(task);
584584
}
@@ -587,9 +587,9 @@ jsg::JsValue ServiceWorkerGlobalScope::structuredClone(
587587
jsg::Lock& js,
588588
jsg::JsValue value,
589589
jsg::Optional<StructuredCloneOptions> maybeOptions) {
590-
KJ_IF_MAYBE(options, maybeOptions) {
591-
KJ_IF_MAYBE(transfer, options->transfer) {
592-
auto transfers = KJ_MAP(i, *transfer) {
590+
KJ_IF_SOME(options, maybeOptions) {
591+
KJ_IF_SOME(transfer, options.transfer) {
592+
auto transfers = KJ_MAP(i, transfer) {
593593
return i.getHandle(js);
594594
};
595595
return value.structuredClone(js, kj::mv(transfers));
@@ -631,8 +631,8 @@ TimeoutId::NumberType ServiceWorkerGlobalScope::setTimeout(
631631
}
632632

633633
void ServiceWorkerGlobalScope::clearTimeout(kj::Maybe<TimeoutId::NumberType> timeoutId) {
634-
KJ_IF_MAYBE(id, timeoutId) {
635-
IoContext::current().clearTimeoutImpl(TimeoutId::fromNumber(*id));
634+
KJ_IF_SOME(id, timeoutId) {
635+
IoContext::current().clearTimeoutImpl(TimeoutId::fromNumber(id));
636636
}
637637
}
638638

@@ -671,7 +671,7 @@ jsg::Ref<CacheStorage> ServiceWorkerGlobalScope::getCaches() {
671671
jsg::Promise<jsg::Ref<Response>> ServiceWorkerGlobalScope::fetch(
672672
jsg::Lock& js, kj::OneOf<jsg::Ref<Request>, kj::String> requestOrUrl,
673673
jsg::Optional<Request::Initializer> requestInit) {
674-
return fetchImpl(js, nullptr, kj::mv(requestOrUrl), kj::mv(requestInit));
674+
return fetchImpl(js, kj::none, kj::mv(requestOrUrl), kj::mv(requestInit));
675675
}
676676

677677
double Performance::now() {
@@ -683,8 +683,8 @@ double Performance::now() {
683683
#ifdef WORKERD_EXPERIMENTAL_ENABLE_WEBGPU
684684
jsg::Ref<api::gpu::GPU> Navigator::getGPU(CompatibilityFlags::Reader flags) {
685685
// is this a durable object?
686-
KJ_IF_MAYBE (actor, IoContext::current().getActor()) {
687-
JSG_REQUIRE(actor->getPersistent() != nullptr, TypeError,
686+
KJ_IF_SOME (actor, IoContext::current().getActor()) {
687+
JSG_REQUIRE(actor.getPersistent() != kj::none, TypeError,
688688
"webgpu api is only available in Durable Objects (no storage)");
689689
} else {
690690
JSG_FAIL_REQUIRE(TypeError, "webgpu api is only available in Durable Objects");

src/workerd/api/global-scope.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,7 @@ struct ExportedHandler {
224224
// so that they don't interfere with `JSG_STRUCT`'s machinations.
225225

226226
jsg::Value env = nullptr;
227-
jsg::Optional<jsg::Ref<ExecutionContext>> ctx = nullptr;
227+
jsg::Optional<jsg::Ref<ExecutionContext>> ctx = kj::none;
228228
// TODO(cleanup): These are shoved here as a bit of a hack. At present, this is convenient and
229229
// works for all use cases. If we have bindings or things on ctx that vary on a per-request basis,
230230
// this won't work as well, I guess, but we can cross that bridge when we come to it.

0 commit comments

Comments
 (0)