diff --git a/.gitignore b/.gitignore
index 8beec4d6..89776041 100644
--- a/.gitignore
+++ b/.gitignore
@@ -30,3 +30,6 @@ compile_commands.json
/smoke-test-*
/*.tgz
/build-artifacts
+.parcel-cache/
+dist/
+*.wasm
diff --git a/CMakeLists.txt b/CMakeLists.txt
index be34e2e4..6b0733d5 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -74,6 +74,42 @@ if(${ZMQ_ENABLE_SANITIZER_UNDEFINED})
set(ENABLE_SANITIZER_UNDEFINED "ENABLE_SANITIZER_UNDEFINED")
endif()
+option(ZMQ_WASM "Build for WebAssembly" OFF)
+set_option_from_env(ZMQ_WASM)
+
+if(ZMQ_WASM OR CMAKE_SYSTEM_NAME STREQUAL "Emscripten")
+ set(ZMQ_WASM TRUE)
+
+ # Compile for WebAssembly
+ set(VCPKG_HOST_TRIPLET wasm32-emscripten)
+ set(VCPKG_TARGET_TRIPLET wasm32-emscripten)
+
+ if ("$ENV{EMSCRIPTEN_ROOT}" STREQUAL "")
+ find_program(EMCC emcc REQUIRED)
+ get_filename_component(EMSCRIPTEN_ROOT "${EMCC}" DIRECTORY)
+ else()
+ set(EMSCRIPTEN_ROOT "$ENV{EMSCRIPTEN_ROOT}")
+ endif()
+
+ include(${EMSCRIPTEN_ROOT}/cmake/Modules/Platform/Emscripten.cmake)
+
+ set(CMAKE_LINKER "${EMSCRIPTEN_ROOT}/bin/lld${CMAKE_EXECUTABLE_SUFFIX}" CACHE STRING "Linker" FORCE)
+
+ add_compile_definitions("-D__wasm__" "-D__EMSCRIPTEN__")
+
+ # export an indirect function table for napi-wasm
+ add_link_options("--export-table")
+
+ # Add WebAssembly-specific exports for napi-wasm
+ add_link_options("SHELL:-s EXPORTED_FUNCTIONS=['_malloc','_free','_napi_register_wasm_v1']")
+ add_link_options("SHELL:-s EXPORTED_RUNTIME_METHODS=['ccall','cwrap']")
+ add_link_options("SHELL:-s ALLOW_MEMORY_GROWTH=1")
+ add_link_options("SHELL:-s ENVIRONMENT='node'")
+ add_link_options("SHELL:-s ERROR_ON_UNDEFINED_SYMBOLS=0")
+ add_link_options("SHELL:-s DISABLE_EXCEPTION_CATCHING=0")
+ add_link_options("--no-entry")
+endif()
+
# Set MacOS deployment target
if(APPLE)
option(MACOSX_DEPLOYMENT_TARGET "MacOS deployment target" "10.15")
@@ -124,10 +160,17 @@ project_options(
ENABLE_CACHE
ENABLE_COMPILE_COMMANDS_SYMLINK
${ENABLE_SANITIZER_UNDEFINED}
+ ENABLE_INTERPROCEDURAL_OPTIMIZATION
)
-file(GLOB_RECURSE SOURCES "./src/*.cc")
-add_library(addon SHARED ${SOURCES})
+file(GLOB_RECURSE SOURCES "./src/*.cc" "./src/*.cpp")
+
+if(ZMQ_WASM)
+ # For WebAssembly, create an executable instead of a shared library
+ add_executable(addon ${SOURCES})
+else()
+ add_library(addon SHARED ${SOURCES})
+endif()
if(CMAKE_CXX_COMPILER_ID STREQUAL GNU
OR CMAKE_CXX_COMPILER_ID STREQUAL Clang
@@ -145,6 +188,10 @@ if(ZMQ_NO_SYNC_RESOLVE)
target_compile_definitions(addon PRIVATE ZMQ_NO_SYNC_RESOLVE)
endif()
+if(ZMQ_WASM)
+ target_compile_definitions(addon PRIVATE ZMQ_WASM)
+endif()
+
# ZeroMQ
find_package(ZeroMQ CONFIG REQUIRED)
target_link_system_libraries(addon PRIVATE libzmq libzmq-static)
@@ -168,7 +215,11 @@ if(WIN32)
endif()
# Use `.node` for the library without any "lib" prefix
-set_target_properties(addon PROPERTIES PREFIX "" SUFFIX ".node")
+if(ZMQ_WASM)
+ set_target_properties(addon PROPERTIES PREFIX "" SUFFIX ".wasm")
+else()
+ set_target_properties(addon PROPERTIES PREFIX "" SUFFIX ".node")
+endif()
# Windows delay load node.exe
if(WIN32)
diff --git a/examples/wasm/index.html b/examples/wasm/index.html
new file mode 100644
index 00000000..d5d78b44
--- /dev/null
+++ b/examples/wasm/index.html
@@ -0,0 +1,7 @@
+
+
+
ZeroMQ
+
+
+
+
diff --git a/examples/wasm/index.mjs b/examples/wasm/index.mjs
new file mode 100644
index 00000000..330c5a6a
--- /dev/null
+++ b/examples/wasm/index.mjs
@@ -0,0 +1,40 @@
+import {Environment, napi} from "napi-wasm"
+
+async function getWasm() {
+ if (typeof window === "undefined") {
+ // Nodejs
+ const fs = await import("fs/promises")
+ const path = await import("path")
+ const url = await import("url")
+
+ const __dirname = path.dirname(url.fileURLToPath(import.meta.url))
+
+ return (await fs.readFile(path.join(__dirname, "addon.wasm")))
+ }
+
+ // Browser
+ const response = await fetch("./addon.wasm")
+ if (!response.ok) {
+ throw new Error(`Failed to fetch wasm: ${response.statusText}`)
+ }
+ return await response.arrayBuffer()
+}
+
+async function main() {
+ const wasm = await getWasm()
+
+ const {instance} = await WebAssembly.instantiate(wasm, {
+ napi: napi,
+ env: {} // The env imports will be provided by napi-wasm
+ })
+
+ // Create an environment.
+ let env = new Environment(instance)
+ let exports = env.exports
+
+ console.log(exports)
+}
+
+main().catch(err => {
+ throw err
+})
diff --git a/examples/wasm/package.json b/examples/wasm/package.json
new file mode 100644
index 00000000..a5427658
--- /dev/null
+++ b/examples/wasm/package.json
@@ -0,0 +1,15 @@
+{
+ "name": "browser",
+ "version": "1.0.0",
+ "description": "",
+ "scripts": {
+ "start": "parcel serve index.html"
+ },
+ "keywords": [],
+ "author": "",
+ "license": "ISC",
+ "packageManager": "pnpm@10.8.0",
+ "devDependencies": {
+ "parcel": "^2.15.4"
+ }
+}
diff --git a/examples/wasm/pnpm-lock.yaml b/examples/wasm/pnpm-lock.yaml
new file mode 100644
index 00000000..b0512bb6
--- /dev/null
+++ b/examples/wasm/pnpm-lock.yaml
@@ -0,0 +1,1786 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ devDependencies:
+ parcel:
+ specifier: ^2.15.4
+ version: 2.15.4(@swc/helpers@0.5.17)
+
+packages:
+
+ '@lezer/common@1.2.3':
+ resolution: {integrity: sha512-w7ojc8ejBqr2REPsWxJjrMFsA/ysDCFICn8zEOR9mrqzOu2amhITYuLD8ag6XZf0CFXDrhKqw7+tW8cX66NaDA==}
+
+ '@lezer/lr@1.4.2':
+ resolution: {integrity: sha512-pu0K1jCIdnQ12aWNaAVU5bzi7Bd1w54J3ECgANPmYLtQKP0HBj2cE/5coBD66MT10xbtIuUr7tg0Shbsvk0mDA==}
+
+ '@lmdb/lmdb-darwin-arm64@2.8.5':
+ resolution: {integrity: sha512-KPDeVScZgA1oq0CiPBcOa3kHIqU+pTOwRFDIhxvmf8CTNvqdZQYp5cCKW0bUk69VygB2PuTiINFWbY78aR2pQw==}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@lmdb/lmdb-darwin-x64@2.8.5':
+ resolution: {integrity: sha512-w/sLhN4T7MW1nB3R/U8WK5BgQLz904wh+/SmA2jD8NnF7BLLoUgflCNxOeSPOWp8geP6nP/+VjWzZVip7rZ1ug==}
+ cpu: [x64]
+ os: [darwin]
+
+ '@lmdb/lmdb-linux-arm64@2.8.5':
+ resolution: {integrity: sha512-vtbZRHH5UDlL01TT5jB576Zox3+hdyogvpcbvVJlmU5PdL3c5V7cj1EODdh1CHPksRl+cws/58ugEHi8bcj4Ww==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@lmdb/lmdb-linux-arm@2.8.5':
+ resolution: {integrity: sha512-c0TGMbm2M55pwTDIfkDLB6BpIsgxV4PjYck2HiOX+cy/JWiBXz32lYbarPqejKs9Flm7YVAKSILUducU9g2RVg==}
+ cpu: [arm]
+ os: [linux]
+
+ '@lmdb/lmdb-linux-x64@2.8.5':
+ resolution: {integrity: sha512-Xkc8IUx9aEhP0zvgeKy7IQ3ReX2N8N1L0WPcQwnZweWmOuKfwpS3GRIYqLtK5za/w3E60zhFfNdS+3pBZPytqQ==}
+ cpu: [x64]
+ os: [linux]
+
+ '@lmdb/lmdb-win32-x64@2.8.5':
+ resolution: {integrity: sha512-4wvrf5BgnR8RpogHhtpCPJMKBmvyZPhhUtEwMJbXh0ni2BucpfF07jlmyM11zRqQ2XIq6PbC2j7W7UCCcm1rRQ==}
+ cpu: [x64]
+ os: [win32]
+
+ '@mischnic/json-sourcemap@0.1.1':
+ resolution: {integrity: sha512-iA7+tyVqfrATAIsIRWQG+a7ZLLD0VaOCKV2Wd/v4mqIU3J9c4jx9p7S0nw1XH3gJCKNBOOwACOPYYSUu9pgT+w==}
+ engines: {node: '>=12.0.0'}
+
+ '@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3':
+ resolution: {integrity: sha512-QZHtlVgbAdy2zAqNA9Gu1UpIuI8Xvsd1v8ic6B2pZmeFnFcMWiPLfWXh7TVw4eGEZ/C9TH281KwhVoeQUKbyjw==}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.3':
+ resolution: {integrity: sha512-mdzd3AVzYKuUmiWOQ8GNhl64/IoFGol569zNRdkLReh6LRLHOXxU4U8eq0JwaD8iFHdVGqSy4IjFL4reoWCDFw==}
+ cpu: [x64]
+ os: [darwin]
+
+ '@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.3':
+ resolution: {integrity: sha512-YxQL+ax0XqBJDZiKimS2XQaf+2wDGVa1enVRGzEvLLVFeqa5kx2bWbtcSXgsxjQB7nRqqIGFIcLteF/sHeVtQg==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@msgpackr-extract/msgpackr-extract-linux-arm@3.0.3':
+ resolution: {integrity: sha512-fg0uy/dG/nZEXfYilKoRe7yALaNmHoYeIoJuJ7KJ+YyU2bvY8vPv27f7UKhGRpY6euFYqEVhxCFZgAUNQBM3nw==}
+ cpu: [arm]
+ os: [linux]
+
+ '@msgpackr-extract/msgpackr-extract-linux-x64@3.0.3':
+ resolution: {integrity: sha512-cvwNfbP07pKUfq1uH+S6KJ7dT9K8WOE4ZiAcsrSes+UY55E/0jLYc+vq+DO7jlmqRb5zAggExKm0H7O/CBaesg==}
+ cpu: [x64]
+ os: [linux]
+
+ '@msgpackr-extract/msgpackr-extract-win32-x64@3.0.3':
+ resolution: {integrity: sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ==}
+ cpu: [x64]
+ os: [win32]
+
+ '@parcel/bundler-default@2.15.4':
+ resolution: {integrity: sha512-4vkaZuwGqL8L7NqEgjRznz9/QoeVKk0Z6z2nzfpdnSWA4xX3moUj+JeoqGUbyFGuPzfCma4SA4+txnQbKu0edQ==}
+ engines: {node: '>= 16.0.0', parcel: ^2.15.4}
+
+ '@parcel/cache@2.15.4':
+ resolution: {integrity: sha512-x/QgMuVvXQV6uNhIF+6kz6SzhVVkwf6WPSVG/xQvGMEiBabForDVYIhIEuN3RzUXCU352CGM6d8TtLLg61W1fw==}
+ engines: {node: '>= 16.0.0'}
+ peerDependencies:
+ '@parcel/core': ^2.15.4
+
+ '@parcel/codeframe@2.15.4':
+ resolution: {integrity: sha512-ErAPEQaJIpB+ocNZ3rl8AEK6piA7JBInwZLNU0eHMthm01Ssb10JkpAadyn1w9IVfCey+kqQcEeWv47Yh6mL1Q==}
+ engines: {node: '>= 16.0.0'}
+
+ '@parcel/compressor-raw@2.15.4':
+ resolution: {integrity: sha512-gECePZxVXBwyo0DYbAq4V4SimVzHaJ3p8QOgFIfOqNmlEBbhLf3QSjArFPJNKiHZaJuclh4a+IShFBN+u6tXXw==}
+ engines: {node: '>= 16.0.0', parcel: ^2.15.4}
+
+ '@parcel/config-default@2.15.4':
+ resolution: {integrity: sha512-chUE4NpcSXpMfTcSmgl4Q78zH+ZFe0qdgZLBtF4EH2QQakW7wAXAYRxS2/P3xFkUj0/51sExhbCFWgulrlGDPw==}
+ peerDependencies:
+ '@parcel/core': ^2.15.4
+
+ '@parcel/core@2.15.4':
+ resolution: {integrity: sha512-+TXxTm58lFwXXObFAEclwKX1p1AdixcD+M7T4NeFIQzQ4F20Vr+6oybCSqW1exNA3uHqVDDFLx7TT78seVjvkg==}
+ engines: {node: '>= 16.0.0'}
+
+ '@parcel/diagnostic@2.15.4':
+ resolution: {integrity: sha512-8MAqefwzBKceNN3364OLm+p4HRD7AfimfFW3MntLxPB6bnelc9UBg5c9zEm34zYEctbmky8gqYgAUSDjqYC5Hw==}
+ engines: {node: '>= 16.0.0'}
+
+ '@parcel/error-overlay@2.15.4':
+ resolution: {integrity: sha512-xxeaWm8fV8Z4uGy/c09mOvmFSHBOgF1gCMQwLCwZvfMLqIWkdZaUQ2cRhWZIS6pOXaRVC7YpcXzk2DOiSUNSbQ==}
+ engines: {node: '>= 16.0.0'}
+
+ '@parcel/events@2.15.4':
+ resolution: {integrity: sha512-SBq4zstaFr7XQaXNaQmUuVh1swCUHrhtPCOSofvkJoQGhjsuhQlh4t0NmUikyKNdj7C1j40xCS1kGHuUO29b0g==}
+ engines: {node: '>= 16.0.0'}
+
+ '@parcel/feature-flags@2.15.4':
+ resolution: {integrity: sha512-DJqZVtbfjWJseM0gk7yyDkAuOhP7/FVwZ/YVqjozIqXBhmQm07xctiqNQyZX2vBbQsxmVbjpqyq+DOj45WPEzQ==}
+ engines: {node: '>= 16.0.0'}
+
+ '@parcel/fs@2.15.4':
+ resolution: {integrity: sha512-5cahD2ByQaSi+YN0aDvrMWXZvs3mP7C5ey8zcDTDn7JxJa51sMqOQcdU3VUTzQFtAPeRM2KxUkxLhBBXgQqHZA==}
+ engines: {node: '>= 16.0.0'}
+ peerDependencies:
+ '@parcel/core': ^2.15.4
+
+ '@parcel/graph@3.5.4':
+ resolution: {integrity: sha512-uF7kyQXWK2fQZvG5eE0N3avYGLQE5Q0vyJsyypNcFW3kXNnrkZCUtbG7urmdae9mmZ2jXIVN4q4Bhd9pefGj9A==}
+ engines: {node: '>= 16.0.0'}
+
+ '@parcel/logger@2.15.4':
+ resolution: {integrity: sha512-rQ7F5+FMQ7t+w5NGFRT8CWHhym0aunduufCjlafvRzUSKEN/5/nwTfCe9I5QsthGlXJWs+ZTy4zQ+wLtZQRBKQ==}
+ engines: {node: '>= 16.0.0'}
+
+ '@parcel/markdown-ansi@2.15.4':
+ resolution: {integrity: sha512-u5Lwcr4ZVBSLFbKYht+mJqJ3ZMXvJdmDMU5eDtrIEKPpu9LrIDdPpDEXBoyO6pDsoV/2AqyXUUMzBRyCatkkoQ==}
+ engines: {node: '>= 16.0.0'}
+
+ '@parcel/namer-default@2.15.4':
+ resolution: {integrity: sha512-EXsoQ1S+5ZIfy8431E7F0vVS7bfH5JpZ+vFVcUpArJDkhmMG7T/eP6Kp9CXHLJmn7ki1x7iIVytrja0XXRQWBQ==}
+ engines: {node: '>= 16.0.0', parcel: ^2.15.4}
+
+ '@parcel/node-resolver-core@3.6.4':
+ resolution: {integrity: sha512-g3+usMnr7pfRqbMAksOpNA7GJk7HUNW1Wxx7Shhp4w0K9JUdVrd2LRKwZxbqL7H9NqWtVvUOT9cZbMlDR6bO1w==}
+ engines: {node: '>= 16.0.0'}
+
+ '@parcel/optimizer-css@2.15.4':
+ resolution: {integrity: sha512-KQLuqwcvVFTNFtM+bzfvQivwunmhVAngmR4NiI8zQaykidYH28V8YkVAQmpbLbgoGad/UgG7grb0UshvnrQHpw==}
+ engines: {node: '>= 16.0.0', parcel: ^2.15.4}
+
+ '@parcel/optimizer-html@2.15.4':
+ resolution: {integrity: sha512-gBvt6RdDVMyO1Flvdtc8DxpxLgIXhaKuVXEjHdAP7sEW0SMdSd6r/tl6Plmcszig7sDwhDf6IsQOIvbzGHYZZg==}
+ engines: {node: '>= 16.0.0', parcel: ^2.15.4}
+
+ '@parcel/optimizer-image@2.15.4':
+ resolution: {integrity: sha512-M8fo7eEL6JRcmLhSX9pUUGU4MPrPrE9cMNcwIt3DQLnSvQ+sshhUDa6t9hKWeHHhs16BHvxrvksN2TIbkgHODQ==}
+ engines: {node: '>= 16.0.0', parcel: ^2.15.4}
+ peerDependencies:
+ '@parcel/core': ^2.15.4
+
+ '@parcel/optimizer-svg@2.15.4':
+ resolution: {integrity: sha512-pPdjRaLPqjAEROXIHLc6JWLLki56alhuUNbalhLqBCgktZrrq2dGCjBEVgxqRczc9D+ePCX/e/xci4tC0Tkcbg==}
+ engines: {node: '>= 16.0.0', parcel: ^2.15.4}
+
+ '@parcel/optimizer-swc@2.15.4':
+ resolution: {integrity: sha512-2m5cYESVCq6AGx252eSTArZ1Oc1Ve4GBGL7NhvgbNqOthyXlc2qAed6rCkARrBd8pfEl5+2XHeK1ijDAZdIZ/A==}
+ engines: {node: '>= 16.0.0', parcel: ^2.15.4}
+
+ '@parcel/package-manager@2.15.4':
+ resolution: {integrity: sha512-KZONBcEJ24moQdrpU0zJh9CYk3KKbpB5RUM70utAORem1yQKms+0Y4YED3njq6nZzbgwUN/Csc+powUHLZStvg==}
+ engines: {node: '>= 16.0.0'}
+ peerDependencies:
+ '@parcel/core': ^2.15.4
+
+ '@parcel/packager-css@2.15.4':
+ resolution: {integrity: sha512-bzSaNf+I5lmJFu95wSG2k7pGwjCDesZsV6Y9sozIL2LoSxqvkGhm/ABXAa3Ed7dLe3tSAEBzJcyqShQgLzSzuw==}
+ engines: {node: '>= 16.0.0', parcel: ^2.15.4}
+
+ '@parcel/packager-html@2.15.4':
+ resolution: {integrity: sha512-Uayux6A2Anm66Kmq22QhD0TuVp9LiRCMuPUzBd6n4ekNlG0Lzm6K3/okMkPG65nKbNjq5qcPscFWlDxggvjt2g==}
+ engines: {node: '>= 16.0.0', parcel: ^2.15.4}
+
+ '@parcel/packager-js@2.15.4':
+ resolution: {integrity: sha512-96bqhs1jyd28CfWQD+Yn8rSsd1ar7voHWyBtMLimsK+bDJIzL26Z7jWyRDwXRuLErYC01EoXRIRctxtmeRVJ2Q==}
+ engines: {node: '>= 16.0.0', parcel: ^2.15.4}
+
+ '@parcel/packager-raw@2.15.4':
+ resolution: {integrity: sha512-CaSpDt5jjcO0SYCtsDhw6yfTDQuDFQ875H42W/ftvSQL7RfLRljPthnbdcy9chvKBbvRBQF+0z8Sxwehrd5hsA==}
+ engines: {node: '>= 16.0.0', parcel: ^2.15.4}
+
+ '@parcel/packager-svg@2.15.4':
+ resolution: {integrity: sha512-qHsyOgnzoA2XGMLIYUnX79XAaV327VTWQvIzju/OmOjcff4o3uiEcNL8w9k3p2w2oPXOLoQ0THMiivoUQSM8GQ==}
+ engines: {node: '>= 16.0.0', parcel: ^2.15.4}
+
+ '@parcel/packager-wasm@2.15.4':
+ resolution: {integrity: sha512-YPVij7zrBchtXr/y29P4uh3C/+19PMhhLibYF/8oMJKkFkeU3Uv00/XLm915vdBPrIPjgw0YuIfLzUKip1uGtg==}
+ engines: {node: '>=16.0.0', parcel: ^2.15.4}
+
+ '@parcel/plugin@2.15.4':
+ resolution: {integrity: sha512-XVehjmzk8ZDOFf/BXo26L76ZqCGNKIQcN2ngxAnq0KRY/WFanL8yLaL0qQq+c9whlu09hkGz1CuhFBLAIjJMYQ==}
+ engines: {node: '>= 16.0.0'}
+
+ '@parcel/profiler@2.15.4':
+ resolution: {integrity: sha512-ezVZlttUmQ1MQD5e8yVb07vSGYEFOB59Y/jaxL9mGSLZkVhMIIHe/7SuA+4qVAH8dlg6bslXRqlsunLMPEgPsg==}
+ engines: {node: '>= 16.0.0'}
+
+ '@parcel/reporter-cli@2.15.4':
+ resolution: {integrity: sha512-us0HIwuJqpSguf+yi4n8foabVs26JGvRB/eSOf0KkRldxFciYLn4NJ8rt3Xm1zvxlDiSkD4v2n77u+ouIZ+AEQ==}
+ engines: {node: '>= 16.0.0', parcel: ^2.15.4}
+
+ '@parcel/reporter-dev-server@2.15.4':
+ resolution: {integrity: sha512-uCNeDyArNNXI9YThlxyTx7+5ZSxlewyUdyrLdDZCqvn8s1xNB9W8sUNVps7mJZQSc+2ZRk3wyDemURD67uJk/A==}
+ engines: {node: '>= 16.0.0', parcel: ^2.15.4}
+
+ '@parcel/reporter-tracer@2.15.4':
+ resolution: {integrity: sha512-9W1xsb/FtobCQ4z847nI6hFDaTZHLeThv/z05EF77R30RX2k+unG9ac5NQB1v4KLx09Bhfre32+sjYNReWxWlg==}
+ engines: {node: '>= 16.0.0', parcel: ^2.15.4}
+
+ '@parcel/resolver-default@2.15.4':
+ resolution: {integrity: sha512-4uKo3FFnubtIc4rM9jZiQQXpa1slawyRy5btJEfTFvbcnz0dm3WThLrsPDMfmPwNr9F/n5x8yzDLI6/fZ/elgA==}
+ engines: {node: '>= 16.0.0', parcel: ^2.15.4}
+
+ '@parcel/runtime-browser-hmr@2.15.4':
+ resolution: {integrity: sha512-KRGzbxDUOQUkrJKxxY0WyU7oVaa9TvWTRlpuGJXzQJs/hw8vkAAoAm8+ptpypvBC8LnxFHzGbSyHPfL8C8MQOw==}
+ engines: {node: '>= 16.0.0', parcel: ^2.15.4}
+
+ '@parcel/runtime-js@2.15.4':
+ resolution: {integrity: sha512-zNRK+693CMkYiA0ckjPOmz+JVHD9bVzp27itcMyuDH6l/Or8m09RgCC4DIdIxBqiplsDSe39DwEc5X7b0vvcjw==}
+ engines: {node: '>= 16.0.0', parcel: ^2.15.4}
+
+ '@parcel/runtime-rsc@2.15.4':
+ resolution: {integrity: sha512-yHc4HEwzCQYLqa6Q1WtZ8xJeaDAk0p2i0b3ABq2I+izmRjer4jertlsEwh9mf9Z1eUGtJobdGYzl8Ai1VfhC3g==}
+ engines: {node: '>= 12.0.0', parcel: ^2.15.4}
+
+ '@parcel/runtime-service-worker@2.15.4':
+ resolution: {integrity: sha512-NGq/wS34GIVzo2ZURBjCqgHV+PU7eTcngCzmmk/wrCEeWnr13ld+CAIxVZoqyNJwYsF6VQanrjSM2/LhCXEdyA==}
+ engines: {node: '>= 16.0.0', parcel: ^2.15.4}
+
+ '@parcel/rust-darwin-arm64@2.15.4':
+ resolution: {integrity: sha512-cEpNDeEtvM5Nhj0QLN95QbcZ9yY6Z5W3+2OeHvnojEAP8Rp1XGzqVTTZdlyKyN1KTiyfzIOiQJCiEcr+kMc5Nw==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@parcel/rust-darwin-x64@2.15.4':
+ resolution: {integrity: sha512-jL9i13sXKeBXXz8Z3BNYoScPOi+ljBA0ubAE3PN5DCoAA6wS4/FsAiRSIUw+3uxqASBD7+JvaT5sDUga1Xft5g==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@parcel/rust-linux-arm-gnueabihf@2.15.4':
+ resolution: {integrity: sha512-c8HpVdDugCutlMILoOlkTioih9HGJpQrzS2G3cg/O1a5ZTacooGf3eGJGoh6dUBEv9WEaEb6zsTRwFv2BgtZcA==}
+ engines: {node: '>= 10'}
+ cpu: [arm]
+ os: [linux]
+
+ '@parcel/rust-linux-arm64-gnu@2.15.4':
+ resolution: {integrity: sha512-Wcfs/JY4FnuLxQaU+VX2rI4j376Qo2LkZmq4zp9frnsajaAqmloVQfnbUkdnQPEL4I38eHXerzBX3LoXSxnZKA==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@parcel/rust-linux-arm64-musl@2.15.4':
+ resolution: {integrity: sha512-xf9HxosEn3dU5M0zDSXqBaG8rEjLThRdTYqpkxHW/qQGzy0Se+/ntg8PeDHsSG5E9OK8xrcKH46Lhaw0QBF/Zw==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@parcel/rust-linux-x64-gnu@2.15.4':
+ resolution: {integrity: sha512-RigXVCFj6h0AXmkuxU61rfgYuW+PXBR6qSkR2I20yKnAXoMfxLaZy9YJ3sAPMEjT9zXgzGAX+3syItMF+bRjaw==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ '@parcel/rust-linux-x64-musl@2.15.4':
+ resolution: {integrity: sha512-tHlRgonSr5ca8OvhbGzZUggCgCOirRz5dHhPSCm4ajMxeDMamwprq6lKy0sCNTXht4TXIEyugBcfEuRKEeVIBw==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ '@parcel/rust-win32-x64-msvc@2.15.4':
+ resolution: {integrity: sha512-YsX6vMl/bfyxqZSN7yiaZQKLoJKELSZYcvg8gIv4CF1xkaTdmfr6gvq2iCyoV+bwrodNohN4Xfl8r7Wniu1/UA==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [win32]
+
+ '@parcel/rust@2.15.4':
+ resolution: {integrity: sha512-OxOux8z8YEYg23+15uMmYaloFp3x1RwcliBay6HqxUW7RTmtI1/z+xd8AtienCckACD60gvDGy04LjgbEGdJVg==}
+ engines: {node: '>= 16.0.0'}
+ peerDependencies:
+ napi-wasm: ^1.1.2
+ peerDependenciesMeta:
+ napi-wasm:
+ optional: true
+
+ '@parcel/source-map@2.1.1':
+ resolution: {integrity: sha512-Ejx1P/mj+kMjQb8/y5XxDUn4reGdr+WyKYloBljpppUy8gs42T+BNoEOuRYqDVdgPc6NxduzIDoJS9pOFfV5Ew==}
+ engines: {node: ^12.18.3 || >=14}
+
+ '@parcel/transformer-babel@2.15.4':
+ resolution: {integrity: sha512-rb4nqZcTLkLD3nvuYJ9wwNb8x6cajBK2l6csdYMLEI4516SkIzkO/gs2cZ9M5q+CMhxAqpdEnrwektbOtQQasg==}
+ engines: {node: '>= 16.0.0', parcel: ^2.15.4}
+
+ '@parcel/transformer-css@2.15.4':
+ resolution: {integrity: sha512-6tVwSJsOssXgcB5XMAQGsexAffoBEi8GVql3YQqzI1EwVYs9zr+B5mfbesb4aWcegR02w99NHJYFP9CrOr3SWw==}
+ engines: {node: '>= 16.0.0', parcel: ^2.15.4}
+
+ '@parcel/transformer-html@2.15.4':
+ resolution: {integrity: sha512-gzYPbbyEuV8nzPojw86eD5Kf93AYUWcY8lu33gu0XHROJH7mq5MAwPwtb/U+EfpeCd0/oKbLzA2mkQksM1NncQ==}
+ engines: {node: '>= 16.0.0', parcel: ^2.15.4}
+
+ '@parcel/transformer-image@2.15.4':
+ resolution: {integrity: sha512-KOVwj2gKjUybuzHwarC/YVqRf3r2BD4/2ysckozj6DIji/bq3fd2rE9yqxWXO+zt918PsOSTzMKwRnaseaXLKQ==}
+ engines: {node: '>= 16.0.0', parcel: ^2.15.4}
+ peerDependencies:
+ '@parcel/core': ^2.15.4
+
+ '@parcel/transformer-js@2.15.4':
+ resolution: {integrity: sha512-HX76PalPjqCLmXJnuSeMr2km8WlnUsW8oaRZ6FuZtSo9QD8BqIcwKGxSbIy9JHkObBgmrMOVpGtYrJM4/BlYbg==}
+ engines: {node: '>= 16.0.0', parcel: ^2.15.4}
+ peerDependencies:
+ '@parcel/core': ^2.15.4
+
+ '@parcel/transformer-json@2.15.4':
+ resolution: {integrity: sha512-1ASeOSH3gPeaXyy/TZ7ce2TOfJ3ZeK5SBnDs+MM8LFcQsTwdRJKjX/4Qq9RgtMRryYAGHgMa09Gvp9FuFRyd+w==}
+ engines: {node: '>= 16.0.0', parcel: ^2.15.4}
+
+ '@parcel/transformer-node@2.15.4':
+ resolution: {integrity: sha512-zV5jvZA971eQMcFtaWZkW1UfAH/G6XVM/87oJ2B4ip9o9aKUWIl296rrfg2xWxUQyPhy11B17CJ6b8NgieqqrQ==}
+ engines: {node: '>= 16.0.0', parcel: ^2.15.4}
+
+ '@parcel/transformer-postcss@2.15.4':
+ resolution: {integrity: sha512-cNueSpOj3ulmMX85xr9clh/t0+mzVE+Q3H7Cf/OammqUkG/xjmilq4q7ZTgQFyUtUdWpE9LWWHojbJuz6k2Ulw==}
+ engines: {node: '>= 16.0.0', parcel: ^2.15.4}
+
+ '@parcel/transformer-posthtml@2.15.4':
+ resolution: {integrity: sha512-dETI+CeKMwu5Dpvu8BrQtex6nwzbNWKQkXseiM5x6+Wf3j9RD2NVpAMBRMjLkw1XlC9Whz1egxLSgKlMKbjg0w==}
+ engines: {node: '>= 16.0.0', parcel: ^2.15.4}
+
+ '@parcel/transformer-raw@2.15.4':
+ resolution: {integrity: sha512-pY2j09UCW2v1fwQtVLlCztSdPOxhq0YcWmTHCk/mRp8zuUR+eyHgsz48FrUxRF7cr/EBjc0zlFcregRMRcaTMg==}
+ engines: {node: '>= 16.0.0', parcel: ^2.15.4}
+
+ '@parcel/transformer-react-refresh-wrap@2.15.4':
+ resolution: {integrity: sha512-MgoQrV8+BVjrczAns5ZZbTERGB3/U4MaCBmbg3CuiTiIyS8IJQnGi+OhYRdKAB4NlsgpMZ5T2JrRbQUIm9MM8Q==}
+ engines: {node: '>= 16.0.0', parcel: ^2.15.4}
+
+ '@parcel/transformer-svg@2.15.4':
+ resolution: {integrity: sha512-Q22e0VRbx62VXFlvJWIlc8ihlLaPQgtnAZz5E1/+ojiNb+k0PmIRjNJclVWPF6IdCsLO5tnGfUOaXe2OnZz28Q==}
+ engines: {node: '>= 16.0.0', parcel: ^2.15.4}
+
+ '@parcel/types-internal@2.15.4':
+ resolution: {integrity: sha512-kl5QEZ8PTWRvMkwmk7IG3VpP/5/MSGwt9Nrj9ctXLdZkDdXZpK7IbXAthLQ4zrByMaqZULL2IyDuBqBgfuAqlQ==}
+
+ '@parcel/types@2.15.4':
+ resolution: {integrity: sha512-fS3UMMinLtzn/NTSx/qx38saBgRniylldh0XZEUcGeME4D2Llu/QlLv+YZ/LJqrFci3fPRM+YAn2K+JT/u+/0w==}
+
+ '@parcel/utils@2.15.4':
+ resolution: {integrity: sha512-29m09sfPx0GHnmy1kkZ5XezprepdFGKKKUEJkyiYA4ERf55jjdnU2/GP4sWlZXxjh2Y+JFoCAFlCamEClq/8eA==}
+ engines: {node: '>= 16.0.0'}
+
+ '@parcel/watcher-android-arm64@2.5.1':
+ resolution: {integrity: sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm64]
+ os: [android]
+
+ '@parcel/watcher-darwin-arm64@2.5.1':
+ resolution: {integrity: sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@parcel/watcher-darwin-x64@2.5.1':
+ resolution: {integrity: sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@parcel/watcher-freebsd-x64@2.5.1':
+ resolution: {integrity: sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@parcel/watcher-linux-arm-glibc@2.5.1':
+ resolution: {integrity: sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm]
+ os: [linux]
+
+ '@parcel/watcher-linux-arm-musl@2.5.1':
+ resolution: {integrity: sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm]
+ os: [linux]
+
+ '@parcel/watcher-linux-arm64-glibc@2.5.1':
+ resolution: {integrity: sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@parcel/watcher-linux-arm64-musl@2.5.1':
+ resolution: {integrity: sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@parcel/watcher-linux-x64-glibc@2.5.1':
+ resolution: {integrity: sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [x64]
+ os: [linux]
+
+ '@parcel/watcher-linux-x64-musl@2.5.1':
+ resolution: {integrity: sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [x64]
+ os: [linux]
+
+ '@parcel/watcher-win32-arm64@2.5.1':
+ resolution: {integrity: sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@parcel/watcher-win32-ia32@2.5.1':
+ resolution: {integrity: sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@parcel/watcher-win32-x64@2.5.1':
+ resolution: {integrity: sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [x64]
+ os: [win32]
+
+ '@parcel/watcher@2.5.1':
+ resolution: {integrity: sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==}
+ engines: {node: '>= 10.0.0'}
+
+ '@parcel/workers@2.15.4':
+ resolution: {integrity: sha512-wZ/5/mfjs5aeqhXY0c6fwuaBFeNpOXoOq2CKPSMDXt+GX2u/9/1bpVxN9XeGTAJO+ZD++CLq0hyzTnIHy58nyw==}
+ engines: {node: '>= 16.0.0'}
+ peerDependencies:
+ '@parcel/core': ^2.15.4
+
+ '@swc/core-darwin-arm64@1.12.9':
+ resolution: {integrity: sha512-GACFEp4nD6V+TZNR2JwbMZRHB+Yyvp14FrcmB6UCUYmhuNWjkxi+CLnEvdbuiKyQYv0zA+TRpCHZ+whEs6gwfA==}
+ engines: {node: '>=10'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@swc/core-darwin-x64@1.12.9':
+ resolution: {integrity: sha512-hv2kls7Ilkm2EpeJz+I9MCil7pGS3z55ZAgZfxklEuYsxpICycxeH+RNRv4EraggN44ms+FWCjtZFu0LGg2V3g==}
+ engines: {node: '>=10'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@swc/core-linux-arm-gnueabihf@1.12.9':
+ resolution: {integrity: sha512-od9tDPiG+wMU9wKtd6y3nYJdNqgDOyLdgRRcrj1/hrbHoUPOM8wZQZdwQYGarw63iLXGgsw7t5HAF9Yc51ilFA==}
+ engines: {node: '>=10'}
+ cpu: [arm]
+ os: [linux]
+
+ '@swc/core-linux-arm64-gnu@1.12.9':
+ resolution: {integrity: sha512-6qx1ka9LHcLzxIgn2Mros+CZLkHK2TawlXzi/h7DJeNnzi8F1Hw0Yzjp8WimxNCg6s2n+o3jnmin1oXB7gg8rw==}
+ engines: {node: '>=10'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@swc/core-linux-arm64-musl@1.12.9':
+ resolution: {integrity: sha512-yghFZWKPVVGbUdqiD7ft23G0JX6YFGDJPz9YbLLAwGuKZ9th3/jlWoQDAw1Naci31LQhVC+oIji6ozihSuwB2A==}
+ engines: {node: '>=10'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@swc/core-linux-x64-gnu@1.12.9':
+ resolution: {integrity: sha512-SFUxyhWLZRNL8QmgGNqdi2Q43PNyFVkRZ2zIif30SOGFSxnxcf2JNeSeBgKIGVgaLSuk6xFVVCtJ3KIeaStgRg==}
+ engines: {node: '>=10'}
+ cpu: [x64]
+ os: [linux]
+
+ '@swc/core-linux-x64-musl@1.12.9':
+ resolution: {integrity: sha512-9FB0wM+6idCGTI20YsBNBg9xSWtkDBymnpaTCsZM3qDc0l4uOpJMqbfWhQvp17x7r/ulZfb2QY8RDvQmCL6AcQ==}
+ engines: {node: '>=10'}
+ cpu: [x64]
+ os: [linux]
+
+ '@swc/core-win32-arm64-msvc@1.12.9':
+ resolution: {integrity: sha512-zHOusMVbOH9ik5RtRrMiGzLpKwxrPXgXkBm3SbUCa65HAdjV33NZ0/R9Rv1uPESALtEl2tzMYLUxYA5ECFDFhA==}
+ engines: {node: '>=10'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@swc/core-win32-ia32-msvc@1.12.9':
+ resolution: {integrity: sha512-aWZf0PqE0ot7tCuhAjRkDFf41AzzSQO0x2xRfTbnhpROp57BRJ/N5eee1VULO/UA2PIJRG7GKQky5bSGBYlFug==}
+ engines: {node: '>=10'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@swc/core-win32-x64-msvc@1.12.9':
+ resolution: {integrity: sha512-C25fYftXOras3P3anSUeXXIpxmEkdAcsIL9yrr0j1xepTZ/yKwpnQ6g3coj8UXdeJy4GTVlR6+Ow/QiBgZQNOg==}
+ engines: {node: '>=10'}
+ cpu: [x64]
+ os: [win32]
+
+ '@swc/core@1.12.9':
+ resolution: {integrity: sha512-O+LfT2JlVMsIMWG9x+rdxg8GzpzeGtCZQfXV7cKc1PjIKUkLFf1QJ7okuseA4f/9vncu37dQ2ZcRrPKy0Ndd5g==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@swc/helpers': '>=0.5.17'
+ peerDependenciesMeta:
+ '@swc/helpers':
+ optional: true
+
+ '@swc/counter@0.1.3':
+ resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==}
+
+ '@swc/helpers@0.5.17':
+ resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==}
+
+ '@swc/types@0.1.23':
+ resolution: {integrity: sha512-u1iIVZV9Q0jxY+yM2vw/hZGDNudsN85bBpTqzAQ9rzkxW9D+e3aEM4Han+ow518gSewkXgjmEK0BD79ZcNVgPw==}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ base-x@3.0.11:
+ resolution: {integrity: sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==}
+
+ braces@3.0.3:
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+ engines: {node: '>=8'}
+
+ browserslist@4.25.1:
+ resolution: {integrity: sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==}
+ engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
+ hasBin: true
+
+ caniuse-lite@1.0.30001726:
+ resolution: {integrity: sha512-VQAUIUzBiZ/UnlM28fSp2CRF3ivUn1BWEvxMcVTNwpw91Py1pGbPIyIKtd+tzct9C3ouceCVdGAXxZOpZAsgdw==}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ chrome-trace-event@1.0.4:
+ resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==}
+ engines: {node: '>=6.0'}
+
+ clone@2.1.2:
+ resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==}
+ engines: {node: '>=0.8'}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ commander@12.1.0:
+ resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==}
+ engines: {node: '>=18'}
+
+ detect-libc@1.0.3:
+ resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==}
+ engines: {node: '>=0.10'}
+ hasBin: true
+
+ detect-libc@2.0.4:
+ resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==}
+ engines: {node: '>=8'}
+
+ dotenv-expand@11.0.7:
+ resolution: {integrity: sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==}
+ engines: {node: '>=12'}
+
+ dotenv@16.6.1:
+ resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==}
+ engines: {node: '>=12'}
+
+ electron-to-chromium@1.5.179:
+ resolution: {integrity: sha512-UWKi/EbBopgfFsc5k61wFpV7WrnnSlSzW/e2XcBmS6qKYTivZlLtoll5/rdqRTxGglGHkmkW0j0pFNJG10EUIQ==}
+
+ escalade@3.2.0:
+ resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
+ engines: {node: '>=6'}
+
+ fill-range@7.1.1:
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+ engines: {node: '>=8'}
+
+ get-port@4.2.0:
+ resolution: {integrity: sha512-/b3jarXkH8KJoOMQc3uVGHASwGLPq3gSFJ7tgJm2diza+bydJPTGOibin2steecKeOylE8oY2JERlVWkAJO6yw==}
+ engines: {node: '>=6'}
+
+ globals@13.24.0:
+ resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==}
+ engines: {node: '>=8'}
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ json5@2.2.3:
+ resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
+ engines: {node: '>=6'}
+ hasBin: true
+
+ lightningcss-darwin-arm64@1.30.1:
+ resolution: {integrity: sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [darwin]
+
+ lightningcss-darwin-x64@1.30.1:
+ resolution: {integrity: sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [darwin]
+
+ lightningcss-freebsd-x64@1.30.1:
+ resolution: {integrity: sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [freebsd]
+
+ lightningcss-linux-arm-gnueabihf@1.30.1:
+ resolution: {integrity: sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm]
+ os: [linux]
+
+ lightningcss-linux-arm64-gnu@1.30.1:
+ resolution: {integrity: sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [linux]
+
+ lightningcss-linux-arm64-musl@1.30.1:
+ resolution: {integrity: sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [linux]
+
+ lightningcss-linux-x64-gnu@1.30.1:
+ resolution: {integrity: sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [linux]
+
+ lightningcss-linux-x64-musl@1.30.1:
+ resolution: {integrity: sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [linux]
+
+ lightningcss-win32-arm64-msvc@1.30.1:
+ resolution: {integrity: sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [win32]
+
+ lightningcss-win32-x64-msvc@1.30.1:
+ resolution: {integrity: sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [win32]
+
+ lightningcss@1.30.1:
+ resolution: {integrity: sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==}
+ engines: {node: '>= 12.0.0'}
+
+ lmdb@2.8.5:
+ resolution: {integrity: sha512-9bMdFfc80S+vSldBmG3HOuLVHnxRdNTlpzR6QDnzqCQtCzGUEAGTzBKYMeIM+I/sU4oZfgbcbS7X7F65/z/oxQ==}
+ hasBin: true
+
+ micromatch@4.0.8:
+ resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
+ engines: {node: '>=8.6'}
+
+ msgpackr-extract@3.0.3:
+ resolution: {integrity: sha512-P0efT1C9jIdVRefqjzOQ9Xml57zpOXnIuS+csaB4MdZbTdmGDLo8XhzBG1N7aO11gKDDkJvBLULeFTo46wwreA==}
+ hasBin: true
+
+ msgpackr@1.11.4:
+ resolution: {integrity: sha512-uaff7RG9VIC4jacFW9xzL3jc0iM32DNHe4jYVycBcjUePT/Klnfj7pqtWJt9khvDFizmjN2TlYniYmSS2LIaZg==}
+
+ node-addon-api@6.1.0:
+ resolution: {integrity: sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==}
+
+ node-addon-api@7.1.1:
+ resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==}
+
+ node-gyp-build-optional-packages@5.1.1:
+ resolution: {integrity: sha512-+P72GAjVAbTxjjwUmwjVrqrdZROD4nf8KgpBoDxqXXTiYZZt/ud60dE5yvCSr9lRO8e8yv6kgJIC0K0PfZFVQw==}
+ hasBin: true
+
+ node-gyp-build-optional-packages@5.2.2:
+ resolution: {integrity: sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==}
+ hasBin: true
+
+ node-releases@2.0.19:
+ resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==}
+
+ nullthrows@1.1.1:
+ resolution: {integrity: sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==}
+
+ ordered-binary@1.6.0:
+ resolution: {integrity: sha512-IQh2aMfMIDbPjI/8a3Edr+PiOpcsB7yo8NdW7aHWVaoR/pcDldunMvnnwbk/auPGqmKeAdxtZl7MHX/QmPwhvQ==}
+
+ parcel@2.15.4:
+ resolution: {integrity: sha512-eZHQ/omuQ7yBYB9XezyzSqhc826oy/uhloCNiej1CTZ+twAqJVtp4MRvTGMcivKhE+WE8QkYD5XkJHLLQsJQcg==}
+ engines: {node: '>= 16.0.0'}
+ hasBin: true
+
+ picocolors@1.1.1:
+ resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ postcss-value-parser@4.2.0:
+ resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
+
+ react-refresh@0.16.0:
+ resolution: {integrity: sha512-FPvF2XxTSikpJxcr+bHut2H4gJ17+18Uy20D5/F+SKzFap62R3cM5wH6b8WN3LyGSYeQilLEcJcR1fjBSI2S1A==}
+ engines: {node: '>=0.10.0'}
+
+ regenerator-runtime@0.14.1:
+ resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ semver@7.7.2:
+ resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ term-size@2.2.1:
+ resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==}
+ engines: {node: '>=8'}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ tslib@2.8.1:
+ resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
+
+ type-fest@0.20.2:
+ resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
+ engines: {node: '>=10'}
+
+ update-browserslist-db@1.1.3:
+ resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==}
+ hasBin: true
+ peerDependencies:
+ browserslist: '>= 4.21.0'
+
+ utility-types@3.11.0:
+ resolution: {integrity: sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw==}
+ engines: {node: '>= 4'}
+
+ weak-lru-cache@1.2.2:
+ resolution: {integrity: sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw==}
+
+snapshots:
+
+ '@lezer/common@1.2.3': {}
+
+ '@lezer/lr@1.4.2':
+ dependencies:
+ '@lezer/common': 1.2.3
+
+ '@lmdb/lmdb-darwin-arm64@2.8.5':
+ optional: true
+
+ '@lmdb/lmdb-darwin-x64@2.8.5':
+ optional: true
+
+ '@lmdb/lmdb-linux-arm64@2.8.5':
+ optional: true
+
+ '@lmdb/lmdb-linux-arm@2.8.5':
+ optional: true
+
+ '@lmdb/lmdb-linux-x64@2.8.5':
+ optional: true
+
+ '@lmdb/lmdb-win32-x64@2.8.5':
+ optional: true
+
+ '@mischnic/json-sourcemap@0.1.1':
+ dependencies:
+ '@lezer/common': 1.2.3
+ '@lezer/lr': 1.4.2
+ json5: 2.2.3
+
+ '@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3':
+ optional: true
+
+ '@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.3':
+ optional: true
+
+ '@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.3':
+ optional: true
+
+ '@msgpackr-extract/msgpackr-extract-linux-arm@3.0.3':
+ optional: true
+
+ '@msgpackr-extract/msgpackr-extract-linux-x64@3.0.3':
+ optional: true
+
+ '@msgpackr-extract/msgpackr-extract-win32-x64@3.0.3':
+ optional: true
+
+ '@parcel/bundler-default@2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))':
+ dependencies:
+ '@parcel/diagnostic': 2.15.4
+ '@parcel/graph': 3.5.4
+ '@parcel/plugin': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/rust': 2.15.4
+ '@parcel/utils': 2.15.4
+ nullthrows: 1.1.1
+ transitivePeerDependencies:
+ - '@parcel/core'
+ - napi-wasm
+
+ '@parcel/cache@2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))':
+ dependencies:
+ '@parcel/core': 2.15.4(@swc/helpers@0.5.17)
+ '@parcel/fs': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/logger': 2.15.4
+ '@parcel/utils': 2.15.4
+ lmdb: 2.8.5
+ transitivePeerDependencies:
+ - napi-wasm
+
+ '@parcel/codeframe@2.15.4':
+ dependencies:
+ chalk: 4.1.2
+
+ '@parcel/compressor-raw@2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))':
+ dependencies:
+ '@parcel/plugin': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ transitivePeerDependencies:
+ - '@parcel/core'
+ - napi-wasm
+
+ '@parcel/config-default@2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))(@swc/helpers@0.5.17)':
+ dependencies:
+ '@parcel/bundler-default': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/compressor-raw': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/core': 2.15.4(@swc/helpers@0.5.17)
+ '@parcel/namer-default': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/optimizer-css': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/optimizer-html': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/optimizer-image': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/optimizer-svg': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/optimizer-swc': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))(@swc/helpers@0.5.17)
+ '@parcel/packager-css': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/packager-html': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/packager-js': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/packager-raw': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/packager-svg': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/packager-wasm': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/reporter-dev-server': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/resolver-default': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/runtime-browser-hmr': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/runtime-js': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/runtime-rsc': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/runtime-service-worker': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/transformer-babel': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/transformer-css': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/transformer-html': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/transformer-image': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/transformer-js': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/transformer-json': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/transformer-node': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/transformer-postcss': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/transformer-posthtml': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/transformer-raw': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/transformer-react-refresh-wrap': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/transformer-svg': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ transitivePeerDependencies:
+ - '@swc/helpers'
+ - napi-wasm
+
+ '@parcel/core@2.15.4(@swc/helpers@0.5.17)':
+ dependencies:
+ '@mischnic/json-sourcemap': 0.1.1
+ '@parcel/cache': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/diagnostic': 2.15.4
+ '@parcel/events': 2.15.4
+ '@parcel/feature-flags': 2.15.4
+ '@parcel/fs': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/graph': 3.5.4
+ '@parcel/logger': 2.15.4
+ '@parcel/package-manager': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))(@swc/helpers@0.5.17)
+ '@parcel/plugin': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/profiler': 2.15.4
+ '@parcel/rust': 2.15.4
+ '@parcel/source-map': 2.1.1
+ '@parcel/types': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/utils': 2.15.4
+ '@parcel/workers': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ base-x: 3.0.11
+ browserslist: 4.25.1
+ clone: 2.1.2
+ dotenv: 16.6.1
+ dotenv-expand: 11.0.7
+ json5: 2.2.3
+ msgpackr: 1.11.4
+ nullthrows: 1.1.1
+ semver: 7.7.2
+ transitivePeerDependencies:
+ - '@swc/helpers'
+ - napi-wasm
+
+ '@parcel/diagnostic@2.15.4':
+ dependencies:
+ '@mischnic/json-sourcemap': 0.1.1
+ nullthrows: 1.1.1
+
+ '@parcel/error-overlay@2.15.4': {}
+
+ '@parcel/events@2.15.4': {}
+
+ '@parcel/feature-flags@2.15.4': {}
+
+ '@parcel/fs@2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))':
+ dependencies:
+ '@parcel/core': 2.15.4(@swc/helpers@0.5.17)
+ '@parcel/feature-flags': 2.15.4
+ '@parcel/rust': 2.15.4
+ '@parcel/types-internal': 2.15.4
+ '@parcel/utils': 2.15.4
+ '@parcel/watcher': 2.5.1
+ '@parcel/workers': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ transitivePeerDependencies:
+ - napi-wasm
+
+ '@parcel/graph@3.5.4':
+ dependencies:
+ '@parcel/feature-flags': 2.15.4
+ nullthrows: 1.1.1
+
+ '@parcel/logger@2.15.4':
+ dependencies:
+ '@parcel/diagnostic': 2.15.4
+ '@parcel/events': 2.15.4
+
+ '@parcel/markdown-ansi@2.15.4':
+ dependencies:
+ chalk: 4.1.2
+
+ '@parcel/namer-default@2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))':
+ dependencies:
+ '@parcel/diagnostic': 2.15.4
+ '@parcel/plugin': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ nullthrows: 1.1.1
+ transitivePeerDependencies:
+ - '@parcel/core'
+ - napi-wasm
+
+ '@parcel/node-resolver-core@3.6.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))':
+ dependencies:
+ '@mischnic/json-sourcemap': 0.1.1
+ '@parcel/diagnostic': 2.15.4
+ '@parcel/fs': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/rust': 2.15.4
+ '@parcel/utils': 2.15.4
+ nullthrows: 1.1.1
+ semver: 7.7.2
+ transitivePeerDependencies:
+ - '@parcel/core'
+ - napi-wasm
+
+ '@parcel/optimizer-css@2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))':
+ dependencies:
+ '@parcel/diagnostic': 2.15.4
+ '@parcel/plugin': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/source-map': 2.1.1
+ '@parcel/utils': 2.15.4
+ browserslist: 4.25.1
+ lightningcss: 1.30.1
+ nullthrows: 1.1.1
+ transitivePeerDependencies:
+ - '@parcel/core'
+ - napi-wasm
+
+ '@parcel/optimizer-html@2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))':
+ dependencies:
+ '@parcel/plugin': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/rust': 2.15.4
+ '@parcel/utils': 2.15.4
+ transitivePeerDependencies:
+ - '@parcel/core'
+ - napi-wasm
+
+ '@parcel/optimizer-image@2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))':
+ dependencies:
+ '@parcel/core': 2.15.4(@swc/helpers@0.5.17)
+ '@parcel/diagnostic': 2.15.4
+ '@parcel/plugin': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/rust': 2.15.4
+ '@parcel/utils': 2.15.4
+ '@parcel/workers': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ transitivePeerDependencies:
+ - napi-wasm
+
+ '@parcel/optimizer-svg@2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))':
+ dependencies:
+ '@parcel/plugin': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/rust': 2.15.4
+ '@parcel/utils': 2.15.4
+ transitivePeerDependencies:
+ - '@parcel/core'
+ - napi-wasm
+
+ '@parcel/optimizer-swc@2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))(@swc/helpers@0.5.17)':
+ dependencies:
+ '@parcel/diagnostic': 2.15.4
+ '@parcel/plugin': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/source-map': 2.1.1
+ '@parcel/utils': 2.15.4
+ '@swc/core': 1.12.9(@swc/helpers@0.5.17)
+ nullthrows: 1.1.1
+ transitivePeerDependencies:
+ - '@parcel/core'
+ - '@swc/helpers'
+ - napi-wasm
+
+ '@parcel/package-manager@2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))(@swc/helpers@0.5.17)':
+ dependencies:
+ '@parcel/core': 2.15.4(@swc/helpers@0.5.17)
+ '@parcel/diagnostic': 2.15.4
+ '@parcel/fs': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/logger': 2.15.4
+ '@parcel/node-resolver-core': 3.6.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/types': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/utils': 2.15.4
+ '@parcel/workers': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@swc/core': 1.12.9(@swc/helpers@0.5.17)
+ semver: 7.7.2
+ transitivePeerDependencies:
+ - '@swc/helpers'
+ - napi-wasm
+
+ '@parcel/packager-css@2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))':
+ dependencies:
+ '@parcel/diagnostic': 2.15.4
+ '@parcel/plugin': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/source-map': 2.1.1
+ '@parcel/utils': 2.15.4
+ lightningcss: 1.30.1
+ nullthrows: 1.1.1
+ transitivePeerDependencies:
+ - '@parcel/core'
+ - napi-wasm
+
+ '@parcel/packager-html@2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))':
+ dependencies:
+ '@parcel/plugin': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/rust': 2.15.4
+ '@parcel/types': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/utils': 2.15.4
+ transitivePeerDependencies:
+ - '@parcel/core'
+ - napi-wasm
+
+ '@parcel/packager-js@2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))':
+ dependencies:
+ '@parcel/diagnostic': 2.15.4
+ '@parcel/plugin': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/rust': 2.15.4
+ '@parcel/source-map': 2.1.1
+ '@parcel/types': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/utils': 2.15.4
+ globals: 13.24.0
+ nullthrows: 1.1.1
+ transitivePeerDependencies:
+ - '@parcel/core'
+ - napi-wasm
+
+ '@parcel/packager-raw@2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))':
+ dependencies:
+ '@parcel/plugin': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ transitivePeerDependencies:
+ - '@parcel/core'
+ - napi-wasm
+
+ '@parcel/packager-svg@2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))':
+ dependencies:
+ '@parcel/plugin': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/rust': 2.15.4
+ '@parcel/types': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/utils': 2.15.4
+ transitivePeerDependencies:
+ - '@parcel/core'
+ - napi-wasm
+
+ '@parcel/packager-wasm@2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))':
+ dependencies:
+ '@parcel/plugin': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ transitivePeerDependencies:
+ - '@parcel/core'
+ - napi-wasm
+
+ '@parcel/plugin@2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))':
+ dependencies:
+ '@parcel/types': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ transitivePeerDependencies:
+ - '@parcel/core'
+ - napi-wasm
+
+ '@parcel/profiler@2.15.4':
+ dependencies:
+ '@parcel/diagnostic': 2.15.4
+ '@parcel/events': 2.15.4
+ '@parcel/types-internal': 2.15.4
+ chrome-trace-event: 1.0.4
+
+ '@parcel/reporter-cli@2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))':
+ dependencies:
+ '@parcel/plugin': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/types': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/utils': 2.15.4
+ chalk: 4.1.2
+ term-size: 2.2.1
+ transitivePeerDependencies:
+ - '@parcel/core'
+ - napi-wasm
+
+ '@parcel/reporter-dev-server@2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))':
+ dependencies:
+ '@parcel/codeframe': 2.15.4
+ '@parcel/plugin': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/source-map': 2.1.1
+ '@parcel/utils': 2.15.4
+ transitivePeerDependencies:
+ - '@parcel/core'
+ - napi-wasm
+
+ '@parcel/reporter-tracer@2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))':
+ dependencies:
+ '@parcel/plugin': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/utils': 2.15.4
+ chrome-trace-event: 1.0.4
+ nullthrows: 1.1.1
+ transitivePeerDependencies:
+ - '@parcel/core'
+ - napi-wasm
+
+ '@parcel/resolver-default@2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))':
+ dependencies:
+ '@parcel/node-resolver-core': 3.6.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/plugin': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ transitivePeerDependencies:
+ - '@parcel/core'
+ - napi-wasm
+
+ '@parcel/runtime-browser-hmr@2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))':
+ dependencies:
+ '@parcel/plugin': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/utils': 2.15.4
+ transitivePeerDependencies:
+ - '@parcel/core'
+ - napi-wasm
+
+ '@parcel/runtime-js@2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))':
+ dependencies:
+ '@parcel/diagnostic': 2.15.4
+ '@parcel/plugin': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/utils': 2.15.4
+ nullthrows: 1.1.1
+ transitivePeerDependencies:
+ - '@parcel/core'
+ - napi-wasm
+
+ '@parcel/runtime-rsc@2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))':
+ dependencies:
+ '@parcel/plugin': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/rust': 2.15.4
+ '@parcel/utils': 2.15.4
+ nullthrows: 1.1.1
+ transitivePeerDependencies:
+ - '@parcel/core'
+ - napi-wasm
+
+ '@parcel/runtime-service-worker@2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))':
+ dependencies:
+ '@parcel/plugin': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/utils': 2.15.4
+ nullthrows: 1.1.1
+ transitivePeerDependencies:
+ - '@parcel/core'
+ - napi-wasm
+
+ '@parcel/rust-darwin-arm64@2.15.4':
+ optional: true
+
+ '@parcel/rust-darwin-x64@2.15.4':
+ optional: true
+
+ '@parcel/rust-linux-arm-gnueabihf@2.15.4':
+ optional: true
+
+ '@parcel/rust-linux-arm64-gnu@2.15.4':
+ optional: true
+
+ '@parcel/rust-linux-arm64-musl@2.15.4':
+ optional: true
+
+ '@parcel/rust-linux-x64-gnu@2.15.4':
+ optional: true
+
+ '@parcel/rust-linux-x64-musl@2.15.4':
+ optional: true
+
+ '@parcel/rust-win32-x64-msvc@2.15.4':
+ optional: true
+
+ '@parcel/rust@2.15.4':
+ optionalDependencies:
+ '@parcel/rust-darwin-arm64': 2.15.4
+ '@parcel/rust-darwin-x64': 2.15.4
+ '@parcel/rust-linux-arm-gnueabihf': 2.15.4
+ '@parcel/rust-linux-arm64-gnu': 2.15.4
+ '@parcel/rust-linux-arm64-musl': 2.15.4
+ '@parcel/rust-linux-x64-gnu': 2.15.4
+ '@parcel/rust-linux-x64-musl': 2.15.4
+ '@parcel/rust-win32-x64-msvc': 2.15.4
+
+ '@parcel/source-map@2.1.1':
+ dependencies:
+ detect-libc: 1.0.3
+
+ '@parcel/transformer-babel@2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))':
+ dependencies:
+ '@parcel/diagnostic': 2.15.4
+ '@parcel/plugin': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/source-map': 2.1.1
+ '@parcel/utils': 2.15.4
+ browserslist: 4.25.1
+ json5: 2.2.3
+ nullthrows: 1.1.1
+ semver: 7.7.2
+ transitivePeerDependencies:
+ - '@parcel/core'
+ - napi-wasm
+
+ '@parcel/transformer-css@2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))':
+ dependencies:
+ '@parcel/diagnostic': 2.15.4
+ '@parcel/plugin': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/source-map': 2.1.1
+ '@parcel/utils': 2.15.4
+ browserslist: 4.25.1
+ lightningcss: 1.30.1
+ nullthrows: 1.1.1
+ transitivePeerDependencies:
+ - '@parcel/core'
+ - napi-wasm
+
+ '@parcel/transformer-html@2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))':
+ dependencies:
+ '@parcel/diagnostic': 2.15.4
+ '@parcel/plugin': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/rust': 2.15.4
+ transitivePeerDependencies:
+ - '@parcel/core'
+ - napi-wasm
+
+ '@parcel/transformer-image@2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))':
+ dependencies:
+ '@parcel/core': 2.15.4(@swc/helpers@0.5.17)
+ '@parcel/plugin': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/utils': 2.15.4
+ '@parcel/workers': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ nullthrows: 1.1.1
+ transitivePeerDependencies:
+ - napi-wasm
+
+ '@parcel/transformer-js@2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))':
+ dependencies:
+ '@parcel/core': 2.15.4(@swc/helpers@0.5.17)
+ '@parcel/diagnostic': 2.15.4
+ '@parcel/plugin': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/rust': 2.15.4
+ '@parcel/source-map': 2.1.1
+ '@parcel/utils': 2.15.4
+ '@parcel/workers': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@swc/helpers': 0.5.17
+ browserslist: 4.25.1
+ nullthrows: 1.1.1
+ regenerator-runtime: 0.14.1
+ semver: 7.7.2
+ transitivePeerDependencies:
+ - napi-wasm
+
+ '@parcel/transformer-json@2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))':
+ dependencies:
+ '@parcel/plugin': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ json5: 2.2.3
+ transitivePeerDependencies:
+ - '@parcel/core'
+ - napi-wasm
+
+ '@parcel/transformer-node@2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))':
+ dependencies:
+ '@parcel/plugin': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ transitivePeerDependencies:
+ - '@parcel/core'
+ - napi-wasm
+
+ '@parcel/transformer-postcss@2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))':
+ dependencies:
+ '@parcel/diagnostic': 2.15.4
+ '@parcel/plugin': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/rust': 2.15.4
+ '@parcel/utils': 2.15.4
+ clone: 2.1.2
+ nullthrows: 1.1.1
+ postcss-value-parser: 4.2.0
+ semver: 7.7.2
+ transitivePeerDependencies:
+ - '@parcel/core'
+ - napi-wasm
+
+ '@parcel/transformer-posthtml@2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))':
+ dependencies:
+ '@parcel/plugin': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/utils': 2.15.4
+ transitivePeerDependencies:
+ - '@parcel/core'
+ - napi-wasm
+
+ '@parcel/transformer-raw@2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))':
+ dependencies:
+ '@parcel/plugin': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ transitivePeerDependencies:
+ - '@parcel/core'
+ - napi-wasm
+
+ '@parcel/transformer-react-refresh-wrap@2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))':
+ dependencies:
+ '@parcel/error-overlay': 2.15.4
+ '@parcel/plugin': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/utils': 2.15.4
+ react-refresh: 0.16.0
+ transitivePeerDependencies:
+ - '@parcel/core'
+ - napi-wasm
+
+ '@parcel/transformer-svg@2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))':
+ dependencies:
+ '@parcel/diagnostic': 2.15.4
+ '@parcel/plugin': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/rust': 2.15.4
+ transitivePeerDependencies:
+ - '@parcel/core'
+ - napi-wasm
+
+ '@parcel/types-internal@2.15.4':
+ dependencies:
+ '@parcel/diagnostic': 2.15.4
+ '@parcel/feature-flags': 2.15.4
+ '@parcel/source-map': 2.1.1
+ utility-types: 3.11.0
+
+ '@parcel/types@2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))':
+ dependencies:
+ '@parcel/types-internal': 2.15.4
+ '@parcel/workers': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ transitivePeerDependencies:
+ - '@parcel/core'
+ - napi-wasm
+
+ '@parcel/utils@2.15.4':
+ dependencies:
+ '@parcel/codeframe': 2.15.4
+ '@parcel/diagnostic': 2.15.4
+ '@parcel/logger': 2.15.4
+ '@parcel/markdown-ansi': 2.15.4
+ '@parcel/rust': 2.15.4
+ '@parcel/source-map': 2.1.1
+ chalk: 4.1.2
+ nullthrows: 1.1.1
+ transitivePeerDependencies:
+ - napi-wasm
+
+ '@parcel/watcher-android-arm64@2.5.1':
+ optional: true
+
+ '@parcel/watcher-darwin-arm64@2.5.1':
+ optional: true
+
+ '@parcel/watcher-darwin-x64@2.5.1':
+ optional: true
+
+ '@parcel/watcher-freebsd-x64@2.5.1':
+ optional: true
+
+ '@parcel/watcher-linux-arm-glibc@2.5.1':
+ optional: true
+
+ '@parcel/watcher-linux-arm-musl@2.5.1':
+ optional: true
+
+ '@parcel/watcher-linux-arm64-glibc@2.5.1':
+ optional: true
+
+ '@parcel/watcher-linux-arm64-musl@2.5.1':
+ optional: true
+
+ '@parcel/watcher-linux-x64-glibc@2.5.1':
+ optional: true
+
+ '@parcel/watcher-linux-x64-musl@2.5.1':
+ optional: true
+
+ '@parcel/watcher-win32-arm64@2.5.1':
+ optional: true
+
+ '@parcel/watcher-win32-ia32@2.5.1':
+ optional: true
+
+ '@parcel/watcher-win32-x64@2.5.1':
+ optional: true
+
+ '@parcel/watcher@2.5.1':
+ dependencies:
+ detect-libc: 1.0.3
+ is-glob: 4.0.3
+ micromatch: 4.0.8
+ node-addon-api: 7.1.1
+ optionalDependencies:
+ '@parcel/watcher-android-arm64': 2.5.1
+ '@parcel/watcher-darwin-arm64': 2.5.1
+ '@parcel/watcher-darwin-x64': 2.5.1
+ '@parcel/watcher-freebsd-x64': 2.5.1
+ '@parcel/watcher-linux-arm-glibc': 2.5.1
+ '@parcel/watcher-linux-arm-musl': 2.5.1
+ '@parcel/watcher-linux-arm64-glibc': 2.5.1
+ '@parcel/watcher-linux-arm64-musl': 2.5.1
+ '@parcel/watcher-linux-x64-glibc': 2.5.1
+ '@parcel/watcher-linux-x64-musl': 2.5.1
+ '@parcel/watcher-win32-arm64': 2.5.1
+ '@parcel/watcher-win32-ia32': 2.5.1
+ '@parcel/watcher-win32-x64': 2.5.1
+
+ '@parcel/workers@2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))':
+ dependencies:
+ '@parcel/core': 2.15.4(@swc/helpers@0.5.17)
+ '@parcel/diagnostic': 2.15.4
+ '@parcel/logger': 2.15.4
+ '@parcel/profiler': 2.15.4
+ '@parcel/types-internal': 2.15.4
+ '@parcel/utils': 2.15.4
+ nullthrows: 1.1.1
+ transitivePeerDependencies:
+ - napi-wasm
+
+ '@swc/core-darwin-arm64@1.12.9':
+ optional: true
+
+ '@swc/core-darwin-x64@1.12.9':
+ optional: true
+
+ '@swc/core-linux-arm-gnueabihf@1.12.9':
+ optional: true
+
+ '@swc/core-linux-arm64-gnu@1.12.9':
+ optional: true
+
+ '@swc/core-linux-arm64-musl@1.12.9':
+ optional: true
+
+ '@swc/core-linux-x64-gnu@1.12.9':
+ optional: true
+
+ '@swc/core-linux-x64-musl@1.12.9':
+ optional: true
+
+ '@swc/core-win32-arm64-msvc@1.12.9':
+ optional: true
+
+ '@swc/core-win32-ia32-msvc@1.12.9':
+ optional: true
+
+ '@swc/core-win32-x64-msvc@1.12.9':
+ optional: true
+
+ '@swc/core@1.12.9(@swc/helpers@0.5.17)':
+ dependencies:
+ '@swc/counter': 0.1.3
+ '@swc/types': 0.1.23
+ optionalDependencies:
+ '@swc/core-darwin-arm64': 1.12.9
+ '@swc/core-darwin-x64': 1.12.9
+ '@swc/core-linux-arm-gnueabihf': 1.12.9
+ '@swc/core-linux-arm64-gnu': 1.12.9
+ '@swc/core-linux-arm64-musl': 1.12.9
+ '@swc/core-linux-x64-gnu': 1.12.9
+ '@swc/core-linux-x64-musl': 1.12.9
+ '@swc/core-win32-arm64-msvc': 1.12.9
+ '@swc/core-win32-ia32-msvc': 1.12.9
+ '@swc/core-win32-x64-msvc': 1.12.9
+ '@swc/helpers': 0.5.17
+
+ '@swc/counter@0.1.3': {}
+
+ '@swc/helpers@0.5.17':
+ dependencies:
+ tslib: 2.8.1
+
+ '@swc/types@0.1.23':
+ dependencies:
+ '@swc/counter': 0.1.3
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ base-x@3.0.11:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ braces@3.0.3:
+ dependencies:
+ fill-range: 7.1.1
+
+ browserslist@4.25.1:
+ dependencies:
+ caniuse-lite: 1.0.30001726
+ electron-to-chromium: 1.5.179
+ node-releases: 2.0.19
+ update-browserslist-db: 1.1.3(browserslist@4.25.1)
+
+ caniuse-lite@1.0.30001726: {}
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ chrome-trace-event@1.0.4: {}
+
+ clone@2.1.2: {}
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ commander@12.1.0: {}
+
+ detect-libc@1.0.3: {}
+
+ detect-libc@2.0.4: {}
+
+ dotenv-expand@11.0.7:
+ dependencies:
+ dotenv: 16.6.1
+
+ dotenv@16.6.1: {}
+
+ electron-to-chromium@1.5.179: {}
+
+ escalade@3.2.0: {}
+
+ fill-range@7.1.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ get-port@4.2.0: {}
+
+ globals@13.24.0:
+ dependencies:
+ type-fest: 0.20.2
+
+ has-flag@4.0.0: {}
+
+ is-extglob@2.1.1: {}
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-number@7.0.0: {}
+
+ json5@2.2.3: {}
+
+ lightningcss-darwin-arm64@1.30.1:
+ optional: true
+
+ lightningcss-darwin-x64@1.30.1:
+ optional: true
+
+ lightningcss-freebsd-x64@1.30.1:
+ optional: true
+
+ lightningcss-linux-arm-gnueabihf@1.30.1:
+ optional: true
+
+ lightningcss-linux-arm64-gnu@1.30.1:
+ optional: true
+
+ lightningcss-linux-arm64-musl@1.30.1:
+ optional: true
+
+ lightningcss-linux-x64-gnu@1.30.1:
+ optional: true
+
+ lightningcss-linux-x64-musl@1.30.1:
+ optional: true
+
+ lightningcss-win32-arm64-msvc@1.30.1:
+ optional: true
+
+ lightningcss-win32-x64-msvc@1.30.1:
+ optional: true
+
+ lightningcss@1.30.1:
+ dependencies:
+ detect-libc: 2.0.4
+ optionalDependencies:
+ lightningcss-darwin-arm64: 1.30.1
+ lightningcss-darwin-x64: 1.30.1
+ lightningcss-freebsd-x64: 1.30.1
+ lightningcss-linux-arm-gnueabihf: 1.30.1
+ lightningcss-linux-arm64-gnu: 1.30.1
+ lightningcss-linux-arm64-musl: 1.30.1
+ lightningcss-linux-x64-gnu: 1.30.1
+ lightningcss-linux-x64-musl: 1.30.1
+ lightningcss-win32-arm64-msvc: 1.30.1
+ lightningcss-win32-x64-msvc: 1.30.1
+
+ lmdb@2.8.5:
+ dependencies:
+ msgpackr: 1.11.4
+ node-addon-api: 6.1.0
+ node-gyp-build-optional-packages: 5.1.1
+ ordered-binary: 1.6.0
+ weak-lru-cache: 1.2.2
+ optionalDependencies:
+ '@lmdb/lmdb-darwin-arm64': 2.8.5
+ '@lmdb/lmdb-darwin-x64': 2.8.5
+ '@lmdb/lmdb-linux-arm': 2.8.5
+ '@lmdb/lmdb-linux-arm64': 2.8.5
+ '@lmdb/lmdb-linux-x64': 2.8.5
+ '@lmdb/lmdb-win32-x64': 2.8.5
+
+ micromatch@4.0.8:
+ dependencies:
+ braces: 3.0.3
+ picomatch: 2.3.1
+
+ msgpackr-extract@3.0.3:
+ dependencies:
+ node-gyp-build-optional-packages: 5.2.2
+ optionalDependencies:
+ '@msgpackr-extract/msgpackr-extract-darwin-arm64': 3.0.3
+ '@msgpackr-extract/msgpackr-extract-darwin-x64': 3.0.3
+ '@msgpackr-extract/msgpackr-extract-linux-arm': 3.0.3
+ '@msgpackr-extract/msgpackr-extract-linux-arm64': 3.0.3
+ '@msgpackr-extract/msgpackr-extract-linux-x64': 3.0.3
+ '@msgpackr-extract/msgpackr-extract-win32-x64': 3.0.3
+ optional: true
+
+ msgpackr@1.11.4:
+ optionalDependencies:
+ msgpackr-extract: 3.0.3
+
+ node-addon-api@6.1.0: {}
+
+ node-addon-api@7.1.1: {}
+
+ node-gyp-build-optional-packages@5.1.1:
+ dependencies:
+ detect-libc: 2.0.4
+
+ node-gyp-build-optional-packages@5.2.2:
+ dependencies:
+ detect-libc: 2.0.4
+ optional: true
+
+ node-releases@2.0.19: {}
+
+ nullthrows@1.1.1: {}
+
+ ordered-binary@1.6.0: {}
+
+ parcel@2.15.4(@swc/helpers@0.5.17):
+ dependencies:
+ '@parcel/config-default': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))(@swc/helpers@0.5.17)
+ '@parcel/core': 2.15.4(@swc/helpers@0.5.17)
+ '@parcel/diagnostic': 2.15.4
+ '@parcel/events': 2.15.4
+ '@parcel/feature-flags': 2.15.4
+ '@parcel/fs': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/logger': 2.15.4
+ '@parcel/package-manager': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))(@swc/helpers@0.5.17)
+ '@parcel/reporter-cli': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/reporter-dev-server': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/reporter-tracer': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))
+ '@parcel/utils': 2.15.4
+ chalk: 4.1.2
+ commander: 12.1.0
+ get-port: 4.2.0
+ transitivePeerDependencies:
+ - '@swc/helpers'
+ - napi-wasm
+
+ picocolors@1.1.1: {}
+
+ picomatch@2.3.1: {}
+
+ postcss-value-parser@4.2.0: {}
+
+ react-refresh@0.16.0: {}
+
+ regenerator-runtime@0.14.1: {}
+
+ safe-buffer@5.2.1: {}
+
+ semver@7.7.2: {}
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ term-size@2.2.1: {}
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ tslib@2.8.1: {}
+
+ type-fest@0.20.2: {}
+
+ update-browserslist-db@1.1.3(browserslist@4.25.1):
+ dependencies:
+ browserslist: 4.25.1
+ escalade: 3.2.0
+ picocolors: 1.1.1
+
+ utility-types@3.11.0: {}
+
+ weak-lru-cache@1.2.2: {}
diff --git a/examples/wasm/types.d.ts b/examples/wasm/types.d.ts
new file mode 100644
index 00000000..5e4bedd6
--- /dev/null
+++ b/examples/wasm/types.d.ts
@@ -0,0 +1,8 @@
+declare module 'napi-wasm' {
+ export class Environment {
+ constructor(instance: WebAssembly.Instance);
+ exports: any;
+ }
+
+ export const napi: Record;
+}
diff --git a/package.json b/package.json
index 5fdcee4a..e4aee72a 100644
--- a/package.json
+++ b/package.json
@@ -19,8 +19,9 @@
},
"homepage": "http://zeromq.github.io/zeromq.js/",
"dependencies": {
- "cmake-ts": "1.0.2",
- "node-addon-api": "^8.3.1"
+ "cmake-ts": "link:../cmake-ts",
+ "node-addon-api": "^8.3.1",
+ "napi-wasm": "^1.1.3"
},
"devDependencies": {
"@types/benchmark": "~2.1.5",
@@ -115,6 +116,7 @@
"docs.deploy": "run-s docs.build && gh-pages --dist \"./docs\"",
"build.native": "cmake-ts build --logger=debug",
"build.native.debug": "cross-env npm_config_zmq_enable_sanitizer_undefined=true cmake-ts build --config debug",
+ "build.wasm": "cmake-ts build --logger=debug --config cross-wasm32-unknown-node-minsizerel",
"build": "run-p build.js build.native",
"build.debug": "run-s build.js build.native.debug",
"test": "run-s test.unit test.examples",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index e3762b01..69ab443d 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -13,8 +13,11 @@ importers:
.:
dependencies:
cmake-ts:
- specifier: 1.0.2
- version: 1.0.2
+ specifier: link:../cmake-ts
+ version: link:../cmake-ts
+ napi-wasm:
+ specifier: ^1.1.3
+ version: 1.1.3
node-addon-api:
specifier: ^8.3.1
version: 8.3.1
@@ -1044,10 +1047,6 @@ packages:
clone-response@1.0.3:
resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==}
- cmake-ts@1.0.2:
- resolution: {integrity: sha512-5l++JHE7MxFuyV/OwJf3ek7ZZN1aGPFPM5oUz6AnK5inQAPe4TFXRMz5sA2qg2FRgByPWdqO+gSfIPo8GzoKNQ==}
- hasBin: true
-
coffeescript@1.12.7:
resolution: {integrity: sha512-pLXHFxQMPklVoEekowk8b3erNynC+DVJzChxS/LCBBgR6/8AJkHivkm//zbowcfc7BTCAjryuhx6gPqPRfsFoA==}
engines: {node: '>=0.8.0'}
@@ -2426,6 +2425,9 @@ packages:
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
+ napi-wasm@1.1.3:
+ resolution: {integrity: sha512-h/4nMGsHjZDCYmQVNODIrYACVJ+I9KItbG+0si6W/jSjdA9JbWDoU4LLeMXVcEQGHjttI2tuXqDrbGF7qkUHHg==}
+
natural-compare@1.4.0:
resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
@@ -4576,8 +4578,6 @@ snapshots:
dependencies:
mimic-response: 1.0.1
- cmake-ts@1.0.2: {}
-
coffeescript@1.12.7:
optional: true
@@ -6310,6 +6310,8 @@ snapshots:
nanoid@3.3.8: {}
+ napi-wasm@1.1.3: {}
+
natural-compare@1.4.0: {}
no-case@2.3.2:
diff --git a/src/module.cc b/src/module.cc
index bed5f00f..080e13f6 100644
--- a/src/module.cc
+++ b/src/module.cc
@@ -117,5 +117,26 @@ Module::Module(Napi::Env env, Napi::Object exports) : MsgTrash(env) {
}
} // namespace zmq
+#ifdef ZMQ_WASM
+
+EXTERN_C_START
+NAPI_MODULE_EXPORT uint8_t* napi_wasm_malloc(size_t size) {
+ const size_t align = alignof(size_t);
+
+ if (size > 0) {
+ void* ptr = std::aligned_alloc(align, size);
+ if (ptr != nullptr) {
+ return static_cast(ptr);
+ }
+ } else {
+ return reinterpret_cast(align);
+ }
+
+ std::abort();
+}
+EXTERN_C_END
+
+#endif
+
using Module = zmq::Module;
NODE_API_ADDON(Module)