@@ -1130,7 +1130,9 @@ template <typename Self>
11301130WritableImpl<Self>::WritableImpl(
11311131 jsg::Lock& js, WritableStream& owner, jsg::Ref<AbortSignal> abortSignal)
11321132 : owner(owner.addWeakRef()),
1133- signal (kj::mv(abortSignal)) {}
1133+ signal (kj::mv(abortSignal)) {
1134+ flags.pedanticWpt = FeatureFlags::get (js).getPedanticWpt ();
1135+ }
11341136
11351137template <typename Self>
11361138jsg::Promise<void > WritableImpl<Self>::abort(
@@ -3244,7 +3246,11 @@ void WritableStreamDefaultController::error(
32443246 impl.error (js, JSG_THIS, reason.orDefault (js.undefined ()));
32453247}
32463248
3247- ssize_t WritableStreamDefaultController::getDesiredSize () {
3249+ kj::Maybe<ssize_t > WritableStreamDefaultController::getDesiredSize () {
3250+ // Per the spec, desiredSize should be null when the stream is erroring.
3251+ if (impl.flags .pedanticWpt && isErroring ()) {
3252+ return kj::none;
3253+ }
32483254 return impl.getDesiredSize ();
32493255}
32503256
@@ -3403,7 +3409,7 @@ kj::Maybe<int> WritableStreamJsController::getDesiredSize() {
34033409 return kj::none;
34043410 }
34053411 KJ_CASE_ONEOF (controller, Controller) {
3406- return controller->getDesiredSize ();
3412+ return controller->getDesiredSize (). map ([]( ssize_t size) -> int { return size; }) ;
34073413 }
34083414 }
34093415 KJ_UNREACHABLE;
@@ -3416,6 +3422,10 @@ kj::Maybe<v8::Local<v8::Value>> WritableStreamJsController::isErroring(jsg::Lock
34163422 return kj::none;
34173423}
34183424
3425+ bool WritableStreamDefaultController::isErroring () const {
3426+ return impl.state .is <StreamStates::Erroring>();
3427+ }
3428+
34193429kj::Maybe<v8::Local<v8::Value>> WritableStreamJsController::isErroredOrErroring (jsg::Lock& js) {
34203430 KJ_IF_SOME (err, state.tryGet <StreamStates::Errored>()) {
34213431 return err.getHandle (js);
0 commit comments