Initial commit

This commit is contained in:
august kline 2024-09-12 22:12:40 -04:00
commit 6c5d621cc5
17 changed files with 5083 additions and 0 deletions

29
.gitignore vendored Normal file
View File

@ -0,0 +1,29 @@
target/
*.bin
result
# Logs
log
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
node_modules
dist
dist-ssr
*.local
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?

894
george/Cargo.lock generated Normal file
View File

@ -0,0 +1,894 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 3
[[package]]
name = "anyhow"
version = "1.0.86"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da"
[[package]]
name = "autocfg"
version = "1.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0"
[[package]]
name = "bitflags"
version = "1.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
[[package]]
name = "bitflags"
version = "2.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1"
[[package]]
name = "bumpalo"
version = "3.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c"
[[package]]
name = "cc"
version = "1.0.103"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2755ff20a1d93490d26ba33a6f092a38a508398a5320df5d4b3014fcccce9410"
[[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]]
name = "dlib"
version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412"
dependencies = [
"libloading",
]
[[package]]
name = "downcast-rs"
version = "1.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2"
[[package]]
name = "equivalent"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
[[package]]
name = "errno"
version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba"
dependencies = [
"libc",
"windows-sys",
]
[[package]]
name = "fastrand"
version = "2.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a"
[[package]]
name = "futures"
version = "0.3.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0"
dependencies = [
"futures-channel",
"futures-core",
"futures-executor",
"futures-io",
"futures-sink",
"futures-task",
"futures-util",
]
[[package]]
name = "futures-channel"
version = "0.3.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78"
dependencies = [
"futures-core",
"futures-sink",
]
[[package]]
name = "futures-core"
version = "0.3.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d"
[[package]]
name = "futures-executor"
version = "0.3.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d"
dependencies = [
"futures-core",
"futures-task",
"futures-util",
]
[[package]]
name = "futures-io"
version = "0.3.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1"
[[package]]
name = "futures-macro"
version = "0.3.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "futures-sink"
version = "0.3.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5"
[[package]]
name = "futures-task"
version = "0.3.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004"
[[package]]
name = "futures-util"
version = "0.3.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48"
dependencies = [
"futures-channel",
"futures-core",
"futures-io",
"futures-macro",
"futures-sink",
"futures-task",
"memchr",
"pin-project-lite",
"pin-utils",
"slab",
]
[[package]]
name = "george"
version = "0.1.0"
dependencies = [
"console_error_panic_hook",
"georgeemu",
"minifb",
"wasm-bindgen",
"web-sys",
]
[[package]]
name = "georgeemu"
version = "0.1.0"
source = "git+https://git.augustkline.com/august/george-emu#952b79cf91542021e732d8fd5b0b46dbf0132a46"
dependencies = [
"anyhow",
"console_error_panic_hook",
"minifb",
"serde",
"termion",
"toml",
"web-sys",
]
[[package]]
name = "hashbrown"
version = "0.14.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
[[package]]
name = "indexmap"
version = "2.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "68b900aa2f7301e21c36462b170ee99994de34dff39a4a6a528e80e7376d07e5"
dependencies = [
"equivalent",
"hashbrown",
]
[[package]]
name = "instant"
version = "0.1.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222"
dependencies = [
"cfg-if",
"js-sys",
"wasm-bindgen",
"web-sys",
]
[[package]]
name = "itoa"
version = "1.0.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b"
[[package]]
name = "js-sys"
version = "0.3.70"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1868808506b929d7b0cfa8f75951347aa71bb21144b7791bae35d9bccfcfe37a"
dependencies = [
"wasm-bindgen",
]
[[package]]
name = "lazy_static"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
[[package]]
name = "libc"
version = "0.2.155"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c"
[[package]]
name = "libloading"
version = "0.8.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e310b3a6b5907f99202fcdb4960ff45b93735d7c7d96b760fcff8db2dc0e103d"
dependencies = [
"cfg-if",
"windows-targets",
]
[[package]]
name = "libredox"
version = "0.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3af92c55d7d839293953fcd0fda5ecfe93297cfde6ffbdec13b41d99c0ba6607"
dependencies = [
"bitflags 2.5.0",
"libc",
"redox_syscall",
]
[[package]]
name = "linux-raw-sys"
version = "0.4.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89"
[[package]]
name = "log"
version = "0.4.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c"
[[package]]
name = "memchr"
version = "2.7.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3"
[[package]]
name = "memoffset"
version = "0.6.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce"
dependencies = [
"autocfg",
]
[[package]]
name = "minifb"
version = "0.27.0"
source = "git+https://github.com/augustkline/rust_minifb#2e2fdcf1d692c8c3d827a221a66569d81c73f99a"
dependencies = [
"cc",
"console_error_panic_hook",
"dlib",
"futures",
"instant",
"js-sys",
"lazy_static",
"libc",
"orbclient",
"raw-window-handle",
"serde",
"serde_derive",
"tempfile",
"wasm-bindgen",
"wasm-bindgen-futures",
"wayland-client",
"wayland-cursor",
"wayland-protocols",
"web-sys",
"winapi",
"x11-dl",
]
[[package]]
name = "nix"
version = "0.24.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069"
dependencies = [
"bitflags 1.3.2",
"cfg-if",
"libc",
"memoffset",
]
[[package]]
name = "numtoa"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b8f8bdf33df195859076e54ab11ee78a1b208382d3a26ec40d142ffc1ecc49ef"
[[package]]
name = "once_cell"
version = "1.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
[[package]]
name = "orbclient"
version = "0.3.47"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "52f0d54bde9774d3a51dcf281a5def240c71996bc6ca05d2c847ec8b2b216166"
dependencies = [
"libc",
"libredox",
"sdl2",
"sdl2-sys",
]
[[package]]
name = "pin-project-lite"
version = "0.2.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02"
[[package]]
name = "pin-utils"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
[[package]]
name = "pkg-config"
version = "0.3.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec"
[[package]]
name = "proc-macro2"
version = "1.0.86"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77"
dependencies = [
"unicode-ident",
]
[[package]]
name = "quote"
version = "1.0.36"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7"
dependencies = [
"proc-macro2",
]
[[package]]
name = "raw-window-handle"
version = "0.6.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539"
[[package]]
name = "redox_syscall"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa"
dependencies = [
"bitflags 1.3.2",
]
[[package]]
name = "redox_termios"
version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "20145670ba436b55d91fc92d25e71160fbfbdd57831631c8d7d36377a476f1cb"
[[package]]
name = "rustix"
version = "0.38.34"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f"
dependencies = [
"bitflags 2.5.0",
"errno",
"libc",
"linux-raw-sys",
"windows-sys",
]
[[package]]
name = "ryu"
version = "1.0.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f"
[[package]]
name = "scoped-tls"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294"
[[package]]
name = "sdl2"
version = "0.35.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f7959277b623f1fb9e04aea73686c3ca52f01b2145f8ea16f4ff30d8b7623b1a"
dependencies = [
"bitflags 1.3.2",
"lazy_static",
"libc",
"sdl2-sys",
]
[[package]]
name = "sdl2-sys"
version = "0.35.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e3586be2cf6c0a8099a79a12b4084357aa9b3e0b0d7980e3b67aaf7a9d55f9f0"
dependencies = [
"cfg-if",
"libc",
"version-compare",
]
[[package]]
name = "serde"
version = "1.0.203"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7253ab4de971e72fb7be983802300c30b5a7f0c2e56fab8abfc6a214307c0094"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
version = "1.0.203"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "serde_json"
version = "1.0.127"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8043c06d9f82bd7271361ed64f415fe5e12a77fdb52e573e7f06a516dea329ad"
dependencies = [
"itoa",
"memchr",
"ryu",
"serde",
]
[[package]]
name = "serde_spanned"
version = "0.6.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "eb5b1b31579f3811bf615c144393417496f152e12ac8b7663bf664f4a815306d"
dependencies = [
"serde",
]
[[package]]
name = "slab"
version = "0.4.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67"
dependencies = [
"autocfg",
]
[[package]]
name = "smallvec"
version = "1.13.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67"
[[package]]
name = "syn"
version = "2.0.67"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ff8655ed1d86f3af4ee3fd3263786bc14245ad17c4c7e85ba7187fb3ae028c90"
dependencies = [
"proc-macro2",
"quote",
"unicode-ident",
]
[[package]]
name = "tempfile"
version = "3.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1"
dependencies = [
"cfg-if",
"fastrand",
"rustix",
"windows-sys",
]
[[package]]
name = "termion"
version = "4.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1ccce68e518d1173e80876edd54760b60b792750d0cab6444a79101c6ea03848"
dependencies = [
"libc",
"libredox",
"numtoa",
"redox_termios",
]
[[package]]
name = "toml"
version = "0.8.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e"
dependencies = [
"serde",
"serde_spanned",
"toml_datetime",
"toml_edit",
]
[[package]]
name = "toml_datetime"
version = "0.6.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41"
dependencies = [
"serde",
]
[[package]]
name = "toml_edit"
version = "0.22.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "583c44c02ad26b0c3f3066fe629275e50627026c51ac2e595cca4c230ce1ce1d"
dependencies = [
"indexmap",
"serde",
"serde_spanned",
"toml_datetime",
"winnow",
]
[[package]]
name = "unicode-ident"
version = "1.0.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
[[package]]
name = "version-compare"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "579a42fc0b8e0c63b76519a339be31bed574929511fa53c1a3acae26eb258f29"
[[package]]
name = "wasm-bindgen"
version = "0.2.93"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a82edfc16a6c469f5f44dc7b571814045d60404b55a0ee849f9bcfa2e63dd9b5"
dependencies = [
"cfg-if",
"once_cell",
"serde",
"serde_json",
"wasm-bindgen-macro",
]
[[package]]
name = "wasm-bindgen-backend"
version = "0.2.93"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9de396da306523044d3302746f1208fa71d7532227f15e347e2d93e4145dd77b"
dependencies = [
"bumpalo",
"log",
"once_cell",
"proc-macro2",
"quote",
"syn",
"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.93"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "585c4c91a46b072c92e908d99cb1dcdf95c5218eeb6f3bf1efa991ee7a68cccf"
dependencies = [
"quote",
"wasm-bindgen-macro-support",
]
[[package]]
name = "wasm-bindgen-macro-support"
version = "0.2.93"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836"
dependencies = [
"proc-macro2",
"quote",
"syn",
"wasm-bindgen-backend",
"wasm-bindgen-shared",
]
[[package]]
name = "wasm-bindgen-shared"
version = "0.2.93"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c62a0a307cb4a311d3a07867860911ca130c3494e8c2719593806c08bc5d0484"
[[package]]
name = "wayland-client"
version = "0.29.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3f3b068c05a039c9f755f881dc50f01732214f5685e379829759088967c46715"
dependencies = [
"bitflags 1.3.2",
"downcast-rs",
"libc",
"nix",
"scoped-tls",
"wayland-commons",
"wayland-scanner",
"wayland-sys",
]
[[package]]
name = "wayland-commons"
version = "0.29.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8691f134d584a33a6606d9d717b95c4fa20065605f798a3f350d78dced02a902"
dependencies = [
"nix",
"once_cell",
"smallvec",
"wayland-sys",
]
[[package]]
name = "wayland-cursor"
version = "0.29.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6865c6b66f13d6257bef1cd40cbfe8ef2f150fb8ebbdb1e8e873455931377661"
dependencies = [
"nix",
"wayland-client",
"xcursor",
]
[[package]]
name = "wayland-protocols"
version = "0.29.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b950621f9354b322ee817a23474e479b34be96c2e909c14f7bc0100e9a970bc6"
dependencies = [
"bitflags 1.3.2",
"wayland-client",
"wayland-commons",
"wayland-scanner",
]
[[package]]
name = "wayland-scanner"
version = "0.29.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8f4303d8fa22ab852f789e75a967f0a2cdc430a607751c0499bada3e451cbd53"
dependencies = [
"proc-macro2",
"quote",
"xml-rs",
]
[[package]]
name = "wayland-sys"
version = "0.29.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "be12ce1a3c39ec7dba25594b97b42cb3195d54953ddb9d3d95a7c3902bc6e9d4"
dependencies = [
"dlib",
"lazy_static",
"pkg-config",
]
[[package]]
name = "web-sys"
version = "0.3.70"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "26fdeaafd9bd129f65e7c031593c24d62186301e0c72c8978fa1678be7d532c0"
dependencies = [
"js-sys",
"wasm-bindgen",
]
[[package]]
name = "winapi"
version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
dependencies = [
"winapi-i686-pc-windows-gnu",
"winapi-x86_64-pc-windows-gnu",
]
[[package]]
name = "winapi-i686-pc-windows-gnu"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
[[package]]
name = "winapi-x86_64-pc-windows-gnu"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
[[package]]
name = "windows-sys"
version = "0.52.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
dependencies = [
"windows-targets",
]
[[package]]
name = "windows-targets"
version = "0.52.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb"
dependencies = [
"windows_aarch64_gnullvm",
"windows_aarch64_msvc",
"windows_i686_gnu",
"windows_i686_gnullvm",
"windows_i686_msvc",
"windows_x86_64_gnu",
"windows_x86_64_gnullvm",
"windows_x86_64_msvc",
]
[[package]]
name = "windows_aarch64_gnullvm"
version = "0.52.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263"
[[package]]
name = "windows_aarch64_msvc"
version = "0.52.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6"
[[package]]
name = "windows_i686_gnu"
version = "0.52.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670"
[[package]]
name = "windows_i686_gnullvm"
version = "0.52.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9"
[[package]]
name = "windows_i686_msvc"
version = "0.52.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf"
[[package]]
name = "windows_x86_64_gnu"
version = "0.52.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9"
[[package]]
name = "windows_x86_64_gnullvm"
version = "0.52.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596"
[[package]]
name = "windows_x86_64_msvc"
version = "0.52.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0"
[[package]]
name = "winnow"
version = "0.6.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "68a9bda4691f099d435ad181000724da8e5899daa10713c2d432552b9ccd3a6f"
dependencies = [
"memchr",
]
[[package]]
name = "x11-dl"
version = "2.21.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f"
dependencies = [
"libc",
"once_cell",
"pkg-config",
]
[[package]]
name = "xcursor"
version = "0.3.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6a0ccd7b4a5345edfcd0c3535718a4e9ff7798ffc536bb5b5a0e26ff84732911"
[[package]]
name = "xml-rs"
version = "0.8.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "791978798f0597cfc70478424c2b4fdc2b7a8024aaff78497ef00f24ef674193"

23
george/Cargo.toml Normal file
View File

@ -0,0 +1,23 @@
[package]
name = "george"
version = "0.1.0"
edition = "2021"
[lib]
crate-type = ["cdylib", "rlib"]
[features]
default = ["minifb/web"]
[dependencies]
console_error_panic_hook = "0.1.7"
georgeemu = { git = "https://git.augustkline.com/august/george-emu" }
minifb = { git = "https://github.com/augustkline/rust_minifb" }
wasm-bindgen = "0.2.93"
[dependencies.web-sys]
version = "*"
features = ['Document', 'Element', 'HtmlElement', 'Node', 'Window']
[package.metadata.wasm-pack.profile.profiling]
wasm-opt = ['-O']

View File

@ -0,0 +1,2 @@
[toolchain]
channel = "stable"

217
george/src/demo.asm Normal file
View File

@ -0,0 +1,217 @@
; use `vasm6502_oldstyle -dotdir -wdc02 -ldots -Fbin` to assemble
; source is at http://www.compilers.de/vasm.html
.include "./macro.inc"
.org $8000
temp = $20 ; scratchpad page
cursor = $300
cursor_x = cursor
cursor_y = cursor + 1
rand_index = $200
reset:
sei
ldx #0; initialize data stack pointer
jsr delay
jsr delay
jsr delay
jsr delay
jsr delay
jsr delay
jsr delay
jsr delay
jsr delay
jsr delay
jsr delay
jsr delay
jsr delay
jsr delay
jsr delay
jsr delay
jsr delay
jsr delay
jsr delay
jsr delay
jsr delay
jsr delay
jsr delay
jsr delay
jsr delay
jsr delay
main:
jsr rand_draw
lda #0
jsr delay
jsr delay
jsr delay
jsr delay
jsr delay
jsr delay
jsr delay
jsr delay
jsr delay
jsr delay
jsr print
jmp main
; prints string from cursor position, stopping at end of string or at 256 chars, whichever comes first
; $6000 + (64*Y) + X
; THIS WILL WRITE OUT OF BOUNDS IF THE CURSOR IS OUT OF BOUNDS/STRING IS TOO LONG
print:
jsr cursor_addr
ldy #0
.loop:
jsr delay
jsr delay
jsr delay
jsr delay
jsr delay
lda text, y
beq .end
sta (temp), y
iny
jmp .loop
.end:
rts
; calculates real vram address from cursor (x, y)
cursor_addr:
stz temp
stz temp + 1
lda cursor_y
beq .add_x ; if y's zero just add x
.y_mult:
; multiply by 64
clc
asl
rol temp + 1
asl
rol temp + 1
asl
rol temp + 1
asl
rol temp + 1
asl
rol temp + 1
asl
rol temp + 1
sta temp
.add_x:
clc
lda cursor_x
adc temp
sta temp
lda #0
adc temp + 1
sta temp + 1
clc
lda #$60
adc temp + 1
sta temp + 1
rts
rand_draw:
ldx rand_index
lda random_x, x
sta cursor_x
lda random_y, x
sta cursor_y
jsr cursor_addr
inc rand_index
rts
text:
.asciiz 7," hi warp team ", 7
random_y:
.byte 25,12,0,20,4,25,5,13
.byte 20, 1, 1, 22, 12, 19, 19, 19
.byte 9, 0, 4, 18, 13, 14, 4, 16
.byte 8, 17, 21, 14, 23, 21, 9, 0
.byte 14, 10, 14, 2, 26, 18, 15, 23
.byte 12, 2, 5, 4, 25, 20, 27, 4
.byte 28, 21, 3, 22, 11, 25, 2, 25
.byte 13, 17, 17, 24, 8, 8, 20, 21
.byte 11, 24, 27, 25, 8, 12, 7, 0
.byte 27, 12, 19, 27, 10, 3, 19, 2
.byte 2, 23, 22, 5, 26, 28, 4, 16
.byte 18, 7, 10, 9, 6, 19, 9, 2
.byte 14, 8, 14, 18, 18, 2, 13, 0
.byte 15, 26, 3, 23, 17, 12, 18, 11
.byte 4, 16, 17, 22, 9, 25, 3, 15
.byte 28, 3, 6, 14, 25, 5, 21, 8
.byte 15, 18, 15, 5, 28, 6, 15, 4
.byte 10, 1, 16, 24, 6, 9, 22, 3
.byte 17, 18, 10, 19, 27, 11, 22, 16
.byte 22, 17, 15, 6, 23, 11, 11, 11
.byte 4, 15, 5, 25, 19, 1, 8, 26
.byte 21, 20, 17, 27, 11, 3, 11, 20
.byte 15, 28, 0, 6, 14, 23, 20, 21
.byte 17, 20, 16, 15, 19, 6, 21, 19
.byte 15, 27, 1, 22, 7, 0, 5, 2
.byte 14, 24, 15, 4, 20, 16, 1, 14
.byte 4, 16, 4, 8, 13, 26, 3, 9
.byte 12, 25, 5, 0, 7, 17, 14, 20
.byte 2, 26, 2, 27, 18, 23, 5, 8
.byte 4, 21, 10, 11, 28, 22, 6, 6
.byte 10, 13, 23, 12, 20, 28, 20, 1
.byte 27, 19, 25, 6, 1, 10, 1
random_x:
.byte 42, 59, 11, 5, 18, 0, 26, 1
.byte 61, 16, 1, 51, 36, 47, 23, 1
.byte 16, 50, 46, 4, 55, 31, 15, 2
.byte 45, 21, 59, 53, 15, 43, 0, 2
.byte 64, 31, 38, 41, 25, 12, 12, 3
.byte 30, 13, 64, 44, 21, 8, 48, 3
.byte 46, 1, 2, 33, 4, 32, 59, 28
.byte 4, 24, 58, 53, 21, 41, 30, 2
.byte 56, 53, 31, 10, 42, 12, 9, 54
.byte 14, 14, 24, 29, 43, 60, 54, 26
.byte 5, 53, 17, 55, 27, 46, 31, 3
.byte 26, 44, 63, 30, 10, 34, 62, 48
.byte 42, 47, 51, 7, 55, 32, 14, 21
.byte 15, 26, 52, 37, 48, 0, 13, 2
.byte 50, 20, 35, 32, 8, 41, 2, 24
.byte 18, 9, 52, 22, 52, 12, 19, 32
.byte 29, 46, 34, 58, 54, 51, 43, 57
.byte 62, 10, 12, 57, 36, 39, 4, 30
.byte 38, 9, 30, 32, 33, 57, 3, 25
.byte 21, 36, 59, 30, 19, 39, 9, 60
.byte 34, 50, 52, 37, 34, 42, 3, 33
.byte 40, 19, 2, 26, 10, 38, 46, 30
.byte 3, 1, 19, 16, 26, 58, 42, 49
.byte 63, 1, 63, 41, 0, 21, 41, 19
.byte 21, 45, 44, 52, 20, 5, 11, 64
.byte 1, 62, 16, 5, 5, 8, 58, 56
.byte 16, 26, 6, 37, 19, 16, 25, 29
.byte 64, 59, 16, 6, 41, 28, 8, 51
.byte 54, 5, 19, 28, 13, 38, 52, 35
.byte 42, 13, 34, 33, 61, 61, 7, 27
.byte 38, 33, 9, 57, 10, 30, 8, 4
.byte 46, 3, 39, 46, 62, 20, 48, 7
delay:
delay
delay
delay
delay
delay
delay
delay
rts
isr: ; interrupt service routine
rti
.org $fffc
.word reset
.word isr

BIN
george/src/demo.rom Normal file

Binary file not shown.

63
george/src/lib.rs Normal file
View File

@ -0,0 +1,63 @@
use std::{cell::RefCell, panic, rc::Rc};
use georgeemu::GeorgeEmu;
use minifb::{Scale, ScaleMode, Window, WindowOptions};
use wasm_bindgen::prelude::*;
use web_sys::HtmlElement;
fn window() -> web_sys::Window {
web_sys::window().expect("no global `window` exists")
}
fn request_animation_frame(f: &Closure<dyn FnMut()>) {
window()
.request_animation_frame(f.as_ref().unchecked_ref())
.expect("should register `requestAnimationFrame` OK");
}
const WIDTH: usize = 512;
const HEIGHT: usize = 380;
#[wasm_bindgen(start)]
pub fn main() {
panic::set_hook(Box::new(console_error_panic_hook::hook));
let rom = *include_bytes!("./demo.rom");
let document = window().document().unwrap();
let george_canvas: HtmlElement = document
.get_element_by_id("george")
.unwrap()
.dyn_into::<HtmlElement>()
.unwrap();
let window = Window::new(
george_canvas,
WIDTH,
HEIGHT,
WindowOptions {
resize: true,
borderless: true,
title: true,
transparency: false,
scale: Scale::FitScreen,
scale_mode: ScaleMode::AspectRatioStretch,
topmost: false,
none: true,
},
)
.unwrap();
let mut emu = GeorgeEmu::builder().rom(rom).window(window).build();
let f = Rc::new(RefCell::new(None));
let g = f.clone();
*g.borrow_mut() = Some(Closure::wrap(Box::new(move || {
// cycle roughly however many cycles would've run during a frame
for _ in 0..32000 {
emu.cycle();
}
emu.draw();
// schedule this closure for running again at next frame
request_animation_frame(f.borrow().as_ref().unwrap());
}) as Box<dyn FnMut() + 'static>));
request_animation_frame(g.borrow().as_ref().unwrap());
}

2008
george/src/macro.inc Normal file

File diff suppressed because it is too large Load Diff

160
index.html Normal file
View File

@ -0,0 +1,160 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Hi Warp Team, I'm August!</title>
<link rel="stylesheet" type="text/css" href="style.css">
<script type="module" src="/src/index.ts"></script>
<link rel="preconnect" href="https://rsms.me/">
<link rel="stylesheet" href="https://rsms.me/inter/inter.css">
<link rel="stylesheet" href="//cdn.jsdelivr.net/npm/hack-font@3/build/web/hack.css">
</head>
<body>
<div class="background">
<div class="dots">
<div class="page">
<div>
<h1 class="accent"> Hi Warp Team!</h1>
<h1> i'm <span class="august-accent">august</span></h1>
<p>I love your product and want to help build the terminal of the future</p>
<code class="intro-prompt accent">$ <span class="echo">echo </span><span id="typed"></span></code>
</div>
<img class="chevron" aria-hidden="true" src="/chevron.svg">
</div>
<div class="page">
<div class="about-menu">
<h1>what <span class="august-accent">am I</span>?</h1>
<p id="about">
I am a skilled Rust and Typescript <a href="#engineer"
class="august-accent-underline">engineer</a> who has
collaborated with global teams to
bring developers <a href="#together">together</a>, applies her skills to build
<a href="#beautiful">beautiful</a> products, and spends her free time <a
href="#tinkering">tinkering</a> and growing her skills.
</p>
</div>
<div id="about-display">
<div class="about" id="engineer">
<div id="george" class="george widget">
<div class="traffic-lights">
<span class="dot red"></span>
<span class="dot yellow"></span>
<span class="dot green"></span>
</div>
</div>
<p class="accent">
This <a href="https://git.augustkline.com/august/warp" target="_blank"
rel="noreferer">site</a> was written in plain
Typescript, and this
demo is an <a href="https://git.augustkline.com/august/george-emu" target="_blank"
rel="noreferer">emulator</a> i wrote from
scratch in Rust that was compiled to WASM and runs
hand-written assembly in the browser at native speed.
</p>
</div>
<div class="about" id="together">
<img class="widget train" src="/train.svg" />
<p class="accent">
At my last job with <a href="https://thecodingtrain.com/" target="_blank"
rel="noreferer">The Coding
Train</a> I worked with
a
global team of designers and educators to bring coding education to tens of thousands of
monthly
active users. I led implementation of the <a href="https://thecodingtrain.com/showcase"
target="_blank" rel="noreferer">Passenger
Showcase</a>, which enabled hundreds of creative coders to have their projects featured
on
the
site.
</p>
</div>
<div class="about" id="beautiful">
<img class="widget"
src="https://upload.wikimedia.org/wikipedia/commons/e/e2/New_York_Daniel_Rozin_%22The_Wooden_Mirror%22_%285060453987%29.jpg" />
<p class="accent">I'm both a talented engineer and creatively-driven. I studied at NYU ITP's
undergrad program,
Interactive Media Arts, where I applied my engineering skills to the arts, creating <a
href="https://soundpaint.vercel.app" target="_blank" rel="noreferer">interactive musical
watercolors</a>, <a href="https://github.com/augustkline/childhoodstegify"
target="_blank" rel="noreferer">hidden message poetry</a>, and <a
href="https://github.com/augustkline/traceomancy" target="_blank"
rel="noreferer">networked oracles</a>, just to name a
few
projects.
</p>
</div>
<div class="about" id="tinkering">
<img src="/blinkenlights.jpeg" class="widget" />
<p class="accent">
For fun I like to play with <a href="https://git.augustkline.com/august/george-hardware"
target="_blank" rel="noreferer">hardware</a>, and lately I've
been
developing <a href="https://git.augustkline.com/august/fuzzy" target="_blank"
rel="noreferer">fuzzy</a>, a programming
language
for
my homemade computer <a href="https://git.augustkline.com/august/george" target="_blank"
rel="noreferer">george</a>. Other
spare-time projects I've written include <a href="https://github.com/augustkline/aurchive"
target="_blank" rel="noreferer">svg
canvases</a>, <a href="https://git.augustkline.com/august/birdkov" target="_blank"
rel="noreferer">generative audio
markov
chains</a>, and <a href="https://github.com/augustkline/ephemeral-chat" target="_blank"
rel="noreferer">ephemeral chat
apps</a>.
</p>
</div>
</div>
</div>
<div class="page">
<div class="page-desc left">
<span class="accent"><code>man</code> for the future of coding</span>
<h1>here's a <span class="august-accent">feature idea</span>...</h1>
<p>I read up on your interview process and figured I'd skip straight to the best part!</p>
<p>The terminal of the future should blur the lines between TUI and GUI.</p>
<p>Here, I imagined an enhanced user interface for <code>man</code> that respects the developer and
doesn't
switch
contexts
or change their workflow.</p>
<p>(and <a href="https://git.augustkline.com/august/manserve" target="_blank"
rel="noreferer">here's</a> a little server I wrote
just
for
this demo)</p>
</div>
<div id="man-demo">
<div class="terminal widget" id="man-terminal">
<div class="traffic-lights">
<span class="dot red"></span>
<span class="dot yellow"></span>
<span class="dot green"></span>
</div>
<div id="results"></div>
<form id="man-input">
<code>~</code>
<input type="text" name="command" autocomplete="off" placeholder="Try typing `man pwd`" />
<input type="submit" hidden />
</form>
</div>
</div>
</div>
<div class="page">
<div>
<h1>Let's work <span class="august-accent">together</span></h1>
<p>Shoot me an <a href="mailto:me@augustkline.com">email</a> and let's set up an interview</p>
<p>I'm really excited to bring my skills to your team!</p>
</div>
</div>
</div>
</div>
</body>
</html>

715
package-lock.json generated Normal file
View File

@ -0,0 +1,715 @@
{
"name": "vite-plugin-wasm-pack-example",
"version": "1.0.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "vite-plugin-wasm-pack-example",
"version": "1.0.0",
"license": "MIT",
"devDependencies": {
"vite": "^2.6.14",
"vite-plugin-wasm-pack": "^0.1.9"
}
},
"node_modules/@esbuild/linux-loong64": {
"version": "0.14.54",
"resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz",
"integrity": "sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==",
"cpu": [
"loong64"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"dependencies": {
"color-convert": "^2.0.1"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"node_modules/chalk": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
"node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"dependencies": {
"color-name": "~1.1.4"
},
"engines": {
"node": ">=7.0.0"
}
},
"node_modules/color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"node_modules/esbuild": {
"version": "0.14.54",
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.54.tgz",
"integrity": "sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA==",
"dev": true,
"hasInstallScript": true,
"bin": {
"esbuild": "bin/esbuild"
},
"engines": {
"node": ">=12"
},
"optionalDependencies": {
"@esbuild/linux-loong64": "0.14.54",
"esbuild-android-64": "0.14.54",
"esbuild-android-arm64": "0.14.54",
"esbuild-darwin-64": "0.14.54",
"esbuild-darwin-arm64": "0.14.54",
"esbuild-freebsd-64": "0.14.54",
"esbuild-freebsd-arm64": "0.14.54",
"esbuild-linux-32": "0.14.54",
"esbuild-linux-64": "0.14.54",
"esbuild-linux-arm": "0.14.54",
"esbuild-linux-arm64": "0.14.54",
"esbuild-linux-mips64le": "0.14.54",
"esbuild-linux-ppc64le": "0.14.54",
"esbuild-linux-riscv64": "0.14.54",
"esbuild-linux-s390x": "0.14.54",
"esbuild-netbsd-64": "0.14.54",
"esbuild-openbsd-64": "0.14.54",
"esbuild-sunos-64": "0.14.54",
"esbuild-windows-32": "0.14.54",
"esbuild-windows-64": "0.14.54",
"esbuild-windows-arm64": "0.14.54"
}
},
"node_modules/esbuild-android-64": {
"version": "0.14.54",
"resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz",
"integrity": "sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"android"
],
"engines": {
"node": ">=12"
}
},
"node_modules/esbuild-android-arm64": {
"version": "0.14.54",
"resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.54.tgz",
"integrity": "sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg==",
"cpu": [
"arm64"
],
"dev": true,
"optional": true,
"os": [
"android"
],
"engines": {
"node": ">=12"
}
},
"node_modules/esbuild-darwin-64": {
"version": "0.14.54",
"resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz",
"integrity": "sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": ">=12"
}
},
"node_modules/esbuild-darwin-arm64": {
"version": "0.14.54",
"resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz",
"integrity": "sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw==",
"cpu": [
"arm64"
],
"dev": true,
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": ">=12"
}
},
"node_modules/esbuild-freebsd-64": {
"version": "0.14.54",
"resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.54.tgz",
"integrity": "sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"freebsd"
],
"engines": {
"node": ">=12"
}
},
"node_modules/esbuild-freebsd-arm64": {
"version": "0.14.54",
"resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.54.tgz",
"integrity": "sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q==",
"cpu": [
"arm64"
],
"dev": true,
"optional": true,
"os": [
"freebsd"
],
"engines": {
"node": ">=12"
}
},
"node_modules/esbuild-linux-32": {
"version": "0.14.54",
"resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.54.tgz",
"integrity": "sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw==",
"cpu": [
"ia32"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/esbuild-linux-64": {
"version": "0.14.54",
"resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.54.tgz",
"integrity": "sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/esbuild-linux-arm": {
"version": "0.14.54",
"resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.54.tgz",
"integrity": "sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw==",
"cpu": [
"arm"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/esbuild-linux-arm64": {
"version": "0.14.54",
"resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.54.tgz",
"integrity": "sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig==",
"cpu": [
"arm64"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/esbuild-linux-mips64le": {
"version": "0.14.54",
"resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.54.tgz",
"integrity": "sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw==",
"cpu": [
"mips64el"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/esbuild-linux-ppc64le": {
"version": "0.14.54",
"resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.54.tgz",
"integrity": "sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ==",
"cpu": [
"ppc64"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/esbuild-linux-riscv64": {
"version": "0.14.54",
"resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.54.tgz",
"integrity": "sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg==",
"cpu": [
"riscv64"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/esbuild-linux-s390x": {
"version": "0.14.54",
"resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.54.tgz",
"integrity": "sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA==",
"cpu": [
"s390x"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/esbuild-netbsd-64": {
"version": "0.14.54",
"resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.54.tgz",
"integrity": "sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"netbsd"
],
"engines": {
"node": ">=12"
}
},
"node_modules/esbuild-openbsd-64": {
"version": "0.14.54",
"resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.54.tgz",
"integrity": "sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"openbsd"
],
"engines": {
"node": ">=12"
}
},
"node_modules/esbuild-sunos-64": {
"version": "0.14.54",
"resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz",
"integrity": "sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"sunos"
],
"engines": {
"node": ">=12"
}
},
"node_modules/esbuild-windows-32": {
"version": "0.14.54",
"resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.54.tgz",
"integrity": "sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w==",
"cpu": [
"ia32"
],
"dev": true,
"optional": true,
"os": [
"win32"
],
"engines": {
"node": ">=12"
}
},
"node_modules/esbuild-windows-64": {
"version": "0.14.54",
"resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz",
"integrity": "sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"win32"
],
"engines": {
"node": ">=12"
}
},
"node_modules/esbuild-windows-arm64": {
"version": "0.14.54",
"resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz",
"integrity": "sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg==",
"cpu": [
"arm64"
],
"dev": true,
"optional": true,
"os": [
"win32"
],
"engines": {
"node": ">=12"
}
},
"node_modules/fs-extra": {
"version": "10.1.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
"integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
"dev": true,
"dependencies": {
"graceful-fs": "^4.2.0",
"jsonfile": "^6.0.1",
"universalify": "^2.0.0"
},
"engines": {
"node": ">=12"
}
},
"node_modules/fsevents": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
"integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
"dev": true,
"hasInstallScript": true,
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
}
},
"node_modules/function-bind": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
"integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
"dev": true,
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/graceful-fs": {
"version": "4.2.11",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
"dev": true
},
"node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/hasown": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
"integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
"dev": true,
"dependencies": {
"function-bind": "^1.1.2"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/is-core-module": {
"version": "2.15.1",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz",
"integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==",
"dev": true,
"dependencies": {
"hasown": "^2.0.2"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/jsonfile": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
"integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
"dev": true,
"dependencies": {
"universalify": "^2.0.0"
},
"optionalDependencies": {
"graceful-fs": "^4.1.6"
}
},
"node_modules/nanoid": {
"version": "3.3.7",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
"integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
"dev": true,
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/ai"
}
],
"bin": {
"nanoid": "bin/nanoid.cjs"
},
"engines": {
"node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
}
},
"node_modules/narrowing": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/narrowing/-/narrowing-1.5.0.tgz",
"integrity": "sha512-DUu4XdKgkfAPTAL28k79pdnshDE2W5T24QAnidSPo2F/W1TX6CjNzmEeXQfE5O1lxQvC0GYI6ZRDsLcyzugEYA==",
"dev": true
},
"node_modules/path-parse": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
"dev": true
},
"node_modules/picocolors": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz",
"integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==",
"dev": true
},
"node_modules/postcss": {
"version": "8.4.41",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz",
"integrity": "sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==",
"dev": true,
"funding": [
{
"type": "opencollective",
"url": "https://opencollective.com/postcss/"
},
{
"type": "tidelift",
"url": "https://tidelift.com/funding/github/npm/postcss"
},
{
"type": "github",
"url": "https://github.com/sponsors/ai"
}
],
"dependencies": {
"nanoid": "^3.3.7",
"picocolors": "^1.0.1",
"source-map-js": "^1.2.0"
},
"engines": {
"node": "^10 || ^12 || >=14"
}
},
"node_modules/resolve": {
"version": "1.22.8",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
"integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
"dev": true,
"dependencies": {
"is-core-module": "^2.13.0",
"path-parse": "^1.0.7",
"supports-preserve-symlinks-flag": "^1.0.0"
},
"bin": {
"resolve": "bin/resolve"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/rollup": {
"version": "2.77.3",
"resolved": "https://registry.npmjs.org/rollup/-/rollup-2.77.3.tgz",
"integrity": "sha512-/qxNTG7FbmefJWoeeYJFbHehJ2HNWnjkAFRKzWN/45eNBBF/r8lo992CwcJXEzyVxs5FmfId+vTSTQDb+bxA+g==",
"dev": true,
"bin": {
"rollup": "dist/bin/rollup"
},
"engines": {
"node": ">=10.0.0"
},
"optionalDependencies": {
"fsevents": "~2.3.2"
}
},
"node_modules/source-map-js": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz",
"integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"dependencies": {
"has-flag": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/supports-preserve-symlinks-flag": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
"integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
"dev": true,
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/universalify": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
"integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
"dev": true,
"engines": {
"node": ">= 10.0.0"
}
},
"node_modules/vite": {
"version": "2.9.18",
"resolved": "https://registry.npmjs.org/vite/-/vite-2.9.18.tgz",
"integrity": "sha512-sAOqI5wNM9QvSEE70W3UGMdT8cyEn0+PmJMTFvTB8wB0YbYUWw3gUbY62AOyrXosGieF2htmeLATvNxpv/zNyQ==",
"dev": true,
"dependencies": {
"esbuild": "^0.14.27",
"postcss": "^8.4.13",
"resolve": "^1.22.0",
"rollup": ">=2.59.0 <2.78.0"
},
"bin": {
"vite": "bin/vite.js"
},
"engines": {
"node": ">=12.2.0"
},
"optionalDependencies": {
"fsevents": "~2.3.2"
},
"peerDependencies": {
"less": "*",
"sass": "*",
"stylus": "*"
},
"peerDependenciesMeta": {
"less": {
"optional": true
},
"sass": {
"optional": true
},
"stylus": {
"optional": true
}
}
},
"node_modules/vite-plugin-wasm-pack": {
"version": "0.1.12",
"resolved": "https://registry.npmjs.org/vite-plugin-wasm-pack/-/vite-plugin-wasm-pack-0.1.12.tgz",
"integrity": "sha512-WliYvQp9HXluir4OKGbngkcKxtYtifU11cqLurRRJGsl770Sjr1iIkp5RuvU3IC1poT4A57Z2/YgAKI2Skm7ZA==",
"dev": true,
"dependencies": {
"chalk": "^4.1.2",
"fs-extra": "^10.0.0",
"narrowing": "^1.4.0"
}
}
}
}

