From fb23afc4ea5b41685390d5fba52e11b451fd775e Mon Sep 17 00:00:00 2001 From: Darren Sisson Date: Sat, 23 Nov 2024 21:21:23 +0000 Subject: [PATCH] update tailwind & drizzle version --- package.json | 8 +- src/app/forum/components/ActiveLink.tsx | 29 +++ src/app/forum/home/page.tsx | 29 ++- src/app/forum/lib/helper_functions.ts | 38 ++++ src/db/forum/schema.ts | 254 ++++++++++++++++++------ yarn.lock | 159 +++++++-------- 6 files changed, 373 insertions(+), 144 deletions(-) create mode 100644 src/app/forum/components/ActiveLink.tsx create mode 100644 src/app/forum/lib/helper_functions.ts diff --git a/package.json b/package.json index 92c6e45..ab0b44e 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "@radix-ui/react-tooltip": "^1.1.3", "class-variance-authority": "^0.7.0", "clsx": "^2.1.1", - "drizzle-orm": "^0.36.0", + "drizzle-orm": "^0.36.4", "jose": "^5.6.3", "lucide-react": "^0.454.0", "next": "^15.0.2", @@ -42,19 +42,19 @@ }, "devDependencies": { "@faker-js/faker": "^9.0.0", - "@tailwindcss/postcss": "^4.0.0-alpha.31", + "@tailwindcss/postcss": "^4.0.0-beta.2", "@types/mdx": "^2.0.13", "@types/node": "^20", "@types/react": "npm:types-react@19.0.0-rc.1", "@types/react-dom": "npm:types-react-dom@19.0.0-rc.1", "babel-plugin-react-compiler": "19.0.0-beta-8a03594-20241020", - "drizzle-kit": "^0.27.0", + "drizzle-kit": "^0.28.1", "eslint": "^9.12.0", "eslint-config-next": "^15.0.0", "eslint-plugin-react-compiler": "19.0.0-beta-8a03594-20241020", "prettier": "^3.3.2", "prettier-plugin-tailwindcss": "^0.6.5", - "tailwindcss": "^4.0.0-alpha.31", + "tailwindcss": "^4.0.0-beta.2", "tsx": "^4.19.2", "typescript": "^5.5.3" }, diff --git a/src/app/forum/components/ActiveLink.tsx b/src/app/forum/components/ActiveLink.tsx new file mode 100644 index 0000000..1fdb17a --- /dev/null +++ b/src/app/forum/components/ActiveLink.tsx @@ -0,0 +1,29 @@ +"use client"; + +import Link from "next/link"; +import { usePathname } from "next/navigation"; + +export default function ActiveLink({ + pathname, + children, +}: { + pathname: string; + children: React.ReactNode; +}) { + const activePathname = usePathname(); + + const currentlyActive = + activePathname.slice(activePathname.length - pathname.length) == pathname; + + return ( + +
+ {children} +
+ + ); +} diff --git a/src/app/forum/home/page.tsx b/src/app/forum/home/page.tsx index 1c31b76..137dca7 100644 --- a/src/app/forum/home/page.tsx +++ b/src/app/forum/home/page.tsx @@ -1,8 +1,35 @@ import { dbClient } from "@/db/forum/db"; import { messages } from "@/db/forum/schema"; +import { getUser } from "@/lib/auth-client"; import { desc, isNull } from "drizzle-orm"; +import { revalidatePath } from "next/cache"; +import { upsertTags } from "../lib/helper_functions"; + +export default async function Home({ + searchParams, +}: { + searchParams: Promise<{ [key: string]: string | string[] | undefined }>; +}) { + const userId = await getUser(); + + async function NewPostFunction(formData: FormData) { + "use server"; + try { + const msg = formData.get("message") as string; + const msgId = await dbClient() + .db.insert(messages) + .values({ + message: msg, + user_id: userId?.sub as string, + }) + .returning({ id: messages.id }); + await upsertTags(msgId[0]?.id, msg, false); + revalidatePath("/forum/home"); + } catch (error) { + console.log(error); + } + } -export default async function Home() { const posts = await dbClient() .db.select() .from(messages) diff --git a/src/app/forum/lib/helper_functions.ts b/src/app/forum/lib/helper_functions.ts new file mode 100644 index 0000000..c5f992e --- /dev/null +++ b/src/app/forum/lib/helper_functions.ts @@ -0,0 +1,38 @@ +import { dbClient } from "@/db/forum/db"; +import { eq, inArray, sql } from "drizzle-orm"; +import { revalidatePath } from "next/cache"; +import { hashtag_messages, hashtags, messages } from "@/db/forum/schema"; + +export const upsertTags = async ( + msgid: string, + msg: string, + editmsg: boolean = false, +) => { + const tags = msg.toLowerCase().match(/#[\p{L}0-9-_]+/giu); + + if (!tags || tags.length == 0) return; + tags.forEach((x) => revalidatePath(`forum/posts/tags/${x.slice(1)}`)); + + if (editmsg) { + await dbClient() + .db.delete(hashtag_messages) + .where(eq(hashtag_messages.message_id, msgid)); + } + + await dbClient() + .db.insert(hashtags) + .values(tags.map((x) => ({ hashtag: x }))) + .onConflictDoNothing(); + + await dbClient() + .db.insert(hashtag_messages) + .select( + dbClient() + .db.select({ + hashtag_id: hashtags.id, + message_id: sql`${msgid}`.as("message_id"), + }) + .from(hashtags) + .where(inArray(hashtags.hashtag, tags)), + ); +}; diff --git a/src/db/forum/schema.ts b/src/db/forum/schema.ts index b931847..1d4bfdc 100644 --- a/src/db/forum/schema.ts +++ b/src/db/forum/schema.ts @@ -2,14 +2,21 @@ import { AnyPgColumn, index, integer, + pgPolicy, pgTable, primaryKey, text, timestamp, uuid, } from "drizzle-orm/pg-core"; -import { sql } from "drizzle-orm"; -import { authUsers, authenticatedRole, authUid,postgresRole } from "drizzle-orm/supabase"; +import { eq, sql } from "drizzle-orm"; +import { + authUsers, + authenticatedRole, + authUid, + anonRole, + postgresRole, +} from "drizzle-orm/supabase"; export const users = pgTable( "users", @@ -33,13 +40,36 @@ export const users = pgTable( bio: text("bio"), avatar: text("avatar"), }, - (table) => { - return { - usernameIdx: index("users_username_idx").using("btree", table.username), - emailIdx: index("users_email_idx").using("btree", table.email), - userIdx: index("users_user_id_idx").using("btree", table.user_id), - }; - }, + (table) => [ + index("users_username_idx").using("btree", table.username), + index("users_email_idx").using("btree", table.email), + index("users_user_id_idx").using("btree", table.user_id), + pgPolicy("users_delete_policy", { + as: "permissive", + for: "delete", + to: authenticatedRole, + using: eq(table.user_id, authUid), + }), + pgPolicy("users_insert_policy", { + as: "permissive", + for: "insert", + to: authenticatedRole, + withCheck: eq(table.user_id, authUid), + }), + pgPolicy("users_select_policy", { + as: "permissive", + for: "select", + to: anonRole, + using: sql`true`, + }), + pgPolicy("users_update_policy", { + as: "permissive", + for: "update", + to: authenticatedRole, + withCheck: eq(table.user_id, authUid), + using: eq(table.user_id, authUid), + }), + ], ); export const messages = pgTable( @@ -64,15 +94,35 @@ export const messages = pgTable( () => new Date(), ), }, - (table) => { - return { - userIdx: index("messages_user_id_idx").using("btree", table.user_id), - parentIdIdx: index("messages_parent_id_idx").using( - "btree", - table.parent_id, - ), - }; - }, + (table) => [ + index("messages_user_id_idx").using("btree", table.user_id), + index("messages_parent_id_idx").using("btree", table.parent_id), + pgPolicy("messages_delete_policy", { + as: "permissive", + for: "delete", + to: authenticatedRole, + using: eq(table.user_id, authUid), + }), + pgPolicy("messages_insert_policy", { + as: "permissive", + for: "insert", + to: authenticatedRole, + withCheck: eq(table.user_id, authUid), + }), + pgPolicy("messages_select_policy", { + as: "permissive", + for: "select", + to: anonRole, + using: sql`true`, + }), + pgPolicy("messages_update_policy", { + as: "permissive", + for: "update", + to: authenticatedRole, + withCheck: eq(table.user_id, authUid), + using: eq(table.user_id, authUid), + }), + ], ); export const likes = pgTable( @@ -89,14 +139,37 @@ export const likes = pgTable( .notNull(), like: integer("like").default(0).notNull(), }, - (table) => { - return { - likespk: primaryKey({ - columns: [table.user_id, table.message_id], - name: "likes_pk", - }), - }; - }, + (table) => [ + primaryKey({ + columns: [table.user_id, table.message_id], + name: "likes_pk", + }), + pgPolicy("likes_delete_policy", { + as: "permissive", + for: "delete", + to: authenticatedRole, + using: sql`(user_id IN ( SELECT users.id FROM users WHERE (users.user_id = ( SELECT uid() AS uid))))`, + }), + pgPolicy("likes_insert_policy", { + as: "permissive", + for: "insert", + to: authenticatedRole, + withCheck: sql`(user_id IN ( SELECT users.id FROM users WHERE (users.user_id = ( SELECT uid() AS uid))))`, + }), + pgPolicy("likes_select_policy", { + as: "permissive", + for: "select", + to: anonRole, + using: sql`true`, + }), + pgPolicy("likes_update_policy", { + as: "permissive", + for: "update", + to: authenticatedRole, + withCheck: sql`(user_id IN ( SELECT users.id FROM users WHERE (users.user_id = ( SELECT uid() AS uid))))`, + using: sql`(user_id IN ( SELECT users.id FROM users WHERE (users.user_id = ( SELECT uid() AS uid))))`, + }), + ], ); export const hashtags = pgTable( "hashtags", @@ -107,11 +180,33 @@ export const hashtags = pgTable( .notNull(), hashtag: text("hashtag").notNull(), }, - (table) => { - return { - hashtagIdx: index("hashtags_hashtag_idx").using("btree", table.hashtag), - }; - }, + (table) => [ + index("hashtags_hashtag_idx").using("btree", table.hashtag), + pgPolicy("hashtags_delete_policy", { + as: "permissive", + for: "delete", + to: postgresRole, + using: sql`true`, + }), + pgPolicy("hashtags_insert_policy", { + as: "permissive", + for: "insert", + to: postgresRole, + withCheck: sql`true`, + }), + pgPolicy("hashtags_select_policy", { + as: "permissive", + for: "select", + to: anonRole, + using: sql`true`, + }), + pgPolicy("hashtags_update_policy", { + as: "permissive", + for: "update", + to: postgresRole, + using: sql`true`, + }), + ], ); export const hashtag_messages = pgTable( @@ -130,22 +225,38 @@ export const hashtag_messages = pgTable( }) .notNull(), }, - (table) => { - return { - hashtagIdIdx: index("hashtag_messages_hashtag_id_idx").using( - "btree", - table.hashtag_id, - ), - messageIdIdx: index("hashtag_messages_message_id_idx").using( - "btree", - table.message_id, - ), - hashtagpk: primaryKey({ - columns: [table.hashtag_id, table.message_id], - name: "hashtag_messages_pk", - }), - }; - }, + (table) => [ + index("hashtag_messages_hashtag_id_idx").using("btree", table.hashtag_id), + index("hashtag_messages_message_id_idx").using("btree", table.message_id), + primaryKey({ + columns: [table.hashtag_id, table.message_id], + name: "hashtag_messages_pk", + }), + pgPolicy("hashtag_messages_delete_policy", { + as: "permissive", + for: "delete", + to: postgresRole, + using: sql`true`, + }), + pgPolicy("hashtag_messages_insert_policy", { + as: "permissive", + for: "insert", + to: postgresRole, + withCheck: sql`true`, + }), + pgPolicy("hashtag_messages_select_policy", { + as: "permissive", + for: "select", + to: anonRole, + using: sql`true`, + }), + pgPolicy("hashtag_messages_update_policy", { + as: "permissive", + for: "update", + to: postgresRole, + using: sql`true`, + }), + ], ); export const user_follows = pgTable( @@ -158,17 +269,40 @@ export const user_follows = pgTable( .references(() => users.id, { onDelete: "cascade", onUpdate: "cascade" }) .notNull(), }, - (table) => { - return { - userIdx: index("user_follows_user_id_idx").using("btree", table.user_id), - followingUserIdx: index("user_follows_following_user_id_idx").using( - "btree", - table.following_user_id, - ), - userFollowspk: primaryKey({ - columns: [table.user_id, table.following_user_id], - name: "user_follows_pk", - }), - }; - }, + (table) => [ + index("user_follows_user_id_idx").using("btree", table.user_id), + index("user_follows_following_user_id_idx").using( + "btree", + table.following_user_id, + ), + primaryKey({ + columns: [table.user_id, table.following_user_id], + name: "user_follows_pk", + }), + pgPolicy("user_follows_delete_policy", { + as: "permissive", + for: "delete", + to: authenticatedRole, + using: sql`(user_id IN ( SELECT users.id FROM users WHERE (users.user_id = ( SELECT uid() AS uid))))`, + }), + pgPolicy("user_follows_insert_policy", { + as: "permissive", + for: "insert", + to: authenticatedRole, + withCheck: sql`(user_id IN ( SELECT users.id FROM users WHERE (users.user_id = ( SELECT uid() AS uid))))`, + }), + pgPolicy("user_follows_select_policy", { + as: "permissive", + for: "select", + to: anonRole, + using: sql`true`, + }), + pgPolicy("user_follows_update_policy", { + as: "permissive", + for: "update", + to: authenticatedRole, + using: sql`(user_id IN ( SELECT users.id FROM users WHERE (users.user_id = ( SELECT uid() AS uid))))`, + withCheck: sql`(user_id IN ( SELECT users.id FROM users WHERE (users.user_id = ( SELECT uid() AS uid))))`, + }), + ], ); diff --git a/yarn.lock b/yarn.lock index 992c720..edabd13 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2336,108 +2336,109 @@ __metadata: languageName: node linkType: hard -"@tailwindcss/node@npm:4.0.0-alpha.31": - version: 4.0.0-alpha.31 - resolution: "@tailwindcss/node@npm:4.0.0-alpha.31" +"@tailwindcss/node@npm:4.0.0-beta.2": + version: 4.0.0-beta.2 + resolution: "@tailwindcss/node@npm:4.0.0-beta.2" dependencies: enhanced-resolve: "npm:^5.17.1" - jiti: "npm:^2.0.0-beta.3" - checksum: 10c0/60fe1e79acd91b4e8f522b0a1c690aca481270553aca491d105828a19a3cfd72dc8156f8dfd1332f0beb37a17ce86b2e6e923c93bf9242dfba1b832204010eef + jiti: "npm:^2.4.0" + tailwindcss: "npm:4.0.0-beta.2" + checksum: 10c0/d260c9d3e0ec63976fa35ced1abb7cbe3ed8e382942ae354013832f0b5d79df926710786d81d7deb8bec0ff1cbec5a37fea0d0552edd9f65efe54edfb8212064 languageName: node linkType: hard -"@tailwindcss/oxide-android-arm64@npm:4.0.0-alpha.31": - version: 4.0.0-alpha.31 - resolution: "@tailwindcss/oxide-android-arm64@npm:4.0.0-alpha.31" +"@tailwindcss/oxide-android-arm64@npm:4.0.0-beta.2": + version: 4.0.0-beta.2 + resolution: "@tailwindcss/oxide-android-arm64@npm:4.0.0-beta.2" conditions: os=android & cpu=arm64 languageName: node linkType: hard -"@tailwindcss/oxide-darwin-arm64@npm:4.0.0-alpha.31": - version: 4.0.0-alpha.31 - resolution: "@tailwindcss/oxide-darwin-arm64@npm:4.0.0-alpha.31" +"@tailwindcss/oxide-darwin-arm64@npm:4.0.0-beta.2": + version: 4.0.0-beta.2 + resolution: "@tailwindcss/oxide-darwin-arm64@npm:4.0.0-beta.2" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@tailwindcss/oxide-darwin-x64@npm:4.0.0-alpha.31": - version: 4.0.0-alpha.31 - resolution: "@tailwindcss/oxide-darwin-x64@npm:4.0.0-alpha.31" +"@tailwindcss/oxide-darwin-x64@npm:4.0.0-beta.2": + version: 4.0.0-beta.2 + resolution: "@tailwindcss/oxide-darwin-x64@npm:4.0.0-beta.2" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@tailwindcss/oxide-freebsd-x64@npm:4.0.0-alpha.31": - version: 4.0.0-alpha.31 - resolution: "@tailwindcss/oxide-freebsd-x64@npm:4.0.0-alpha.31" +"@tailwindcss/oxide-freebsd-x64@npm:4.0.0-beta.2": + version: 4.0.0-beta.2 + resolution: "@tailwindcss/oxide-freebsd-x64@npm:4.0.0-beta.2" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"@tailwindcss/oxide-linux-arm-gnueabihf@npm:4.0.0-alpha.31": - version: 4.0.0-alpha.31 - resolution: "@tailwindcss/oxide-linux-arm-gnueabihf@npm:4.0.0-alpha.31" +"@tailwindcss/oxide-linux-arm-gnueabihf@npm:4.0.0-beta.2": + version: 4.0.0-beta.2 + resolution: "@tailwindcss/oxide-linux-arm-gnueabihf@npm:4.0.0-beta.2" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@tailwindcss/oxide-linux-arm64-gnu@npm:4.0.0-alpha.31": - version: 4.0.0-alpha.31 - resolution: "@tailwindcss/oxide-linux-arm64-gnu@npm:4.0.0-alpha.31" +"@tailwindcss/oxide-linux-arm64-gnu@npm:4.0.0-beta.2": + version: 4.0.0-beta.2 + resolution: "@tailwindcss/oxide-linux-arm64-gnu@npm:4.0.0-beta.2" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@tailwindcss/oxide-linux-arm64-musl@npm:4.0.0-alpha.31": - version: 4.0.0-alpha.31 - resolution: "@tailwindcss/oxide-linux-arm64-musl@npm:4.0.0-alpha.31" +"@tailwindcss/oxide-linux-arm64-musl@npm:4.0.0-beta.2": + version: 4.0.0-beta.2 + resolution: "@tailwindcss/oxide-linux-arm64-musl@npm:4.0.0-beta.2" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@tailwindcss/oxide-linux-x64-gnu@npm:4.0.0-alpha.31": - version: 4.0.0-alpha.31 - resolution: "@tailwindcss/oxide-linux-x64-gnu@npm:4.0.0-alpha.31" +"@tailwindcss/oxide-linux-x64-gnu@npm:4.0.0-beta.2": + version: 4.0.0-beta.2 + resolution: "@tailwindcss/oxide-linux-x64-gnu@npm:4.0.0-beta.2" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@tailwindcss/oxide-linux-x64-musl@npm:4.0.0-alpha.31": - version: 4.0.0-alpha.31 - resolution: "@tailwindcss/oxide-linux-x64-musl@npm:4.0.0-alpha.31" +"@tailwindcss/oxide-linux-x64-musl@npm:4.0.0-beta.2": + version: 4.0.0-beta.2 + resolution: "@tailwindcss/oxide-linux-x64-musl@npm:4.0.0-beta.2" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@tailwindcss/oxide-win32-arm64-msvc@npm:4.0.0-alpha.31": - version: 4.0.0-alpha.31 - resolution: "@tailwindcss/oxide-win32-arm64-msvc@npm:4.0.0-alpha.31" +"@tailwindcss/oxide-win32-arm64-msvc@npm:4.0.0-beta.2": + version: 4.0.0-beta.2 + resolution: "@tailwindcss/oxide-win32-arm64-msvc@npm:4.0.0-beta.2" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@tailwindcss/oxide-win32-x64-msvc@npm:4.0.0-alpha.31": - version: 4.0.0-alpha.31 - resolution: "@tailwindcss/oxide-win32-x64-msvc@npm:4.0.0-alpha.31" +"@tailwindcss/oxide-win32-x64-msvc@npm:4.0.0-beta.2": + version: 4.0.0-beta.2 + resolution: "@tailwindcss/oxide-win32-x64-msvc@npm:4.0.0-beta.2" conditions: os=win32 & cpu=x64 languageName: node linkType: hard -"@tailwindcss/oxide@npm:4.0.0-alpha.31": - version: 4.0.0-alpha.31 - resolution: "@tailwindcss/oxide@npm:4.0.0-alpha.31" +"@tailwindcss/oxide@npm:4.0.0-beta.2": + version: 4.0.0-beta.2 + resolution: "@tailwindcss/oxide@npm:4.0.0-beta.2" dependencies: - "@tailwindcss/oxide-android-arm64": "npm:4.0.0-alpha.31" - "@tailwindcss/oxide-darwin-arm64": "npm:4.0.0-alpha.31" - "@tailwindcss/oxide-darwin-x64": "npm:4.0.0-alpha.31" - "@tailwindcss/oxide-freebsd-x64": "npm:4.0.0-alpha.31" - "@tailwindcss/oxide-linux-arm-gnueabihf": "npm:4.0.0-alpha.31" - "@tailwindcss/oxide-linux-arm64-gnu": "npm:4.0.0-alpha.31" - "@tailwindcss/oxide-linux-arm64-musl": "npm:4.0.0-alpha.31" - "@tailwindcss/oxide-linux-x64-gnu": "npm:4.0.0-alpha.31" - "@tailwindcss/oxide-linux-x64-musl": "npm:4.0.0-alpha.31" - "@tailwindcss/oxide-win32-arm64-msvc": "npm:4.0.0-alpha.31" - "@tailwindcss/oxide-win32-x64-msvc": "npm:4.0.0-alpha.31" + "@tailwindcss/oxide-android-arm64": "npm:4.0.0-beta.2" + "@tailwindcss/oxide-darwin-arm64": "npm:4.0.0-beta.2" + "@tailwindcss/oxide-darwin-x64": "npm:4.0.0-beta.2" + "@tailwindcss/oxide-freebsd-x64": "npm:4.0.0-beta.2" + "@tailwindcss/oxide-linux-arm-gnueabihf": "npm:4.0.0-beta.2" + "@tailwindcss/oxide-linux-arm64-gnu": "npm:4.0.0-beta.2" + "@tailwindcss/oxide-linux-arm64-musl": "npm:4.0.0-beta.2" + "@tailwindcss/oxide-linux-x64-gnu": "npm:4.0.0-beta.2" + "@tailwindcss/oxide-linux-x64-musl": "npm:4.0.0-beta.2" + "@tailwindcss/oxide-win32-arm64-msvc": "npm:4.0.0-beta.2" + "@tailwindcss/oxide-win32-x64-msvc": "npm:4.0.0-beta.2" dependenciesMeta: "@tailwindcss/oxide-android-arm64": optional: true @@ -2461,21 +2462,21 @@ __metadata: optional: true "@tailwindcss/oxide-win32-x64-msvc": optional: true - checksum: 10c0/71f1dd257e9b823e9b43b86fd9b967ce1e3788d1ddb268b7abc328ece2c1da78481c47279781a6be571e294f506b832608a8e26f193a02fe1a948cf96d995508 + checksum: 10c0/9f2507df9002f996e747610b9bd19ba3c196576a96d89155dbbd015979ba3d3b8aa9c38fd3448ac448d4a1512a8ac8859da88a8e65b507e51e096b1e1b1efe9a languageName: node linkType: hard -"@tailwindcss/postcss@npm:^4.0.0-alpha.31": - version: 4.0.0-alpha.31 - resolution: "@tailwindcss/postcss@npm:4.0.0-alpha.31" +"@tailwindcss/postcss@npm:^4.0.0-beta.2": + version: 4.0.0-beta.2 + resolution: "@tailwindcss/postcss@npm:4.0.0-beta.2" dependencies: "@alloc/quick-lru": "npm:^5.2.0" - "@tailwindcss/node": "npm:4.0.0-alpha.31" - "@tailwindcss/oxide": "npm:4.0.0-alpha.31" + "@tailwindcss/node": "npm:4.0.0-beta.2" + "@tailwindcss/oxide": "npm:4.0.0-beta.2" lightningcss: "npm:^1.26.0" postcss: "npm:^8.4.41" - tailwindcss: "npm:4.0.0-alpha.31" - checksum: 10c0/84a2d1352b7f03745507c92b5818e3a7df80bbb15b16df28c79ace01755ae6d87359afbe286ad3af37000da016e5631dfb2f45b154478a25dab60568c7ce9acd + tailwindcss: "npm:4.0.0-beta.2" + checksum: 10c0/26102a683768577c63d202f00c48835d128365328a16cb87e44772fb48f0b429156acad8f2bfdbbb5614b6a98675a8b204eaf399ea8541ec1c0e0458329a7a2d languageName: node linkType: hard @@ -3576,9 +3577,9 @@ __metadata: languageName: node linkType: hard -"drizzle-kit@npm:^0.27.0": - version: 0.27.0 - resolution: "drizzle-kit@npm:0.27.0" +"drizzle-kit@npm:^0.28.1": + version: 0.28.1 + resolution: "drizzle-kit@npm:0.28.1" dependencies: "@drizzle-team/brocli": "npm:^0.10.2" "@esbuild-kit/esm-loader": "npm:^2.5.5" @@ -3586,20 +3587,20 @@ __metadata: esbuild-register: "npm:^3.5.0" bin: drizzle-kit: bin.cjs - checksum: 10c0/57810f19375e3e6ac14371f0a2bcd7d4f584ca55a8953a043202a8eb5d3af1eaa2fb2cf4a451ee36130f692d67fa49f85194c740e1b33276bceb26b7d947d7b4 + checksum: 10c0/d8353d1df6f50f4510c19e89579e549281e47128b53c56a06fb9a6a4a8a7fccd71e04a317b90f9ada4d4fcfcaa1fdd20d4cb7a92df165801c1ae2ceb6157a339 languageName: node linkType: hard -"drizzle-orm@npm:^0.36.0": - version: 0.36.0 - resolution: "drizzle-orm@npm:0.36.0" +"drizzle-orm@npm:^0.36.4": + version: 0.36.4 + resolution: "drizzle-orm@npm:0.36.4" peerDependencies: "@aws-sdk/client-rds-data": ">=3" "@cloudflare/workers-types": ">=3" "@electric-sql/pglite": ">=0.2.0" "@libsql/client": ">=0.10.0" "@libsql/client-wasm": ">=0.10.0" - "@neondatabase/serverless": ">=0.1" + "@neondatabase/serverless": ">=0.10.0" "@op-engineering/op-sqlite": ">=2" "@opentelemetry/api": ^1.4.1 "@planetscale/database": ">=1" @@ -3613,7 +3614,7 @@ __metadata: "@xata.io/client": "*" better-sqlite3: ">=7" bun-types: "*" - expo-sqlite: ">=13.2.0" + expo-sqlite: ">=14.0.0" knex: "*" kysely: "*" mysql2: ">=2" @@ -3681,7 +3682,7 @@ __metadata: optional: true sqlite3: optional: true - checksum: 10c0/a92cc827c41f2a0642546e004848f8dc220e9630f8e0913c35be3f83272d0d9d6384236d350115078adbd929764ca6194abd29eea50410bdec842f69389c047e + checksum: 10c0/93ffc719b3420a3f6ac89c5bd4fcd6bacc9938d83bec3c1513f5faca308d948260dd316abf7e81181bbe6a2f887d91bb44900798934b396281c6fb352fe07711 languageName: node linkType: hard @@ -5453,7 +5454,7 @@ __metadata: languageName: node linkType: hard -"jiti@npm:^2.0.0-beta.3": +"jiti@npm:^2.4.0": version: 2.4.0 resolution: "jiti@npm:2.4.0" bin: @@ -6804,7 +6805,7 @@ __metadata: "@radix-ui/react-slot": "npm:^1.1.0" "@radix-ui/react-switch": "npm:^1.1.1" "@radix-ui/react-tooltip": "npm:^1.1.3" - "@tailwindcss/postcss": "npm:^4.0.0-alpha.31" + "@tailwindcss/postcss": "npm:^4.0.0-beta.2" "@types/mdx": "npm:^2.0.13" "@types/node": "npm:^20" "@types/react": "npm:types-react@19.0.0-rc.1" @@ -6812,8 +6813,8 @@ __metadata: babel-plugin-react-compiler: "npm:19.0.0-beta-8a03594-20241020" class-variance-authority: "npm:^0.7.0" clsx: "npm:^2.1.1" - drizzle-kit: "npm:^0.27.0" - drizzle-orm: "npm:^0.36.0" + drizzle-kit: "npm:^0.28.1" + drizzle-orm: "npm:^0.36.4" eslint: "npm:^9.12.0" eslint-config-next: "npm:^15.0.0" eslint-plugin-react-compiler: "npm:19.0.0-beta-8a03594-20241020" @@ -6829,7 +6830,7 @@ __metadata: server-only: "npm:^0.0.1" sharp: "npm:^0.33.4" tailwind-merge: "npm:^2.4.0" - tailwindcss: "npm:^4.0.0-alpha.31" + tailwindcss: "npm:^4.0.0-beta.2" tsx: "npm:^4.19.2" typescript: "npm:^5.5.3" languageName: unknown @@ -7817,10 +7818,10 @@ __metadata: languageName: node linkType: hard -"tailwindcss@npm:4.0.0-alpha.31, tailwindcss@npm:^4.0.0-alpha.31": - version: 4.0.0-alpha.31 - resolution: "tailwindcss@npm:4.0.0-alpha.31" - checksum: 10c0/9040f5e3d5d330e93eb174bb00bb762eacfd84c07297d07162b6d8811667b49ebee21218eac9860cc2c5dbd860bc1d0b6dda48d56a297b727c97cdf2d6878b7a +"tailwindcss@npm:4.0.0-beta.2, tailwindcss@npm:^4.0.0-beta.2": + version: 4.0.0-beta.2 + resolution: "tailwindcss@npm:4.0.0-beta.2" + checksum: 10c0/520432cd07b1f95149bddc4465eb2bcaafb190ce60c5549b8f2cc337d1b2f959ce5c1932dfb01316de0a38e916278d692c5f90076e85e5570bf72836ef9bcef4 languageName: node linkType: hard