feat(setup): initialize SvelteKit project with TypeScript template

This commit is contained in:
Ilia Mashkov
2025-12-26 14:26:37 +03:00
parent 42852a77e1
commit cd7c4ef9a3
23 changed files with 14124 additions and 93 deletions

84
.gitignore vendored
View File

@@ -1,68 +1,24 @@
# Dependencies test-results
node_modules/ node_modules
.pnp/
.pnp.js
# Build outputs # Output
.svelte-kit/ .output
build/ .vercel
dist/ .netlify
.nuxt/ .wrangler
.output/ /.svelte-kit
.vercel/ /build
.netlify/
# Environment files # OS
.DS_Store
Thumbs.db
# Env
.env .env
.env.local .env.*
.env.development.local !.env.example
.env.test.local !.env.test
.env.production.local
# IDE and Editor files # Vite
.vscode/ vite.config.js.timestamp-*
.idea/ vite.config.ts.timestamp-*
*.swp
*.swo
*~
.DS_Store
Thumbs.db
*.sublime-project
*.sublime-workspace
# Testing
coverage/
.nyc_output/
*.lcov
# Logs
logs/
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
# OS files
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db
# Temporary files
*.tmp
*.temp
.cache/
.parcel-cache/
# TypeScript
*.tsbuildinfo
# Misc
*.pid
*.seed
*.pid.lock

1
.npmrc Normal file
View File

@@ -0,0 +1 @@
engine-strict=true

9878
.pnp.cjs generated Executable file

File diff suppressed because one or more lines are too long

2126
.pnp.loader.mjs generated Normal file

File diff suppressed because it is too large Load Diff

BIN
.yarn/install-state.gz Normal file

Binary file not shown.

View File

