|
|
2 weeks ago | |
|---|---|---|
| docs | 3 weeks ago | |
| public | 3 weeks ago | |
| server | 2 weeks ago | |
| src | 2 weeks ago | |
| supabase/migrations | 2 weeks ago | |
| .env.sample | 2 weeks ago | |
| .gitignore | 2 weeks ago | |
| README.md | 2 weeks ago | |
| index.html | 3 weeks ago | |
| jsconfig.json | 3 weeks ago | |
| omotomo.png | 3 weeks ago | |
| package-lock.json | 2 weeks ago | |
| package.json | 2 weeks ago | |
| svelte.config.js | 3 weeks ago | |
| vite.config.js | 2 weeks ago | |
README.md
Svelte + Vite
This template should help get you started developing with Svelte in Vite.
Running the app
npm install
npm run dev
This starts both the Vite dev server (frontend) and the API server (default port 3001). To run only the frontend: npm run dev:web.
Copy .env.sample to .env and set VITE_SUPABASE_URL and VITE_SUPABASE_ANON_KEY for the Svelte app and (optionally) the API server.
API server (REST API for mobile / other clients)
The Express API uses the same Supabase backend. Optional env: SUPABASE_URL, SUPABASE_ANON_KEY (default to VITE_*), PORT (default 3001).
- Run:
npm run dev:serverornpm run start:api - Auth:
POST /api/auth/login,POST /api/auth/register,GET /api/auth/session,GET /api/auth/profile(Bearer token for protected routes; profile includesdisplay_name,email,avatar_url) - Decks:
GET /api/decks/mine,GET /api/decks/published,GET /api/decks/:id,POST /api/decks,PATCH /api/decks/:id,DELETE /api/decks/:id,POST /api/decks/:id/publish,POST /api/decks/:id/copy,GET /api/decks/:id/update-preview,POST /api/decks/:id/apply-update
Running tests
-
Watch mode (re-runs on file changes):
npm run test -
Single run (CI-friendly):
npm run test:run -
Coverage report (HTML in
coverage/, summary in terminal):
npm run test:coverage -
Run a specific test file:
npm run test:run -- src/lib/api/decks.test.js -
Verify all tests pass:
npm run test:run— exit code 0 means all passed.
Tests use Vitest and @testing-library/svelte. Place test files next to the code they cover (e.g. Component.test.js beside Component.svelte) or in a __tests__ directory.
Integration-style tests (in src/lib/api/decks.test.js) cover deck assignment and visibility: decks in “My decks” are only those owned by the user; community lists only published decks; publish/unpublish toggles visibility; “In My decks” (user_has_this) is correct when the user owns the deck or has a copy. Run them with npm run test:run or npm run test:run -- src/lib/api/decks.test.js.
Recommended IDE Setup
Need an official Svelte framework?
Check out SvelteKit, which is also powered by Vite. Deploy anywhere with its serverless-first approach and adapt to various platforms, with out of the box support for TypeScript, SCSS, and Less, and easily-added support for mdsvex, GraphQL, PostCSS, Tailwind CSS, and more.
Technical considerations
Why use this over SvelteKit?
- It brings its own routing solution which might not be preferable for some users.
- It is first and foremost a framework that just happens to use Vite under the hood, not a Vite app.
This template contains as little as possible to get started with Vite + Svelte, while taking into account the developer experience with regards to HMR and intellisense. It demonstrates capabilities on par with the other create-vite templates and is a good starting point for beginners dipping their toes into a Vite + Svelte project.
Should you later need the extended capabilities and extensibility provided by SvelteKit, the template has been structured similarly to SvelteKit so that it is easy to migrate.
Why include .vscode/extensions.json?
Other templates indirectly recommend extensions via the README, but this file allows VS Code to prompt the user to install the recommended extension upon opening the project.
Why enable checkJs in the JS template?
It is likely that most cases of changing variable types in runtime are likely to be accidental, rather than deliberate. This provides advanced typechecking out of the box. Should you like to take advantage of the dynamically-typed nature of JavaScript, it is trivial to change the configuration.
Why is HMR not preserving my local component state?
HMR state preservation comes with a number of gotchas! It has been disabled by default in both svelte-hmr and @sveltejs/vite-plugin-svelte due to its often surprising behavior. You can read the details here.
If you have state that's important to retain within a component, consider creating an external store which would not be replaced by HMR.
// store.js
// An extremely simple external store
import { writable } from 'svelte/store'
export default writable(0)