From 3dcd7a3ce6688df926802ae63a2469f9d074539c Mon Sep 17 00:00:00 2001 From: Nikolai Papin Date: Mon, 2 Jun 2025 11:18:02 +0300 Subject: [PATCH] refactor: removed drizzle --- frontend/drizzle.config.js | 11 -- frontend/package-lock.json | 147 --------------- frontend/package.json | 5 - frontend/src/lib/css/normalize.css | 257 +++++++++++++++++++++++++++ frontend/src/lib/server/auth.js | 59 ------ frontend/src/lib/server/db/index.js | 10 -- frontend/src/lib/server/db/schema.js | 14 -- frontend/src/routes/+page.svelte | 2 - 8 files changed, 257 insertions(+), 248 deletions(-) delete mode 100644 frontend/drizzle.config.js create mode 100644 frontend/src/lib/css/normalize.css delete mode 100644 frontend/src/lib/server/db/index.js delete mode 100644 frontend/src/lib/server/db/schema.js diff --git a/frontend/drizzle.config.js b/frontend/drizzle.config.js deleted file mode 100644 index 08c0068..0000000 --- a/frontend/drizzle.config.js +++ /dev/null @@ -1,11 +0,0 @@ -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.js', - dialect: 'postgresql', - dbCredentials: { url: process.env.DATABASE_URL }, - verbose: true, - strict: true -}); diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 954c561..e93aa24 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -11,7 +11,6 @@ "@inlang/paraglide-js": "^2.0.0", "@oslojs/crypto": "^1.0.1", "@oslojs/encoding": "^1.1.0", - "drizzle-orm": "^0.40.0", "postgres": "^3.4.5" }, "devDependencies": { @@ -33,7 +32,6 @@ "@testing-library/jest-dom": "^6.6.3", "@testing-library/svelte": "^5.2.4", "@types/node": "^22", - "drizzle-kit": "^0.30.2", "eslint": "^9.18.0", "eslint-config-prettier": "^10.0.1", "eslint-plugin-storybook": "^9.0.3", @@ -259,13 +257,6 @@ "node": ">=18" } }, - "node_modules/@drizzle-team/brocli": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/@drizzle-team/brocli/-/brocli-0.10.2.tgz", - "integrity": "sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w==", - "dev": true, - "license": "Apache-2.0" - }, "node_modules/@esbuild-kit/core-utils": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/@esbuild-kit/core-utils/-/core-utils-3.3.2.tgz", @@ -3871,144 +3862,6 @@ "dev": true, "license": "MIT" }, - "node_modules/drizzle-kit": { - "version": "0.30.6", - "resolved": "https://registry.npmjs.org/drizzle-kit/-/drizzle-kit-0.30.6.tgz", - "integrity": "sha512-U4wWit0fyZuGuP7iNmRleQyK2V8wCuv57vf5l3MnG4z4fzNTjY/U13M8owyQ5RavqvqxBifWORaR3wIUzlN64g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@drizzle-team/brocli": "^0.10.2", - "@esbuild-kit/esm-loader": "^2.5.5", - "esbuild": "^0.19.7", - "esbuild-register": "^3.5.0", - "gel": "^2.0.0" - }, - "bin": { - "drizzle-kit": "bin.cjs" - } - }, - "node_modules/drizzle-orm": { - "version": "0.40.1", - "resolved": "https://registry.npmjs.org/drizzle-orm/-/drizzle-orm-0.40.1.tgz", - "integrity": "sha512-aPNhtiJiPfm3qxz1czrnIDkfvkSdKGXYeZkpG55NPTVI186LmK2fBLMi4dsHpPHlJrZeQ92D322YFPHADBALew==", - "license": "Apache-2.0", - "peerDependencies": { - "@aws-sdk/client-rds-data": ">=3", - "@cloudflare/workers-types": ">=4", - "@electric-sql/pglite": ">=0.2.0", - "@libsql/client": ">=0.10.0", - "@libsql/client-wasm": ">=0.10.0", - "@neondatabase/serverless": ">=0.10.0", - "@op-engineering/op-sqlite": ">=2", - "@opentelemetry/api": "^1.4.1", - "@planetscale/database": ">=1", - "@prisma/client": "*", - "@tidbcloud/serverless": "*", - "@types/better-sqlite3": "*", - "@types/pg": "*", - "@types/sql.js": "*", - "@vercel/postgres": ">=0.8.0", - "@xata.io/client": "*", - "better-sqlite3": ">=7", - "bun-types": "*", - "expo-sqlite": ">=14.0.0", - "gel": ">=2", - "knex": "*", - "kysely": "*", - "mysql2": ">=2", - "pg": ">=8", - "postgres": ">=3", - "sql.js": ">=1", - "sqlite3": ">=5" - }, - "peerDependenciesMeta": { - "@aws-sdk/client-rds-data": { - "optional": true - }, - "@cloudflare/workers-types": { - "optional": true - }, - "@electric-sql/pglite": { - "optional": true - }, - "@libsql/client": { - "optional": true - }, - "@libsql/client-wasm": { - "optional": true - }, - "@neondatabase/serverless": { - "optional": true - }, - "@op-engineering/op-sqlite": { - "optional": true - }, - "@opentelemetry/api": { - "optional": true - }, - "@planetscale/database": { - "optional": true - }, - "@prisma/client": { - "optional": true - }, - "@tidbcloud/serverless": { - "optional": true - }, - "@types/better-sqlite3": { - "optional": true - }, - "@types/pg": { - "optional": true - }, - "@types/sql.js": { - "optional": true - }, - "@vercel/postgres": { - "optional": true - }, - "@xata.io/client": { - "optional": true - }, - "better-sqlite3": { - "optional": true - }, - "bun-types": { - "optional": true - }, - "expo-sqlite": { - "optional": true - }, - "gel": { - "optional": true - }, - "knex": { - "optional": true - }, - "kysely": { - "optional": true - }, - "mysql2": { - "optional": true - }, - "pg": { - "optional": true - }, - "postgres": { - "optional": true - }, - "prisma": { - "optional": true - }, - "sql.js": { - "optional": true - }, - "sqlite3": { - "optional": true - } - } - }, "node_modules/enhanced-resolve": { "version": "5.18.1", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz", diff --git a/frontend/package.json b/frontend/package.json index 2bc1f1a..ae4f31e 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -14,9 +14,6 @@ "lint": "prettier --check . && eslint .", "test:unit": "vitest", "test": "npm run test:unit -- --run", - "db:push": "drizzle-kit push", - "db:migrate": "drizzle-kit migrate", - "db:studio": "drizzle-kit studio", "storybook": "storybook dev -p 6006", "build-storybook": "storybook build" }, @@ -39,7 +36,6 @@ "@testing-library/jest-dom": "^6.6.3", "@testing-library/svelte": "^5.2.4", "@types/node": "^22", - "drizzle-kit": "^0.30.2", "eslint": "^9.18.0", "eslint-config-prettier": "^10.0.1", "eslint-plugin-storybook": "^9.0.3", @@ -62,7 +58,6 @@ "@inlang/paraglide-js": "^2.0.0", "@oslojs/crypto": "^1.0.1", "@oslojs/encoding": "^1.1.0", - "drizzle-orm": "^0.40.0", "postgres": "^3.4.5" } } diff --git a/frontend/src/lib/css/normalize.css b/frontend/src/lib/css/normalize.css new file mode 100644 index 0000000..80cd22b --- /dev/null +++ b/frontend/src/lib/css/normalize.css @@ -0,0 +1,257 @@ +/* Document + * ========================================================================== */ + +/** + * 1. Correct the line height in all browsers. + * 2. Prevent adjustments of font size after orientation changes in iOS. + */ + +:where(html) { + line-height: 1.15; /* 1 */ + -webkit-text-size-adjust: 100%; /* 2 */ + text-size-adjust: 100%; /* 2 */ +} + +/* Sections + * ========================================================================== */ + +/** + * Correct the font size and margin on `h1` elements within `section` and + * `article` contexts in Chrome, Edge, Firefox, and Safari. + */ + +:where(h1) { + font-size: 2em; + margin-block-end: 0.67em; + margin-block-start: 0.67em; +} + +/* Grouping content + * ========================================================================== */ + +/** + * Remove the margin on nested lists in Chrome, Edge, and Safari. + */ + +:where(dl, ol, ul) :where(dl, ol, ul) { + margin-block-end: 0; + margin-block-start: 0; +} + +/** + * 1. Add the correct box sizing in Firefox. + * 2. Correct the inheritance of border color in Firefox. + */ + +:where(hr) { + box-sizing: content-box; /* 1 */ + color: inherit; /* 2 */ + height: 0; /* 1 */ +} + +/* Text-level semantics + * ========================================================================== */ + +/** + * Add the correct text decoration in Safari. + */ + +:where(abbr[title]) { + text-decoration: underline; + text-decoration: underline dotted; +} + +/** + * Add the correct font weight in Chrome, Edge, and Safari. + */ + +:where(b, strong) { + font-weight: bolder; +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + +:where(code, kbd, pre, samp) { + font-family: monospace, monospace; /* 1 */ + font-size: 1em; /* 2 */ +} + +/** + * Add the correct font size in all browsers. + */ + +:where(small) { + font-size: 80%; +} + +/* Tabular data + * ========================================================================== */ + +/** + * 1. Correct table border color in Chrome, Edge, and Safari. + * 2. Remove text indentation from table contents in Chrome, Edge, and Safari. + */ + +:where(table) { + border-color: currentColor; /* 1 */ + text-indent: 0; /* 2 */ +} + +/* Forms + * ========================================================================== */ + +/** + * Remove the margin on controls in Safari. + */ + +:where(button, input, select) { + margin: 0; +} + +/** + * Remove the inheritance of text transform in Firefox. + */ + +:where(button) { + text-transform: none; +} + +/** + * Correct the inability to style buttons in iOS and Safari. + */ + +:where(button, input:is([type="button" i], [type="reset" i], [type="submit" i])) { + -webkit-appearance: button; +} + +/** + * Add the correct vertical alignment in Chrome, Edge, and Firefox. + */ + +:where(progress) { + vertical-align: baseline; +} + +/** + * Remove the inheritance of text transform in Firefox. + */ + +:where(select) { + text-transform: none; +} + +/** + * Remove the margin in Firefox and Safari. + */ + +:where(textarea) { + margin: 0; +} + +/** + * 1. Correct the odd appearance in Chrome, Edge, and Safari. + * 2. Correct the outline style in Safari. + */ + +:where(input[type="search" i]) { + -webkit-appearance: textfield; /* 1 */ + outline-offset: -2px; /* 2 */ +} + +/** + * Correct the cursor style of increment and decrement buttons in Safari. + */ + +::-webkit-inner-spin-button, +::-webkit-outer-spin-button { + height: auto; +} + +/** + * Correct the text style of placeholders in Chrome, Edge, and Safari. + */ + +::-webkit-input-placeholder { + color: inherit; + opacity: 0.54; +} + +/** + * Remove the inner padding in Chrome, Edge, and Safari on macOS. + */ + +::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * 1. Correct the inability to style upload buttons in iOS and Safari. + * 2. Change font properties to `inherit` in Safari. + */ + +::-webkit-file-upload-button { + -webkit-appearance: button; /* 1 */ + font: inherit; /* 2 */ +} + +/** + * Remove the inner border and padding of focus outlines in Firefox. + */ + +:where(button, input:is([type="button" i], [type="color" i], [type="reset" i], [type="submit" i]))::-moz-focus-inner { + border-style: none; + padding: 0; +} + +/** + * Restore the focus outline styles unset by the previous rule in Firefox. + */ + +:where(button, input:is([type="button" i], [type="color" i], [type="reset" i], [type="submit" i]))::-moz-focusring { + outline: 1px dotted ButtonText; +} + +/** + * Remove the additional :invalid styles in Firefox. + */ + +:where(:-moz-ui-invalid) { + box-shadow: none; +} + +/* Interactive + * ========================================================================== */ + +/* + * Add the correct styles in Safari. + */ + +:where(dialog) { + background-color: white; + border: solid; + color: black; + height: -moz-fit-content; + height: fit-content; + left: 0; + margin: auto; + padding: 1em; + position: absolute; + right: 0; + width: -moz-fit-content; + width: fit-content; +} + +:where(dialog:not([open])) { + display: none; +} + +/* + * Add the correct display in all browsers. + */ + +:where(summary) { + display: list-item; +} diff --git a/frontend/src/lib/server/auth.js b/frontend/src/lib/server/auth.js index 42b45dd..1bff23e 100644 --- a/frontend/src/lib/server/auth.js +++ b/frontend/src/lib/server/auth.js @@ -1,8 +1,5 @@ -import { eq } from 'drizzle-orm'; import { sha256 } from '@oslojs/crypto/sha2'; import { encodeBase64url, encodeHexLowerCase } from '@oslojs/encoding'; -import { db } from '$lib/server/db'; -import * as table from '$lib/server/db/schema'; const DAY_IN_MS = 1000 * 60 * 60 * 24; @@ -14,62 +11,6 @@ export function generateSessionToken() { return token; } -/** - * @param {string} token - * @param {string} userId - */ -export async function createSession(token, userId) { - const sessionId = encodeHexLowerCase(sha256(new TextEncoder().encode(token))); - const session = { - id: sessionId, - userId, - expiresAt: new Date(Date.now() + DAY_IN_MS * 30) - }; - await db.insert(table.session).values(session); - return session; -} - -/** @param {string} token */ -export async function validateSessionToken(token) { - const sessionId = encodeHexLowerCase(sha256(new TextEncoder().encode(token))); - const [result] = await db - .select({ - // Adjust user table here to tweak returned data - user: { id: table.user.id, username: table.user.username }, - session: table.session - }) - .from(table.session) - .innerJoin(table.user, eq(table.session.userId, table.user.id)) - .where(eq(table.session.id, sessionId)); - - if (!result) { - return { session: null, user: null }; - } - const { session, user } = result; - - const sessionExpired = Date.now() >= session.expiresAt.getTime(); - if (sessionExpired) { - await db.delete(table.session).where(eq(table.session.id, session.id)); - return { session: null, user: null }; - } - - const renewSession = Date.now() >= session.expiresAt.getTime() - DAY_IN_MS * 15; - if (renewSession) { - session.expiresAt = new Date(Date.now() + DAY_IN_MS * 30); - await db - .update(table.session) - .set({ expiresAt: session.expiresAt }) - .where(eq(table.session.id, session.id)); - } - - return { session, user }; -} - -/** @param {string} sessionId */ -export async function invalidateSession(sessionId) { - await db.delete(table.session).where(eq(table.session.id, sessionId)); -} - /** * @param {import("@sveltejs/kit").RequestEvent} event * @param {string} token diff --git a/frontend/src/lib/server/db/index.js b/frontend/src/lib/server/db/index.js deleted file mode 100644 index fb8b355..0000000 --- a/frontend/src/lib/server/db/index.js +++ /dev/null @@ -1,10 +0,0 @@ -import { drizzle } from 'drizzle-orm/postgres-js'; -import postgres from 'postgres'; -import * as schema from './schema'; -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, { schema }); diff --git a/frontend/src/lib/server/db/schema.js b/frontend/src/lib/server/db/schema.js deleted file mode 100644 index 82a2027..0000000 --- a/frontend/src/lib/server/db/schema.js +++ /dev/null @@ -1,14 +0,0 @@ -import { pgTable, serial, integer, text, timestamp } from 'drizzle-orm/pg-core'; - -export const user = pgTable('user', { - id: text('id').primaryKey(), - age: integer('age') -}); - -export const session = pgTable('session', { - id: text('id').primaryKey(), - userId: text('user_id') - .notNull() - .references(() => user.id), - expiresAt: timestamp('expires_at', { withTimezone: true, mode: 'date' }).notNull() -}); diff --git a/frontend/src/routes/+page.svelte b/frontend/src/routes/+page.svelte index cc88df0..e69de29 100644 --- a/frontend/src/routes/+page.svelte +++ b/frontend/src/routes/+page.svelte @@ -1,2 +0,0 @@ -

Welcome to SvelteKit

-

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