diff --git a/src/workerd/api/actor-state.c++ b/src/workerd/api/actor-state.c++ index bdc30205528..44ae34a39f7 100644 --- a/src/workerd/api/actor-state.c++ +++ b/src/workerd/api/actor-state.c++ @@ -904,7 +904,7 @@ kj::Maybe DurableObjectState::getWebSocketAutoResponseTimestamp(jsg::R } kj::Array serializeV8Value(jsg::Lock& js, v8::Local value) { - jsg::Serializer serializer(js.v8Isolate, jsg::Serializer::Options { + jsg::Serializer serializer(js, jsg::Serializer::Options { .version = 15, .omitHeader = false, }); @@ -960,7 +960,7 @@ v8::Local deserializeV8Value(jsg::Lock& js, options.readHeader = false; } - jsg::Deserializer deserializer(js.v8Isolate, buf, nullptr, nullptr, options); + jsg::Deserializer deserializer(js, buf, nullptr, nullptr, options); v8::Local value; try { diff --git a/src/workerd/api/global-scope.c++ b/src/workerd/api/global-scope.c++ index 2a98eb1f8a9..44f8d51eb8f 100644 --- a/src/workerd/api/global-scope.c++ +++ b/src/workerd/api/global-scope.c++ @@ -672,7 +672,7 @@ v8::Local ServiceWorkerGlobalScope::structuredClone( return transfer.asPtr(); }); } - return jsg::structuredClone(value, js.v8Isolate, transfers); + return jsg::structuredClone(js, value, transfers); } TimeoutId::NumberType ServiceWorkerGlobalScope::setTimeoutInternal( diff --git a/src/workerd/api/http.c++ b/src/workerd/api/http.c++ index 4e1055979b2..f5c05e9b9b4 100644 --- a/src/workerd/api/http.c++ +++ b/src/workerd/api/http.c++ @@ -2021,7 +2021,7 @@ jsg::Promise Fetcher::queue( auto encodedMessages = kj::heapArrayBuilder(messages.size()); for (auto& msg : messages) { - jsg::Serializer serializer(js.v8Isolate, jsg::Serializer::Options { + jsg::Serializer serializer(js, jsg::Serializer::Options { .version = 15, .omitHeader = false, }); diff --git a/src/workerd/api/node/diagnostics-channel.c++ b/src/workerd/api/node/diagnostics-channel.c++ index 8b0720a73aa..39511c9fa75 100644 --- a/src/workerd/api/node/diagnostics-channel.c++ +++ b/src/workerd/api/node/diagnostics-channel.c++ @@ -24,7 +24,7 @@ void Channel::publish(jsg::Lock& js, jsg::Value message) { auto& context = IoContext::current(); KJ_IF_MAYBE(tracer, context.getWorkerTracer()) { - jsg::Serializer ser(js.v8Isolate, jsg::Serializer::Options { + jsg::Serializer ser(js, jsg::Serializer::Options { .omitHeader = false, }); ser.write(message.getHandle(js)); diff --git a/src/workerd/api/queue.c++ b/src/workerd/api/queue.c++ index dfa7b5b6d49..8776c2a3a50 100644 --- a/src/workerd/api/queue.c++ +++ b/src/workerd/api/queue.c++ @@ -40,7 +40,7 @@ struct Serialized { Serialized serializeV8(jsg::Lock& js, v8::Local body) { // Use a specific serialization version to avoid sending messages using a new version before all // runtimes at the edge know how to read it. - jsg::Serializer serializer(js.v8Isolate, jsg::Serializer::Options { + jsg::Serializer serializer(js, jsg::Serializer::Options { .version = 15, .omitHeader = false, }); @@ -277,7 +277,7 @@ jsg::Value deserialize(jsg::Lock& js, kj::Array body, kj::Maybe TraceDiagnosticChannelEvent::getMessage(jsg::Lock& js) { // This is a lazy property that is evaluated at most once, so it is ok to move the message here. if (message.size() == 0) return js.v8Undefined(); - jsg::Deserializer des(js.v8Isolate, kj::mv(message)); + jsg::Deserializer des(js, kj::mv(message)); return des.readValue(); } diff --git a/src/workerd/api/web-socket.c++ b/src/workerd/api/web-socket.c++ index f74f006f41b..2b4ec660e10 100644 --- a/src/workerd/api/web-socket.c++ +++ b/src/workerd/api/web-socket.c++ @@ -634,7 +634,7 @@ kj::Maybe WebSocket::getExtensions() { kj::Maybe> WebSocket::deserializeAttachment(jsg::Lock& js) { return serializedAttachment.map([&](kj::ArrayPtr attachment) { - jsg::Deserializer deserializer(js.v8Isolate, attachment, nullptr, nullptr, + jsg::Deserializer deserializer(js, attachment, nullptr, nullptr, jsg::Deserializer::Options { .version = 15, .readHeader = true, @@ -645,7 +645,7 @@ kj::Maybe> WebSocket::deserializeAttachment(jsg::Lock& js) } void WebSocket::serializeAttachment(jsg::Lock& js, v8::Local attachment) { - jsg::Serializer serializer(js.v8Isolate, jsg::Serializer::Options { + jsg::Serializer serializer(js, jsg::Serializer::Options { .version = 15, .omitHeader = false, }); diff --git a/src/workerd/jsg/ser.c++ b/src/workerd/jsg/ser.c++ index b491e2c4460..d1293df091e 100644 --- a/src/workerd/jsg/ser.c++ +++ b/src/workerd/jsg/ser.c++ @@ -6,8 +6,8 @@ namespace workerd::jsg { -Serializer::Serializer(v8::Isolate* isolate, kj::Maybe maybeOptions) - : isolate(isolate), +Serializer::Serializer(Lock& js, kj::Maybe maybeOptions) + : isolate(js.v8Isolate), ser(isolate, this) { auto options = maybeOptions.orDefault({}); KJ_IF_MAYBE(version, options.version) { @@ -116,20 +116,20 @@ void SerializedBufferDisposer::disposeImpl( } v8::Local structuredClone( + Lock& js, v8::Local value, - v8::Isolate* isolate, kj::Maybe> maybeTransfer) { - Serializer ser(isolate, nullptr); + Serializer ser(js, nullptr); KJ_IF_MAYBE(transfers, maybeTransfer) { for (auto& item : *transfers) { - auto val = item.getHandle(isolate); + auto val = item.getHandle(js); JSG_REQUIRE(val->IsArrayBuffer(), TypeError, "Object is not transferable"); ser.transfer(val.As()); } } ser.write(value); auto released = ser.release(); - Deserializer des(isolate, released, nullptr); + Deserializer des(js, released, nullptr); return des.readValue(); } diff --git a/src/workerd/jsg/ser.h b/src/workerd/jsg/ser.h index 6bde6fb178a..cfaeb4717f5 100644 --- a/src/workerd/jsg/ser.h +++ b/src/workerd/jsg/ser.h @@ -25,7 +25,7 @@ class Serializer final: v8::ValueSerializer::Delegate { kj::Array> transferedArrayBuffers; }; - explicit Serializer(v8::Isolate* isolate, kj::Maybe maybeOptions = nullptr); + explicit Serializer(Lock& js, kj::Maybe maybeOptions = nullptr); inline ~Serializer() noexcept(true) {} // noexcept(true) because Delegate's is noexcept @@ -65,23 +65,23 @@ class Deserializer final: v8::ValueDeserializer::Delegate { }; inline explicit Deserializer( - v8::Isolate* isolate, + Lock& js, auto data, kj::Maybe>> transferedArrayBuffers = nullptr, kj::Maybe>> sharedArrayBuffers = nullptr, kj::Maybe maybeOptions = nullptr) - : isolate(isolate), + : isolate(js.v8Isolate), deser(isolate, data.begin(), data.size(), this), sharedBackingStores(kj::mv(sharedArrayBuffers)) { init(kj::mv(transferedArrayBuffers), kj::mv(maybeOptions)); } inline explicit Deserializer( - v8::Isolate* isolate, + Lock& js, Serializer::Released& released, kj::Maybe maybeOptions = nullptr) : Deserializer( - isolate, + js, released.data.asPtr(), released.transferedArrayBuffers.asPtr(), released.sharedArrayBuffers.asPtr(), @@ -116,8 +116,8 @@ class SerializedBufferDisposer: public kj::ArrayDisposer { constexpr SerializedBufferDisposer SERIALIZED_BUFFER_DISPOSER; v8::Local structuredClone( + Lock& js, v8::Local value, - v8::Isolate* isolate, kj::Maybe> maybeTransfer = nullptr); } // namespace workerd::jsg