From e55b448730160a6e4df9815a268d4049ac89deab Mon Sep 17 00:00:00 2001 From: Matt Mastracci Date: Fri, 17 Mar 2023 12:22:15 -0600 Subject: feat(core) deno_core::extension! macro to simplify extension registration (#18210) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- ext/crypto/lib.rs | 105 ++++++++++++++++++++++-------------------------------- 1 file changed, 43 insertions(+), 62 deletions(-) (limited to 'ext/crypto') 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, -) -> &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) -> Extension { - ops(&mut ext(), maybe_seed) - .esm(include_js_files!("00_crypto.js", "01_webidl.js",)) - .build() -} - -pub fn init_ops(maybe_seed: Option) -> 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, + }, + 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 { -- cgit v1.2.3