Compare commits
5 Commits
ecbcc814ed
...
feat/drop-
| Author | SHA1 | Date | |
|---|---|---|---|
|
2904c13c41
|
|||
|
450262b4ae
|
|||
|
11de746c01
|
|||
|
83cb2bd950
|
|||
|
|
f5cea555cd |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -4,3 +4,4 @@ node_modules/
|
|||||||
# Added by cargo
|
# Added by cargo
|
||||||
|
|
||||||
/target
|
/target
|
||||||
|
.direnv/
|
||||||
|
|||||||
357
Cargo.lock
generated
357
Cargo.lock
generated
@@ -1,80 +1,176 @@
|
|||||||
# 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 = 4
|
version = 3
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "autocfg"
|
name = "autocfg"
|
||||||
version = "1.5.0"
|
version = "1.2.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
|
checksum = "f1fdabc7756949593fe60f30ec81974b613357de856987752631dea1e3394c80"
|
||||||
|
|
||||||
[[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.30.10"
|
version = "0.27.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "19fc433e8437a212d1b6f1e68c7824af3aed907da60afa994e7f542d18d12aa9"
|
checksum = "9e05e7e6723e3455f4818c7b26e855439f7546cf617ef669d1adedb8669e5cb9"
|
||||||
|
|
||||||
[[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",
|
||||||
[[package]]
|
"serde-wasm-bindgen",
|
||||||
name = "instance"
|
"wasm-bindgen",
|
||||||
version = "0.1.0"
|
"wasm-bindgen-test",
|
||||||
dependencies = [
|
"web-sys",
|
||||||
"glam",
|
|
||||||
"nodarium_macros",
|
|
||||||
"nodarium_utils",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "itoa"
|
name = "itoa"
|
||||||
version = "1.0.17"
|
version = "1.0.11"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2"
|
checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b"
|
||||||
|
|
||||||
|
[[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 = "memchr"
|
name = "max-plantarium-triangle"
|
||||||
version = "2.7.6"
|
version = "0.1.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
dependencies = [
|
||||||
checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273"
|
"console_error_panic_hook",
|
||||||
|
"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"
|
||||||
@@ -84,7 +180,7 @@ dependencies = [
|
|||||||
"quote",
|
"quote",
|
||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
"syn",
|
"syn 1.0.109",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -99,19 +195,29 @@ dependencies = [
|
|||||||
name = "nodarium_utils"
|
name = "nodarium_utils"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"console_error_panic_hook",
|
||||||
"glam",
|
"glam",
|
||||||
"noise 0.9.0",
|
"noise",
|
||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
|
"wasm-bindgen",
|
||||||
|
"web-sys",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "noise"
|
name = "nodes-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 0.9.0",
|
"noise",
|
||||||
|
"serde",
|
||||||
|
"serde-wasm-bindgen",
|
||||||
|
"wasm-bindgen",
|
||||||
|
"wasm-bindgen-test",
|
||||||
|
"web-sys",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -127,35 +233,48 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "num-traits"
|
name = "num-traits"
|
||||||
version = "0.2.19"
|
version = "0.2.18"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
|
checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a"
|
||||||
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.105"
|
version = "1.0.81"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "535d180e0ecab6268a3e718bb9fd44db66bbbc256257165fc699dadf70d16fe7"
|
checksum = "3d1597b0c024618f09a9c3b8655b7e430397a36d23fdafec26d6965e9eec3eba"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"unicode-ident",
|
"unicode-ident",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "quote"
|
name = "quote"
|
||||||
version = "1.0.43"
|
version = "1.0.36"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "dc74d9a594b72ae6656596548f56f667211f8a97b3d4c3d467150794690dc40a"
|
checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
]
|
]
|
||||||
@@ -188,76 +307,103 @@ 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.228"
|
version = "1.0.198"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e"
|
checksum = "9846a40c979031340571da2545a4e5b7c4163bdae79b301d5f86d03979451fcc"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"serde_core",
|
|
||||||
"serde_derive",
|
"serde_derive",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde_core"
|
name = "serde-wasm-bindgen"
|
||||||
version = "1.0.228"
|
version = "0.4.5"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad"
|
checksum = "e3b4c031cd0d9014307d82b8abf653c0290fbdaeb4c02d00c63cf52f728628bf"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"serde_derive",
|
"js-sys",
|
||||||
|
"serde",
|
||||||
|
"wasm-bindgen",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde_derive"
|
name = "serde_derive"
|
||||||
version = "1.0.228"
|
version = "1.0.198"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79"
|
checksum = "e88edab869b01783ba905e7d0153f9fc1a6505a96e4ad3018011eedb838566d9"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
"syn",
|
"syn 2.0.60",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde_json"
|
name = "serde_json"
|
||||||
version = "1.0.149"
|
version = "1.0.116"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86"
|
checksum = "3e17db7126d17feb94eb3fad46bf1a96b034e8aacbc2e775fe81505f8b0b2813"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"itoa",
|
"itoa",
|
||||||
"memchr",
|
"ryu",
|
||||||
"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 = "2.0.114"
|
version = "1.0.109"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d4d107df263a3013ef9b1879b0df87d706ff80f65a86ea879bd9c31f9b307c2a"
|
checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
@@ -265,30 +411,119 @@ dependencies = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "triangle"
|
name = "syn"
|
||||||
version = "0.1.0"
|
version = "2.0.60"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "909518bc7b1c9b779f1bbf07f2929d35af9f0f37e47c6e9ef7f9dddc1e1821f3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"nodarium_macros",
|
"proc-macro2",
|
||||||
"nodarium_utils",
|
"quote",
|
||||||
|
"unicode-ident",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "unicode-ident"
|
name = "unicode-ident"
|
||||||
version = "1.0.22"
|
version = "1.0.12"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5"
|
checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "vec3"
|
name = "wasm-bindgen"
|
||||||
version = "0.1.0"
|
version = "0.2.92"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"nodarium_macros",
|
"cfg-if",
|
||||||
"nodarium_utils",
|
"wasm-bindgen-macro",
|
||||||
"serde",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "zmij"
|
name = "wasm-bindgen-backend"
|
||||||
version = "1.0.15"
|
version = "0.2.92"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "94f63c051f4fe3c1509da62131a678643c5b6fbdc9273b2b79d4378ebda003d2"
|
checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da"
|
||||||
|
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,8 +22,7 @@
|
|||||||
"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,7 +5,6 @@
|
|||||||
<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>
|
||||||
|
|||||||
2
app/src/lib/config.ts
Normal file
2
app/src/lib/config.ts
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
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 { SvelteSet } from "svelte/reactivity";
|
import { SvelteMap, SvelteSet } from "svelte/reactivity";
|
||||||
import type { GraphManager } from "./graph-manager.svelte";
|
import type { GraphManager } from "./graph-manager.svelte";
|
||||||
import type { OrthographicCamera } from "three";
|
import type { Mesh, OrthographicCamera, Vector3 } from "three";
|
||||||
|
|
||||||
|
|
||||||
const graphStateKey = Symbol("graph-state");
|
const graphStateKey = Symbol("graph-state");
|
||||||
@@ -46,6 +46,8 @@ 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),
|
||||||
@@ -97,6 +99,14 @@ 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,16 +112,38 @@ 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;
|
||||||
|
|
||||||
@@ -312,6 +334,7 @@ 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;
|
||||||
}
|
}
|
||||||
@@ -397,6 +420,7 @@ 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/node.wasm`);
|
const filePath = path.resolve(`../nodes/${id}/pkg/index_bg.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,
|
||||||
private cache?: SyncCache<Int32Array>,
|
public cache?: SyncCache<Int32Array>,
|
||||||
) {
|
) {
|
||||||
this.cache = undefined;
|
this.cache = undefined;
|
||||||
}
|
}
|
||||||
@@ -244,14 +244,13 @@ 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 && node.id !== outputNode.id) {
|
if (this.cache) {
|
||||||
this.cache.set(inputHash, results[node.id]);
|
this.cache.set(inputHash, results[node.id]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -13,6 +13,22 @@ 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,5 +11,11 @@ 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,6 +87,19 @@ 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,7 +2,14 @@
|
|||||||
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,6 +42,25 @@
|
|||||||
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!);
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +0,0 @@
|
|||||||
<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,92 +1,12 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import NodeHTML from "$lib/graph-interface/node/NodeHTML.svelte";
|
import Grid from "$lib/grid";
|
||||||
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>
|
||||||
<pre>
|
|
||||||
<code>
|
|
||||||
{JSON.stringify(nodeInstance?.props)}
|
|
||||||
</code>
|
|
||||||
</pre>
|
|
||||||
</Grid.Cell>
|
|
||||||
|
|
||||||
<Grid.Cell>
|
|
||||||
<div class="h-screen w-[80vw] overflow-y-auto">
|
|
||||||
{#if nodeWasm}
|
|
||||||
<Code wasm={nodeWasm} />
|
|
||||||
{/if}
|
|
||||||
</div>
|
|
||||||
</Grid.Cell>
|
|
||||||
</Grid.Row>
|
|
||||||
|
|
||||||
<Sidebar>
|
<Sidebar>
|
||||||
<Panel
|
<Panel
|
||||||
id="node-store"
|
id="node-store"
|
||||||
@@ -94,27 +14,16 @@
|
|||||||
title="Node Store"
|
title="Node Store"
|
||||||
icon="i-[tabler--database]"
|
icon="i-[tabler--database]"
|
||||||
>
|
>
|
||||||
<div class="p-4 flex flex-col gap-2">
|
<div class="p-4">
|
||||||
{#await nodeRegistry.fetchCollection("max/plantarium")}
|
<input type="text" class="bg-red rounded-sm p-2" />
|
||||||
<p>Loading Nodes...</p>
|
|
||||||
{:then result}
|
|
||||||
{#each result.nodes as n}
|
|
||||||
<button
|
|
||||||
class="cursor-pointer p-2 bg-layer-1 {activeNode.value === n.id
|
|
||||||
? 'outline outline-offset-1'
|
|
||||||
: ''}"
|
|
||||||
onclick={() => (activeNode.value = n.id)}>{n.id}</button
|
|
||||||
>
|
|
||||||
{/each}
|
|
||||||
{/await}
|
|
||||||
</div>
|
</div>
|
||||||
</Panel>
|
</Panel>
|
||||||
</Sidebar>
|
</Sidebar>
|
||||||
|
</Grid.Cell>
|
||||||
|
</Grid.Row>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
:global body {
|
:global body {
|
||||||
height: 100vh;
|
height: 100vh;
|
||||||
width: 100vw;
|
|
||||||
overflow: hidden;
|
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -1,26 +0,0 @@
|
|||||||
<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
Normal file
27
flake.lock
generated
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
{
|
||||||
|
"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
Normal file
40
flake.nix
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
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,8 +11,18 @@ 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": "cargo build --target wasm32-unknown-unknown --release && mkdir -p pkg && cp ../../../../target/wasm32-unknown-unknown/release/out.wasm ./pkg/node.wasm",
|
"build": "wasm-pack build --release --out-name index --no-default-features",
|
||||||
"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'"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
13
nodes/max/plantarium/.template/tests/web.rs
Normal file
13
nodes/max/plantarium/.template/tests/web.rs
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
//! 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,6 +7,22 @@ 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": "cargo build --target wasm32-unknown-unknown --release && mkdir -p pkg && cp ../../../../target/wasm32-unknown-unknown/release/box.wasm ./pkg/node.wasm",
|
"build": "wasm-pack build --release --out-name index --no-default-features",
|
||||||
"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,15 +1,18 @@
|
|||||||
use nodarium_macros::nodarium_definition_file;
|
use nodarium_macros::include_definition_file;
|
||||||
use nodarium_macros::nodarium_execute;
|
|
||||||
use nodarium_utils::{
|
use nodarium_utils::{
|
||||||
encode_float, evaluate_float, geometry::calculate_normals,log,
|
concat_args, encode_float, evaluate_float, geometry::calculate_normals, log, set_panic_hook,
|
||||||
split_args, wrap_arg,
|
split_args, wrap_arg,
|
||||||
};
|
};
|
||||||
|
use wasm_bindgen::prelude::*;
|
||||||
|
|
||||||
nodarium_definition_file!("src/input.json");
|
include_definition_file!("src/input.json");
|
||||||
|
|
||||||
#[nodarium_execute]
|
#[rustfmt::skip]
|
||||||
|
#[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);
|
||||||
@@ -19,6 +22,7 @@ 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 = [
|
||||||
|
|
||||||
|
|||||||
13
nodes/max/plantarium/box/tests/web.rs
Normal file
13
nodes/max/plantarium/box/tests/web.rs
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
//! 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,6 +7,23 @@ 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": "cargo build --target wasm32-unknown-unknown --release && mkdir -p pkg && cp ../../../../target/wasm32-unknown-unknown/release/branch.wasm ./pkg/node.wasm",
|
"build": "wasm-pack build --release --out-name index --no-default-features",
|
||||||
"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,19 +1,20 @@
|
|||||||
use nodarium_macros::nodarium_definition_file;
|
use nodarium_macros::include_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, split_args,
|
log, set_panic_hook, split_args,
|
||||||
};
|
};
|
||||||
|
|
||||||
use std::f32::consts::PI;
|
use std::f32::consts::PI;
|
||||||
|
use wasm_bindgen::prelude::*;
|
||||||
|
|
||||||
nodarium_definition_file!("src/input.json");
|
include_definition_file!("src/input.json");
|
||||||
|
|
||||||
#[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 paths = split_args(args[0]);
|
let paths = split_args(args[0]);
|
||||||
|
|||||||
13
nodes/max/plantarium/branch/tests/web.rs
Normal file
13
nodes/max/plantarium/branch/tests/web.rs
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
//! 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,6 +7,21 @@ 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": "cargo build --target wasm32-unknown-unknown --release && mkdir -p pkg && cp ../../../../target/wasm32-unknown-unknown/release/float.wasm ./pkg/node.wasm",
|
"build": "wasm-pack build --release --out-name index --no-default-features",
|
||||||
"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::nodarium_definition_file;
|
use nodarium_macros::include_definition_file;
|
||||||
use nodarium_macros::nodarium_execute;
|
use wasm_bindgen::prelude::*;
|
||||||
|
|
||||||
nodarium_definition_file!("src/input.json");
|
include_definition_file!("src/input.json");
|
||||||
|
|
||||||
#[nodarium_execute]
|
#[wasm_bindgen]
|
||||||
pub fn execute(args: &[i32]) -> Vec<i32> {
|
pub fn execute(args: &[i32]) -> Vec<i32> {
|
||||||
args.into()
|
args.into()
|
||||||
}
|
}
|
||||||
|
|||||||
13
nodes/max/plantarium/float/tests/web.rs
Normal file
13
nodes/max/plantarium/float/tests/web.rs
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
//! 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,7 +7,24 @@ 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" }
|
||||||
glam = "0.30.10"
|
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"
|
||||||
|
glam = "0.27.0"
|
||||||
|
|
||||||
|
[dev-dependencies]
|
||||||
|
wasm-bindgen-test = "0.3.34"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "cargo build --target wasm32-unknown-unknown --release && mkdir -p pkg && cp ../../../../target/wasm32-unknown-unknown/release/gravity.wasm ./pkg/node.wasm",
|
"build": "wasm-pack build --release --out-name index --no-default-features",
|
||||||
"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,22 @@
|
|||||||
use glam::Vec3;
|
use glam::Vec3;
|
||||||
use nodarium_macros::nodarium_definition_file;
|
use nodarium_macros::include_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, split_args,
|
log, reset_call_count, set_panic_hook, split_args,
|
||||||
};
|
};
|
||||||
|
use wasm_bindgen::prelude::*;
|
||||||
|
|
||||||
nodarium_definition_file!("src/input.json");
|
include_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
|
||||||
}
|
}
|
||||||
|
|
||||||
#[nodarium_execute]
|
#[wasm_bindgen]
|
||||||
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);
|
||||||
|
|||||||
13
nodes/max/plantarium/gravity/tests/web.rs
Normal file
13
nodes/max/plantarium/gravity/tests/web.rs
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
//! 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 = "instance"
|
name = "nodarium_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,7 +7,23 @@ 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" }
|
||||||
glam = "0.30.10"
|
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": "cargo build --target wasm32-unknown-unknown --release && mkdir -p pkg && cp ../../../../target/wasm32-unknown-unknown/release/instance.wasm ./pkg/node.wasm",
|
"build": "wasm-pack build --release --out-name index --no-default-features",
|
||||||
"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,20 @@
|
|||||||
use glam::{Mat4, Quat, Vec3};
|
use glam::{Mat4, Quat, Vec3};
|
||||||
use nodarium_macros::nodarium_execute;
|
use nodarium_macros::include_definition_file;
|
||||||
use nodarium_macros::nodarium_definition_file;
|
|
||||||
use nodarium_utils::{
|
use nodarium_utils::{
|
||||||
concat_args, evaluate_float, evaluate_int,
|
concat_args, encode_float, evaluate_float, evaluate_int,
|
||||||
geometry::{
|
geometry::{
|
||||||
create_instance_data, wrap_geometry_data, wrap_instance_data, wrap_path,
|
calculate_normals, create_instance_data, wrap_geometry_data, wrap_instance_data, wrap_path,
|
||||||
},
|
},
|
||||||
log, split_args,
|
log, set_panic_hook, split_args, wrap_arg,
|
||||||
};
|
};
|
||||||
|
use wasm_bindgen::prelude::*;
|
||||||
|
|
||||||
nodarium_definition_file!("src/input.json");
|
include_definition_file!("src/input.json");
|
||||||
|
|
||||||
#[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 mut inputs = split_args(args[0]);
|
let mut inputs = split_args(args[0]);
|
||||||
log!("WASM(instance): inputs: {:?}", inputs);
|
log!("WASM(instance): inputs: {:?}", inputs);
|
||||||
|
|||||||
13
nodes/max/plantarium/instance/tests/web.rs
Normal file
13
nodes/max/plantarium/instance/tests/web.rs
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
//! 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,6 +7,17 @@ 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": "cargo build --target wasm32-unknown-unknown --release && mkdir -p pkg && cp ../../../../target/wasm32-unknown-unknown/release/math.wasm ./pkg/node.wasm",
|
"build": "wasm-pack build --release --out-name index --no-default-features",
|
||||||
"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 +1,12 @@
|
|||||||
use nodarium_macros::nodarium_definition_file;
|
use nodarium_macros::include_definition_file;
|
||||||
use nodarium_macros::nodarium_execute;
|
use nodarium_utils::{concat_args, set_panic_hook, split_args};
|
||||||
use nodarium_utils::{
|
use wasm_bindgen::prelude::*;
|
||||||
concat_args, split_args
|
|
||||||
};
|
|
||||||
|
|
||||||
#[nodarium_execute]
|
include_definition_file!("src/input.json");
|
||||||
|
|
||||||
|
#[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");
|
|
||||||
|
|||||||
13
nodes/max/plantarium/math/tests/web.rs
Normal file
13
nodes/max/plantarium/math/tests/web.rs
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
//! 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 = "noise"
|
name = "nodes-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,8 +7,24 @@ 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": "cargo build --target wasm32-unknown-unknown --release && mkdir -p pkg && cp ../../../../target/wasm32-unknown-unknown/release/noise.wasm ./pkg/node.wasm",
|
"build": "wasm-pack build --release --out-name index --no-default-features",
|
||||||
"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,19 +1,21 @@
|
|||||||
use nodarium_macros::nodarium_definition_file;
|
use nodarium_macros::include_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,
|
concat_args, evaluate_float, evaluate_int, evaluate_vec3, geometry::wrap_path_mut, log,
|
||||||
reset_call_count, split_args,
|
reset_call_count, set_panic_hook, split_args,
|
||||||
};
|
};
|
||||||
use noise::{HybridMulti, MultiFractal, NoiseFn, OpenSimplex};
|
use noise::{HybridMulti, MultiFractal, NoiseFn, OpenSimplex};
|
||||||
|
use wasm_bindgen::prelude::*;
|
||||||
|
|
||||||
nodarium_definition_file!("src/input.json");
|
include_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)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[nodarium_execute]
|
#[wasm_bindgen]
|
||||||
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);
|
||||||
|
|||||||
13
nodes/max/plantarium/noise/tests/web.rs
Normal file
13
nodes/max/plantarium/noise/tests/web.rs
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
//! 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,6 +7,24 @@ 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": "cargo build --target wasm32-unknown-unknown --release && mkdir -p pkg && cp ../../../../target/wasm32-unknown-unknown/release/output.wasm ./pkg/node.wasm",
|
"build": "wasm-pack build --release --out-name index --no-default-features",
|
||||||
"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,15 +1,17 @@
|
|||||||
use nodarium_macros::nodarium_definition_file;
|
use nodarium_macros::include_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, split_args,
|
log, set_panic_hook, split_args,
|
||||||
};
|
};
|
||||||
|
use wasm_bindgen::prelude::*;
|
||||||
|
|
||||||
nodarium_definition_file!("src/inputs.json");
|
include_definition_file!("src/inputs.json");
|
||||||
|
|
||||||
#[nodarium_execute]
|
#[wasm_bindgen]
|
||||||
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);
|
||||||
|
|||||||
13
nodes/max/plantarium/output/tests/web.rs
Normal file
13
nodes/max/plantarium/output/tests/web.rs
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
//! 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,7 +7,21 @@ 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": "cargo build --target wasm32-unknown-unknown --release && mkdir -p pkg && cp ../../../../target/wasm32-unknown-unknown/release/random.wasm ./pkg/node.wasm",
|
"build": "wasm-pack build --release --out-name index --no-default-features",
|
||||||
"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,11 +1,12 @@
|
|||||||
use nodarium_macros::nodarium_definition_file;
|
use nodarium_macros::include_definition_file;
|
||||||
use nodarium_macros::nodarium_execute;
|
use nodarium_utils::{concat_args, set_panic_hook, split_args};
|
||||||
use nodarium_utils::{concat_args, split_args};
|
use wasm_bindgen::prelude::*;
|
||||||
|
|
||||||
nodarium_definition_file!("src/definition.json");
|
include_definition_file!("src/definition.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![&[1], args[0], args[1], args[2]])
|
concat_args(vec![&[1], args[0], args[1], args[2]])
|
||||||
}
|
}
|
||||||
|
|||||||
13
nodes/max/plantarium/random/tests/web.rs
Normal file
13
nodes/max/plantarium/random/tests/web.rs
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
//! 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,8 +7,23 @@ 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"] }
|
||||||
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": "cargo build --target wasm32-unknown-unknown --release && mkdir -p pkg && cp ../../../../target/wasm32-unknown-unknown/release/rotate.wasm ./pkg/node.wasm",
|
"build": "wasm-pack build --release --out-name index --no-default-features",
|
||||||
"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,15 +1,16 @@
|
|||||||
use glam::{Mat4, Vec3};
|
use glam::{Mat4, Vec3};
|
||||||
use nodarium_macros::nodarium_definition_file;
|
use nodarium_macros::include_definition_file;
|
||||||
use nodarium_macros::nodarium_execute;
|
|
||||||
use nodarium_utils::{
|
use nodarium_utils::{
|
||||||
concat_args, evaluate_float, evaluate_int, geometry::wrap_path_mut, log,
|
concat_args, evaluate_float, evaluate_int, geometry::wrap_path_mut, log, set_panic_hook,
|
||||||
split_args,
|
split_args,
|
||||||
};
|
};
|
||||||
|
use wasm_bindgen::prelude::*;
|
||||||
|
|
||||||
nodarium_definition_file!("src/input.json");
|
include_definition_file!("src/input.json");
|
||||||
|
|
||||||
#[nodarium_execute]
|
#[wasm_bindgen]
|
||||||
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);
|
||||||
|
|
||||||
|
|||||||
13
nodes/max/plantarium/rotate/tests/web.rs
Normal file
13
nodes/max/plantarium/rotate/tests/web.rs
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
//! 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,6 +7,23 @@ 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": "cargo build --target wasm32-unknown-unknown --release && mkdir -p pkg && cp ../../../../target/wasm32-unknown-unknown/release/stem.wasm ./pkg/node.wasm",
|
"build": "wasm-pack build --release --out-name index --no-default-features",
|
||||||
"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,15 +1,17 @@
|
|||||||
use nodarium_macros::nodarium_definition_file;
|
use nodarium_macros::include_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, split_args,
|
log, reset_call_count, set_panic_hook, split_args,
|
||||||
};
|
};
|
||||||
|
use wasm_bindgen::prelude::*;
|
||||||
|
|
||||||
nodarium_definition_file!("src/input.json");
|
include_definition_file!("src/input.json");
|
||||||
|
|
||||||
#[nodarium_execute]
|
#[wasm_bindgen]
|
||||||
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);
|
||||||
|
|||||||
13
nodes/max/plantarium/stem/tests/web.rs
Normal file
13
nodes/max/plantarium/stem/tests/web.rs
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
//! 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 = "triangle"
|
name = "max-plantarium-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,6 +7,22 @@ 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": "cargo build --target wasm32-unknown-unknown --release && mkdir -p pkg && cp ../../../../target/wasm32-unknown-unknown/release/triangle.wasm ./pkg/node.wasm",
|
"build": "wasm-pack build --release --out-name index --no-default-features",
|
||||||
"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,25 @@
|
|||||||
use nodarium_macros::nodarium_definition_file;
|
use nodarium_macros::include_definition_file;
|
||||||
use nodarium_macros::nodarium_execute;
|
|
||||||
use nodarium_utils::{
|
use nodarium_utils::{
|
||||||
decode_float, encode_float, evaluate_int, split_args, wrap_arg, log
|
decode_float, encode_float, evaluate_int, set_panic_hook, split_args, wrap_arg,
|
||||||
};
|
};
|
||||||
|
use wasm_bindgen::prelude::*;
|
||||||
|
use web_sys::console;
|
||||||
|
|
||||||
nodarium_definition_file!("src/input.json");
|
include_definition_file!("src/input.json");
|
||||||
|
|
||||||
#[nodarium_execute]
|
#[rustfmt::skip]
|
||||||
|
#[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);
|
||||||
|
|
||||||
log!("WASM(triangle): input: {:?} -> {}", args[0],decoded);
|
console::log_1(&format!("WASM(triangle): input: {:?} -> {}", args[0],decoded).into());
|
||||||
|
|
||||||
// [[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(&[
|
||||||
|
|||||||
13
nodes/max/plantarium/triangle/tests/web.rs
Normal file
13
nodes/max/plantarium/triangle/tests/web.rs
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
//! 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 = "vec3"
|
name = "max-plantarium-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,8 +7,22 @@ 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": "cargo build --target wasm32-unknown-unknown --release && mkdir -p pkg && cp ../../../../target/wasm32-unknown-unknown/release/vec3.wasm ./pkg/node.wasm",
|
"build": "wasm-pack build --release --out-name index --no-default-features",
|
||||||
"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::nodarium_definition_file;
|
use nodarium_macros::include_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::*;
|
||||||
|
|
||||||
nodarium_definition_file!("src/input.json");
|
include_definition_file!("src/input.json");
|
||||||
|
|
||||||
#[nodarium_execute]
|
#[wasm_bindgen]
|
||||||
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);
|
||||||
|
|||||||
13
nodes/max/plantarium/vec3/tests/web.rs
Normal file
13
nodes/max/plantarium/vec3/tests/web.rs
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
//! 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 = "2.0", features = ["full"] }
|
syn = { version = "1.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,7 +5,32 @@ 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;
|
use syn::{parse_macro_input, LitStr};
|
||||||
|
|
||||||
|
#[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
|
||||||
@@ -16,120 +41,39 @@ fn add_line_numbers(input: String) -> String {
|
|||||||
.join("\n");
|
.join("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
#[proc_macro_attribute]
|
|
||||||
pub fn nodarium_execute(_attr: TokenStream, item: TokenStream) -> TokenStream {
|
|
||||||
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;
|
|
||||||
|
|
||||||
let first_arg_ident = if let Some(syn::FnArg::Typed(pat_type)) = input_fn.sig.inputs.first() {
|
|
||||||
if let syn::Pat::Ident(pat_ident) = &*pat_type.pat {
|
|
||||||
&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)");
|
|
||||||
};
|
|
||||||
|
|
||||||
// We create a wrapper that handles the C ABI and pointer math
|
|
||||||
let expanded = quote! {
|
|
||||||
extern "C" {
|
|
||||||
fn host_log_panic(ptr: *const u8, len: usize);
|
|
||||||
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]
|
#[proc_macro]
|
||||||
pub fn nodarium_definition_file(input: TokenStream) -> TokenStream {
|
pub fn include_definition_file(input: TokenStream) -> TokenStream {
|
||||||
let path_lit = syn::parse_macro_input!(input as syn::LitStr);
|
let file_path = syn::parse_macro_input!(input as syn::LitStr).value();
|
||||||
let file_path = path_lit.value();
|
|
||||||
|
|
||||||
|
// Retrieve the directory containing the Cargo.toml file
|
||||||
let project_dir = env::var("CARGO_MANIFEST_DIR").unwrap();
|
let project_dir = env::var("CARGO_MANIFEST_DIR").unwrap();
|
||||||
let full_path = Path::new(&project_dir).join(&file_path);
|
let full_path = Path::new(&project_dir).join(&file_path);
|
||||||
|
|
||||||
let json_content = fs::read_to_string(&full_path).unwrap_or_else(|err| {
|
// Read the JSON file content
|
||||||
panic!("Failed to read JSON file at '{}/{}': {}", project_dir, file_path, err)
|
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| {
|
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()))
|
panic!(
|
||||||
|
"JSON file contains invalid JSON: \n{} \n{}",
|
||||||
|
err,
|
||||||
|
add_line_numbers(json_content.clone())
|
||||||
|
)
|
||||||
});
|
});
|
||||||
|
|
||||||
// We use the span from the input path literal
|
// Generate the function that returns the JSON string
|
||||||
let bytes = syn::LitByteStr::new(json_content.as_bytes(), path_lit.span());
|
|
||||||
let len = json_content.len();
|
|
||||||
|
|
||||||
let expanded = quote! {
|
let expanded = quote! {
|
||||||
#[link_section = "nodarium_definition"]
|
#[wasm_bindgen]
|
||||||
static DEFINITION_DATA: [u8; #len] = *#bytes;
|
pub fn get_definition() -> String {
|
||||||
|
String::from(#json_content)
|
||||||
#[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,9 +13,10 @@ 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,
|
||||||
private cache?: AsyncCache<ArrayBuffer | string>,
|
public cache?: AsyncCache<ArrayBuffer | string>,
|
||||||
) { }
|
) { }
|
||||||
|
|
||||||
async fetchJson(url: string, skipCache = false) {
|
async fetchJson(url: string, skipCache = false) {
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ 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,30 +40,6 @@
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@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,11 +6,14 @@ 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"
|
||||||
|
|
||||||
[lib]
|
[features]
|
||||||
crate-type = ["rlib"]
|
default = ["console_error_panic_hook"]
|
||||||
|
|
||||||
[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"] }
|
||||||
glam = "0.30.10"
|
console_error_panic_hook = { version = "0.1.7", optional = true }
|
||||||
|
glam = "0.27.0"
|
||||||
noise = "0.9.0"
|
noise = "0.9.0"
|
||||||
|
|||||||
@@ -109,12 +109,10 @@ 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,22 +6,12 @@ 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 {
|
||||||
($($t:tt)*) => {{
|
($($arg:tt)*) => {{
|
||||||
let msg = std::format!($($t)*);
|
use web_sys::console;
|
||||||
#[cfg(target_arch = "wasm32")]
|
console::log_1(&format!($($arg)*).into());
|
||||||
unsafe {
|
|
||||||
$crate::host_log(msg.as_ptr(), msg.len());
|
|
||||||
}
|
|
||||||
#[cfg(not(target_arch = "wasm32"))]
|
|
||||||
println!("{}", msg);
|
|
||||||
}}
|
}}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -33,3 +23,13 @@ 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,55 +1,256 @@
|
|||||||
interface NodariumExports extends WebAssembly.Exports {
|
//@ts-nocheck
|
||||||
memory: WebAssembly.Memory;
|
import { NodeDefinition } from "@nodarium/types";
|
||||||
execute: (ptr: number, len: number) => number;
|
|
||||||
__free: (ptr: number, len: number) => void;
|
|
||||||
__alloc: (len: number) => number;
|
|
||||||
}
|
|
||||||
|
|
||||||
export function createWasmWrapper(buffer: ArrayBuffer) {
|
const cachedTextDecoder = new TextDecoder("utf-8", {
|
||||||
let exports: NodariumExports;
|
ignoreBOM: true,
|
||||||
|
fatal: true,
|
||||||
|
});
|
||||||
|
const cachedTextEncoder = new TextEncoder();
|
||||||
|
|
||||||
const importObject = {
|
const encodeString =
|
||||||
env: {
|
typeof cachedTextEncoder.encodeInto === "function"
|
||||||
host_log_panic: (ptr: number, len: number) => {
|
? function (arg, view) {
|
||||||
if (!exports) return;
|
return cachedTextEncoder.encodeInto(arg, view);
|
||||||
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,
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
const module = new WebAssembly.Module(buffer);
|
function createWrapper() {
|
||||||
const instance = new WebAssembly.Instance(module, importObject);
|
let wasm: any;
|
||||||
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) {
|
||||||
const inPtr = exports.__alloc(args.length);
|
try {
|
||||||
new Int32Array(exports.memory.buffer).set(args, inPtr / 4);
|
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
|
||||||
|
const ptr0 = passArray32ToWasm0(args, wasm.__wbindgen_malloc);
|
||||||
const outPtr = exports.execute(inPtr, args.length);
|
const len0 = WASM_VECTOR_LEN;
|
||||||
|
wasm.execute(retptr, ptr0, len0);
|
||||||
const i32Result = new Int32Array(exports.memory.buffer);
|
var r0 = getInt32Memory0()[retptr / 4 + 0];
|
||||||
const outLen = i32Result[outPtr / 4];
|
var r1 = getInt32Memory0()[retptr / 4 + 1];
|
||||||
const out = i32Result.slice(outPtr / 4 + 1, outPtr / 4 + 1 + outLen);
|
var v2 = getArrayI32FromWasm0(r0, r1).slice();
|
||||||
|
wasm.__wbindgen_free(r0, r1 * 4, 4);
|
||||||
exports.__free(inPtr, args.length);
|
return v2;
|
||||||
|
} finally {
|
||||||
return out;
|
wasm.__wbindgen_add_to_stack_pointer(16);
|
||||||
}
|
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return { execute, get_definition };
|
function passStringToWasm0(
|
||||||
|
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,9 +49,6 @@ 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
|
||||||
@@ -2577,10 +2574,6 @@ 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==}
|
||||||
|
|
||||||
@@ -4937,8 +4930,6 @@ 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
store/.env
Normal file
1
store/.env
Normal file
@@ -0,0 +1 @@
|
|||||||
|
DATABASE_URL=postgres://nodarium:nodarium@postgres-db:5432/nodarium
|
||||||
13
store/Dockerfile
Normal file
13
store/Dockerfile
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
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"]
|
||||||
65
store/bin/upload.ts
Normal file
65
store/bin/upload.ts
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
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);
|
||||||
|
}
|
||||||
29
store/compose.yml
Normal file
29
store/compose.yml
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
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:
|
||||||
22
store/deno.json
Normal file
22
store/deno.json
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"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
Normal file
883
store/deno.lock
generated
Normal file
@@ -0,0 +1,883 @@
|
|||||||
|
{
|
||||||
|
"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"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
11
store/drizzle.config.ts
Normal file
11
store/drizzle.config.ts
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
import { defineConfig } from "drizzle-kit";
|
||||||
|
|
||||||
|
export default defineConfig({
|
||||||
|
out: "./drizzle",
|
||||||
|
schema: "./src/db/schema.ts",
|
||||||
|
dialect: "postgresql",
|
||||||
|
dbCredentials: {
|
||||||
|
url: Deno.env.get("DATABASE_URL")!,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
25
store/drizzle/0000_known_kid_colt.sql
Normal file
25
store/drizzle/0000_known_kid_colt.sql
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
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");
|
||||||
217
store/drizzle/meta/0000_snapshot.json
Normal file
217
store/drizzle/meta/0000_snapshot.json
Normal file
@@ -0,0 +1,217 @@
|
|||||||
|
{
|
||||||
|
"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": {}
|
||||||
|
}
|
||||||
|
}
|
||||||
13
store/drizzle/meta/_journal.json
Normal file
13
store/drizzle/meta/_journal.json
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
"version": "7",
|
||||||
|
"dialect": "postgresql",
|
||||||
|
"entries": [
|
||||||
|
{
|
||||||
|
"idx": 0,
|
||||||
|
"version": "7",
|
||||||
|
"when": 1734703963242,
|
||||||
|
"tag": "0000_known_kid_colt",
|
||||||
|
"breakpoints": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
1
store/openapi.json
Normal file
1
store/openapi.json
Normal file
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