From ac6f247a822b6710901d3a45dd87431642fb1825 Mon Sep 17 00:00:00 2001 From: April Hall Date: Fri, 3 Jan 2025 10:34:11 -0500 Subject: [PATCH] feat: Initial commit --- .env.example | 2 ++ .gitignore | 23 +++++++++++++++++++ .npmrc | 1 + .prettierignore | 4 ++++ .prettierrc | 15 +++++++++++++ README.md | 38 +++++++++++++++++++++++++++++++ bun.lockb | Bin 0 -> 139852 bytes drizzle.config.ts | 14 ++++++++++++ eslint.config.js | 34 ++++++++++++++++++++++++++++ package.json | 43 ++++++++++++++++++++++++++++++++++++ postcss.config.js | 6 +++++ src/app.css | 3 +++ src/app.d.ts | 13 +++++++++++ src/app.html | 12 ++++++++++ src/lib/index.ts | 1 + src/lib/server/db/index.ts | 6 +++++ src/lib/server/db/schema.ts | 6 +++++ src/routes/+layout.svelte | 6 +++++ src/routes/+page.svelte | 2 ++ static/favicon.png | Bin 0 -> 1571 bytes svelte.config.js | 18 +++++++++++++++ tailwind.config.ts | 11 +++++++++ tsconfig.json | 19 ++++++++++++++++ vite.config.ts | 6 +++++ 24 files changed, 283 insertions(+) create mode 100644 .env.example create mode 100644 .gitignore create mode 100644 .npmrc create mode 100644 .prettierignore create mode 100644 .prettierrc create mode 100644 README.md create mode 100755 bun.lockb create mode 100644 drizzle.config.ts create mode 100644 eslint.config.js create mode 100644 package.json create mode 100644 postcss.config.js create mode 100644 src/app.css create mode 100644 src/app.d.ts create mode 100644 src/app.html create mode 100644 src/lib/index.ts create mode 100644 src/lib/server/db/index.ts create mode 100644 src/lib/server/db/schema.ts create mode 100644 src/routes/+layout.svelte create mode 100644 src/routes/+page.svelte create mode 100644 static/favicon.png create mode 100644 svelte.config.js create mode 100644 tailwind.config.ts create mode 100644 tsconfig.json create mode 100644 vite.config.ts diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..ec707ff --- /dev/null +++ b/.env.example @@ -0,0 +1,2 @@ +# Replace with your DB credentials! +DATABASE_URL="postgres://user:password@host:port/db-name" diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3b462cb --- /dev/null +++ b/.gitignore @@ -0,0 +1,23 @@ +node_modules + +# Output +.output +.vercel +.netlify +.wrangler +/.svelte-kit +/build + +# OS +.DS_Store +Thumbs.db + +# Env +.env +.env.* +!.env.example +!.env.test + +# Vite +vite.config.js.timestamp-* +vite.config.ts.timestamp-* diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..b6f27f1 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +engine-strict=true diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..ab78a95 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,4 @@ +# Package Managers +package-lock.json +pnpm-lock.yaml +yarn.lock diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..7ebb855 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,15 @@ +{ + "useTabs": true, + "singleQuote": true, + "trailingComma": "none", + "printWidth": 100, + "plugins": ["prettier-plugin-svelte", "prettier-plugin-tailwindcss"], + "overrides": [ + { + "files": "*.svelte", + "options": { + "parser": "svelte" + } + } + ] +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..b5b2950 --- /dev/null +++ b/README.md @@ -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! + +```bash +# 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: + +```bash +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: + +```bash +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. diff --git a/bun.lockb b/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..2ab113e730ec2d2e85e8b7a4d40c136aad956b1e GIT binary patch literal 139852 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 literal 0 HcmV?d00001 diff --git a/drizzle.config.ts b/drizzle.config.ts new file mode 100644 index 0000000..58c6b2f --- /dev/null +++ b/drizzle.config.ts @@ -0,0 +1,14 @@ +import { defineConfig } from 'drizzle-kit'; +if (!process.env.DATABASE_URL) throw new Error('DATABASE_URL is not set'); + +export default defineConfig({ + schema: './src/lib/server/db/schema.ts', + + dbCredentials: { + url: process.env.DATABASE_URL + }, + + verbose: true, + strict: true, + dialect: 'postgresql' +}); diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 0000000..aa5987f --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,34 @@ +import prettier from 'eslint-config-prettier'; +import js from '@eslint/js'; +import { includeIgnoreFile } from '@eslint/compat'; +import svelte from 'eslint-plugin-svelte'; +import globals from 'globals'; +import { fileURLToPath } from 'node:url'; +import ts from 'typescript-eslint'; +const gitignorePath = fileURLToPath(new URL('./.gitignore', import.meta.url)); + +export default ts.config( + includeIgnoreFile(gitignorePath), + js.configs.recommended, + ...ts.configs.recommended, + ...svelte.configs['flat/recommended'], + prettier, + ...svelte.configs['flat/prettier'], + { + languageOptions: { + globals: { + ...globals.browser, + ...globals.node + } + } + }, + { + files: ['**/*.svelte'], + + languageOptions: { + parserOptions: { + parser: ts.parser + } + } + } +); diff --git a/package.json b/package.json new file mode 100644 index 0000000..b5c37fe --- /dev/null +++ b/package.json @@ -0,0 +1,43 @@ +{ + "name": "chatapp", + "private": true, + "version": "0.0.1", + "type": "module", + "scripts": { + "dev": "vite dev", + "build": "vite build", + "preview": "vite preview", + "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", + "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", + "format": "prettier --write .", + "lint": "prettier --check . && eslint .", + "db:push": "drizzle-kit push", + "db:migrate": "drizzle-kit migrate", + "db:studio": "drizzle-kit studio" + }, + "devDependencies": { + "@eslint/compat": "^1.2.3", + "@sveltejs/adapter-auto": "^3.0.0", + "@sveltejs/kit": "^2.0.0", + "@sveltejs/vite-plugin-svelte": "^4.0.0", + "autoprefixer": "^10.4.20", + "drizzle-kit": "^0.22.0", + "eslint": "^9.7.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-svelte": "^2.36.0", + "globals": "^15.0.0", + "prettier": "^3.3.2", + "prettier-plugin-svelte": "^3.2.6", + "prettier-plugin-tailwindcss": "^0.6.5", + "svelte": "^5.0.0", + "svelte-check": "^4.0.0", + "tailwindcss": "^3.4.9", + "typescript": "^5.0.0", + "typescript-eslint": "^8.0.0", + "vite": "^5.4.11" + }, + "dependencies": { + "drizzle-orm": "^0.33.0", + "postgres": "^3.4.4" + } +} diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 0000000..0f77216 --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,6 @@ +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {} + } +}; diff --git a/src/app.css b/src/app.css new file mode 100644 index 0000000..a31e444 --- /dev/null +++ b/src/app.css @@ -0,0 +1,3 @@ +@import 'tailwindcss/base'; +@import 'tailwindcss/components'; +@import 'tailwindcss/utilities'; diff --git a/src/app.d.ts b/src/app.d.ts new file mode 100644 index 0000000..da08e6d --- /dev/null +++ b/src/app.d.ts @@ -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 {}; diff --git a/src/app.html b/src/app.html new file mode 100644 index 0000000..77a5ff5 --- /dev/null +++ b/src/app.html @@ -0,0 +1,12 @@ + + + + + + + %sveltekit.head% + + +

