Closed FiloSottile closed 1 year ago
So huh, I guess the const assignment I am doing in non-test code is also not ok, but happens to work because non-crypto functions don't need to await ready. I hate this.
So huh, I guess the const assignment I am doing in non-test code is also not ok, but happens to work because non-crypto functions don't need to await ready.
If you do the const
assignment after libsodium.ready
I think you should be able to destructure everything the same way you do imports. But what you have now also works (assuming `libsodium-wrappers-sumo' doesn't change instantiation semantics for the non-crypto methods).
// before
import { crypto_hash_sha256, from_hex, to_hex } from "libsodium-wrappers-sumo";
// after
import sodium from "libsodium-wrappers-sumo"
await sodium.ready
const { crypto_hash_sha256, from_hex, to_hex } = sodium; // now we can get crypto as well as non-crypto exports
Or you could just YOLO and make all your APIs async (which would have the benefit of allowing automatic offloading to a web worker for key derivation in the future if you want). 😛
If you do the
const
assignment afterlibsodium.ready
I think you should be able to destructure everything the same way you do imports. But what you have now also works (assuming `libsodium-wrappers-sumo' doesn't change instantiation semantics for the non-crypto methods).
I filed jedisct1/libsodium.js#327 to hopefully get even the crypto functions to be safe to assign before ready
. If it doesn't get resolved that way, maybe I'll switch everything to be safe.
In the test files it's a matter of switching the order, but in format.ts
will require just not destructuring, because we don't call ready
ourselves.
Or you could just YOLO and make all your APIs async (which would have the benefit of allowing automatic offloading to a web worker for key derivation in the future if you want). 😛
I had that in a previous iteration and kinda hated that it gave the impression the whole operation would be async, and then we'd block for scrypt after maybe awaiting ready (the first time).
Now with Puppeteer tests for esbuild! Thank you for all the pointers @lgarron. Let me know if there's anything missing from #11.
Reopening #13 which I merged by mistake.