feat: some shit

This commit is contained in:
max_richter 2024-02-28 21:21:42 +01:00
commit 27b6514167
39 changed files with 9501 additions and 0 deletions

6
.gitignore vendored Normal file
View File

@ -0,0 +1,6 @@
node_modules/
# Added by cargo
/target

5306
Cargo.lock generated Normal file

File diff suppressed because it is too large Load Diff

12
Cargo.toml Normal file
View File

@ -0,0 +1,12 @@
[workspace]
resolver = "2"
members = [
"packages/runtime_executor_rust",
"nodes/add",
"nodes/subtract",
"frontend/src-tauri",
"packages/node_registry_rust", "nodes/multiply",
]
[profile.release]
lto = true

15
backend/.editorconfig Normal file
View File

@ -0,0 +1,15 @@
root = true
[*]
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
charset = utf-8
[*.js]
indent_style = space
indent_size = 2
[{package.json,*.yml,*.cjson}]
indent_style = space
indent_size = 2

3
backend/.eslintignore Normal file
View File

@ -0,0 +1,3 @@
dist
.output
node-modules

5
backend/.eslintrc Normal file
View File

@ -0,0 +1,5 @@
{
"extends": [
"@nuxtjs/eslint-config-typescript"
]
}

7
backend/.gitignore vendored Normal file
View File

@ -0,0 +1,7 @@
node_modules
*.log*
.nitro
.cache
.output
.env
dist

2
backend/.npmrc Normal file
View File

@ -0,0 +1,2 @@
shamefully-hoist=true
strict-peer-dependencies=false

42
backend/README.md Normal file
View File