15
package.json Normal file
View File

@ -0,0 +1,15 @@
{
"name": "vite-plugin-wasm-pack-example",
"version": "1.0.0",
"main": "index.js",
"license": "MIT",
"devDependencies": {
"vite": "^2.6.14",
"vite-plugin-wasm-pack": "^0.1.9"
},
"scripts": {
"wasm": "wasm-pack build ./george --target web",
"dev": "vite",
"build": "vite build"
}
}

BIN
public/blinkenlights.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 347 KiB

4
public/chevron.svg Normal file
View File

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M17 9.5L12 14.5L7 9.5" stroke="white" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 299 B

1
public/train.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 56 KiB

231
src/index.ts Normal file
View File

@ -0,0 +1,231 @@
//@ts-ignore
import init, { main } from "george";
async function run() {
await init();
main();
}
run();
async function getManpage(command: string) {
const res = await fetch(`https://man.augustkline.com/${command}`, {
method: "GET",
credentials: "same-origin",
});
const parser = new DOMParser();
const json = await res.json();
const html = window.atob(json["html"]);
const doc = parser.parseFromString(html, "text/html");
return doc;
}
const sendInput = async (event: SubmitEvent) => {
event.preventDefault();
const form: HTMLFormElement = document.getElementById(
"man-input",
)! as HTMLFormElement;
const input = form.elements[0] as HTMLInputElement;
const command_text = input.value;
input.value = "";
const command = command_text.slice(4, command_text.length);
try {
await makeManpage(command);
makeEcho(command_text, false);
} catch (error) {
makeEcho(command_text, true);
}
};
const makeEcho = (command: string, error: boolean) => {
const results = document.getElementById("results")!;
const echo = document.createElement("div");
const commandEl = document.createElement("code");
commandEl.innerHTML = command;
const result = document.createElement("p");
if (error) {
if (command.slice(0, 4) == "man ") {
result.innerHTML = `Unrecognized command <code>${command.slice(4, command.length)}</code>`;
} else {
result.innerHTML = `Unrecognized command <code>${command}</code>`;
}
echo.className += " error";
} else {
result.innerHTML = `Opening man page for <code>${command.slice(4, command.length)}</code>`;
}
echo.append(commandEl, result);
results.append(echo);
fadeIn(echo);
};
const fadeIn = (el: HTMLElement) => {
el.style.animation = "fade-in 0.3s";
};
const fadeInFlex = (el: HTMLElement) => {
el.style.animation = "fade-in 0.5s, flex-in 0.8s";
};
const makeManpage = async (command: string) => {
const demo = document.getElementById("man-demo")!;
const doc = await getManpage(command);
if (demo.children.length > 1) {
const h1 = document.createElement("h1");
const desc = doc.getElementsByClassName("Pp")!.item(0)?.innerHTML;
const widget = document.getElementById("manpage-widget")!;
widget.scrollTop = 0;
h1.innerHTML = `${desc}`;
widget.innerHTML = "";
widget.style.setProperty("opacity", "1");
widget.append(h1, ...doc.body.children);
} else {
const h1 = document.createElement("h1");
const desc = doc.getElementsByClassName("Pp")!.item(0)?.innerHTML;
const widget = document.createElement("div");
widget.id = "manpage-widget";
const container = document.createElement("div");
container.id = "manpage-container";
container.className = "widget";
h1.innerHTML = `${desc}`;
widget.innerHTML = "";
widget.style.setProperty("opacity", "1");
widget.append(h1, ...doc.body.children);
container.append(widget);
demo.append(container);
fadeInFlex(container);
}
};
const typeAnim = () => {
let i = 0;
const txt = '"here\'s what I bring to the team"';
const speed = 75;
const type = () => {
if (i < txt.length) {
document.getElementById("typed")!.innerHTML += txt.charAt(i);
i++;
setTimeout(type, speed);
}
};
type();
};
setTimeout(typeAnim, 1000);
const manTerm = document.getElementById("man-terminal")!;
const input = document.getElementById("man-input")! as HTMLFormElement;
manTerm.addEventListener("click", () => {
let prompt = input.children[1] as HTMLInputElement;
prompt.focus();
});
const setTabIndices = () => {
const canvases = document.getElementsByTagName("canvas")!;
for (let canvas in canvases) {
canvases[canvas].setAttribute("tabIndex", "-1");
}
};
window.addEventListener("load", () => {
// Wait for wasm to add canvas before changing indices
setTimeout(setTabIndices, 1000);
});
input!.addEventListener("submit", sendInput);
const memoize = (fn) => {
let cache = {};
return (...args) => {
let n = args[0];
if (n in cache) {
return cache[n];
} else {
let result = fn(n);
cache[n] = result;
return result;
}
};
};
const getAboutWords = (): {
abouts: HTMLCollectionOf<HTMLAnchorElement>;
displays: HTMLCollectionOf<HTMLDivElement>;
} => {
let about = document.getElementById("about")!;
let abouts = about.getElementsByTagName(
"a",
)! as HTMLCollectionOf<HTMLAnchorElement>;
let aboutDisplay = document.getElementById("about-display")!;
let displays = aboutDisplay.getElementsByClassName(
"about",
)! as HTMLCollectionOf<HTMLDivElement>;
return { abouts, displays };
};
const setAboutWordsMouseEnter = () => {
let { abouts, displays } = getAboutWords();
for (let i = 0; i < abouts.length; i++) {
let word = abouts.item(i)!;
word.onmouseenter = () => {
for (let j = 0; j < abouts.length; j++) {
let display = displays.item(j)!;
if (word != abouts.item(j)) {
abouts.item(j)!.className = "";
if (memoize(window.getComputedStyle(display)).opacity === "1") {
display.style.animation = "fade-out 0.3s forwards";
} else {
display.style.opacity = "0";
display.style.animation = "";
}
display.style.pointerEvents = "none";
}
}
word.className = "august-accent-underline";
displays.item(i)!.style.animation = "fade-in 0.3s forwards";
displays.item(i)!.style.pointerEvents = "all";
};
word.onclick = (ev) => {
ev.preventDefault();
};
}
};
const removeListenersMobile = () => {
let { abouts } = getAboutWords();
for (let i = 0; i < abouts.length; i++) {
let word = abouts.item(i)!;
word.onmouseenter = null;
word.onclick = null;
}
};
const onResize = () => {
const mobile = window.matchMedia("all and (max-width: 70rem)").matches;
if (mobile) {
removeListenersMobile();
setMobileAboutStyle();
} else {
setAboutWordsMouseEnter();
}
};
window.addEventListener("resize", onResize);
const setMobileAboutStyle = () => {
const { abouts, displays } = getAboutWords();
for (let i = 0; i < abouts.length; i++) {
abouts[i].className = "";
displays[i].style.pointerEvents = "all";
}
};
const onLoad = () => {
const mobile = window.matchMedia("all and (max-width: 70rem)").matches;
if (!mobile) {
setAboutWordsMouseEnter();
} else {
setMobileAboutStyle();
}
};
window.addEventListener("load", onLoad);

