feat: Implement Duplex destroy
Previously, there was no way to close a port reliably with this API. If you open a port, trying to .close before it's done opening would throw an error and leave the underlying port open. If you used node's .destroy(), stream.addAbortSignal(), or [Symbol.asyncDispose], the underlying port would remain in an open state.
This change implements the Duplex.destroy method. This is different from .close in that once a SerialPortStream is destroyed, it cannot be opened again.
@reconbot Could you please take a look at this?
@reconbot, could you please let me know if this PR is in the right direction? Or if there's some other intended way to clean up a SerialPort object?
+1 - would also like to see this fix (or similar) merged, as the current behavior in #2776 is quite tricky to work around.
for your consideration, @reconbot
@HipsterBrown maybe you can help?
Rebased
@reconbot I think this PR is production-ready. If not, could you please let me know what I need to do?