Spaces:
Running
Running
Commit ·
52ec2ea
0
Parent(s):
chore: scaffold SvelteKit project with Tailwind, Vitest, adapter-node
Browse files- .env.example +8 -0
- .gitignore +12 -0
- package-lock.json +0 -0
- package.json +36 -0
- src/app.css +12 -0
- src/app.d.ts +13 -0
- src/app.html +13 -0
- src/lib/domain/types.ts +3 -0
- src/lib/server/app.ts +3 -0
- src/routes/+page.svelte +1 -0
- svelte.config.js +12 -0
- tsconfig.json +28 -0
- vite.config.ts +11 -0
.env.example
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
STORAGE=local
|
| 2 |
+
LOCAL_DATA_DIR=.data
|
| 3 |
+
SESSION_SECRET=change-me-to-32-random-bytes-base64
|
| 4 |
+
CURRENCY=USD
|
| 5 |
+
# Only for STORAGE=hf:
|
| 6 |
+
# HF_TOKEN=hf_xxx
|
| 7 |
+
# HF_BUCKET=buckets/assafvayner/splitwise-data
|
| 8 |
+
# COMPACTION_INTERVAL_MS=3600000
|
.gitignore
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
node_modules
|
| 2 |
+
/build
|
| 3 |
+
/.svelte-kit
|
| 4 |
+
/package
|
| 5 |
+
.env
|
| 6 |
+
.env.*
|
| 7 |
+
!.env.example
|
| 8 |
+
.data
|
| 9 |
+
.data-*
|
| 10 |
+
/test-results
|
| 11 |
+
/playwright-report
|
| 12 |
+
.DS_Store
|
package-lock.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
package.json
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"name": "splitwise",
|
| 3 |
+
"private": true,
|
| 4 |
+
"version": "0.1.0",
|
| 5 |
+
"type": "module",
|
| 6 |
+
"scripts": {
|
| 7 |
+
"dev": "vite dev",
|
| 8 |
+
"build": "vite build",
|
| 9 |
+
"preview": "vite preview",
|
| 10 |
+
"prepare": "svelte-kit sync || echo ''",
|
| 11 |
+
"check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
|
| 12 |
+
"test": "vitest run",
|
| 13 |
+
"test:watch": "vitest",
|
| 14 |
+
"test:e2e": "playwright test",
|
| 15 |
+
"spike": "tsx scripts/spike-bucket.ts"
|
| 16 |
+
},
|
| 17 |
+
"dependencies": {
|
| 18 |
+
"@huggingface/hub": "^2.16.1",
|
| 19 |
+
"zod": "^4.1.0"
|
| 20 |
+
},
|
| 21 |
+
"devDependencies": {
|
| 22 |
+
"@playwright/test": "^1.55.0",
|
| 23 |
+
"@sveltejs/adapter-node": "^5.2.0",
|
| 24 |
+
"@sveltejs/kit": "^2.27.0",
|
| 25 |
+
"@sveltejs/vite-plugin-svelte": "^6.1.0",
|
| 26 |
+
"@tailwindcss/vite": "^4.1.0",
|
| 27 |
+
"@types/node": "^22.0.0",
|
| 28 |
+
"svelte": "^5.38.0",
|
| 29 |
+
"svelte-check": "^4.3.0",
|
| 30 |
+
"tailwindcss": "^4.1.0",
|
| 31 |
+
"tsx": "^4.20.0",
|
| 32 |
+
"typescript": "^5.9.0",
|
| 33 |
+
"vite": "^7.1.0",
|
| 34 |
+
"vitest": "^3.2.0"
|
| 35 |
+
}
|
| 36 |
+
}
|
src/app.css
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
@import 'tailwindcss';
|
| 2 |
+
|
| 3 |
+
@layer base {
|
| 4 |
+
input,
|
| 5 |
+
select,
|
| 6 |
+
textarea {
|
| 7 |
+
@apply w-full rounded-lg border border-gray-300 bg-white px-3 py-2 text-base;
|
| 8 |
+
}
|
| 9 |
+
label {
|
| 10 |
+
@apply block text-sm font-medium text-gray-700;
|
| 11 |
+
}
|
| 12 |
+
}
|
src/app.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import type { User } from '$lib/domain/types';
|
| 2 |
+
import type { App as SplitApp } from '$lib/server/app';
|
| 3 |
+
|
| 4 |
+
declare global {
|
| 5 |
+
namespace App {
|
| 6 |
+
interface Locals {
|
| 7 |
+
user: User | null;
|
| 8 |
+
app: SplitApp;
|
| 9 |
+
}
|
| 10 |
+
}
|
| 11 |
+
}
|
| 12 |
+
|
| 13 |
+
export {};
|
src/app.html
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<!doctype html>
|
| 2 |
+
<html lang="en">
|
| 3 |
+
<head>
|
| 4 |
+
<meta charset="utf-8" />
|
| 5 |
+
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
|
| 6 |
+
<meta name="theme-color" content="#16a34a" />
|
| 7 |
+
<link rel="icon" href="data:," />
|
| 8 |
+
%sveltekit.head%
|
| 9 |
+
</head>
|
| 10 |
+
<body data-sveltekit-preload-data="hover" class="bg-gray-50 text-gray-900">
|
| 11 |
+
<div style="display: contents">%sveltekit.body%</div>
|
| 12 |
+
</body>
|
| 13 |
+
</html>
|
src/lib/domain/types.ts
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
export interface User {
|
| 2 |
+
id: string;
|
| 3 |
+
}
|
src/lib/server/app.ts
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
export interface App {
|
| 2 |
+
placeholder: true;
|
| 3 |
+
}
|
src/routes/+page.svelte
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
<h1 class="p-4 text-xl font-semibold">Splitwise</h1>
|
svelte.config.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import adapter from '@sveltejs/adapter-node';
|
| 2 |
+
import { vitePreprocess } from '@sveltejs/vite-plugin-svelte';
|
| 3 |
+
|
| 4 |
+
/** @type {import('@sveltejs/kit').Config} */
|
| 5 |
+
const config = {
|
| 6 |
+
preprocess: vitePreprocess(),
|
| 7 |
+
kit: {
|
| 8 |
+
adapter: adapter()
|
| 9 |
+
}
|
| 10 |
+
};
|
| 11 |
+
|
| 12 |
+
export default config;
|
tsconfig.json
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"extends": "./.svelte-kit/tsconfig.json",
|
| 3 |
+
"compilerOptions": {
|
| 4 |
+
"allowJs": true,
|
| 5 |
+
"checkJs": true,
|
| 6 |
+
"esModuleInterop": true,
|
| 7 |
+
"forceConsistentCasingInFileNames": true,
|
| 8 |
+
"resolveJsonModule": true,
|
| 9 |
+
"skipLibCheck": true,
|
| 10 |
+
"sourceMap": true,
|
| 11 |
+
"strict": true,
|
| 12 |
+
"moduleResolution": "bundler",
|
| 13 |
+
"module": "esnext",
|
| 14 |
+
"target": "es2022",
|
| 15 |
+
"types": ["node"]
|
| 16 |
+
},
|
| 17 |
+
"include": [
|
| 18 |
+
"./.svelte-kit/ambient.d.ts",
|
| 19 |
+
"./.svelte-kit/non-ambient.d.ts",
|
| 20 |
+
"./.svelte-kit/types/**/$types.d.ts",
|
| 21 |
+
"./vite.config.ts",
|
| 22 |
+
"./src/**/*.js",
|
| 23 |
+
"./src/**/*.ts",
|
| 24 |
+
"./src/**/*.svelte",
|
| 25 |
+
"./tests/**/*.ts",
|
| 26 |
+
"./scripts/**/*.ts"
|
| 27 |
+
]
|
| 28 |
+
}
|
vite.config.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import { sveltekit } from '@sveltejs/kit/vite';
|
| 2 |
+
import tailwindcss from '@tailwindcss/vite';
|
| 3 |
+
import { defineConfig } from 'vitest/config';
|
| 4 |
+
|
| 5 |
+
export default defineConfig({
|
| 6 |
+
plugins: [tailwindcss(), sveltekit()],
|
| 7 |
+
test: {
|
| 8 |
+
include: ['tests/unit/**/*.test.ts'],
|
| 9 |
+
environment: 'node'
|
| 10 |
+
}
|
| 11 |
+
});
|