@@ -56,6 +56,9 @@ Create a modern, fast, and intuitive web application for comparing fonts side-by
| Styling | Tailwind CSS 4.x | Utility-first CSS framework | | Styling | Tailwind CSS 4.x | Utility-first CSS framework |
| Component Library | Bits UI | Accessible Svelte components (Radix UI port) | | Component Library | Bits UI | Accessible Svelte components (Radix UI port) |
| Type Safety | TypeScript 5.x | Static type checking | | Type Safety | TypeScript 5.x | Static type checking |
| Package Manager | Yarn | Fast, reliable dependency management |
| Linting | oxlint | Fast Rust-based linter |
| Formatting | dprint | Fast Rust-based code formatter |
| Hosting | Vercel | Edge deployment & preview environments | | Hosting | Vercel | Edge deployment & preview environments |
### Project Goals ### Project Goals
@@ -1351,7 +1354,7 @@ export * from './ui';
- [ ] Create SvelteKit project with TypeScript template - [ ] Create SvelteKit project with TypeScript template
- [ ] Install and configure Tailwind CSS 4.x - [ ] Install and configure Tailwind CSS 4.x
- [ ] Install and set up Bits UI component library - [ ] Install and set up Bits UI component library
- [ ] Configure Prettier and ESLint with Svelte plugin - [ ] Configure oxlint and dprint for linting and formatting
- [ ] Set up Git repository and .gitignore - [ ] Set up Git repository and .gitignore
- [ ] **Environment Configuration** - [ ] **Environment Configuration**
@@ -2368,9 +2371,9 @@ useEffect(() => {
```json ```json
{ {
"buildCommand": "npm run build", "buildCommand": "yarn build",
"devCommand": "npm run dev", "devCommand": "yarn dev",
"installCommand": "npm install", "installCommand": "yarn install",
"framework": "sveltekit", "framework": "sveltekit",
"regions": ["iad1"], "regions": ["iad1"],
"headers": [ "headers": [
@@ -2481,28 +2484,28 @@ export default defineConfig({
```bash ```bash
# Install dependencies # Install dependencies
npm install yarn install
# Run development server # Run development server
npm run dev yarn dev
# Build for production # Build for production
npm run build yarn build
# Preview production build # Preview production build
npm run preview yarn preview
# Run tests # Run tests
npm test yarn test
# Run linter # Run linter
npm run lint yarn lint
# Format code # Format code
npm run format yarn format
# Type check # Type check
npm run check yarn check
``` ```
#### package.json Scripts #### package.json Scripts
@@ -2518,8 +2521,9 @@ npm run check
"preview": "vite preview", "preview": "vite preview",
"check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
"check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
"lint": "prettier --check . && eslint .", "lint": "oxlint",
"format": "prettier --write .", "format": "dprint fmt",
"format:check": "dprint check",
"test": "playwright test", "test": "playwright test",
"test:unit": "vitest" "test:unit": "vitest"
}, },
@@ -2640,64 +2644,67 @@ npm run check
```bash ```bash
# Create new SvelteKit project # Create new SvelteKit project
npm create svelte@latest glyphdiff yarn create svelte@latest glyphdiff
# Select options: # Select options:
# - Which Svelte app template? Skeleton project # - Which Svelte app template? Skeleton project
# - Add type checking? Yes, using TypeScript # - Add type checking? Yes, using TypeScript
# - Select additional options: ESLint, Prettier, Playwright # - Select additional options: Playwright
# Navigate to project # Navigate to project
cd glyphdiff cd glyphdiff
# Install dependencies # Install dependencies
npm install yarn install
# Add Tailwind CSS # Add Tailwind CSS
npx svelte-add@latest tailwindcss yarn dlx svelte-add@latest tailwindcss
# Add Bits UI # Add Bits UI
npm install bits-ui yarn add bits-ui
# Install additional dependencies # Install additional dependencies
npm install clsx tailwind-merge yarn add clsx tailwind-merge
# Install oxlint and dprint
yarn add -D oxlint dprint
``` ```
#### Development Commands #### Development Commands
```bash ```bash
# Start development server # Start development server
npm run dev yarn dev
# Open browser to localhost:5173 # Open browser to localhost:5173
# Type check # Type check
npm run check yarn check
# Type check in watch mode # Type check in watch mode
npm run check:watch yarn check:watch
# Lint code # Lint code
npm run lint yarn lint
# Format code # Format code
npm run format yarn format
# Run Playwright tests # Run Playwright tests
npm run test yarn test
# Run unit tests (Vitest) # Run unit tests (Vitest)
npm run test:unit yarn test:unit
``` ```
#### Build Commands #### Build Commands
```bash ```bash
# Build for production # Build for production
npm run build yarn build
# Preview production build # Preview production build
npm run preview yarn preview
# Clean build artifacts # Clean build artifacts
rm -rf .svelte-kit build rm -rf .svelte-kit build

38
README.md Normal file
View File

@@ -0,0 +1,38 @@
# sv
Everything you need to build a Svelte project, powered by [`sv`](https://github.com/sveltejs/cli).
## Creating a project
If you're seeing this, you've probably already done this step. Congrats!
```sh
# create a new project in the current directory
npx sv create
# create a new project in my-app
npx sv create my-app
```
## Developing
Once you've created a project and installed dependencies with `npm install` (or `pnpm install` or `yarn`), start a development server:
```sh
npm run dev
# or start the server and open the app in a new browser tab
npm run dev -- --open
```
## Building
To create a production version of your app:
```sh
npm run build
```
You can preview the production build with `npm run preview`.
> To deploy your app, you may need to install an [adapter](https://svelte.dev/docs/kit/adapters) for your target environment.

35
dprint.json Normal file
View File

@@ -0,0 +1,35 @@
{
"incremental": true,
"includes": [
"**/*.{ts,tsx,js,jsx,svelte,json,md}"
],
"excludes": [
"**/node_modules",
"**/dist",
"**/build",
"**/.svelte-kit",
"**/.vercel"
],
"plugins": [
"https://plugins.dprint.dev/typescript-0.93.0.wasm",
"https://plugins.dprint.dev/json-0.19.3.wasm",
"https://plugins.dprint.dev/markdown-0.17.8.wasm"
],
"typescript": {
"lineWidth": 100,
"indentWidth": 2,
"useTabs": false,
"semiColons": "prefer",
"singleQuote": true,
"trailingCommas": "es5",
"arrowFunction.useParentheses": "preferNone",
"importDeclaration.sortNamedImports": "caseInsensitive"
},
"json": {
"indentWidth": 2,
"useTabs": false
},
"markdown": {
"lineWidth": 100
}
}

6
e2e/demo.test.ts Normal file
View File

@@ -0,0 +1,6 @@
import { expect, test } from '@playwright/test';
test('home page has expected h1', async ({ page }) => {
await page.goto('/');
await expect(page.locator('h1')).toBeVisible();
});

27
oxlint.json Normal file
View File

@@ -0,0 +1,27 @@
{
"categories": {
"correctness": "error",
"suspicious": "warn",
"perf": "warn",
"style": "warn",
"restriction": "error"
},
"env": {
"browser": true,
"es2021": true
},
"ignore": [
"node_modules",
"dist",
"build",
".svelte-kit",
".vercel",
"*.config.js",
"*.config.ts"
],
"rules": {
"no-console": "off",
"no-debugger": "error",
"no-alert": "warn"
}
}

31
package.json Normal file
View File

@@ -0,0 +1,31 @@
{
"name": "glyphdiff",
"private": true,
"version": "0.0.1",
"type": "module",
"scripts": {
"dev": "vite dev",
"build": "vite build",
"preview": "vite preview",
"prepare": "svelte-kit sync || echo ''",
"check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
"check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
"lint": "oxlint",
"format": "dprint fmt",
"format:check": "dprint check",
"test:e2e": "playwright test",
"test": "npm run test:e2e"
},
"devDependencies": {
"@playwright/test": "^1.57.0",
"@sveltejs/adapter-auto": "^7.0.0",
"@sveltejs/kit": "^2.49.1",
"@sveltejs/vite-plugin-svelte": "^6.2.1",
"dprint": "^0.50.2",
"oxlint": "^1.35.0",
"svelte": "^5.45.6",
"svelte-check": "^4.3.4",
"typescript": "^5.9.3",
"vite": "^7.2.6"
}
}

6
playwright.config.ts Normal file
View File

@@ -0,0 +1,6 @@
import { defineConfig } from '@playwright/test';
export default defineConfig({
webServer: { command: 'npm run build && npm run preview', port: 4173 },
testDir: 'e2e'
});

13
src/app.d.ts vendored Normal file
View File

@@ -0,0 +1,13 @@
// See https://svelte.dev/docs/kit/types#app.d.ts
// for information about these interfaces
declare global {
namespace App {
// interface Error {}
// interface Locals {}
// interface PageData {}
// interface PageState {}
// interface Platform {}
}
}
export {};

11
src/app.html Normal file
View File

@@ -0,0 +1,11 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
%sveltekit.head%
</head>
<body data-sveltekit-preload-data="hover">
<div style="display: contents">%sveltekit.body%</div>
</body>
</html>

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="107" height="128" viewBox="0 0 107 128"><title>svelte-logo</title><path d="M94.157 22.819c-10.4-14.885-30.94-19.297-45.792-9.835L22.282 29.608A29.92 29.92 0 0 0 8.764 49.65a31.5 31.5 0 0 0 3.108 20.231 30 30 0 0 0-4.477 11.183 31.9 31.9 0 0 0 5.448 24.116c10.402 14.887 30.942 19.297 45.791 9.835l26.083-16.624A29.92 29.92 0 0 0 98.235 78.35a31.53 31.53 0 0 0-3.105-20.232 30 30 0 0 0 4.474-11.182 31.88 31.88 0 0 0-5.447-24.116" style="fill:#ff3e00"/><path d="M45.817 106.582a20.72 20.72 0 0 1-22.237-8.243 19.17 19.17 0 0 1-3.277-14.503 18 18 0 0 1 .624-2.435l.49-1.498 1.337.981a33.6 33.6 0 0 0 10.203 5.098l.97.294-.09.968a5.85 5.85 0 0 0 1.052 3.878 6.24 6.24 0 0 0 6.695 2.485 5.8 5.8 0 0 0 1.603-.704L69.27 76.28a5.43 5.43 0 0 0 2.45-3.631 5.8 5.8 0 0 0-.987-4.371 6.24 6.24 0 0 0-6.698-2.487 5.7 5.7 0 0 0-1.6.704l-9.953 6.345a19 19 0 0 1-5.296 2.326 20.72 20.72 0 0 1-22.237-8.243 19.17 19.17 0 0 1-3.277-14.502 17.99 17.99 0 0 1 8.13-12.052l26.081-16.623a19 19 0 0 1 5.3-2.329 20.72 20.72 0 0 1 22.237 8.243 19.17 19.17 0 0 1 3.277 14.503 18 18 0 0 1-.624 2.435l-.49 1.498-1.337-.98a33.6 33.6 0 0 0-10.203-5.1l-.97-.294.09-.968a5.86 5.86 0 0 0-1.052-3.878 6.24 6.24 0 0 0-6.696-2.485 5.8 5.8 0 0 0-1.602.704L37.73 51.72a5.42 5.42 0 0 0-2.449 3.63 5.79 5.79 0 0 0 .986 4.372 6.24 6.24 0 0 0 6.698 2.486 5.8 5.8 0 0 0 1.602-.704l9.952-6.342a19 19 0 0 1 5.295-2.328 20.72 20.72 0 0 1 22.237 8.242 19.17 19.17 0 0 1 3.277 14.503 18 18 0 0 1-8.13 12.053l-26.081 16.622a19 19 0 0 1-5.3 2.328" style="fill:#fff"/></svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

1
src/lib/index.ts Normal file
View File

@@ -0,0 +1 @@
// place files you want to import through the `$lib` alias in this folder.

11
src/routes/+layout.svelte Normal file
View File

@@ -0,0 +1,11 @@
<script lang="ts">
import favicon from '$lib/assets/favicon.svg';
let { children } = $props();
</script>
<svelte:head>
<link rel="icon" href={favicon} />
</svelte:head>
{@render children()}

2
src/routes/+page.svelte Normal file
View File

@@ -0,0 +1,2 @@
<h1>Welcome to SvelteKit</h1>
<p>Visit <a href="https://svelte.dev/docs/kit">svelte.dev/docs/kit</a> to read the documentation</p>

3
static/robots.txt Normal file
View File

@@ -0,0 +1,3 @@
# allow crawling everything by default
User-agent: *
Disallow:

22
svelte.config.js Normal file
View File

@@ -0,0 +1,22 @@
import adapter from '@sveltejs/adapter-auto';
import { vitePreprocess } from '@sveltejs/vite-plugin-svelte';
/** @type {import('@sveltejs/kit').Config} */
const config = {
// Consult https://svelte.dev/docs/kit/integrations
// for more information about preprocessors
preprocess: vitePreprocess(),
compilerOptions: {
runes: true
},
kit: {
// adapter-auto only supports some environments, see https://svelte.dev/docs/kit/adapter-auto for a list.
// If your environment is not supported, or you settled on a specific environment, switch out the adapter.
// See https://svelte.dev/docs/kit/adapters for more information about adapters.
adapter: adapter()
}
};
export default config;

20
tsconfig.json Normal file
View File

@@ -0,0 +1,20 @@
{
"extends": "./.svelte-kit/tsconfig.json",
"compilerOptions": {
"rewriteRelativeImportExtensions": true,
"allowJs": true,
"checkJs": true,
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
"resolveJsonModule": true,
"skipLibCheck": true,
"sourceMap": true,
"strict": true,
"moduleResolution": "bundler"
}
// Path aliases are handled by https://svelte.dev/docs/kit/configuration#alias
// except $lib which is handled by https://svelte.dev/docs/kit/configuration#files
//
// To make changes to top-level options such as include and exclude, we recommend extending
// the generated config; see https://svelte.dev/docs/kit/configuration#typescript
}

6
vite.config.ts Normal file
View File

@@ -0,0 +1,6 @@
import { sveltekit } from '@sveltejs/kit/vite';
import { defineConfig } from 'vite';
export default defineConfig({
plugins: [sveltekit()]
});

1830
yarn.lock Normal file

File diff suppressed because it is too large Load Diff