Refactor error payload logic

This commit is contained in:
2025-06-10 00:27:54 +02:00
parent ef8601dd72
commit adea8ae6b7
3 changed files with 39 additions and 11 deletions

View File

@ -3,6 +3,7 @@
import { PrismaClient } from '@prisma/client';
import { PrismaD1 } from '@prisma/adapter-d1';
import { formatError } from './utils/error';
export interface Env {
DB: D1Database;
@ -209,17 +210,7 @@ export default {
} catch (error) {
console.error('Worker error:', error);
const payload: Record<string, unknown> = {
error: 'Internal Server Error',
message: error instanceof Error ? error.message : 'Unknown error'
};
if (
typeof process !== 'undefined' &&
process.env?.NODE_ENV !== 'production'
) {
payload.stack = error instanceof Error ? error.stack : undefined;
}
return new Response(JSON.stringify(payload), {
return new Response(JSON.stringify(formatError(error)), {
status: 500,
headers: {
'Content-Type': 'application/json',
@ -229,3 +220,4 @@ export default {
}
},
};

13
src/utils/error.ts Normal file
View File

@ -0,0 +1,13 @@
export function formatError(error: unknown): Record<string, unknown> {
const payload: Record<string, unknown> = {
error: 'Internal Server Error',
message: error instanceof Error ? error.message : 'Unknown error'
};
if (
typeof process !== 'undefined' &&
process.env?.NODE_ENV !== 'production'
) {
payload.stack = error instanceof Error ? error.stack : undefined;
}
return payload;
}

23
tests/formatError.test.ts Normal file
View File

@ -0,0 +1,23 @@
import { test } from 'node:test';
import assert from 'node:assert';
import { formatError } from '../src/utils/error';
const originalEnv = process.env.NODE_ENV;
test('includes stack when not in production', () => {
delete process.env.NODE_ENV;
const err = new Error('boom');
const payload = formatError(err);
assert.ok('stack' in payload);
});
test('omits stack in production', () => {
process.env.NODE_ENV = 'production';
const err = new Error('boom');
const payload = formatError(err);
assert.ok(!('stack' in payload));
});
test.after(() => {
if (originalEnv === undefined) delete process.env.NODE_ENV; else process.env.NODE_ENV = originalEnv;
});