Compare commits
2 Commits
feat/drop-
...
ecbcc814ed
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ecbcc814ed
|
||
|
|
be97387252
|
1
.gitignore
vendored
1
.gitignore
vendored
@@ -4,4 +4,3 @@ node_modules/
|
|||||||
# Added by cargo
|
# Added by cargo
|
||||||
|
|
||||||
/target
|
/target
|
||||||
.direnv/
|
|
||||||
|
|||||||
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",
|
||||||
|
|||||||
@@ -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;
|
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
import type { NodeInstance, Socket } from "@nodarium/types";
|
import type { NodeInstance, Socket } from "@nodarium/types";
|
||||||
import { getContext, setContext } from "svelte";
|
import { getContext, setContext } from "svelte";
|
||||||
import { SvelteMap, SvelteSet } from "svelte/reactivity";
|
import { SvelteSet } from "svelte/reactivity";
|
||||||
import type { GraphManager } from "./graph-manager.svelte";
|
import type { GraphManager } from "./graph-manager.svelte";
|
||||||
import type { Mesh, OrthographicCamera, Vector3 } from "three";
|
import type { OrthographicCamera } from "three";
|
||||||
|
|
||||||
|
|
||||||
const graphStateKey = Symbol("graph-state");
|
const graphStateKey = Symbol("graph-state");
|
||||||
@@ -46,8 +46,6 @@ export class GraphState {
|
|||||||
width = $state(100);
|
width = $state(100);
|
||||||
height = $state(100);
|
height = $state(100);
|
||||||
|
|
||||||
edgeGeometries = new SvelteMap<string, { geo: Mesh, points: Vector3[] }>();
|
|
||||||
|
|
||||||
wrapper = $state<HTMLDivElement>(null!);
|
wrapper = $state<HTMLDivElement>(null!);
|
||||||
rect: DOMRect = $derived(
|
rect: DOMRect = $derived(
|
||||||
(this.wrapper && this.width && this.height) ? this.wrapper.getBoundingClientRect() : new DOMRect(0, 0, 0, 0),
|
(this.wrapper && this.width && this.height) ? this.wrapper.getBoundingClientRect() : new DOMRect(0, 0, 0, 0),
|
||||||
@@ -99,14 +97,6 @@ export class GraphState {
|
|||||||
|
|
||||||
isBodyFocused = () => document?.activeElement?.nodeName !== "INPUT";
|
isBodyFocused = () => document?.activeElement?.nodeName !== "INPUT";
|
||||||
|
|
||||||
setEdgeGeometry(edgeId: string, edgeGeometry: { geo: Mesh, points: Vector3[] }) {
|
|
||||||
this.edgeGeometries.set(edgeId, edgeGeometry);
|
|
||||||
}
|
|
||||||
|
|
||||||
removeEdgeGeometry(edgeId: string) {
|
|
||||||
this.edgeGeometries.delete(edgeId);
|
|
||||||
}
|
|
||||||
|
|
||||||
updateNodePosition(node: NodeInstance) {
|
updateNodePosition(node: NodeInstance) {
|
||||||
if (
|
if (
|
||||||
node.state.x === node.position[0] &&
|
node.state.x === node.position[0] &&
|
||||||
|
|||||||
@@ -112,38 +112,16 @@ export class FileDropEventManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
class EdgeInteractionManager {
|
|
||||||
constructor(
|
|
||||||
private graph: GraphManager,
|
|
||||||
private state: GraphState) { };
|
|
||||||
|
|
||||||
handleMouseDown() {
|
|
||||||
const edges = this.graph.edges;
|
|
||||||
console.log(edges)
|
|
||||||
}
|
|
||||||
|
|
||||||
handleMouseMove() {
|
|
||||||
}
|
|
||||||
|
|
||||||
handleMouseUp() {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
export class MouseEventManager {
|
export class MouseEventManager {
|
||||||
|
|
||||||
edgeInteractionManager: EdgeInteractionManager
|
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
private graph: GraphManager,
|
private graph: GraphManager,
|
||||||
private state: GraphState
|
private state: GraphState
|
||||||
) {
|
) { }
|
||||||
|
|
||||||
this.edgeInteractionManager = new EdgeInteractionManager(graph, state);
|
|
||||||
}
|
|
||||||
|
|
||||||
handleMouseUp(event: MouseEvent) {
|
handleMouseUp(event: MouseEvent) {
|
||||||
this.edgeInteractionManager.handleMouseUp();
|
|
||||||
this.state.isPanning = false;
|
this.state.isPanning = false;
|
||||||
if (!this.state.mouseDown) return;
|
if (!this.state.mouseDown) return;
|
||||||
|
|
||||||
@@ -334,7 +312,6 @@ export class MouseEventManager {
|
|||||||
this.state.activeNodeId = clickedNodeId;
|
this.state.activeNodeId = clickedNodeId;
|
||||||
this.state.clearSelection();
|
this.state.clearSelection();
|
||||||
}
|
}
|
||||||
this.edgeInteractionManager.handleMouseDown();
|
|
||||||
} else if (event.ctrlKey) {
|
} else if (event.ctrlKey) {
|
||||||
this.state.boxSelection = true;
|
this.state.boxSelection = true;
|
||||||
}
|
}
|
||||||
@@ -420,7 +397,6 @@ export class MouseEventManager {
|
|||||||
|
|
||||||
// here we are handling dragging of nodes
|
// here we are handling dragging of nodes
|
||||||
if (this.state.activeNodeId !== -1 && this.state.mouseDownNodeId !== -1) {
|
if (this.state.activeNodeId !== -1 && this.state.mouseDownNodeId !== -1) {
|
||||||
this.edgeInteractionManager.handleMouseMove();
|
|
||||||
const node = this.graph.getNode(this.state.activeNodeId);
|
const node = this.graph.getNode(this.state.activeNodeId);
|
||||||
if (!node || event.buttons !== 1) return;
|
if (!node || event.buttons !== 1) return;
|
||||||
|
|
||||||
|
|||||||
@@ -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>
|
||||||
<Panel
|
<code>
|
||||||
id="node-store"
|
{JSON.stringify(nodeInstance?.props)}
|
||||||
classes="text-green-400"
|
</code>
|
||||||
title="Node Store"
|
</pre>
|
||||||
icon="i-[tabler--database]"
|
</Grid.Cell>
|
||||||
>
|
|
||||||
<div class="p-4">
|
<Grid.Cell>
|
||||||
<input type="text" class="bg-red rounded-sm p-2" />
|
<div class="h-screen w-[80vw] overflow-y-auto">
|
||||||
</div>
|
{#if nodeWasm}
|
||||||
</Panel>
|
<Code wasm={nodeWasm} />
|
||||||
</Sidebar>
|
{/if}
|
||||||
|
</div>
|
||||||
</Grid.Cell>
|
</Grid.Cell>
|
||||||
</Grid.Row>
|
</Grid.Row>
|
||||||
|
|
||||||
|
<Sidebar>
|
||||||
|
<Panel
|
||||||
|
id="node-store"
|
||||||
|
classes="text-green-400"
|
||||||
|
title="Node Store"
|
||||||
|
icon="i-[tabler--database]"
|
||||||
|
>
|
||||||
|
<div class="p-4 flex flex-col gap-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>
|
||||||
|
</Panel>
|
||||||
|
</Sidebar>
|
||||||
|
|
||||||
<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}
|
||||||
27
flake.lock
generated
27
flake.lock
generated
@@ -1,27 +0,0 @@
|
|||||||
{
|
|
||||||
"nodes": {
|
|
||||||
"nixpkgs": {
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1768564909,
|
|
||||||
"narHash": "sha256-Kell/SpJYVkHWMvnhqJz/8DqQg2b6PguxVWOuadbHCc=",
|
|
||||||
"owner": "nixos",
|
|
||||||
"repo": "nixpkgs",
|
|
||||||
"rev": "e4bae1bd10c9c57b2cf517953ab70060a828ee6f",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "nixos",
|
|
||||||
"ref": "nixos-unstable",
|
|
||||||
"repo": "nixpkgs",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"root": {
|
|
||||||
"inputs": {
|
|
||||||
"nixpkgs": "nixpkgs"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"root": "root",
|
|
||||||
"version": 7
|
|
||||||
}
|
|
||||||
40
flake.nix
40
flake.nix
@@ -1,40 +0,0 @@
|
|||||||
{
|
|
||||||
inputs = {
|
|
||||||
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
|
|
||||||
};
|
|
||||||
|
|
||||||
outputs = {nixpkgs, ...}: let
|
|
||||||
systems = ["aarch64-darwin" "x86_64-linux"];
|
|
||||||
eachSystem = function:
|
|
||||||
nixpkgs.lib.genAttrs systems (system:
|
|
||||||
function {
|
|
||||||
inherit system;
|
|
||||||
pkgs = nixpkgs.legacyPackages.${system};
|
|
||||||
});
|
|
||||||
in {
|
|
||||||
devShells = eachSystem ({pkgs, ...}: {
|
|
||||||
default = pkgs.mkShellNoCC {
|
|
||||||
packages = [
|
|
||||||
# general deps
|
|
||||||
pkgs.nodejs_24
|
|
||||||
pkgs.pnpm_10
|
|
||||||
|
|
||||||
# wasm/rust stuff
|
|
||||||
pkgs.rustc
|
|
||||||
pkgs.cargo
|
|
||||||
pkgs.rust-analyzer
|
|
||||||
pkgs.rustfmt
|
|
||||||
pkgs.wasm-bindgen-cli
|
|
||||||
pkgs.wasm-pack
|
|
||||||
pkgs.lld
|
|
||||||
|
|
||||||
# frontend
|
|
||||||
pkgs.vscode-langservers-extracted
|
|
||||||
pkgs.typescript-language-server
|
|
||||||
pkgs.prettier
|
|
||||||
pkgs.tailwindcss-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);
|
|
||||||
}
|
|
||||||
@@ -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]
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
|
||||||
}
|
}
|
||||||
|
|||||||
9
pnpm-lock.yaml
generated
9
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
|
||||||
@@ -2574,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==}
|
||||||
|
|
||||||
@@ -4930,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:
|
||||||
|
|||||||
@@ -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"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
883
store/deno.lock
generated
883
store/deno.lock
generated
@@ -1,883 +0,0 @@
|
|||||||
{
|
|
||||||
"version": "4",
|
|
||||||
"specifiers": {
|
|
||||||
"jsr:@std/assert@1": "1.0.9",
|
|
||||||
"jsr:@std/assert@^1.0.9": "1.0.9",
|
|
||||||
"jsr:@std/bytes@^1.0.2": "1.0.4",
|
|
||||||
"jsr:@std/crypto@^1.0.3": "1.0.3",
|
|
||||||
"jsr:@std/expect@*": "1.0.9",
|
|
||||||
"jsr:@std/internal@^1.0.5": "1.0.5",
|
|
||||||
"jsr:@std/path@*": "1.0.8",
|
|
||||||
"jsr:@std/uuid@*": "1.0.4",
|
|
||||||
"npm:@asteasolutions/zod-to-openapi@^7.3.0": "7.3.0_zod@3.24.1",
|
|
||||||
"npm:@hono/swagger-ui@0.5": "0.5.0_hono@4.6.14",
|
|
||||||
"npm:@hono/zod-openapi@~0.18.3": "0.18.3_hono@4.6.14_zod@3.24.1",
|
|
||||||
"npm:@types/node@*": "22.5.4",
|
|
||||||
"npm:@types/pg@^8.11.10": "8.11.10",
|
|
||||||
"npm:drizzle-kit@*": "0.30.1_esbuild@0.19.12",
|
|
||||||
"npm:drizzle-kit@~0.30.1": "0.30.1_esbuild@0.19.12",
|
|
||||||
"npm:drizzle-orm@~0.38.2": "0.38.2_@types+pg@8.11.10_pg@8.13.1",
|
|
||||||
"npm:hono@^4.6.14": "4.6.14",
|
|
||||||
"npm:pg@^8.13.1": "8.13.1",
|
|
||||||
"npm:vitest@^2.1.8": "2.1.8_vite@5.4.11",
|
|
||||||
"npm:zod@^3.24.1": "3.24.1"
|
|
||||||
},
|
|
||||||
"jsr": {
|
|
||||||
"@std/assert@1.0.9": {
|
|
||||||
"integrity": "a9f0c611a869cc791b26f523eec54c7e187aab7932c2c8e8bea0622d13680dcd",
|
|
||||||
"dependencies": [
|
|
||||||
"jsr:@std/internal"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"@std/bytes@1.0.4": {
|
|
||||||
"integrity": "11a0debe522707c95c7b7ef89b478c13fb1583a7cfb9a85674cd2cc2e3a28abc"
|
|
||||||
},
|
|
||||||
"@std/crypto@1.0.3": {
|
|
||||||
"integrity": "a2a32f51ddef632d299e3879cd027c630dcd4d1d9a5285d6e6788072f4e51e7f"
|
|
||||||
},
|
|
||||||
"@std/expect@1.0.9": {
|
|
||||||
"integrity": "108bb428f17492ac40439479e1dc55fbaae581530e905a8603f97305842a5a01",
|
|
||||||
"dependencies": [
|
|
||||||
"jsr:@std/assert@^1.0.9",
|
|
||||||
"jsr:@std/internal"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"@std/internal@1.0.5": {
|
|
||||||
"integrity": "54a546004f769c1ac9e025abd15a76b6671ddc9687e2313b67376125650dc7ba"
|
|
||||||
},
|
|
||||||
"@std/path@1.0.8": {
|
|
||||||
"integrity": "548fa456bb6a04d3c1a1e7477986b6cffbce95102d0bb447c67c4ee70e0364be"
|
|
||||||
},
|
|
||||||
"@std/uuid@1.0.4": {
|
|
||||||
"integrity": "f4233149cc8b4753cc3763fd83a7c4101699491f55c7be78dc7b30281946d7a0",
|
|
||||||
"dependencies": [
|
|
||||||
"jsr:@std/bytes",
|
|
||||||
"jsr:@std/crypto"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"npm": {
|
|
||||||
"@asteasolutions/zod-to-openapi@7.3.0_zod@3.24.1": {
|
|
||||||
"integrity": "sha512-7tE/r1gXwMIvGnXVUdIqUhCU1RevEFC4Jk6Bussa0fk1ecbnnINkZzj1EOAJyE/M3AI25DnHT/zKQL1/FPFi8Q==",
|
|
||||||
"dependencies": [
|
|
||||||
"openapi3-ts",
|
|
||||||
"zod"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"@drizzle-team/brocli@0.10.2": {
|
|
||||||
"integrity": "sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w=="
|
|
||||||
},
|
|
||||||
"@esbuild-kit/core-utils@3.3.2": {
|
|
||||||
"integrity": "sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==",
|
|
||||||
"dependencies": [
|
|
||||||
"esbuild@0.18.20",
|
|
||||||
"source-map-support"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"@esbuild-kit/esm-loader@2.6.5": {
|
|
||||||
"integrity": "sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==",
|
|
||||||
"dependencies": [
|
|
||||||
"@esbuild-kit/core-utils",
|
|
||||||
"get-tsconfig"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"@esbuild/aix-ppc64@0.19.12": {
|
|
||||||
"integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA=="
|
|
||||||
},
|
|
||||||
"@esbuild/aix-ppc64@0.21.5": {
|
|
||||||
"integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ=="
|
|
||||||
},
|
|
||||||
"@esbuild/android-arm64@0.18.20": {
|
|
||||||
"integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ=="
|
|
||||||
},
|
|
||||||
"@esbuild/android-arm64@0.19.12": {
|
|
||||||
"integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA=="
|
|
||||||
},
|
|
||||||
"@esbuild/android-arm64@0.21.5": {
|
|
||||||
"integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A=="
|
|
||||||
},
|
|
||||||
"@esbuild/android-arm@0.18.20": {
|
|
||||||
"integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw=="
|
|
||||||
},
|
|
||||||
"@esbuild/android-arm@0.19.12": {
|
|
||||||
"integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w=="
|
|
||||||
},
|
|
||||||
"@esbuild/android-arm@0.21.5": {
|
|
||||||
"integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg=="
|
|
||||||
},
|
|
||||||
"@esbuild/android-x64@0.18.20": {
|
|
||||||
"integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg=="
|
|
||||||
},
|
|
||||||
"@esbuild/android-x64@0.19.12": {
|
|
||||||
"integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew=="
|
|
||||||
},
|
|
||||||
"@esbuild/android-x64@0.21.5": {
|
|
||||||
"integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA=="
|
|
||||||
},
|
|
||||||
"@esbuild/darwin-arm64@0.18.20": {
|
|
||||||
"integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA=="
|
|
||||||
},
|
|
||||||
"@esbuild/darwin-arm64@0.19.12": {
|
|
||||||
"integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g=="
|
|
||||||
},
|
|
||||||
"@esbuild/darwin-arm64@0.21.5": {
|
|
||||||
"integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ=="
|
|
||||||
},
|
|
||||||
"@esbuild/darwin-x64@0.18.20": {
|
|
||||||
"integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ=="
|
|
||||||
},
|
|
||||||
"@esbuild/darwin-x64@0.19.12": {
|
|
||||||
"integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A=="
|
|
||||||
},
|
|
||||||
"@esbuild/darwin-x64@0.21.5": {
|
|
||||||
"integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw=="
|
|
||||||
},
|
|
||||||
"@esbuild/freebsd-arm64@0.18.20": {
|
|
||||||
"integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw=="
|
|
||||||
},
|
|
||||||
"@esbuild/freebsd-arm64@0.19.12": {
|
|
||||||
"integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA=="
|
|
||||||
},
|
|
||||||
"@esbuild/freebsd-arm64@0.21.5": {
|
|
||||||
"integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g=="
|
|
||||||
},
|
|
||||||
"@esbuild/freebsd-x64@0.18.20": {
|
|
||||||
"integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ=="
|
|
||||||
},
|
|
||||||
"@esbuild/freebsd-x64@0.19.12": {
|
|
||||||
"integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg=="
|
|
||||||
},
|
|
||||||
"@esbuild/freebsd-x64@0.21.5": {
|
|
||||||
"integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ=="
|
|
||||||
},
|
|
||||||
"@esbuild/linux-arm64@0.18.20": {
|
|
||||||
"integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA=="
|
|
||||||
},
|
|
||||||
"@esbuild/linux-arm64@0.19.12": {
|
|
||||||
"integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA=="
|
|
||||||
},
|
|
||||||
"@esbuild/linux-arm64@0.21.5": {
|
|
||||||
"integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q=="
|
|
||||||
},
|
|
||||||
"@esbuild/linux-arm@0.18.20": {
|
|
||||||
"integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg=="
|
|
||||||
},
|
|
||||||
"@esbuild/linux-arm@0.19.12": {
|
|
||||||
"integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w=="
|
|
||||||
},
|
|
||||||
"@esbuild/linux-arm@0.21.5": {
|
|
||||||
"integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA=="
|
|
||||||
},
|
|
||||||
"@esbuild/linux-ia32@0.18.20": {
|
|
||||||
"integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA=="
|
|
||||||
},
|
|
||||||
"@esbuild/linux-ia32@0.19.12": {
|
|
||||||
"integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA=="
|
|
||||||
},
|
|
||||||
"@esbuild/linux-ia32@0.21.5": {
|
|
||||||
"integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg=="
|
|
||||||
},
|
|
||||||
"@esbuild/linux-loong64@0.18.20": {
|
|
||||||
"integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg=="
|
|
||||||
},
|
|
||||||
"@esbuild/linux-loong64@0.19.12": {
|
|
||||||
"integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA=="
|
|
||||||
},
|
|
||||||
"@esbuild/linux-loong64@0.21.5": {
|
|
||||||
"integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg=="
|
|
||||||
},
|
|
||||||
"@esbuild/linux-mips64el@0.18.20": {
|
|
||||||
"integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ=="
|
|
||||||
},
|
|
||||||
"@esbuild/linux-mips64el@0.19.12": {
|
|
||||||
"integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w=="
|
|
||||||
},
|
|
||||||
"@esbuild/linux-mips64el@0.21.5": {
|
|
||||||
"integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg=="
|
|
||||||
},
|
|
||||||
"@esbuild/linux-ppc64@0.18.20": {
|
|
||||||
"integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA=="
|
|
||||||
},
|
|
||||||
"@esbuild/linux-ppc64@0.19.12": {
|
|
||||||
"integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg=="
|
|
||||||
},
|
|
||||||
"@esbuild/linux-ppc64@0.21.5": {
|
|
||||||
"integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w=="
|
|
||||||
},
|
|
||||||
"@esbuild/linux-riscv64@0.18.20": {
|
|
||||||
"integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A=="
|
|
||||||
},
|
|
||||||
"@esbuild/linux-riscv64@0.19.12": {
|
|
||||||
"integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg=="
|
|
||||||
},
|
|
||||||
"@esbuild/linux-riscv64@0.21.5": {
|
|
||||||
"integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA=="
|
|
||||||
},
|
|
||||||
"@esbuild/linux-s390x@0.18.20": {
|
|
||||||
"integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ=="
|
|
||||||
},
|
|
||||||
"@esbuild/linux-s390x@0.19.12": {
|
|
||||||
"integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg=="
|
|
||||||
},
|
|
||||||
"@esbuild/linux-s390x@0.21.5": {
|
|
||||||
"integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A=="
|
|
||||||
},
|
|
||||||
"@esbuild/linux-x64@0.18.20": {
|
|
||||||
"integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w=="
|
|
||||||
},
|
|
||||||
"@esbuild/linux-x64@0.19.12": {
|
|
||||||
"integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg=="
|
|
||||||
},
|
|
||||||
"@esbuild/linux-x64@0.21.5": {
|
|
||||||
"integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ=="
|
|
||||||
},
|
|
||||||
"@esbuild/netbsd-x64@0.18.20": {
|
|
||||||
"integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A=="
|
|
||||||
},
|
|
||||||
"@esbuild/netbsd-x64@0.19.12": {
|
|
||||||
"integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA=="
|
|
||||||
},
|
|
||||||
"@esbuild/netbsd-x64@0.21.5": {
|
|
||||||
"integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg=="
|
|
||||||
},
|
|
||||||
"@esbuild/openbsd-x64@0.18.20": {
|
|
||||||
"integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg=="
|
|
||||||
},
|
|
||||||
"@esbuild/openbsd-x64@0.19.12": {
|
|
||||||
"integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw=="
|
|
||||||
},
|
|
||||||
"@esbuild/openbsd-x64@0.21.5": {
|
|
||||||
"integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow=="
|
|
||||||
},
|
|
||||||
"@esbuild/sunos-x64@0.18.20": {
|
|
||||||
"integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ=="
|
|
||||||
},
|
|
||||||
"@esbuild/sunos-x64@0.19.12": {
|
|
||||||
"integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA=="
|
|
||||||
},
|
|
||||||
"@esbuild/sunos-x64@0.21.5": {
|
|
||||||
"integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg=="
|
|
||||||
},
|
|
||||||
"@esbuild/win32-arm64@0.18.20": {
|
|
||||||
"integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg=="
|
|
||||||
},
|
|
||||||
"@esbuild/win32-arm64@0.19.12": {
|
|
||||||
"integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A=="
|
|
||||||
},
|
|
||||||
"@esbuild/win32-arm64@0.21.5": {
|
|
||||||
"integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A=="
|
|
||||||
},
|
|
||||||
"@esbuild/win32-ia32@0.18.20": {
|
|
||||||
"integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g=="
|
|
||||||
},
|
|
||||||
"@esbuild/win32-ia32@0.19.12": {
|
|
||||||
"integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ=="
|
|
||||||
},
|
|
||||||
"@esbuild/win32-ia32@0.21.5": {
|
|
||||||
"integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA=="
|
|
||||||
},
|
|
||||||
"@esbuild/win32-x64@0.18.20": {
|
|
||||||
"integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ=="
|
|
||||||
},
|
|
||||||
"@esbuild/win32-x64@0.19.12": {
|
|
||||||
"integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA=="
|
|
||||||
},
|
|
||||||
"@esbuild/win32-x64@0.21.5": {
|
|
||||||
"integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw=="
|
|
||||||
},
|
|
||||||
"@hono/swagger-ui@0.5.0_hono@4.6.14": {
|
|
||||||
"integrity": "sha512-MWYYSv9kC8IwFBLZdwgZZMT9zUq2C/4/ekuyEYOkHEgUMqu+FG3eebtBZ4ofMh60xYRxRR2BgQGoNIILys/PFg==",
|
|
||||||
"dependencies": [
|
|
||||||
"hono"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"@hono/zod-openapi@0.18.3_hono@4.6.14_zod@3.24.1": {
|
|
||||||
"integrity": "sha512-bNlRDODnp7P9Fs13ZPajEOt13G0XwXKfKRHMEFCphQsFiD1Y+twzHaglpNAhNcflzR1DQwHY92ZS06b4LTPbIQ==",
|
|
||||||
"dependencies": [
|
|
||||||
"@asteasolutions/zod-to-openapi",
|
|
||||||
"@hono/zod-validator",
|
|
||||||
"hono",
|
|
||||||
"zod"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"@hono/zod-validator@0.4.2_hono@4.6.14_zod@3.24.1": {
|
|
||||||
"integrity": "sha512-1rrlBg+EpDPhzOV4hT9pxr5+xDVmKuz6YJl+la7VCwK6ass5ldyKm5fD+umJdV2zhHD6jROoCCv8NbTwyfhT0g==",
|
|
||||||
"dependencies": [
|
|
||||||
"hono",
|
|
||||||
"zod"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"@jridgewell/sourcemap-codec@1.5.0": {
|
|
||||||
"integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ=="
|
|
||||||
},
|
|
||||||
"@rollup/rollup-android-arm-eabi@4.28.1": {
|
|
||||||
"integrity": "sha512-2aZp8AES04KI2dy3Ss6/MDjXbwBzj+i0GqKtWXgw2/Ma6E4jJvujryO6gJAghIRVz7Vwr9Gtl/8na3nDUKpraQ=="
|
|
||||||
},
|
|
||||||
"@rollup/rollup-android-arm64@4.28.1": {
|
|
||||||
"integrity": "sha512-EbkK285O+1YMrg57xVA+Dp0tDBRB93/BZKph9XhMjezf6F4TpYjaUSuPt5J0fZXlSag0LmZAsTmdGGqPp4pQFA=="
|
|
||||||
},
|
|
||||||
"@rollup/rollup-darwin-arm64@4.28.1": {
|
|
||||||
"integrity": "sha512-prduvrMKU6NzMq6nxzQw445zXgaDBbMQvmKSJaxpaZ5R1QDM8w+eGxo6Y/jhT/cLoCvnZI42oEqf9KQNYz1fqQ=="
|
|
||||||
},
|
|
||||||
"@rollup/rollup-darwin-x64@4.28.1": {
|
|
||||||
"integrity": "sha512-WsvbOunsUk0wccO/TV4o7IKgloJ942hVFK1CLatwv6TJspcCZb9umQkPdvB7FihmdxgaKR5JyxDjWpCOp4uZlQ=="
|
|
||||||
},
|
|
||||||
"@rollup/rollup-freebsd-arm64@4.28.1": {
|
|
||||||
"integrity": "sha512-HTDPdY1caUcU4qK23FeeGxCdJF64cKkqajU0iBnTVxS8F7H/7BewvYoG+va1KPSL63kQ1PGNyiwKOfReavzvNA=="
|
|
||||||
},
|
|
||||||
"@rollup/rollup-freebsd-x64@4.28.1": {
|
|
||||||
"integrity": "sha512-m/uYasxkUevcFTeRSM9TeLyPe2QDuqtjkeoTpP9SW0XxUWfcYrGDMkO/m2tTw+4NMAF9P2fU3Mw4ahNvo7QmsQ=="
|
|
||||||
},
|
|
||||||
"@rollup/rollup-linux-arm-gnueabihf@4.28.1": {
|
|
||||||
"integrity": "sha512-QAg11ZIt6mcmzpNE6JZBpKfJaKkqTm1A9+y9O+frdZJEuhQxiugM05gnCWiANHj4RmbgeVJpTdmKRmH/a+0QbA=="
|
|
||||||
},
|
|
||||||
"@rollup/rollup-linux-arm-musleabihf@4.28.1": {
|
|
||||||
"integrity": "sha512-dRP9PEBfolq1dmMcFqbEPSd9VlRuVWEGSmbxVEfiq2cs2jlZAl0YNxFzAQS2OrQmsLBLAATDMb3Z6MFv5vOcXg=="
|
|
||||||
},
|
|
||||||
"@rollup/rollup-linux-arm64-gnu@4.28.1": {
|
|
||||||
"integrity": "sha512-uGr8khxO+CKT4XU8ZUH1TTEUtlktK6Kgtv0+6bIFSeiSlnGJHG1tSFSjm41uQ9sAO/5ULx9mWOz70jYLyv1QkA=="
|
|
||||||
},
|
|
||||||
"@rollup/rollup-linux-arm64-musl@4.28.1": {
|
|
||||||
"integrity": "sha512-QF54q8MYGAqMLrX2t7tNpi01nvq5RI59UBNx+3+37zoKX5KViPo/gk2QLhsuqok05sSCRluj0D00LzCwBikb0A=="
|
|
||||||
},
|
|
||||||
"@rollup/rollup-linux-loongarch64-gnu@4.28.1": {
|
|
||||||
"integrity": "sha512-vPul4uodvWvLhRco2w0GcyZcdyBfpfDRgNKU+p35AWEbJ/HPs1tOUrkSueVbBS0RQHAf/A+nNtDpvw95PeVKOA=="
|
|
||||||
},
|
|
||||||
"@rollup/rollup-linux-powerpc64le-gnu@4.28.1": {
|
|
||||||
"integrity": "sha512-pTnTdBuC2+pt1Rmm2SV7JWRqzhYpEILML4PKODqLz+C7Ou2apEV52h19CR7es+u04KlqplggmN9sqZlekg3R1A=="
|
|
||||||
},
|
|
||||||
"@rollup/rollup-linux-riscv64-gnu@4.28.1": {
|
|
||||||
"integrity": "sha512-vWXy1Nfg7TPBSuAncfInmAI/WZDd5vOklyLJDdIRKABcZWojNDY0NJwruY2AcnCLnRJKSaBgf/GiJfauu8cQZA=="
|
|
||||||
},
|
|
||||||
"@rollup/rollup-linux-s390x-gnu@4.28.1": {
|
|
||||||
"integrity": "sha512-/yqC2Y53oZjb0yz8PVuGOQQNOTwxcizudunl/tFs1aLvObTclTwZ0JhXF2XcPT/zuaymemCDSuuUPXJJyqeDOg=="
|
|
||||||
},
|
|
||||||
"@rollup/rollup-linux-x64-gnu@4.28.1": {
|
|
||||||
"integrity": "sha512-fzgeABz7rrAlKYB0y2kSEiURrI0691CSL0+KXwKwhxvj92VULEDQLpBYLHpF49MSiPG4sq5CK3qHMnb9tlCjBw=="
|
|
||||||
},
|
|
||||||
"@rollup/rollup-linux-x64-musl@4.28.1": {
|
|
||||||
"integrity": "sha512-xQTDVzSGiMlSshpJCtudbWyRfLaNiVPXt1WgdWTwWz9n0U12cI2ZVtWe/Jgwyv/6wjL7b66uu61Vg0POWVfz4g=="
|
|
||||||
},
|
|
||||||
"@rollup/rollup-win32-arm64-msvc@4.28.1": {
|
|
||||||
"integrity": "sha512-wSXmDRVupJstFP7elGMgv+2HqXelQhuNf+IS4V+nUpNVi/GUiBgDmfwD0UGN3pcAnWsgKG3I52wMOBnk1VHr/A=="
|
|
||||||
},
|
|
||||||
"@rollup/rollup-win32-ia32-msvc@4.28.1": {
|
|
||||||
"integrity": "sha512-ZkyTJ/9vkgrE/Rk9vhMXhf8l9D+eAhbAVbsGsXKy2ohmJaWg0LPQLnIxRdRp/bKyr8tXuPlXhIoGlEB5XpJnGA=="
|
|
||||||
},
|
|
||||||
"@rollup/rollup-win32-x64-msvc@4.28.1": {
|
|
||||||
"integrity": "sha512-ZvK2jBafvttJjoIdKm/Q/Bh7IJ1Ose9IBOwpOXcOvW3ikGTQGmKDgxTC6oCAzW6PynbkKP8+um1du81XJHZ0JA=="
|
|
||||||
},
|
|
||||||
"@types/estree@1.0.6": {
|
|
||||||
"integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw=="
|
|
||||||
},
|
|
||||||
"@types/node@22.5.4": {
|
|
||||||
"integrity": "sha512-FDuKUJQm/ju9fT/SeX/6+gBzoPzlVCzfzmGkwKvRHQVxi4BntVbyIwf6a4Xn62mrvndLiml6z/UBXIdEVjQLXg==",
|
|
||||||
"dependencies": [
|
|
||||||
"undici-types"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"@types/pg@8.11.10": {
|
|
||||||
"integrity": "sha512-LczQUW4dbOQzsH2RQ5qoeJ6qJPdrcM/DcMLoqWQkMLMsq83J5lAX3LXjdkWdpscFy67JSOWDnh7Ny/sPFykmkg==",
|
|
||||||
"dependencies": [
|
|
||||||
"@types/node",
|
|
||||||
"pg-protocol",
|
|
||||||
"pg-types@4.0.2"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"@vitest/expect@2.1.8": {
|
|
||||||
"integrity": "sha512-8ytZ/fFHq2g4PJVAtDX57mayemKgDR6X3Oa2Foro+EygiOJHUXhCqBAAKQYYajZpFoIfvBCF1j6R6IYRSIUFuw==",
|
|
||||||
"dependencies": [
|
|
||||||
"@vitest/spy",
|
|
||||||
"@vitest/utils",
|
|
||||||
"chai",
|
|
||||||
"tinyrainbow"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"@vitest/mocker@2.1.8_vite@5.4.11": {
|
|
||||||
"integrity": "sha512-7guJ/47I6uqfttp33mgo6ga5Gr1VnL58rcqYKyShoRK9ebu8T5Rs6HN3s1NABiBeVTdWNrwUMcHH54uXZBN4zA==",
|
|
||||||
"dependencies": [
|
|
||||||
"@vitest/spy",
|
|
||||||
"estree-walker",
|
|
||||||
"magic-string",
|
|
||||||
"vite"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"@vitest/pretty-format@2.1.8": {
|
|
||||||
"integrity": "sha512-9HiSZ9zpqNLKlbIDRWOnAWqgcA7xu+8YxXSekhr0Ykab7PAYFkhkwoqVArPOtJhPmYeE2YHgKZlj3CP36z2AJQ==",
|
|
||||||
"dependencies": [
|
|
||||||
"tinyrainbow"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"@vitest/runner@2.1.8": {
|
|
||||||
"integrity": "sha512-17ub8vQstRnRlIU5k50bG+QOMLHRhYPAna5tw8tYbj+jzjcspnwnwtPtiOlkuKC4+ixDPTuLZiqiWWQ2PSXHVg==",
|
|
||||||
"dependencies": [
|
|
||||||
"@vitest/utils",
|
|
||||||
"pathe"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"@vitest/snapshot@2.1.8": {
|
|
||||||
"integrity": "sha512-20T7xRFbmnkfcmgVEz+z3AU/3b0cEzZOt/zmnvZEctg64/QZbSDJEVm9fLnnlSi74KibmRsO9/Qabi+t0vCRPg==",
|
|
||||||
"dependencies": [
|
|
||||||
"@vitest/pretty-format",
|
|
||||||
"magic-string",
|
|
||||||
"pathe"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"@vitest/spy@2.1.8": {
|
|
||||||
"integrity": "sha512-5swjf2q95gXeYPevtW0BLk6H8+bPlMb4Vw/9Em4hFxDcaOxS+e0LOX4yqNxoHzMR2akEB2xfpnWUzkZokmgWDg==",
|
|
||||||
"dependencies": [
|
|
||||||
"tinyspy"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"@vitest/utils@2.1.8": {
|
|
||||||
"integrity": "sha512-dwSoui6djdwbfFmIgbIjX2ZhIoG7Ex/+xpxyiEgIGzjliY8xGkcpITKTlp6B4MgtGkF2ilvm97cPM96XZaAgcA==",
|
|
||||||
"dependencies": [
|
|
||||||
"@vitest/pretty-format",
|
|
||||||
"loupe",
|
|
||||||
"tinyrainbow"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"assertion-error@2.0.1": {
|
|
||||||
"integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA=="
|
|
||||||
},
|
|
||||||
"buffer-from@1.1.2": {
|
|
||||||
"integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
|
|
||||||
},
|
|
||||||
"cac@6.7.14": {
|
|
||||||
"integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ=="
|
|
||||||
},
|
|
||||||
"chai@5.1.2": {
|
|
||||||
"integrity": "sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==",
|
|
||||||
"dependencies": [
|
|
||||||
"assertion-error",
|
|
||||||
"check-error",
|
|
||||||
"deep-eql",
|
|
||||||
"loupe",
|
|
||||||
"pathval"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"check-error@2.1.1": {
|
|
||||||
"integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw=="
|
|
||||||
},
|
|
||||||
"debug@4.4.0": {
|
|
||||||
"integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==",
|
|
||||||
"dependencies": [
|
|
||||||
"ms"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"deep-eql@5.0.2": {
|
|
||||||
"integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q=="
|
|
||||||
},
|
|
||||||
"drizzle-kit@0.30.1_esbuild@0.19.12": {
|
|
||||||
"integrity": "sha512-HmA/NeewvHywhJ2ENXD3KvOuM/+K2dGLJfxVfIHsGwaqKICJnS+Ke2L6UcSrSrtMJLJaT0Im1Qv4TFXfaZShyw==",
|
|
||||||
"dependencies": [
|
|
||||||
"@drizzle-team/brocli",
|
|
||||||
"@esbuild-kit/esm-loader",
|
|
||||||
"esbuild@0.19.12",
|
|
||||||
"esbuild-register"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"drizzle-orm@0.38.2_@types+pg@8.11.10_pg@8.13.1": {
|
|
||||||
"integrity": "sha512-eCE3yPRAskLo1WpM9OHpFaM70tBEDsWhwR/0M3CKyztAXKR9Qs3asZlcJOEliIcUSg8GuwrlY0dmYDgmm6y5GQ==",
|
|
||||||
"dependencies": [
|
|
||||||
"@types/pg",
|
|
||||||
"pg"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"es-module-lexer@1.5.4": {
|
|
||||||
"integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw=="
|
|
||||||
},
|
|
||||||
"esbuild-register@3.6.0_esbuild@0.19.12": {
|
|
||||||
"integrity": "sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==",
|
|
||||||
"dependencies": [
|
|
||||||
"debug",
|
|
||||||
"esbuild@0.19.12"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"esbuild@0.18.20": {
|
|
||||||
"integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==",
|
|
||||||
"dependencies": [
|
|
||||||
"@esbuild/android-arm@0.18.20",
|
|
||||||
"@esbuild/android-arm64@0.18.20",
|
|
||||||
"@esbuild/android-x64@0.18.20",
|
|
||||||
"@esbuild/darwin-arm64@0.18.20",
|
|
||||||
"@esbuild/darwin-x64@0.18.20",
|
|
||||||
"@esbuild/freebsd-arm64@0.18.20",
|
|
||||||
"@esbuild/freebsd-x64@0.18.20",
|
|
||||||
"@esbuild/linux-arm@0.18.20",
|
|
||||||
"@esbuild/linux-arm64@0.18.20",
|
|
||||||
"@esbuild/linux-ia32@0.18.20",
|
|
||||||
"@esbuild/linux-loong64@0.18.20",
|
|
||||||
"@esbuild/linux-mips64el@0.18.20",
|
|
||||||
"@esbuild/linux-ppc64@0.18.20",
|
|
||||||
"@esbuild/linux-riscv64@0.18.20",
|
|
||||||
"@esbuild/linux-s390x@0.18.20",
|
|
||||||
"@esbuild/linux-x64@0.18.20",
|
|
||||||
"@esbuild/netbsd-x64@0.18.20",
|
|
||||||
"@esbuild/openbsd-x64@0.18.20",
|
|
||||||
"@esbuild/sunos-x64@0.18.20",
|
|
||||||
"@esbuild/win32-arm64@0.18.20",
|
|
||||||
"@esbuild/win32-ia32@0.18.20",
|
|
||||||
"@esbuild/win32-x64@0.18.20"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"esbuild@0.19.12": {
|
|
||||||
"integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==",
|
|
||||||
"dependencies": [
|
|
||||||
"@esbuild/aix-ppc64@0.19.12",
|
|
||||||
"@esbuild/android-arm@0.19.12",
|
|
||||||
"@esbuild/android-arm64@0.19.12",
|
|
||||||
"@esbuild/android-x64@0.19.12",
|
|
||||||
"@esbuild/darwin-arm64@0.19.12",
|
|
||||||
"@esbuild/darwin-x64@0.19.12",
|
|
||||||
"@esbuild/freebsd-arm64@0.19.12",
|
|
||||||
"@esbuild/freebsd-x64@0.19.12",
|
|
||||||
"@esbuild/linux-arm@0.19.12",
|
|
||||||
"@esbuild/linux-arm64@0.19.12",
|
|
||||||
"@esbuild/linux-ia32@0.19.12",
|
|
||||||
"@esbuild/linux-loong64@0.19.12",
|
|
||||||
"@esbuild/linux-mips64el@0.19.12",
|
|
||||||
"@esbuild/linux-ppc64@0.19.12",
|
|
||||||
"@esbuild/linux-riscv64@0.19.12",
|
|
||||||
"@esbuild/linux-s390x@0.19.12",
|
|
||||||
"@esbuild/linux-x64@0.19.12",
|
|
||||||
"@esbuild/netbsd-x64@0.19.12",
|
|
||||||
"@esbuild/openbsd-x64@0.19.12",
|
|
||||||
"@esbuild/sunos-x64@0.19.12",
|
|
||||||
"@esbuild/win32-arm64@0.19.12",
|
|
||||||
"@esbuild/win32-ia32@0.19.12",
|
|
||||||
"@esbuild/win32-x64@0.19.12"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"esbuild@0.21.5": {
|
|
||||||
"integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==",
|
|
||||||
"dependencies": [
|
|
||||||
"@esbuild/aix-ppc64@0.21.5",
|
|
||||||
"@esbuild/android-arm@0.21.5",
|
|
||||||
"@esbuild/android-arm64@0.21.5",
|
|
||||||
"@esbuild/android-x64@0.21.5",
|
|
||||||
"@esbuild/darwin-arm64@0.21.5",
|
|
||||||
"@esbuild/darwin-x64@0.21.5",
|
|
||||||
"@esbuild/freebsd-arm64@0.21.5",
|
|
||||||
"@esbuild/freebsd-x64@0.21.5",
|
|
||||||
"@esbuild/linux-arm@0.21.5",
|
|
||||||
"@esbuild/linux-arm64@0.21.5",
|
|
||||||
"@esbuild/linux-ia32@0.21.5",
|
|
||||||
"@esbuild/linux-loong64@0.21.5",
|
|
||||||
"@esbuild/linux-mips64el@0.21.5",
|
|
||||||
"@esbuild/linux-ppc64@0.21.5",
|
|
||||||
"@esbuild/linux-riscv64@0.21.5",
|
|
||||||
"@esbuild/linux-s390x@0.21.5",
|
|
||||||
"@esbuild/linux-x64@0.21.5",
|
|
||||||
"@esbuild/netbsd-x64@0.21.5",
|
|
||||||
"@esbuild/openbsd-x64@0.21.5",
|
|
||||||
"@esbuild/sunos-x64@0.21.5",
|
|
||||||
"@esbuild/win32-arm64@0.21.5",
|
|
||||||
"@esbuild/win32-ia32@0.21.5",
|
|
||||||
"@esbuild/win32-x64@0.21.5"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"estree-walker@3.0.3": {
|
|
||||||
"integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
|
|
||||||
"dependencies": [
|
|
||||||
"@types/estree"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"expect-type@1.1.0": {
|
|
||||||
"integrity": "sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA=="
|
|
||||||
},
|
|
||||||
"fsevents@2.3.3": {
|
|
||||||
"integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="
|
|
||||||
},
|
|
||||||
"get-tsconfig@4.8.1": {
|
|
||||||
"integrity": "sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==",
|
|
||||||
"dependencies": [
|
|
||||||
"resolve-pkg-maps"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"hono@4.6.14": {
|
|
||||||
"integrity": "sha512-j4VkyUp2xazGJ8eCCLN1Vm/bxdvm/j5ZuU9AIjLu9vapn2M44p9L3Ktr9Vnb2RN2QtcR/wVjZVMlT5k7GJQgPw=="
|
|
||||||
},
|
|
||||||
"loupe@3.1.2": {
|
|
||||||
"integrity": "sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg=="
|
|
||||||
},
|
|
||||||
"magic-string@0.30.17": {
|
|
||||||
"integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==",
|
|
||||||
"dependencies": [
|
|
||||||
"@jridgewell/sourcemap-codec"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"ms@2.1.3": {
|
|
||||||
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
|
|
||||||
},
|
|
||||||
"nanoid@3.3.8": {
|
|
||||||
"integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w=="
|
|
||||||
},
|
|
||||||
"obuf@1.1.2": {
|
|
||||||
"integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg=="
|
|
||||||
},
|
|
||||||
"openapi3-ts@4.4.0": {
|
|
||||||
"integrity": "sha512-9asTNB9IkKEzWMcHmVZE7Ts3kC9G7AFHfs8i7caD8HbI76gEjdkId4z/AkP83xdZsH7PLAnnbl47qZkXuxpArw==",
|
|
||||||
"dependencies": [
|
|
||||||
"yaml"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"pathe@1.1.2": {
|
|
||||||
"integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ=="
|
|
||||||
},
|
|
||||||
"pathval@2.0.0": {
|
|
||||||
"integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA=="
|
|
||||||
},
|
|
||||||
"pg-cloudflare@1.1.1": {
|
|
||||||
"integrity": "sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q=="
|
|
||||||
},
|
|
||||||
"pg-connection-string@2.7.0": {
|
|
||||||
"integrity": "sha512-PI2W9mv53rXJQEOb8xNR8lH7Hr+EKa6oJa38zsK0S/ky2er16ios1wLKhZyxzD7jUReiWokc9WK5nxSnC7W1TA=="
|
|
||||||
},
|
|
||||||
"pg-int8@1.0.1": {
|
|
||||||
"integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw=="
|
|
||||||
},
|
|
||||||
"pg-numeric@1.0.2": {
|
|
||||||
"integrity": "sha512-BM/Thnrw5jm2kKLE5uJkXqqExRUY/toLHda65XgFTBTFYZyopbKjBe29Ii3RbkvlsMoFwD+tHeGaCjjv0gHlyw=="
|
|
||||||
},
|
|
||||||
"pg-pool@3.7.0_pg@8.13.1": {
|
|
||||||
"integrity": "sha512-ZOBQForurqh4zZWjrgSwwAtzJ7QiRX0ovFkZr2klsen3Nm0aoh33Ls0fzfv3imeH/nw/O27cjdz5kzYJfeGp/g==",
|
|
||||||
"dependencies": [
|
|
||||||
"pg"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"pg-protocol@1.7.0": {
|
|
||||||
"integrity": "sha512-hTK/mE36i8fDDhgDFjy6xNOG+LCorxLG3WO17tku+ij6sVHXh1jQUJ8hYAnRhNla4QVD2H8er/FOjc/+EgC6yQ=="
|
|
||||||
},
|
|
||||||
"pg-types@2.2.0": {
|
|
||||||
"integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==",
|
|
||||||
"dependencies": [
|
|
||||||
"pg-int8",
|
|
||||||
"postgres-array@2.0.0",
|
|
||||||
"postgres-bytea@1.0.0",
|
|
||||||
"postgres-date@1.0.7",
|
|
||||||
"postgres-interval@1.2.0"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"pg-types@4.0.2": {
|
|
||||||
"integrity": "sha512-cRL3JpS3lKMGsKaWndugWQoLOCoP+Cic8oseVcbr0qhPzYD5DWXK+RZ9LY9wxRf7RQia4SCwQlXk0q6FCPrVng==",
|
|
||||||
"dependencies": [
|
|
||||||
"pg-int8",
|
|
||||||
"pg-numeric",
|
|
||||||
"postgres-array@3.0.2",
|
|
||||||
"postgres-bytea@3.0.0",
|
|
||||||
"postgres-date@2.1.0",
|
|
||||||
"postgres-interval@3.0.0",
|
|
||||||
"postgres-range"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"pg@8.13.1": {
|
|
||||||
"integrity": "sha512-OUir1A0rPNZlX//c7ksiu7crsGZTKSOXJPgtNiHGIlC9H0lO+NC6ZDYksSgBYY/thSWhnSRBv8w1lieNNGATNQ==",
|
|
||||||
"dependencies": [
|
|
||||||
"pg-cloudflare",
|
|
||||||
"pg-connection-string",
|
|
||||||
"pg-pool",
|
|
||||||
"pg-protocol",
|
|
||||||
"pg-types@2.2.0",
|
|
||||||
"pgpass"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"pgpass@1.0.5": {
|
|
||||||
"integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==",
|
|
||||||
"dependencies": [
|
|
||||||
"split2"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"picocolors@1.1.1": {
|
|
||||||
"integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="
|
|
||||||
},
|
|
||||||
"postcss@8.4.49": {
|
|
||||||
"integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==",
|
|
||||||
"dependencies": [
|
|
||||||
"nanoid",
|
|
||||||
"picocolors",
|
|
||||||
"source-map-js"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"postgres-array@2.0.0": {
|
|
||||||
"integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA=="
|
|
||||||
},
|
|
||||||
"postgres-array@3.0.2": {
|
|
||||||
"integrity": "sha512-6faShkdFugNQCLwucjPcY5ARoW1SlbnrZjmGl0IrrqewpvxvhSLHimCVzqeuULCbG0fQv7Dtk1yDbG3xv7Veog=="
|
|
||||||
},
|
|
||||||
"postgres-bytea@1.0.0": {
|
|
||||||
"integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w=="
|
|
||||||
},
|
|
||||||
"postgres-bytea@3.0.0": {
|
|
||||||
"integrity": "sha512-CNd4jim9RFPkObHSjVHlVrxoVQXz7quwNFpz7RY1okNNme49+sVyiTvTRobiLV548Hx/hb1BG+iE7h9493WzFw==",
|
|
||||||
"dependencies": [
|
|
||||||
"obuf"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"postgres-date@1.0.7": {
|
|
||||||
"integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q=="
|
|
||||||
},
|
|
||||||
"postgres-date@2.1.0": {
|
|
||||||
"integrity": "sha512-K7Juri8gtgXVcDfZttFKVmhglp7epKb1K4pgrkLxehjqkrgPhfG6OO8LHLkfaqkbpjNRnra018XwAr1yQFWGcA=="
|
|
||||||
},
|
|
||||||
"postgres-interval@1.2.0": {
|
|
||||||
"integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==",
|
|
||||||
"dependencies": [
|
|
||||||
"xtend"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"postgres-interval@3.0.0": {
|
|
||||||
"integrity": "sha512-BSNDnbyZCXSxgA+1f5UU2GmwhoI0aU5yMxRGO8CdFEcY2BQF9xm/7MqKnYoM1nJDk8nONNWDk9WeSmePFhQdlw=="
|
|
||||||
},
|
|
||||||
"postgres-range@1.1.4": {
|
|
||||||
"integrity": "sha512-i/hbxIE9803Alj/6ytL7UHQxRvZkI9O4Sy+J3HGc4F4oo/2eQAjTSNJ0bfxyse3bH0nuVesCk+3IRLaMtG3H6w=="
|
|
||||||
},
|
|
||||||
"resolve-pkg-maps@1.0.0": {
|
|
||||||
"integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw=="
|
|
||||||
},
|
|
||||||
"rollup@4.28.1": {
|
|
||||||
"integrity": "sha512-61fXYl/qNVinKmGSTHAZ6Yy8I3YIJC/r2m9feHo6SwVAVcLT5MPwOUFe7EuURA/4m0NR8lXG4BBXuo/IZEsjMg==",
|
|
||||||
"dependencies": [
|
|
||||||
"@rollup/rollup-android-arm-eabi",
|
|
||||||
"@rollup/rollup-android-arm64",
|
|
||||||
"@rollup/rollup-darwin-arm64",
|
|
||||||
"@rollup/rollup-darwin-x64",
|
|
||||||
"@rollup/rollup-freebsd-arm64",
|
|
||||||
"@rollup/rollup-freebsd-x64",
|
|
||||||
"@rollup/rollup-linux-arm-gnueabihf",
|
|
||||||
"@rollup/rollup-linux-arm-musleabihf",
|
|
||||||
"@rollup/rollup-linux-arm64-gnu",
|
|
||||||
"@rollup/rollup-linux-arm64-musl",
|
|
||||||
"@rollup/rollup-linux-loongarch64-gnu",
|
|
||||||
"@rollup/rollup-linux-powerpc64le-gnu",
|
|
||||||
"@rollup/rollup-linux-riscv64-gnu",
|
|
||||||
"@rollup/rollup-linux-s390x-gnu",
|
|
||||||
"@rollup/rollup-linux-x64-gnu",
|
|
||||||
"@rollup/rollup-linux-x64-musl",
|
|
||||||
"@rollup/rollup-win32-arm64-msvc",
|
|
||||||
"@rollup/rollup-win32-ia32-msvc",
|
|
||||||
"@rollup/rollup-win32-x64-msvc",
|
|
||||||
"@types/estree",
|
|
||||||
"fsevents"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"siginfo@2.0.0": {
|
|
||||||
"integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g=="
|
|
||||||
},
|
|
||||||
"source-map-js@1.2.1": {
|
|
||||||
"integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="
|
|
||||||
},
|
|
||||||
"source-map-support@0.5.21": {
|
|
||||||
"integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
|
|
||||||
"dependencies": [
|
|
||||||
"buffer-from",
|
|
||||||
"source-map"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"source-map@0.6.1": {
|
|
||||||
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
|
|
||||||
},
|
|
||||||
"split2@4.2.0": {
|
|
||||||
"integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg=="
|
|
||||||
},
|
|
||||||
"stackback@0.0.2": {
|
|
||||||
"integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw=="
|
|
||||||
},
|
|
||||||
"std-env@3.8.0": {
|
|
||||||
"integrity": "sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w=="
|
|
||||||
},
|
|
||||||
"tinybench@2.9.0": {
|
|
||||||
"integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg=="
|
|
||||||
},
|
|
||||||
"tinyexec@0.3.1": {
|
|
||||||
"integrity": "sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ=="
|
|
||||||
},
|
|
||||||
"tinypool@1.0.2": {
|
|
||||||
"integrity": "sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA=="
|
|
||||||
},
|
|
||||||
"tinyrainbow@1.2.0": {
|
|
||||||
"integrity": "sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ=="
|
|
||||||
},
|
|
||||||
"tinyspy@3.0.2": {
|
|
||||||
"integrity": "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q=="
|
|
||||||
},
|
|
||||||
"undici-types@6.19.8": {
|
|
||||||
"integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw=="
|
|
||||||
},
|
|
||||||
"vite-node@2.1.8": {
|
|
||||||
"integrity": "sha512-uPAwSr57kYjAUux+8E2j0q0Fxpn8M9VoyfGiRI8Kfktz9NcYMCenwY5RnZxnF1WTu3TGiYipirIzacLL3VVGFg==",
|
|
||||||
"dependencies": [
|
|
||||||
"cac",
|
|
||||||
"debug",
|
|
||||||
"es-module-lexer",
|
|
||||||
"pathe",
|
|
||||||
"vite"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"vite@5.4.11": {
|
|
||||||
"integrity": "sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==",
|
|
||||||
"dependencies": [
|
|
||||||
"esbuild@0.21.5",
|
|
||||||
"fsevents",
|
|
||||||
"postcss",
|
|
||||||
"rollup"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"vitest@2.1.8_vite@5.4.11": {
|
|
||||||
"integrity": "sha512-1vBKTZskHw/aosXqQUlVWWlGUxSJR8YtiyZDJAFeW2kPAeX6S3Sool0mjspO+kXLuxVWlEDDowBAeqeAQefqLQ==",
|
|
||||||
"dependencies": [
|
|
||||||
"@vitest/expect",
|
|
||||||
"@vitest/mocker",
|
|
||||||
"@vitest/pretty-format",
|
|
||||||
"@vitest/runner",
|
|
||||||
"@vitest/snapshot",
|
|
||||||
"@vitest/spy",
|
|
||||||
"@vitest/utils",
|
|
||||||
"chai",
|
|
||||||
"debug",
|
|
||||||
"expect-type",
|
|
||||||
"magic-string",
|
|
||||||
"pathe",
|
|
||||||
"std-env",
|
|
||||||
"tinybench",
|
|
||||||
"tinyexec",
|
|
||||||
"tinypool",
|
|
||||||
"tinyrainbow",
|
|
||||||
"vite",
|
|
||||||
"vite-node",
|
|
||||||
"why-is-node-running"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"why-is-node-running@2.3.0": {
|
|
||||||
"integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==",
|
|
||||||
"dependencies": [
|
|
||||||
"siginfo",
|
|
||||||
"stackback"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"xtend@4.0.2": {
|
|
||||||
"integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
|
|
||||||
},
|
|
||||||
"yaml@2.6.1": {
|
|
||||||
"integrity": "sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg=="
|
|
||||||
},
|
|
||||||
"zod@3.24.1": {
|
|
||||||
"integrity": "sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A=="
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"workspace": {
|
|
||||||
"dependencies": [
|
|
||||||
"jsr:@std/assert@1",
|
|
||||||
"npm:@asteasolutions/zod-to-openapi@^7.3.0",
|
|
||||||
"npm:@hono/swagger-ui@0.5",
|
|
||||||
"npm:@hono/zod-openapi@~0.18.3",
|
|
||||||
"npm:@types/pg@^8.11.10",
|
|
||||||
"npm:drizzle-kit@~0.30.1",
|
|
||||||
"npm:drizzle-orm@~0.38.2",
|
|
||||||
"npm:hono@^4.6.14",
|
|
||||||
"npm:pg@^8.13.1",
|
|
||||||
"npm:vitest@^2.1.8",
|
|
||||||
"npm:zod@^3.24.1"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
import { defineConfig } from "drizzle-kit";
|
|
||||||
|
|
||||||
export default defineConfig({
|
|
||||||
out: "./drizzle",
|
|
||||||
schema: "./src/db/schema.ts",
|
|
||||||
dialect: "postgresql",
|
|
||||||
dbCredentials: {
|
|
||||||
url: Deno.env.get("DATABASE_URL")!,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
CREATE TABLE "users" (
|
|
||||||
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
||||||
"name" text NOT NULL,
|
|
||||||
CONSTRAINT "users_name_unique" UNIQUE("name")
|
|
||||||
);
|
|
||||||
--> statement-breakpoint
|
|
||||||
CREATE TABLE "nodes" (
|
|
||||||
"id" serial PRIMARY KEY NOT NULL,
|
|
||||||
"userId" varchar NOT NULL,
|
|
||||||
"createdAt" timestamp DEFAULT now(),
|
|
||||||
"systemId" varchar NOT NULL,
|
|
||||||
"nodeId" varchar NOT NULL,
|
|
||||||
"content" "bytea" NOT NULL,
|
|
||||||
"definition" json NOT NULL,
|
|
||||||
"hash" varchar(16) NOT NULL,
|
|
||||||
"previous" varchar(16),
|
|
||||||
CONSTRAINT "nodes_hash_unique" UNIQUE("hash")
|
|
||||||
);
|
|
||||||
--> statement-breakpoint
|
|
||||||
ALTER TABLE "nodes" ADD CONSTRAINT "nodes_userId_users_name_fk" FOREIGN KEY ("userId") REFERENCES "public"."users"("name") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
||||||
ALTER TABLE "nodes" ADD CONSTRAINT "node_previous_fk" FOREIGN KEY ("previous") REFERENCES "public"."nodes"("hash") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
||||||
CREATE INDEX "user_id_idx" ON "nodes" USING btree ("userId");--> statement-breakpoint
|
|
||||||
CREATE INDEX "system_id_idx" ON "nodes" USING btree ("systemId");--> statement-breakpoint
|
|
||||||
CREATE INDEX "node_id_idx" ON "nodes" USING btree ("nodeId");--> statement-breakpoint
|
|
||||||
CREATE INDEX "hash_idx" ON "nodes" USING btree ("hash");
|
|
||||||
@@ -1,217 +0,0 @@
|
|||||||
{
|
|
||||||
"id": "15ad729d-5756-4c06-87ed-cb8b721201f9",
|
|
||||||
"prevId": "00000000-0000-0000-0000-000000000000",
|
|
||||||
"version": "7",
|
|
||||||
"dialect": "postgresql",
|
|
||||||
"tables": {
|
|
||||||
"public.users": {
|
|
||||||
"name": "users",
|
|
||||||
"schema": "",
|
|
||||||
"columns": {
|
|
||||||
"id": {
|
|
||||||
"name": "id",
|
|
||||||
"type": "uuid",
|
|
||||||
"primaryKey": true,
|
|
||||||
"notNull": true,
|
|
||||||
"default": "gen_random_uuid()"
|
|
||||||
},
|
|
||||||
"name": {
|
|
||||||
"name": "name",
|
|
||||||
"type": "text",
|
|
||||||
"primaryKey": false,
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"indexes": {},
|
|
||||||
"foreignKeys": {},
|
|
||||||
"compositePrimaryKeys": {},
|
|
||||||
"uniqueConstraints": {
|
|
||||||
"users_name_unique": {
|
|
||||||
"name": "users_name_unique",
|
|
||||||
"nullsNotDistinct": false,
|
|
||||||
"columns": [
|
|
||||||
"name"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"policies": {},
|
|
||||||
"checkConstraints": {},
|
|
||||||
"isRLSEnabled": false
|
|
||||||
},
|
|
||||||
"public.nodes": {
|
|
||||||
"name": "nodes",
|
|
||||||
"schema": "",
|
|
||||||
"columns": {
|
|
||||||
"id": {
|
|
||||||
"name": "id",
|
|
||||||
"type": "serial",
|
|
||||||
"primaryKey": true,
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
"userId": {
|
|
||||||
"name": "userId",
|
|
||||||
"type": "varchar",
|
|
||||||
"primaryKey": false,
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
"createdAt": {
|
|
||||||
"name": "createdAt",
|
|
||||||
"type": "timestamp",
|
|
||||||
"primaryKey": false,
|
|
||||||
"notNull": false,
|
|
||||||
"default": "now()"
|
|
||||||
},
|
|
||||||
"systemId": {
|
|
||||||
"name": "systemId",
|
|
||||||
"type": "varchar",
|
|
||||||
"primaryKey": false,
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
"nodeId": {
|
|
||||||
"name": "nodeId",
|
|
||||||
"type": "varchar",
|
|
||||||
"primaryKey": false,
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
"content": {
|
|
||||||
"name": "content",
|
|
||||||
"type": "bytea",
|
|
||||||
"primaryKey": false,
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
"definition": {
|
|
||||||
"name": "definition",
|
|
||||||
"type": "json",
|
|
||||||
"primaryKey": false,
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
"hash": {
|
|
||||||
"name": "hash",
|
|
||||||
"type": "varchar(16)",
|
|
||||||
"primaryKey": false,
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
"previous": {
|
|
||||||
"name": "previous",
|
|
||||||
"type": "varchar(16)",
|
|
||||||
"primaryKey": false,
|
|
||||||
"notNull": false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"indexes": {
|
|
||||||
"user_id_idx": {
|
|
||||||
"name": "user_id_idx",
|
|
||||||
"columns": [
|
|
||||||
{
|
|
||||||
"expression": "userId",
|
|
||||||
"isExpression": false,
|
|
||||||
"asc": true,
|
|
||||||
"nulls": "last"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"isUnique": false,
|
|
||||||
"concurrently": false,
|
|
||||||
"method": "btree",
|
|
||||||
"with": {}
|
|
||||||
},
|
|
||||||
"system_id_idx": {
|
|
||||||
"name": "system_id_idx",
|
|
||||||
"columns": [
|
|
||||||
{
|
|
||||||
"expression": "systemId",
|
|
||||||
"isExpression": false,
|
|
||||||
"asc": true,
|
|
||||||
"nulls": "last"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"isUnique": false,
|
|
||||||
"concurrently": false,
|
|
||||||
"method": "btree",
|
|
||||||
"with": {}
|
|
||||||
},
|
|
||||||
"node_id_idx": {
|
|
||||||
"name": "node_id_idx",
|
|
||||||
"columns": [
|
|
||||||
{
|
|
||||||
"expression": "nodeId",
|
|
||||||
"isExpression": false,
|
|
||||||
"asc": true,
|
|
||||||
"nulls": "last"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"isUnique": false,
|
|
||||||
"concurrently": false,
|
|
||||||
"method": "btree",
|
|
||||||
"with": {}
|
|
||||||
},
|
|
||||||
"hash_idx": {
|
|
||||||
"name": "hash_idx",
|
|
||||||
"columns": [
|
|
||||||
{
|
|
||||||
"expression": "hash",
|
|
||||||
"isExpression": false,
|
|
||||||
"asc": true,
|
|
||||||
"nulls": "last"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"isUnique": false,
|
|
||||||
"concurrently": false,
|
|
||||||
"method": "btree",
|
|
||||||
"with": {}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"foreignKeys": {
|
|
||||||
"nodes_userId_users_name_fk": {
|
|
||||||
"name": "nodes_userId_users_name_fk",
|
|
||||||
"tableFrom": "nodes",
|
|
||||||
"tableTo": "users",
|
|
||||||
"columnsFrom": [
|
|
||||||
"userId"
|
|
||||||
],
|
|
||||||
"columnsTo": [
|
|
||||||
"name"
|
|
||||||
],
|
|
||||||
"onDelete": "no action",
|
|
||||||
"onUpdate": "no action"
|
|
||||||
},
|
|
||||||
"node_previous_fk": {
|
|
||||||
"name": "node_previous_fk",
|
|
||||||
"tableFrom": "nodes",
|
|
||||||
"tableTo": "nodes",
|
|
||||||
"columnsFrom": [
|
|
||||||
"previous"
|
|
||||||
],
|
|
||||||
"columnsTo": [
|
|
||||||
"hash"
|
|
||||||
],
|
|
||||||
"onDelete": "no action",
|
|
||||||
"onUpdate": "no action"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"compositePrimaryKeys": {},
|
|
||||||
"uniqueConstraints": {
|
|
||||||
"nodes_hash_unique": {
|
|
||||||
"name": "nodes_hash_unique",
|
|
||||||
"nullsNotDistinct": false,
|
|
||||||
"columns": [
|
|
||||||
"hash"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"policies": {},
|
|
||||||
"checkConstraints": {},
|
|
||||||
"isRLSEnabled": false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"enums": {},
|
|
||||||
"schemas": {},
|
|
||||||
"sequences": {},
|
|
||||||
"roles": {},
|
|
||||||
"policies": {},
|
|
||||||
"views": {},
|
|
||||||
"_meta": {
|
|
||||||
"columns": {},
|
|
||||||
"schemas": {},
|
|
||||||
"tables": {}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
{
|
|
||||||
"version": "7",
|
|
||||||
"dialect": "postgresql",
|
|
||||||
"entries": [
|
|
||||||
{
|
|
||||||
"idx": 0,
|
|
||||||
"version": "7",
|
|
||||||
"when": 1734703963242,
|
|
||||||
"tag": "0000_known_kid_colt",
|
|
||||||
"breakpoints": true
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
File diff suppressed because one or more lines are too long
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user