Compare commits
3 Commits
main
...
feat/remov
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e84c715f4c | ||
|
|
ecbcc814ed
|
||
|
|
be97387252
|
@@ -1,59 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "https://dprint.dev/schemas/v0.json",
|
|
||||||
"indentWidth": 2,
|
|
||||||
"typescript": {
|
|
||||||
// https://dprint.dev/plugins/typescript/config/
|
|
||||||
"quoteStyle": "preferSingle",
|
|
||||||
"trailingCommas": "never"
|
|
||||||
},
|
|
||||||
"json": {
|
|
||||||
},
|
|
||||||
"markdown": {
|
|
||||||
},
|
|
||||||
"toml": {
|
|
||||||
},
|
|
||||||
"dockerfile": {
|
|
||||||
},
|
|
||||||
"ruff": {
|
|
||||||
},
|
|
||||||
"jupyter": {
|
|
||||||
},
|
|
||||||
"malva": {
|
|
||||||
},
|
|
||||||
"markup": {
|
|
||||||
},
|
|
||||||
"yaml": {
|
|
||||||
},
|
|
||||||
"graphql": {
|
|
||||||
},
|
|
||||||
"exec": {
|
|
||||||
"cwd": "${configDir}",
|
|
||||||
"commands": [{
|
|
||||||
"command": "rustfmt --edition 2024",
|
|
||||||
"exts": ["rs"],
|
|
||||||
// add the config files for automatic cache invalidation when the rust version or rustfmt config changes
|
|
||||||
"cacheKeyFiles": [
|
|
||||||
"rustfmt.toml",
|
|
||||||
"rust-toolchain.toml"
|
|
||||||
]
|
|
||||||
}]
|
|
||||||
},
|
|
||||||
"excludes": [
|
|
||||||
"**/node_modules",
|
|
||||||
"**/*-lock.json"
|
|
||||||
],
|
|
||||||
"plugins": [
|
|
||||||
"https://plugins.dprint.dev/typescript-0.95.13.wasm",
|
|
||||||
"https://plugins.dprint.dev/json-0.21.1.wasm",
|
|
||||||
"https://plugins.dprint.dev/markdown-0.20.0.wasm",
|
|
||||||
"https://plugins.dprint.dev/toml-0.7.0.wasm",
|
|
||||||
"https://plugins.dprint.dev/dockerfile-0.3.3.wasm",
|
|
||||||
"https://plugins.dprint.dev/ruff-0.6.11.wasm",
|
|
||||||
"https://plugins.dprint.dev/jupyter-0.2.1.wasm",
|
|
||||||
"https://plugins.dprint.dev/g-plane/malva-v0.15.1.wasm",
|
|
||||||
"https://plugins.dprint.dev/g-plane/markup_fmt-v0.25.3.wasm",
|
|
||||||
"https://plugins.dprint.dev/g-plane/pretty_yaml-v0.5.1.wasm",
|
|
||||||
"https://plugins.dprint.dev/g-plane/pretty_graphql-v0.2.3.wasm",
|
|
||||||
"https://plugins.dprint.dev/exec-0.6.0.json@a054130d458f124f9b5c91484833828950723a5af3f8ff2bd1523bd47b83b364"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
367
Cargo.lock
generated
367
Cargo.lock
generated
@@ -1,176 +1,80 @@
|
|||||||
# This file is automatically @generated by Cargo.
|
# This file is automatically @generated by Cargo.
|
||||||
# It is not intended for manual editing.
|
# It is not intended for manual editing.
|
||||||
version = 3
|
version = 4
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "autocfg"
|
name = "autocfg"
|
||||||
version = "1.2.0"
|
version = "1.5.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "f1fdabc7756949593fe60f30ec81974b613357de856987752631dea1e3394c80"
|
checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "box"
|
name = "box"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"console_error_panic_hook",
|
|
||||||
"nodarium_macros",
|
"nodarium_macros",
|
||||||
"nodarium_utils",
|
"nodarium_utils",
|
||||||
"serde",
|
|
||||||
"serde-wasm-bindgen",
|
|
||||||
"wasm-bindgen",
|
|
||||||
"wasm-bindgen-test",
|
|
||||||
"web-sys",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "branch"
|
name = "branch"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"console_error_panic_hook",
|
|
||||||
"glam",
|
|
||||||
"nodarium_macros",
|
"nodarium_macros",
|
||||||
"nodarium_utils",
|
"nodarium_utils",
|
||||||
"serde",
|
|
||||||
"serde-wasm-bindgen",
|
|
||||||
"wasm-bindgen",
|
|
||||||
"wasm-bindgen-test",
|
|
||||||
"web-sys",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "bumpalo"
|
|
||||||
version = "3.16.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "cfg-if"
|
|
||||||
version = "1.0.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "console_error_panic_hook"
|
|
||||||
version = "0.1.7"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc"
|
|
||||||
dependencies = [
|
|
||||||
"cfg-if",
|
|
||||||
"wasm-bindgen",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "float"
|
name = "float"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"console_error_panic_hook",
|
|
||||||
"nodarium_macros",
|
"nodarium_macros",
|
||||||
"nodarium_utils",
|
"nodarium_utils",
|
||||||
"serde",
|
|
||||||
"serde-wasm-bindgen",
|
|
||||||
"wasm-bindgen",
|
|
||||||
"wasm-bindgen-test",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "glam"
|
name = "glam"
|
||||||
version = "0.27.0"
|
version = "0.30.10"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "9e05e7e6723e3455f4818c7b26e855439f7546cf617ef669d1adedb8669e5cb9"
|
checksum = "19fc433e8437a212d1b6f1e68c7824af3aed907da60afa994e7f542d18d12aa9"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "gravity"
|
name = "gravity"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"console_error_panic_hook",
|
|
||||||
"glam",
|
"glam",
|
||||||
"nodarium_macros",
|
"nodarium_macros",
|
||||||
"nodarium_utils",
|
"nodarium_utils",
|
||||||
"noise",
|
]
|
||||||
"serde",
|
|
||||||
"serde-wasm-bindgen",
|
[[package]]
|
||||||
"wasm-bindgen",
|
name = "instance"
|
||||||
"wasm-bindgen-test",
|
version = "0.1.0"
|
||||||
"web-sys",
|
dependencies = [
|
||||||
|
"glam",
|
||||||
|
"nodarium_macros",
|
||||||
|
"nodarium_utils",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "itoa"
|
name = "itoa"
|
||||||
version = "1.0.11"
|
version = "1.0.17"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b"
|
checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "js-sys"
|
|
||||||
version = "0.3.69"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d"
|
|
||||||
dependencies = [
|
|
||||||
"wasm-bindgen",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "log"
|
|
||||||
version = "0.4.21"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "math"
|
name = "math"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"console_error_panic_hook",
|
|
||||||
"nodarium_macros",
|
"nodarium_macros",
|
||||||
"nodarium_utils",
|
"nodarium_utils",
|
||||||
"serde",
|
|
||||||
"serde-wasm-bindgen",
|
|
||||||
"wasm-bindgen",
|
|
||||||
"wasm-bindgen-test",
|
|
||||||
"web-sys",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "max-plantarium-triangle"
|
name = "memchr"
|
||||||
version = "0.1.0"
|
version = "2.7.6"
|
||||||
dependencies = [
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
"console_error_panic_hook",
|
checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273"
|
||||||
"nodarium_macros",
|
|
||||||
"nodarium_utils",
|
|
||||||
"serde",
|
|
||||||
"serde-wasm-bindgen",
|
|
||||||
"wasm-bindgen",
|
|
||||||
"wasm-bindgen-test",
|
|
||||||
"web-sys",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "max-plantarium-vec3"
|
|
||||||
version = "0.1.0"
|
|
||||||
dependencies = [
|
|
||||||
"console_error_panic_hook",
|
|
||||||
"nodarium_macros",
|
|
||||||
"nodarium_utils",
|
|
||||||
"serde",
|
|
||||||
"serde-wasm-bindgen",
|
|
||||||
"wasm-bindgen",
|
|
||||||
"wasm-bindgen-test",
|
|
||||||
"web-sys",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "nodarium_instance"
|
|
||||||
version = "0.1.0"
|
|
||||||
dependencies = [
|
|
||||||
"console_error_panic_hook",
|
|
||||||
"glam",
|
|
||||||
"nodarium_macros",
|
|
||||||
"nodarium_utils",
|
|
||||||
"serde",
|
|
||||||
"serde-wasm-bindgen",
|
|
||||||
"wasm-bindgen",
|
|
||||||
"wasm-bindgen-test",
|
|
||||||
"web-sys",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "nodarium_macros"
|
name = "nodarium_macros"
|
||||||
@@ -180,7 +84,7 @@ dependencies = [
|
|||||||
"quote",
|
"quote",
|
||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
"syn 1.0.109",
|
"syn",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -195,29 +99,19 @@ dependencies = [
|
|||||||
name = "nodarium_utils"
|
name = "nodarium_utils"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"console_error_panic_hook",
|
|
||||||
"glam",
|
"glam",
|
||||||
"noise",
|
"noise 0.9.0",
|
||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
"wasm-bindgen",
|
|
||||||
"web-sys",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "nodes-noise"
|
name = "noise"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"console_error_panic_hook",
|
|
||||||
"glam",
|
|
||||||
"nodarium_macros",
|
"nodarium_macros",
|
||||||
"nodarium_utils",
|
"nodarium_utils",
|
||||||
"noise",
|
"noise 0.9.0",
|
||||||
"serde",
|
|
||||||
"serde-wasm-bindgen",
|
|
||||||
"wasm-bindgen",
|
|
||||||
"wasm-bindgen-test",
|
|
||||||
"web-sys",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -233,48 +127,35 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "num-traits"
|
name = "num-traits"
|
||||||
version = "0.2.18"
|
version = "0.2.19"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a"
|
checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"autocfg",
|
"autocfg",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "once_cell"
|
|
||||||
version = "1.19.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "output"
|
name = "output"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"console_error_panic_hook",
|
|
||||||
"glam",
|
|
||||||
"nodarium_macros",
|
"nodarium_macros",
|
||||||
"nodarium_utils",
|
"nodarium_utils",
|
||||||
"serde",
|
|
||||||
"serde_json",
|
|
||||||
"wasm-bindgen",
|
|
||||||
"wasm-bindgen-test",
|
|
||||||
"web-sys",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "proc-macro2"
|
name = "proc-macro2"
|
||||||
version = "1.0.81"
|
version = "1.0.105"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "3d1597b0c024618f09a9c3b8655b7e430397a36d23fdafec26d6965e9eec3eba"
|
checksum = "535d180e0ecab6268a3e718bb9fd44db66bbbc256257165fc699dadf70d16fe7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"unicode-ident",
|
"unicode-ident",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "quote"
|
name = "quote"
|
||||||
version = "1.0.36"
|
version = "1.0.43"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7"
|
checksum = "dc74d9a594b72ae6656596548f56f667211f8a97b3d4c3d467150794690dc40a"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
]
|
]
|
||||||
@@ -307,103 +188,76 @@ dependencies = [
|
|||||||
name = "random"
|
name = "random"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"console_error_panic_hook",
|
|
||||||
"nodarium_macros",
|
"nodarium_macros",
|
||||||
"nodarium_utils",
|
"nodarium_utils",
|
||||||
"serde",
|
|
||||||
"serde-wasm-bindgen",
|
|
||||||
"wasm-bindgen",
|
|
||||||
"wasm-bindgen-test",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rotate"
|
name = "rotate"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"console_error_panic_hook",
|
|
||||||
"glam",
|
"glam",
|
||||||
"nodarium_macros",
|
"nodarium_macros",
|
||||||
"nodarium_utils",
|
"nodarium_utils",
|
||||||
"serde",
|
"serde",
|
||||||
"serde-wasm-bindgen",
|
|
||||||
"wasm-bindgen",
|
|
||||||
"wasm-bindgen-test",
|
|
||||||
"web-sys",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "ryu"
|
|
||||||
version = "1.0.17"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "scoped-tls"
|
|
||||||
version = "1.0.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde"
|
name = "serde"
|
||||||
version = "1.0.198"
|
version = "1.0.228"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "9846a40c979031340571da2545a4e5b7c4163bdae79b301d5f86d03979451fcc"
|
checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e"
|
||||||
|
dependencies = [
|
||||||
|
"serde_core",
|
||||||
|
"serde_derive",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "serde_core"
|
||||||
|
version = "1.0.228"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"serde_derive",
|
"serde_derive",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "serde-wasm-bindgen"
|
|
||||||
version = "0.4.5"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "e3b4c031cd0d9014307d82b8abf653c0290fbdaeb4c02d00c63cf52f728628bf"
|
|
||||||
dependencies = [
|
|
||||||
"js-sys",
|
|
||||||
"serde",
|
|
||||||
"wasm-bindgen",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde_derive"
|
name = "serde_derive"
|
||||||
version = "1.0.198"
|
version = "1.0.228"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "e88edab869b01783ba905e7d0153f9fc1a6505a96e4ad3018011eedb838566d9"
|
checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
"syn 2.0.60",
|
"syn",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde_json"
|
name = "serde_json"
|
||||||
version = "1.0.116"
|
version = "1.0.149"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "3e17db7126d17feb94eb3fad46bf1a96b034e8aacbc2e775fe81505f8b0b2813"
|
checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"itoa",
|
"itoa",
|
||||||
"ryu",
|
"memchr",
|
||||||
"serde",
|
"serde",
|
||||||
|
"serde_core",
|
||||||
|
"zmij",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "stem"
|
name = "stem"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"console_error_panic_hook",
|
|
||||||
"nodarium_macros",
|
"nodarium_macros",
|
||||||
"nodarium_utils",
|
"nodarium_utils",
|
||||||
"serde",
|
|
||||||
"serde-wasm-bindgen",
|
|
||||||
"wasm-bindgen",
|
|
||||||
"wasm-bindgen-test",
|
|
||||||
"web-sys",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "syn"
|
name = "syn"
|
||||||
version = "1.0.109"
|
version = "2.0.114"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
|
checksum = "d4d107df263a3013ef9b1879b0df87d706ff80f65a86ea879bd9c31f9b307c2a"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
@@ -411,119 +265,30 @@ dependencies = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "syn"
|
name = "triangle"
|
||||||
version = "2.0.60"
|
version = "0.1.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "909518bc7b1c9b779f1bbf07f2929d35af9f0f37e47c6e9ef7f9dddc1e1821f3"
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"nodarium_macros",
|
||||||
"quote",
|
"nodarium_utils",
|
||||||
"unicode-ident",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "unicode-ident"
|
name = "unicode-ident"
|
||||||
version = "1.0.12"
|
version = "1.0.22"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
|
checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasm-bindgen"
|
name = "vec3"
|
||||||
version = "0.2.92"
|
version = "0.1.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8"
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if",
|
"nodarium_macros",
|
||||||
"wasm-bindgen-macro",
|
"nodarium_utils",
|
||||||
|
"serde",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasm-bindgen-backend"
|
name = "zmij"
|
||||||
version = "0.2.92"
|
version = "1.0.15"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da"
|
checksum = "94f63c051f4fe3c1509da62131a678643c5b6fbdc9273b2b79d4378ebda003d2"
|
||||||
dependencies = [
|
|
||||||
"bumpalo",
|
|
||||||
"log",
|
|
||||||
"once_cell",
|
|
||||||
"proc-macro2",
|
|
||||||
"quote",
|
|
||||||
"syn 2.0.60",
|
|
||||||
"wasm-bindgen-shared",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "wasm-bindgen-futures"
|
|
||||||
version = "0.4.42"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0"
|
|
||||||
dependencies = [
|
|
||||||
"cfg-if",
|
|
||||||
"js-sys",
|
|
||||||
"wasm-bindgen",
|
|
||||||
"web-sys",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "wasm-bindgen-macro"
|
|
||||||
version = "0.2.92"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726"
|
|
||||||
dependencies = [
|
|
||||||
"quote",
|
|
||||||
"wasm-bindgen-macro-support",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "wasm-bindgen-macro-support"
|
|
||||||
version = "0.2.92"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7"
|
|
||||||
dependencies = [
|
|
||||||
"proc-macro2",
|
|
||||||
"quote",
|
|
||||||
"syn 2.0.60",
|
|
||||||
"wasm-bindgen-backend",
|
|
||||||
"wasm-bindgen-shared",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "wasm-bindgen-shared"
|
|
||||||
version = "0.2.92"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "wasm-bindgen-test"
|
|
||||||
version = "0.3.42"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "d9bf62a58e0780af3e852044583deee40983e5886da43a271dd772379987667b"
|
|
||||||
dependencies = [
|
|
||||||
"console_error_panic_hook",
|
|
||||||
"js-sys",
|
|
||||||
"scoped-tls",
|
|
||||||
"wasm-bindgen",
|
|
||||||
"wasm-bindgen-futures",
|
|
||||||
"wasm-bindgen-test-macro",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "wasm-bindgen-test-macro"
|
|
||||||
version = "0.3.42"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "b7f89739351a2e03cb94beb799d47fb2cac01759b40ec441f7de39b00cbf7ef0"
|
|
||||||
dependencies = [
|
|
||||||
"proc-macro2",
|
|
||||||
"quote",
|
|
||||||
"syn 2.0.60",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "web-sys"
|
|
||||||
version = "0.3.69"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef"
|
|
||||||
dependencies = [
|
|
||||||
"js-sys",
|
|
||||||
"wasm-bindgen",
|
|
||||||
]
|
|
||||||
|
|||||||
@@ -22,7 +22,8 @@
|
|||||||
"idb": "^8.0.3",
|
"idb": "^8.0.3",
|
||||||
"jsondiffpatch": "^0.7.3",
|
"jsondiffpatch": "^0.7.3",
|
||||||
"tailwindcss": "^4.1.18",
|
"tailwindcss": "^4.1.18",
|
||||||
"three": "^0.182.0"
|
"three": "^0.182.0",
|
||||||
|
"wabt": "^1.0.39"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@iconify-json/tabler": "^1.2.26",
|
"@iconify-json/tabler": "^1.2.26",
|
||||||
|
|||||||
1576
app/pnpm-lock.yaml
generated
Normal file
1576
app/pnpm-lock.yaml
generated
Normal file
File diff suppressed because it is too large
Load Diff
@@ -5,6 +5,7 @@
|
|||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<link rel="icon" href="%sveltekit.assets%/svelte.svg" />
|
<link rel="icon" href="%sveltekit.assets%/svelte.svg" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
|
<script defer src="https://umami.max-richter.dev/script.js" data-website-id="585c442b-0524-4874-8955-f9853b44b17e"></script>
|
||||||
%sveltekit.head%
|
%sveltekit.head%
|
||||||
<title>Nodes</title>
|
<title>Nodes</title>
|
||||||
<script>
|
<script>
|
||||||
|
|||||||
@@ -1,2 +0,0 @@
|
|||||||
import { PUBLIC_ANALYTIC_SCRIPT } from "$env/static/public";
|
|
||||||
export const ANALYTIC_SCRIPT = PUBLIC_ANALYTIC_SCRIPT;
|
|
||||||
@@ -73,14 +73,8 @@
|
|||||||
{#key id && graphId}
|
{#key id && graphId}
|
||||||
<div class="content" class:disabled={graph?.inputSockets?.has(socketId)}>
|
<div class="content" class:disabled={graph?.inputSockets?.has(socketId)}>
|
||||||
{#if inputType.label !== ""}
|
{#if inputType.label !== ""}
|
||||||
<label for={elementId} title={input.description}
|
<label for={elementId}>{input.label || id}</label>
|
||||||
>{input.label || id}</label
|
|
||||||
>
|
|
||||||
{/if}
|
{/if}
|
||||||
<span
|
|
||||||
class="absolute i-[tabler--help-circle] size-4 block top-2 right-2 opacity-30"
|
|
||||||
title={JSON.stringify(input, null, 2)}
|
|
||||||
></span>
|
|
||||||
{#if inputType.external !== true}
|
{#if inputType.external !== true}
|
||||||
<NodeInputEl {graph} {elementId} bind:node {input} {id} />
|
<NodeInputEl {graph} {elementId} bind:node {input} {id} />
|
||||||
{/if}
|
{/if}
|
||||||
@@ -187,6 +181,9 @@
|
|||||||
.content.disabled {
|
.content.disabled {
|
||||||
opacity: 0.2;
|
opacity: 0.2;
|
||||||
}
|
}
|
||||||
|
.content.disabled > * {
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
.disabled svg path {
|
.disabled svg path {
|
||||||
d: var(--hover-path-disabled) !important;
|
d: var(--hover-path-disabled) !important;
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import fs from "fs/promises";
|
|||||||
import path from "path";
|
import path from "path";
|
||||||
|
|
||||||
export async function getWasm(id: `${string}/${string}/${string}`) {
|
export async function getWasm(id: `${string}/${string}/${string}`) {
|
||||||
const filePath = path.resolve(`../nodes/${id}/pkg/index_bg.wasm`);
|
const filePath = path.resolve(`../nodes/${id}/pkg/node.wasm`);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await fs.access(filePath);
|
await fs.access(filePath);
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ export class MemoryRuntimeExecutor implements RuntimeExecutor {
|
|||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
private registry: NodeRegistry,
|
private registry: NodeRegistry,
|
||||||
public cache?: SyncCache<Int32Array>,
|
private cache?: SyncCache<Int32Array>,
|
||||||
) {
|
) {
|
||||||
this.cache = undefined;
|
this.cache = undefined;
|
||||||
}
|
}
|
||||||
@@ -244,13 +244,14 @@ export class MemoryRuntimeExecutor implements RuntimeExecutor {
|
|||||||
}
|
}
|
||||||
this.perf?.addPoint("cache-hit", 0);
|
this.perf?.addPoint("cache-hit", 0);
|
||||||
|
|
||||||
log.group(`executing ${node_type.id || node.id}`);
|
log.group(`executing ${node_type.id}-${node.id}`);
|
||||||
log.log(`Inputs:`, inputs);
|
log.log(`Inputs:`, inputs);
|
||||||
a = performance.now();
|
a = performance.now();
|
||||||
results[node.id] = node_type.execute(encoded_inputs);
|
results[node.id] = node_type.execute(encoded_inputs);
|
||||||
|
log.log("Executed", node.type, node.id)
|
||||||
b = performance.now();
|
b = performance.now();
|
||||||
|
|
||||||
if (this.cache) {
|
if (this.cache && node.id !== outputNode.id) {
|
||||||
this.cache.set(inputHash, results[node.id]);
|
this.cache.set(inputHash, results[node.id]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -13,22 +13,6 @@ const executor = new MemoryRuntimeExecutor(nodeRegistry, cache);
|
|||||||
const performanceStore = createPerformanceStore();
|
const performanceStore = createPerformanceStore();
|
||||||
executor.perf = performanceStore;
|
executor.perf = performanceStore;
|
||||||
|
|
||||||
export async function setUseRegistryCache(useCache: boolean) {
|
|
||||||
if (useCache) {
|
|
||||||
nodeRegistry.cache = indexDbCache;
|
|
||||||
} else {
|
|
||||||
nodeRegistry.cache = undefined;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export async function setUseRuntimeCache(useCache: boolean) {
|
|
||||||
if (useCache) {
|
|
||||||
executor.cache = cache;
|
|
||||||
} else {
|
|
||||||
executor.cache = undefined;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export async function executeGraph(
|
export async function executeGraph(
|
||||||
graph: Graph,
|
graph: Graph,
|
||||||
settings: Record<string, unknown>,
|
settings: Record<string, unknown>,
|
||||||
|
|||||||
@@ -11,11 +11,5 @@ export class WorkerRuntimeExecutor implements RuntimeExecutor {
|
|||||||
async getPerformanceData() {
|
async getPerformanceData() {
|
||||||
return this.worker.getPerformanceData();
|
return this.worker.getPerformanceData();
|
||||||
}
|
}
|
||||||
set useRuntimeCache(useCache: boolean) {
|
|
||||||
this.worker.setUseRuntimeCache(useCache);
|
|
||||||
}
|
|
||||||
set useRegistryCache(useCache: boolean) {
|
|
||||||
this.worker.setUseRegistryCache(useCache);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -87,19 +87,6 @@ export const AppSettingTypes = {
|
|||||||
label: "Show Graph Source",
|
label: "Show Graph Source",
|
||||||
value: false,
|
value: false,
|
||||||
},
|
},
|
||||||
cache: {
|
|
||||||
title: "Cache",
|
|
||||||
useRuntimeCache: {
|
|
||||||
type: "boolean",
|
|
||||||
label: "Node Results",
|
|
||||||
value: true,
|
|
||||||
},
|
|
||||||
useRegistryCache: {
|
|
||||||
type: "boolean",
|
|
||||||
label: "Node Source",
|
|
||||||
value: true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
stressTest: {
|
stressTest: {
|
||||||
title: "Stress Test",
|
title: "Stress Test",
|
||||||
amount: {
|
amount: {
|
||||||
|
|||||||
@@ -2,14 +2,7 @@
|
|||||||
import "@nodarium/ui/app.css";
|
import "@nodarium/ui/app.css";
|
||||||
import "../app.css";
|
import "../app.css";
|
||||||
import type { Snippet } from "svelte";
|
import type { Snippet } from "svelte";
|
||||||
import * as config from "$lib/config";
|
|
||||||
const { children } = $props<{ children?: Snippet }>();
|
const { children } = $props<{ children?: Snippet }>();
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
{@render children?.()}
|
{@render children?.()}
|
||||||
|
|
||||||
<svelte:head>
|
|
||||||
{#if config.ANALYTIC_SCRIPT}
|
|
||||||
{@html config.ANALYTIC_SCRIPT}
|
|
||||||
{/if}
|
|
||||||
</svelte:head>
|
|
||||||
|
|||||||
@@ -42,25 +42,6 @@
|
|||||||
appSettings.value.debug.useWorker ? workerRuntime : memoryRuntime,
|
appSettings.value.debug.useWorker ? workerRuntime : memoryRuntime,
|
||||||
);
|
);
|
||||||
|
|
||||||
$effect(() => {
|
|
||||||
workerRuntime.useRegistryCache =
|
|
||||||
appSettings.value.debug.cache.useRuntimeCache;
|
|
||||||
workerRuntime.useRuntimeCache =
|
|
||||||
appSettings.value.debug.cache.useRegistryCache;
|
|
||||||
|
|
||||||
if (appSettings.value.debug.cache.useRegistryCache) {
|
|
||||||
nodeRegistry.cache = registryCache;
|
|
||||||
} else {
|
|
||||||
nodeRegistry.cache = undefined;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (appSettings.value.debug.cache.useRuntimeCache) {
|
|
||||||
memoryRuntime.cache = runtimeCache;
|
|
||||||
} else {
|
|
||||||
memoryRuntime.cache = undefined;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
let activeNode = $state<NodeInstance | undefined>(undefined);
|
let activeNode = $state<NodeInstance | undefined>(undefined);
|
||||||
let scene = $state<Group>(null!);
|
let scene = $state<Group>(null!);
|
||||||
|
|
||||||
|
|||||||
8
app/src/routes/dev/+layout.svelte
Normal file
8
app/src/routes/dev/+layout.svelte
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
<script lang="ts">
|
||||||
|
import type { Snippet } from "svelte";
|
||||||
|
const { children } = $props<{ children?: Snippet }>();
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<main class="w-screen overflow-x-hidden">
|
||||||
|
{@render children()}
|
||||||
|
</main>
|
||||||
@@ -1,29 +1,120 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import Grid from "$lib/grid";
|
import NodeHTML from "$lib/graph-interface/node/NodeHTML.svelte";
|
||||||
|
import { localState } from "$lib/helpers/localState.svelte";
|
||||||
import Panel from "$lib/sidebar/Panel.svelte";
|
import Panel from "$lib/sidebar/Panel.svelte";
|
||||||
import Sidebar from "$lib/sidebar/Sidebar.svelte";
|
import Sidebar from "$lib/sidebar/Sidebar.svelte";
|
||||||
|
import { IndexDBCache, RemoteNodeRegistry } from "@nodarium/registry";
|
||||||
|
import { type NodeId, type NodeInstance } from "@nodarium/types";
|
||||||
|
import Code from "./Code.svelte";
|
||||||
|
import Grid from "$lib/grid";
|
||||||
|
import {
|
||||||
|
concatEncodedArrays,
|
||||||
|
createWasmWrapper,
|
||||||
|
encodeNestedArray,
|
||||||
|
} from "@nodarium/utils";
|
||||||
|
|
||||||
|
const registryCache = new IndexDBCache("node-registry");
|
||||||
|
const nodeRegistry = new RemoteNodeRegistry("", registryCache);
|
||||||
|
|
||||||
|
let activeNode = localState<NodeId | undefined>(
|
||||||
|
"node.dev.activeNode",
|
||||||
|
undefined,
|
||||||
|
);
|
||||||
|
|
||||||
|
let nodeWasm = $state<ArrayBuffer>();
|
||||||
|
let nodeInstance = $state<NodeInstance>();
|
||||||
|
let nodeWasmWrapper = $state<ReturnType<typeof createWasmWrapper>>();
|
||||||
|
|
||||||
|
async function fetchNodeData(nodeId?: NodeId) {
|
||||||
|
console.log("FETCHING", { nodeId });
|
||||||
|
nodeWasm = undefined;
|
||||||
|
nodeInstance = undefined;
|
||||||
|
|
||||||
|
if (!nodeId) return;
|
||||||
|
|
||||||
|
const data = await nodeRegistry.fetchNodeDefinition(nodeId);
|
||||||
|
nodeWasm = await nodeRegistry.fetchArrayBuffer("nodes/" + nodeId + ".wasm");
|
||||||
|
nodeInstance = {
|
||||||
|
id: 0,
|
||||||
|
type: nodeId,
|
||||||
|
position: [0, 0] as [number, number],
|
||||||
|
props: {},
|
||||||
|
state: {
|
||||||
|
type: data,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
nodeWasmWrapper = createWasmWrapper(nodeWasm);
|
||||||
|
}
|
||||||
|
|
||||||
|
$effect(() => {
|
||||||
|
fetchNodeData(activeNode.value);
|
||||||
|
});
|
||||||
|
|
||||||
|
$effect(() => {
|
||||||
|
if (nodeInstance?.props && nodeWasmWrapper) {
|
||||||
|
const keys = Object.keys(nodeInstance.state.type?.inputs || {});
|
||||||
|
let ins = Object.values(nodeInstance.props) as number[];
|
||||||
|
if (keys[0] === "plant") {
|
||||||
|
ins = [[0, 0, 0, 0, 0, 0, 0, 0], ...ins];
|
||||||
|
}
|
||||||
|
const inputs = concatEncodedArrays(encodeNestedArray(ins));
|
||||||
|
nodeWasmWrapper?.execute(inputs);
|
||||||
|
}
|
||||||
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
<div class="node-wrapper absolute bottom-8 left-8">
|
||||||
|
{#if nodeInstance}
|
||||||
|
<NodeHTML inView position="relative" z={5} bind:node={nodeInstance} />
|
||||||
|
{/if}
|
||||||
|
</div>
|
||||||
|
|
||||||
<Grid.Row>
|
<Grid.Row>
|
||||||
<Grid.Cell></Grid.Cell>
|
|
||||||
<Grid.Cell>
|
<Grid.Cell>
|
||||||
<Sidebar>
|
<pre>
|
||||||
|
<code>
|
||||||
|
{JSON.stringify(nodeInstance?.props)}
|
||||||
|
</code>
|
||||||
|
</pre>
|
||||||
|
</Grid.Cell>
|
||||||
|
|
||||||
|
<Grid.Cell>
|
||||||
|
<div class="h-screen w-[80vw] overflow-y-auto">
|
||||||
|
{#if nodeWasm}
|
||||||
|
<Code wasm={nodeWasm} />
|
||||||
|
{/if}
|
||||||
|
</div>
|
||||||
|
</Grid.Cell>
|
||||||
|
</Grid.Row>
|
||||||
|
|
||||||
|
<Sidebar>
|
||||||
<Panel
|
<Panel
|
||||||
id="node-store"
|
id="node-store"
|
||||||
classes="text-green-400"
|
classes="text-green-400"
|
||||||
title="Node Store"
|
title="Node Store"
|
||||||
icon="i-[tabler--database]"
|
icon="i-[tabler--database]"
|
||||||
>
|
>
|
||||||
<div class="p-4">
|
<div class="p-4 flex flex-col gap-2">
|
||||||
<input type="text" class="bg-red rounded-sm p-2" />
|
{#await nodeRegistry.fetchCollection("max/plantarium")}
|
||||||
|
<p>Loading Nodes...</p>
|
||||||
|
{:then result}
|
||||||
|
{#each result.nodes as n}
|
||||||
|
<button
|
||||||
|
class="cursor-pointer p-2 bg-layer-1 {activeNode.value === n.id
|
||||||
|
? 'outline outline-offset-1'
|
||||||
|
: ''}"
|
||||||
|
onclick={() => (activeNode.value = n.id)}>{n.id}</button
|
||||||
|
>
|
||||||
|
{/each}
|
||||||
|
{/await}
|
||||||
</div>
|
</div>
|
||||||
</Panel>
|
</Panel>
|
||||||
</Sidebar>
|
</Sidebar>
|
||||||
</Grid.Cell>
|
|
||||||
</Grid.Row>
|
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
:global body {
|
:global body {
|
||||||
height: 100vh;
|
height: 100vh;
|
||||||
|
width: 100vw;
|
||||||
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
26
app/src/routes/dev/Code.svelte
Normal file
26
app/src/routes/dev/Code.svelte
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
<script lang="ts">
|
||||||
|
import wabtInit from "wabt";
|
||||||
|
|
||||||
|
const { wasm } = $props<{ wasm: ArrayBuffer }>();
|
||||||
|
|
||||||
|
async function toWat(arrayBuffer: ArrayBuffer) {
|
||||||
|
const wabt = await wabtInit();
|
||||||
|
|
||||||
|
const module = wabt.readWasm(new Uint8Array(arrayBuffer), {
|
||||||
|
readDebugNames: true,
|
||||||
|
});
|
||||||
|
|
||||||
|
module.generateNames();
|
||||||
|
module.applyNames();
|
||||||
|
|
||||||
|
return module.toText({ foldExprs: false, inlineExport: false });
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
{#await toWat(wasm)}
|
||||||
|
<p>Converting to WAT</p>
|
||||||
|
{:then c}
|
||||||
|
<pre>
|
||||||
|
<code class="text-gray-50">{c}</code>
|
||||||
|
</pre>
|
||||||
|
{/await}
|
||||||
@@ -4,7 +4,7 @@ This guide will help you developing your first Nodarium Node written in Rust. As
|
|||||||
|
|
||||||
## Prerequesites
|
## Prerequesites
|
||||||
|
|
||||||
You need to have [Rust](https://www.rust-lang.org/tools/install) and [wasm-pack](https://rustwasm.github.io/docs/wasm-pack/) installed. Rust is the language we are going to develop our node in and wasm-pack helps us compile our rust code into a webassembly file.
|
You need to have [Rust](https://www.rust-lang.org/tools/install) and [wasm-pack](https://rustwasm.github.io/wasm-pack/book/) installed. Rust is the language we are going to develop our node in and wasm-pack helps us compile our rust code into a webassembly file.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# install rust
|
# install rust
|
||||||
@@ -26,7 +26,6 @@ Now we create the definition file of the node.
|
|||||||
Here we define what kind of inputs our node will expect and what kind of output it produces. If you want to dive deeper into this topic, have a look at [NODE_DEFINITION.md](./NODE_DEFINITION.md).
|
Here we define what kind of inputs our node will expect and what kind of output it produces. If you want to dive deeper into this topic, have a look at [NODE_DEFINITION.md](./NODE_DEFINITION.md).
|
||||||
|
|
||||||
`src/definition.json`
|
`src/definition.json`
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"id": "my-name/my-namespace/zylinder-node",
|
"id": "my-name/my-namespace/zylinder-node",
|
||||||
@@ -36,7 +35,7 @@ Here we define what kind of inputs our node will expect and what kind of output
|
|||||||
"inputs": {
|
"inputs": {
|
||||||
"height": {
|
"height": {
|
||||||
"type": "float",
|
"type": "float",
|
||||||
"value": 2
|
"value": 2,
|
||||||
},
|
},
|
||||||
"radius": {
|
"radius": {
|
||||||
"type": "float",
|
"type": "float",
|
||||||
@@ -45,7 +44,6 @@ Here we define what kind of inputs our node will expect and what kind of output
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
If we take a look at the `src/lib.rs` file we see that `src/definition.json` is included with the following line:
|
If we take a look at the `src/lib.rs` file we see that `src/definition.json` is included with the following line:
|
||||||
|
|
||||||
```rust
|
```rust
|
||||||
|
|||||||
@@ -33,7 +33,6 @@
|
|||||||
pkgs.typescript-language-server
|
pkgs.typescript-language-server
|
||||||
pkgs.prettier
|
pkgs.prettier
|
||||||
pkgs.tailwindcss-language-server
|
pkgs.tailwindcss-language-server
|
||||||
pkgs.svelte-language-server
|
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -11,18 +11,8 @@ crate-type = ["cdylib", "rlib"]
|
|||||||
default = ["console_error_panic_hook"]
|
default = ["console_error_panic_hook"]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
wasm-bindgen = "0.2.84"
|
|
||||||
|
|
||||||
# The `console_error_panic_hook` crate provides better debugging of panics by
|
|
||||||
# logging them with `console.error`. This is great for development, but requires
|
|
||||||
# all the `std::fmt` and `std::panicking` infrastructure, so isn't great for
|
|
||||||
# code size when deploying.
|
|
||||||
utils = { version = "0.1.0", path = "../../../../packages/utils" }
|
utils = { version = "0.1.0", path = "../../../../packages/utils" }
|
||||||
macros = { version = "0.1.0", path = "../../../../packages/macros" }
|
macros = { version = "0.1.0", path = "../../../../packages/macros" }
|
||||||
serde = { version = "1.0", features = ["derive"] }
|
serde = { version = "1.0", features = ["derive"] }
|
||||||
serde-wasm-bindgen = "0.4"
|
|
||||||
console_error_panic_hook = { version = "0.1.7", optional = true }
|
console_error_panic_hook = { version = "0.1.7", optional = true }
|
||||||
web-sys = { version = "0.3.69", features = ["console"] }
|
web-sys = { version = "0.3.69", features = ["console"] }
|
||||||
|
|
||||||
[dev-dependencies]
|
|
||||||
wasm-bindgen-test = "0.3.34"
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "wasm-pack build --release --out-name index --no-default-features",
|
"build": "cargo build --target wasm32-unknown-unknown --release && mkdir -p pkg && cp ../../../../target/wasm32-unknown-unknown/release/out.wasm ./pkg/node.wasm",
|
||||||
"dev": "cargo watch -s 'wasm-pack build --dev --out-name index --no-default-features'"
|
"dev": "cargo watch -s 'wasm-pack build --dev --out-name index --no-default-features'"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,13 +0,0 @@
|
|||||||
//! Test suite for the Web and headless browsers.
|
|
||||||
|
|
||||||
#![cfg(target_arch = "wasm32")]
|
|
||||||
|
|
||||||
extern crate wasm_bindgen_test;
|
|
||||||
use wasm_bindgen_test::*;
|
|
||||||
|
|
||||||
wasm_bindgen_test_configure!(run_in_browser);
|
|
||||||
|
|
||||||
#[wasm_bindgen_test]
|
|
||||||
fn pass() {
|
|
||||||
assert_eq!(1 + 1, 2);
|
|
||||||
}
|
|
||||||
@@ -7,22 +7,6 @@ edition = "2018"
|
|||||||
[lib]
|
[lib]
|
||||||
crate-type = ["cdylib", "rlib"]
|
crate-type = ["cdylib", "rlib"]
|
||||||
|
|
||||||
[features]
|
|
||||||
default = ["console_error_panic_hook"]
|
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
wasm-bindgen = "0.2.84"
|
|
||||||
|
|
||||||
# The `console_error_panic_hook` crate provides better debugging of panics by
|
|
||||||
# logging them with `console.error`. This is great for development, but requires
|
|
||||||
# all the `std::fmt` and `std::panicking` infrastructure, so isn't great for
|
|
||||||
# code size when deploying.
|
|
||||||
nodarium_utils = { version = "0.1.0", path = "../../../../packages/utils" }
|
nodarium_utils = { version = "0.1.0", path = "../../../../packages/utils" }
|
||||||
nodarium_macros = { version = "0.1.0", path = "../../../../packages/macros" }
|
nodarium_macros = { version = "0.1.0", path = "../../../../packages/macros" }
|
||||||
serde = { version = "1.0", features = ["derive"] }
|
|
||||||
serde-wasm-bindgen = "0.4"
|
|
||||||
console_error_panic_hook = { version = "0.1.7", optional = true }
|
|
||||||
web-sys = { version = "0.3.69", features = ["console"] }
|
|
||||||
|
|
||||||
[dev-dependencies]
|
|
||||||
wasm-bindgen-test = "0.3.34"
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "wasm-pack build --release --out-name index --no-default-features",
|
"build": "cargo build --target wasm32-unknown-unknown --release && mkdir -p pkg && cp ../../../../target/wasm32-unknown-unknown/release/box.wasm ./pkg/node.wasm",
|
||||||
"dev": "cargo watch -s 'wasm-pack build --dev --out-name index --no-default-features'"
|
"dev": "cargo watch -s 'wasm-pack build --dev --out-name index --no-default-features'"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,18 +1,15 @@
|
|||||||
use nodarium_macros::include_definition_file;
|
use nodarium_macros::nodarium_definition_file;
|
||||||
|
use nodarium_macros::nodarium_execute;
|
||||||
use nodarium_utils::{
|
use nodarium_utils::{
|
||||||
concat_args, encode_float, evaluate_float, geometry::calculate_normals, log, set_panic_hook,
|
encode_float, evaluate_float, geometry::calculate_normals,log,
|
||||||
split_args, wrap_arg,
|
split_args, wrap_arg,
|
||||||
};
|
};
|
||||||
use wasm_bindgen::prelude::*;
|
|
||||||
|
|
||||||
include_definition_file!("src/input.json");
|
nodarium_definition_file!("src/input.json");
|
||||||
|
|
||||||
#[rustfmt::skip]
|
#[nodarium_execute]
|
||||||
#[wasm_bindgen]
|
|
||||||
pub fn execute(input: &[i32]) -> Vec<i32> {
|
pub fn execute(input: &[i32]) -> Vec<i32> {
|
||||||
|
|
||||||
set_panic_hook();
|
|
||||||
|
|
||||||
let args = split_args(input);
|
let args = split_args(input);
|
||||||
|
|
||||||
log!("WASM(cube): input: {:?} -> {:?}", input, args);
|
log!("WASM(cube): input: {:?} -> {:?}", input, args);
|
||||||
@@ -22,7 +19,6 @@ pub fn execute(input: &[i32]) -> Vec<i32> {
|
|||||||
let p = encode_float(size);
|
let p = encode_float(size);
|
||||||
let n = encode_float(-size);
|
let n = encode_float(-size);
|
||||||
|
|
||||||
|
|
||||||
// [[1,3, x, y, z, x, y,z,x,y,z]];
|
// [[1,3, x, y, z, x, y,z,x,y,z]];
|
||||||
let mut cube_geometry = [
|
let mut cube_geometry = [
|
||||||
|
|
||||||
|
|||||||
@@ -1,13 +0,0 @@
|
|||||||
//! Test suite for the Web and headless browsers.
|
|
||||||
|
|
||||||
#![cfg(target_arch = "wasm32")]
|
|
||||||
|
|
||||||
extern crate wasm_bindgen_test;
|
|
||||||
use wasm_bindgen_test::*;
|
|
||||||
|
|
||||||
wasm_bindgen_test_configure!(run_in_browser);
|
|
||||||
|
|
||||||
#[wasm_bindgen_test]
|
|
||||||
fn pass() {
|
|
||||||
assert_eq!(1 + 1, 2);
|
|
||||||
}
|
|
||||||
@@ -7,23 +7,6 @@ edition = "2018"
|
|||||||
[lib]
|
[lib]
|
||||||
crate-type = ["cdylib", "rlib"]
|
crate-type = ["cdylib", "rlib"]
|
||||||
|
|
||||||
[features]
|
|
||||||
default = ["console_error_panic_hook"]
|
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
wasm-bindgen = "0.2.84"
|
|
||||||
|
|
||||||
# The `console_error_panic_hook` crate provides better debugging of panics by
|
|
||||||
# logging them with `console.error`. This is great for development, but requires
|
|
||||||
# all the `std::fmt` and `std::panicking` infrastructure, so isn't great for
|
|
||||||
# code size when deploying.
|
|
||||||
nodarium_utils = { version = "0.1.0", path = "../../../../packages/utils" }
|
nodarium_utils = { version = "0.1.0", path = "../../../../packages/utils" }
|
||||||
nodarium_macros = { version = "0.1.0", path = "../../../../packages/macros" }
|
nodarium_macros = { version = "0.1.0", path = "../../../../packages/macros" }
|
||||||
serde = { version = "1.0", features = ["derive"] }
|
|
||||||
serde-wasm-bindgen = "0.4"
|
|
||||||
console_error_panic_hook = { version = "0.1.7", optional = true }
|
|
||||||
web-sys = { version = "0.3.69", features = ["console"] }
|
|
||||||
glam = "0.27.0"
|
|
||||||
|
|
||||||
[dev-dependencies]
|
|
||||||
wasm-bindgen-test = "0.3.34"
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "wasm-pack build --release --out-name index --no-default-features",
|
"build": "cargo build --target wasm32-unknown-unknown --release && mkdir -p pkg && cp ../../../../target/wasm32-unknown-unknown/release/branch.wasm ./pkg/node.wasm",
|
||||||
"dev": "cargo watch -s 'wasm-pack build --dev --out-name index --no-default-features'"
|
"dev": "cargo watch -s 'wasm-pack build --dev --out-name index --no-default-features'"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,20 +1,19 @@
|
|||||||
use nodarium_macros::include_definition_file;
|
use nodarium_macros::nodarium_definition_file;
|
||||||
|
use nodarium_macros::nodarium_execute;
|
||||||
use nodarium_utils::{
|
use nodarium_utils::{
|
||||||
concat_arg_vecs, evaluate_float, evaluate_int,
|
concat_arg_vecs, evaluate_float, evaluate_int,
|
||||||
geometry::{
|
geometry::{
|
||||||
create_path, interpolate_along_path, rotate_vector_by_angle, wrap_path, wrap_path_mut,
|
create_path, interpolate_along_path, rotate_vector_by_angle, wrap_path, wrap_path_mut,
|
||||||
},
|
},
|
||||||
log, set_panic_hook, split_args,
|
log, split_args,
|
||||||
};
|
};
|
||||||
|
|
||||||
use std::f32::consts::PI;
|
use std::f32::consts::PI;
|
||||||
use wasm_bindgen::prelude::*;
|
|
||||||
|
|
||||||
include_definition_file!("src/input.json");
|
nodarium_definition_file!("src/input.json");
|
||||||
|
|
||||||
#[wasm_bindgen]
|
#[nodarium_execute]
|
||||||
pub fn execute(input: &[i32]) -> Vec<i32> {
|
pub fn execute(input: &[i32]) -> Vec<i32> {
|
||||||
set_panic_hook();
|
|
||||||
|
|
||||||
let args = split_args(input);
|
let args = split_args(input);
|
||||||
|
|
||||||
let paths = split_args(args[0]);
|
let paths = split_args(args[0]);
|
||||||
|
|||||||
@@ -1,13 +0,0 @@
|
|||||||
//! Test suite for the Web and headless browsers.
|
|
||||||
|
|
||||||
#![cfg(target_arch = "wasm32")]
|
|
||||||
|
|
||||||
extern crate wasm_bindgen_test;
|
|
||||||
use wasm_bindgen_test::*;
|
|
||||||
|
|
||||||
wasm_bindgen_test_configure!(run_in_browser);
|
|
||||||
|
|
||||||
#[wasm_bindgen_test]
|
|
||||||
fn pass() {
|
|
||||||
assert_eq!(1 + 1, 2);
|
|
||||||
}
|
|
||||||
@@ -7,21 +7,6 @@ edition = "2018"
|
|||||||
[lib]
|
[lib]
|
||||||
crate-type = ["cdylib", "rlib"]
|
crate-type = ["cdylib", "rlib"]
|
||||||
|
|
||||||
[features]
|
|
||||||
default = ["console_error_panic_hook"]
|
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
wasm-bindgen = "0.2.84"
|
|
||||||
|
|
||||||
# The `console_error_panic_hook` crate provides better debugging of panics by
|
|
||||||
# logging them with `console.error`. This is great for development, but requires
|
|
||||||
# all the `std::fmt` and `std::panicking` infrastructure, so isn't great for
|
|
||||||
# code size when deploying.
|
|
||||||
nodarium_utils = { version = "0.1.0", path = "../../../../packages/utils" }
|
nodarium_utils = { version = "0.1.0", path = "../../../../packages/utils" }
|
||||||
nodarium_macros = { version = "0.1.0", path = "../../../../packages/macros" }
|
nodarium_macros = { version = "0.1.0", path = "../../../../packages/macros" }
|
||||||
serde = { version = "1.0", features = ["derive"] }
|
|
||||||
serde-wasm-bindgen = "0.4"
|
|
||||||
console_error_panic_hook = { version = "0.1.7", optional = true }
|
|
||||||
|
|
||||||
[dev-dependencies]
|
|
||||||
wasm-bindgen-test = "0.3.34"
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "wasm-pack build --release --out-name index --no-default-features",
|
"build": "cargo build --target wasm32-unknown-unknown --release && mkdir -p pkg && cp ../../../../target/wasm32-unknown-unknown/release/float.wasm ./pkg/node.wasm",
|
||||||
"dev": "cargo watch -s 'wasm-pack build --dev --out-name index --no-default-features'"
|
"dev": "cargo watch -s 'wasm-pack build --dev --out-name index --no-default-features'"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
use nodarium_macros::include_definition_file;
|
use nodarium_macros::nodarium_definition_file;
|
||||||
use wasm_bindgen::prelude::*;
|
use nodarium_macros::nodarium_execute;
|
||||||
|
|
||||||
include_definition_file!("src/input.json");
|
nodarium_definition_file!("src/input.json");
|
||||||
|
|
||||||
#[wasm_bindgen]
|
#[nodarium_execute]
|
||||||
pub fn execute(args: &[i32]) -> Vec<i32> {
|
pub fn execute(args: &[i32]) -> Vec<i32> {
|
||||||
args.into()
|
args.into()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,13 +0,0 @@
|
|||||||
//! Test suite for the Web and headless browsers.
|
|
||||||
|
|
||||||
#![cfg(target_arch = "wasm32")]
|
|
||||||
|
|
||||||
extern crate wasm_bindgen_test;
|
|
||||||
use wasm_bindgen_test::*;
|
|
||||||
|
|
||||||
wasm_bindgen_test_configure!(run_in_browser);
|
|
||||||
|
|
||||||
#[wasm_bindgen_test]
|
|
||||||
fn pass() {
|
|
||||||
assert_eq!(1 + 1, 2);
|
|
||||||
}
|
|
||||||
@@ -7,24 +7,7 @@ edition = "2018"
|
|||||||
[lib]
|
[lib]
|
||||||
crate-type = ["cdylib", "rlib"]
|
crate-type = ["cdylib", "rlib"]
|
||||||
|
|
||||||
[features]
|
|
||||||
default = ["console_error_panic_hook"]
|
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
wasm-bindgen = "0.2.84"
|
|
||||||
|
|
||||||
# The `console_error_panic_hook` crate provides better debugging of panics by
|
|
||||||
# logging them with `console.error`. This is great for development, but requires
|
|
||||||
# all the `std::fmt` and `std::panicking` infrastructure, so isn't great for
|
|
||||||
# code size when deploying.
|
|
||||||
nodarium_utils = { version = "0.1.0", path = "../../../../packages/utils" }
|
nodarium_utils = { version = "0.1.0", path = "../../../../packages/utils" }
|
||||||
nodarium_macros = { version = "0.1.0", path = "../../../../packages/macros" }
|
nodarium_macros = { version = "0.1.0", path = "../../../../packages/macros" }
|
||||||
serde = { version = "1.0", features = ["derive"] }
|
glam = "0.30.10"
|
||||||
serde-wasm-bindgen = "0.4"
|
|
||||||
console_error_panic_hook = { version = "0.1.7", optional = true }
|
|
||||||
web-sys = { version = "0.3.69", features = ["console"] }
|
|
||||||
noise = "0.9.0"
|
|
||||||
glam = "0.27.0"
|
|
||||||
|
|
||||||
[dev-dependencies]
|
|
||||||
wasm-bindgen-test = "0.3.34"
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "wasm-pack build --release --out-name index --no-default-features",
|
"build": "cargo build --target wasm32-unknown-unknown --release && mkdir -p pkg && cp ../../../../target/wasm32-unknown-unknown/release/gravity.wasm ./pkg/node.wasm",
|
||||||
"dev": "cargo watch -s 'wasm-pack build --dev --out-name index --no-default-features'"
|
"dev": "cargo watch -s 'wasm-pack build --dev --out-name index --no-default-features'"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,22 +1,20 @@
|
|||||||
use glam::Vec3;
|
use glam::Vec3;
|
||||||
use nodarium_macros::include_definition_file;
|
use nodarium_macros::nodarium_definition_file;
|
||||||
|
use nodarium_macros::nodarium_execute;
|
||||||
use nodarium_utils::{
|
use nodarium_utils::{
|
||||||
concat_args, evaluate_float, evaluate_int,
|
concat_args, evaluate_float, evaluate_int,
|
||||||
geometry::{wrap_path, wrap_path_mut},
|
geometry::{wrap_path, wrap_path_mut},
|
||||||
log, reset_call_count, set_panic_hook, split_args,
|
log, reset_call_count, split_args,
|
||||||
};
|
};
|
||||||
use wasm_bindgen::prelude::*;
|
|
||||||
|
|
||||||
include_definition_file!("src/input.json");
|
nodarium_definition_file!("src/input.json");
|
||||||
|
|
||||||
fn lerp_vec3(a: Vec3, b: Vec3, t: f32) -> Vec3 {
|
fn lerp_vec3(a: Vec3, b: Vec3, t: f32) -> Vec3 {
|
||||||
a + (b - a) * t
|
a + (b - a) * t
|
||||||
}
|
}
|
||||||
|
|
||||||
#[wasm_bindgen]
|
#[nodarium_execute]
|
||||||
pub fn execute(input: &[i32]) -> Vec<i32> {
|
pub fn execute(input: &[i32]) -> Vec<i32> {
|
||||||
set_panic_hook();
|
|
||||||
|
|
||||||
reset_call_count();
|
reset_call_count();
|
||||||
|
|
||||||
let args = split_args(input);
|
let args = split_args(input);
|
||||||
|
|||||||
@@ -1,13 +0,0 @@
|
|||||||
//! Test suite for the Web and headless browsers.
|
|
||||||
|
|
||||||
#![cfg(target_arch = "wasm32")]
|
|
||||||
|
|
||||||
extern crate wasm_bindgen_test;
|
|
||||||
use wasm_bindgen_test::*;
|
|
||||||
|
|
||||||
wasm_bindgen_test_configure!(run_in_browser);
|
|
||||||
|
|
||||||
#[wasm_bindgen_test]
|
|
||||||
fn pass() {
|
|
||||||
assert_eq!(1 + 1, 2);
|
|
||||||
}
|
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "nodarium_instance"
|
name = "instance"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
authors = ["Max Richter <jim-x@web.de>"]
|
authors = ["Max Richter <jim-x@web.de>"]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
@@ -7,23 +7,7 @@ edition = "2018"
|
|||||||
[lib]
|
[lib]
|
||||||
crate-type = ["cdylib", "rlib"]
|
crate-type = ["cdylib", "rlib"]
|
||||||
|
|
||||||
[features]
|
|
||||||
default = ["console_error_panic_hook"]
|
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
wasm-bindgen = "0.2.84"
|
|
||||||
|
|
||||||
# The `console_error_panic_hook` crate provides better debugging of panics by
|
|
||||||
# logging them with `console.error`. This is great for development, but requires
|
|
||||||
# all the `std::fmt` and `std::panicking` infrastructure, so isn't great for
|
|
||||||
# code size when deploying.
|
|
||||||
nodarium_utils = { version = "0.1.0", path = "../../../../packages/utils" }
|
nodarium_utils = { version = "0.1.0", path = "../../../../packages/utils" }
|
||||||
nodarium_macros = { version = "0.1.0", path = "../../../../packages/macros" }
|
nodarium_macros = { version = "0.1.0", path = "../../../../packages/macros" }
|
||||||
serde = { version = "1.0", features = ["derive"] }
|
glam = "0.30.10"
|
||||||
serde-wasm-bindgen = "0.4"
|
|
||||||
console_error_panic_hook = { version = "0.1.7", optional = true }
|
|
||||||
web-sys = { version = "0.3.69", features = ["console"] }
|
|
||||||
glam = "0.27.0"
|
|
||||||
|
|
||||||
[dev-dependencies]
|
|
||||||
wasm-bindgen-test = "0.3.34"
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "wasm-pack build --release --out-name index --no-default-features",
|
"build": "cargo build --target wasm32-unknown-unknown --release && mkdir -p pkg && cp ../../../../target/wasm32-unknown-unknown/release/instance.wasm ./pkg/node.wasm",
|
||||||
"dev": "cargo watch -s 'wasm-pack build --dev --out-name index --no-default-features'"
|
"dev": "cargo watch -s 'wasm-pack build --dev --out-name index --no-default-features'"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,20 +1,18 @@
|
|||||||
use glam::{Mat4, Quat, Vec3};
|
use glam::{Mat4, Quat, Vec3};
|
||||||
use nodarium_macros::include_definition_file;
|
use nodarium_macros::nodarium_execute;
|
||||||
|
use nodarium_macros::nodarium_definition_file;
|
||||||
use nodarium_utils::{
|
use nodarium_utils::{
|
||||||
concat_args, encode_float, evaluate_float, evaluate_int,
|
concat_args, evaluate_float, evaluate_int,
|
||||||
geometry::{
|
geometry::{
|
||||||
calculate_normals, create_instance_data, wrap_geometry_data, wrap_instance_data, wrap_path,
|
create_instance_data, wrap_geometry_data, wrap_instance_data, wrap_path,
|
||||||
},
|
},
|
||||||
log, set_panic_hook, split_args, wrap_arg,
|
log, split_args,
|
||||||
};
|
};
|
||||||
use wasm_bindgen::prelude::*;
|
|
||||||
|
|
||||||
include_definition_file!("src/input.json");
|
nodarium_definition_file!("src/input.json");
|
||||||
|
|
||||||
#[wasm_bindgen]
|
#[nodarium_execute]
|
||||||
pub fn execute(input: &[i32]) -> Vec<i32> {
|
pub fn execute(input: &[i32]) -> Vec<i32> {
|
||||||
set_panic_hook();
|
|
||||||
|
|
||||||
let args = split_args(input);
|
let args = split_args(input);
|
||||||
let mut inputs = split_args(args[0]);
|
let mut inputs = split_args(args[0]);
|
||||||
log!("WASM(instance): inputs: {:?}", inputs);
|
log!("WASM(instance): inputs: {:?}", inputs);
|
||||||
|
|||||||
@@ -1,13 +0,0 @@
|
|||||||
//! Test suite for the Web and headless browsers.
|
|
||||||
|
|
||||||
#![cfg(target_arch = "wasm32")]
|
|
||||||
|
|
||||||
extern crate wasm_bindgen_test;
|
|
||||||
use wasm_bindgen_test::*;
|
|
||||||
|
|
||||||
wasm_bindgen_test_configure!(run_in_browser);
|
|
||||||
|
|
||||||
#[wasm_bindgen_test]
|
|
||||||
fn pass() {
|
|
||||||
assert_eq!(1 + 1, 2);
|
|
||||||
}
|
|
||||||
@@ -7,17 +7,6 @@ edition = "2018"
|
|||||||
[lib]
|
[lib]
|
||||||
crate-type = ["cdylib", "rlib"]
|
crate-type = ["cdylib", "rlib"]
|
||||||
|
|
||||||
[features]
|
|
||||||
default = ["console_error_panic_hook"]
|
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
wasm-bindgen = "0.2.84"
|
|
||||||
serde = { version = "1.0", features = ["derive"] }
|
|
||||||
serde-wasm-bindgen = "0.4"
|
|
||||||
console_error_panic_hook = { version = "0.1.7", optional = true }
|
|
||||||
nodarium_utils = { version = "0.1.0", path = "../../../../packages/utils" }
|
nodarium_utils = { version = "0.1.0", path = "../../../../packages/utils" }
|
||||||
nodarium_macros = { version = "0.1.0", path = "../../../../packages/macros" }
|
nodarium_macros = { version = "0.1.0", path = "../../../../packages/macros" }
|
||||||
web-sys = { version = "0.3.69", features = ["console"] }
|
|
||||||
|
|
||||||
[dev-dependencies]
|
|
||||||
wasm-bindgen-test = "0.3.34"
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "wasm-pack build --release --out-name index --no-default-features",
|
"build": "cargo build --target wasm32-unknown-unknown --release && mkdir -p pkg && cp ../../../../target/wasm32-unknown-unknown/release/math.wasm ./pkg/node.wasm",
|
||||||
"dev": "cargo watch -s 'wasm-pack build --dev --out-name index --no-default-features'"
|
"dev": "cargo watch -s 'wasm-pack build --dev --out-name index --no-default-features'"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +1,13 @@
|
|||||||
use nodarium_macros::include_definition_file;
|
use nodarium_macros::nodarium_definition_file;
|
||||||
use nodarium_utils::{concat_args, set_panic_hook, split_args};
|
use nodarium_macros::nodarium_execute;
|
||||||
use wasm_bindgen::prelude::*;
|
use nodarium_utils::{
|
||||||
|
concat_args, split_args
|
||||||
|
};
|
||||||
|
|
||||||
include_definition_file!("src/input.json");
|
#[nodarium_execute]
|
||||||
|
|
||||||
#[wasm_bindgen]
|
|
||||||
pub fn execute(args: &[i32]) -> Vec<i32> {
|
pub fn execute(args: &[i32]) -> Vec<i32> {
|
||||||
set_panic_hook();
|
|
||||||
let args = split_args(args);
|
let args = split_args(args);
|
||||||
concat_args(vec![&[0], args[0], args[1], args[2]])
|
concat_args(vec![&[0], args[0], args[1], args[2]])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
nodarium_definition_file!("src/input.json");
|
||||||
|
|||||||
@@ -1,13 +0,0 @@
|
|||||||
//! Test suite for the Web and headless browsers.
|
|
||||||
|
|
||||||
#![cfg(target_arch = "wasm32")]
|
|
||||||
|
|
||||||
extern crate wasm_bindgen_test;
|
|
||||||
use wasm_bindgen_test::*;
|
|
||||||
|
|
||||||
wasm_bindgen_test_configure!(run_in_browser);
|
|
||||||
|
|
||||||
#[wasm_bindgen_test]
|
|
||||||
fn pass() {
|
|
||||||
assert_eq!(1 + 1, 2);
|
|
||||||
}
|
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "nodes-noise"
|
name = "noise"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
authors = ["Max Richter <jim-x@web.de>"]
|
authors = ["Max Richter <jim-x@web.de>"]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
@@ -7,24 +7,8 @@ edition = "2018"
|
|||||||
[lib]
|
[lib]
|
||||||
crate-type = ["cdylib", "rlib"]
|
crate-type = ["cdylib", "rlib"]
|
||||||
|
|
||||||
[features]
|
|
||||||
default = ["console_error_panic_hook"]
|
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
wasm-bindgen = "0.2.84"
|
|
||||||
|
|
||||||
# The `console_error_panic_hook` crate provides better debugging of panics by
|
|
||||||
# logging them with `console.error`. This is great for development, but requires
|
|
||||||
# all the `std::fmt` and `std::panicking` infrastructure, so isn't great for
|
|
||||||
# code size when deploying.
|
|
||||||
nodarium_utils = { version = "0.1.0", path = "../../../../packages/utils" }
|
nodarium_utils = { version = "0.1.0", path = "../../../../packages/utils" }
|
||||||
nodarium_macros = { version = "0.1.0", path = "../../../../packages/macros" }
|
nodarium_macros = { version = "0.1.0", path = "../../../../packages/macros" }
|
||||||
serde = { version = "1.0", features = ["derive"] }
|
|
||||||
serde-wasm-bindgen = "0.4"
|
|
||||||
console_error_panic_hook = { version = "0.1.7", optional = true }
|
|
||||||
web-sys = { version = "0.3.69", features = ["console"] }
|
|
||||||
noise = "0.9.0"
|
noise = "0.9.0"
|
||||||
glam = "0.27.0"
|
|
||||||
|
|
||||||
[dev-dependencies]
|
|
||||||
wasm-bindgen-test = "0.3.34"
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "wasm-pack build --release --out-name index --no-default-features",
|
"build": "cargo build --target wasm32-unknown-unknown --release && mkdir -p pkg && cp ../../../../target/wasm32-unknown-unknown/release/noise.wasm ./pkg/node.wasm",
|
||||||
"dev": "cargo watch -s 'wasm-pack build --dev --out-name index --no-default-features'"
|
"dev": "cargo watch -s 'wasm-pack build --dev --out-name index --no-default-features'"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,21 +1,19 @@
|
|||||||
use nodarium_macros::include_definition_file;
|
use nodarium_macros::nodarium_definition_file;
|
||||||
|
use nodarium_macros::nodarium_execute;
|
||||||
use nodarium_utils::{
|
use nodarium_utils::{
|
||||||
concat_args, evaluate_float, evaluate_int, evaluate_vec3, geometry::wrap_path_mut, log,
|
concat_args, evaluate_float, evaluate_int, evaluate_vec3, geometry::wrap_path_mut,
|
||||||
reset_call_count, set_panic_hook, split_args,
|
reset_call_count, split_args,
|
||||||
};
|
};
|
||||||
use noise::{HybridMulti, MultiFractal, NoiseFn, OpenSimplex};
|
use noise::{HybridMulti, MultiFractal, NoiseFn, OpenSimplex};
|
||||||
use wasm_bindgen::prelude::*;
|
|
||||||
|
|
||||||
include_definition_file!("src/input.json");
|
nodarium_definition_file!("src/input.json");
|
||||||
|
|
||||||
fn lerp(a: f32, b: f32, t: f32) -> f32 {
|
fn lerp(a: f32, b: f32, t: f32) -> f32 {
|
||||||
a + t * (b - a)
|
a + t * (b - a)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[wasm_bindgen]
|
#[nodarium_execute]
|
||||||
pub fn execute(input: &[i32]) -> Vec<i32> {
|
pub fn execute(input: &[i32]) -> Vec<i32> {
|
||||||
set_panic_hook();
|
|
||||||
|
|
||||||
reset_call_count();
|
reset_call_count();
|
||||||
|
|
||||||
let args = split_args(input);
|
let args = split_args(input);
|
||||||
|
|||||||
@@ -1,13 +0,0 @@
|
|||||||
//! Test suite for the Web and headless browsers.
|
|
||||||
|
|
||||||
#![cfg(target_arch = "wasm32")]
|
|
||||||
|
|
||||||
extern crate wasm_bindgen_test;
|
|
||||||
use wasm_bindgen_test::*;
|
|
||||||
|
|
||||||
wasm_bindgen_test_configure!(run_in_browser);
|
|
||||||
|
|
||||||
#[wasm_bindgen_test]
|
|
||||||
fn pass() {
|
|
||||||
assert_eq!(1 + 1, 2);
|
|
||||||
}
|
|
||||||
@@ -7,24 +7,6 @@ edition = "2018"
|
|||||||
[lib]
|
[lib]
|
||||||
crate-type = ["cdylib", "rlib"]
|
crate-type = ["cdylib", "rlib"]
|
||||||
|
|
||||||
[features]
|
|
||||||
default = ["console_error_panic_hook"]
|
|
||||||
console_error_panic_hook = ["dep:console_error_panic_hook"]
|
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
wasm-bindgen = "0.2.84"
|
|
||||||
|
|
||||||
# The `console_error_panic_hook` crate provides better debugging of panics by
|
|
||||||
# logging them with `console.error`. This is great for development, but requires
|
|
||||||
# all the `std::fmt` and `std::panicking` infrastructure, so isn't great for
|
|
||||||
# code size when deploying.
|
|
||||||
serde = { version = "1.0", features = ["derive"] }
|
|
||||||
serde_json = { version = "1.0", default-features = false, features = ["alloc"] }
|
|
||||||
nodarium_utils = { version = "0.1.0", path = "../../../../packages/utils" }
|
nodarium_utils = { version = "0.1.0", path = "../../../../packages/utils" }
|
||||||
nodarium_macros = { version = "0.1.0", path = "../../../../packages/macros" }
|
nodarium_macros = { version = "0.1.0", path = "../../../../packages/macros" }
|
||||||
console_error_panic_hook = { version = "0.1.7", optional = true }
|
|
||||||
web-sys = { version = "0.3.69", features = ["console"] }
|
|
||||||
glam = "0.27.0"
|
|
||||||
|
|
||||||
[dev-dependencies]
|
|
||||||
wasm-bindgen-test = "0.3.34"
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "wasm-pack build --release --out-name index --no-default-features",
|
"build": "cargo build --target wasm32-unknown-unknown --release && mkdir -p pkg && cp ../../../../target/wasm32-unknown-unknown/release/output.wasm ./pkg/node.wasm",
|
||||||
"dev": "cargo watch -s 'wasm-pack build --dev --out-name index --no-default-features'"
|
"dev": "cargo watch -s 'wasm-pack build --dev --out-name index --no-default-features'"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,17 +1,15 @@
|
|||||||
use nodarium_macros::include_definition_file;
|
use nodarium_macros::nodarium_definition_file;
|
||||||
|
use nodarium_macros::nodarium_execute;
|
||||||
use nodarium_utils::{
|
use nodarium_utils::{
|
||||||
concat_args, evaluate_int,
|
concat_args, evaluate_int,
|
||||||
geometry::{extrude_path, wrap_path},
|
geometry::{extrude_path, wrap_path},
|
||||||
log, set_panic_hook, split_args,
|
log, split_args,
|
||||||
};
|
};
|
||||||
use wasm_bindgen::prelude::*;
|
|
||||||
|
|
||||||
include_definition_file!("src/inputs.json");
|
nodarium_definition_file!("src/inputs.json");
|
||||||
|
|
||||||
#[wasm_bindgen]
|
#[nodarium_execute]
|
||||||
pub fn execute(input: &[i32]) -> Vec<i32> {
|
pub fn execute(input: &[i32]) -> Vec<i32> {
|
||||||
set_panic_hook();
|
|
||||||
|
|
||||||
log!("WASM(output): input: {:?}", input);
|
log!("WASM(output): input: {:?}", input);
|
||||||
|
|
||||||
let args = split_args(input);
|
let args = split_args(input);
|
||||||
|
|||||||
@@ -1,13 +0,0 @@
|
|||||||
//! Test suite for the Web and headless browsers.
|
|
||||||
|
|
||||||
#![cfg(target_arch = "wasm32")]
|
|
||||||
|
|
||||||
extern crate wasm_bindgen_test;
|
|
||||||
use wasm_bindgen_test::*;
|
|
||||||
|
|
||||||
wasm_bindgen_test_configure!(run_in_browser);
|
|
||||||
|
|
||||||
#[wasm_bindgen_test]
|
|
||||||
fn pass() {
|
|
||||||
assert_eq!(1 + 1, 2);
|
|
||||||
}
|
|
||||||
@@ -7,21 +7,7 @@ edition = "2018"
|
|||||||
[lib]
|
[lib]
|
||||||
crate-type = ["cdylib", "rlib"]
|
crate-type = ["cdylib", "rlib"]
|
||||||
|
|
||||||
[features]
|
|
||||||
default = ["console_error_panic_hook"]
|
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
wasm-bindgen = "0.2.84"
|
|
||||||
|
|
||||||
# The `console_error_panic_hook` crate provides better debugging of panics by
|
|
||||||
# logging them with `console.error`. This is great for development, but requires
|
|
||||||
# all the `std::fmt` and `std::panicking` infrastructure, so isn't great for
|
|
||||||
# code size when deploying.
|
|
||||||
nodarium_utils = { version = "0.1.0", path = "../../../../packages/utils" }
|
nodarium_utils = { version = "0.1.0", path = "../../../../packages/utils" }
|
||||||
nodarium_macros = { version = "0.1.0", path = "../../../../packages/macros" }
|
nodarium_macros = { version = "0.1.0", path = "../../../../packages/macros" }
|
||||||
serde = { version = "1.0", features = ["derive"] }
|
|
||||||
serde-wasm-bindgen = "0.4"
|
|
||||||
console_error_panic_hook = { version = "0.1.7", optional = true }
|
|
||||||
|
|
||||||
[dev-dependencies]
|
|
||||||
wasm-bindgen-test = "0.3.34"
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "wasm-pack build --release --out-name index --no-default-features",
|
"build": "cargo build --target wasm32-unknown-unknown --release && mkdir -p pkg && cp ../../../../target/wasm32-unknown-unknown/release/random.wasm ./pkg/node.wasm",
|
||||||
"dev": "cargo watch -s 'wasm-pack build --dev --out-name index --no-default-features'"
|
"dev": "cargo watch -s 'wasm-pack build --dev --out-name index --no-default-features'"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +1,11 @@
|
|||||||
use nodarium_macros::include_definition_file;
|
use nodarium_macros::nodarium_definition_file;
|
||||||
use nodarium_utils::{concat_args, set_panic_hook, split_args};
|
use nodarium_macros::nodarium_execute;
|
||||||
use wasm_bindgen::prelude::*;
|
use nodarium_utils::{concat_args, split_args};
|
||||||
|
|
||||||
include_definition_file!("src/definition.json");
|
nodarium_definition_file!("src/definition.json");
|
||||||
|
|
||||||
#[wasm_bindgen]
|
#[nodarium_execute]
|
||||||
pub fn execute(args: &[i32]) -> Vec<i32> {
|
pub fn execute(args: &[i32]) -> Vec<i32> {
|
||||||
set_panic_hook();
|
|
||||||
let args = split_args(args);
|
let args = split_args(args);
|
||||||
concat_args(vec![&[1], args[0], args[1], args[2]])
|
concat_args(vec![&[1], args[0], args[1], args[2]])
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,13 +0,0 @@
|
|||||||
//! Test suite for the Web and headless browsers.
|
|
||||||
|
|
||||||
#![cfg(target_arch = "wasm32")]
|
|
||||||
|
|
||||||
extern crate wasm_bindgen_test;
|
|
||||||
use wasm_bindgen_test::*;
|
|
||||||
|
|
||||||
wasm_bindgen_test_configure!(run_in_browser);
|
|
||||||
|
|
||||||
#[wasm_bindgen_test]
|
|
||||||
fn pass() {
|
|
||||||
assert_eq!(1 + 1, 2);
|
|
||||||
}
|
|
||||||
@@ -7,23 +7,8 @@ edition = "2018"
|
|||||||
[lib]
|
[lib]
|
||||||
crate-type = ["cdylib", "rlib"]
|
crate-type = ["cdylib", "rlib"]
|
||||||
|
|
||||||
[features]
|
|
||||||
default = ["console_error_panic_hook"]
|
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
wasm-bindgen = "0.2.84"
|
|
||||||
|
|
||||||
# The `console_error_panic_hook` crate provides better debugging of panics by
|
|
||||||
# logging them with `console.error`. This is great for development, but requires
|
|
||||||
# all the `std::fmt` and `std::panicking` infrastructure, so isn't great for
|
|
||||||
# code size when deploying.
|
|
||||||
nodarium_utils = { version = "0.1.0", path = "../../../../packages/utils" }
|
nodarium_utils = { version = "0.1.0", path = "../../../../packages/utils" }
|
||||||
nodarium_macros = { version = "0.1.0", path = "../../../../packages/macros" }
|
nodarium_macros = { version = "0.1.0", path = "../../../../packages/macros" }
|
||||||
serde = { version = "1.0", features = ["derive"] }
|
serde = { version = "1.0", features = ["derive"] }
|
||||||
serde-wasm-bindgen = "0.4"
|
glam = "0.30.10"
|
||||||
console_error_panic_hook = { version = "0.1.7", optional = true }
|
|
||||||
web-sys = { version = "0.3.69", features = ["console"] }
|
|
||||||
glam = "0.27.0"
|
|
||||||
|
|
||||||
[dev-dependencies]
|
|
||||||
wasm-bindgen-test = "0.3.34"
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "wasm-pack build --release --out-name index --no-default-features",
|
"build": "cargo build --target wasm32-unknown-unknown --release && mkdir -p pkg && cp ../../../../target/wasm32-unknown-unknown/release/rotate.wasm ./pkg/node.wasm",
|
||||||
"dev": "cargo watch -s 'wasm-pack build --dev --out-name index --no-default-features'"
|
"dev": "cargo watch -s 'wasm-pack build --dev --out-name index --no-default-features'"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,16 +1,15 @@
|
|||||||
use glam::{Mat4, Vec3};
|
use glam::{Mat4, Vec3};
|
||||||
use nodarium_macros::include_definition_file;
|
use nodarium_macros::nodarium_definition_file;
|
||||||
|
use nodarium_macros::nodarium_execute;
|
||||||
use nodarium_utils::{
|
use nodarium_utils::{
|
||||||
concat_args, evaluate_float, evaluate_int, geometry::wrap_path_mut, log, set_panic_hook,
|
concat_args, evaluate_float, evaluate_int, geometry::wrap_path_mut, log,
|
||||||
split_args,
|
split_args,
|
||||||
};
|
};
|
||||||
use wasm_bindgen::prelude::*;
|
|
||||||
|
|
||||||
include_definition_file!("src/input.json");
|
nodarium_definition_file!("src/input.json");
|
||||||
|
|
||||||
#[wasm_bindgen]
|
#[nodarium_execute]
|
||||||
pub fn execute(input: &[i32]) -> Vec<i32> {
|
pub fn execute(input: &[i32]) -> Vec<i32> {
|
||||||
set_panic_hook();
|
|
||||||
|
|
||||||
log!("DEBUG args: {:?}", input);
|
log!("DEBUG args: {:?}", input);
|
||||||
|
|
||||||
|
|||||||
@@ -1,13 +0,0 @@
|
|||||||
//! Test suite for the Web and headless browsers.
|
|
||||||
|
|
||||||
#![cfg(target_arch = "wasm32")]
|
|
||||||
|
|
||||||
extern crate wasm_bindgen_test;
|
|
||||||
use wasm_bindgen_test::*;
|
|
||||||
|
|
||||||
wasm_bindgen_test_configure!(run_in_browser);
|
|
||||||
|
|
||||||
#[wasm_bindgen_test]
|
|
||||||
fn pass() {
|
|
||||||
assert_eq!(1 + 1, 2);
|
|
||||||
}
|
|
||||||
@@ -7,23 +7,6 @@ edition = "2018"
|
|||||||
[lib]
|
[lib]
|
||||||
crate-type = ["cdylib", "rlib"]
|
crate-type = ["cdylib", "rlib"]
|
||||||
|
|
||||||
[features]
|
|
||||||
default = ["console_error_panic_hook"]
|
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
wasm-bindgen = "0.2.84"
|
|
||||||
serde = { version = "1.0", features = ["derive"] }
|
|
||||||
serde-wasm-bindgen = "0.4"
|
|
||||||
console_error_panic_hook = { version = "0.1.7", optional = true }
|
|
||||||
nodarium_utils = { version = "0.1.0", path = "../../../../packages/utils" }
|
nodarium_utils = { version = "0.1.0", path = "../../../../packages/utils" }
|
||||||
nodarium_macros = { version = "0.1.0", path = "../../../../packages/macros" }
|
nodarium_macros = { version = "0.1.0", path = "../../../../packages/macros" }
|
||||||
web-sys = { version = "0.3.69", features = ["console"] }
|
|
||||||
|
|
||||||
[dev-dependencies]
|
|
||||||
wasm-bindgen-test = "0.3.34"
|
|
||||||
|
|
||||||
[package.metadata.wasm-pack.profile.release.wasm-bindgen]
|
|
||||||
debug-js-glue = true
|
|
||||||
demangle-name-section = true
|
|
||||||
dwarf-debug-info = false
|
|
||||||
omit-default-module-path = true
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "wasm-pack build --release --out-name index --no-default-features",
|
"build": "cargo build --target wasm32-unknown-unknown --release && mkdir -p pkg && cp ../../../../target/wasm32-unknown-unknown/release/stem.wasm ./pkg/node.wasm",
|
||||||
"dev": "cargo watch -s 'wasm-pack build --dev --out-name index --no-default-features'"
|
"dev": "cargo watch -s 'wasm-pack build --dev --out-name index --no-default-features'"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,17 +1,15 @@
|
|||||||
use nodarium_macros::include_definition_file;
|
use nodarium_macros::nodarium_definition_file;
|
||||||
|
use nodarium_macros::nodarium_execute;
|
||||||
use nodarium_utils::{
|
use nodarium_utils::{
|
||||||
evaluate_float, evaluate_int, evaluate_vec3,
|
evaluate_float, evaluate_int, evaluate_vec3,
|
||||||
geometry::{create_multiple_paths, wrap_multiple_paths},
|
geometry::{create_multiple_paths, wrap_multiple_paths},
|
||||||
log, reset_call_count, set_panic_hook, split_args,
|
log, reset_call_count, split_args,
|
||||||
};
|
};
|
||||||
use wasm_bindgen::prelude::*;
|
|
||||||
|
|
||||||
include_definition_file!("src/input.json");
|
nodarium_definition_file!("src/input.json");
|
||||||
|
|
||||||
#[wasm_bindgen]
|
#[nodarium_execute]
|
||||||
pub fn execute(input: &[i32]) -> Vec<i32> {
|
pub fn execute(input: &[i32]) -> Vec<i32> {
|
||||||
set_panic_hook();
|
|
||||||
|
|
||||||
reset_call_count();
|
reset_call_count();
|
||||||
|
|
||||||
let args = split_args(input);
|
let args = split_args(input);
|
||||||
|
|||||||
@@ -1,13 +0,0 @@
|
|||||||
//! Test suite for the Web and headless browsers.
|
|
||||||
|
|
||||||
#![cfg(target_arch = "wasm32")]
|
|
||||||
|
|
||||||
extern crate wasm_bindgen_test;
|
|
||||||
use wasm_bindgen_test::*;
|
|
||||||
|
|
||||||
wasm_bindgen_test_configure!(run_in_browser);
|
|
||||||
|
|
||||||
#[wasm_bindgen_test]
|
|
||||||
fn pass() {
|
|
||||||
assert_eq!(1 + 1, 2);
|
|
||||||
}
|
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "max-plantarium-triangle"
|
name = "triangle"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
authors = ["Max Richter <jim-x@web.de>"]
|
authors = ["Max Richter <jim-x@web.de>"]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
@@ -7,22 +7,6 @@ edition = "2018"
|
|||||||
[lib]
|
[lib]
|
||||||
crate-type = ["cdylib", "rlib"]
|
crate-type = ["cdylib", "rlib"]
|
||||||
|
|
||||||
[features]
|
|
||||||
default = ["console_error_panic_hook"]
|
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
wasm-bindgen = "0.2.84"
|
|
||||||
|
|
||||||
# The `console_error_panic_hook` crate provides better debugging of panics by
|
|
||||||
# logging them with `console.error`. This is great for development, but requires
|
|
||||||
# all the `std::fmt` and `std::panicking` infrastructure, so isn't great for
|
|
||||||
# code size when deploying.
|
|
||||||
nodarium_utils = { version = "0.1.0", path = "../../../../packages/utils" }
|
nodarium_utils = { version = "0.1.0", path = "../../../../packages/utils" }
|
||||||
nodarium_macros = { version = "0.1.0", path = "../../../../packages/macros" }
|
nodarium_macros = { version = "0.1.0", path = "../../../../packages/macros" }
|
||||||
serde = { version = "1.0", features = ["derive"] }
|
|
||||||
serde-wasm-bindgen = "0.4"
|
|
||||||
console_error_panic_hook = { version = "0.1.7", optional = true }
|
|
||||||
web-sys = { version = "0.3.69", features = ["console"] }
|
|
||||||
|
|
||||||
[dev-dependencies]
|
|
||||||
wasm-bindgen-test = "0.3.34"
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "wasm-pack build --release --out-name index --no-default-features",
|
"build": "cargo build --target wasm32-unknown-unknown --release && mkdir -p pkg && cp ../../../../target/wasm32-unknown-unknown/release/triangle.wasm ./pkg/node.wasm",
|
||||||
"dev": "cargo watch -s 'wasm-pack build --dev --out-name index --no-default-features'"
|
"dev": "cargo watch -s 'wasm-pack build --dev --out-name index --no-default-features'"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,25 +1,21 @@
|
|||||||
use nodarium_macros::include_definition_file;
|
use nodarium_macros::nodarium_definition_file;
|
||||||
|
use nodarium_macros::nodarium_execute;
|
||||||
use nodarium_utils::{
|
use nodarium_utils::{
|
||||||
decode_float, encode_float, evaluate_int, set_panic_hook, split_args, wrap_arg,
|
decode_float, encode_float, evaluate_int, split_args, wrap_arg, log
|
||||||
};
|
};
|
||||||
use wasm_bindgen::prelude::*;
|
|
||||||
use web_sys::console;
|
|
||||||
|
|
||||||
include_definition_file!("src/input.json");
|
nodarium_definition_file!("src/input.json");
|
||||||
|
|
||||||
#[rustfmt::skip]
|
#[nodarium_execute]
|
||||||
#[wasm_bindgen]
|
|
||||||
pub fn execute(input: &[i32]) -> Vec<i32> {
|
pub fn execute(input: &[i32]) -> Vec<i32> {
|
||||||
|
|
||||||
set_panic_hook();
|
|
||||||
|
|
||||||
let args = split_args(input);
|
let args = split_args(input);
|
||||||
|
|
||||||
let size = evaluate_int(args[0]);
|
let size = evaluate_int(args[0]);
|
||||||
let decoded = decode_float(size);
|
let decoded = decode_float(size);
|
||||||
let negative_size = encode_float(-decoded);
|
let negative_size = encode_float(-decoded);
|
||||||
|
|
||||||
console::log_1(&format!("WASM(triangle): input: {:?} -> {}", args[0],decoded).into());
|
log!("WASM(triangle): input: {:?} -> {}", args[0],decoded);
|
||||||
|
|
||||||
// [[1,3, x, y, z, x, y,z,x,y,z]];
|
// [[1,3, x, y, z, x, y,z,x,y,z]];
|
||||||
wrap_arg(&[
|
wrap_arg(&[
|
||||||
|
|||||||
@@ -1,13 +0,0 @@
|
|||||||
//! Test suite for the Web and headless browsers.
|
|
||||||
|
|
||||||
#![cfg(target_arch = "wasm32")]
|
|
||||||
|
|
||||||
extern crate wasm_bindgen_test;
|
|
||||||
use wasm_bindgen_test::*;
|
|
||||||
|
|
||||||
wasm_bindgen_test_configure!(run_in_browser);
|
|
||||||
|
|
||||||
#[wasm_bindgen_test]
|
|
||||||
fn pass() {
|
|
||||||
assert_eq!(1 + 1, 2);
|
|
||||||
}
|
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "max-plantarium-vec3"
|
name = "vec3"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
authors = ["Max Richter <jim-x@web.de>"]
|
authors = ["Max Richter <jim-x@web.de>"]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
@@ -7,22 +7,8 @@ edition = "2018"
|
|||||||
[lib]
|
[lib]
|
||||||
crate-type = ["cdylib", "rlib"]
|
crate-type = ["cdylib", "rlib"]
|
||||||
|
|
||||||
[features]
|
|
||||||
default = ["console_error_panic_hook"]
|
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
wasm-bindgen = "0.2.84"
|
|
||||||
|
|
||||||
# The `console_error_panic_hook` crate provides better debugging of panics by
|
|
||||||
# logging them with `console.error`. This is great for development, but requires
|
|
||||||
# all the `std::fmt` and `std::panicking` infrastructure, so isn't great for
|
|
||||||
# code size when deploying.
|
|
||||||
nodarium_utils = { version = "0.1.0", path = "../../../../packages/utils" }
|
nodarium_utils = { version = "0.1.0", path = "../../../../packages/utils" }
|
||||||
nodarium_macros = { version = "0.1.0", path = "../../../../packages/macros" }
|
nodarium_macros = { version = "0.1.0", path = "../../../../packages/macros" }
|
||||||
serde = { version = "1.0", features = ["derive"] }
|
serde = { version = "1.0", features = ["derive"] }
|
||||||
serde-wasm-bindgen = "0.4"
|
|
||||||
console_error_panic_hook = { version = "0.1.7", optional = true }
|
|
||||||
web-sys = { version = "0.3.69", features = ["console"] }
|
|
||||||
|
|
||||||
[dev-dependencies]
|
|
||||||
wasm-bindgen-test = "0.3.34"
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "wasm-pack build --release --out-name index --no-default-features",
|
"build": "cargo build --target wasm32-unknown-unknown --release && mkdir -p pkg && cp ../../../../target/wasm32-unknown-unknown/release/vec3.wasm ./pkg/node.wasm",
|
||||||
"dev": "cargo watch -s 'wasm-pack build --dev --out-name index --no-default-features'"
|
"dev": "cargo watch -s 'wasm-pack build --dev --out-name index --no-default-features'"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
use nodarium_macros::include_definition_file;
|
use nodarium_macros::nodarium_definition_file;
|
||||||
|
use nodarium_macros::nodarium_execute;
|
||||||
use nodarium_utils::{concat_args, log, split_args};
|
use nodarium_utils::{concat_args, log, split_args};
|
||||||
use wasm_bindgen::prelude::*;
|
|
||||||
|
|
||||||
include_definition_file!("src/input.json");
|
nodarium_definition_file!("src/input.json");
|
||||||
|
|
||||||
#[wasm_bindgen]
|
#[nodarium_execute]
|
||||||
pub fn execute(input: &[i32]) -> Vec<i32> {
|
pub fn execute(input: &[i32]) -> Vec<i32> {
|
||||||
let args = split_args(input);
|
let args = split_args(input);
|
||||||
log!("vec3 input: {:?}", input);
|
log!("vec3 input: {:?}", input);
|
||||||
|
|||||||
@@ -1,13 +0,0 @@
|
|||||||
//! Test suite for the Web and headless browsers.
|
|
||||||
|
|
||||||
#![cfg(target_arch = "wasm32")]
|
|
||||||
|
|
||||||
extern crate wasm_bindgen_test;
|
|
||||||
use wasm_bindgen_test::*;
|
|
||||||
|
|
||||||
wasm_bindgen_test_configure!(run_in_browser);
|
|
||||||
|
|
||||||
#[wasm_bindgen_test]
|
|
||||||
fn pass() {
|
|
||||||
assert_eq!(1 + 1, 2);
|
|
||||||
}
|
|
||||||
@@ -4,10 +4,9 @@
|
|||||||
"build:story": "pnpm -r --filter 'ui' story:build",
|
"build:story": "pnpm -r --filter 'ui' story:build",
|
||||||
"build:app": "BASE_PATH=/ui pnpm -r --filter 'ui' build && pnpm -r --filter 'app' build",
|
"build:app": "BASE_PATH=/ui pnpm -r --filter 'ui' build && pnpm -r --filter 'app' build",
|
||||||
"build:nodes": "pnpm -r --filter './nodes/**' build",
|
"build:nodes": "pnpm -r --filter './nodes/**' build",
|
||||||
"build:deploy": "pnpm build",
|
|
||||||
"dev:all": "pnpm -r dev",
|
|
||||||
"dev:nodes": "pnpm -r --parallel --filter './nodes/**' dev",
|
"dev:nodes": "pnpm -r --parallel --filter './nodes/**' dev",
|
||||||
"dev": "pnpm -r --filter 'app' --filter './packages/ui' dev"
|
"build:deploy": "pnpm build",
|
||||||
|
"dev": "pnpm -r --filter 'app' --filter './packages/node-registry' dev"
|
||||||
},
|
},
|
||||||
"packageManager": "pnpm@10.24.0"
|
"packageManager": "pnpm@10.24.0"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ repository = "https://github.com/jim-fx/nodes"
|
|||||||
proc-macro = true
|
proc-macro = true
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
syn = { version = "1.0", features = ["full"] }
|
syn = { version = "2.0", features = ["full"] }
|
||||||
serde = { version = "1.0", features = ["derive"] }
|
serde = { version = "1.0", features = ["derive"] }
|
||||||
serde_json = { version = "1.0", default-features = false, features = ["alloc"] }
|
serde_json = { version = "1.0", default-features = false, features = ["alloc"] }
|
||||||
quote = "1.0"
|
quote = "1.0"
|
||||||
|
|||||||
@@ -5,32 +5,7 @@ use quote::quote;
|
|||||||
use std::env;
|
use std::env;
|
||||||
use std::fs;
|
use std::fs;
|
||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
use syn::{parse_macro_input, LitStr};
|
use syn::parse_macro_input;
|
||||||
|
|
||||||
#[proc_macro]
|
|
||||||
pub fn node_definition(input: TokenStream) -> TokenStream {
|
|
||||||
let input_string = parse_macro_input!(input as LitStr).value();
|
|
||||||
|
|
||||||
// Validate JSON format
|
|
||||||
let json: NodeDefinition = match serde_json::from_str(&input_string) {
|
|
||||||
Ok(json) => json,
|
|
||||||
Err(e) => panic!("Invalid JSON input: {}", e),
|
|
||||||
};
|
|
||||||
|
|
||||||
// Convert the validated JSON back to a pretty-printed string
|
|
||||||
let formatted_json = serde_json::to_string_pretty(&json).expect("Failed to serialize JSON");
|
|
||||||
|
|
||||||
// Generate the output function
|
|
||||||
let expanded = quote! {
|
|
||||||
#[wasm_bindgen]
|
|
||||||
pub fn get_definition() -> String {
|
|
||||||
String::from(#formatted_json)
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// Convert the generated code back to a TokenStream
|
|
||||||
TokenStream::from(expanded)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn add_line_numbers(input: String) -> String {
|
fn add_line_numbers(input: String) -> String {
|
||||||
return input
|
return input
|
||||||
@@ -41,39 +16,120 @@ fn add_line_numbers(input: String) -> String {
|
|||||||
.join("\n");
|
.join("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
#[proc_macro]
|
#[proc_macro_attribute]
|
||||||
pub fn include_definition_file(input: TokenStream) -> TokenStream {
|
pub fn nodarium_execute(_attr: TokenStream, item: TokenStream) -> TokenStream {
|
||||||
let file_path = syn::parse_macro_input!(input as syn::LitStr).value();
|
let input_fn = parse_macro_input!(item as syn::ItemFn);
|
||||||
|
let _fn_name = &input_fn.sig.ident;
|
||||||
|
let _fn_vis = &input_fn.vis;
|
||||||
|
let fn_body = &input_fn.block;
|
||||||
|
|
||||||
// Retrieve the directory containing the Cargo.toml file
|
let first_arg_ident = if let Some(syn::FnArg::Typed(pat_type)) = input_fn.sig.inputs.first() {
|
||||||
let project_dir = env::var("CARGO_MANIFEST_DIR").unwrap();
|
if let syn::Pat::Ident(pat_ident) = &*pat_type.pat {
|
||||||
let full_path = Path::new(&project_dir).join(&file_path);
|
&pat_ident.ident
|
||||||
|
} else {
|
||||||
|
panic!("Expected a simple identifier for the first argument");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
panic!("The execute function must have at least one argument (the input slice)");
|
||||||
|
};
|
||||||
|
|
||||||
// Read the JSON file content
|
// We create a wrapper that handles the C ABI and pointer math
|
||||||
let json_content = fs::read_to_string(full_path).unwrap_or_else(|err| {
|
|
||||||
panic!(
|
|
||||||
"Failed to read JSON file at '{}/{}': {}",
|
|
||||||
project_dir, file_path, err
|
|
||||||
)
|
|
||||||
});
|
|
||||||
|
|
||||||
// Optionally, validate that the content is valid JSON
|
|
||||||
let _: NodeDefinition = serde_json::from_str(&json_content).unwrap_or_else(|err| {
|
|
||||||
panic!(
|
|
||||||
"JSON file contains invalid JSON: \n{} \n{}",
|
|
||||||
err,
|
|
||||||
add_line_numbers(json_content.clone())
|
|
||||||
)
|
|
||||||
});
|
|
||||||
|
|
||||||
// Generate the function that returns the JSON string
|
|
||||||
let expanded = quote! {
|
let expanded = quote! {
|
||||||
#[wasm_bindgen]
|
extern "C" {
|
||||||
pub fn get_definition() -> String {
|
fn host_log_panic(ptr: *const u8, len: usize);
|
||||||
String::from(#json_content)
|
fn host_log(ptr: *const u8, len: usize);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn setup_panic_hook() {
|
||||||
|
static SET_HOOK: std::sync::Once = std::sync::Once::new();
|
||||||
|
SET_HOOK.call_once(|| {
|
||||||
|
std::panic::set_hook(Box::new(|info| {
|
||||||
|
let msg = info.to_string();
|
||||||
|
unsafe { host_log_panic(msg.as_ptr(), msg.len()); }
|
||||||
|
}));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
#[no_mangle]
|
||||||
|
pub extern "C" fn __alloc(len: usize) -> *mut i32 {
|
||||||
|
let mut buf = Vec::with_capacity(len);
|
||||||
|
let ptr = buf.as_mut_ptr();
|
||||||
|
std::mem::forget(buf);
|
||||||
|
ptr
|
||||||
|
}
|
||||||
|
|
||||||
|
#[no_mangle]
|
||||||
|
pub extern "C" fn __free(ptr: *mut i32, len: usize) {
|
||||||
|
unsafe {
|
||||||
|
let _ = Vec::from_raw_parts(ptr, 0, len);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static mut OUTPUT_BUFFER: Vec<i32> = Vec::new();
|
||||||
|
|
||||||
|
#[no_mangle]
|
||||||
|
pub extern "C" fn execute(ptr: *const i32, len: usize) -> *mut i32 {
|
||||||
|
setup_panic_hook();
|
||||||
|
// 1. Convert raw pointer to slice
|
||||||
|
let input = unsafe { core::slice::from_raw_parts(ptr, len) };
|
||||||
|
|
||||||
|
// 2. Call the logic (which we define below)
|
||||||
|
let result_data: Vec<i32> = internal_logic(input);
|
||||||
|
|
||||||
|
// 3. Use the static buffer for the result
|
||||||
|
let result_len = result_data.len();
|
||||||
|
unsafe {
|
||||||
|
OUTPUT_BUFFER.clear();
|
||||||
|
OUTPUT_BUFFER.reserve(result_len + 1);
|
||||||
|
OUTPUT_BUFFER.push(result_len as i32);
|
||||||
|
OUTPUT_BUFFER.extend(result_data);
|
||||||
|
|
||||||
|
OUTPUT_BUFFER.as_mut_ptr()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn internal_logic(#first_arg_ident: &[i32]) -> Vec<i32> {
|
||||||
|
#fn_body
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
TokenStream::from(expanded)
|
||||||
|
}
|
||||||
|
|
||||||
|
#[proc_macro]
|
||||||
|
pub fn nodarium_definition_file(input: TokenStream) -> TokenStream {
|
||||||
|
let path_lit = syn::parse_macro_input!(input as syn::LitStr);
|
||||||
|
let file_path = path_lit.value();
|
||||||
|
|
||||||
|
let project_dir = env::var("CARGO_MANIFEST_DIR").unwrap();
|
||||||
|
let full_path = Path::new(&project_dir).join(&file_path);
|
||||||
|
|
||||||
|
let json_content = fs::read_to_string(&full_path).unwrap_or_else(|err| {
|
||||||
|
panic!("Failed to read JSON file at '{}/{}': {}", project_dir, file_path, err)
|
||||||
|
});
|
||||||
|
|
||||||
|
let _: NodeDefinition = serde_json::from_str(&json_content).unwrap_or_else(|err| {
|
||||||
|
panic!("JSON file contains invalid JSON: \n{} \n{}", err, add_line_numbers(json_content.clone()))
|
||||||
|
});
|
||||||
|
|
||||||
|
// We use the span from the input path literal
|
||||||
|
let bytes = syn::LitByteStr::new(json_content.as_bytes(), path_lit.span());
|
||||||
|
let len = json_content.len();
|
||||||
|
|
||||||
|
let expanded = quote! {
|
||||||
|
#[link_section = "nodarium_definition"]
|
||||||
|
static DEFINITION_DATA: [u8; #len] = *#bytes;
|
||||||
|
|
||||||
|
#[no_mangle]
|
||||||
|
pub extern "C" fn get_definition_ptr() -> *const u8 {
|
||||||
|
DEFINITION_DATA.as_ptr()
|
||||||
|
}
|
||||||
|
|
||||||
|
#[no_mangle]
|
||||||
|
pub extern "C" fn get_definition_len() -> usize {
|
||||||
|
DEFINITION_DATA.len()
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// Convert the generated code back to a TokenStream
|
|
||||||
TokenStream::from(expanded)
|
TokenStream::from(expanded)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,10 +13,9 @@ export class RemoteNodeRegistry implements NodeRegistry {
|
|||||||
status: "loading" | "ready" | "error" = "loading";
|
status: "loading" | "ready" | "error" = "loading";
|
||||||
private nodes: Map<string, NodeDefinition> = new Map();
|
private nodes: Map<string, NodeDefinition> = new Map();
|
||||||
|
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
private url: string,
|
private url: string,
|
||||||
public cache?: AsyncCache<ArrayBuffer | string>,
|
private cache?: AsyncCache<ArrayBuffer | string>,
|
||||||
) { }
|
) { }
|
||||||
|
|
||||||
async fetchJson(url: string, skipCache = false) {
|
async fetchJson(url: string, skipCache = false) {
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ version = "0.1.0"
|
|||||||
edition = "2021"
|
edition = "2021"
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
description = "Types for Nodarium"
|
description = "Types for Nodarium"
|
||||||
website = "https://nodes.max-richter.dev"
|
|
||||||
repository = "https://github.com/jim-fx/nodes"
|
repository = "https://github.com/jim-fx/nodes"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
"name": "@nodarium/ui",
|
"name": "@nodarium/ui",
|
||||||
"version": "0.0.1",
|
"version": "0.0.1",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "chokidar './src/**' --initial -c 'pnpm build'",
|
"dev": "vite dev",
|
||||||
"build": "vite build && npm run package",
|
"build": "vite build && npm run package",
|
||||||
"preview": "vite preview",
|
"preview": "vite preview",
|
||||||
"package": "svelte-kit sync && svelte-package && publint",
|
"package": "svelte-kit sync && svelte-package && publint",
|
||||||
@@ -37,7 +37,6 @@
|
|||||||
"@types/three": "^0.182.0",
|
"@types/three": "^0.182.0",
|
||||||
"@typescript-eslint/eslint-plugin": "^8.53.0",
|
"@typescript-eslint/eslint-plugin": "^8.53.0",
|
||||||
"@typescript-eslint/parser": "^8.53.0",
|
"@typescript-eslint/parser": "^8.53.0",
|
||||||
"chokidar-cli": "^3.0.0",
|
|
||||||
"eslint": "^9.39.2",
|
"eslint": "^9.39.2",
|
||||||
"eslint-plugin-svelte": "^3.14.0",
|
"eslint-plugin-svelte": "^3.14.0",
|
||||||
"publint": "^0.3.16",
|
"publint": "^0.3.16",
|
||||||
|
|||||||
@@ -1,20 +1,18 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import type { NodeInput } from '@nodarium/types';
|
|
||||||
|
|
||||||
import Checkbox from './inputs/Checkbox.svelte';
|
import Checkbox from './inputs/Checkbox.svelte';
|
||||||
import Float from './inputs/Float.svelte';
|
import Float from './inputs/Float.svelte';
|
||||||
import Integer from './inputs/Integer.svelte';
|
import Integer from './inputs/Integer.svelte';
|
||||||
import Select from './inputs/Select.svelte';
|
import Select from './inputs/Select.svelte';
|
||||||
|
|
||||||
|
import type { NodeInput } from '@nodarium/types';
|
||||||
import Vec3 from './inputs/Vec3.svelte';
|
import Vec3 from './inputs/Vec3.svelte';
|
||||||
// import Number from './inputs/Number.svelte';
|
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
input: NodeInput;
|
input: NodeInput;
|
||||||
value: any;
|
value: any;
|
||||||
id?: string;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let { input, value = $bindable(), id }: Props = $props();
|
let { input, value = $bindable() }: Props = $props();
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
{#if input.type === 'float'}
|
{#if input.type === 'float'}
|
||||||
@@ -22,9 +20,9 @@
|
|||||||
{:else if input.type === 'integer'}
|
{:else if input.type === 'integer'}
|
||||||
<Integer bind:value min={input?.min} max={input?.max} />
|
<Integer bind:value min={input?.min} max={input?.max} />
|
||||||
{:else if input.type === 'boolean'}
|
{:else if input.type === 'boolean'}
|
||||||
<Checkbox bind:value {id} />
|
<Checkbox bind:value />
|
||||||
{:else if input.type === 'select'}
|
{:else if input.type === 'select'}
|
||||||
<Select bind:value options={input.options} {id} />
|
<Select bind:value options={input.options} />
|
||||||
{:else if input.type === 'vec3'}
|
{:else if input.type === 'vec3'}
|
||||||
<Vec3 bind:value {id} />
|
<Vec3 bind:value />
|
||||||
{/if}
|
{/if}
|
||||||
|
|||||||
@@ -40,6 +40,30 @@
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@theme {
|
||||||
|
--color-neutral-100: #E7E7E7;
|
||||||
|
--color-neutral-200: #CECECE;
|
||||||
|
--color-neutral-300: #7C7C7C;
|
||||||
|
--color-neutral-400: #2D2D2D;
|
||||||
|
--color-neutral-500: #171717;
|
||||||
|
--color-neutral-800: #111111;
|
||||||
|
--color-neutral-900: #060606;
|
||||||
|
|
||||||
|
--color-layer-0: var(--neutral-900);
|
||||||
|
--color-layer-1: var(--neutral-500);
|
||||||
|
--color-layer-2: var(--neutral-400);
|
||||||
|
--color-layer-3: var(--neutral-200);
|
||||||
|
|
||||||
|
--color-active: #ffffff;
|
||||||
|
--color-selected: #c65a19;
|
||||||
|
|
||||||
|
--color-outline: var(--neutral-400);
|
||||||
|
--color-connection: #333333;
|
||||||
|
--color-edge: var(--connection, var(--outline));
|
||||||
|
|
||||||
|
--color-text-color: var(--neutral-200);
|
||||||
|
}
|
||||||
|
|
||||||
html {
|
html {
|
||||||
--neutral-100: #E7E7E7;
|
--neutral-100: #E7E7E7;
|
||||||
--neutral-200: #CECECE;
|
--neutral-200: #CECECE;
|
||||||
|
|||||||
@@ -1,10 +1,9 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
interface Props {
|
interface Props {
|
||||||
value: boolean;
|
value: boolean;
|
||||||
id?: string;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let { value = $bindable(false), id }: Props = $props();
|
let { value = $bindable(false) }: Props = $props();
|
||||||
|
|
||||||
$effect(() => {
|
$effect(() => {
|
||||||
if (typeof value === 'string') {
|
if (typeof value === 'string') {
|
||||||
@@ -24,7 +23,6 @@
|
|||||||
type="checkbox"
|
type="checkbox"
|
||||||
bind:checked={value}
|
bind:checked={value}
|
||||||
class="peer absolute h-px w-px overflow-hidden whitespace-nowrap border-0 p-0 [clip:rect(0,0,0,0)]"
|
class="peer absolute h-px w-px overflow-hidden whitespace-nowrap border-0 p-0 [clip:rect(0,0,0,0)]"
|
||||||
{id}
|
|
||||||
/>
|
/>
|
||||||
<span
|
<span
|
||||||
class="absolute opacity-0 peer-checked:opacity-100 transition-opacity duration-100 flex w-full h-full items-center justify-center"
|
class="absolute opacity-0 peer-checked:opacity-100 transition-opacity duration-100 flex w-full h-full items-center justify-center"
|
||||||
|
|||||||
@@ -4,15 +4,13 @@
|
|||||||
step?: number;
|
step?: number;
|
||||||
min?: number;
|
min?: number;
|
||||||
max?: number;
|
max?: number;
|
||||||
id?: string;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let {
|
let {
|
||||||
value = $bindable(0.5),
|
value = $bindable(0.5),
|
||||||
step = 0.01,
|
step = 0.01,
|
||||||
min = $bindable(0),
|
min = $bindable(0),
|
||||||
max = $bindable(1),
|
max = $bindable(1)
|
||||||
id
|
|
||||||
}: Props = $props();
|
}: Props = $props();
|
||||||
|
|
||||||
if (min > max) {
|
if (min > max) {
|
||||||
@@ -112,7 +110,6 @@
|
|||||||
<input
|
<input
|
||||||
bind:value
|
bind:value
|
||||||
bind:this={inputEl}
|
bind:this={inputEl}
|
||||||
{id}
|
|
||||||
{step}
|
{step}
|
||||||
{max}
|
{max}
|
||||||
{min}
|
{min}
|
||||||
|
|||||||
@@ -1,48 +1,41 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
|
import { createEventDispatcher } from 'svelte';
|
||||||
|
const dispatch = createEventDispatcher();
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
value?: number;
|
|
||||||
step?: number;
|
|
||||||
min?: number | undefined;
|
min?: number | undefined;
|
||||||
max?: number | undefined;
|
max?: number | undefined;
|
||||||
|
step?: number;
|
||||||
|
value?: number;
|
||||||
id?: string;
|
id?: string;
|
||||||
change?: (arg: number) => void;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let {
|
let {
|
||||||
value = $bindable(0),
|
min = undefined,
|
||||||
|
max = undefined,
|
||||||
step = 1,
|
step = 1,
|
||||||
min = $bindable(0),
|
value = $bindable(0),
|
||||||
max = $bindable(1),
|
id = ''
|
||||||
id,
|
|
||||||
change
|
|
||||||
}: Props = $props();
|
}: Props = $props();
|
||||||
|
|
||||||
if (min > max) {
|
if (!value) {
|
||||||
[min, max] = [max, min];
|
value = 0;
|
||||||
}
|
|
||||||
if (value > max) {
|
|
||||||
max = value;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function strip(input: number) {
|
let inputEl: HTMLInputElement | undefined = $state();
|
||||||
return +parseFloat(input + '').toPrecision(2);
|
let wrapper: HTMLDivElement | undefined = $state();
|
||||||
}
|
|
||||||
|
|
||||||
let inputEl = $state() as HTMLInputElement;
|
|
||||||
let wrapper = $state() as HTMLDivElement;
|
|
||||||
|
|
||||||
let prev = -1;
|
let prev = -1;
|
||||||
function update() {
|
function update() {
|
||||||
if (prev === value) return;
|
if (prev === value) return;
|
||||||
prev = value;
|
prev = value;
|
||||||
change?.(value);
|
dispatch('change', parseFloat(value + ''));
|
||||||
}
|
}
|
||||||
|
|
||||||
function handleChange(change: number) {
|
function handleChange(change: number) {
|
||||||
value = Math.max(min ?? -Infinity, Math.min(+value + change, max ?? Infinity));
|
value = Math.max(min ?? -Infinity, Math.min(+value + change, max ?? Infinity));
|
||||||
}
|
}
|
||||||
|
|
||||||
let isMouseDown = $state(false);
|
|
||||||
let downX = 0;
|
let downX = 0;
|
||||||
let downV = 0;
|
let downV = 0;
|
||||||
let rect: DOMRect;
|
let rect: DOMRect;
|
||||||
@@ -72,13 +65,6 @@
|
|||||||
window.removeEventListener('mousemove', handleMouseMove);
|
window.removeEventListener('mousemove', handleMouseMove);
|
||||||
}
|
}
|
||||||
|
|
||||||
function handleKeyDown(ev: KeyboardEvent) {
|
|
||||||
if (ev.key === 'Escape' || ev.key === 'Enter') {
|
|
||||||
handleMouseUp();
|
|
||||||
inputEl?.blur();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function handleMouseMove(ev: MouseEvent) {
|
function handleMouseMove(ev: MouseEvent) {
|
||||||
if (!ev.ctrlKey && typeof min === 'number' && typeof max === 'number') {
|
if (!ev.ctrlKey && typeof min === 'number' && typeof max === 'number') {
|
||||||
const vx = (ev.clientX - rect.left) / rect.width;
|
const vx = (ev.clientX - rect.left) / rect.width;
|
||||||
@@ -90,12 +76,8 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
$effect(() => {
|
$effect(() => {
|
||||||
if ((value || 0).toString().length > 5) {
|
|
||||||
value = strip(value || 0);
|
|
||||||
}
|
|
||||||
value !== undefined && update();
|
value !== undefined && update();
|
||||||
});
|
});
|
||||||
|
|
||||||
let width = $derived(
|
let width = $derived(
|
||||||
Number.isFinite(value) ? Math.max((value?.toString().length ?? 1) * 8, 30) + 'px' : '20px'
|
Number.isFinite(value) ? Math.max((value?.toString().length ?? 1) * 8, 30) + 'px' : '20px'
|
||||||
);
|
);
|
||||||
@@ -104,11 +86,9 @@
|
|||||||
<div
|
<div
|
||||||
class="component-wrapper"
|
class="component-wrapper"
|
||||||
bind:this={wrapper}
|
bind:this={wrapper}
|
||||||
class:is-down={isMouseDown}
|
|
||||||
role="slider"
|
role="slider"
|
||||||
tabindex="0"
|
tabindex="0"
|
||||||
aria-valuenow={value}
|
aria-valuenow={value}
|
||||||
onkeydown={handleKeyDown}
|
|
||||||
onmousedown={handleMouseDown}
|
onmousedown={handleMouseDown}
|
||||||
onmouseup={handleMouseUp}
|
onmouseup={handleMouseUp}
|
||||||
>
|
>
|
||||||
@@ -144,32 +124,21 @@
|
|||||||
border-radius: var(--border-radius, 2px);
|
border-radius: var(--border-radius, 2px);
|
||||||
}
|
}
|
||||||
|
|
||||||
input[type='number']::-webkit-inner-spin-button,
|
|
||||||
input[type='number']::-webkit-outer-spin-button {
|
|
||||||
-webkit-appearance: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
input[type='number'] {
|
input[type='number'] {
|
||||||
-webkit-appearance: textfield;
|
-webkit-appearance: textfield;
|
||||||
-moz-appearance: textfield;
|
-moz-appearance: textfield;
|
||||||
appearance: textfield;
|
appearance: textfield;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
font-family: var(--font-family);
|
|
||||||
font-variant-numeric: tabular-nums;
|
|
||||||
color: var(--text-color);
|
|
||||||
background-color: transparent;
|
|
||||||
padding: var(--padding, 6px);
|
|
||||||
font-size: 1em;
|
font-size: 1em;
|
||||||
padding-inline: 10px;
|
font-family: var(--font-family);
|
||||||
text-align: center;
|
padding-top: 8px;
|
||||||
border: none;
|
|
||||||
border-style: none;
|
|
||||||
flex: 1;
|
flex: 1;
|
||||||
width: 72%;
|
width: 72%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.is-down > input {
|
input[type='number']::-webkit-inner-spin-button,
|
||||||
cursor: ew-resize !important;
|
input[type='number']::-webkit-outer-spin-button {
|
||||||
|
-webkit-appearance: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.overlay {
|
.overlay {
|
||||||
@@ -182,10 +151,6 @@
|
|||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.is-down > .overlay {
|
|
||||||
transition: none !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
button {
|
button {
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
border: none;
|
border: none;
|
||||||
|
|||||||
@@ -1,169 +0,0 @@
|
|||||||
<script lang="ts">
|
|
||||||
interface Props {
|
|
||||||
value?: number;
|
|
||||||
step?: number;
|
|
||||||
min?: number;
|
|
||||||
max?: number;
|
|
||||||
id?: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
let {
|
|
||||||
value = $bindable(1),
|
|
||||||
step = 1,
|
|
||||||
min = $bindable(0),
|
|
||||||
max = $bindable(1),
|
|
||||||
id
|
|
||||||
}: Props = $props();
|
|
||||||
|
|
||||||
if (min > max) {
|
|
||||||
[min, max] = [max, min];
|
|
||||||
}
|
|
||||||
if (value > max) {
|
|
||||||
max = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
function strip(input: number) {
|
|
||||||
return +parseFloat(input + '').toPrecision(2);
|
|
||||||
}
|
|
||||||
|
|
||||||
let inputEl: HTMLInputElement | undefined = $state();
|
|
||||||
|
|
||||||
let prev = -1;
|
|
||||||
function update() {
|
|
||||||
if (prev === value) return;
|
|
||||||
if (value.toString().length > 5) {
|
|
||||||
value = strip(value);
|
|
||||||
}
|
|
||||||
prev = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
function handleChange(change: number) {
|
|
||||||
value = Math.max(min ?? -Infinity, Math.min(+value + change, max ?? Infinity));
|
|
||||||
}
|
|
||||||
|
|
||||||
function handleKeyDown(ev: KeyboardEvent) {
|
|
||||||
if (ev.key === 'Escape' || ev.key === 'Enter') {
|
|
||||||
inputEl?.blur();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$effect(() => {
|
|
||||||
update();
|
|
||||||
});
|
|
||||||
|
|
||||||
let ratio = $derived(((value - min) / (max - min)) * 100);
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<div>
|
|
||||||
<div class="component-wrapper">
|
|
||||||
<button onclick={() => handleChange(-step)}>-</button>
|
|
||||||
<input
|
|
||||||
bind:value
|
|
||||||
bind:this={inputEl}
|
|
||||||
{id}
|
|
||||||
{step}
|
|
||||||
{max}
|
|
||||||
{min}
|
|
||||||
type="number"
|
|
||||||
onkeydown={handleKeyDown}
|
|
||||||
/>
|
|
||||||
<button onclick={() => handleChange(+step)}>+</button>
|
|
||||||
</div>
|
|
||||||
<div class="slider">
|
|
||||||
<input
|
|
||||||
type="range"
|
|
||||||
bind:value
|
|
||||||
{min}
|
|
||||||
{max}
|
|
||||||
{step}
|
|
||||||
style={`background: linear-gradient(90deg, var(--text-color) ${ratio}%, var(--layer-2, #4b4b4b) ${ratio}%)`}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<style>
|
|
||||||
.component-wrapper {
|
|
||||||
display: flex;
|
|
||||||
background-color: var(--layer-2, #4b4b4b);
|
|
||||||
user-select: none;
|
|
||||||
transition: box-shadow 0.3s ease;
|
|
||||||
border: solid 1px var(--outline);
|
|
||||||
overflow: hidden;
|
|
||||||
border-radius: 0 var(--border-radius, 2px); /* only top */
|
|
||||||
}
|
|
||||||
|
|
||||||
input[type='number']::-webkit-inner-spin-button,
|
|
||||||
input[type='number']::-webkit-outer-spin-button {
|
|
||||||
-webkit-appearance: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
input[type='number'] {
|
|
||||||
-webkit-appearance: textfield;
|
|
||||||
-moz-appearance: textfield;
|
|
||||||
appearance: textfield;
|
|
||||||
cursor: pointer;
|
|
||||||
font-family: var(--font-family);
|
|
||||||
font-variant-numeric: tabular-nums;
|
|
||||||
color: var(--text-color);
|
|
||||||
background-color: transparent;
|
|
||||||
padding: var(--padding, 6px);
|
|
||||||
font-size: 1em;
|
|
||||||
padding-inline: 10px;
|
|
||||||
text-align: center;
|
|
||||||
border: none;
|
|
||||||
border-style: none;
|
|
||||||
flex: 1;
|
|
||||||
width: 72%;
|
|
||||||
}
|
|
||||||
|
|
||||||
button {
|
|
||||||
background-color: transparent;
|
|
||||||
border: none;
|
|
||||||
cursor: pointer;
|
|
||||||
line-height: 0px;
|
|
||||||
margin: 0;
|
|
||||||
color: var(--text-color);
|
|
||||||
margin-inline: 6px;
|
|
||||||
}
|
|
||||||
|
|
||||||
div input[type='number'] {
|
|
||||||
color: var(--text-color);
|
|
||||||
background-color: transparent;
|
|
||||||
padding: var(--padding, 6px);
|
|
||||||
padding-inline: 0px;
|
|
||||||
text-align: center;
|
|
||||||
border: none;
|
|
||||||
border-style: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.slider {
|
|
||||||
position: relative;
|
|
||||||
margin-top: -1px; /* hide edge */
|
|
||||||
}
|
|
||||||
|
|
||||||
input[type='range'] {
|
|
||||||
position: absolute;
|
|
||||||
appearance: none;
|
|
||||||
width: 100%;
|
|
||||||
height: 3px;
|
|
||||||
background: var(--layer-2, #4b4b4b);
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Thumb: for Chrome, Safari, Edge */
|
|
||||||
input[type='range']::-webkit-slider-thumb {
|
|
||||||
-webkit-appearance: none;
|
|
||||||
appearance: none;
|
|
||||||
width: 0px;
|
|
||||||
height: 0px;
|
|
||||||
box-shadow: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Thumb: for Firefox */
|
|
||||||
input[type='range']::-moz-range-thumb {
|
|
||||||
border: none;
|
|
||||||
width: 0px;
|
|
||||||
height: 0px;
|
|
||||||
box-shadow: none;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
@@ -6,14 +6,11 @@ description = "A collection of utilities for Nodarium"
|
|||||||
license = "MIT"
|
license = "MIT"
|
||||||
repository = "https://github.com/jim-fx/nodes"
|
repository = "https://github.com/jim-fx/nodes"
|
||||||
|
|
||||||
[features]
|
[lib]
|
||||||
default = ["console_error_panic_hook"]
|
crate-type = ["rlib"]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
wasm-bindgen = "0.2.92"
|
|
||||||
web-sys = { version = "0.3.69", features = ["console"] }
|
|
||||||
serde = { version = "1.0", features = ["derive"] }
|
serde = { version = "1.0", features = ["derive"] }
|
||||||
serde_json = { version = "1.0", default-features = false, features = ["alloc"] }
|
serde_json = { version = "1.0", default-features = false, features = ["alloc"] }
|
||||||
console_error_panic_hook = { version = "0.1.7", optional = true }
|
glam = "0.30.10"
|
||||||
glam = "0.27.0"
|
|
||||||
noise = "0.9.0"
|
noise = "0.9.0"
|
||||||
|
|||||||
@@ -109,10 +109,12 @@ export function decodeNestedArray(dense: number[] | Int32Array) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function splitNestedArray(input: Int32Array) {
|
export function splitNestedArray(input: Int32Array) {
|
||||||
|
|
||||||
let index = 0;
|
let index = 0;
|
||||||
const length = input.length;
|
const length = input.length;
|
||||||
let res: Int32Array[] = [];
|
let res: Int32Array[] = [];
|
||||||
|
|
||||||
|
|
||||||
let nextBracketIndex = 0;
|
let nextBracketIndex = 0;
|
||||||
let argStartIndex = 0;
|
let argStartIndex = 0;
|
||||||
let depth = -1;
|
let depth = -1;
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ pub fn create_geometry_data(vertex_amount: usize, face_amount: usize) -> Vec<i32
|
|||||||
geo
|
geo
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn wrap_geometry_data(geometry: &mut [i32]) -> GeometryData {
|
pub fn wrap_geometry_data(geometry: &mut [i32]) -> GeometryData<'_> {
|
||||||
// Basic validity checks
|
// Basic validity checks
|
||||||
assert!(
|
assert!(
|
||||||
geometry.len() > GEOMETRY_HEADER_SIZE,
|
geometry.len() > GEOMETRY_HEADER_SIZE,
|
||||||
|
|||||||
@@ -73,7 +73,7 @@ pub fn create_instance_data(
|
|||||||
geo
|
geo
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn wrap_instance_data(instances: &mut [i32]) -> InstanceData {
|
pub fn wrap_instance_data(instances: &mut [i32]) -> InstanceData<'_> {
|
||||||
assert!(
|
assert!(
|
||||||
instances.len() > INSTANCE_HEADER_SIZE,
|
instances.len() > INSTANCE_HEADER_SIZE,
|
||||||
"Instance vector does not contain enough data for a header."
|
"Instance vector does not contain enough data for a header."
|
||||||
|
|||||||
@@ -130,7 +130,7 @@ pub fn create_path(point_amount: usize, depth: i32) -> Vec<i32> {
|
|||||||
path
|
path
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn wrap_path(input: &[i32]) -> PathData {
|
pub fn wrap_path(input: &[i32]) -> PathData<'_> {
|
||||||
// Basic validity checks
|
// Basic validity checks
|
||||||
assert!(
|
assert!(
|
||||||
input.len() > PATH_HEADER_SIZE,
|
input.len() > PATH_HEADER_SIZE,
|
||||||
|
|||||||
@@ -6,12 +6,22 @@ pub use nodes::reset_call_count;
|
|||||||
pub use tree::*;
|
pub use tree::*;
|
||||||
pub mod geometry;
|
pub mod geometry;
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
#[cfg(target_arch = "wasm32")]
|
||||||
|
pub fn host_log(ptr: *const u8, len: usize);
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(debug_assertions)]
|
#[cfg(debug_assertions)]
|
||||||
#[macro_export]
|
#[macro_export]
|
||||||
macro_rules! log {
|
macro_rules! log {
|
||||||
($($arg:tt)*) => {{
|
($($t:tt)*) => {{
|
||||||
use web_sys::console;
|
let msg = std::format!($($t)*);
|
||||||
console::log_1(&format!($($arg)*).into());
|
#[cfg(target_arch = "wasm32")]
|
||||||
|
unsafe {
|
||||||
|
$crate::host_log(msg.as_ptr(), msg.len());
|
||||||
|
}
|
||||||
|
#[cfg(not(target_arch = "wasm32"))]
|
||||||
|
println!("{}", msg);
|
||||||
}}
|
}}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -23,13 +33,3 @@ macro_rules! log {
|
|||||||
}};
|
}};
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn set_panic_hook() {
|
|
||||||
// When the `console_error_panic_hook` feature is enabled, we can call the
|
|
||||||
// `set_panic_hook` function at least once during initialization, and then
|
|
||||||
// we will get better error messages if our code ever panics.
|
|
||||||
//
|
|
||||||
// For more details see
|
|
||||||
// https://github.com/rustwasm/console_error_panic_hook#readme
|
|
||||||
#[cfg(feature = "console_error_panic_hook")]
|
|
||||||
console_error_panic_hook::set_once();
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,256 +1,55 @@
|
|||||||
//@ts-nocheck
|
interface NodariumExports extends WebAssembly.Exports {
|
||||||
import { NodeDefinition } from "@nodarium/types";
|
memory: WebAssembly.Memory;
|
||||||
|
execute: (ptr: number, len: number) => number;
|
||||||
|
__free: (ptr: number, len: number) => void;
|
||||||
|
__alloc: (len: number) => number;
|
||||||
|
}
|
||||||
|
|
||||||
const cachedTextDecoder = new TextDecoder("utf-8", {
|
export function createWasmWrapper(buffer: ArrayBuffer) {
|
||||||
ignoreBOM: true,
|
let exports: NodariumExports;
|
||||||
fatal: true,
|
|
||||||
});
|
|
||||||
const cachedTextEncoder = new TextEncoder();
|
|
||||||
|
|
||||||
const encodeString =
|
const importObject = {
|
||||||
typeof cachedTextEncoder.encodeInto === "function"
|
env: {
|
||||||
? function (arg, view) {
|
host_log_panic: (ptr: number, len: number) => {
|
||||||
return cachedTextEncoder.encodeInto(arg, view);
|
if (!exports) return;
|
||||||
|
const view = new Uint8Array(exports.memory.buffer, ptr, len);
|
||||||
|
console.error("RUST PANIC:", new TextDecoder().decode(view));
|
||||||
|
},
|
||||||
|
host_log: (ptr: number, len: number) => {
|
||||||
|
if (!exports) return;
|
||||||
|
const view = new Uint8Array(exports.memory.buffer, ptr, len);
|
||||||
|
console.log("RUST:", new TextDecoder().decode(view));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
: function (arg, view) {
|
|
||||||
const buf = cachedTextEncoder.encode(arg);
|
|
||||||
view.set(buf);
|
|
||||||
return {
|
|
||||||
read: arg.length,
|
|
||||||
written: buf.length,
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
function createWrapper() {
|
const module = new WebAssembly.Module(buffer);
|
||||||
let wasm: any;
|
const instance = new WebAssembly.Instance(module, importObject);
|
||||||
|
exports = instance.exports as NodariumExports;
|
||||||
let cachedUint8Memory0: Uint8Array | null = null;
|
|
||||||
let cachedInt32Memory0: Int32Array | null = null;
|
|
||||||
let cachedUint32Memory0: Uint32Array | null = null;
|
|
||||||
|
|
||||||
const heap = new Array(128).fill(undefined);
|
|
||||||
heap.push(undefined, null, true, false);
|
|
||||||
let heap_next = heap.length;
|
|
||||||
|
|
||||||
function getUint8Memory0() {
|
|
||||||
if (cachedUint8Memory0 === null || cachedUint8Memory0.byteLength === 0) {
|
|
||||||
cachedUint8Memory0 = new Uint8Array(wasm.memory.buffer);
|
|
||||||
}
|
|
||||||
return cachedUint8Memory0;
|
|
||||||
}
|
|
||||||
|
|
||||||
function getInt32Memory0() {
|
|
||||||
if (cachedInt32Memory0 === null || cachedInt32Memory0.byteLength === 0) {
|
|
||||||
cachedInt32Memory0 = new Int32Array(wasm.memory.buffer);
|
|
||||||
}
|
|
||||||
return cachedInt32Memory0;
|
|
||||||
}
|
|
||||||
|
|
||||||
function getUint32Memory0() {
|
|
||||||
if (cachedUint32Memory0 === null || cachedUint32Memory0.byteLength === 0) {
|
|
||||||
cachedUint32Memory0 = new Uint32Array(wasm.memory.buffer);
|
|
||||||
}
|
|
||||||
return cachedUint32Memory0;
|
|
||||||
}
|
|
||||||
|
|
||||||
function getStringFromWasm0(ptr: number, len: number) {
|
|
||||||
return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len));
|
|
||||||
}
|
|
||||||
|
|
||||||
function getObject(idx: number) {
|
|
||||||
return heap[idx];
|
|
||||||
}
|
|
||||||
|
|
||||||
function addHeapObject(obj: any) {
|
|
||||||
if (heap_next === heap.length) heap.push(heap.length + 1);
|
|
||||||
const idx = heap_next;
|
|
||||||
heap_next = heap[idx];
|
|
||||||
heap[idx] = obj;
|
|
||||||
return idx;
|
|
||||||
}
|
|
||||||
|
|
||||||
let WASM_VECTOR_LEN = 0;
|
|
||||||
function passArray32ToWasm0(
|
|
||||||
arg: ArrayLike<number>,
|
|
||||||
malloc: (arg0: number, arg1: number) => number,
|
|
||||||
) {
|
|
||||||
const ptr = malloc(arg.length * 4, 4) >>> 0;
|
|
||||||
getUint32Memory0().set(arg, ptr / 4);
|
|
||||||
WASM_VECTOR_LEN = arg.length;
|
|
||||||
return ptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
function getArrayI32FromWasm0(ptr: number, len: number) {
|
|
||||||
ptr = ptr >>> 0;
|
|
||||||
return getInt32Memory0().subarray(ptr / 4, ptr / 4 + len);
|
|
||||||
}
|
|
||||||
|
|
||||||
function dropObject(idx: number) {
|
|
||||||
if (idx < 132) return;
|
|
||||||
heap[idx] = heap_next;
|
|
||||||
heap_next = idx;
|
|
||||||
}
|
|
||||||
|
|
||||||
function takeObject(idx: number) {
|
|
||||||
const ret = getObject(idx);
|
|
||||||
dropObject(idx);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
function __wbindgen_string_new(arg0: number, arg1: number) {
|
|
||||||
const ret = getStringFromWasm0(arg0, arg1);
|
|
||||||
return addHeapObject(ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Additional methods and their internal helpers can also be refactored in a similar manner.
|
|
||||||
function get_definition() {
|
|
||||||
let deferred1_0: number;
|
|
||||||
let deferred1_1: number;
|
|
||||||
try {
|
|
||||||
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
|
|
||||||
wasm.get_definition(retptr);
|
|
||||||
var r0 = getInt32Memory0()[retptr / 4 + 0];
|
|
||||||
var r1 = getInt32Memory0()[retptr / 4 + 1];
|
|
||||||
deferred1_0 = r0;
|
|
||||||
deferred1_1 = r1;
|
|
||||||
const rawDefinition = getStringFromWasm0(r0, r1);
|
|
||||||
return JSON.parse(rawDefinition) as NodeDefinition;
|
|
||||||
} finally {
|
|
||||||
wasm.__wbindgen_add_to_stack_pointer(16);
|
|
||||||
wasm.__wbindgen_free(deferred1_0, deferred1_1, 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function execute(args: Int32Array) {
|
function execute(args: Int32Array) {
|
||||||
try {
|
const inPtr = exports.__alloc(args.length);
|
||||||
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
|
new Int32Array(exports.memory.buffer).set(args, inPtr / 4);
|
||||||
const ptr0 = passArray32ToWasm0(args, wasm.__wbindgen_malloc);
|
|
||||||
const len0 = WASM_VECTOR_LEN;
|
const outPtr = exports.execute(inPtr, args.length);
|
||||||
wasm.execute(retptr, ptr0, len0);
|
|
||||||
var r0 = getInt32Memory0()[retptr / 4 + 0];
|
const i32Result = new Int32Array(exports.memory.buffer);
|
||||||
var r1 = getInt32Memory0()[retptr / 4 + 1];
|
const outLen = i32Result[outPtr / 4];
|
||||||
var v2 = getArrayI32FromWasm0(r0, r1).slice();
|
const out = i32Result.slice(outPtr / 4 + 1, outPtr / 4 + 1 + outLen);
|
||||||
wasm.__wbindgen_free(r0, r1 * 4, 4);
|
|
||||||
return v2;
|
exports.__free(inPtr, args.length);
|
||||||
} finally {
|
|
||||||
wasm.__wbindgen_add_to_stack_pointer(16);
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
|
function get_definition() {
|
||||||
|
const sections = WebAssembly.Module.customSections(module, "nodarium_definition");
|
||||||
|
if (sections.length > 0) {
|
||||||
|
const decoder = new TextDecoder();
|
||||||
|
const jsonString = decoder.decode(sections[0]);
|
||||||
|
return JSON.parse(jsonString);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function passStringToWasm0(
|
return { execute, get_definition };
|
||||||
arg: string,
|
|
||||||
malloc: (arg0: any, arg1: number) => number,
|
|
||||||
realloc:
|
|
||||||
| ((arg0: number, arg1: any, arg2: number, arg3: number) => number)
|
|
||||||
| undefined,
|
|
||||||
) {
|
|
||||||
if (realloc === undefined) {
|
|
||||||
const buf = cachedTextEncoder.encode(arg);
|
|
||||||
const ptr = malloc(buf.length, 1) >>> 0;
|
|
||||||
getUint8Memory0()
|
|
||||||
.subarray(ptr, ptr + buf.length)
|
|
||||||
.set(buf);
|
|
||||||
WASM_VECTOR_LEN = buf.length;
|
|
||||||
return ptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
let len = arg.length;
|
|
||||||
let ptr = malloc(len, 1) >>> 0;
|
|
||||||
|
|
||||||
const mem = getUint8Memory0();
|
|
||||||
|
|
||||||
let offset = 0;
|
|
||||||
|
|
||||||
for (; offset < len; offset++) {
|
|
||||||
const code = arg.charCodeAt(offset);
|
|
||||||
if (code > 0x7f) break;
|
|
||||||
mem[ptr + offset] = code;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (offset !== len) {
|
|
||||||
if (offset !== 0) {
|
|
||||||
arg = arg.slice(offset);
|
|
||||||
}
|
|
||||||
ptr = realloc(ptr, len, (len = offset + arg.length * 3), 1) >>> 0;
|
|
||||||
const view = getUint8Memory0().subarray(ptr + offset, ptr + len);
|
|
||||||
const ret = encodeString(arg, view);
|
|
||||||
|
|
||||||
offset += ret.written;
|
|
||||||
ptr = realloc(ptr, len, offset, 1) >>> 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
WASM_VECTOR_LEN = offset;
|
|
||||||
return ptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
function __wbg_new_abda76e883ba8a5f() {
|
|
||||||
const ret = new Error();
|
|
||||||
return addHeapObject(ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
function __wbg_stack_658279fe44541cf6(arg0, arg1) {
|
|
||||||
const ret = getObject(arg1).stack;
|
|
||||||
const ptr1 = passStringToWasm0(
|
|
||||||
ret,
|
|
||||||
wasm.__wbindgen_malloc,
|
|
||||||
wasm.__wbindgen_realloc,
|
|
||||||
);
|
|
||||||
const len1 = WASM_VECTOR_LEN;
|
|
||||||
getInt32Memory0()[arg0 / 4 + 1] = len1;
|
|
||||||
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
|
|
||||||
}
|
|
||||||
|
|
||||||
function __wbg_error_f851667af71bcfc6(arg0, arg1) {
|
|
||||||
let deferred0_0;
|
|
||||||
let deferred0_1;
|
|
||||||
try {
|
|
||||||
deferred0_0 = arg0;
|
|
||||||
deferred0_1 = arg1;
|
|
||||||
console.error(getStringFromWasm0(arg0, arg1));
|
|
||||||
} finally {
|
|
||||||
wasm.__wbindgen_free(deferred0_0, deferred0_1, 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function __wbindgen_object_drop_ref(arg0) {
|
|
||||||
takeObject(arg0);
|
|
||||||
}
|
|
||||||
|
|
||||||
function __wbg_log_5bb5f88f245d7762(arg0) {
|
|
||||||
console.log(getObject(arg0));
|
|
||||||
}
|
|
||||||
|
|
||||||
function __wbindgen_throw(arg0, arg1) {
|
|
||||||
throw new Error(getStringFromWasm0(arg0, arg1));
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
|
||||||
setInstance(instance: WebAssembly.Instance) {
|
|
||||||
wasm = instance.exports;
|
|
||||||
},
|
|
||||||
|
|
||||||
exports: {
|
|
||||||
// Expose other methods that interact with the wasm instance
|
|
||||||
execute,
|
|
||||||
get_definition,
|
|
||||||
},
|
|
||||||
|
|
||||||
__wbindgen_string_new,
|
|
||||||
__wbindgen_object_drop_ref,
|
|
||||||
__wbg_new_abda76e883ba8a5f,
|
|
||||||
__wbg_error_f851667af71bcfc6,
|
|
||||||
__wbg_stack_658279fe44541cf6,
|
|
||||||
__wbg_log_5bb5f88f245d7762,
|
|
||||||
__wbindgen_throw,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
export function createWasmWrapper(wasmBuffer: ArrayBuffer | Uint8Array) {
|
|
||||||
const wrapper = createWrapper();
|
|
||||||
const module = new WebAssembly.Module(wasmBuffer);
|
|
||||||
const instance = new WebAssembly.Instance(module, {
|
|
||||||
["./index_bg.js"]: wrapper,
|
|
||||||
});
|
|
||||||
wrapper.setInstance(instance);
|
|
||||||
return wrapper.exports;
|
|
||||||
}
|
}
|
||||||
|
|||||||
318
pnpm-lock.yaml
generated
318
pnpm-lock.yaml
generated
@@ -49,6 +49,9 @@ importers:
|
|||||||
three:
|
three:
|
||||||
specifier: ^0.182.0
|
specifier: ^0.182.0
|
||||||
version: 0.182.0
|
version: 0.182.0
|
||||||
|
wabt:
|
||||||
|
specifier: ^1.0.39
|
||||||
|
version: 1.0.39
|
||||||
devDependencies:
|
devDependencies:
|
||||||
'@iconify-json/tabler':
|
'@iconify-json/tabler':
|
||||||
specifier: ^1.2.26
|
specifier: ^1.2.26
|
||||||
@@ -194,9 +197,6 @@ importers:
|
|||||||
'@typescript-eslint/parser':
|
'@typescript-eslint/parser':
|
||||||
specifier: ^8.53.0
|
specifier: ^8.53.0
|
||||||
version: 8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
|
version: 8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
|
||||||
chokidar-cli:
|
|
||||||
specifier: ^3.0.0
|
|
||||||
version: 3.0.0
|
|
||||||
eslint:
|
eslint:
|
||||||
specifier: ^9.39.2
|
specifier: ^9.39.2
|
||||||
version: 9.39.2(jiti@2.6.1)
|
version: 9.39.2(jiti@2.6.1)
|
||||||
@@ -1248,22 +1248,10 @@ packages:
|
|||||||
resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==}
|
resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==}
|
||||||
engines: {node: '>=6'}
|
engines: {node: '>=6'}
|
||||||
|
|
||||||
ansi-regex@4.1.1:
|
|
||||||
resolution: {integrity: sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==}
|
|
||||||
engines: {node: '>=6'}
|
|
||||||
|
|
||||||
ansi-styles@3.2.1:
|
|
||||||
resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
|
|
||||||
engines: {node: '>=4'}
|
|
||||||
|
|
||||||
ansi-styles@4.3.0:
|
ansi-styles@4.3.0:
|
||||||
resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
|
resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
|
||||||
engines: {node: '>=8'}
|
engines: {node: '>=8'}
|
||||||
|
|
||||||
anymatch@3.1.3:
|
|
||||||
resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
|
|
||||||
engines: {node: '>= 8'}
|
|
||||||
|
|
||||||
arg@4.1.3:
|
arg@4.1.3:
|
||||||
resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==}
|
resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==}
|
||||||
|
|
||||||
@@ -1291,10 +1279,6 @@ packages:
|
|||||||
bidi-js@1.0.3:
|
bidi-js@1.0.3:
|
||||||
resolution: {integrity: sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==}
|
resolution: {integrity: sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==}
|
||||||
|
|
||||||
binary-extensions@2.3.0:
|
|
||||||
resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
|
|
||||||
engines: {node: '>=8'}
|
|
||||||
|
|
||||||
boolbase@1.0.0:
|
boolbase@1.0.0:
|
||||||
resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
|
resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
|
||||||
|
|
||||||
@@ -1304,10 +1288,6 @@ packages:
|
|||||||
brace-expansion@2.0.2:
|
brace-expansion@2.0.2:
|
||||||
resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==}
|
resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==}
|
||||||
|
|
||||||
braces@3.0.3:
|
|
||||||
resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
|
|
||||||
engines: {node: '>=8'}
|
|
||||||
|
|
||||||
buffer-from@1.1.2:
|
buffer-from@1.1.2:
|
||||||
resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
|
resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
|
||||||
|
|
||||||
@@ -1331,10 +1311,6 @@ packages:
|
|||||||
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
|
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
|
||||||
engines: {node: '>=6'}
|
engines: {node: '>=6'}
|
||||||
|
|
||||||
camelcase@5.3.1:
|
|
||||||
resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==}
|
|
||||||
engines: {node: '>=6'}
|
|
||||||
|
|
||||||
camera-controls@3.1.2:
|
camera-controls@3.1.2:
|
||||||
resolution: {integrity: sha512-xkxfpG2ECZ6Ww5/9+kf4mfg1VEYAoe9aDSY+IwF0UEs7qEzwy0aVRfs2grImIECs/PoBtWFrh7RXsQkwG922JA==}
|
resolution: {integrity: sha512-xkxfpG2ECZ6Ww5/9+kf4mfg1VEYAoe9aDSY+IwF0UEs7qEzwy0aVRfs2grImIECs/PoBtWFrh7RXsQkwG922JA==}
|
||||||
engines: {node: '>=22.0.0', npm: '>=10.5.1'}
|
engines: {node: '>=22.0.0', npm: '>=10.5.1'}
|
||||||
@@ -1349,15 +1325,6 @@ packages:
|
|||||||
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
|
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
|
||||||
engines: {node: '>=10'}
|
engines: {node: '>=10'}
|
||||||
|
|
||||||
chokidar-cli@3.0.0:
|
|
||||||
resolution: {integrity: sha512-xVW+Qeh7z15uZRxHOkP93Ux8A0xbPzwK4GaqD8dQOYc34TlkqUhVSS59fK36DOp5WdJlrRzlYSy02Ht99FjZqQ==}
|
|
||||||
engines: {node: '>= 8.10.0'}
|
|
||||||
hasBin: true
|
|
||||||
|
|
||||||
chokidar@3.6.0:
|
|
||||||
resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
|
|
||||||
engines: {node: '>= 8.10.0'}
|
|
||||||
|
|
||||||
chokidar@4.0.3:
|
chokidar@4.0.3:
|
||||||
resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==}
|
resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==}
|
||||||
engines: {node: '>= 14.16.0'}
|
engines: {node: '>= 14.16.0'}
|
||||||
@@ -1369,23 +1336,14 @@ packages:
|
|||||||
citty@0.1.6:
|
citty@0.1.6:
|
||||||
resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==}
|
resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==}
|
||||||
|
|
||||||
cliui@5.0.0:
|
|
||||||
resolution: {integrity: sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==}
|
|
||||||
|
|
||||||
clsx@2.1.1:
|
clsx@2.1.1:
|
||||||
resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==}
|
resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==}
|
||||||
engines: {node: '>=6'}
|
engines: {node: '>=6'}
|
||||||
|
|
||||||
color-convert@1.9.3:
|
|
||||||
resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
|
|
||||||
|
|
||||||
color-convert@2.0.1:
|
color-convert@2.0.1:
|
||||||
resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
|
resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
|
||||||
engines: {node: '>=7.0.0'}
|
engines: {node: '>=7.0.0'}
|
||||||
|
|
||||||
color-name@1.1.3:
|
|
||||||
resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==}
|
|
||||||
|
|
||||||
color-name@1.1.4:
|
color-name@1.1.4:
|
||||||
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
|
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
|
||||||
|
|
||||||
@@ -1479,10 +1437,6 @@ packages:
|
|||||||
supports-color:
|
supports-color:
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
decamelize@1.2.0:
|
|
||||||
resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==}
|
|
||||||
engines: {node: '>=0.10.0'}
|
|
||||||
|
|
||||||
decimal.js@10.6.0:
|
decimal.js@10.6.0:
|
||||||
resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==}
|
resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==}
|
||||||
|
|
||||||
@@ -1556,9 +1510,6 @@ packages:
|
|||||||
earcut@2.2.4:
|
earcut@2.2.4:
|
||||||
resolution: {integrity: sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==}
|
resolution: {integrity: sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==}
|
||||||
|
|
||||||
emoji-regex@7.0.3:
|
|
||||||
resolution: {integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==}
|
|
||||||
|
|
||||||
enhanced-resolve@5.18.4:
|
enhanced-resolve@5.18.4:
|
||||||
resolution: {integrity: sha512-LgQMM4WXU3QI+SYgEc2liRgznaD5ojbmY3sb8LxyguVkIg5FxdpTkvk72te2R38/TGKxH634oLxXRGY6d7AP+Q==}
|
resolution: {integrity: sha512-LgQMM4WXU3QI+SYgEc2liRgznaD5ojbmY3sb8LxyguVkIg5FxdpTkvk72te2R38/TGKxH634oLxXRGY6d7AP+Q==}
|
||||||
engines: {node: '>=10.13.0'}
|
engines: {node: '>=10.13.0'}
|
||||||
@@ -1707,14 +1658,6 @@ packages:
|
|||||||
file-saver@2.0.5:
|
file-saver@2.0.5:
|
||||||
resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==}
|
resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==}
|
||||||
|
|
||||||
fill-range@7.1.1:
|
|
||||||
resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
|
|
||||||
engines: {node: '>=8'}
|
|
||||||
|
|
||||||
find-up@3.0.0:
|
|
||||||
resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==}
|
|
||||||
engines: {node: '>=6'}
|
|
||||||
|
|
||||||
find-up@5.0.0:
|
find-up@5.0.0:
|
||||||
resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
|
resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
|
||||||
engines: {node: '>=10'}
|
engines: {node: '>=10'}
|
||||||
@@ -1738,10 +1681,6 @@ packages:
|
|||||||
function-bind@1.1.2:
|
function-bind@1.1.2:
|
||||||
resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
|
resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
|
||||||
|
|
||||||
get-caller-file@2.0.5:
|
|
||||||
resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
|
|
||||||
engines: {node: 6.* || 8.* || >= 10.*}
|
|
||||||
|
|
||||||
get-intrinsic@1.3.0:
|
get-intrinsic@1.3.0:
|
||||||
resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==}
|
resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==}
|
||||||
engines: {node: '>= 0.4'}
|
engines: {node: '>= 0.4'}
|
||||||
@@ -1757,10 +1696,6 @@ packages:
|
|||||||
resolution: {integrity: sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==}
|
resolution: {integrity: sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
|
|
||||||
glob-parent@5.1.2:
|
|
||||||
resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
|
|
||||||
engines: {node: '>= 6'}
|
|
||||||
|
|
||||||
glob-parent@6.0.2:
|
glob-parent@6.0.2:
|
||||||
resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
|
resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
|
||||||
engines: {node: '>=10.13.0'}
|
engines: {node: '>=10.13.0'}
|
||||||
@@ -1839,10 +1774,6 @@ packages:
|
|||||||
resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
|
resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
|
||||||
engines: {node: '>=0.8.19'}
|
engines: {node: '>=0.8.19'}
|
||||||
|
|
||||||
is-binary-path@2.1.0:
|
|
||||||
resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
|
|
||||||
engines: {node: '>=8'}
|
|
||||||
|
|
||||||
is-docker@3.0.0:
|
is-docker@3.0.0:
|
||||||
resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==}
|
resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==}
|
||||||
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
|
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
|
||||||
@@ -1852,10 +1783,6 @@ packages:
|
|||||||
resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
|
resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
|
||||||
engines: {node: '>=0.10.0'}
|
engines: {node: '>=0.10.0'}
|
||||||
|
|
||||||
is-fullwidth-code-point@2.0.0:
|
|
||||||
resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==}
|
|
||||||
engines: {node: '>=4'}
|
|
||||||
|
|
||||||
is-glob@4.0.3:
|
is-glob@4.0.3:
|
||||||
resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
|
resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
|
||||||
engines: {node: '>=0.10.0'}
|
engines: {node: '>=0.10.0'}
|
||||||
@@ -1869,10 +1796,6 @@ packages:
|
|||||||
engines: {node: '>=14.16'}
|
engines: {node: '>=14.16'}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
|
|
||||||
is-number@7.0.0:
|
|
||||||
resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
|
|
||||||
engines: {node: '>=0.12.0'}
|
|
||||||
|
|
||||||
is-potential-custom-element-name@1.0.1:
|
is-potential-custom-element-name@1.0.1:
|
||||||
resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==}
|
resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==}
|
||||||
|
|
||||||
@@ -2021,23 +1944,13 @@ packages:
|
|||||||
locate-character@3.0.0:
|
locate-character@3.0.0:
|
||||||
resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==}
|
resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==}
|
||||||
|
|
||||||
locate-path@3.0.0:
|
|
||||||
resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==}
|
|
||||||
engines: {node: '>=6'}
|
|
||||||
|
|
||||||
locate-path@6.0.0:
|
locate-path@6.0.0:
|
||||||
resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
|
resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
|
||||||
engines: {node: '>=10'}
|
engines: {node: '>=10'}
|
||||||
|
|
||||||
lodash.debounce@4.0.8:
|
|
||||||
resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==}
|
|
||||||
|
|
||||||
lodash.merge@4.6.2:
|
lodash.merge@4.6.2:
|
||||||
resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
|
resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
|
||||||
|
|
||||||
lodash.throttle@4.1.1:
|
|
||||||
resolution: {integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==}
|
|
||||||
|
|
||||||
lodash@4.17.21:
|
lodash@4.17.21:
|
||||||
resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
|
resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
|
||||||
|
|
||||||
@@ -2136,10 +2049,6 @@ packages:
|
|||||||
node-fetch-native@1.6.7:
|
node-fetch-native@1.6.7:
|
||||||
resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==}
|
resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==}
|
||||||
|
|
||||||
normalize-path@3.0.0:
|
|
||||||
resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
|
|
||||||
engines: {node: '>=0.10.0'}
|
|
||||||
|
|
||||||
nth-check@2.1.1:
|
nth-check@2.1.1:
|
||||||
resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
|
resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
|
||||||
|
|
||||||
@@ -2165,26 +2074,14 @@ packages:
|
|||||||
resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
|
resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
|
||||||
engines: {node: '>= 0.8.0'}
|
engines: {node: '>= 0.8.0'}
|
||||||
|
|
||||||
p-limit@2.3.0:
|
|
||||||
resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==}
|
|
||||||
engines: {node: '>=6'}
|
|
||||||
|
|
||||||
p-limit@3.1.0:
|
p-limit@3.1.0:
|
||||||
resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
|
resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
|
||||||
engines: {node: '>=10'}
|
engines: {node: '>=10'}
|
||||||
|
|
||||||
p-locate@3.0.0:
|
|
||||||
resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==}
|
|
||||||
engines: {node: '>=6'}
|
|
||||||
|
|
||||||
p-locate@5.0.0:
|
p-locate@5.0.0:
|
||||||
resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
|
resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
|
||||||
engines: {node: '>=10'}
|
engines: {node: '>=10'}
|
||||||
|
|
||||||
p-try@2.2.0:
|
|
||||||
resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
|
|
||||||
engines: {node: '>=6'}
|
|
||||||
|
|
||||||
package-manager-detector@1.6.0:
|
package-manager-detector@1.6.0:
|
||||||
resolution: {integrity: sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==}
|
resolution: {integrity: sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==}
|
||||||
|
|
||||||
@@ -2199,10 +2096,6 @@ packages:
|
|||||||
parse5@7.3.0:
|
parse5@7.3.0:
|
||||||
resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==}
|
resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==}
|
||||||
|
|
||||||
path-exists@3.0.0:
|
|
||||||
resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==}
|
|
||||||
engines: {node: '>=4'}
|
|
||||||
|
|
||||||
path-exists@4.0.0:
|
path-exists@4.0.0:
|
||||||
resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
|
resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
|
||||||
engines: {node: '>=8'}
|
engines: {node: '>=8'}
|
||||||
@@ -2220,10 +2113,6 @@ packages:
|
|||||||
picocolors@1.1.1:
|
picocolors@1.1.1:
|
||||||
resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
|
resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
|
||||||
|
|
||||||
picomatch@2.3.1:
|
|
||||||
resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
|
|
||||||
engines: {node: '>=8.6'}
|
|
||||||
|
|
||||||
picomatch@4.0.3:
|
picomatch@4.0.3:
|
||||||
resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==}
|
resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
@@ -2293,10 +2182,6 @@ packages:
|
|||||||
rc9@2.1.2:
|
rc9@2.1.2:
|
||||||
resolution: {integrity: sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==}
|
resolution: {integrity: sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==}
|
||||||
|
|
||||||
readdirp@3.6.0:
|
|
||||||
resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
|
|
||||||
engines: {node: '>=8.10.0'}
|
|
||||||
|
|
||||||
readdirp@4.1.2:
|
readdirp@4.1.2:
|
||||||
resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==}
|
resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==}
|
||||||
engines: {node: '>= 14.18.0'}
|
engines: {node: '>= 14.18.0'}
|
||||||
@@ -2305,17 +2190,10 @@ packages:
|
|||||||
resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==}
|
resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==}
|
||||||
engines: {node: '>= 20.19.0'}
|
engines: {node: '>= 20.19.0'}
|
||||||
|
|
||||||
require-directory@2.1.1:
|
|
||||||
resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
|
|
||||||
engines: {node: '>=0.10.0'}
|
|
||||||
|
|
||||||
require-from-string@2.0.2:
|
require-from-string@2.0.2:
|
||||||
resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
|
resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
|
||||||
engines: {node: '>=0.10.0'}
|
engines: {node: '>=0.10.0'}
|
||||||
|
|
||||||
require-main-filename@2.0.0:
|
|
||||||
resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==}
|
|
||||||
|
|
||||||
resolve-from@4.0.0:
|
resolve-from@4.0.0:
|
||||||
resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
|
resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
|
||||||
engines: {node: '>=4'}
|
engines: {node: '>=4'}
|
||||||
@@ -2370,9 +2248,6 @@ packages:
|
|||||||
engines: {node: '>=10'}
|
engines: {node: '>=10'}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
|
|
||||||
set-blocking@2.0.0:
|
|
||||||
resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==}
|
|
||||||
|
|
||||||
set-cookie-parser@2.7.2:
|
set-cookie-parser@2.7.2:
|
||||||
resolution: {integrity: sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==}
|
resolution: {integrity: sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==}
|
||||||
|
|
||||||
@@ -2412,14 +2287,6 @@ packages:
|
|||||||
std-env@3.10.0:
|
std-env@3.10.0:
|
||||||
resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==}
|
resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==}
|
||||||
|
|
||||||
string-width@3.1.0:
|
|
||||||
resolution: {integrity: sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==}
|
|
||||||
engines: {node: '>=6'}
|
|
||||||
|
|
||||||
strip-ansi@5.2.0:
|
|
||||||
resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==}
|
|
||||||
engines: {node: '>=6'}
|
|
||||||
|
|
||||||
strip-json-comments@3.1.1:
|
strip-json-comments@3.1.1:
|
||||||
resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
|
resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
|
||||||
engines: {node: '>=8'}
|
engines: {node: '>=8'}
|
||||||
@@ -2520,10 +2387,6 @@ packages:
|
|||||||
resolution: {integrity: sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==}
|
resolution: {integrity: sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
|
|
||||||
to-regex-range@5.0.1:
|
|
||||||
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
|
|
||||||
engines: {node: '>=8.0'}
|
|
||||||
|
|
||||||
totalist@3.0.1:
|
totalist@3.0.1:
|
||||||
resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==}
|
resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==}
|
||||||
engines: {node: '>=6'}
|
engines: {node: '>=6'}
|
||||||
@@ -2714,6 +2577,10 @@ packages:
|
|||||||
resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==}
|
resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==}
|
||||||
engines: {node: '>=18'}
|
engines: {node: '>=18'}
|
||||||
|
|
||||||
|
wabt@1.0.39:
|
||||||
|
resolution: {integrity: sha512-ba+dRL/75VQQY7RkU/CgriGbkoWAfS8TDyUlJfJhJ8KhtXgMl5dhNvoPNUcQ9IWRhW8u41glMSuZeTvsYq2rRg==}
|
||||||
|
hasBin: true
|
||||||
|
|
||||||
webgl-sdf-generator@1.1.1:
|
webgl-sdf-generator@1.1.1:
|
||||||
resolution: {integrity: sha512-9Z0JcMTFxeE+b2x1LJTdnaT8rT8aEp7MVxkNwoycNmJWwPdzoXzMh0BjJSh/AEFP+KPYZUli814h8bJZFIZ2jA==}
|
resolution: {integrity: sha512-9Z0JcMTFxeE+b2x1LJTdnaT8rT8aEp7MVxkNwoycNmJWwPdzoXzMh0BjJSh/AEFP+KPYZUli814h8bJZFIZ2jA==}
|
||||||
|
|
||||||
@@ -2734,9 +2601,6 @@ packages:
|
|||||||
resolution: {integrity: sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==}
|
resolution: {integrity: sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==}
|
||||||
engines: {node: '>=18'}
|
engines: {node: '>=18'}
|
||||||
|
|
||||||
which-module@2.0.1:
|
|
||||||
resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==}
|
|
||||||
|
|
||||||
which@2.0.2:
|
which@2.0.2:
|
||||||
resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
|
resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
|
||||||
engines: {node: '>= 8'}
|
engines: {node: '>= 8'}
|
||||||
@@ -2751,10 +2615,6 @@ packages:
|
|||||||
resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
|
resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
|
||||||
engines: {node: '>=0.10.0'}
|
engines: {node: '>=0.10.0'}
|
||||||
|
|
||||||
wrap-ansi@5.1.0:
|
|
||||||
resolution: {integrity: sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==}
|
|
||||||
engines: {node: '>=6'}
|
|
||||||
|
|
||||||
ws@8.19.0:
|
ws@8.19.0:
|
||||||
resolution: {integrity: sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==}
|
resolution: {integrity: sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==}
|
||||||
engines: {node: '>=10.0.0'}
|
engines: {node: '>=10.0.0'}
|
||||||
@@ -2778,19 +2638,10 @@ packages:
|
|||||||
xmlchars@2.2.0:
|
xmlchars@2.2.0:
|
||||||
resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==}
|
resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==}
|
||||||
|
|
||||||
y18n@4.0.3:
|
|
||||||
resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==}
|
|
||||||
|
|
||||||
yaml@1.10.2:
|
yaml@1.10.2:
|
||||||
resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==}
|
resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==}
|
||||||
engines: {node: '>= 6'}
|
engines: {node: '>= 6'}
|
||||||
|
|
||||||
yargs-parser@13.1.2:
|
|
||||||
resolution: {integrity: sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==}
|
|
||||||
|
|
||||||
yargs@13.3.2:
|
|
||||||
resolution: {integrity: sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==}
|
|
||||||
|
|
||||||
yn@3.1.1:
|
yn@3.1.1:
|
||||||
resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==}
|
resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==}
|
||||||
engines: {node: '>=6'}
|
engines: {node: '>=6'}
|
||||||
@@ -3713,21 +3564,10 @@ snapshots:
|
|||||||
|
|
||||||
ansi-colors@4.1.3: {}
|
ansi-colors@4.1.3: {}
|
||||||
|
|
||||||
ansi-regex@4.1.1: {}
|
|
||||||
|
|
||||||
ansi-styles@3.2.1:
|
|
||||||
dependencies:
|
|
||||||
color-convert: 1.9.3
|
|
||||||
|
|
||||||
ansi-styles@4.3.0:
|
ansi-styles@4.3.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
color-convert: 2.0.1
|
color-convert: 2.0.1
|
||||||
|
|
||||||
anymatch@3.1.3:
|
|
||||||
dependencies:
|
|
||||||
normalize-path: 3.0.0
|
|
||||||
picomatch: 2.3.1
|
|
||||||
|
|
||||||
arg@4.1.3:
|
arg@4.1.3:
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
@@ -3748,8 +3588,6 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
require-from-string: 2.0.2
|
require-from-string: 2.0.2
|
||||||
|
|
||||||
binary-extensions@2.3.0: {}
|
|
||||||
|
|
||||||
boolbase@1.0.0: {}
|
boolbase@1.0.0: {}
|
||||||
|
|
||||||
brace-expansion@1.1.12:
|
brace-expansion@1.1.12:
|
||||||
@@ -3761,10 +3599,6 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
balanced-match: 1.0.2
|
balanced-match: 1.0.2
|
||||||
|
|
||||||
braces@3.0.3:
|
|
||||||
dependencies:
|
|
||||||
fill-range: 7.1.1
|
|
||||||
|
|
||||||
buffer-from@1.1.2:
|
buffer-from@1.1.2:
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
@@ -3795,8 +3629,6 @@ snapshots:
|
|||||||
|
|
||||||
callsites@3.1.0: {}
|
callsites@3.1.0: {}
|
||||||
|
|
||||||
camelcase@5.3.1: {}
|
|
||||||
|
|
||||||
camera-controls@3.1.2(three@0.182.0):
|
camera-controls@3.1.2(three@0.182.0):
|
||||||
dependencies:
|
dependencies:
|
||||||
three: 0.182.0
|
three: 0.182.0
|
||||||
@@ -3808,25 +3640,6 @@ snapshots:
|
|||||||
ansi-styles: 4.3.0
|
ansi-styles: 4.3.0
|
||||||
supports-color: 7.2.0
|
supports-color: 7.2.0
|
||||||
|
|
||||||
chokidar-cli@3.0.0:
|
|
||||||
dependencies:
|
|
||||||
chokidar: 3.6.0
|
|
||||||
lodash.debounce: 4.0.8
|
|
||||||
lodash.throttle: 4.1.1
|
|
||||||
yargs: 13.3.2
|
|
||||||
|
|
||||||
chokidar@3.6.0:
|
|
||||||
dependencies:
|
|
||||||
anymatch: 3.1.3
|
|
||||||
braces: 3.0.3
|
|
||||||
glob-parent: 5.1.2
|
|
||||||
is-binary-path: 2.1.0
|
|
||||||
is-glob: 4.0.3
|
|
||||||
normalize-path: 3.0.0
|
|
||||||
readdirp: 3.6.0
|
|
||||||
optionalDependencies:
|
|
||||||
fsevents: 2.3.3
|
|
||||||
|
|
||||||
chokidar@4.0.3:
|
chokidar@4.0.3:
|
||||||
dependencies:
|
dependencies:
|
||||||
readdirp: 4.1.2
|
readdirp: 4.1.2
|
||||||
@@ -3839,24 +3652,12 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
consola: 3.4.2
|
consola: 3.4.2
|
||||||
|
|
||||||
cliui@5.0.0:
|
|
||||||
dependencies:
|
|
||||||
string-width: 3.1.0
|
|
||||||
strip-ansi: 5.2.0
|
|
||||||
wrap-ansi: 5.1.0
|
|
||||||
|
|
||||||
clsx@2.1.1: {}
|
clsx@2.1.1: {}
|
||||||
|
|
||||||
color-convert@1.9.3:
|
|
||||||
dependencies:
|
|
||||||
color-name: 1.1.3
|
|
||||||
|
|
||||||
color-convert@2.0.1:
|
color-convert@2.0.1:
|
||||||
dependencies:
|
dependencies:
|
||||||
color-name: 1.1.4
|
color-name: 1.1.4
|
||||||
|
|
||||||
color-name@1.1.3: {}
|
|
||||||
|
|
||||||
color-name@1.1.4: {}
|
color-name@1.1.4: {}
|
||||||
|
|
||||||
color-support@1.1.3: {}
|
color-support@1.1.3: {}
|
||||||
@@ -3941,8 +3742,6 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
ms: 2.1.3
|
ms: 2.1.3
|
||||||
|
|
||||||
decamelize@1.2.0: {}
|
|
||||||
|
|
||||||
decimal.js@10.6.0:
|
decimal.js@10.6.0:
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
@@ -4006,8 +3805,6 @@ snapshots:
|
|||||||
|
|
||||||
earcut@2.2.4: {}
|
earcut@2.2.4: {}
|
||||||
|
|
||||||
emoji-regex@7.0.3: {}
|
|
||||||
|
|
||||||
enhanced-resolve@5.18.4:
|
enhanced-resolve@5.18.4:
|
||||||
dependencies:
|
dependencies:
|
||||||
graceful-fs: 4.2.11
|
graceful-fs: 4.2.11
|
||||||
@@ -4224,14 +4021,6 @@ snapshots:
|
|||||||
|
|
||||||
file-saver@2.0.5: {}
|
file-saver@2.0.5: {}
|
||||||
|
|
||||||
fill-range@7.1.1:
|
|
||||||
dependencies:
|
|
||||||
to-regex-range: 5.0.1
|
|
||||||
|
|
||||||
find-up@3.0.0:
|
|
||||||
dependencies:
|
|
||||||
locate-path: 3.0.0
|
|
||||||
|
|
||||||
find-up@5.0.0:
|
find-up@5.0.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
locate-path: 6.0.0
|
locate-path: 6.0.0
|
||||||
@@ -4259,8 +4048,6 @@ snapshots:
|
|||||||
function-bind@1.1.2:
|
function-bind@1.1.2:
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
get-caller-file@2.0.5: {}
|
|
||||||
|
|
||||||
get-intrinsic@1.3.0:
|
get-intrinsic@1.3.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
call-bind-apply-helpers: 1.0.2
|
call-bind-apply-helpers: 1.0.2
|
||||||
@@ -4295,10 +4082,6 @@ snapshots:
|
|||||||
nypm: 0.6.2
|
nypm: 0.6.2
|
||||||
pathe: 2.0.3
|
pathe: 2.0.3
|
||||||
|
|
||||||
glob-parent@5.1.2:
|
|
||||||
dependencies:
|
|
||||||
is-glob: 4.0.3
|
|
||||||
|
|
||||||
glob-parent@6.0.2:
|
glob-parent@6.0.2:
|
||||||
dependencies:
|
dependencies:
|
||||||
is-glob: 4.0.3
|
is-glob: 4.0.3
|
||||||
@@ -4372,16 +4155,10 @@ snapshots:
|
|||||||
|
|
||||||
imurmurhash@0.1.4: {}
|
imurmurhash@0.1.4: {}
|
||||||
|
|
||||||
is-binary-path@2.1.0:
|
|
||||||
dependencies:
|
|
||||||
binary-extensions: 2.3.0
|
|
||||||
|
|
||||||
is-docker@3.0.0: {}
|
is-docker@3.0.0: {}
|
||||||
|
|
||||||
is-extglob@2.1.1: {}
|
is-extglob@2.1.1: {}
|
||||||
|
|
||||||
is-fullwidth-code-point@2.0.0: {}
|
|
||||||
|
|
||||||
is-glob@4.0.3:
|
is-glob@4.0.3:
|
||||||
dependencies:
|
dependencies:
|
||||||
is-extglob: 2.1.1
|
is-extglob: 2.1.1
|
||||||
@@ -4392,8 +4169,6 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
is-docker: 3.0.0
|
is-docker: 3.0.0
|
||||||
|
|
||||||
is-number@7.0.0: {}
|
|
||||||
|
|
||||||
is-potential-custom-element-name@1.0.1:
|
is-potential-custom-element-name@1.0.1:
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
@@ -4538,21 +4313,12 @@ snapshots:
|
|||||||
|
|
||||||
locate-character@3.0.0: {}
|
locate-character@3.0.0: {}
|
||||||
|
|
||||||
locate-path@3.0.0:
|
|
||||||
dependencies:
|
|
||||||
p-locate: 3.0.0
|
|
||||||
path-exists: 3.0.0
|
|
||||||
|
|
||||||
locate-path@6.0.0:
|
locate-path@6.0.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
p-locate: 5.0.0
|
p-locate: 5.0.0
|
||||||
|
|
||||||
lodash.debounce@4.0.8: {}
|
|
||||||
|
|
||||||
lodash.merge@4.6.2: {}
|
lodash.merge@4.6.2: {}
|
||||||
|
|
||||||
lodash.throttle@4.1.1: {}
|
|
||||||
|
|
||||||
lodash@4.17.21: {}
|
lodash@4.17.21: {}
|
||||||
|
|
||||||
lru-cache@10.4.3:
|
lru-cache@10.4.3:
|
||||||
@@ -4640,8 +4406,6 @@ snapshots:
|
|||||||
|
|
||||||
node-fetch-native@1.6.7: {}
|
node-fetch-native@1.6.7: {}
|
||||||
|
|
||||||
normalize-path@3.0.0: {}
|
|
||||||
|
|
||||||
nth-check@2.1.1:
|
nth-check@2.1.1:
|
||||||
dependencies:
|
dependencies:
|
||||||
boolbase: 1.0.0
|
boolbase: 1.0.0
|
||||||
@@ -4679,24 +4443,14 @@ snapshots:
|
|||||||
type-check: 0.4.0
|
type-check: 0.4.0
|
||||||
word-wrap: 1.2.5
|
word-wrap: 1.2.5
|
||||||
|
|
||||||
p-limit@2.3.0:
|
|
||||||
dependencies:
|
|
||||||
p-try: 2.2.0
|
|
||||||
|
|
||||||
p-limit@3.1.0:
|
p-limit@3.1.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
yocto-queue: 0.1.0
|
yocto-queue: 0.1.0
|
||||||
|
|
||||||
p-locate@3.0.0:
|
|
||||||
dependencies:
|
|
||||||
p-limit: 2.3.0
|
|
||||||
|
|
||||||
p-locate@5.0.0:
|
p-locate@5.0.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
p-limit: 3.1.0
|
p-limit: 3.1.0
|
||||||
|
|
||||||
p-try@2.2.0: {}
|
|
||||||
|
|
||||||
package-manager-detector@1.6.0: {}
|
package-manager-detector@1.6.0: {}
|
||||||
|
|
||||||
parent-module@1.0.1:
|
parent-module@1.0.1:
|
||||||
@@ -4711,8 +4465,6 @@ snapshots:
|
|||||||
entities: 6.0.1
|
entities: 6.0.1
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
path-exists@3.0.0: {}
|
|
||||||
|
|
||||||
path-exists@4.0.0: {}
|
path-exists@4.0.0: {}
|
||||||
|
|
||||||
path-key@3.1.1: {}
|
path-key@3.1.1: {}
|
||||||
@@ -4723,8 +4475,6 @@ snapshots:
|
|||||||
|
|
||||||
picocolors@1.1.1: {}
|
picocolors@1.1.1: {}
|
||||||
|
|
||||||
picomatch@2.3.1: {}
|
|
||||||
|
|
||||||
picomatch@4.0.3: {}
|
picomatch@4.0.3: {}
|
||||||
|
|
||||||
pify@4.0.1:
|
pify@4.0.1:
|
||||||
@@ -4790,20 +4540,12 @@ snapshots:
|
|||||||
defu: 6.1.4
|
defu: 6.1.4
|
||||||
destr: 2.0.5
|
destr: 2.0.5
|
||||||
|
|
||||||
readdirp@3.6.0:
|
|
||||||
dependencies:
|
|
||||||
picomatch: 2.3.1
|
|
||||||
|
|
||||||
readdirp@4.1.2: {}
|
readdirp@4.1.2: {}
|
||||||
|
|
||||||
readdirp@5.0.0: {}
|
readdirp@5.0.0: {}
|
||||||
|
|
||||||
require-directory@2.1.1: {}
|
|
||||||
|
|
||||||
require-from-string@2.0.2: {}
|
require-from-string@2.0.2: {}
|
||||||
|
|
||||||
require-main-filename@2.0.0: {}
|
|
||||||
|
|
||||||
resolve-from@4.0.0: {}
|
resolve-from@4.0.0: {}
|
||||||
|
|
||||||
resolve-pkg-maps@1.0.0:
|
resolve-pkg-maps@1.0.0:
|
||||||
@@ -4878,8 +4620,6 @@ snapshots:
|
|||||||
|
|
||||||
semver@7.7.3: {}
|
semver@7.7.3: {}
|
||||||
|
|
||||||
set-blocking@2.0.0: {}
|
|
||||||
|
|
||||||
set-cookie-parser@2.7.2: {}
|
set-cookie-parser@2.7.2: {}
|
||||||
|
|
||||||
shebang-command@2.0.0:
|
shebang-command@2.0.0:
|
||||||
@@ -4913,16 +4653,6 @@ snapshots:
|
|||||||
|
|
||||||
std-env@3.10.0: {}
|
std-env@3.10.0: {}
|
||||||
|
|
||||||
string-width@3.1.0:
|
|
||||||
dependencies:
|
|
||||||
emoji-regex: 7.0.3
|
|
||||||
is-fullwidth-code-point: 2.0.0
|
|
||||||
strip-ansi: 5.2.0
|
|
||||||
|
|
||||||
strip-ansi@5.2.0:
|
|
||||||
dependencies:
|
|
||||||
ansi-regex: 4.1.1
|
|
||||||
|
|
||||||
strip-json-comments@3.1.1: {}
|
strip-json-comments@3.1.1: {}
|
||||||
|
|
||||||
supports-color@7.2.0:
|
supports-color@7.2.0:
|
||||||
@@ -5042,10 +4772,6 @@ snapshots:
|
|||||||
tldts-core: 6.1.86
|
tldts-core: 6.1.86
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
to-regex-range@5.0.1:
|
|
||||||
dependencies:
|
|
||||||
is-number: 7.0.0
|
|
||||||
|
|
||||||
totalist@3.0.1: {}
|
totalist@3.0.1: {}
|
||||||
|
|
||||||
tough-cookie@5.1.2:
|
tough-cookie@5.1.2:
|
||||||
@@ -5211,6 +4937,8 @@ snapshots:
|
|||||||
xml-name-validator: 5.0.0
|
xml-name-validator: 5.0.0
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
|
wabt@1.0.39: {}
|
||||||
|
|
||||||
webgl-sdf-generator@1.1.1: {}
|
webgl-sdf-generator@1.1.1: {}
|
||||||
|
|
||||||
webidl-conversions@7.0.0:
|
webidl-conversions@7.0.0:
|
||||||
@@ -5230,8 +4958,6 @@ snapshots:
|
|||||||
webidl-conversions: 7.0.0
|
webidl-conversions: 7.0.0
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
which-module@2.0.1: {}
|
|
||||||
|
|
||||||
which@2.0.2:
|
which@2.0.2:
|
||||||
dependencies:
|
dependencies:
|
||||||
isexe: 2.0.0
|
isexe: 2.0.0
|
||||||
@@ -5243,12 +4969,6 @@ snapshots:
|
|||||||
|
|
||||||
word-wrap@1.2.5: {}
|
word-wrap@1.2.5: {}
|
||||||
|
|
||||||
wrap-ansi@5.1.0:
|
|
||||||
dependencies:
|
|
||||||
ansi-styles: 3.2.1
|
|
||||||
string-width: 3.1.0
|
|
||||||
strip-ansi: 5.2.0
|
|
||||||
|
|
||||||
ws@8.19.0:
|
ws@8.19.0:
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
@@ -5263,28 +4983,8 @@ snapshots:
|
|||||||
xmlchars@2.2.0:
|
xmlchars@2.2.0:
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
y18n@4.0.3: {}
|
|
||||||
|
|
||||||
yaml@1.10.2: {}
|
yaml@1.10.2: {}
|
||||||
|
|
||||||
yargs-parser@13.1.2:
|
|
||||||
dependencies:
|
|
||||||
camelcase: 5.3.1
|
|
||||||
decamelize: 1.2.0
|
|
||||||
|
|
||||||
yargs@13.3.2:
|
|
||||||
dependencies:
|
|
||||||
cliui: 5.0.0
|
|
||||||
find-up: 3.0.0
|
|
||||||
get-caller-file: 2.0.5
|
|
||||||
require-directory: 2.1.1
|
|
||||||
require-main-filename: 2.0.0
|
|
||||||
set-blocking: 2.0.0
|
|
||||||
string-width: 3.1.0
|
|
||||||
which-module: 2.0.1
|
|
||||||
y18n: 4.0.3
|
|
||||||
yargs-parser: 13.1.2
|
|
||||||
|
|
||||||
yn@3.1.1:
|
yn@3.1.1:
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
DATABASE_URL=postgres://nodarium:nodarium@postgres-db:5432/nodarium
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
FROM denoland/deno:alpine
|
|
||||||
|
|
||||||
ARG GIT_REVISION
|
|
||||||
ENV DENO_DEPLOYMENT_ID=${GIT_REVISION}
|
|
||||||
|
|
||||||
WORKDIR /app
|
|
||||||
|
|
||||||
COPY . .
|
|
||||||
RUN deno cache src/server.ts
|
|
||||||
|
|
||||||
EXPOSE 8000
|
|
||||||
|
|
||||||
CMD ["task", "run"]
|
|
||||||
@@ -1,65 +0,0 @@
|
|||||||
import * as path from "jsr:@std/path";
|
|
||||||
const arg = Deno.args[0];
|
|
||||||
|
|
||||||
const base = arg.startsWith("/") ? arg : path.join(Deno.cwd(), arg);
|
|
||||||
|
|
||||||
const dirs = Deno.readDir(base);
|
|
||||||
|
|
||||||
type Node = {
|
|
||||||
user: string;
|
|
||||||
system: string;
|
|
||||||
id: string;
|
|
||||||
path: string;
|
|
||||||
};
|
|
||||||
|
|
||||||
const nodes: Node[] = [];
|
|
||||||
|
|
||||||
for await (const dir of dirs) {
|
|
||||||
if (dir.isDirectory) {
|
|
||||||
const userDir = path.join(base, dir.name);
|
|
||||||
for await (const userName of Deno.readDir(userDir)) {
|
|
||||||
if (userName.isDirectory) {
|
|
||||||
const nodeSystemDir = path.join(userDir, userName.name);
|
|
||||||
for await (const nodeDir of Deno.readDir(nodeSystemDir)) {
|
|
||||||
if (nodeDir.isDirectory && !nodeDir.name.startsWith(".")) {
|
|
||||||
const wasmFilePath = path.join(
|
|
||||||
nodeSystemDir,
|
|
||||||
nodeDir.name,
|
|
||||||
"pkg",
|
|
||||||
"index_bg.wasm",
|
|
||||||
);
|
|
||||||
nodes.push({
|
|
||||||
user: dir.name,
|
|
||||||
system: userName.name,
|
|
||||||
id: nodeDir.name,
|
|
||||||
path: wasmFilePath,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
async function postNode(node: Node) {
|
|
||||||
const wasmContent = await Deno.readFile(node.path);
|
|
||||||
|
|
||||||
const url = `http://localhost:8000/nodes`;
|
|
||||||
// const url = "https://node-store.app.max-richter.dev/nodes";
|
|
||||||
|
|
||||||
const res = await fetch(url, {
|
|
||||||
method: "POST",
|
|
||||||
body: wasmContent,
|
|
||||||
});
|
|
||||||
|
|
||||||
if (res.ok) {
|
|
||||||
console.log(`Uploaded ${node.id}`);
|
|
||||||
} else {
|
|
||||||
const text = await res.text();
|
|
||||||
console.log(`Failed to upload ${node.id}: ${res.status} ${text}`);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (const node of nodes) {
|
|
||||||
await postNode(node);
|
|
||||||
}
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
services:
|
|
||||||
app:
|
|
||||||
image: denoland/deno:latest
|
|
||||||
working_dir: /app
|
|
||||||
ports:
|
|
||||||
- 8000:8000
|
|
||||||
environment:
|
|
||||||
DATABASE_URL: postgres://nodarium:nodarium@db:5432/nodarium
|
|
||||||
volumes:
|
|
||||||
- .:/app
|
|
||||||
- deno-cache:/deno-dir/
|
|
||||||
command: task dev
|
|
||||||
depends_on:
|
|
||||||
- db
|
|
||||||
|
|
||||||
db:
|
|
||||||
image: postgres:latest
|
|
||||||
environment:
|
|
||||||
POSTGRES_USER: nodarium
|
|
||||||
POSTGRES_PASSWORD: nodarium
|
|
||||||
POSTGRES_DB: nodarium
|
|
||||||
ports:
|
|
||||||
- "5432:5432"
|
|
||||||
volumes:
|
|
||||||
- postgres-data:/var/lib/postgresql/data
|
|
||||||
|
|
||||||
volumes:
|
|
||||||
postgres-data:
|
|
||||||
deno-cache:
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
{
|
|
||||||
"tasks": {
|
|
||||||
"dev": "deno run -A --watch src/server.ts",
|
|
||||||
"run": "deno run -A src/server.ts",
|
|
||||||
"test": "deno run vitest",
|
|
||||||
"drizzle": "podman-compose exec app deno --env -A --node-modules-dir npm:drizzle-kit",
|
|
||||||
"upload": "deno run --allow-read --allow-net bin/upload.ts"
|
|
||||||
},
|
|
||||||
"imports": {
|
|
||||||
"@asteasolutions/zod-to-openapi": "npm:@asteasolutions/zod-to-openapi@^7.3.0",
|
|
||||||
"@hono/swagger-ui": "npm:@hono/swagger-ui@^0.5.0",
|
|
||||||
"@hono/zod-openapi": "npm:@hono/zod-openapi@^0.18.3",
|
|
||||||
"@std/assert": "jsr:@std/assert@1",
|
|
||||||
"@types/pg": "npm:@types/pg@^8.11.10",
|
|
||||||
"drizzle-kit": "npm:drizzle-kit@^0.30.1",
|
|
||||||
"drizzle-orm": "npm:drizzle-orm@^0.38.2",
|
|
||||||
"hono": "npm:hono@^4.6.14",
|
|
||||||
"pg": "npm:pg@^8.13.1",
|
|
||||||
"vitest": "npm:vitest@^2.1.8",
|
|
||||||
"zod": "npm:zod@^3.24.1"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user