From 8f001c5daf1fa627665e5c20a28c6ad1ab4d17e5 Mon Sep 17 00:00:00 2001 From: lironh Date: Sun, 14 Aug 2022 08:54:07 +0300 Subject: [PATCH] feat(v8): experimenting stuff --- Cargo.lock | 58 ++++++++++++++++++++++++++++--- Cargo.toml | 2 ++ src/dev_server/dev_runner_api.rs | 4 +-- src/dev_server/mod.rs | 2 +- src/dev_server/server.rs | 6 ++-- src/main.rs | 8 +++-- src/runner/pkg_json_utils.rs | 2 +- src/runner/script_exec_model.rs | 8 +++-- src/runner/scripts_exec_utils.rs | 2 +- src/v8/foo.js | 1 + src/v8/js_run.rs | 26 ++++++++++++++ src/v8/mod.rs | 2 ++ src/v8/readme.md | 3 ++ webapp/bun.lockb | Bin 0 -> 109588 bytes 14 files changed, 107 insertions(+), 17 deletions(-) create mode 100644 src/v8/foo.js create mode 100644 src/v8/js_run.rs create mode 100644 src/v8/mod.rs create mode 100644 src/v8/readme.md create mode 100755 webapp/bun.lockb diff --git a/Cargo.lock b/Cargo.lock index d6299ea..bd75888 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -451,6 +451,8 @@ dependencies = [ "r2d2", "serde", "serde_json", + "tokio", + "v8", ] [[package]] @@ -566,6 +568,16 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "fslock" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57eafdd0c16f57161105ae1b98a1238f97645f2f588438b2949c99a2af9616bf" +dependencies = [ + "libc", + "winapi", +] + [[package]] name = "futures-core" version = "0.3.21" @@ -748,9 +760,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.119" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bf2e165bb3457c8e098ea76f3e3bc9db55f87aa90d52d0e6be741470916aaa4" +checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836" [[package]] name = "local-channel" @@ -1314,22 +1326,36 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" [[package]] name = "tokio" -version = "1.17.0" +version = "1.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2af73ac49756f3f7c01172e34a23e5d0216f6c32333757c2c61feb2bbff5a5ee" +checksum = "7a8325f63a7d4774dd041e363b2409ed1c5cbbd0f867795e661df066b2b0a581" dependencies = [ + "autocfg", "bytes", "libc", "memchr", "mio", + "num_cpus", "once_cell", "parking_lot 0.12.0", "pin-project-lite", "signal-hook-registry", "socket2", + "tokio-macros", "winapi", ] +[[package]] +name = "tokio-macros" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9724f9a975fb987ef7a3cd9be0350edcbe130698af5b8f7a631e23d42d052484" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "tokio-rustls" version = "0.23.2" @@ -1435,6 +1461,19 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "v8" +version = "0.44.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ee18f5327bc32aeacce7027886683f4f9bd06ee2a17db17860bf0ab008a4013" +dependencies = [ + "bitflags", + "fslock", + "lazy_static", + "libc", + "which", +] + [[package]] name = "vcpkg" version = "0.2.15" @@ -1542,6 +1581,17 @@ dependencies = [ "webpki", ] +[[package]] +name = "which" +version = "4.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c4fb54e6113b6a8772ee41c3404fb0301ac79604489467e0a9ce1f3e97c24ae" +dependencies = [ + "either", + "lazy_static", + "libc", +] + [[package]] name = "winapi" version = "0.3.9" diff --git a/Cargo.toml b/Cargo.toml index 9f53627..50e55d6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,4 +19,6 @@ chrono = "^0" anyhow = "1.0.57" r2d2 = "0.8.9" either = "1.6.1" +v8 = "0.44.2" +tokio = { version = "1.20.1", features = ["full"] } diff --git a/src/dev_server/dev_runner_api.rs b/src/dev_server/dev_runner_api.rs index ddb0023..8f73398 100644 --- a/src/dev_server/dev_runner_api.rs +++ b/src/dev_server/dev_runner_api.rs @@ -1,10 +1,10 @@ +use crate::dev_server::server::RunnerContext; use crate::runner::script_exec_model::{save_script_entry, Pool}; use crate::runner::{pkg_json_utils, scripts_exec_utils, Configuration, Script, Scripts}; use actix_web::{get, post, web, Either, Error, HttpResponse}; +use either::Left; use serde::{Deserialize, Serialize}; use std::sync::RwLock; -use either::Left; -use crate::dev_server::server::RunnerContext; // POST: url: /set-runnable-project, payload: { path: string } // DELETE: url: /remove-runnable-project, payload: { path: string } diff --git a/src/dev_server/mod.rs b/src/dev_server/mod.rs index c2b51a5..d173dc8 100644 --- a/src/dev_server/mod.rs +++ b/src/dev_server/mod.rs @@ -1,2 +1,2 @@ -pub(crate) mod server; pub mod dev_runner_api; +pub(crate) mod server; diff --git a/src/dev_server/server.rs b/src/dev_server/server.rs index f985d5b..a8b6da1 100644 --- a/src/dev_server/server.rs +++ b/src/dev_server/server.rs @@ -53,7 +53,7 @@ pub async fn start() -> std::io::Result<()> { .wrap(cors()) .wrap(Logger::default()) }) - .bind(format!("{}:{}", host, port))? - .run() - .await + .bind(format!("{}:{}", host, port))? + .run() + .await } diff --git a/src/main.rs b/src/main.rs index 3100f8f..c5e4bb4 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,13 +1,17 @@ #[macro_use] extern crate diesel; +use crate::v8::js_run; + mod cli; +mod dev_server; mod runner; mod schema; -mod dev_server; +mod v8; #[actix_web::main] async fn main() -> std::io::Result<()> { + // js_run("/Users/lironh_1/dev-liron/dev-runner/dev-runner/src/v8/foo.js".to_string()).await; + // Ok(()) dev_server::server::start().await } - diff --git a/src/runner/pkg_json_utils.rs b/src/runner/pkg_json_utils.rs index 288f2ad..81e4613 100644 --- a/src/runner/pkg_json_utils.rs +++ b/src/runner/pkg_json_utils.rs @@ -66,4 +66,4 @@ pub fn extract_scripts(projects: Vec) -> Vec { fn test_is_valid_path() { let is_valid = is_valid_path("foo/bar"); assert_eq!(is_valid, false); -} \ No newline at end of file +} diff --git a/src/runner/script_exec_model.rs b/src/runner/script_exec_model.rs index d7d1617..431d9bc 100644 --- a/src/runner/script_exec_model.rs +++ b/src/runner/script_exec_model.rs @@ -1,5 +1,5 @@ -use actix_web::web; use crate::schema::scripts_exec_log; +use actix_web::web; use chrono::Utc; use diesel::prelude::*; use diesel::{r2d2::ConnectionManager, PgConnection}; @@ -21,7 +21,10 @@ pub struct Script<'a> { pub run_start: &'a chrono::NaiveDateTime, } -pub fn save_script_entry(name: &str, either_conn: Either, PgConnection>) -> QueryResult { +pub fn save_script_entry( + name: &str, + either_conn: Either, PgConnection>, +) -> QueryResult { println!("Creating script entry: {:?}", name); let new_script = NewScript { @@ -40,5 +43,4 @@ pub fn save_script_entry(name: &str, either_conn: Either, PgConn .values(&new_script) .execute(right) } - } diff --git a/src/runner/scripts_exec_utils.rs b/src/runner/scripts_exec_utils.rs index 023600c..ed65250 100644 --- a/src/runner/scripts_exec_utils.rs +++ b/src/runner/scripts_exec_utils.rs @@ -31,7 +31,7 @@ fn kill_by_id(id: &str) -> Child { } pub fn exec_scripts(command: &str, projects: Vec) -> Option> { - //todo replace some with result to handle the projects count limitation error + //todo replace some with result to handle the projects count limitation error if projects.len() > 4 || cfg!(target_os = "windows") { return None; }; diff --git a/src/v8/foo.js b/src/v8/foo.js new file mode 100644 index 0000000..d8b0532 --- /dev/null +++ b/src/v8/foo.js @@ -0,0 +1 @@ +1+2; diff --git a/src/v8/js_run.rs b/src/v8/js_run.rs new file mode 100644 index 0000000..ca78f3d --- /dev/null +++ b/src/v8/js_run.rs @@ -0,0 +1,26 @@ + +async fn read_file(path: String) -> Result { + Ok(tokio::fs::read_to_string(path).await?) +} + +pub async fn js_run(path: String) { + let script = read_file(path).await.unwrap(); + let platform = v8::new_default_platform(0, false).make_shared(); + v8::V8::initialize_platform(platform); + v8::V8::initialize(); + + let isolate = &mut v8::Isolate::new(Default::default()); + + let scope = &mut v8::HandleScope::new(isolate); + let context = v8::Context::new(scope); + let scope = &mut v8::ContextScope::new(scope, context); + + let code = v8::String::new(scope, script.as_str()).unwrap(); + println!("javascript code: {}", code.to_rust_string_lossy(scope)); + + let script = v8::Script::compile(scope, code, None).unwrap(); + let result = script.run(scope).unwrap(); + let result = result.to_string(scope).unwrap(); + println!("result: {}", result.to_rust_string_lossy(scope)); +} + diff --git a/src/v8/mod.rs b/src/v8/mod.rs new file mode 100644 index 0000000..ea96461 --- /dev/null +++ b/src/v8/mod.rs @@ -0,0 +1,2 @@ +pub(crate) mod js_run; +pub use js_run::*; diff --git a/src/v8/readme.md b/src/v8/readme.md new file mode 100644 index 0000000..19e3b64 --- /dev/null +++ b/src/v8/readme.md @@ -0,0 +1,3 @@ +Experimental!!! + +A try to run scripts on v8 isolate \ No newline at end of file diff --git a/webapp/bun.lockb b/webapp/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..2f534eb419eb8b43e7e8eac67bc6461991a51dcc GIT binary patch literal 109588 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

