refactor: merge get_outputs macros into define_node and include_definition
This commit is contained in:
parent
097b99ef55
commit
8f594aebe3
@ -1,4 +1,8 @@
|
|||||||
{
|
{
|
||||||
|
"outputs": [
|
||||||
|
"float"
|
||||||
|
],
|
||||||
|
"inputs": {
|
||||||
"value": {
|
"value": {
|
||||||
"type": "float",
|
"type": "float",
|
||||||
"value": 4.2
|
"value": 4.2
|
||||||
@ -8,3 +12,4 @@
|
|||||||
"value": 2
|
"value": 2
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
@ -1,11 +1,8 @@
|
|||||||
use macros::generate_input_types_file;
|
use macros::include_definition_file;
|
||||||
use utils::{evaluate_args, generate_outputs, get_args};
|
use utils::{evaluate_args, get_args};
|
||||||
use wasm_bindgen::prelude::*;
|
use wasm_bindgen::prelude::*;
|
||||||
// use web_sys::console;
|
|
||||||
|
|
||||||
generate_outputs!(["float"]);
|
include_definition_file!("src/input.json");
|
||||||
|
|
||||||
generate_input_types_file!("src/input.json");
|
|
||||||
|
|
||||||
#[wasm_bindgen]
|
#[wasm_bindgen]
|
||||||
pub fn execute(input: &[i32]) -> Vec<i32> {
|
pub fn execute(input: &[i32]) -> Vec<i32> {
|
||||||
|
@ -1,7 +1,12 @@
|
|||||||
{
|
{
|
||||||
|
"outputs": [
|
||||||
|
"float"
|
||||||
|
],
|
||||||
|
"inputs": {
|
||||||
"value": {
|
"value": {
|
||||||
"type": "float",
|
"type": "float",
|
||||||
"value": 0.1,
|
"value": 0.1,
|
||||||
"internal": true
|
"internal": true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
@ -1,9 +1,7 @@
|
|||||||
use macros::generate_input_types_file;
|
use macros::include_definition_file;
|
||||||
use utils::generate_outputs;
|
|
||||||
use wasm_bindgen::prelude::*;
|
use wasm_bindgen::prelude::*;
|
||||||
|
|
||||||
generate_outputs!(["float"]);
|
include_definition_file!("src/input.json");
|
||||||
generate_input_types_file!("src/input.json");
|
|
||||||
|
|
||||||
#[wasm_bindgen]
|
#[wasm_bindgen]
|
||||||
pub fn execute(args: &[i32]) -> Vec<i32> {
|
pub fn execute(args: &[i32]) -> Vec<i32> {
|
||||||
|
@ -1,4 +1,8 @@
|
|||||||
{
|
{
|
||||||
|
"outputs": [
|
||||||
|
"float"
|
||||||
|
],
|
||||||
|
"inputs": {
|
||||||
"op_type": {
|
"op_type": {
|
||||||
"label": "type",
|
"label": "type",
|
||||||
"type": "select",
|
"type": "select",
|
||||||
@ -25,3 +29,4 @@
|
|||||||
"setting": "math.clipping"
|
"setting": "math.clipping"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
@ -1,10 +1,7 @@
|
|||||||
use macros::generate_input_types_file;
|
use macros::include_definition_file;
|
||||||
use utils::generate_outputs;
|
|
||||||
use wasm_bindgen::prelude::*;
|
use wasm_bindgen::prelude::*;
|
||||||
|
|
||||||
generate_outputs!(["float"]);
|
include_definition_file!("src/input.json");
|
||||||
|
|
||||||
generate_input_types_file!("src/input.json");
|
|
||||||
|
|
||||||
#[wasm_bindgen]
|
#[wasm_bindgen]
|
||||||
pub fn execute(args: &[i32]) -> Vec<i32> {
|
pub fn execute(args: &[i32]) -> Vec<i32> {
|
||||||
|
@ -1,6 +1,9 @@
|
|||||||
{
|
{
|
||||||
|
"outputs": [],
|
||||||
|
"inputs": {
|
||||||
"input": {
|
"input": {
|
||||||
"type": "plant",
|
"type": "plant",
|
||||||
"external": true
|
"external": true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
use macros::generate_input_types_file;
|
use macros::include_definition_file;
|
||||||
use utils::evaluate_args;
|
use utils::evaluate_args;
|
||||||
use wasm_bindgen::prelude::*;
|
use wasm_bindgen::prelude::*;
|
||||||
|
|
||||||
generate_input_types_file!("src/inputs.json");
|
include_definition_file!("src/inputs.json");
|
||||||
|
|
||||||
#[wasm_bindgen]
|
#[wasm_bindgen]
|
||||||
pub fn execute(args: &[i32]) -> Vec<i32> {
|
pub fn execute(args: &[i32]) -> Vec<i32> {
|
||||||
|
@ -1,26 +1,16 @@
|
|||||||
|
use macros::define_node;
|
||||||
use wasm_bindgen::prelude::*;
|
use wasm_bindgen::prelude::*;
|
||||||
|
|
||||||
// lifted from the `console_log` example
|
define_node!(
|
||||||
#[wasm_bindgen]
|
|
||||||
extern "C" {
|
|
||||||
#[wasm_bindgen(js_namespace = console)]
|
|
||||||
fn log(s: &str);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[wasm_bindgen]
|
|
||||||
pub fn get_outputs() -> Vec<String> {
|
|
||||||
vec!["float".to_string()]
|
|
||||||
}
|
|
||||||
|
|
||||||
#[wasm_bindgen]
|
|
||||||
pub fn get_input_types() -> String {
|
|
||||||
r#"{
|
r#"{
|
||||||
|
"outputs": ["float"],
|
||||||
|
"inputs": {
|
||||||
"min": { "type": "float", "value": 2 },
|
"min": { "type": "float", "value": 2 },
|
||||||
"max": { "type": "float", "value": 2 },
|
"max": { "type": "float", "value": 2 },
|
||||||
"seed": { "type": "seed" }
|
"seed": { "type": "seed" }
|
||||||
}"#
|
|
||||||
.to_string()
|
|
||||||
}
|
}
|
||||||
|
}"#
|
||||||
|
);
|
||||||
|
|
||||||
#[wasm_bindgen]
|
#[wasm_bindgen]
|
||||||
pub fn execute(args: &[i32]) -> Vec<i32> {
|
pub fn execute(args: &[i32]) -> Vec<i32> {
|
||||||
|
@ -1,4 +1,8 @@
|
|||||||
{
|
{
|
||||||
|
"outputs": [
|
||||||
|
"plant"
|
||||||
|
],
|
||||||
|
"inputs": {
|
||||||
"length": {
|
"length": {
|
||||||
"type": "float",
|
"type": "float",
|
||||||
"value": 2
|
"value": 2
|
||||||
@ -13,3 +17,4 @@
|
|||||||
"setting": "resolution.stem"
|
"setting": "resolution.stem"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
@ -1,10 +1,9 @@
|
|||||||
use macros::generate_input_types_file;
|
use macros::include_definition_file;
|
||||||
use utils::{evaluate_args, generate_outputs, get_args};
|
use utils::{evaluate_args, get_args};
|
||||||
use wasm_bindgen::prelude::*;
|
use wasm_bindgen::prelude::*;
|
||||||
use web_sys::console;
|
use web_sys::console;
|
||||||
|
|
||||||
generate_outputs!(["plant"]);
|
include_definition_file!("src/input.json");
|
||||||
generate_input_types_file!("src/input.json");
|
|
||||||
|
|
||||||
#[wasm_bindgen]
|
#[wasm_bindgen]
|
||||||
pub fn execute(input: &[i32]) -> Vec<i32> {
|
pub fn execute(input: &[i32]) -> Vec<i32> {
|
||||||
|
@ -1,7 +1,12 @@
|
|||||||
{
|
{
|
||||||
|
"outputs": [
|
||||||
|
"float"
|
||||||
|
],
|
||||||
|
"inputs": {
|
||||||
"array": {
|
"array": {
|
||||||
"type": "float",
|
"type": "float",
|
||||||
"value": 2,
|
"value": 2,
|
||||||
"external": true
|
"external": true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
@ -1,10 +1,8 @@
|
|||||||
use macros::generate_input_types_file;
|
use macros::include_definition_file;
|
||||||
use utils::{decode_float, encode_float, generate_outputs};
|
use utils::{decode_float, encode_float};
|
||||||
use wasm_bindgen::prelude::*;
|
use wasm_bindgen::prelude::*;
|
||||||
|
|
||||||
generate_outputs!(["float"]);
|
include_definition_file!("src/input.json");
|
||||||
|
|
||||||
generate_input_types_file!("src/input.json");
|
|
||||||
|
|
||||||
#[wasm_bindgen]
|
#[wasm_bindgen]
|
||||||
pub fn execute(input: &[i32]) -> Vec<i32> {
|
pub fn execute(input: &[i32]) -> Vec<i32> {
|
||||||
|
@ -8,7 +8,7 @@ use std::path::Path;
|
|||||||
use syn::{parse_macro_input, LitStr};
|
use syn::{parse_macro_input, LitStr};
|
||||||
|
|
||||||
#[proc_macro]
|
#[proc_macro]
|
||||||
pub fn generate_input_types(input: TokenStream) -> TokenStream {
|
pub fn define_node(input: TokenStream) -> TokenStream {
|
||||||
let input_string = parse_macro_input!(input as LitStr).value();
|
let input_string = parse_macro_input!(input as LitStr).value();
|
||||||
|
|
||||||
// Validate JSON format
|
// Validate JSON format
|
||||||
@ -23,7 +23,7 @@ pub fn generate_input_types(input: TokenStream) -> TokenStream {
|
|||||||
// Generate the output function
|
// Generate the output function
|
||||||
let expanded = quote! {
|
let expanded = quote! {
|
||||||
#[wasm_bindgen]
|
#[wasm_bindgen]
|
||||||
pub fn get_input_types() -> String {
|
pub fn get_definition() -> String {
|
||||||
String::from(#formatted_json)
|
String::from(#formatted_json)
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -33,7 +33,7 @@ pub fn generate_input_types(input: TokenStream) -> TokenStream {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[proc_macro]
|
#[proc_macro]
|
||||||
pub fn generate_input_types_file(input: TokenStream) -> TokenStream {
|
pub fn include_definition_file(input: TokenStream) -> TokenStream {
|
||||||
let file_path = syn::parse_macro_input!(input as syn::LitStr).value();
|
let file_path = syn::parse_macro_input!(input as syn::LitStr).value();
|
||||||
|
|
||||||
// Retrieve the directory containing the Cargo.toml file
|
// Retrieve the directory containing the Cargo.toml file
|
||||||
@ -55,7 +55,7 @@ pub fn generate_input_types_file(input: TokenStream) -> TokenStream {
|
|||||||
// Generate the function that returns the JSON string
|
// Generate the function that returns the JSON string
|
||||||
let expanded = quote! {
|
let expanded = quote! {
|
||||||
#[wasm_bindgen]
|
#[wasm_bindgen]
|
||||||
pub fn get_input_types() -> String {
|
pub fn get_definition() -> String {
|
||||||
String::from(#json_content)
|
String::from(#json_content)
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
import { createWasmWrapper } from "@nodes/utils"
|
import { createWasmWrapper } from "@nodes/utils"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
export async function getNodeWasm(id: `${string}/${string}/${string}`) {
|
export async function getNodeWasm(id: `${string}/${string}/${string}`) {
|
||||||
|
|
||||||
const wasmResponse = await fetch(`/n/${id}/wasm`);
|
const wasmResponse = await fetch(`/n/${id}/wasm`);
|
||||||
@ -23,14 +21,11 @@ export async function getNode(id: `${string}/${string}/${string}`) {
|
|||||||
|
|
||||||
const wrapper = await getNodeWasm(id);
|
const wrapper = await getNodeWasm(id);
|
||||||
|
|
||||||
const outputs = wrapper?.get_outputs?.() || [];
|
const { inputs, outputs } = wrapper?.get_definition?.();
|
||||||
const rawInputs = wrapper.get_inputs();
|
|
||||||
try {
|
try {
|
||||||
const inputTypes = JSON.parse(rawInputs);
|
return { id, inputs, outputs }
|
||||||
return { id, outputs, inputs: inputTypes }
|
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.log(rawInputs);
|
console.log("Failed to parse input types for node", { id });
|
||||||
console.log("Failed to parse input types for node", { id, rawInputs });
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -8,5 +8,8 @@
|
|||||||
},
|
},
|
||||||
"keywords": [],
|
"keywords": [],
|
||||||
"author": "",
|
"author": "",
|
||||||
"license": "ISC"
|
"license": "ISC",
|
||||||
|
"dependencies": {
|
||||||
|
"@nodes/types": "link:../types"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,13 +16,3 @@ pub fn set_panic_hook() {
|
|||||||
#[cfg(feature = "console_error_panic_hook")]
|
#[cfg(feature = "console_error_panic_hook")]
|
||||||
console_error_panic_hook::set_once();
|
console_error_panic_hook::set_once();
|
||||||
}
|
}
|
||||||
|
|
||||||
#[macro_export]
|
|
||||||
macro_rules! generate_outputs {
|
|
||||||
([$($item:expr),* $(,)?]) => {
|
|
||||||
#[wasm_bindgen]
|
|
||||||
pub fn get_outputs() -> Vec<String> {
|
|
||||||
vec![$($item.to_string()),*]
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
|
import { NodeType } from "@nodes/types";
|
||||||
|
|
||||||
const cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });
|
const cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });
|
||||||
const cachedTextEncoder = new TextEncoder('utf-8');
|
const cachedTextEncoder = new TextEncoder();
|
||||||
|
|
||||||
|
|
||||||
const encodeString = (typeof cachedTextEncoder.encodeInto === 'function'
|
const encodeString = (typeof cachedTextEncoder.encodeInto === 'function'
|
||||||
@ -107,36 +108,19 @@ export function createWasmWrapper() {
|
|||||||
return addHeapObject(ret);
|
return addHeapObject(ret);
|
||||||
};
|
};
|
||||||
|
|
||||||
function get_outputs() {
|
|
||||||
if (wasm === undefined || !wasm.get_outputs) {
|
|
||||||
return [];
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
|
|
||||||
wasm.get_outputs(retptr);
|
|
||||||
var r0 = getInt32Memory0()[retptr / 4 + 0];
|
|
||||||
var r1 = getInt32Memory0()[retptr / 4 + 1];
|
|
||||||
var v1 = getArrayJsValueFromWasm0(r0, r1).slice();
|
|
||||||
wasm.__wbindgen_free(r0, r1 * 4, 4);
|
|
||||||
return v1;
|
|
||||||
} finally {
|
|
||||||
wasm.__wbindgen_add_to_stack_pointer(16);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Additional methods and their internal helpers can also be refactored in a similar manner.
|
// Additional methods and their internal helpers can also be refactored in a similar manner.
|
||||||
function get_inputs() {
|
function get_definition() {
|
||||||
let deferred1_0: number;
|
let deferred1_0: number;
|
||||||
let deferred1_1: number;
|
let deferred1_1: number;
|
||||||
try {
|
try {
|
||||||
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
|
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
|
||||||
wasm.get_input_types(retptr);
|
wasm.get_definition(retptr);
|
||||||
var r0 = getInt32Memory0()[retptr / 4 + 0];
|
var r0 = getInt32Memory0()[retptr / 4 + 0];
|
||||||
var r1 = getInt32Memory0()[retptr / 4 + 1];
|
var r1 = getInt32Memory0()[retptr / 4 + 1];
|
||||||
deferred1_0 = r0;
|
deferred1_0 = r0;
|
||||||
deferred1_1 = r1;
|
deferred1_1 = r1;
|
||||||
return getStringFromWasm0(r0, r1);
|
const string = getStringFromWasm0(r0, r1);
|
||||||
|
return JSON.parse(string) as Omit<NodeType, "id">;
|
||||||
} finally {
|
} finally {
|
||||||
wasm.__wbindgen_add_to_stack_pointer(16);
|
wasm.__wbindgen_add_to_stack_pointer(16);
|
||||||
wasm.__wbindgen_free(deferred1_0, deferred1_1, 1);
|
wasm.__wbindgen_free(deferred1_0, deferred1_1, 1);
|
||||||
@ -144,7 +128,7 @@ export function createWasmWrapper() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function execute(args) {
|
function execute(args: Int32Array) {
|
||||||
try {
|
try {
|
||||||
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
|
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
|
||||||
const ptr0 = passArray32ToWasm0(args, wasm.__wbindgen_malloc);
|
const ptr0 = passArray32ToWasm0(args, wasm.__wbindgen_malloc);
|
||||||
@ -160,7 +144,6 @@ export function createWasmWrapper() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function passStringToWasm0(arg: string, malloc: (arg0: any, arg1: number) => number, realloc: ((arg0: number, arg1: any, arg2: number, arg3: number) => number) | undefined) {
|
function passStringToWasm0(arg: string, malloc: (arg0: any, arg1: number) => number, realloc: ((arg0: number, arg1: any, arg2: number, arg3: number) => number) | undefined) {
|
||||||
|
|
||||||
if (realloc === undefined) {
|
if (realloc === undefined) {
|
||||||
@ -245,8 +228,7 @@ export function createWasmWrapper() {
|
|||||||
|
|
||||||
// Expose other methods that interact with the wasm instance
|
// Expose other methods that interact with the wasm instance
|
||||||
execute,
|
execute,
|
||||||
get_outputs,
|
get_definition,
|
||||||
get_inputs,
|
|
||||||
|
|
||||||
__wbindgen_string_new,
|
__wbindgen_string_new,
|
||||||
__wbindgen_object_drop_ref,
|
__wbindgen_object_drop_ref,
|
||||||
|
@ -255,7 +255,11 @@ importers:
|
|||||||
specifier: ^1.5.0
|
specifier: ^1.5.0
|
||||||
version: 1.5.0
|
version: 1.5.0
|
||||||
|
|
||||||
packages/utils: {}
|
packages/utils:
|
||||||
|
dependencies:
|
||||||
|
'@nodes/types':
|
||||||
|
specifier: link:../types
|
||||||
|
version: link:../types
|
||||||
|
|
||||||
packages:
|
packages:
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user