Next.js 15 Update (#26)

* Update Next.js and React versions in all packages
* Replace onRedirect function with next/link in BillingSessionStatus, since it's no longer cached by default
* Remove unused revalidatePath import in billing return page, since it's no longer cached by default
* Add Turbopack module aliases to improve development server speed
* Converted new Dynamic APIs to be Promise-based
* Adjust mobile layout
* Use ENABLE_REACT_COMPILER to enable the React Compiler in Next.js 15
* Report Errors using the new onRequestError hook
This commit is contained in:
Giancarlo Buomprisco
2024-10-22 08:39:21 +02:00
committed by GitHub
parent 93cb011260
commit 5b9285a575
109 changed files with 5143 additions and 5545 deletions

View File

@@ -21,8 +21,8 @@
"@kit/supabase": "workspace:^",
"@kit/tailwind-config": "workspace:*",
"@kit/tsconfig": "workspace:*",
"@supabase/supabase-js": "^2.45.4",
"next": "14.2.13",
"@supabase/supabase-js": "^2.45.6",
"next": "15.0.0",
"zod": "^3.23.8"
},
"eslintConfig": {

View File

@@ -1,6 +1,5 @@
import 'server-only';
import { isRedirectError } from 'next/dist/client/components/redirect';
import { redirect } from 'next/navigation';
import type { User } from '@supabase/supabase-js';
@@ -11,7 +10,7 @@ import { verifyCaptchaToken } from '@kit/auth/captcha/server';
import { requireUser } from '@kit/supabase/require-user';
import { getSupabaseServerClient } from '@kit/supabase/server-client';
import { captureException, zodParseFactory } from '../utils';
import { zodParseFactory } from '../utils';
/**
* @name enhanceAction
@@ -23,7 +22,6 @@ export function enhanceAction<
Config extends {
auth?: boolean;
captcha?: boolean;
captureException?: boolean;
schema?: z.ZodType<
Config['captcha'] extends true ? Args & { captchaToken: string } : Args,
z.ZodTypeDef
@@ -73,28 +71,6 @@ export function enhanceAction<
user = auth.data as UserParam;
}
// capture exceptions if required
const shouldCaptureException = config.captureException ?? true;
// if the action should capture exceptions, wrap the action in a try/catch block
if (shouldCaptureException) {
try {
// pass the data to the action
return await fn(data, user);
} catch (error) {
if (isRedirectError(error)) {
throw error;
}
// capture the exception
await captureException(error);
// re-throw the error
throw error;
}
} else {
// no need to capture exceptions, just pass the data to the action
return fn(data, user);
}
return fn(data, user);
};
}

View File

@@ -1,6 +1,5 @@
import 'server-only';
import { isRedirectError } from 'next/dist/client/components/redirect';
import { redirect } from 'next/navigation';
import { NextRequest, NextResponse } from 'next/server';
@@ -12,12 +11,11 @@ import { verifyCaptchaToken } from '@kit/auth/captcha/server';
import { requireUser } from '@kit/supabase/require-user';
import { getSupabaseServerClient } from '@kit/supabase/server-client';
import { captureException, zodParseFactory } from '../utils';
import { zodParseFactory } from '../utils';
interface Config<Schema> {
auth?: boolean;
captcha?: boolean;
captureException?: boolean;
schema?: Schema;
}
@@ -124,35 +122,12 @@ export const enhanceRouteHandler = <
body = zodParseFactory(params.schema)(json);
}
const shouldCaptureException = params?.captureException ?? true;
if (shouldCaptureException) {
try {
return await handler({
request,
body,
user,
params: routeParams.params,
});
} catch (error) {
if (isRedirectError(error)) {
throw error;
}
// capture the exception
await captureException(error);
throw error;
}
} else {
// all good, call the handler with the request, body and user
return handler({
request,
body,
user,
params: routeParams.params,
});
}
return handler({
request,
body,
user,
params: routeParams.params,
});
};
};

View File

@@ -12,16 +12,3 @@ export const zodParseFactory =
throw new Error(`Invalid data: ${err as string}`);
}
};
export async function captureException(exception: unknown) {
const { getServerMonitoringService } = await import('@kit/monitoring/server');
const service = await getServerMonitoringService();
await service.ready();
const error =
exception instanceof Error ? exception : new Error(exception as string);
return service.captureException(error);
}