%sveltekit.body%
+ + diff --git a/src/lib/index.ts b/src/lib/index.ts new file mode 100644 index 0000000..856f2b6 --- /dev/null +++ b/src/lib/index.ts @@ -0,0 +1 @@ +// place files you want to import through the `$lib` alias in this folder. diff --git a/src/lib/server/db/index.ts b/src/lib/server/db/index.ts new file mode 100644 index 0000000..54e3632 --- /dev/null +++ b/src/lib/server/db/index.ts @@ -0,0 +1,6 @@ +import { drizzle } from 'drizzle-orm/postgres-js'; +import postgres from 'postgres'; +import { env } from '$env/dynamic/private'; +if (!env.DATABASE_URL) throw new Error('DATABASE_URL is not set'); +const client = postgres(env.DATABASE_URL); +export const db = drizzle(client); diff --git a/src/lib/server/db/schema.ts b/src/lib/server/db/schema.ts new file mode 100644 index 0000000..aba346f --- /dev/null +++ b/src/lib/server/db/schema.ts @@ -0,0 +1,6 @@ +import { pgTable, serial, text, integer } from 'drizzle-orm/pg-core'; + +export const user = pgTable('user', { + id: serial('id').primaryKey(), + age: integer('age') +}); diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte new file mode 100644 index 0000000..9b776b7 --- /dev/null +++ b/src/routes/+layout.svelte @@ -0,0 +1,6 @@ + + +{@render children()} diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte new file mode 100644 index 0000000..cc88df0 --- /dev/null +++ b/src/routes/+page.svelte @@ -0,0 +1,2 @@ +

