Skip to content

Commit 7853ea1

Browse files
committed
use biome for linting and formatting
1 parent 5b27a2d commit 7853ea1

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

71 files changed

+848
-668
lines changed

.prettierrc

Lines changed: 0 additions & 6 deletions
This file was deleted.

.vscode/settings.json

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,3 @@
11
{
2-
"eslint.workingDirectories": [
3-
{
4-
"mode": "auto"
5-
}
6-
]
2+
"editor.defaultFormatter": "biomejs.biome"
73
}

biome.json

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
{
2+
"$schema": "https://biomejs.dev/schemas/1.9.4/schema.json",
3+
"vcs": {
4+
"enabled": false,
5+
"clientKind": "git",
6+
"useIgnoreFile": false
7+
},
8+
"files": {
9+
"ignoreUnknown": false,
10+
"ignore": ["node_modules", "dist", "migrations", ".next"]
11+
},
12+
"formatter": {
13+
"enabled": true,
14+
"indentStyle": "space",
15+
"indentWidth": 2
16+
},
17+
"organizeImports": {
18+
"enabled": true
19+
},
20+
"linter": {
21+
"enabled": true,
22+
"rules": {
23+
"recommended": true,
24+
"suspicious": {
25+
"noExplicitAny": "warn"
26+
},
27+
"style": {
28+
"noNonNullAssertion": "warn"
29+
},
30+
"correctness": {
31+
"noChildrenProp": "off"
32+
},
33+
"a11y": {
34+
"useKeyWithClickEvents": "off"
35+
}
36+
}
37+
},
38+
"javascript": {
39+
"formatter": {
40+
"quoteStyle": "double",
41+
"trailingCommas": "all",
42+
"semicolons": "always",
43+
"lineWidth": 100
44+
}
45+
}
46+
}

components.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,4 @@
1818
"hooks": "@/hooks"
1919
},
2020
"iconLibrary": "lucide"
21-
}
21+
}

drizzle.config.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { defineConfig } from "drizzle-kit";
22