KAoSl 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%0A#m63U|rR zF$>PDyM>ugi|{5>8)Qiyv!m>;fZJY803I@nI7amu4dn35d{~N8>!!n^ByhtTl$F0k zJ39EJNPEMQ6ws$Z;W`vU4l2qX*m)%mqWKTvNNI-NST8_&6?k6o}so0yOx%

nbf|3sL zGstZxK#}AZan?hijM$w73@$GWC3DAPh;}>yO;jj(E{(It<#$d2k1tr%qj6&f_?VU> zPP0jO>v?_qWd7Usm=TakP0&qB9DBqcF4WdMhq1PcDXT61U!GgB7}X5=PzlT-!@+{L z#4@mHb4FRxK7^HzpOW1yD3ZL~G9_~|-A;odEfCL3BOZ3!z=sUy0^Tj0;lgkM9LOPw zlv&^NYqr0Ls0Ou{muxQTZDfjicfru@>o1Ig?*q!J-|i08g$z_FWC0A|agnfX*WJ)EHP3u2Sh1ySY8(j^Y%ieXd{JEOp=3YzDgeQgJa@w}=`X z1&8+2&P7l#DIPENBT;W`_cJ4z)PuGpuWm|?#$vAYfYI8(LD{`7!8`$p8<~7!26CQL zT6&{i8Z$$mD?M~p5WyL?fn}yto&Q+CmJSJs(gMW09M(3x|0Zbn6dWd*-~4A7oC=3Q zC(5<^0x}~(W%G+UFiRmhWjlp?EZwVM_?4`c7HwU)2SUH5R*C_H z2aB^h^cs)SDEiT#o;cZI6i6~(wK8gsWq6d*u9qkaQWa<~&-}SV8;G7OUNkm0dK*sP zZgV8mf$MfnAU}7!3a}qm9q;kp^miPY?M;3q!%TG!R*1qn=OR9)RiSZOv`D4dTT#H; z5A`k3Am0V|5+4vQp*Bi(((tk%P(xBvt+cfr-YOKFd$v&RmBcUND4Ks-_8gy4V;6$a z#ykv7@(6m8=O{YKV{%>P37D)$gq%|+6)bNRGR)J%ilQF#1W_DpCX0Ib64#Pmax~H0 zcNcts`I|mt9S9iH?DWd&*1zBgoKMMgDa|6&aSyiQxrE~PopNy=0{hD?u8>RkDPJnz0Fnc^I zZvn(&%!L^v%Tez$vOgt{Y_yF-90zBEJK}0aO9UlmXe97LU0C-_>d$rmIm3uaO)ySM zgtTNJC%t6y`Yw`^=~D7(4o}zuHY7D+N)}?I9084T;%Z4IXO`!9Z3SbTjTU8Z0>@u7 z9GX}lyT$aKaqGdmTQoj+I8JcFWB&HJBlKeuf^D%y*x7ggPt}L3f!8VUz(3892zJuhwU-_F1@SweO$XZe7{d*HjaMi_Pk@#56kl$aHO5mFA{J zT3t#TTzi5QSo?vfV4djO~4S#0fci1{L=1L8&XpxBGOsb|h6>~djVKl@5*LDiwUd?GqLsteeV zlq{CUIMTL&M!7{JW@{IZdIITFl|6c6n*yetBz1!aAv2}MI-nTSG;NRm7Sxs2%~=cH z6jllP=JEp}H@}6^%yenG&>6zX+NX`XM#heyi%U(YWVl8ME&U~P-#v8NRC7h1{cM zV;$hfv>BLAh-~7jI5Xz@K7#A@=YsUcmXhd}5#?eT%;+xZbq^n#`~gi|x@hMS+i(Gm zv$)MPm8>>>*Q_qws>m>6tRpPGJ_@Y7j~L=V034DM))FHkOBB#3CpUnEfahHv@NbxD zhdsNty?dqT-8=V$>6p)SO!aBNMg5vlQkq42#2N_wN*9;9GNBXLNlCymd?;CCNxcZ6 z;1=;$#}c@90UnZ?$fbovH;)0*ua>Y9!_s@jM(pr@g1bbkKhIQ{Ru+NoC~TJwpzDmw+8*dv$oA9H=2FEmRVjInux}S1jANgzq*Jz