- Rename `public` -> `client` so it doesn't get copied automagically as-is (without hashes which we want for cache busting), https://vitejs.dev/guide/assets.html#the-public-directory
- We still build the version files to `public/` so their copied as-is and Vite handles it for us (so we can use `emptyOutDir`)
- Use a multiple entrypoint `.js` Vite build so things can be more intelligently bundled and take less time
- We aren't using library mode because it doesn't minify or bundle assets
- Using hash asset tags for cache busting. Hash of the file included in the file name
- We lookup these hashed assets from `manifest.json` that Vite builds (https://vitejs.dev/guide/backend-integration.html) to serve and preload
- In terms of optimized bundles, I know the current output isn't great now but will have to opt to fix that up separately in the future. Tracked by https://github.com/matrix-org/matrix-public-archive/issues/176
Page-load with the correct homeserver selected (according to `?homeserver`).
Fix https://github.com/matrix-org/matrix-public-archive/issues/92
Also makes sure that the `?homeserver` is always available somewhere in the list; whether that be in the available homeserver list or the added homeserver list depending on it someone cleared it out or never had it because they visited from someone else's link.
Fix https://github.com/matrix-org/matrix-public-archive/issues/80
```
RethrownError: Unable to fetch rooms from room directory (homeserver=http://localhost:8008/)
searchTerm=, paginationToken=undefined, limit=9
at matrix-public-archive\server\routes\room-directory-routes.js:55:13
--- Original Error ---
Error: HTTP Error Response: 500 Internal Server Error: {"errcode":"M_UNKNOWN","error":"Internal server error"}
URL=http://localhost:8008/_matrix/client/v3/publicRooms?
at checkResponseStatus (matrix-public-archive\server\lib\fetch-endpoint.js:21:11)
at processTicksAndRejections (node:internal/process/task_queues:96:5)
at async fetchEndpoint (matrix-public-archive\server\lib\fetch-endpoint.js:38:3)
at async fetchEndpointAsJson (matrix-public-archive\server\lib\fetch-endpoint.js:63:15)
at async fetchPublicRooms (matrix-public-archive\server\lib\matrix-utils\fetch-public-rooms.js:26:26)
at async matrix-public-archive\server\tracing\trace-utilities.js:31:24
at async matrix-public-archive\server\routes\room-directory-routes.js:45:62
```