From 8f207c0f3f3a43d77e0c88cfdc840b4b742b9708 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Thu, 9 Mar 2023 10:56:19 -0400 Subject: refactor: Split extension registration for runtime and snapshotting (#18095) This commit splits "::init" functions into "init_ops" and "init_ops_and_esm". That way we don't have to construct list of ESM sources on each startup if we're running with a snapshot. In a follow up commit "deno_core" will be changed to not have a split between "extensions" and "extensions_with_js" - it will be embedders' responsibility to pass appropriately configured extensions. Prerequisite for https://github.com/denoland/deno/pull/18080 --- ext/url/benches/url_ops.rs | 4 ++-- ext/url/lib.rs | 34 +++++++++++++++++++++++----------- 2 files changed, 25 insertions(+), 13 deletions(-) (limited to 'ext/url') diff --git a/ext/url/benches/url_ops.rs b/ext/url/benches/url_ops.rs index 1be1fd593..7dc2651b2 100644 --- a/ext/url/benches/url_ops.rs +++ b/ext/url/benches/url_ops.rs @@ -11,8 +11,8 @@ use deno_core::ExtensionFileSourceCode; fn setup() -> Vec { vec![ - deno_webidl::init(), - deno_url::init(), + deno_webidl::init_esm(), + deno_url::init_ops_and_esm(), Extension::builder("bench_setup") .esm(vec![ExtensionFileSource { specifier: "ext:setup".to_string(), diff --git a/ext/url/lib.rs b/ext/url/lib.rs index f1295a13f..8a20c9bc6 100644 --- a/ext/url/lib.rs +++ b/ext/url/lib.rs @@ -10,6 +10,7 @@ use deno_core::url::form_urlencoded; use deno_core::url::quirks; use deno_core::url::Url; use deno_core::Extension; +use deno_core::ExtensionBuilder; use deno_core::OpState; use deno_core::ZeroCopyBuf; use std::path::PathBuf; @@ -17,22 +18,33 @@ use std::path::PathBuf; use crate::urlpattern::op_urlpattern_parse; use crate::urlpattern::op_urlpattern_process_match_input; -pub fn init() -> Extension { +fn ext() -> ExtensionBuilder { Extension::builder_with_deps(env!("CARGO_PKG_NAME"), &["deno_webidl"]) +} + +fn ops(ext: &mut ExtensionBuilder) -> &mut ExtensionBuilder { + ext.ops(vec![ + op_url_reparse::decl(), + op_url_parse::decl(), + op_url_get_serialization::decl(), + op_url_parse_with_base::decl(), + op_url_parse_search_params::decl(), + op_url_stringify_search_params::decl(), + op_urlpattern_parse::decl(), + op_urlpattern_process_match_input::decl(), + ]) +} + +pub fn init_ops_and_esm() -> Extension { + ops(&mut ext()) .esm(include_js_files!("00_url.js", "01_urlpattern.js",)) - .ops(vec![ - op_url_reparse::decl(), - op_url_parse::decl(), - op_url_get_serialization::decl(), - op_url_parse_with_base::decl(), - op_url_parse_search_params::decl(), - op_url_stringify_search_params::decl(), - op_urlpattern_parse::decl(), - op_urlpattern_process_match_input::decl(), - ]) .build() } +pub fn init_ops() -> Extension { + ops(&mut ext()).build() +} + /// Parse `href` with a `base_href`. Fills the out `buf` with URL components. #[op] pub fn op_url_parse_with_base( -- cgit v1.2.3