- 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
41 lines
1.1 KiB
TypeScript
41 lines
1.1 KiB
TypeScript
import { ZodError, z } from "zod";
|
|
import { handleActionError as foundationHandle } from "@/lib/foundation/action";
|
|
|
|
export type ActionResult<T = Record<string, unknown>> =
|
|
| { ok: true; data?: T }
|
|
| { ok: false; error: string; fieldErrors?: Record<string, string[]> };
|
|
|
|
export function actionOk<T = Record<string, unknown>>(
|
|
data?: T,
|
|
): ActionResult<T> {
|
|
return { ok: true, data: data ?? ({} as T) };
|
|
}
|
|
|
|
export function actionError(message: string): ActionResult<never> {
|
|
return { ok: false, error: message };
|
|
}
|
|
|
|
export class ActionError extends Error {
|
|
constructor(message: string) {
|
|
super(message);
|
|
this.name = "ActionError";
|
|
}
|
|
}
|
|
|
|
export function handleActionError(error: unknown): ActionResult<never> {
|
|
if (error instanceof ZodError) {
|
|
return {
|
|
ok: false,
|
|
error: "Validation failed",
|
|
fieldErrors: z.flattenError(error).fieldErrors as Record<
|
|
string,
|
|
string[]
|
|
>,
|
|
};
|
|
}
|
|
if (error instanceof Error && error.name === "ActionError") {
|
|
return { ok: false, error: error.message };
|
|
}
|
|
return foundationHandle(error) as ActionResult<never>;
|
|
}
|