personally I prefer without chaining, makes much more sense as its what I've always seen until the last ~5 years.
The other part you didn't mention is that you have to amend all the functions like getFish, skin etc to return the object which I think makes their signature unnecessarily less clear.
Yeah, just because something looks like chaining doesn't mean it's really repeated calls on the same object. Even with some static-checking of types, it could also be a copy of the object.
While blocky, the repeated thing.do() format is explicit about what object is being operated on.