summaryrefslogtreecommitdiff
path: root/ext/fs/lib.rs
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 /ext/fs/lib.rs
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 'ext/fs/lib.rs')
-rw-r--r--ext/fs/lib.rs161
1 files changed, 72 insertions, 89 deletions
diff --git a/ext/fs/lib.rs b/ext/fs/lib.rs
index 746d40dff..48b0e3495 100644
--- a/ext/fs/lib.rs
+++ b/ext/fs/lib.rs
@@ -4,12 +4,9 @@
use deno_core::error::custom_error;
use deno_core::error::type_error;
use deno_core::error::AnyError;
-use deno_core::include_js_files;
use deno_core::op;
use deno_core::CancelFuture;
use deno_core::CancelHandle;
-use deno_core::Extension;
-use deno_core::ExtensionBuilder;
use deno_core::OpState;
use deno_core::ResourceId;
use deno_core::ZeroCopyBuf;
@@ -118,92 +115,78 @@ use deno_core::error::generic_error;
#[cfg(not(unix))]
use deno_core::error::not_supported;
-fn ext() -> ExtensionBuilder {
- Extension::builder("deno_fs")
-}
-
-fn ops<P: FsPermissions + 'static>(
- ext: &mut ExtensionBuilder,
- unstable: bool,
-) -> &mut ExtensionBuilder {
- ext
- .state(move |state| {
- state.put(UnstableChecker { unstable });
- })
- .ops(vec![
- op_open_sync::decl::<P>(),
- op_open_async::decl::<P>(),
- op_write_file_sync::decl::<P>(),
- op_write_file_async::decl::<P>(),
- op_seek_sync::decl(),
- op_seek_async::decl(),
- op_fdatasync_sync::decl(),
- op_fdatasync_async::decl(),
- op_fsync_sync::decl(),
- op_fsync_async::decl(),
- op_fstat_sync::decl(),
- op_fstat_async::decl(),
- op_flock_sync::decl(),
- op_flock_async::decl(),
- op_funlock_sync::decl(),
- op_funlock_async::decl(),
- op_umask::decl(),
- op_chdir::decl::<P>(),
- op_mkdir_sync::decl::<P>(),
- op_mkdir_async::decl::<P>(),
- op_chmod_sync::decl::<P>(),
- op_chmod_async::decl::<P>(),
- op_chown_sync::decl::<P>(),
- op_chown_async::decl::<P>(),
- op_remove_sync::decl::<P>(),
- op_remove_async::decl::<P>(),
- op_copy_file_sync::decl::<P>(),
- op_copy_file_async::decl::<P>(),
- op_stat_sync::decl::<P>(),
- op_stat_async::decl::<P>(),
- op_realpath_sync::decl::<P>(),
- op_realpath_async::decl::<P>(),
- op_read_dir_sync::decl::<P>(),
- op_read_dir_async::decl::<P>(),
- op_rename_sync::decl::<P>(),
- op_rename_async::decl::<P>(),
- op_link_sync::decl::<P>(),
- op_link_async::decl::<P>(),
- op_symlink_sync::decl::<P>(),
- op_symlink_async::decl::<P>(),
- op_read_link_sync::decl::<P>(),
- op_read_link_async::decl::<P>(),
- op_ftruncate_sync::decl(),
- op_ftruncate_async::decl(),
- op_truncate_sync::decl::<P>(),
- op_truncate_async::decl::<P>(),
- op_make_temp_dir_sync::decl::<P>(),
- op_make_temp_dir_async::decl::<P>(),
- op_make_temp_file_sync::decl::<P>(),
- op_make_temp_file_async::decl::<P>(),
- op_cwd::decl::<P>(),
- op_futime_sync::decl(),
- op_futime_async::decl(),
- op_utime_sync::decl::<P>(),
- op_utime_async::decl::<P>(),
- op_readfile_sync::decl::<P>(),
- op_readfile_text_sync::decl::<P>(),
- op_readfile_async::decl::<P>(),
- op_readfile_text_async::decl::<P>(),
- ])
-}
-
-pub fn init_ops_and_esm<P: FsPermissions + 'static>(
- unstable: bool,
-) -> Extension {
- ops::<P>(&mut ext(), unstable)
- .esm(include_js_files!("30_fs.js",))
- .build()
-}
-
-pub fn init_ops<P: FsPermissions + 'static>(unstable: bool) -> Extension {
- ops::<P>(&mut ext(), unstable).build()
-}
+deno_core::extension!(deno_fs,
+ deps = [ deno_web, deno_io ],
+ parameters = [P: FsPermissions],
+ ops = [
+ op_open_sync<P>,
+ op_open_async<P>,
+ op_write_file_sync<P>,
+ op_write_file_async<P>,
+ op_seek_sync,
+ op_seek_async,
+ op_fdatasync_sync,
+ op_fdatasync_async,
+ op_fsync_sync,
+ op_fsync_async,
+ op_fstat_sync,
+ op_fstat_async,
+ op_flock_sync,
+ op_flock_async,
+ op_funlock_sync,
+ op_funlock_async,
+ op_umask,
+ op_chdir<P>,
+ op_mkdir_sync<P>,
+ op_mkdir_async<P>,
+ op_chmod_sync<P>,
+ op_chmod_async<P>,
+ op_chown_sync<P>,
+ op_chown_async<P>,
+ op_remove_sync<P>,
+ op_remove_async<P>,
+ op_copy_file_sync<P>,
+ op_copy_file_async<P>,
+ op_stat_sync<P>,
+ op_stat_async<P>,
+ op_realpath_sync<P>,
+ op_realpath_async<P>,
+ op_read_dir_sync<P>,
+ op_read_dir_async<P>,
+ op_rename_sync<P>,
+ op_rename_async<P>,
+ op_link_sync<P>,
+ op_link_async<P>,
+ op_symlink_sync<P>,
+ op_symlink_async<P>,
+ op_read_link_sync<P>,
+ op_read_link_async<P>,
+ op_ftruncate_sync,
+ op_ftruncate_async,
+ op_truncate_sync<P>,
+ op_truncate_async<P>,
+ op_make_temp_dir_sync<P>,
+ op_make_temp_dir_async<P>,
+ op_make_temp_file_sync<P>,
+ op_make_temp_file_async<P>,
+ op_cwd<P>,
+ op_futime_sync,
+ op_futime_async,
+ op_utime_sync<P>,
+ op_utime_async<P>,
+ op_readfile_sync<P>,
+ op_readfile_text_sync<P>,
+ op_readfile_async<P>,
+ op_readfile_text_async<P>,
+ ],
+ esm = [ "30_fs.js" ],
+ config = {
+ unstable: bool
+ },
+ state = |state, unstable| {
+ state.put(UnstableChecker { unstable });
+ },
+);
fn default_err_mapper(err: Error, desc: String) -> Error {
Error::new(err.kind(), format!("{err}, {desc}"))