From d0a5418f35897ea9fb34e101cccb800eaf45968a Mon Sep 17 00:00:00 2001 From: AprilNEA Date: Wed, 27 Dec 2023 17:45:54 +0800 Subject: [PATCH] fix: crypto.randomUUID is not a function in some browser edge browser case Appliction error: a client-side exception. --- packages/frontend/package.json | 2 ++ .../frontend/src/app/(user-end)/chat/new/page.tsx | 4 +++- packages/frontend/src/utils/client-utils.ts | 10 ++++++++++ pnpm-lock.yaml | 15 +++++++++++++++ 4 files changed, 30 insertions(+), 1 deletion(-) diff --git a/packages/frontend/package.json b/packages/frontend/package.json index 007bce5e..520184f1 100644 --- a/packages/frontend/package.json +++ b/packages/frontend/package.json @@ -37,12 +37,14 @@ "sass": "^1.59.2", "shared": "workspace:*", "swr": "^2.2.4", + "uuid": "^9.0.1", "zustand": "^4.3.6" }, "devDependencies": { "@types/react": "^18.0.28", "@types/react-dom": "^18.0.11", "@types/react-katex": "^3.0.0", + "@types/uuid": "^9.0.7", "autoprefixer": "^10.4.16", "postcss": "^8.4.31", "tailwindcss": "^3.3.5", diff --git a/packages/frontend/src/app/(user-end)/chat/new/page.tsx b/packages/frontend/src/app/(user-end)/chat/new/page.tsx index 9ffa559d..8e9a5a1b 100644 --- a/packages/frontend/src/app/(user-end)/chat/new/page.tsx +++ b/packages/frontend/src/app/(user-end)/chat/new/page.tsx @@ -4,6 +4,8 @@ 移除将会导致在客户端未刷新的情况下 randomUUID 永远相同 */ import { RedirectType, redirect } from 'next/navigation'; +import { randomUUID } from '@/utils/client-utils'; + export default function NewChatPage() { - redirect(`/chat/${crypto.randomUUID()}?new=true`, RedirectType.replace); + redirect(`/chat/${randomUUID()}?new=true`, RedirectType.replace); } diff --git a/packages/frontend/src/utils/client-utils.ts b/packages/frontend/src/utils/client-utils.ts index 0c32315e..8e0bbc8e 100644 --- a/packages/frontend/src/utils/client-utils.ts +++ b/packages/frontend/src/utils/client-utils.ts @@ -1,6 +1,16 @@ +import { v4 as uuidv4 } from 'uuid'; + import { showToast } from '@/components/ui-lib'; import Locale from '@/locales'; +export const randomUUID = () => { + if ('crypto' in window && 'randomUUID' in crypto) { + return crypto.randomUUID(); + } else { + return uuidv4(); + } +}; + export function trimTopic(topic: string) { return topic.replace(/[,。!?、,.!?]*$/, ''); } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3a947acc..ac778713 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -260,6 +260,9 @@ importers: swr: specifier: ^2.2.4 version: 2.2.4(react@18.2.0) + uuid: + specifier: ^9.0.1 + version: 9.0.1 zustand: specifier: ^4.3.6 version: 4.3.6(react@18.2.0) @@ -273,6 +276,9 @@ importers: '@types/react-katex': specifier: ^3.0.0 version: 3.0.0 + '@types/uuid': + specifier: ^9.0.7 + version: 9.0.7 autoprefixer: specifier: ^10.4.16 version: 10.4.16(postcss@8.4.31) @@ -4354,6 +4360,10 @@ packages: resolution: {integrity: sha512-cputDpIbFgLUaGQn6Vqg3/YsJwxUwHLO13v3i5ouxT4lat0khip9AEWxtERujXV9wxIB1EyF97BSJFt6vpdI8g==} dev: false + /@types/uuid@9.0.7: + resolution: {integrity: sha512-WUtIVRUZ9i5dYXefDEAI7sh9/O7jGvHg7Df/5O/gtH3Yabe5odI3UWopVR1qbPXQtvOxWu3mM4XxlYeZtMWF4g==} + dev: true + /@types/yargs-parser@21.0.0: resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==} dev: true @@ -11157,6 +11167,11 @@ packages: hasBin: true dev: false + /uuid@9.0.1: + resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} + hasBin: true + dev: false + /uvu@0.5.6: resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==} engines: {node: '>=8'}