summaryrefslogtreecommitdiff
path: root/cli/standalone.rs
diff options
context:
space:
mode:
authorDivy Srivastava <dj.srivastava23@gmail.com>2021-06-07 17:32:53 +0530
committerGitHub <noreply@github.com>2021-06-07 14:02:53 +0200
commit89290741d18d9b247cefccdc95563ec688a28491 (patch)
tree6740591c60f42696b0e6a9dea4a5d4ccf0f3534c /cli/standalone.rs
parent3b3be024fa1895a9a1df0a2e67fe93aa888b198e (diff)
feat(compile): Initialize runtime_compiler ops for standalone binaries (#10052)
Diffstat (limited to 'cli/standalone.rs')
-rw-r--r--cli/standalone.rs35
1 files changed, 35 insertions, 0 deletions
diff --git a/cli/standalone.rs b/cli/standalone.rs
index 60415c7e7..7216a5fd6 100644
--- a/cli/standalone.rs
+++ b/cli/standalone.rs
@@ -3,6 +3,9 @@
use crate::colors;
use crate::file_fetcher::get_source_from_bytes;
use crate::file_fetcher::strip_shebang;
+use crate::flags::Flags;
+use crate::ops;
+use crate::program_state::ProgramState;
use crate::version;
use data_url::DataUrl;
use deno_core::error::type_error;
@@ -181,11 +184,33 @@ impl ModuleLoader for EmbeddedModuleLoader {
}
}
+fn metadata_to_flags(metadata: &Metadata) -> Flags {
+ let permissions = metadata.permissions.clone();
+ Flags {
+ argv: metadata.argv.clone(),
+ unstable: metadata.unstable,
+ seed: metadata.seed,
+ location: metadata.location.clone(),
+ allow_env: permissions.allow_env,
+ allow_hrtime: permissions.allow_hrtime,
+ allow_net: permissions.allow_net,
+ allow_plugin: permissions.allow_plugin,
+ allow_read: permissions.allow_read,
+ allow_run: permissions.allow_run,
+ allow_write: permissions.allow_write,
+ v8_flags: metadata.v8_flags.clone(),
+ log_level: metadata.log_level,
+ ..Default::default()
+ }
+}
+
pub async fn run(
source_code: String,
metadata: Metadata,
) -> Result<(), AnyError> {
+ let flags = metadata_to_flags(&metadata);
let main_module = resolve_url(SPECIFIER)?;
+ let program_state = ProgramState::build(flags).await?;
let permissions = Permissions::from_options(&metadata.permissions);
let blob_url_store = BlobUrlStore::default();
let broadcast_channel = InMemoryBroadcastChannel::default();
@@ -226,6 +251,16 @@ pub async fn run(
};
let mut worker =
MainWorker::from_options(main_module.clone(), permissions, &options);
+ {
+ let js_runtime = &mut worker.js_runtime;
+ js_runtime
+ .op_state()
+ .borrow_mut()
+ .put::<Arc<ProgramState>>(program_state.clone());
+ ops::errors::init(js_runtime);
+ ops::runtime_compiler::init(js_runtime);
+ js_runtime.sync_ops_cache();
+ }
worker.bootstrap(&options);
worker.execute_module(&main_module).await?;
worker.execute("window.dispatchEvent(new Event('load'))")?;