decentralised message store

feat: routing framework

serenity 289bd224 d7cdee0a

Changed files
+597 -4
src
lib
types
routes
server
+4
package.json
···
"tsconfig-paths": "^4.2.0",
"typescript": "^5.9.3",
"typescript-eslint": "^8.46.0"
+
},
+
"dependencies": {
+
"@libsql/client": "^0.15.15",
+
"fastify": "^5.6.1"
}
}
+547
pnpm-lock.yaml
···
importers:
.:
+
dependencies:
+
'@libsql/client':
+
specifier: ^0.15.15
+
version: 0.15.15
+
fastify:
+
specifier: ^5.6.1
+
version: 5.6.1
devDependencies:
'@eslint/js':
specifier: ^9.37.0
···
resolution: {integrity: sha512-sB5uyeq+dwCWyPi31B2gQlVlo+j5brPlWx4yZBrEaRo/nhdDE8Xke1gsGgtiBdaBTxuTkceLVuVt/pclrasb0A==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
'@fastify/ajv-compiler@4.0.4':
+
resolution: {integrity: sha512-VfPkOSmob5YqH4ZUYW4ESVV5dDNbmtNEKJADFm43Hn/T48RxTZjUIBouadRDb4M/qr8g5bAxxu40/MGxvCPDrw==}
+
+
'@fastify/error@4.2.0':
+
resolution: {integrity: sha512-RSo3sVDXfHskiBZKBPRgnQTtIqpi/7zhJOEmAxCiBcM7d0uwdGdxLlsCaLzGs8v8NnxIRlfG0N51p5yFaOentQ==}
+
+
'@fastify/fast-json-stringify-compiler@5.0.3':
+
resolution: {integrity: sha512-uik7yYHkLr6fxd8hJSZ8c+xF4WafPK+XzneQDPU+D10r5X19GW8lJcom2YijX2+qtFF1ENJlHXKFM9ouXNJYgQ==}
+
+
'@fastify/forwarded@3.0.1':
+
resolution: {integrity: sha512-JqDochHFqXs3C3Ml3gOY58zM7OqO9ENqPo0UqAjAjH8L01fRZqwX9iLeX34//kiJubF7r2ZQHtBRU36vONbLlw==}
+
+
'@fastify/merge-json-schemas@0.2.1':
+
resolution: {integrity: sha512-OA3KGBCy6KtIvLf8DINC5880o5iBlDX4SxzLQS8HorJAbqluzLRn80UXU0bxZn7UOFhFgpRJDasfwn9nG4FG4A==}
+
+
'@fastify/proxy-addr@5.1.0':
+
resolution: {integrity: sha512-INS+6gh91cLUjB+PVHfu1UqcB76Sqtpyp7bnL+FYojhjygvOPA9ctiD/JDKsyD9Xgu4hUhCSJBPig/w7duNajw==}
+
'@humanfs/core@0.19.1':
resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==}
engines: {node: '>=18.18.0'}
···
'@jridgewell/trace-mapping@0.3.9':
resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==}
+
'@libsql/client@0.15.15':
+
resolution: {integrity: sha512-twC0hQxPNHPKfeOv3sNT6u2pturQjLcI+CnpTM0SjRpocEGgfiZ7DWKXLNnsothjyJmDqEsBQJ5ztq9Wlu470w==}
+
+
'@libsql/core@0.15.15':
+
resolution: {integrity: sha512-C88Z6UKl+OyuKKPwz224riz02ih/zHYI3Ho/LAcVOgjsunIRZoBw7fjRfaH9oPMmSNeQfhGklSG2il1URoOIsA==}
+
+
'@libsql/darwin-arm64@0.5.22':
+
resolution: {integrity: sha512-4B8ZlX3nIDPndfct7GNe0nI3Yw6ibocEicWdC4fvQbSs/jdq/RC2oCsoJxJ4NzXkvktX70C1J4FcmmoBy069UA==}
+
cpu: [arm64]
+
os: [darwin]
+
+
'@libsql/darwin-x64@0.5.22':
+
resolution: {integrity: sha512-ny2HYWt6lFSIdNFzUFIJ04uiW6finXfMNJ7wypkAD8Pqdm6nAByO+Fdqu8t7sD0sqJGeUCiOg480icjyQ2/8VA==}
+
cpu: [x64]
+
os: [darwin]
+
+
'@libsql/hrana-client@0.7.0':
+
resolution: {integrity: sha512-OF8fFQSkbL7vJY9rfuegK1R7sPgQ6kFMkDamiEccNUvieQ+3urzfDFI616oPl8V7T9zRmnTkSjMOImYCAVRVuw==}
+
+
'@libsql/isomorphic-fetch@0.3.1':
+
resolution: {integrity: sha512-6kK3SUK5Uu56zPq/Las620n5aS9xJq+jMBcNSOmjhNf/MUvdyji4vrMTqD7ptY7/4/CAVEAYDeotUz60LNQHtw==}
+
engines: {node: '>=18.0.0'}
+
+
'@libsql/isomorphic-ws@0.1.5':
+
resolution: {integrity: sha512-DtLWIH29onUYR00i0GlQ3UdcTRC6EP4u9w/h9LxpUZJWRMARk6dQwZ6Jkd+QdwVpuAOrdxt18v0K2uIYR3fwFg==}
+
+
'@libsql/linux-arm-gnueabihf@0.5.22':
+
resolution: {integrity: sha512-3Uo3SoDPJe/zBnyZKosziRGtszXaEtv57raWrZIahtQDsjxBVjuzYQinCm9LRCJCUT5t2r5Z5nLDPJi2CwZVoA==}
+
cpu: [arm]
+
os: [linux]
+
+
'@libsql/linux-arm-musleabihf@0.5.22':
+
resolution: {integrity: sha512-LCsXh07jvSojTNJptT9CowOzwITznD+YFGGW+1XxUr7fS+7/ydUrpDfsMX7UqTqjm7xG17eq86VkWJgHJfvpNg==}
+
cpu: [arm]
+
os: [linux]
+
+
'@libsql/linux-arm64-gnu@0.5.22':
+
resolution: {integrity: sha512-KSdnOMy88c9mpOFKUEzPskSaF3VLflfSUCBwas/pn1/sV3pEhtMF6H8VUCd2rsedwoukeeCSEONqX7LLnQwRMA==}
+
cpu: [arm64]
+
os: [linux]
+
+
'@libsql/linux-arm64-musl@0.5.22':
+
resolution: {integrity: sha512-mCHSMAsDTLK5YH//lcV3eFEgiR23Ym0U9oEvgZA0667gqRZg/2px+7LshDvErEKv2XZ8ixzw3p1IrBzLQHGSsw==}
+
cpu: [arm64]
+
os: [linux]
+
+
'@libsql/linux-x64-gnu@0.5.22':
+
resolution: {integrity: sha512-kNBHaIkSg78Y4BqAdgjcR2mBilZXs4HYkAmi58J+4GRwDQZh5fIUWbnQvB9f95DkWUIGVeenqLRFY2pcTmlsew==}
+
cpu: [x64]
+
os: [linux]
+
+
'@libsql/linux-x64-musl@0.5.22':
+
resolution: {integrity: sha512-UZ4Xdxm4pu3pQXjvfJiyCzZop/9j/eA2JjmhMaAhe3EVLH2g11Fy4fwyUp9sT1QJYR1kpc2JLuybPM0kuXv/Tg==}
+
cpu: [x64]
+
os: [linux]
+
+
'@libsql/win32-x64-msvc@0.5.22':
+
resolution: {integrity: sha512-Fj0j8RnBpo43tVZUVoNK6BV/9AtDUM5S7DF3LB4qTYg1LMSZqi3yeCneUTLJD6XomQJlZzbI4mst89yspVSAnA==}
+
cpu: [x64]
+
os: [win32]
+
+
'@neon-rs/load@0.0.4':
+
resolution: {integrity: sha512-kTPhdZyTQxB+2wpiRcFWrDcejc4JI6tkPuS7UZCG4l6Zvc5kU/gGQ/ozvHTh1XR5tS+UlfAfGuPajjzQjCiHCw==}
+
'@nodelib/fs.scandir@2.1.5':
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
engines: {node: '>= 8'}
···
'@types/node@24.7.1':
resolution: {integrity: sha512-CmyhGZanP88uuC5GpWU9q+fI61j2SkhO3UGMUdfYRE6Bcy0ccyzn1Rqj9YAB/ZY4kOXmNf0ocah5GtphmLMP6Q==}
+
+
'@types/ws@8.18.1':
+
resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==}
'@typescript-eslint/eslint-plugin@8.46.0':
resolution: {integrity: sha512-hA8gxBq4ukonVXPy0OKhiaUh/68D0E88GSmtC1iAEnGaieuDi38LhS7jdCHRLi6ErJBNDGCzvh5EnzdPwUc0DA==}
···
'@typescript-eslint/visitor-keys@8.46.0':
resolution: {integrity: sha512-FrvMpAK+hTbFy7vH5j1+tMYHMSKLE6RzluFJlkFNKD0p9YsUT75JlBSmr5so3QRzvMwU5/bIEdeNrxm8du8l3Q==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+
abstract-logging@2.0.1:
+
resolution: {integrity: sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==}
acorn-jsx@5.3.2:
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
···
resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==}
engines: {node: '>=0.4.0'}
hasBin: true
+
+
ajv-formats@3.0.1:
+
resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==}
+
peerDependencies:
+
ajv: ^8.0.0
+
peerDependenciesMeta:
+
ajv:
+
optional: true
ajv@6.12.6:
resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
+
ajv@8.17.1:
+
resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==}
+
ansi-styles@4.3.0:
resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
engines: {node: '>=8'}
···
array-union@2.1.0:
resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
engines: {node: '>=8'}
+
+
atomic-sleep@1.0.0:
+
resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==}
+
engines: {node: '>=8.0.0'}
+
+
avvio@9.1.0:
+
resolution: {integrity: sha512-fYASnYi600CsH/j9EQov7lECAniYiBFiiAtBNuZYLA2leLe9qOvZzqYHFjtIj6gD2VMoMLP14834LFWvr4IfDw==}
balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
···
concat-map@0.0.1:
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+
cookie@1.0.2:
+
resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==}
+
engines: {node: '>=18'}
+
create-require@1.1.1:
resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==}
···
resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
engines: {node: '>= 8'}
+
data-uri-to-buffer@4.0.1:
+
resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==}
+
engines: {node: '>= 12'}
+
debug@4.4.3:
resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
engines: {node: '>=6.0'}
···
deep-is@0.1.4:
resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
+
+
dequal@2.0.3:
+
resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
+
engines: {node: '>=6'}
+
+
detect-libc@2.0.2:
+
resolution: {integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==}
+
engines: {node: '>=8'}
diff@4.0.2:
resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==}
···
resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
engines: {node: '>=0.10.0'}
+
fast-decode-uri-component@1.0.1:
+
resolution: {integrity: sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==}
+
fast-deep-equal@3.1.3:
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
···
fast-json-stable-stringify@2.1.0:
resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
+
fast-json-stringify@6.1.1:
+
resolution: {integrity: sha512-DbgptncYEXZqDUOEl4krff4mUiVrTZZVI7BBrQR/T3BqMj/eM1flTC1Uk2uUoLcWCxjT95xKulV/Lc6hhOZsBQ==}
+
fast-levenshtein@2.0.6:
resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
+
fast-querystring@1.1.2:
+
resolution: {integrity: sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==}
+
+
fast-uri@3.1.0:
+
resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==}
+
+
fastify@5.6.1:
+
resolution: {integrity: sha512-WjjlOciBF0K8pDUPZoGPhqhKrQJ02I8DKaDIfO51EL0kbSMwQFl85cRwhOvmSDWoukNOdTo27gLN549pLCcH7Q==}
+
fastq@1.19.1:
resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==}
+
fetch-blob@3.2.0:
+
resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==}
+
engines: {node: ^12.20 || >= 14.13}
+
file-entry-cache@8.0.0:
resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
engines: {node: '>=16.0.0'}
···
resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
engines: {node: '>=8'}
+
find-my-way@9.3.0:
+
resolution: {integrity: sha512-eRoFWQw+Yv2tuYlK2pjFS2jGXSxSppAs3hSQjfxVKxM5amECzIgYYc1FEI8ZmhSh/Ig+FrKEz43NLRKJjYCZVg==}
+
engines: {node: '>=20'}
+
find-up@5.0.0:
resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
engines: {node: '>=10'}
···
flatted@3.3.3:
resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==}
+
formdata-polyfill@4.0.10:
+
resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==}
+
engines: {node: '>=12.20.0'}
+
fsevents@2.3.3:
resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
···
resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
engines: {node: '>=0.8.19'}
+
ipaddr.js@2.2.0:
+
resolution: {integrity: sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==}
+
engines: {node: '>= 10'}
+
is-binary-path@2.1.0:
resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
engines: {node: '>=8'}
···
resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==}
hasBin: true
+
js-base64@3.7.8:
+
resolution: {integrity: sha512-hNngCeKxIUQiEUN3GPJOkz4wF/YvdUdbNL9hsBcMQTkKzboD7T/q3OYOuuPZLUE6dBxSGpwhk5mwuDud7JVAow==}
+
js-yaml@4.1.0:
resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
hasBin: true
···
json-buffer@3.0.1:
resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
+
json-schema-ref-resolver@3.0.0:
+
resolution: {integrity: sha512-hOrZIVL5jyYFjzk7+y7n5JDzGlU8rfWDuYyHwGa2WA8/pcmMHezp2xsVwxrebD/Q9t8Nc5DboieySDpCp4WG4A==}
+
json-schema-traverse@0.4.1:
resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
+
+
json-schema-traverse@1.0.0:
+
resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==}
json-stable-stringify-without-jsonify@1.0.1:
resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
···
resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
engines: {node: '>= 0.8.0'}
+
libsql@0.5.22:
+
resolution: {integrity: sha512-NscWthMQt7fpU8lqd7LXMvT9pi+KhhmTHAJWUB/Lj6MWa0MKFv0F2V4C6WKKpjCVZl0VwcDz4nOI3CyaT1DDiA==}
+
cpu: [x64, arm64, wasm32, arm]
+
os: [darwin, linux, win32]
+
+
light-my-request@6.6.0:
+
resolution: {integrity: sha512-CHYbu8RtboSIoVsHZ6Ye4cj4Aw/yg2oAFimlF7mNvfDV192LR7nDiKtSIfCuLT7KokPSTn/9kfVLm5OGN0A28A==}
+
locate-path@6.0.0:
resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
engines: {node: '>=10'}
···
natural-compare@1.4.0:
resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
+
node-domexception@1.0.0:
+
resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==}
+
engines: {node: '>=10.5.0'}
+
deprecated: Use your platform's native DOMException instead
+
+
node-fetch@3.3.2:
+
resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==}
+
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
normalize-path@3.0.0:
resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
engines: {node: '>=0.10.0'}
+
on-exit-leak-free@2.1.2:
+
resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==}
+
engines: {node: '>=14.0.0'}
+
optionator@0.9.4:
resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
engines: {node: '>= 0.8.0'}
···
resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
engines: {node: '>=8.6'}
+
pino-abstract-transport@2.0.0:
+
resolution: {integrity: sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==}
+
+
pino-std-serializers@7.0.0:
+
resolution: {integrity: sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==}
+
+
pino@9.13.1:
+
resolution: {integrity: sha512-Szuj+ViDTjKPQYiKumGmEn3frdl+ZPSdosHyt9SnUevFosOkMY2b7ipxlEctNKPmMD/VibeBI+ZcZCJK+4DPuw==}
+
hasBin: true
+
plimit-lit@1.6.1:
resolution: {integrity: sha512-B7+VDyb8Tl6oMJT9oSO2CW8XC/T4UcJGrwOVoNGwOQsQYhlpfajmrMj5xeejqaASq3V/EqThyOeATEOMuSEXiA==}
engines: {node: '>=12'}
···
engines: {node: '>=14'}
hasBin: true
+
process-warning@4.0.1:
+
resolution: {integrity: sha512-3c2LzQ3rY9d0hc1emcsHhfT9Jwz0cChib/QN89oME2R451w5fy3f0afAhERFZAwrbDU43wk12d0ORBpDVME50Q==}
+
+
process-warning@5.0.0:
+
resolution: {integrity: sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==}
+
+
promise-limit@2.7.0:
+
resolution: {integrity: sha512-7nJ6v5lnJsXwGprnGXga4wx6d1POjvi5Qmf1ivTRxTjH4Z/9Czja/UCMLVmB9N93GeWOU93XaFaEt6jbuoagNw==}
+
punycode@2.3.1:
resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
engines: {node: '>=6'}
···
queue-microtask@1.2.3:
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
+
quick-format-unescaped@4.0.4:
+
resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==}
+
readdirp@3.6.0:
resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
engines: {node: '>=8.10.0'}
+
real-require@0.2.0:
+
resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==}
+
engines: {node: '>= 12.13.0'}
+
+
require-from-string@2.0.2:
+
resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
+
engines: {node: '>=0.10.0'}
+
resolve-from@4.0.0:
resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
engines: {node: '>=4'}
···
resolve-pkg-maps@1.0.0:
resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
+
ret@0.5.0:
+
resolution: {integrity: sha512-I1XxrZSQ+oErkRR4jYbAyEEu2I0avBvvMM5JN+6EBprOGRCs63ENqZ3vjavq8fBw2+62G5LF5XelKwuJpcvcxw==}
+
engines: {node: '>=10'}
+
reusify@1.1.0:
resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
+
rfdc@1.4.1:
+
resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==}
+
run-parallel@1.2.0:
resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
+
safe-regex2@5.0.0:
+
resolution: {integrity: sha512-YwJwe5a51WlK7KbOJREPdjNrpViQBI3p4T50lfwPuDhZnE3XGVTlGvi+aolc5+RvxDD6bnUmjVsU9n1eboLUYw==}
+
+
safe-stable-stringify@2.5.0:
+
resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==}
+
engines: {node: '>=10'}
+
+
secure-json-parse@4.1.0:
+
resolution: {integrity: sha512-l4KnYfEyqYJxDwlNVyRfO2E4NTHfMKAWdUuA8J0yve2Dz/E/PdBepY03RvyJpssIpRFwJoCD55wA+mEDs6ByWA==}
+
semver@7.7.3:
resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==}
engines: {node: '>=10'}
hasBin: true
+
+
set-cookie-parser@2.7.1:
+
resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==}
shebang-command@2.0.0:
resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
···
resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
engines: {node: '>=8'}
+
slow-redact@0.3.2:
+
resolution: {integrity: sha512-MseHyi2+E/hBRqdOi5COy6wZ7j7DxXRz9NkseavNYSvvWC06D8a5cidVZX3tcG5eCW3NIyVU4zT63hw0Q486jw==}
+
+
sonic-boom@4.2.0:
+
resolution: {integrity: sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==}
+
+
split2@4.2.0:
+
resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==}
+
engines: {node: '>= 10.x'}
+
strip-bom@3.0.0:
resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
engines: {node: '>=4'}
···
resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
engines: {node: '>=8'}
+
thread-stream@3.1.0:
+
resolution: {integrity: sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==}
+
to-regex-range@5.0.1:
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
engines: {node: '>=8.0'}
+
+
toad-cache@3.7.0:
+
resolution: {integrity: sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw==}
+
engines: {node: '>=12'}
ts-api-utils@2.1.0:
resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==}
···
v8-compile-cache-lib@3.0.1:
resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==}
+
web-streams-polyfill@3.3.3:
+
resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==}
+
engines: {node: '>= 8'}
+
which@2.0.2:
resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
engines: {node: '>= 8'}
···
word-wrap@1.2.5:
resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
engines: {node: '>=0.10.0'}
+
+
ws@8.18.3:
+
resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==}
+
engines: {node: '>=10.0.0'}
+
peerDependencies:
+
bufferutil: ^4.0.1
+
utf-8-validate: '>=5.0.2'
+
peerDependenciesMeta:
+
bufferutil:
+
optional: true
+
utf-8-validate:
+
optional: true
yn@3.1.1:
resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==}
···
'@eslint/core': 0.16.0
levn: 0.4.1
+
'@fastify/ajv-compiler@4.0.4':
+
dependencies:
+
ajv: 8.17.1
+
ajv-formats: 3.0.1(ajv@8.17.1)
+
fast-uri: 3.1.0
+
+
'@fastify/error@4.2.0': {}
+
+
'@fastify/fast-json-stringify-compiler@5.0.3':
+
dependencies:
+
fast-json-stringify: 6.1.1
+
+
'@fastify/forwarded@3.0.1': {}
+
+
'@fastify/merge-json-schemas@0.2.1':
+
dependencies:
+
dequal: 2.0.3
+
+
'@fastify/proxy-addr@5.1.0':
+
dependencies:
+
'@fastify/forwarded': 3.0.1
+
ipaddr.js: 2.2.0
+
'@humanfs/core@0.19.1': {}
'@humanfs/node@0.16.7':
···
'@jridgewell/resolve-uri': 3.1.2
'@jridgewell/sourcemap-codec': 1.5.5
+
'@libsql/client@0.15.15':
+
dependencies:
+
'@libsql/core': 0.15.15
+
'@libsql/hrana-client': 0.7.0
+
js-base64: 3.7.8
+
libsql: 0.5.22
+
promise-limit: 2.7.0
+
transitivePeerDependencies:
+
- bufferutil
+
- utf-8-validate
+
+
'@libsql/core@0.15.15':
+
dependencies:
+
js-base64: 3.7.8
+
+
'@libsql/darwin-arm64@0.5.22':
+
optional: true
+
+
'@libsql/darwin-x64@0.5.22':
+
optional: true
+
+
'@libsql/hrana-client@0.7.0':
+
dependencies:
+
'@libsql/isomorphic-fetch': 0.3.1
+
'@libsql/isomorphic-ws': 0.1.5
+
js-base64: 3.7.8
+
node-fetch: 3.3.2
+
transitivePeerDependencies:
+
- bufferutil
+
- utf-8-validate
+
+
'@libsql/isomorphic-fetch@0.3.1': {}
+
+
'@libsql/isomorphic-ws@0.1.5':
+
dependencies:
+
'@types/ws': 8.18.1
+
ws: 8.18.3
+
transitivePeerDependencies:
+
- bufferutil
+
- utf-8-validate
+
+
'@libsql/linux-arm-gnueabihf@0.5.22':
+
optional: true
+
+
'@libsql/linux-arm-musleabihf@0.5.22':
+
optional: true
+
+
'@libsql/linux-arm64-gnu@0.5.22':
+
optional: true
+
+
'@libsql/linux-arm64-musl@0.5.22':
+
optional: true
+
+
'@libsql/linux-x64-gnu@0.5.22':
+
optional: true
+
+
'@libsql/linux-x64-musl@0.5.22':
+
optional: true
+
+
'@libsql/win32-x64-msvc@0.5.22':
+
optional: true
+
+
'@neon-rs/load@0.0.4': {}
+
'@nodelib/fs.scandir@2.1.5':
dependencies:
'@nodelib/fs.stat': 2.0.5
···
'@types/node@24.7.1':
dependencies:
undici-types: 7.14.0
+
+
'@types/ws@8.18.1':
+
dependencies:
+
'@types/node': 24.7.1
'@typescript-eslint/eslint-plugin@8.46.0(@typescript-eslint/parser@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)':
dependencies:
···
'@typescript-eslint/types': 8.46.0
eslint-visitor-keys: 4.2.1
+
abstract-logging@2.0.1: {}
+
acorn-jsx@5.3.2(acorn@8.15.0):
dependencies:
acorn: 8.15.0
···
acorn@8.15.0: {}
+
ajv-formats@3.0.1(ajv@8.17.1):
+
optionalDependencies:
+
ajv: 8.17.1
+
ajv@6.12.6:
dependencies:
fast-deep-equal: 3.1.3
fast-json-stable-stringify: 2.1.0
json-schema-traverse: 0.4.1
uri-js: 4.4.1
+
+
ajv@8.17.1:
+
dependencies:
+
fast-deep-equal: 3.1.3
+
fast-uri: 3.1.0
+
json-schema-traverse: 1.0.0
+
require-from-string: 2.0.2
ansi-styles@4.3.0:
dependencies:
···
array-union@2.1.0: {}
+
atomic-sleep@1.0.0: {}
+
+
avvio@9.1.0:
+
dependencies:
+
'@fastify/error': 4.2.0
+
fastq: 1.19.1
+
balanced-match@1.0.2: {}
binary-extensions@2.3.0: {}
···
concat-map@0.0.1: {}
+
cookie@1.0.2: {}
+
create-require@1.1.1: {}
cross-spawn@7.0.6:
···
path-key: 3.1.1
shebang-command: 2.0.0
which: 2.0.2
+
+
data-uri-to-buffer@4.0.1: {}
debug@4.4.3:
dependencies:
ms: 2.1.3
deep-is@0.1.4: {}
+
+
dequal@2.0.3: {}
+
+
detect-libc@2.0.2: {}
diff@4.0.2: {}
···
estraverse@5.3.0: {}
esutils@2.0.3: {}
+
+
fast-decode-uri-component@1.0.1: {}
fast-deep-equal@3.1.3: {}
···
fast-json-stable-stringify@2.1.0: {}
+
fast-json-stringify@6.1.1:
+
dependencies:
+
'@fastify/merge-json-schemas': 0.2.1
+
ajv: 8.17.1
+
ajv-formats: 3.0.1(ajv@8.17.1)
+
fast-uri: 3.1.0
+
json-schema-ref-resolver: 3.0.0
+
rfdc: 1.4.1
+
fast-levenshtein@2.0.6: {}
+
fast-querystring@1.1.2:
+
dependencies:
+
fast-decode-uri-component: 1.0.1
+
+
fast-uri@3.1.0: {}
+
+
fastify@5.6.1:
+
dependencies:
+
'@fastify/ajv-compiler': 4.0.4
+
'@fastify/error': 4.2.0
+
'@fastify/fast-json-stringify-compiler': 5.0.3
+
'@fastify/proxy-addr': 5.1.0
+
abstract-logging: 2.0.1
+
avvio: 9.1.0
+
fast-json-stringify: 6.1.1
+
find-my-way: 9.3.0
+
light-my-request: 6.6.0
+
pino: 9.13.1
+
process-warning: 5.0.0
+
rfdc: 1.4.1
+
secure-json-parse: 4.1.0
+
semver: 7.7.3
+
toad-cache: 3.7.0
+
fastq@1.19.1:
dependencies:
reusify: 1.1.0
+
fetch-blob@3.2.0:
+
dependencies:
+
node-domexception: 1.0.0
+
web-streams-polyfill: 3.3.3
+
file-entry-cache@8.0.0:
dependencies:
flat-cache: 4.0.1
···
dependencies:
to-regex-range: 5.0.1
+
find-my-way@9.3.0:
+
dependencies:
+
fast-deep-equal: 3.1.3
+
fast-querystring: 1.1.2
+
safe-regex2: 5.0.0
+
find-up@5.0.0:
dependencies:
locate-path: 6.0.0
···
keyv: 4.5.4
flatted@3.3.3: {}
+
+
formdata-polyfill@4.0.10:
+
dependencies:
+
fetch-blob: 3.2.0
fsevents@2.3.3:
optional: true
···
imurmurhash@0.1.4: {}
+
ipaddr.js@2.2.0: {}
+
is-binary-path@2.1.0:
dependencies:
binary-extensions: 2.3.0
···
jiti@2.6.1: {}
+
js-base64@3.7.8: {}
+
js-yaml@4.1.0:
dependencies:
argparse: 2.0.1
json-buffer@3.0.1: {}
+
+
json-schema-ref-resolver@3.0.0:
+
dependencies:
+
dequal: 2.0.3
json-schema-traverse@0.4.1: {}
+
json-schema-traverse@1.0.0: {}
+
json-stable-stringify-without-jsonify@1.0.1: {}
json5@2.2.3: {}
···
prelude-ls: 1.2.1
type-check: 0.4.0
+
libsql@0.5.22:
+
dependencies:
+
'@neon-rs/load': 0.0.4
+
detect-libc: 2.0.2
+
optionalDependencies:
+
'@libsql/darwin-arm64': 0.5.22
+
'@libsql/darwin-x64': 0.5.22
+
'@libsql/linux-arm-gnueabihf': 0.5.22
+
'@libsql/linux-arm-musleabihf': 0.5.22
+
'@libsql/linux-arm64-gnu': 0.5.22
+
'@libsql/linux-arm64-musl': 0.5.22
+
'@libsql/linux-x64-gnu': 0.5.22
+
'@libsql/linux-x64-musl': 0.5.22
+
'@libsql/win32-x64-msvc': 0.5.22
+
+
light-my-request@6.6.0:
+
dependencies:
+
cookie: 1.0.2
+
process-warning: 4.0.1
+
set-cookie-parser: 2.7.1
+
locate-path@6.0.0:
dependencies:
p-locate: 5.0.0
···
natural-compare@1.4.0: {}
+
node-domexception@1.0.0: {}
+
+
node-fetch@3.3.2:
+
dependencies:
+
data-uri-to-buffer: 4.0.1
+
fetch-blob: 3.2.0
+
formdata-polyfill: 4.0.10
+
normalize-path@3.0.0: {}
+
+
on-exit-leak-free@2.1.2: {}
optionator@0.9.4:
dependencies:
···
picomatch@2.3.1: {}
+
pino-abstract-transport@2.0.0:
+
dependencies:
+
split2: 4.2.0
+
+
pino-std-serializers@7.0.0: {}
+
+
pino@9.13.1:
+
dependencies:
+
atomic-sleep: 1.0.0
+
on-exit-leak-free: 2.1.2
+
pino-abstract-transport: 2.0.0
+
pino-std-serializers: 7.0.0
+
process-warning: 5.0.0
+
quick-format-unescaped: 4.0.4
+
real-require: 0.2.0
+
safe-stable-stringify: 2.5.0
+
slow-redact: 0.3.2
+
sonic-boom: 4.2.0
+
thread-stream: 3.1.0
+
plimit-lit@1.6.1:
dependencies:
queue-lit: 1.5.2
···
prettier@3.6.2: {}
+
process-warning@4.0.1: {}
+
+
process-warning@5.0.0: {}
+
+
promise-limit@2.7.0: {}
+
punycode@2.3.1: {}
queue-lit@1.5.2: {}
queue-microtask@1.2.3: {}
+
quick-format-unescaped@4.0.4: {}
+
readdirp@3.6.0:
dependencies:
picomatch: 2.3.1
+
real-require@0.2.0: {}
+
+
require-from-string@2.0.2: {}
+
resolve-from@4.0.0: {}
resolve-pkg-maps@1.0.0: {}
+
ret@0.5.0: {}
+
reusify@1.1.0: {}
+
rfdc@1.4.1: {}
+
run-parallel@1.2.0:
dependencies:
queue-microtask: 1.2.3
+
safe-regex2@5.0.0:
+
dependencies:
+
ret: 0.5.0
+
+
safe-stable-stringify@2.5.0: {}
+
+
secure-json-parse@4.1.0: {}
+
semver@7.7.3: {}
+
+
set-cookie-parser@2.7.1: {}
shebang-command@2.0.0:
dependencies:
···
slash@3.0.0: {}
+
slow-redact@0.3.2: {}
+
+
sonic-boom@4.2.0:
+
dependencies:
+
atomic-sleep: 1.0.0
+
+
split2@4.2.0: {}
+
strip-bom@3.0.0: {}
strip-json-comments@3.1.1: {}
···
dependencies:
has-flag: 4.0.0
+
thread-stream@3.1.0:
+
dependencies:
+
real-require: 0.2.0
+
to-regex-range@5.0.1:
dependencies:
is-number: 7.0.0
+
+
toad-cache@3.7.0: {}
ts-api-utils@2.1.0(typescript@5.9.3):
dependencies:
···
v8-compile-cache-lib@3.0.1: {}
+
web-streams-polyfill@3.3.3: {}
+
which@2.0.2:
dependencies:
isexe: 2.0.0
word-wrap@1.2.5: {}
+
+
ws@8.18.3: {}
yn@3.1.1: {}
+15 -4
src/index.ts
···
-
const main = () => {
-
console.log("Hello!!");
-
};
+
import { routes } from "@/routes";
+
import { server } from "@/server";
+
+
for (const [url, route] of Object.entries(routes)) {
+
const { handler, method } = route;
+
server.route({
+
url,
+
method,
+
handler,
+
});
+
}
-
main();
+
server.listen({ port: 3000 }).catch((err: unknown) => {
+
server.log.error(err);
+
process.exit(1);
+
});
+13
src/lib/types/routes.ts
···
+
import type { FastifyReply, FastifyRequest } from "fastify";
+
+
export type RouteHandler = (
+
req: FastifyRequest | undefined,
+
reply: FastifyReply | undefined,
+
) => Response;
+
+
export type Method = "GET" | "POST" | "PUT" | "DELETE" | "PATCH";
+
+
export interface Route {
+
method: Method;
+
handler: RouteHandler;
+
}
+6
src/routes/index.ts
···
+
import type { Route } from "@/lib/types/routes";
+
import { indexRoute } from "@/routes/route";
+
+
export const routes: Record<string, Route> = {
+
"/": indexRoute,
+
};
+8
src/routes/route.ts
···
+
import type { Route } from "@/lib/types/routes";
+
+
export const indexRoute: Route = {
+
method: "GET",
+
handler: () => {
+
return new Response(JSON.stringify({ hello: "world" }));
+
},
+
};
+4
src/server/index.ts
···
+
import Fastify from "fastify";
+
export const server = Fastify({
+
logger: true,
+
});