33
export default defineConfig({
44
dbCredentials: {
5+
// biome-ignore lint/style/noNonNullAssertion: in config file so can't use env from lib
56
url: process.env.DATABASE_URL!,
67
},
78
dialect: "postgresql",

migrate.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
import { migrate } from "drizzle-orm/neon-http/migrator";
2-
import { drizzle } from "drizzle-orm/neon-http";
1+
import path from "node:path";
32
import { neon } from "@neondatabase/serverless";
4-
import path from "path";
3+
import { drizzle } from "drizzle-orm/neon-http";
4+
import { migrate } from "drizzle-orm/neon-http/migrator";
55

66
const neonClient = neon(process.env.DATABASE_URL);
77
export const db = drizzle(neonClient);

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
"dev:trigger": "pnpm dlx trigger.dev@3.3.6 dev",
99
"build": "next build",
1010
"start": "next start",
11-
"lint": "next lint",
11+
"check": "biome check --write",
1212
"generate": "drizzle-kit generate",
1313
"migrate": "drizzle-kit migrate",
1414
"migrate:dev": "node --env-file=.env migrate.js",
@@ -75,6 +75,7 @@
7575
"zustand": "5.0.1"
7676
},
7777
"devDependencies": {
78+
"@biomejs/biome": "1.9.4",
7879
"@trigger.dev/build": "3.3.6",
7980
"@types/node": "^20",
8081
"@types/react": "^18",

pnpm-lock.yaml

Lines changed: 91 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/app/api/wh/clerk/route.ts

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
1-
import { Webhook } from "svix";
2-
import { headers } from "next/headers";
3-
import { type WebhookEvent, clerkClient } from "@clerk/nextjs/server";
4-
import Stripe from "stripe";
5-
import { env } from "@/lib/env";
61
import { db } from "@/lib/db";
2+
import { env } from "@/lib/env";
73
import { users, videos } from "@/lib/schema";
8-
import { tasks } from "@trigger.dev/sdk/v3";
94
import type { videoDeletionTask } from "@/trigger/video-deletion";
5+
import { type WebhookEvent, clerkClient } from "@clerk/nextjs/server";
6+
import { tasks } from "@trigger.dev/sdk/v3";
107
import { eq, sql } from "drizzle-orm";
8+
import { headers } from "next/headers";
9+
import Stripe from "stripe";
10+
import { Webhook } from "svix";
1111

1212
export async function POST(request: Request) {
1313
const stripe = new Stripe(env.STRIPE_SECRET_KEY);
@@ -58,7 +58,13 @@ export async function POST(request: Request) {
5858
if (event.type === "user.created") {
5959
const userPrimaryEmail = event.data.email_addresses.find(
6060
(e) => e.id === event.data.primary_email_address_id,
61-
)!;
61+
);
62+
63+
if (!userPrimaryEmail) {
64+
return new Response("Error occured - no user primary email", {
65+
status: 400,
66+
});
67+
}
6268

6369
const stripeCustomer = await stripe.customers.create({
6470
email: userPrimaryEmail.email_address,
@@ -89,7 +95,9 @@ export async function POST(request: Request) {
8995
db.delete(users).where(eq(users.id, event.data.id)).returning(),
9096
]);
9197

92-
const videoDeletionTasks = deletedVideos.map((video) => ({ payload: { videoId: video.id } }));
98+
const videoDeletionTasks = deletedVideos.map((video) => ({
99+
payload: { videoId: video.id },
100+
}));
93101

94102
await Promise.all([
95103
stripe.customers.del(deletedUser.stripeCustomerId),
@@ -99,7 +107,13 @@ export async function POST(request: Request) {
99107
} else if (event.type === "user.updated") {
100108
const userPrimaryEmail = event.data.email_addresses.find(
101109
(e) => e.id === event.data.primary_email_address_id,
102-
)!;
110+
);
111+
112+
if (!userPrimaryEmail) {
113+
return new Response("Error occured - no user primary email", {
114+
status: 400,
115+
});
116+
}
103117

104118
const [updatedUser] = await db
105119
.update(users)

src/app/api/wh/stripe/route.ts

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
1+
import { FREE_PLAN_VIDEO_RETENION_DAYS, PLAN_STORAGE_SIZES } from "@/lib/constants";
2+
import { db } from "@/lib/db";
13
import { env } from "@/lib/env";
4+
import { users, videos } from "@/lib/schema";
5+
import { safeParseAccountTier } from "@/lib/utils";
6+
import type { videoDeletionTask } from "@/trigger/video-deletion";
27
import { clerkClient } from "@clerk/nextjs/server";
38
import { tasks } from "@trigger.dev/sdk/v3";
49
import { Redis } from "@upstash/redis";
5-
import { FREE_PLAN_VIDEO_RETENION_DAYS, PLAN_STORAGE_SIZES } from "@/lib/constants";
6-
import { db } from "@/lib/db";
7-
import { users, videos } from "@/lib/schema";
10+
import { eq, sql } from "drizzle-orm";
811
import { headers } from "next/headers";
912
import Stripe from "stripe";
10-
import type { videoDeletionTask } from "@/trigger/video-deletion";
11-
import { eq, sql } from "drizzle-orm";
1213

1314
const redis = new Redis({
1415
url: process.env.REDIS_REST_URL,
@@ -72,7 +73,7 @@ export async function POST(request: Request) {
7273
const [updatedUser] = await db
7374
.update(users)
7475
.set({
75-
accountTier: productName as any,
76+
accountTier: safeParseAccountTier(productName),
7677
})
7778
.where(eq(users.email, customerEmail))
7879
.returning();
@@ -90,7 +91,9 @@ export async function POST(request: Request) {
9091
]);
9192

9293
return new Response("", { status: 200 });
93-
} else if (
94+
}
95+
96+
if (
9497
event.type === "customer.subscription.deleted" ||
9598
event.type === "customer.subscription.paused"
9699
) {
@@ -136,7 +139,7 @@ export async function POST(request: Request) {
136139
]);
137140

138141
const currentAmountOfStorage = PLAN_STORAGE_SIZES[userData.accountTier];
139-
const futureAmountOfStorage = PLAN_STORAGE_SIZES["free"];
142+
const futureAmountOfStorage = PLAN_STORAGE_SIZES.free;
140143

141144
const difference = Math.abs(currentAmountOfStorage - futureAmountOfStorage);
142145
let videoSizeDeleted = 0;

0 commit comments

Comments
 (0)