wasm progress

This commit is contained in:
Michael Zhang 2024-06-21 16:45:29 -05:00
parent 81d28b6740
commit 1646db88d1
10 changed files with 620 additions and 377 deletions

862
Cargo.lock generated

File diff suppressed because it is too large Load diff

View file

@ -1,3 +0,0 @@
fn main() {
}

View file

@ -1,5 +1,4 @@
// The entry file of your WebAssembly module.
export function add(a: i32, b: i32): i32 {
return a + b;
export function install(): i32 {
console.log("Hellosu!");
return 0;
}

View file

@ -1,5 +1,5 @@
{
"extends": "../../../node_modules/.pnpm/assemblyscript@0.27.27/node_modules/assemblyscript/std/assembly.json",
"extends": "assemblyscript/std/assembly.json",
"include": [
"./**/*.ts"
]

54
apps/journal/package-lock.json generated Normal file
View file

@ -0,0 +1,54 @@
{
"name": "journal",
"version": "0.1.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "journal",
"version": "0.1.0",
"license": "ISC",
"devDependencies": {
"assemblyscript": "^0.27.27"
}
},
"node_modules/assemblyscript": {
"version": "0.27.27",
"resolved": "https://registry.npmjs.org/assemblyscript/-/assemblyscript-0.27.27.tgz",
"integrity": "sha512-z4ijXsjjk3uespEeCWpO1K2GQySc6bn+LL5dL0tsC2VXNYKFnKDmAh3wefcKazxXHFVhYlxqNfyv96ajaQyINQ==",
"dev": true,
"dependencies": {
"binaryen": "116.0.0-nightly.20240114",
"long": "^5.2.1"
},
"bin": {
"asc": "bin/asc.js",
"asinit": "bin/asinit.js"
},
"engines": {
"node": ">=16",
"npm": ">=7"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/assemblyscript"
}
},
"node_modules/binaryen": {
"version": "116.0.0-nightly.20240114",
"resolved": "https://registry.npmjs.org/binaryen/-/binaryen-116.0.0-nightly.20240114.tgz",
"integrity": "sha512-0GZrojJnuhoe+hiwji7QFaL3tBlJoA+KFUN7ouYSDGZLSo9CKM8swQX8n/UcbR0d1VuZKU+nhogNzv423JEu5A==",
"dev": true,
"bin": {
"wasm-opt": "bin/wasm-opt",
"wasm2js": "bin/wasm2js"
}
},
"node_modules/long": {
"version": "5.2.3",
"resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz",
"integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==",
"dev": true
}
}
}

View file

@ -13,13 +13,24 @@ itertools = "0.13.0"
serde = { version = "1.0.203", features = ["derive"] }
serde_json = "1.0.117"
serde_yaml = "0.9.34"
sqlx = { version = "0.7.4", features = ["runtime-tokio", "tls-rustls", "macros", "sqlite", "uuid", "chrono", "regexp"] }
sqlx = { version = "0.7.4", features = [
"runtime-tokio",
"tls-rustls",
"macros",
"sqlite",
"uuid",
"chrono",
"regexp",
] }
sugars = "3.0.1"
tantivy = { version = "0.22.0", features = ["zstd"] }
tokio = { version = "1.38.0", features = ["full"] }
uuid = { version = "1.8.0", features = ["v7"] }
walkdir = "2.5.0"
wasmtime = { version = "22.0.0", default-features = false, features = ["runtime"] }
wasmtime = { version = "22.0.0", default-features = false, features = [
"runtime",
"cranelift",
] }
[dependencies.async-imap]
version = "0.9.7"

View file

@ -8,7 +8,7 @@ use std::{
use anyhow::{Context as _, Result};
use serde_yaml::Value;
use wasmtime::Module;
use wasmtime::{Config, Engine, Linker, Module, Store};
use crate::AppState;
@ -42,9 +42,16 @@ impl AppState {
}
}
let all_app_data = HashMap::new();
let mut all_app_data = HashMap::new();
for path in found {
let app_data = self.install_app_from_path(path).await;
let app_data = self.install_app_from_path(&path).await?;
println!("App data: {:?}", app_data);
all_app_data.insert(
path.display().to_string(),
AppData {
name: "hello".to_string(),
},
);
}
Ok(all_app_data)
@ -57,7 +64,7 @@ pub struct AppManifest {
version: Option<String>,
panorama_version: Option<String>,
description: Option<String>,
installer_path: Option<String>,
installer_path: PathBuf,
}
#[derive(Debug)]
@ -73,23 +80,32 @@ impl AppState {
let file = File::open(manifest_path)?;
serde_yaml::from_reader(file)?
};
println!("manifest: {:?}", manifest);
println!("Manifest: {:?}", manifest);
let register_path = app_path.join("register.rn");
let installer_path = app_path.join(manifest.installer_path);
let register_script = {
let mut file = File::open(register_path)?;
let mut string = String::new();
file.read_to_string(&mut string)?;
string
let installer_program = {
let mut file = File::open(&installer_path).with_context(|| {
format!(
"Could not open installer from path: {}",
installer_path.display()
)
})?;
let mut buf = Vec::new();
file.read_to_end(&mut buf)?;
buf
};
{
use wasmtime::{Config, Engine};
println!("Installer program: {} bytes", installer_program.len());
let config = Config::new();
let engine = Engine::new(&config)?;
}
let module = Module::new(&engine, &installer_program)?;
let linker = Linker::new(&engine);
let mut store: Store<u32> = Store::new(&engine, 4);
let instance = linker.instantiate(&mut store, &module)?;
let hello = instance.get_typed_func::<(), i32>(&mut store, "install")?;
hello.call(&mut store, ())?;
// let mut sources = Sources::new();
// sources

View file

@ -79,7 +79,7 @@ pub async fn test_install_apps() -> Result<()> {
state.install_apps_from_search_paths().await?;
panic!();
todo!();
Ok(())
}

View file

@ -33,10 +33,6 @@ features = ["axum_extras", "time", "uuid", "chrono", "yaml"]
git = "https://github.com/juhaku/utoipa"
features = ["axum"]
[dependencies.utoipa-swagger-ui]
git = "https://github.com/juhaku/utoipa"
features = ["axum"]
[dependencies.async-imap]
version = "0.9.7"
default-features = false