summaryrefslogtreecommitdiff
path: root/runtime/build.rs
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/build.rs')
-rw-r--r--runtime/build.rs87
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);
}
}