mirror of
https://github.com/vercel-labs/scriptc.git
synced 2026-10-29 07:04:09 +08:00
Hash and Hmac values are Transforms, as in Node: they can be written and ended, piped into, used as pipeline() and stream/promises pipeline stages, read, and listened to, and setEncoding() applies to the digest they push. Each value gets one native Transform on its first stream use. The stream refers to its value without a reference; a pipe destination or pipeline stage holds the value until the stream flushes or is destroyed, and a destroyed stream is released so that listeners that capture the value do not keep it alive. After the stream flushes, a Hash answers one more digest() with the same digest and then throws ERR_CRYPTO_HASH_FINALIZED, and update() throws ERR_CRYPTO_HASH_UPDATE_FAILED; an Hmac answers digest() with an empty digest. A stream write after digest() reports ERR_CRYPTO_HASH_UPDATE_FAILED through 'error'. copy() of a Hash whose stream flushed, and stream use of a value after its stream closed, throw a coded SC2020 error. Writing a checked-dynamic value that is not null, a string or a view to any stream now throws ERR_INVALID_ARG_TYPE; it used to report the null-values error. Corpus 5760-5762 cover the piping, pipeline, setEncoding and event forms, the states after a flush, and the JavaScript forms, and errors.test.ts covers the two SC2020 errors.