Improvements: remove dead config, fix ESM, add URL validation, unify types, add missing logging
- Remove .prettierrc (dead config, Biome replaces Prettier) - Rename lighthouserc.json to lighthouserc.cjs with module.exports for ESM compat - Add logger.warn to empty catch blocks in auth, register, site-settings, prisma-cache, redis, security, rate-limit - Unify ActionResult type: action-helper.ts uses 'ok' consistent with safe-action-shared.ts - Add noUnusedLocals + noUnusedParameters to tsconfig + fix 25 pre-existing unused vars - Replace barrel export src/types/index.ts with direct @/types/common imports - Make trustHost conditional (development only) in auth.ts - Add pre-flight URL validation to update-Nitrov3.sh to catch image.library.url misconfigurations - Improve NITRO_IMAGE_LIBRARY_URL content validation in pre-flight & post-compute checks
This commit is contained in:
1 parent
b922f6d49f
commit
17847545dd
292 files changed
+69195
-67915
No files matched your search
@@ -36,7 +36,11 @@ export default async function PollDetailPage({
|
||||
}
|
||||
|
||||
const now = Date.now();
|
||||
if (poll.startsAt && poll.startsAt.getTime() > now && poll.status === "active") {
|
||||
if (
|
||||
poll.startsAt &&
|
||||
poll.startsAt.getTime() > now &&
|
||||
poll.status === "active"
|
||||
) {
|
||||
// Not started yet — treat as unavailable for guests
|
||||
notFound();
|
||||
}
|
||||
@@ -101,7 +105,11 @@ export default async function PollDetailPage({
|
||||
|
||||
{isOpen && !hasVoted ? (
|
||||
session?.user ? (
|
||||
<ContentCard icon="🗳️" title={t("voteTitle")} subtitle={t("voteSubtitle")}>
|
||||
<ContentCard
|
||||
icon="🗳️"
|
||||
title={t("voteTitle")}
|
||||
subtitle={t("voteSubtitle")}
|
||||
>
|
||||
<PollVoteForm
|
||||
pollId={poll.id}
|
||||
questions={poll.questions.map((q) => ({
|
||||
@@ -156,7 +164,10 @@ export default async function PollDetailPage({
|
||||
const counts = new Map<string, number>();
|
||||
for (const opt of options) counts.set(opt, 0);
|
||||
for (const vote of votes) {
|
||||
for (const part of vote.split("\n").map((a) => a.trim()).filter(Boolean)) {
|
||||
for (const part of vote
|
||||
.split("\n")
|
||||
.map((a) => a.trim())
|
||||
.filter(Boolean)) {
|
||||
counts.set(part, (counts.get(part) ?? 0) + 1);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -99,10 +99,16 @@ export function PollVoteForm({
|
||||
value={answers[q.id] ?? ""}
|
||||
onChange={(e) => setSingle(q.id, e.target.value)}
|
||||
placeholder={t("textPlaceholder")}
|
||||
style={{ width: "100%", marginTop: "0.35rem", resize: "vertical" }}
|
||||
style={{
|
||||
width: "100%",
|
||||
marginTop: "0.35rem",
|
||||
resize: "vertical",
|
||||
}}
|
||||
/>
|
||||
) : q.type === "multiple" ? (
|
||||
<div style={{ display: "grid", gap: "0.4rem", marginTop: "0.35rem" }}>
|
||||
<div
|
||||
style={{ display: "grid", gap: "0.4rem", marginTop: "0.35rem" }}
|
||||
>
|
||||
{options.map((opt) => (
|
||||
<label
|
||||
key={opt}
|
||||
@@ -123,7 +129,9 @@ export function PollVoteForm({
|
||||
))}
|
||||
</div>
|
||||
) : (
|
||||
<div style={{ display: "grid", gap: "0.4rem", marginTop: "0.35rem" }}>
|
||||
<div
|
||||
style={{ display: "grid", gap: "0.4rem", marginTop: "0.35rem" }}
|
||||
>
|
||||
{options.map((opt) => (
|
||||
<label
|
||||
key={opt}
|
||||
|
||||
@@ -64,7 +64,13 @@ export default async function PollsPage() {
|
||||
{poll.title}
|
||||
</h3>
|
||||
{poll.description ? (
|
||||
<p style={{ margin: 0, fontSize: "0.88rem", lineHeight: 1.5 }}>
|
||||
<p
|
||||
style={{
|
||||
margin: 0,
|
||||
fontSize: "0.88rem",
|
||||
lineHeight: 1.5,
|
||||
}}
|
||||
>
|
||||
{excerpt(poll.description, 120)}
|
||||
</p>
|
||||
) : null}
|
||||
|
||||
Reference in new issue
Block a user