diff options
Diffstat (limited to 'ext/node/polyfill.rs')
-rw-r--r-- | ext/node/polyfill.rs | 226 |
1 files changed, 107 insertions, 119 deletions
diff --git a/ext/node/polyfill.rs b/ext/node/polyfill.rs index 3d4a1a9fc..434c20b03 100644 --- a/ext/node/polyfill.rs +++ b/ext/node/polyfill.rs @@ -1,229 +1,217 @@ // Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -use deno_core::error::generic_error; -use deno_core::error::AnyError; -use deno_core::url::Url; -use deno_core::ModuleSpecifier; - -// TODO(bartlomieju): seems super wasteful to parse the specifier each time -pub fn resolve_builtin_node_module(module_name: &str) -> Result<Url, AnyError> { - if let Some(module) = find_builtin_node_module(module_name) { - return Ok(ModuleSpecifier::parse(module.specifier).unwrap()); - } - - Err(generic_error(format!( - "Unknown built-in \"node:\" module: {module_name}" - ))) -} - -fn find_builtin_node_module(module_name: &str) -> Option<&NodeModulePolyfill> { +/// e.g. `is_builtin_node_module("assert")` +pub fn is_builtin_node_module(module_name: &str) -> bool { SUPPORTED_BUILTIN_NODE_MODULES .iter() - .find(|m| m.name == module_name) -} - -pub fn is_builtin_node_module(module_name: &str) -> bool { - find_builtin_node_module(module_name).is_some() + .any(|m| m.module_name() == module_name) } pub struct NodeModulePolyfill { /// Name of the module like "assert" or "timers/promises" - pub name: &'static str, pub specifier: &'static str, + pub ext_specifier: &'static str, +} + +impl NodeModulePolyfill { + pub fn module_name(&self) -> &'static str { + debug_assert!(self.specifier.starts_with("node:")); + &self.specifier[5..] + } } // NOTE(bartlomieju): keep this list in sync with `ext/node/polyfills/01_require.js` pub static SUPPORTED_BUILTIN_NODE_MODULES: &[NodeModulePolyfill] = &[ NodeModulePolyfill { - name: "assert", - specifier: "ext:deno_node/assert.ts", + specifier: "node:assert", + ext_specifier: "ext:deno_node/assert.ts", }, NodeModulePolyfill { - name: "assert/strict", - specifier: "ext:deno_node/assert/strict.ts", + specifier: "node:assert/strict", + ext_specifier: "ext:deno_node/assert/strict.ts", }, NodeModulePolyfill { - name: "async_hooks", - specifier: "ext:deno_node/async_hooks.ts", + specifier: "node:async_hooks", + ext_specifier: "ext:deno_node/async_hooks.ts", }, NodeModulePolyfill { - name: "buffer", - specifier: "ext:deno_node/buffer.ts", + specifier: "node:buffer", + ext_specifier: "ext:deno_node/buffer.ts", }, NodeModulePolyfill { - name: "child_process", - specifier: "ext:deno_node/child_process.ts", + specifier: "node:child_process", + ext_specifier: "ext:deno_node/child_process.ts", }, NodeModulePolyfill { - name: "cluster", - specifier: "ext:deno_node/cluster.ts", + specifier: "node:cluster", + ext_specifier: "ext:deno_node/cluster.ts", }, NodeModulePolyfill { - name: "console", - specifier: "ext:deno_node/console.ts", + specifier: "node:console", + ext_specifier: "ext:deno_node/console.ts", }, NodeModulePolyfill { - name: "constants", - specifier: "ext:deno_node/constants.ts", + specifier: "node:constants", + ext_specifier: "ext:deno_node/constants.ts", }, NodeModulePolyfill { - name: "crypto", - specifier: "ext:deno_node/crypto.ts", + specifier: "node:crypto", + ext_specifier: "ext:deno_node/crypto.ts", }, NodeModulePolyfill { - name: "dgram", - specifier: "ext:deno_node/dgram.ts", + specifier: "node:dgram", + ext_specifier: "ext:deno_node/dgram.ts", }, NodeModulePolyfill { - name: "diagnostics_channel", - specifier: "ext:deno_node/diagnostics_channel.ts", + specifier: "node:diagnostics_channel", + ext_specifier: "ext:deno_node/diagnostics_channel.ts", }, NodeModulePolyfill { - name: "dns", - specifier: "ext:deno_node/dns.ts", + specifier: "node:dns", + ext_specifier: "ext:deno_node/dns.ts", }, NodeModulePolyfill { - name: "dns/promises", - specifier: "ext:deno_node/dns/promises.ts", + specifier: "node:dns/promises", + ext_specifier: "ext:deno_node/dns/promises.ts", }, NodeModulePolyfill { - name: "domain", - specifier: "ext:deno_node/domain.ts", + specifier: "node:domain", + ext_specifier: "ext:deno_node/domain.ts", }, NodeModulePolyfill { - name: "events", - specifier: "ext:deno_node/events.ts", + specifier: "node:events", + ext_specifier: "ext:deno_node/events.ts", }, NodeModulePolyfill { - name: "fs", - specifier: "ext:deno_node/fs.ts", + specifier: "node:fs", + ext_specifier: "ext:deno_node/fs.ts", }, NodeModulePolyfill { - name: "fs/promises", - specifier: "ext:deno_node/fs/promises.ts", + specifier: "node:fs/promises", + ext_specifier: "ext:deno_node/fs/promises.ts", }, NodeModulePolyfill { - name: "http", - specifier: "ext:deno_node/http.ts", + specifier: "node:http", + ext_specifier: "ext:deno_node/http.ts", }, NodeModulePolyfill { - name: "http2", - specifier: "ext:deno_node/http2.ts", + specifier: "node:http2", + ext_specifier: "ext:deno_node/http2.ts", }, NodeModulePolyfill { - name: "https", - specifier: "ext:deno_node/https.ts", + specifier: "node:https", + ext_specifier: "ext:deno_node/https.ts", }, NodeModulePolyfill { - name: "module", - specifier: "ext:deno_node/01_require.js", + specifier: "node:module", + ext_specifier: "ext:deno_node/01_require.js", }, NodeModulePolyfill { - name: "net", - specifier: "ext:deno_node/net.ts", + specifier: "node:net", + ext_specifier: "ext:deno_node/net.ts", }, NodeModulePolyfill { - name: "os", - specifier: "ext:deno_node/os.ts", + specifier: "node:os", + ext_specifier: "ext:deno_node/os.ts", }, NodeModulePolyfill { - name: "path", - specifier: "ext:deno_node/path.ts", + specifier: "node:path", + ext_specifier: "ext:deno_node/path.ts", }, NodeModulePolyfill { - name: "path/posix", - specifier: "ext:deno_node/path/posix.ts", + specifier: "node:path/posix", + ext_specifier: "ext:deno_node/path/posix.ts", }, NodeModulePolyfill { - name: "path/win32", - specifier: "ext:deno_node/path/win32.ts", + specifier: "node:path/win32", + ext_specifier: "ext:deno_node/path/win32.ts", }, NodeModulePolyfill { - name: "perf_hooks", - specifier: "ext:deno_node/perf_hooks.ts", + specifier: "node:perf_hooks", + ext_specifier: "ext:deno_node/perf_hooks.ts", }, NodeModulePolyfill { - name: "process", - specifier: "ext:deno_node/process.ts", + specifier: "node:process", + ext_specifier: "ext:deno_node/process.ts", }, NodeModulePolyfill { - name: "punycode", - specifier: "ext:deno_node/punycode.ts", + specifier: "node:punycode", + ext_specifier: "ext:deno_node/punycode.ts", }, NodeModulePolyfill { - name: "querystring", - specifier: "ext:deno_node/querystring.ts", + specifier: "node:querystring", + ext_specifier: "ext:deno_node/querystring.ts", }, NodeModulePolyfill { - name: "readline", - specifier: "ext:deno_node/readline.ts", + specifier: "node:readline", + ext_specifier: "ext:deno_node/readline.ts", }, NodeModulePolyfill { - name: "stream", - specifier: "ext:deno_node/stream.ts", + specifier: "node:stream", + ext_specifier: "ext:deno_node/stream.ts", }, NodeModulePolyfill { - name: "stream/consumers", - specifier: "ext:deno_node/stream/consumers.mjs", + specifier: "node:stream/consumers", + ext_specifier: "ext:deno_node/stream/consumers.mjs", }, NodeModulePolyfill { - name: "stream/promises", - specifier: "ext:deno_node/stream/promises.mjs", + specifier: "node:stream/promises", + ext_specifier: "ext:deno_node/stream/promises.mjs", }, NodeModulePolyfill { - name: "stream/web", - specifier: "ext:deno_node/stream/web.ts", + specifier: "node:stream/web", + ext_specifier: "ext:deno_node/stream/web.ts", }, NodeModulePolyfill { - name: "string_decoder", - specifier: "ext:deno_node/string_decoder.ts", + specifier: "node:string_decoder", + ext_specifier: "ext:deno_node/string_decoder.ts", }, NodeModulePolyfill { - name: "sys", - specifier: "ext:deno_node/sys.ts", + specifier: "node:sys", + ext_specifier: "ext:deno_node/sys.ts", }, NodeModulePolyfill { - name: "timers", - specifier: "ext:deno_node/timers.ts", + specifier: "node:timers", + ext_specifier: "ext:deno_node/timers.ts", }, NodeModulePolyfill { - name: "timers/promises", - specifier: "ext:deno_node/timers/promises.ts", + specifier: "node:timers/promises", + ext_specifier: "ext:deno_node/timers/promises.ts", }, NodeModulePolyfill { - name: "tls", - specifier: "ext:deno_node/tls.ts", + specifier: "node:tls", + ext_specifier: "ext:deno_node/tls.ts", }, NodeModulePolyfill { - name: "tty", - specifier: "ext:deno_node/tty.ts", + specifier: "node:tty", + ext_specifier: "ext:deno_node/tty.ts", }, NodeModulePolyfill { - name: "url", - specifier: "ext:deno_node/url.ts", + specifier: "node:url", + ext_specifier: "ext:deno_node/url.ts", }, NodeModulePolyfill { - name: "util", - specifier: "ext:deno_node/util.ts", + specifier: "node:util", + ext_specifier: "ext:deno_node/util.ts", }, NodeModulePolyfill { - name: "util/types", - specifier: "ext:deno_node/util/types.ts", + specifier: "node:util/types", + ext_specifier: "ext:deno_node/util/types.ts", }, NodeModulePolyfill { - name: "v8", - specifier: "ext:deno_node/v8.ts", + specifier: "node:v8", + ext_specifier: "ext:deno_node/v8.ts", }, NodeModulePolyfill { - name: "vm", - specifier: "ext:deno_node/vm.ts", + specifier: "node:vm", + ext_specifier: "ext:deno_node/vm.ts", }, NodeModulePolyfill { - name: "worker_threads", - specifier: "ext:deno_node/worker_threads.ts", + specifier: "node:worker_threads", + ext_specifier: "ext:deno_node/worker_threads.ts", }, NodeModulePolyfill { - name: "zlib", - specifier: "ext:deno_node/zlib.ts", + specifier: "node:zlib", + ext_specifier: "ext:deno_node/zlib.ts", }, ]; |