diff options
author | Matt Mastracci <matthew@mastracci.com> | 2023-03-17 12:22:15 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-03-17 18:22:15 +0000 |
commit | e55b448730160a6e4df9815a268d4049ac89deab (patch) | |
tree | 35d80fd60f2f1d1d06903caff256484a7d703d76 /ext/crypto/lib.rs | |
parent | 0bc6bf5d33b8198253954d7f04558270de45c925 (diff) |
feat(core) deno_core::extension! macro to simplify extension registration (#18210)
This implements two macros to simplify extension registration and centralize a lot of the boilerplate as a base for future improvements:
* `deno_core::ops!` registers a block of `#[op]`s, optionally with type
parameters, useful for places where we share lists of ops
* `deno_core::extension!` is used to register an extension, and creates
two methods that can be used at runtime/snapshot generation time:
`init_ops` and `init_ops_and_esm`.
---------
Co-authored-by: Bartek IwaĆczuk <biwanczuk@gmail.com>
Diffstat (limited to 'ext/crypto/lib.rs')
-rw-r--r-- | ext/crypto/lib.rs | 105 |
1 files changed, 43 insertions, 62 deletions
diff --git a/ext/crypto/lib.rs b/ext/crypto/lib.rs index 89ca8e0d6..48c5acf4a 100644 --- a/ext/crypto/lib.rs +++ b/ext/crypto/lib.rs @@ -8,11 +8,8 @@ use deno_core::error::custom_error; use deno_core::error::not_supported; use deno_core::error::type_error; use deno_core::error::AnyError; -use deno_core::include_js_files; use deno_core::op; -use deno_core::ExtensionBuilder; -use deno_core::Extension; use deno_core::OpState; use deno_core::ZeroCopyBuf; use serde::Deserialize; @@ -73,65 +70,49 @@ use crate::key::CryptoNamedCurve; use crate::key::HkdfOutput; use crate::shared::RawKeyData; -fn ext() -> ExtensionBuilder { - Extension::builder_with_deps( - env!("CARGO_PKG_NAME"), - &["deno_webidl", "deno_web"], - ) -} - -fn ops( - ext: &mut ExtensionBuilder, - maybe_seed: Option<u64>, -) -> &mut ExtensionBuilder { - ext - .ops(vec![ - op_crypto_get_random_values::decl(), - op_crypto_generate_key::decl(), - op_crypto_sign_key::decl(), - op_crypto_verify_key::decl(), - op_crypto_derive_bits::decl(), - op_crypto_import_key::decl(), - op_crypto_export_key::decl(), - op_crypto_encrypt::decl(), - op_crypto_decrypt::decl(), - op_crypto_subtle_digest::decl(), - op_crypto_random_uuid::decl(), - op_crypto_wrap_key::decl(), - op_crypto_unwrap_key::decl(), - op_crypto_base64url_decode::decl(), - op_crypto_base64url_encode::decl(), - x25519::op_generate_x25519_keypair::decl(), - x25519::op_derive_bits_x25519::decl(), - x25519::op_import_spki_x25519::decl(), - x25519::op_import_pkcs8_x25519::decl(), - ed25519::op_generate_ed25519_keypair::decl(), - ed25519::op_import_spki_ed25519::decl(), - ed25519::op_import_pkcs8_ed25519::decl(), - ed25519::op_sign_ed25519::decl(), - ed25519::op_verify_ed25519::decl(), - ed25519::op_export_spki_ed25519::decl(), - ed25519::op_export_pkcs8_ed25519::decl(), - ed25519::op_jwk_x_ed25519::decl(), - x25519::op_export_spki_x25519::decl(), - x25519::op_export_pkcs8_x25519::decl(), - ]) - .state(move |state| { - if let Some(seed) = maybe_seed { - state.put(StdRng::seed_from_u64(seed)); - } - }) -} - -pub fn init_ops_and_esm(maybe_seed: Option<u64>) -> Extension { - ops(&mut ext(), maybe_seed) - .esm(include_js_files!("00_crypto.js", "01_webidl.js",)) - .build() -} - -pub fn init_ops(maybe_seed: Option<u64>) -> Extension { - ops(&mut ext(), maybe_seed).build() -} +deno_core::extension!(deno_crypto, + deps = [ deno_webidl, deno_web ], + ops = [ + op_crypto_get_random_values, + op_crypto_generate_key, + op_crypto_sign_key, + op_crypto_verify_key, + op_crypto_derive_bits, + op_crypto_import_key, + op_crypto_export_key, + op_crypto_encrypt, + op_crypto_decrypt, + op_crypto_subtle_digest, + op_crypto_random_uuid, + op_crypto_wrap_key, + op_crypto_unwrap_key, + op_crypto_base64url_decode, + op_crypto_base64url_encode, + x25519::op_generate_x25519_keypair, + x25519::op_derive_bits_x25519, + x25519::op_import_spki_x25519, + x25519::op_import_pkcs8_x25519, + ed25519::op_generate_ed25519_keypair, + ed25519::op_import_spki_ed25519, + ed25519::op_import_pkcs8_ed25519, + ed25519::op_sign_ed25519, + ed25519::op_verify_ed25519, + ed25519::op_export_spki_ed25519, + ed25519::op_export_pkcs8_ed25519, + ed25519::op_jwk_x_ed25519, + x25519::op_export_spki_x25519, + x25519::op_export_pkcs8_x25519, + ], + esm = [ "00_crypto.js", "01_webidl.js" ], + config = { + maybe_seed: Option<u64>, + }, + state = |state, maybe_seed| { + if let Some(seed) = maybe_seed { + state.put(StdRng::seed_from_u64(seed)); + } + }, +); #[op] pub fn op_crypto_base64url_decode(data: String) -> ZeroCopyBuf { |