summaryrefslogtreecommitdiff
path: root/runtime/ops/os
diff options
context:
space:
mode:
authorMatt Mastracci <matthew@mastracci.com>2023-03-17 12:22:15 -0600
committerGitHub <noreply@github.com>2023-03-17 18:22:15 +0000
commite55b448730160a6e4df9815a268d4049ac89deab (patch)
tree35d80fd60f2f1d1d06903caff256484a7d703d76 /runtime/ops/os
parent0bc6bf5d33b8198253954d7f04558270de45c925 (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 'runtime/ops/os')
-rw-r--r--runtime/ops/os/mod.rs86
1 files changed, 43 insertions, 43 deletions
diff --git a/runtime/ops/os/mod.rs b/runtime/ops/os/mod.rs
index b2c67db5c..87181654b 100644
--- a/runtime/ops/os/mod.rs
+++ b/runtime/ops/os/mod.rs
@@ -8,8 +8,6 @@ use deno_core::error::AnyError;
use deno_core::op;
use deno_core::url::Url;
use deno_core::v8;
-use deno_core::Extension;
-use deno_core::ExtensionBuilder;
use deno_core::OpState;
use deno_node::NODE_ENV_VAR_ALLOWLIST;
use serde::Serialize;
@@ -18,47 +16,49 @@ use std::env;
mod sys_info;
-fn init_ops(builder: &mut ExtensionBuilder) -> &mut ExtensionBuilder {
- builder.ops(vec![
- op_env::decl(),
- op_exec_path::decl(),
- op_exit::decl(),
- op_delete_env::decl(),
- op_get_env::decl(),
- op_gid::decl(),
- op_hostname::decl(),
- op_loadavg::decl(),
- op_network_interfaces::decl(),
- op_os_release::decl(),
- op_os_uptime::decl(),
- op_node_unstable_os_uptime::decl(),
- op_set_env::decl(),
- op_set_exit_code::decl(),
- op_system_memory_info::decl(),
- op_uid::decl(),
- op_runtime_memory_usage::decl(),
- ])
-}
-
-pub fn init(exit_code: ExitCode) -> Extension {
- let mut builder = Extension::builder("deno_os");
- init_ops(&mut builder)
- .state(move |state| {
- state.put::<ExitCode>(exit_code.clone());
- })
- .build()
-}
-
-pub fn init_for_worker() -> Extension {
- let mut builder = Extension::builder("deno_os_worker");
- init_ops(&mut builder)
- .middleware(|op| match op.name {
- "op_exit" => noop_op::decl(),
- "op_set_exit_code" => noop_op::decl(),
- _ => op,
- })
- .build()
-}
+deno_core::ops!(
+ deno_ops,
+ [
+ op_env,
+ op_exec_path,
+ op_exit,
+ op_delete_env,
+ op_get_env,
+ op_gid,
+ op_hostname,
+ op_loadavg,
+ op_network_interfaces,
+ op_os_release,
+ op_os_uptime,
+ op_node_unstable_os_uptime,
+ op_set_env,
+ op_set_exit_code,
+ op_system_memory_info,
+ op_uid,
+ op_runtime_memory_usage,
+ ]
+);
+
+deno_core::extension!(
+ deno_os,
+ ops_fn = deno_ops,
+ config = {
+ exit_code: ExitCode,
+ },
+ state = |state, exit_code| {
+ state.put::<ExitCode>(exit_code);
+ },
+);
+
+deno_core::extension!(
+ deno_os_worker,
+ ops_fn = deno_ops,
+ middleware = |op| match op.name {
+ "op_exit" => noop_op::decl(),
+ "op_set_exit_code" => noop_op::decl(),
+ _ => op,
+ },
+);
#[op]
fn noop_op() -> Result<(), AnyError> {