diff options
Diffstat (limited to 'runtime/build.rs')
-rw-r--r-- | runtime/build.rs | 87 |
1 files changed, 74 insertions, 13 deletions
diff --git a/runtime/build.rs b/runtime/build.rs index bba4394f8..e892e7485 100644 --- a/runtime/build.rs +++ b/runtime/build.rs @@ -1,7 +1,7 @@ // Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. +use deno_core::include_js_files_dir; use std::env; - use std::path::PathBuf; // This is a shim that allows to generate documentation on docs.rs @@ -13,6 +13,39 @@ mod not_docs { use deno_core::snapshot_util::*; use deno_core::Extension; + use deno_ast::MediaType; + use deno_ast::ParseParams; + use deno_ast::SourceTextInfo; + use deno_core::error::AnyError; + use deno_core::ExtensionFileSource; + + fn transpile_ts_for_snapshotting( + file_source: &ExtensionFileSource, + ) -> Result<String, AnyError> { + let media_type = MediaType::from(Path::new(&file_source.specifier)); + + let should_transpile = match media_type { + MediaType::JavaScript => false, + MediaType::TypeScript => true, + _ => panic!("Unsupported media type for snapshotting {media_type:?}"), + }; + + if !should_transpile { + return Ok(file_source.code.to_string()); + } + + let parsed = deno_ast::parse_module(ParseParams { + specifier: file_source.specifier.to_string(), + text_info: SourceTextInfo::from_string(file_source.code.to_string()), + media_type, + capture_tokens: false, + scope_analysis: false, + maybe_syntax: None, + })?; + let transpiled_source = parsed.transpile(&Default::default())?; + Ok(transpiled_source.text) + } + struct Permissions; impl deno_fetch::FetchPermissions for Permissions { @@ -120,7 +153,10 @@ mod not_docs { } } - fn create_runtime_snapshot(snapshot_path: PathBuf, esm_files: Vec<PathBuf>) { + fn create_runtime_snapshot( + snapshot_path: PathBuf, + additional_extension: Extension, + ) { let extensions_with_js: Vec<Extension> = vec![ deno_webidl::init(), deno_console::init(), @@ -149,6 +185,7 @@ mod not_docs { deno_napi::init::<Permissions>(false), deno_http::init(), deno_flash::init::<Permissions>(false), // No --unstable + additional_extension, ]; create_snapshot(CreateSnapshotOptions { @@ -157,8 +194,6 @@ mod not_docs { startup_snapshot: None, extensions: vec![], extensions_with_js, - additional_files: vec![], - additional_esm_files: esm_files, compression_cb: Some(Box::new(|vec, snapshot_slice| { lzzzz::lz4_hc::compress_to_vec( snapshot_slice, @@ -167,24 +202,50 @@ mod not_docs { ) .expect("snapshot compression failed"); })), + snapshot_module_load_cb: Some(Box::new(transpile_ts_for_snapshotting)), }); } pub fn build_snapshot(runtime_snapshot_path: PathBuf) { - #[allow(unused_mut)] - let mut esm_files = get_js_files( - env!("CARGO_MANIFEST_DIR"), - "js", - Some(Box::new(|path| !path.ends_with("99_main.js"))), + #[allow(unused_mut, unused_assignments)] + let mut esm_files = include_js_files_dir!( + dir "js", + "01_build.js", + "01_errors.js", + "01_version.ts", + "06_util.js", + "10_permissions.js", + "11_workers.js", + "12_io.js", + "13_buffer.js", + "30_fs.js", + "30_os.js", + "40_diagnostics.js", + "40_files.js", + "40_fs_events.js", + "40_http.js", + "40_process.js", + "40_read_file.js", + "40_signals.js", + "40_spawn.js", + "40_tty.js", + "40_write_file.js", + "41_prompt.js", + "90_deno_ns.js", + "98_global_scope.js", ); #[cfg(not(feature = "snapshot_from_snapshot"))] { - let manifest = env!("CARGO_MANIFEST_DIR"); - let path = PathBuf::from(manifest); - esm_files.push(path.join("js").join("99_main.js")); + esm_files.push(ExtensionFileSource { + specifier: "js/99_main.js".to_string(), + code: include_str!("js/99_main.js"), + }); } - create_runtime_snapshot(runtime_snapshot_path, esm_files); + + let additional_extension = + Extension::builder("runtime").esm(esm_files).build(); + create_runtime_snapshot(runtime_snapshot_path, additional_extension); } } |