Welcome to SvelteKit

+

Visit svelte.dev/docs/kit to read the documentation

diff --git a/static/favicon.png b/static/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..825b9e65af7c104cfb07089bb28659393b4f2097 GIT binary patch literal 1571 zcmV+;2Hg3HP)Px)-AP12RCwC$UE6KzI1p6{F2N z1VK2vi|pOpn{~#djwYcWXTI_im_u^TJgMZ4JMOsSj!0ma>B?-(Hr@X&W@|R-$}W@Z zgj#$x=!~7LGqHW?IO8+*oE1MyDp!G=L0#^lUx?;!fXv@l^6SvTnf^ac{5OurzC#ZMYc20lI%HhX816AYVs1T3heS1*WaWH z%;x>)-J}YB5#CLzU@GBR6sXYrD>Vw(Fmt#|JP;+}<#6b63Ike{Fuo!?M{yEffez;| zp!PfsuaC)>h>-AdbnwN13g*1LowNjT5?+lFVd#9$!8Z9HA|$*6dQ8EHLu}U|obW6f z2%uGv?vr=KNq7YYa2Roj;|zooo<)lf=&2yxM@e`kM$CmCR#x>gI>I|*Ubr({5Y^rb zghxQU22N}F51}^yfDSt786oMTc!W&V;d?76)9KXX1 z+6Okem(d}YXmmOiZq$!IPk5t8nnS{%?+vDFz3BevmFNgpIod~R{>@#@5x9zJKEHLHv!gHeK~n)Ld!M8DB|Kfe%~123&Hz1Z(86nU7*G5chmyDe ziV7$pB7pJ=96hpxHv9rCR29%bLOXlKU<_13_M8x)6;P8E1Kz6G<&P?$P^%c!M5`2` zfY2zg;VK5~^>TJGQzc+33-n~gKt{{of8GzUkWmU110IgI0DLxRIM>0US|TsM=L|@F z0Bun8U!cRB7-2apz=y-7*UxOxz@Z0)@QM)9wSGki1AZ38ceG7Q72z5`i;i=J`ILzL z@iUO?SBBG-0cQuo+an4TsLy-g-x;8P4UVwk|D8{W@U1Zi z!M)+jqy@nQ$p?5tsHp-6J304Q={v-B>66$P0IDx&YT(`IcZ~bZfmn11#rXd7<5s}y zBi9eim&zQc0Dk|2>$bs0PnLmDfMP5lcXRY&cvJ=zKxI^f0%-d$tD!`LBf9^jMSYUA zI8U?CWdY@}cRq6{5~y+)#h1!*-HcGW@+gZ4B};0OnC~`xQOyH19z*TA!!BJ%9s0V3F?CAJ{hTd#*tf+ur-W9MOURF-@B77_-OshsY}6 zOXRY=5%C^*26z?l)1=$bz30!so5tfABdSYzO+H=CpV~aaUefmjvfZ3Ttu9W&W3Iu6 zROlh0MFA5h;my}8lB0tAV-Rvc2Zs_CCSJnx@d`**$idgy-iMob4dJWWw|21b4NB=LfsYp0Aeh{Ov)yztQi;eL4y5 zMi>8^SzKqk8~k?UiQK^^-5d8c%bV?$F8%X~czyiaKCI2=UH