From d47147fb6ad229b1c039aff9d0959b6e281f4df5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Tue, 14 Feb 2023 17:38:45 +0100 Subject: feat(ext/node): embed std/node into the snapshot (#17724) This commit moves "deno_std/node" in "ext/node" crate. The code is transpiled and snapshotted during the build process. During the first pass a minimal amount of work was done to create the snapshot, a lot of code in "ext/node" depends on presence of "Deno" global. This code will be gradually fixed in the follow up PRs to migrate it to import relevant APIs from "internal:" modules. Currently the code from snapshot is not used in any way, and all Node/npm compatibility still uses code from "https://deno.land/std/node" (or from the location specified by "DENO_NODE_COMPAT_URL"). This will also be handled in a follow up PRs. --------- Co-authored-by: crowlkats Co-authored-by: Divy Srivastava Co-authored-by: Yoshiya Hinosawa --- runtime/build.rs | 21 +++++++++++++++++---- runtime/js/99_main.js | 5 +++++ runtime/web_worker.rs | 1 + runtime/worker.rs | 1 + 4 files changed, 24 insertions(+), 4 deletions(-) (limited to 'runtime') diff --git a/runtime/build.rs b/runtime/build.rs index e70e8fe5d..bbdec8f57 100644 --- a/runtime/build.rs +++ b/runtime/build.rs @@ -26,8 +26,12 @@ mod not_docs { let should_transpile = match media_type { MediaType::JavaScript => false, + MediaType::Mjs => false, MediaType::TypeScript => true, - _ => panic!("Unsupported media type for snapshotting {media_type:?}"), + _ => panic!( + "Unsupported media type for snapshotting {media_type:?} for file {}", + file_source.specifier + ), }; if !should_transpile { @@ -42,7 +46,12 @@ mod not_docs { scope_analysis: false, maybe_syntax: None, })?; - let transpiled_source = parsed.transpile(&Default::default())?; + let transpiled_source = parsed.transpile(&deno_ast::EmitOptions { + imports_not_used_as_values: deno_ast::ImportsNotUsedAsValues::Remove, + inline_source_map: false, + ..Default::default() + })?; + Ok(transpiled_source.text) } @@ -171,7 +180,8 @@ mod not_docs { "deno_crypto", "deno_webgpu", "deno_broadcast_channel", - "deno_node", + // FIXME(bartlomieju): this should be reenabled + // "deno_node", "deno_ffi", "deno_net", "deno_napi", @@ -225,7 +235,6 @@ mod not_docs { deno_broadcast_channel::InMemoryBroadcastChannel::default(), false, // No --unstable. ), - deno_node::init::(None), deno_ffi::init::(false), deno_net::init::( None, false, // No --unstable. @@ -235,6 +244,10 @@ mod not_docs { deno_http::init(), deno_flash::init::(false), // No --unstable runtime_extension, + // FIXME(bartlomieju): these extensions are specified last, because they + // depend on `runtime`, even though it should be other way around + deno_node::init::(None), + deno_node::init_polyfill(), ]; if let Some(additional_extension) = maybe_additional_extension { diff --git a/runtime/js/99_main.js b/runtime/js/99_main.js index fa9b0a20d..399d12d38 100644 --- a/runtime/js/99_main.js +++ b/runtime/js/99_main.js @@ -515,6 +515,11 @@ function bootstrapMainRuntime(runtimeOptions) { ObjectDefineProperty(globalThis, "Deno", util.readOnly(finalDenoNs)); util.log("args", runtimeOptions.args); + + // FIXME(bartlomieju): this should be a helper function that is placed in + // "internals" namespace + // Initialize Node polyfills + // internals.__bootstrapNodeProcess(); } function bootstrapWorkerRuntime( diff --git a/runtime/web_worker.rs b/runtime/web_worker.rs index 052d95451..df75d79c1 100644 --- a/runtime/web_worker.rs +++ b/runtime/web_worker.rs @@ -435,6 +435,7 @@ impl WebWorker { options.unsafely_ignore_certificate_errors.clone(), ), deno_napi::init::(), + deno_node::init_polyfill(), deno_node::init::(options.npm_resolver), ops::os::init_for_worker(), ops::permissions::init(), diff --git a/runtime/worker.rs b/runtime/worker.rs index bffa91265..141b5a650 100644 --- a/runtime/worker.rs +++ b/runtime/worker.rs @@ -267,6 +267,7 @@ impl MainWorker { options.unsafely_ignore_certificate_errors.clone(), ), deno_napi::init::(), + deno_node::init_polyfill(), deno_node::init::(options.npm_resolver), ops::os::init(exit_code.clone()), ops::permissions::init(), -- cgit v1.2.3