@ -0,0 +1,42 @@
# Nitro Minimal Starter
Look at the [Nitro documentation](https://nitro.unjs.io/) to learn more.
## Setup
Make sure to install the dependencies:
```bash
# npm
npm install
# yarn
yarn install
# pnpm
pnpm install
```
## Development Server
Start the development server on <http://localhost:3000>
```bash
npm run dev
```
## Production
Build the application for production:
```bash
npm run build
```
Locally preview production build:
```bash
npm run preview
```
Check out the [deployment documentation](https://nitro.unjs.io/deploy) for more information.

2
backend/nitro.config.ts Normal file
View File

@ -0,0 +1,2 @@
//https://nitro.unjs.io/config
export default defineNitroConfig({});

12
backend/package.json Normal file
View File

@ -0,0 +1,12 @@
{
"private": true,
"scripts": {
"prepare": "nitropack prepare",
"dev": "nitropack dev",
"build": "nitropack build",
"preview": "node .output/server/index.mjs"
},
"dependencies": {
"nitropack": "latest"
}
}

3
backend/routes/index.ts Normal file
View File

@ -0,0 +1,3 @@
export default eventHandler(() => {
return { nitro: 'Is Awesome!' }
})

3
backend/tsconfig.json Normal file
View File

@ -0,0 +1,3 @@
{
"extends": "./.nitro/types/tsconfig.json"
}

1
frontend Submodule

@ -0,0 +1 @@
Subproject commit 533bfb56272a1e734053a16ac2610b4c1e89bc16

10
nodes/add/.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,10 @@
{
"rust-analyzer.check.overrideCommand": [
"cargo",
"component",
"check",
"--workspace",
"--all-targets",
"--message-format=json"
],
}

17
nodes/add/Cargo.toml Normal file
View File

@ -0,0 +1,17 @@
[package]
name = "add"
version = "0.1.0"
edition = "2021"
[dependencies]
wit-bindgen = { version = "0.19.2", default-features = false, features = [
"realloc",
] }
[lib]
crate-type = ["cdylib"]
[package.metadata.component]
package = "component:add"
[package.metadata.component.dependencies]

95
nodes/add/src/bindings.rs Normal file
View File

@ -0,0 +1,95 @@
// Generated by `wit-bindgen` 0.18.0. DO NOT EDIT!
const _: () = {
#[doc(hidden)]
#[export_name = "execute"]
#[allow(non_snake_case)]
unsafe extern "C" fn __export_execute(arg0: i32,arg1: i32,) -> i32 {
#[allow(unused_imports)]
use wit_bindgen::rt::{alloc, vec::Vec, string::String};
// Before executing any other code, use this function to run all static
// constructors, if they have not yet been run. This is a hack required
// to work around wasi-libc ctors calling import functions to initialize
// the environment.
//
// This functionality will be removed once rust 1.69.0 is stable, at which
// point wasi-libc will no longer have this behavior.
//
// See
// https://github.com/bytecodealliance/preview2-prototyping/issues/99
// for more details.
#[cfg(target_arch="wasm32")]
wit_bindgen::rt::run_ctors_once();
let result0 = <_GuestImpl as Guest>::execute(arg0, arg1);
wit_bindgen::rt::as_i32(result0)
}
};
const _: () = {
#[doc(hidden)]
#[export_name = "get-definition"]
#[allow(non_snake_case)]
unsafe extern "C" fn __export_get_definition() -> i32 {
#[allow(unused_imports)]
use wit_bindgen::rt::{alloc, vec::Vec, string::String};
// Before executing any other code, use this function to run all static
// constructors, if they have not yet been run. This is a hack required
// to work around wasi-libc ctors calling import functions to initialize
// the environment.
//
// This functionality will be removed once rust 1.69.0 is stable, at which
// point wasi-libc will no longer have this behavior.
//
// See
// https://github.com/bytecodealliance/preview2-prototyping/issues/99
// for more details.
#[cfg(target_arch="wasm32")]
wit_bindgen::rt::run_ctors_once();
let result0 = <_GuestImpl as Guest>::get_definition();
let ptr1 = _RET_AREA.0.as_mut_ptr() as i32;
let vec2 = (result0.into_bytes()).into_boxed_slice();
let ptr2 = vec2.as_ptr() as i32;
let len2 = vec2.len() as i32;
::core::mem::forget(vec2);
*((ptr1 + 4) as *mut i32) = len2;
*((ptr1 + 0) as *mut i32) = ptr2;
ptr1
}
const _: () = {
#[doc(hidden)]
#[export_name = "cabi_post_get-definition"]
#[allow(non_snake_case)]
unsafe extern "C" fn __post_return_get_definition(arg0: i32,) {
let l0 = *((arg0 + 0) as *const i32);
let l1 = *((arg0 + 4) as *const i32);
wit_bindgen::rt::dealloc(l0, (l1) as usize, 1);
}
};
};
use super::Component as _GuestImpl;
pub trait Guest {
fn execute(left: i32,right: i32,) -> i32;
fn get_definition() -> wit_bindgen::rt::string::String;
}
#[allow(unused_imports)]
use wit_bindgen::rt::{alloc, vec::Vec, string::String};
#[repr(align(4))]
struct _RetArea([u8; 8]);
static mut _RET_AREA: _RetArea = _RetArea([0; 8]);
#[cfg(target_arch = "wasm32")]
#[link_section = "component-type:example"]
#[doc(hidden)]
pub static __WIT_BINDGEN_COMPONENT_TYPE: [u8; 210] = [0, 97, 115, 109, 13, 0, 1, 0, 0, 25, 22, 119, 105, 116, 45, 99, 111, 109, 112, 111, 110, 101, 110, 116, 45, 101, 110, 99, 111, 100, 105, 110, 103, 4, 0, 7, 86, 1, 65, 2, 1, 65, 4, 1, 64, 2, 4, 108, 101, 102, 116, 122, 5, 114, 105, 103, 104, 116, 122, 0, 122, 4, 0, 7, 101, 120, 101, 99, 117, 116, 101, 1, 0, 1, 64, 0, 0, 115, 4, 0, 14, 103, 101, 116, 45, 100, 101, 102, 105, 110, 105, 116, 105, 111, 110, 1, 1, 4, 1, 21, 99, 111, 109, 112, 111, 110, 101, 110, 116, 58, 97, 100, 100, 47, 101, 120, 97, 109, 112, 108, 101, 4, 0, 11, 13, 1, 0, 7, 101, 120, 97, 109, 112, 108, 101, 3, 0, 0, 0, 70, 9, 112, 114, 111, 100, 117, 99, 101, 114, 115, 1, 12, 112, 114, 111, 99, 101, 115, 115, 101, 100, 45, 98, 121, 2, 13, 119, 105, 116, 45, 99, 111, 109, 112, 111, 110, 101, 110, 116, 6, 48, 46, 50, 49, 46, 48, 16, 119, 105, 116, 45, 98, 105, 110, 100, 103, 101, 110, 45, 114, 117, 115, 116, 6, 48, 46, 49, 56, 46, 48];
#[inline(never)]
#[doc(hidden)]
#[cfg(target_arch = "wasm32")]
pub fn __link_section() {}

16
nodes/add/src/lib.rs Normal file
View File

@ -0,0 +1,16 @@
mod bindings;
use bindings::Guest;
struct Component;
impl Guest for Component {
/// Say hello!
fn execute(left: i32, right: i32) -> i32 {
left + right
}
fn get_definition() -> String {
let definition = include_str!("./node.json");
definition.to_string()
}
}

17
nodes/add/src/node.json Normal file
View File

@ -0,0 +1,17 @@
{
"inputs": {
"left": {
"type": "integer",
"default": 50,
"min": 0,
"max": 255
},
"right": {
"type": "integer",
"default": 50,
"min": 0,
"max": 255
}
},
"outputs": ["integer"]
}

7
nodes/add/wit/world.wit Normal file
View File

@ -0,0 +1,7 @@
package component:add;
/// An example world for the component to target.
world example {
export execute: func(left: s32, right: s32) -> s32;
export get-definition: func() -> string;
}

11
nodes/multiply/Cargo.toml Normal file
View File

@ -0,0 +1,11 @@
[package]
name = "multiply"
version = "0.1.0"
edition = "2021"
[dependencies]
wasm-bindgen = "0.2.91"
[lib]
crate-type = ["cdylib"]

10
nodes/multiply/src/lib.rs Normal file
View File

@ -0,0 +1,10 @@
#[no_mangle]
pub extern "C" fn execute(a: u32, b: u32) -> u32 {
a + b
}
#[no_mangle]
pub extern "C" fn get_definition() -> String {
let bytes = include_str!("./node.json");
bytes.to_string()
}

View File

@ -0,0 +1,17 @@
{
"inputs": {
"left": {
"type": "integer",
"default": 50,
"min": 0,
"max": 255
},
"right": {
"type": "integer",
"default": 50,
"min": 0,
"max": 255
}
},
"outputs": ["integer"]
}

10
nodes/subtract/.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,10 @@
{
"rust-analyzer.check.overrideCommand": [
"cargo",
"component",
"check",
"--workspace",
"--all-targets",
"--message-format=json"
],
}

17
nodes/subtract/Cargo.toml Normal file
View File

@ -0,0 +1,17 @@
[package]
name = "subtract"
version = "0.1.0"
edition = "2021"
[dependencies]
wit-bindgen = { version = "0.19.2", default-features = false, features = [
"realloc",
] }
[lib]
crate-type = ["cdylib"]
[package.metadata.component]
package = "component:subtract"
[package.metadata.component.dependencies]

View File

@ -0,0 +1,95 @@
// Generated by `wit-bindgen` 0.18.0. DO NOT EDIT!
const _: () = {
#[doc(hidden)]
#[export_name = "execute"]
#[allow(non_snake_case)]
unsafe extern "C" fn __export_execute(arg0: i32,arg1: i32,) -> i32 {
#[allow(unused_imports)]
use wit_bindgen::rt::{alloc, vec::Vec, string::String};
// Before executing any other code, use this function to run all static
// constructors, if they have not yet been run. This is a hack required
// to work around wasi-libc ctors calling import functions to initialize
// the environment.
//
// This functionality will be removed once rust 1.69.0 is stable, at which
// point wasi-libc will no longer have this behavior.
//
// See
// https://github.com/bytecodealliance/preview2-prototyping/issues/99
// for more details.
#[cfg(target_arch="wasm32")]
wit_bindgen::rt::run_ctors_once();
let result0 = <_GuestImpl as Guest>::execute(arg0, arg1);
wit_bindgen::rt::as_i32(result0)
}
};
const _: () = {
#[doc(hidden)]
#[export_name = "get-definition"]
#[allow(non_snake_case)]
unsafe extern "C" fn __export_get_definition() -> i32 {
#[allow(unused_imports)]
use wit_bindgen::rt::{alloc, vec::Vec, string::String};
// Before executing any other code, use this function to run all static
// constructors, if they have not yet been run. This is a hack required
// to work around wasi-libc ctors calling import functions to initialize
// the environment.
//
// This functionality will be removed once rust 1.69.0 is stable, at which
// point wasi-libc will no longer have this behavior.
//
// See
// https://github.com/bytecodealliance/preview2-prototyping/issues/99
// for more details.
#[cfg(target_arch="wasm32")]
wit_bindgen::rt::run_ctors_once();
let result0 = <_GuestImpl as Guest>::get_definition();
let ptr1 = _RET_AREA.0.as_mut_ptr() as i32;
let vec2 = (result0.into_bytes()).into_boxed_slice();
let ptr2 = vec2.as_ptr() as i32;
let len2 = vec2.len() as i32;
::core::mem::forget(vec2);
*((ptr1 + 4) as *mut i32) = len2;
*((ptr1 + 0) as *mut i32) = ptr2;
ptr1
}
const _: () = {
#[doc(hidden)]
#[export_name = "cabi_post_get-definition"]
#[allow(non_snake_case)]
unsafe extern "C" fn __post_return_get_definition(arg0: i32,) {
let l0 = *((arg0 + 0) as *const i32);
let l1 = *((arg0 + 4) as *const i32);
wit_bindgen::rt::dealloc(l0, (l1) as usize, 1);
}
};
};
use super::Component as _GuestImpl;
pub trait Guest {
fn execute(left: i32,right: i32,) -> i32;
fn get_definition() -> wit_bindgen::rt::string::String;
}
#[allow(unused_imports)]
use wit_bindgen::rt::{alloc, vec::Vec, string::String};
#[repr(align(4))]
struct _RetArea([u8; 8]);
static mut _RET_AREA: _RetArea = _RetArea([0; 8]);
#[cfg(target_arch = "wasm32")]
#[link_section = "component-type:example"]
#[doc(hidden)]
pub static __WIT_BINDGEN_COMPONENT_TYPE: [u8; 215] = [0, 97, 115, 109, 13, 0, 1, 0, 0, 25, 22, 119, 105, 116, 45, 99, 111, 109, 112, 111, 110, 101, 110, 116, 45, 101, 110, 99, 111, 100, 105, 110, 103, 4, 0, 7, 91, 1, 65, 2, 1, 65, 4, 1, 64, 2, 4, 108, 101, 102, 116, 122, 5, 114, 105, 103, 104, 116, 122, 0, 122, 4, 0, 7, 101, 120, 101, 99, 117, 116, 101, 1, 0, 1, 64, 0, 0, 115, 4, 0, 14, 103, 101, 116, 45, 100, 101, 102, 105, 110, 105, 116, 105, 111, 110, 1, 1, 4, 1, 26, 99, 111, 109, 112, 111, 110, 101, 110, 116, 58, 115, 117, 98, 116, 114, 97, 99, 116, 47, 101, 120, 97, 109, 112, 108, 101, 4, 0, 11, 13, 1, 0, 7, 101, 120, 97, 109, 112, 108, 101, 3, 0, 0, 0, 70, 9, 112, 114, 111, 100, 117, 99, 101, 114, 115, 1, 12, 112, 114, 111, 99, 101, 115, 115, 101, 100, 45, 98, 121, 2, 13, 119, 105, 116, 45, 99, 111, 109, 112, 111, 110, 101, 110, 116, 6, 48, 46, 50, 49, 46, 48, 16, 119, 105, 116, 45, 98, 105, 110, 100, 103, 101, 110, 45, 114, 117, 115, 116, 6, 48, 46, 49, 56, 46, 48];
#[inline(never)]
#[doc(hidden)]
#[cfg(target_arch = "wasm32")]
pub fn __link_section() {}

16
nodes/subtract/src/lib.rs Normal file
View File

@ -0,0 +1,16 @@
mod bindings;
use bindings::Guest;
struct Component;
impl Guest for Component {
/// Say hello!
fn execute(left: i32, right: i32) -> i32 {
left - right
}
fn get_definition() -> String {
let definition = include_str!("./node.json");
definition.to_string()
}
}

View File

@ -0,0 +1,17 @@
{
"inputs": {
"left": {
"type": "integer",
"default": 50,
"min": 0,
"max": 255
},
"right": {
"type": "integer",
"default": 50,
"min": 0,
"max": 255
}
},
"outputs": ["integer"]
}

View File

@ -0,0 +1,7 @@
package component:subtract;
/// An example world for the component to target.
world example {
export execute: func(left: s32, right: s32) -> s32;
export get-definition: func() -> string;
}

View File

@ -0,0 +1,8 @@
[package]
name = "node_registry_rust"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]

View File

@ -0,0 +1,3 @@
pub fn add(left: usize, right: usize) -> usize {
left + right
}

View File

@ -0,0 +1,9 @@
[package]
name = "runtime_executor_rust"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
wasmtime = "18.0.1"

View File

@ -0,0 +1,63 @@
use std::env;
use std::path::PathBuf;
use wasmtime::*;
fn get_current_working_dir() -> std::io::Result<PathBuf> {
env::current_dir()
}
pub fn run_nodes() -> Result<i32, String> {
// An engine stores and configures global compilation settings like
// optimization level, enabled wasm features, etc.
let engine = Engine::default();
let pwd = get_current_working_dir().expect("Cant get wkring dir");
println!(
"{}",
pwd.into_os_string().into_string().expect("cant unwrap")
);
// We start off by creating a `Module` which represents a compiled form
// of our input wasm module. In this case it'll be JIT-compiled after
// we parse the text format.
let module =
Module::from_file(&engine, "src/hello.wat").expect("Could not instatiate hello.wat");
// A `Store` is what will own instances, functions, globals, etc. All wasm
// items are stored within a `Store`, and it's what we'll always be using to
// interact with the wasm world. Custom data can be stored in stores but for
// now we just use `()`.
let mut store = Store::new(&engine, ());
// With a compiled `Module` we can then instantiate it, creating
// an `Instance` which we can actually poke at functions on.
let instance = Instance::new(&mut store, &module, &[]).expect("Could not instatiate module");
// The `Instance` gives us access to various exported functions and items,
// which we access here to pull out our `answer` exported function and
// run it.
let answer = instance
.get_func(&mut store, "answer")
.expect("`answer` was not an exported function");
// There's a few ways we can call the `answer` `Func` value. The easiest
// is to statically assert its signature with `typed` (in this case
// asserting it takes no arguments and returns one i32) and then call it.
let answer = answer
.typed::<(), i32>(&store)
.expect("Can't access answer function");
// And finally we can call our function! Note that the error propagation
// with `?` is done to handle the case where the wasm function traps.
let result = answer
.call(&mut store, ())
.expect("Could not call function");
println!("Answer: {:?}", result);
Ok(result)
}
fn main() {
println!("Duude");
}

View File

@ -0,0 +1,7 @@
[package]
name = "runtime_executor_rust"
version = "0.1.0"
edition = "2021"
[dependencies]
wasmtime = "18.0.1"

View File

@ -0,0 +1,37 @@
use wasmtime::{Config, Engine, component::Component, component::Instance};
use std::env;
use std::path::PathBuf;
fn get_current_working_dir() -> std::io::Result<PathBuf> {
env::current_dir()
}
pub fn run_nodes() -> Result<i32, String> {
let mut config = Config::new();
config.wasm_multi_memory(true);
config.wasm_component_model(true);
// An engine stores and configures global compilation settings like
// optimization level, enabled wasm features, etc.
let engine = Engine::new(&config).expect("Could not create engine");
let component = Component::from_file(&engine, "../../target/wasm32-unknown-unknown/release/add.wasm").expect("Could not load add.wasm");
let resources = component.resources_required()
.expect("this component does not import any core modules or instances");
println!("{}", resources.num_memories);
let instance = Instance::new(&engine, component);
Ok(12)
}
fn main() {
let _ = run_nodes();
}

3
packages/types/index.ts Normal file
View File

@ -0,0 +1,3 @@
interface Node {
}

View File

@ -0,0 +1,12 @@
{
"name": "types",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC"
}

3574
pnpm-lock.yaml Normal file

File diff suppressed because it is too large Load Diff

4
pnpm-workspace.yaml Normal file
View File

@ -0,0 +1,4 @@
packages:
- backend
- frontend
- packages/*