712
style.css Normal file
View File

@ -0,0 +1,712 @@
:root {
/* UI Fonts */
--ui-font-family: Inter, sans-serif;
--code-font-family: Hack, monospace;
font-family: var(--ui-font-family);
font-feature-settings: 'liga' 1, 'calt' 1;
/* UI Colors */
--accent-1: rgba(255, 255, 255, 0.05);
--accent-2: rgba(255, 255, 255, 0.1);
--accent-3: rgba(255, 255, 255, 0.15);
--widget-shadow:
inset 0 0 0 1px var(--accent-3),
0 0.2rem 2rem rgba(255, 255, 255, 0.1);
--inner-border: inset 0 0 0 1px var(--accent-2);
--accent-bg: linear-gradient(95deg, var(--accent-3), var(--accent-1));
--august-pink: oklch(80.67% 0.1 0);
--august-orange: oklch(80.67% 0.1 43);
--accent-grad: linear-gradient(120deg in oklab, var(--august-pink) 10%, var(--august-orange) 80%);
--font-color: white;
color-scheme: dark;
/* Text Size Calculation */
--min-fs: 1;
--max-fs: 1.5;
--min-vw: 20;
--max-vw: 45;
--min-fs-rem: var(--min-fs) * 1rem;
--max-fs-rem: var(--max-fs) * 1rem;
--min-vw-rem: var(--min-vw) * 1rem;
--slope: (var(--max-fs) - var(--min-fs)) * (100svi - var(--min-vw-rem)) / (var(--max-vw) - var(--min-vw));
--font-size: clamp(var(--min-fs-rem), var(--min-fs-rem) + var(--slope), var(--max-fs-rem));
}
* {
color: var(--font-color);
}
@supports (font-variation-settings: normal) {
:root {
font-family: InterVariable, sans-serif;
}
}
::selection {
background-color: color-mix(in srgb, white, transparent 70%);
}
a[href^='http'] {
text-decoration: none;
font-weight: 700;
transition: color 0.3s ease;
&:hover {
color: var(--august-pink)
}
}
.chevron {
position: absolute;
inline-size: 3rem;
bottom: 5%;
left: 50%;
color: rgba(255, 255, 255, 0.8);
transform: translate(-50%, -50%);
animation: pullDown 5s cubic-bezier(0.77, 0, 0.175, 1) infinite;
animation-delay: 4s;
}
@keyframes pullDown {
from,
to {
bottom: 5%;
}
50% {
bottom: 2%;
}
}
body,
html {
font-size: calc(var(--font-size) * 0.8);
inline-size: 100%;
block-size: 100%;
margin: 0;
padding: 0;
overflow: auto;
}
.august-accent {
background: var(--accent-grad);
color: transparent;
background-clip: text;
-webkit-background-clip: text;
}
.august-accent-underline {
background-image: var(--accent-grad);
color: black;
background-size: 100% 100% !important;
background-repeat: no-repeat;
background-position: left bottom;
}
body {
display: flex;
flex-direction: column;
}
code {
font-family: var(--code-font-family);
}
.background {
background: linear-gradient(160deg, #101010, #010101);
}
.dots {
inline-size: 100%;
background-image: radial-gradient(rgba(255, 255, 255, 0.2) 1px, transparent 0);
background-size: 4rem 4rem;
background-position: 0.1rem 0;
}
#typed {
animation: blink-cursor 1s step-end infinite;
padding-inline-end: 0.5ch;
}
.echo {
color: var(--august-pink)
}
.page {
--inner-padding: calc(var(--font-size) * 2);
flex-direction: column;
display: flex;
position: relative;
padding: var(--inner-padding);
gap: var(--font-size);
&:first-child,
&:last-child {
div {
margin: auto;
}
block-size: calc(100svb - calc(2 * var(--inner-padding)));
p {
font-size: calc(var(--font-size));
}
h1 {
margin-block: 0.5rem;
font-size: calc(4 * var(--font-size));
&.accent {
font-size: calc(1.5 * var(--font-size));
align-self: start;
}
}
}
&:nth-child(2) {
align-items: center;
.about-menu {
flex: 0 1 50%;
h1 {
font-size: calc(3 * var(--font-size));
max-block-size: 2ch;
}
p {
font-size: calc(var(--font-size) * 1.8);
font-weight: 300;
text-wrap: pretty;
padding: 1rem;
a {
text-decoration: none;
padding-inline: 0.25rem;
font-weight: 500 !important;
background-size: 100% 2px;
background-image: var(--accent-grad);
background-repeat: no-repeat;
background-position: left bottom;
transition: background-size 0.3s ease, color 0.3s ease;
}
}
}
#about-display {
position: relative;
display: flex;
align-items: center;
justify-content: center;
flex: 0 1 50%;
block-size: 90%;
&>:first-child {
pointer-events: all;
opacity: 1;
}
&>:not(:first-child) {
pointer-events: none;
opacity: 0;
}
}
.about {
display: flex;
position: absolute;
flex-direction: column;
justify-content: space-between;
inline-size: 80%;
block-size: 100%;
&>* {
border-radius: 1rem;
}
img {
max-inline-size: 100%;
}
&>:first-child {
max-block-size: 100%;
block-size: 100%;
overflow: hidden;
}
p {
font-size: var(--font-size);
padding: 1rem;
}
.train {
background: white;
padding: 1rem;
}
.george {
background-color: #110500;
padding: 2.5rem 1rem;
& canvas {
inline-size: 100%;
object-fit: contain;
image-rendering: pixelated;
z-index: -10;
/* this is a bug with rust_minifb,
it makes 2 canvases for some reason... */
&:nth-child(2) {
display: none;
}
}
}
}
}
}
#manpage-container {
display: flex;
overflow: hidden;
}
#man-demo {
display: flex;
gap: var(--font-size);
a {
pointer-events: none;
}
.terminal {
background: black;
position: relative;
display: flex;
justify-content: end;
flex-direction: column;
padding: var(--font-size);
min-block-size: calc(var(--font-size) * 6);
&:not(:only-child) {
transition: flex 0.8s;
flex: 0 0 50%;
}
&:only-child {
flex: 1;
}
p {
margin: 0;
&:nth-child(1) {
color: lightblue;
}
}
input,
p {
font-size: inherit;
font-family: var(--code-font-family);
}
#results {
div {
margin-block: 1rem;
padding: 0.25rem 0.5rem;
overflow: hidden;
}
p {
margin-block: 0.5rem;
code {
color: var(--august-orange)
}
}
.error {
background: #ff615920;
border-inline-start: solid 2px #ff6159;
}
code {
color: lightblue;
}
}
form {
&>input {
inline-size: 100%;
background: transparent;
outline: none;
border: none;
}
code {
color: pink;
}
}
}
#manpage-widget {
--inner-padding: calc(var(--font-size)) calc(var(--font-size));
overflow-y: auto;
overflow-x: hidden;
padding: 1rem;
&>* {
margin-block-start: 0;
padding: var(--inner-padding);
}
a {
pointer-events: none;
::after {
content: none;
}
}
#SYNOPSIS {
margin-block-start: 0
}
h1 {
font-family: InterVariable, sans-serif;
font-size: var(--font-size);
font-weight: 400;
}
&>h1 {
position: sticky;
top: 0;
background: #000a;
border-radius: 1rem;
box-shadow: var(--inner-border);
backdrop-filter: blur(10px);
-webkit-backdrop-filter: blur(0.5rem);
&::before {
content: 'man';
display: block;
align-self: start;
margin-block: 0 1rem;
font-size: calc(var(--font-size) * 0.8);
font-weight: 300;
text-align: center;
max-inline-size: 4ch;
border-radius: 0.3rem;
box-shadow: var(--inner-border);
background: var(--accent-bg);
padding: 0.2rem;
}
}
& .manual-text>section:first-child {
display: none;
}
section>h1,
section>h2 {
text-transform: lowercase;
font-weight: 300;
font-style: italic;
}
& * {
text-decoration: none;
}
p:not(:has(*)) {
background: none;
border: none;
}
.Bl-tag dd {
margin-block-end: 1rem;
}
b,
i,
code,
pre {
font-family: var(--code-font-family);
}
table {
display: block;
overflow: auto;
tbody {
display: inline-block;
}
&:is(.head, .foot) {
display: none;
}
&.Nm tr {
display: block;
gap: 1rem;
}
td:nth-child(1) {
padding-inline-end: 0.5rem;
}
td:not(:has(*)) {
display: none;
}
}
section.Sh:nth-child(2) .Pp,
b:not(section.Sh:nth-child(2) .Pp b, dt b, pre b),
pre,
dt {
background: #fff3;
padding: 0.1rem 0.4rem;
border-radius: 0.3rem;
}
.Pp {
display: inline-block;
}
pre {
overflow: auto;
}
dt {
display: inline-block;
margin-block: 0.4rem;
}
}
}
.accent {
--spacing: calc(0.25 * var(--font-size));
display: inline-block;
font-weight: 300;
border-radius: 0.3rem;
padding: var(--spacing) calc(var(--spacing) * 2);
box-shadow: var(--inner-border);
background: var(--accent-bg);
backdrop-filter: blur(0.5rem);
-webkit-backdrop-filter: blur(0.5rem);
}
.widget {
position: relative;
background: black;
border-radius: 1rem;
box-shadow: inset 0 0 0 1px var(--accent-3),
0 0.2rem 2rem rgba(255, 255, 255, 0.1);
.traffic-lights {
--spacing: calc(0.5 * var(--font-size));
position: absolute;
top: var(--spacing);
left: calc(var(--spacing) * 1.25);
user-select: none;
.dot {
display: inline-block;
inline-size: var(--spacing);
block-size: var(--spacing);
margin-inline-end: 0.3rem;
background: red;
border-radius: 100%;
}
.red {
background: #ff6159;
}
.yellow {
background: #ffbd2e;
}
.green {
background: #28c941;
}
}
}
@keyframes blink-cursor {
from,
to {
border-inline-end: 0.15rem solid transparent;
}
50% {
border-inline-end: 0.15rem solid white;
}
}
@media all and (max-width: 60rem) {
.page {
&:nth-child(2) {
flex-direction: column;
.about {
margin: 5svb auto;
inline-size: 90%;
position: relative;
opacity: 1 !important;
}
#about-display {
display: contents;
}
}
}
#man-demo {
max-block-size: 80svb;
flex-direction: column;
#manpage-widget>h1 {
position: relative;
}
}
}
@media all and (min-width: 60rem) {
body {
scroll-snap-type: block mandatory;
}
.page {
flex-direction: row;
block-size: calc(100svb - calc(2 * var(--inner-padding)));
scroll-snap-align: center;
scroll-snap-stop: always;
.page-desc {
h1 {
font-size: calc(var(--font-size)* 1.7);
}
p {
font-size: calc(var(--font-size)* 1.1);
max-inline-size: 24ch;
}
}
}
}
@media all and (min-width: 60rem) and (max-width: 80rem) {
.page {
&:nth-child(3) {
flex-direction: row;
grid-template-columns: 4;
}
&:nth-child(2) {
#about {
font-size: calc(var(--font-size) * 1.2);
}
flex-direction: row;
grid-template-columns: 4;
}
.page-desc {
h1 {
font-size: calc(var(--font-size)* 1.3);
}
p {
font-size: calc(var(--font-size));
max-inline-size: 24ch;
}
}
}
#man-demo {
min-inline-size: 50vi;
inline-size: 50vi;
flex-direction: column-reverse;
.terminal:not(:only-child) {
transition: flex 0.8s;
flex: 0;
}
}
}
@media all and (min-width: 80rem) {
.page:nth-child(3) {
justify-content: space-between;
}
#man-demo {
flex-direction: row;
flex: 1;
max-inline-size: 60%;
justify-self: flex-end;
}
}
@keyframes fade-in {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
@keyframes fade-out {
from {
opacity: 1;
}
to {
opacity: 0;
}
}
@keyframes flex-in {
from {
flex: 0;
}
to {
flex: 1;
}
}

9
vite.config.ts Normal file
View File

@ -0,0 +1,9 @@
import { defineConfig } from "vite";
import wasmPack from "vite-plugin-wasm-pack";
export default defineConfig({
build: {
minify: false,
},
plugins: [wasmPack(["./george"])],
});