From 59ece446a28da6abfda5a646039fb8f321a3af9a Mon Sep 17 00:00:00 2001
From: Archer <545436317@qq.com>
Date: Sun, 28 Apr 2024 10:27:34 +0800
Subject: [PATCH] fix @node-rs/jieba and window not found (#1313)
* dynamic import
* perf: entry
* fix: jieba package
---
packages/web/common/system/utils.ts | 4 +-
packages/web/hooks/useBeforeunload.ts | 4 +-
packages/web/package.json | 2 +-
pnpm-lock.yaml | 409 +++++++++++++++++-
projects/app/next.config.js | 13 +-
projects/app/package.json | 5 +-
.../components/ChatBox/components/Empty.tsx | 4 +-
projects/app/src/components/Layout/index.tsx | 14 +-
.../support/user/inform/ImportantInform.tsx | 2 +-
.../support/user/inform/SystemMsgModal.tsx | 3 +-
projects/app/src/pages/_app.tsx | 108 +----
.../app/src/pages/chat/components/Empty.tsx | 6 +-
projects/app/src/pages/login/index.tsx | 2 +-
projects/app/src/web/context/ChakraUI.tsx | 22 +
projects/app/src/web/context/QueryClient.tsx | 20 +
projects/app/src/web/context/useInitApp.ts | 81 ++++
16 files changed, 560 insertions(+), 139 deletions(-)
create mode 100644 projects/app/src/web/context/ChakraUI.tsx
create mode 100644 projects/app/src/web/context/QueryClient.tsx
create mode 100644 projects/app/src/web/context/useInitApp.ts
diff --git a/packages/web/common/system/utils.ts b/packages/web/common/system/utils.ts
index a9fef1861..be42ee812 100644
--- a/packages/web/common/system/utils.ts
+++ b/packages/web/common/system/utils.ts
@@ -1,9 +1,7 @@
import FingerprintJS from '@fingerprintjs/fingerprintjs';
-const fpPromise = FingerprintJS.load();
-
export const getUserFingerprint = async () => {
- const fp = await fpPromise;
+ const fp = await FingerprintJS.load();
const result = await fp.get();
console.log(result.visitorId);
};
diff --git a/packages/web/hooks/useBeforeunload.ts b/packages/web/hooks/useBeforeunload.ts
index 4a1df6a00..7edea603b 100644
--- a/packages/web/hooks/useBeforeunload.ts
+++ b/packages/web/hooks/useBeforeunload.ts
@@ -2,9 +2,9 @@ import { useTranslation } from 'next-i18next';
import { useEffect } from 'react';
export const useBeforeunload = (props?: { callback?: () => any; tip?: string }) => {
- const { t } = useTranslation('common');
+ const { t } = useTranslation();
- const { tip = t('Confirm to leave the page'), callback } = props || {};
+ const { tip = t('common.Confirm to leave the page'), callback } = props || {};
useEffect(() => {
const listen =
diff --git a/packages/web/package.json b/packages/web/package.json
index 3623002c8..a3d654b12 100644
--- a/packages/web/package.json
+++ b/packages/web/package.json
@@ -11,7 +11,7 @@
"@emotion/react": "^11.11.1",
"@emotion/styled": "^11.11.0",
"@fastgpt/global": "workspace:*",
- "@fingerprintjs/fingerprintjs": "^4.2.1",
+ "@fingerprintjs/fingerprintjs": "^4.3.0",
"@lexical/react": "0.12.6",
"@lexical/selection": "^0.14.5",
"@lexical/text": "0.12.6",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 9b41d73bc..9ce95b255 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -239,8 +239,8 @@ importers:
specifier: workspace:*
version: link:../global
'@fingerprintjs/fingerprintjs':
- specifier: ^4.2.1
- version: 4.2.1
+ specifier: ^4.3.0
+ version: 4.3.0
'@lexical/react':
specifier: 0.12.6
version: 0.12.6(lexical@0.12.6)(react-dom@18.2.0)(react@18.2.0)(yjs@13.6.14)
@@ -356,12 +356,18 @@ importers:
'@fortaine/fetch-event-source':
specifier: ^3.0.6
version: 3.0.6
+ '@node-rs/jieba':
+ specifier: 1.10.0
+ version: 1.10.0
'@tanstack/react-query':
specifier: ^4.24.10
version: 4.24.10(react-dom@18.2.0)(react@18.2.0)
'@types/nprogress':
specifier: ^0.2.0
version: 0.2.0
+ ahooks:
+ specifier: ^3.7.11
+ version: 3.7.11(react@18.2.0)
axios:
specifier: ^1.5.1
version: 1.5.1
@@ -413,6 +419,9 @@ importers:
next-i18next:
specifier: 15.2.0
version: 15.2.0(i18next@23.10.0)(next@13.5.2)(react-i18next@13.5.0)(react@18.2.0)
+ nextjs-node-loader:
+ specifier: ^1.1.5
+ version: 1.1.5(webpack@5.91.0)
nprogress:
specifier: ^0.2.0
version: 0.2.0
@@ -3366,8 +3375,8 @@ packages:
- supports-color
dev: true
- /@fingerprintjs/fingerprintjs@4.2.1:
- resolution: {integrity: sha512-uW+GVUNTgCXbVPEbgnbf5Aor22e1dyYR0JRwdUiZBaikfxr7KlhV9y0aahA1FB99fEeQVvhCEvTcPIFSYTy9Pw==}
+ /@fingerprintjs/fingerprintjs@4.3.0:
+ resolution: {integrity: sha512-eZYh6XVvMp5iyoT9y+/llGxqoACr01JeBTfy6NAMaQ6K2a3nZmyPKoYv5V89QNN8jUqzgXeTOICClEUtktLdtw==}
dependencies:
tslib: 2.6.2
dev: false
@@ -3413,6 +3422,13 @@ packages:
resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
engines: {node: '>=6.0.0'}
+ /@jridgewell/source-map@0.3.6:
+ resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==}
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.5
+ '@jridgewell/trace-mapping': 0.3.25
+ dev: false
+
/@jridgewell/sourcemap-codec@1.4.15:
resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
@@ -4537,6 +4553,24 @@ packages:
'@types/node': 20.8.5
dev: true
+ /@types/eslint-scope@3.7.7:
+ resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==}
+ dependencies:
+ '@types/eslint': 8.56.10
+ '@types/estree': 1.0.5
+ dev: false
+
+ /@types/eslint@8.56.10:
+ resolution: {integrity: sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==}
+ dependencies:
+ '@types/estree': 1.0.5
+ '@types/json-schema': 7.0.15
+ dev: false
+
+ /@types/estree@1.0.5:
+ resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==}
+ dev: false
+
/@types/express-serve-static-core@4.17.43:
resolution: {integrity: sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg==}
dependencies:
@@ -4589,6 +4623,10 @@ packages:
resolution: {integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==}
dev: true
+ /@types/json-schema@7.0.15:
+ resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
+ dev: false
+
/@types/json5@0.0.29:
resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
dev: true
@@ -4826,11 +4864,125 @@ packages:
eslint-visitor-keys: 3.4.3
dev: true
+ /@webassemblyjs/ast@1.12.1:
+ resolution: {integrity: sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==}
+ dependencies:
+ '@webassemblyjs/helper-numbers': 1.11.6
+ '@webassemblyjs/helper-wasm-bytecode': 1.11.6
+ dev: false
+
+ /@webassemblyjs/floating-point-hex-parser@1.11.6:
+ resolution: {integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==}
+ dev: false
+
+ /@webassemblyjs/helper-api-error@1.11.6:
+ resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==}
+ dev: false
+
+ /@webassemblyjs/helper-buffer@1.12.1:
+ resolution: {integrity: sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==}
+ dev: false
+
+ /@webassemblyjs/helper-numbers@1.11.6:
+ resolution: {integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==}
+ dependencies:
+ '@webassemblyjs/floating-point-hex-parser': 1.11.6
+ '@webassemblyjs/helper-api-error': 1.11.6
+ '@xtuc/long': 4.2.2
+ dev: false
+
+ /@webassemblyjs/helper-wasm-bytecode@1.11.6:
+ resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==}
+ dev: false
+
+ /@webassemblyjs/helper-wasm-section@1.12.1:
+ resolution: {integrity: sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==}
+ dependencies:
+ '@webassemblyjs/ast': 1.12.1
+ '@webassemblyjs/helper-buffer': 1.12.1
+ '@webassemblyjs/helper-wasm-bytecode': 1.11.6
+ '@webassemblyjs/wasm-gen': 1.12.1
+ dev: false
+
+ /@webassemblyjs/ieee754@1.11.6:
+ resolution: {integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==}
+ dependencies:
+ '@xtuc/ieee754': 1.2.0
+ dev: false
+
+ /@webassemblyjs/leb128@1.11.6:
+ resolution: {integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==}
+ dependencies:
+ '@xtuc/long': 4.2.2
+ dev: false
+
+ /@webassemblyjs/utf8@1.11.6:
+ resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==}
+ dev: false
+
+ /@webassemblyjs/wasm-edit@1.12.1:
+ resolution: {integrity: sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==}
+ dependencies:
+ '@webassemblyjs/ast': 1.12.1
+ '@webassemblyjs/helper-buffer': 1.12.1
+ '@webassemblyjs/helper-wasm-bytecode': 1.11.6
+ '@webassemblyjs/helper-wasm-section': 1.12.1
+ '@webassemblyjs/wasm-gen': 1.12.1
+ '@webassemblyjs/wasm-opt': 1.12.1
+ '@webassemblyjs/wasm-parser': 1.12.1
+ '@webassemblyjs/wast-printer': 1.12.1
+ dev: false
+
+ /@webassemblyjs/wasm-gen@1.12.1:
+ resolution: {integrity: sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==}
+ dependencies:
+ '@webassemblyjs/ast': 1.12.1
+ '@webassemblyjs/helper-wasm-bytecode': 1.11.6
+ '@webassemblyjs/ieee754': 1.11.6
+ '@webassemblyjs/leb128': 1.11.6
+ '@webassemblyjs/utf8': 1.11.6
+ dev: false
+
+ /@webassemblyjs/wasm-opt@1.12.1:
+ resolution: {integrity: sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==}
+ dependencies:
+ '@webassemblyjs/ast': 1.12.1
+ '@webassemblyjs/helper-buffer': 1.12.1
+ '@webassemblyjs/wasm-gen': 1.12.1
+ '@webassemblyjs/wasm-parser': 1.12.1
+ dev: false
+
+ /@webassemblyjs/wasm-parser@1.12.1:
+ resolution: {integrity: sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==}
+ dependencies:
+ '@webassemblyjs/ast': 1.12.1
+ '@webassemblyjs/helper-api-error': 1.11.6
+ '@webassemblyjs/helper-wasm-bytecode': 1.11.6
+ '@webassemblyjs/ieee754': 1.11.6
+ '@webassemblyjs/leb128': 1.11.6
+ '@webassemblyjs/utf8': 1.11.6
+ dev: false
+
+ /@webassemblyjs/wast-printer@1.12.1:
+ resolution: {integrity: sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==}
+ dependencies:
+ '@webassemblyjs/ast': 1.12.1
+ '@xtuc/long': 4.2.2
+ dev: false
+
/@xmldom/xmldom@0.8.10:
resolution: {integrity: sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==}
engines: {node: '>=10.0.0'}
dev: false
+ /@xtuc/ieee754@1.2.0:
+ resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==}
+ dev: false
+
+ /@xtuc/long@4.2.2:
+ resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==}
+ dev: false
+
/@zag-js/dom-query@0.16.0:
resolution: {integrity: sha512-Oqhd6+biWyKnhKwFFuZrrf6lxBz2tX2pRQe6grUnYwO6HJ8BcbqZomy2lpOdr+3itlaUqx+Ywj5E5ZZDr/LBfQ==}
dev: false
@@ -4865,6 +5017,14 @@ packages:
negotiator: 0.6.3
dev: false
+ /acorn-import-assertions@1.9.0(acorn@8.11.3):
+ resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==}
+ peerDependencies:
+ acorn: ^8
+ dependencies:
+ acorn: 8.11.3
+ dev: false
+
/acorn-jsx@5.3.2(acorn@8.11.3):
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
peerDependencies:
@@ -4877,7 +5037,6 @@ packages:
resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==}
engines: {node: '>=0.4.0'}
hasBin: true
- dev: true
/agent-base@6.0.2:
resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==}
@@ -4904,6 +5063,24 @@ packages:
indent-string: 4.0.0
dev: true
+ /ahooks@3.7.11(react@18.2.0):
+ resolution: {integrity: sha512-BfSq7HJ9wk/7a2vX7WbLdwzHyQHmbNe21ipX1PfIzssXIzQfAl79WVJ9GjZaqNl4PFPsJusj/Xjg2OF+gIgGaQ==}
+ engines: {node: '>=8.0.0'}
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0
+ dependencies:
+ '@babel/runtime': 7.24.1
+ dayjs: 1.11.7
+ intersection-observer: 0.12.2
+ js-cookie: 2.2.1
+ lodash: 4.17.21
+ react: 18.2.0
+ react-fast-compare: 3.2.2
+ resize-observer-polyfill: 1.5.1
+ screenfull: 5.2.0
+ tslib: 2.6.2
+ dev: false
+
/ajv-draft-04@1.0.0(ajv@8.12.0):
resolution: {integrity: sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==}
peerDependencies:
@@ -4915,6 +5092,14 @@ packages:
ajv: 8.12.0
dev: false
+ /ajv-keywords@3.5.2(ajv@6.12.6):
+ resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==}
+ peerDependencies:
+ ajv: ^6.9.1
+ dependencies:
+ ajv: 6.12.6
+ dev: false
+
/ajv@6.12.6:
resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
dependencies:
@@ -4922,7 +5107,6 @@ packages:
fast-json-stable-stringify: 2.1.0
json-schema-traverse: 0.4.1
uri-js: 4.4.1
- dev: true
/ajv@8.12.0:
resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==}
@@ -5250,6 +5434,10 @@ packages:
/base64-js@1.5.1:
resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+ /big.js@5.2.2:
+ resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==}
+ dev: false
+
/binary-extensions@2.3.0:
resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
engines: {node: '>=8'}
@@ -5600,6 +5788,11 @@ packages:
dev: false
optional: true
+ /chrome-trace-event@1.0.3:
+ resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==}
+ engines: {node: '>=6.0'}
+ dev: false
+
/cipher-base@1.0.4:
resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==}
dependencies:
@@ -6660,6 +6853,11 @@ packages:
resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
dev: true
+ /emojis-list@3.0.0:
+ resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==}
+ engines: {node: '>= 4'}
+ dev: false
+
/encodeurl@1.0.2:
resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==}
engines: {node: '>= 0.8'}
@@ -6683,7 +6881,6 @@ packages:
dependencies:
graceful-fs: 4.2.11
tapable: 2.2.1
- dev: true
/entities@2.2.0:
resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==}
@@ -6780,6 +6977,10 @@ packages:
safe-array-concat: 1.1.2
dev: true
+ /es-module-lexer@1.5.0:
+ resolution: {integrity: sha512-pqrTKmwEIgafsYZAGw9kszYzmagcE/n4dbgwGWLEXg7J4QFJVQRBld8j3Q3GNez79jzxZshq0bcT962QHOghjw==}
+ dev: false
+
/es-object-atoms@1.0.0:
resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==}
engines: {node: '>= 0.4'}
@@ -7256,6 +7457,14 @@ packages:
string.prototype.matchall: 4.0.11
dev: true
+ /eslint-scope@5.1.1:
+ resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==}
+ engines: {node: '>=8.0.0'}
+ dependencies:
+ esrecurse: 4.3.0
+ estraverse: 4.3.0
+ dev: false
+
/eslint-scope@7.2.2:
resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
@@ -7359,12 +7568,15 @@ packages:
engines: {node: '>=4.0'}
dependencies:
estraverse: 5.3.0
- dev: true
+
+ /estraverse@4.3.0:
+ resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==}
+ engines: {node: '>=4.0'}
+ dev: false
/estraverse@5.3.0:
resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
engines: {node: '>=4.0'}
- dev: true
/esutils@2.0.3:
resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
@@ -7384,7 +7596,6 @@ packages:
/events@3.3.0:
resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==}
engines: {node: '>=0.8.x'}
- dev: true
/evp_bytestokey@1.0.3:
resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==}
@@ -7466,7 +7677,6 @@ packages:
/fast-json-stable-stringify@2.1.0:
resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
- dev: true
/fast-levenshtein@2.0.6:
resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
@@ -7850,7 +8060,6 @@ packages:
/has-flag@4.0.0:
resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
engines: {node: '>=8'}
- dev: true
/has-property-descriptors@1.0.2:
resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==}
@@ -8145,6 +8354,10 @@ packages:
engines: {node: '>=12'}
dev: false
+ /intersection-observer@0.12.2:
+ resolution: {integrity: sha512-7m1vEcPCxXYI8HqnL8CKI6siDyD+eIWSwgB3DZA+ZTogxk9I4CDnj4wilt9x/+/QbHI4YG5YZNmC6458/e9Ktg==}
+ dev: false
+
/invariant@2.2.4:
resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==}
dependencies:
@@ -8445,10 +8658,23 @@ packages:
set-function-name: 2.0.2
dev: true
+ /jest-worker@27.5.1:
+ resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==}
+ engines: {node: '>= 10.13.0'}
+ dependencies:
+ '@types/node': 20.8.5
+ merge-stream: 2.0.0
+ supports-color: 8.1.1
+ dev: false
+
/joplin-turndown-plugin-gfm@1.0.12:
resolution: {integrity: sha512-qL4+1iycQjZ1fs8zk3jSRk7cg3ROBUHk7GKtiLAQLFzLPKErnILUvz5DLszSQvz3s1sTjPbywLDISVUtBY6HaA==}
dev: false
+ /js-cookie@2.2.1:
+ resolution: {integrity: sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==}
+ dev: false
+
/js-sdsl@4.4.2:
resolution: {integrity: sha512-dwXFwByc/ajSV6m5bcKAPwe4yDDF6D614pxmIi5odytzxRlwqF6nwoiCek80Ixc7Cvma5awClxrzFtxCQvcM8w==}
dev: true
@@ -8504,7 +8730,6 @@ packages:
/json-schema-traverse@0.4.1:
resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
- dev: true
/json-schema-traverse@1.0.0:
resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==}
@@ -8709,6 +8934,20 @@ packages:
wrap-ansi: 7.0.0
dev: true
+ /loader-runner@4.3.0:
+ resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==}
+ engines: {node: '>=6.11.5'}
+ dev: false
+
+ /loader-utils@2.0.4:
+ resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==}
+ engines: {node: '>=8.9.0'}
+ dependencies:
+ big.js: 5.2.2
+ emojis-list: 3.0.0
+ json5: 2.2.3
+ dev: false
+
/local-pkg@0.4.3:
resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==}
engines: {node: '>=14'}
@@ -9055,7 +9294,6 @@ packages:
/merge-stream@2.0.0:
resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
- dev: true
/merge2@1.4.1:
resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
@@ -9578,6 +9816,10 @@ packages:
engines: {node: '>= 0.6'}
dev: false
+ /neo-async@2.6.2:
+ resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==}
+ dev: false
+
/next-i18next@15.2.0(i18next@23.10.0)(next@13.5.2)(react-i18next@13.5.0)(react@18.2.0):
resolution: {integrity: sha512-Rl5yZ4oGffsB0AjRykZ5PzNQ2M6am54MaMayldGmH/UKZisrIxk2SKEPJvaHhKlWe1qgdNi2FkodwK8sEjfEmg==}
engines: {node: '>=14'}
@@ -9646,6 +9888,16 @@ packages:
next: 13.5.2(@babel/core@7.24.4)(react-dom@18.2.0)(react@18.2.0)(sass@1.58.3)
dev: false
+ /nextjs-node-loader@1.1.5(webpack@5.91.0):
+ resolution: {integrity: sha512-tS2wWPh8QsQHBVNG8w7xzL3ua+OFnmFvcOFxrAQsfK4T017nOiCUrybVWVieilEn1z8CqODcRw1z70mFRPQi1Q==}
+ engines: {node: '>= 10.13.0'}
+ peerDependencies:
+ webpack: ^5.76.0
+ dependencies:
+ loader-utils: 2.0.4
+ webpack: 5.91.0
+ dev: false
+
/node-cron@3.0.3:
resolution: {integrity: sha512-dOal67//nohNgYWb+nWmg5dkFdIwDm8EpeGYMekPMrngV3637lqnX0lbUcCtgibHTz6SEz7DAIjKvKDFYCnO1A==}
engines: {node: '>=6.0.0'}
@@ -10333,7 +10585,6 @@ packages:
resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
dependencies:
safe-buffer: 5.2.1
- dev: true
/randomfill@1.0.4:
resolution: {integrity: sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==}
@@ -10786,6 +11037,10 @@ packages:
engines: {node: '>=0.10.0'}
dev: false
+ /resize-observer-polyfill@1.5.1:
+ resolution: {integrity: sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==}
+ dev: false
+
/resolve-from@4.0.0:
resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
engines: {node: '>=4'}
@@ -10928,6 +11183,20 @@ packages:
dependencies:
loose-envify: 1.4.0
+ /schema-utils@3.3.0:
+ resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==}
+ engines: {node: '>= 10.13.0'}
+ dependencies:
+ '@types/json-schema': 7.0.15
+ ajv: 6.12.6
+ ajv-keywords: 3.5.2(ajv@6.12.6)
+ dev: false
+
+ /screenfull@5.2.0:
+ resolution: {integrity: sha512-9BakfsO2aUQN2K9Fdbj87RJIEZ82Q9IGim7FqM5OsebfoFC6ZHXgDq/KvniuLTPdeM8wY2o6Dj3WQ7KeQCj3cA==}
+ engines: {node: '>=0.10.0'}
+ dev: false
+
/seek-bzip@1.0.6:
resolution: {integrity: sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==}
hasBin: true
@@ -10967,6 +11236,12 @@ packages:
- supports-color
dev: false
+ /serialize-javascript@6.0.2:
+ resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==}
+ dependencies:
+ randombytes: 2.1.0
+ dev: false
+
/serve-static@1.15.0:
resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==}
engines: {node: '>= 0.8.0'}
@@ -11110,6 +11385,13 @@ packages:
resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==}
engines: {node: '>=0.10.0'}
+ /source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+ dev: false
+
/source-map@0.5.7:
resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==}
engines: {node: '>=0.10.0'}
@@ -11118,7 +11400,6 @@ packages:
/source-map@0.6.1:
resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
engines: {node: '>=0.10.0'}
- dev: true
/space-separated-tokens@1.1.5:
resolution: {integrity: sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==}
@@ -11349,6 +11630,13 @@ packages:
has-flag: 4.0.0
dev: true
+ /supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+ dependencies:
+ has-flag: 4.0.0
+ dev: false
+
/supports-preserve-symlinks-flag@1.0.0:
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
engines: {node: '>= 0.4'}
@@ -11374,7 +11662,6 @@ packages:
/tapable@2.2.1:
resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==}
engines: {node: '>=6'}
- dev: true
/tar-stream@1.6.2:
resolution: {integrity: sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==}
@@ -11402,6 +11689,41 @@ packages:
dev: false
optional: true
+ /terser-webpack-plugin@5.3.10(webpack@5.91.0):
+ resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==}
+ engines: {node: '>= 10.13.0'}
+ peerDependencies:
+ '@swc/core': '*'
+ esbuild: '*'
+ uglify-js: '*'
+ webpack: ^5.1.0
+ peerDependenciesMeta:
+ '@swc/core':
+ optional: true
+ esbuild:
+ optional: true
+ uglify-js:
+ optional: true
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.25
+ jest-worker: 27.5.1
+ schema-utils: 3.3.0
+ serialize-javascript: 6.0.2
+ terser: 5.30.4
+ webpack: 5.91.0
+ dev: false
+
+ /terser@5.30.4:
+ resolution: {integrity: sha512-xRdd0v64a8mFK9bnsKVdoNP9GQIKUAaJPTaqEQDL4w/J8WaW4sWXXoMZ+6SimPkfT5bElreXf8m9HnmPc3E1BQ==}
+ engines: {node: '>=10'}
+ hasBin: true
+ dependencies:
+ '@jridgewell/source-map': 0.3.6
+ acorn: 8.11.3
+ commander: 2.20.3
+ source-map-support: 0.5.21
+ dev: false
+
/text-table@0.2.0:
resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
dev: true
@@ -12039,6 +12361,14 @@ packages:
glob-to-regexp: 0.4.1
graceful-fs: 4.2.11
+ /watchpack@2.4.1:
+ resolution: {integrity: sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==}
+ engines: {node: '>=10.13.0'}
+ dependencies:
+ glob-to-regexp: 0.4.1
+ graceful-fs: 4.2.11
+ dev: false
+
/web-namespaces@2.0.1:
resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==}
dev: false
@@ -12066,6 +12396,51 @@ packages:
engines: {node: '>=12'}
dev: false
+ /webpack-sources@3.2.3:
+ resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==}
+ engines: {node: '>=10.13.0'}
+ dev: false
+
+ /webpack@5.91.0:
+ resolution: {integrity: sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw==}
+ engines: {node: '>=10.13.0'}
+ hasBin: true
+ peerDependencies:
+ webpack-cli: '*'
+ peerDependenciesMeta:
+ webpack-cli:
+ optional: true
+ dependencies:
+ '@types/eslint-scope': 3.7.7
+ '@types/estree': 1.0.5
+ '@webassemblyjs/ast': 1.12.1
+ '@webassemblyjs/wasm-edit': 1.12.1
+ '@webassemblyjs/wasm-parser': 1.12.1
+ acorn: 8.11.3
+ acorn-import-assertions: 1.9.0(acorn@8.11.3)
+ browserslist: 4.23.0
+ chrome-trace-event: 1.0.3
+ enhanced-resolve: 5.16.0
+ es-module-lexer: 1.5.0
+ eslint-scope: 5.1.1
+ events: 3.3.0
+ glob-to-regexp: 0.4.1
+ graceful-fs: 4.2.11
+ json-parse-even-better-errors: 2.3.1
+ loader-runner: 4.3.0
+ mime-types: 2.1.35
+ neo-async: 2.6.2
+ schema-utils: 3.3.0
+ tapable: 2.2.1
+ terser-webpack-plugin: 5.3.10(webpack@5.91.0)
+ watchpack: 2.4.1
+ webpack-sources: 3.2.3
+ transitivePeerDependencies:
+ - '@swc/core'
+ - esbuild
+ - uglify-js
+ dev: false
+
/whatwg-url@11.0.0:
resolution: {integrity: sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==}
engines: {node: '>=12'}
diff --git a/projects/app/next.config.js b/projects/app/next.config.js
index d94f87400..6a0b0dcfb 100644
--- a/projects/app/next.config.js
+++ b/projects/app/next.config.js
@@ -7,7 +7,7 @@ const nextConfig = {
output: 'standalone',
reactStrictMode: process.env.NODE_ENV === 'development' ? false : true,
compress: true,
- webpack(config, { isServer }) {
+ webpack(config, { isServer, nextRuntime }) {
Object.assign(config.resolve.alias, {
'@mongodb-js/zstd': false,
'@aws-sdk/credential-providers': false,
@@ -26,6 +26,10 @@ const nextConfig = {
test: /\.svg$/i,
issuer: /\.[jt]sx?$/,
use: ['@svgr/webpack']
+ },
+ {
+ test: /\.node$/,
+ use: [{ loader: 'nextjs-node-loader' }]
}
]),
exprContextCritical: false,
@@ -33,11 +37,9 @@ const nextConfig = {
};
if (isServer) {
- config.externals.push('isolated-vm');
config.externals.push('worker_threads');
- config.externals.push('@node-rs/jieba');
- if (config.name === 'server') {
+ if (nextRuntime === 'nodejs') {
// config.output.globalObject = 'self';
const oldEntry = config.entry;
@@ -76,7 +78,10 @@ const nextConfig = {
},
transpilePackages: ['@fastgpt/*'],
experimental: {
+ // 外部包独立打包
serverComponentsExternalPackages: ['mongoose', 'pg'],
+ // 指定导出包优化,按需引入包模块
+ optimizePackageImports: ['mongoose', 'pg'],
outputFileTracingRoot: path.join(__dirname, '../../')
}
};
diff --git a/projects/app/package.json b/projects/app/package.json
index 093cf16f3..f893f60dc 100644
--- a/projects/app/package.json
+++ b/projects/app/package.json
@@ -25,6 +25,7 @@
"@fortaine/fetch-event-source": "^3.0.6",
"@tanstack/react-query": "^4.24.10",
"@types/nprogress": "^0.2.0",
+ "ahooks": "^3.7.11",
"axios": "^1.5.1",
"date-fns": "2.30.0",
"dayjs": "^1.11.7",
@@ -57,7 +58,9 @@
"remark-math": "^5.1.1",
"request-ip": "^3.3.0",
"sass": "^1.58.3",
- "zustand": "^4.3.5"
+ "zustand": "^4.3.5",
+ "nextjs-node-loader": "^1.1.5",
+ "@node-rs/jieba": "1.10.0"
},
"devDependencies": {
"@svgr/webpack": "^6.5.1",
diff --git a/projects/app/src/components/ChatBox/components/Empty.tsx b/projects/app/src/components/ChatBox/components/Empty.tsx
index 31b69d9f9..af3f91066 100644
--- a/projects/app/src/components/ChatBox/components/Empty.tsx
+++ b/projects/app/src/components/ChatBox/components/Empty.tsx
@@ -1,8 +1,10 @@
-import Markdown from '@/components/Markdown';
import { useMarkdown } from '@/web/common/hooks/useMarkdown';
import { Box, Card } from '@chakra-ui/react';
import React from 'react';
+import dynamic from 'next/dynamic';
+const Markdown = dynamic(() => import('@/components/Markdown'), { ssr: false });
+
const Empty = () => {
const { data: chatProblem } = useMarkdown({ url: '/chatProblem.md' });
const { data: versionIntro } = useMarkdown({ url: '/versionIntro.md' });
diff --git a/projects/app/src/components/Layout/index.tsx b/projects/app/src/components/Layout/index.tsx
index 2e578faaf..75b81a438 100644
--- a/projects/app/src/components/Layout/index.tsx
+++ b/projects/app/src/components/Layout/index.tsx
@@ -10,6 +10,7 @@ import { getUnreadCount } from '@/web/support/user/inform/api';
import dynamic from 'next/dynamic';
import Auth from './auth';
+
const Navbar = dynamic(() => import('./navbar'));
const NavbarPhone = dynamic(() => import('./navbarPhone'));
const UpdateInviteModal = dynamic(() => import('@/components/support/user/team/UpdateInviteModal'));
@@ -112,14 +113,13 @@ const Layout = ({ children }: { children: JSX.Element }) => {
>
)}
-
- {!!userInfo && }
- {isNotSufficientModal && !isHideNavbar && }
- {!!userInfo && }
- {!!userInfo && importantInforms.length > 0 && (
-
- )}
+ {!!userInfo && }
+ {isNotSufficientModal && !isHideNavbar && }
+ {!!userInfo && }
+ {!!userInfo && importantInforms.length > 0 && (
+
+ )}
>
);
diff --git a/projects/app/src/components/support/user/inform/ImportantInform.tsx b/projects/app/src/components/support/user/inform/ImportantInform.tsx
index a3dfb67d8..67cfb7ecd 100644
--- a/projects/app/src/components/support/user/inform/ImportantInform.tsx
+++ b/projects/app/src/components/support/user/inform/ImportantInform.tsx
@@ -60,4 +60,4 @@ const ImportantInform = ({
);
};
-export default ImportantInform;
+export default React.memo(ImportantInform);
diff --git a/projects/app/src/components/support/user/inform/SystemMsgModal.tsx b/projects/app/src/components/support/user/inform/SystemMsgModal.tsx
index 79223988d..6d6cad371 100644
--- a/projects/app/src/components/support/user/inform/SystemMsgModal.tsx
+++ b/projects/app/src/components/support/user/inform/SystemMsgModal.tsx
@@ -6,7 +6,8 @@ import { Button, ModalBody, ModalFooter, useDisclosure } from '@chakra-ui/react'
import { useTranslation } from 'next-i18next';
import { LOGO_ICON } from '@fastgpt/global/common/system/constants';
import { getSystemMsgModalData } from '@/web/support/user/inform/api';
-import Markdown from '@/components/Markdown';
+import dynamic from 'next/dynamic';
+const Markdown = dynamic(() => import('@/components/Markdown'), { ssr: false });
const SystemMsgModal = ({}: {}) => {
const { t } = useTranslation();
diff --git a/projects/app/src/pages/_app.tsx b/projects/app/src/pages/_app.tsx
index f57094cb5..a198bb132 100644
--- a/projects/app/src/pages/_app.tsx
+++ b/projects/app/src/pages/_app.tsx
@@ -1,103 +1,17 @@
-import { useEffect, useState } from 'react';
import type { AppProps } from 'next/app';
import Script from 'next/script';
import Head from 'next/head';
-import { ChakraProvider, ColorModeScript } from '@chakra-ui/react';
import Layout from '@/components/Layout';
-import { theme } from '@fastgpt/web/styles/theme';
-import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
-import NProgress from 'nprogress'; //nprogress module
-import Router from 'next/router';
-import { clientInitData } from '@/web/common/system/staticData';
-import { appWithTranslation, useTranslation } from 'next-i18next';
-import { useRouter } from 'next/router';
-import { useSystemStore } from '@/web/common/system/useSystemStore';
-import type { FastGPTFeConfigsType } from '@fastgpt/global/common/system/types/index.d';
-import { change2DefaultLng, setLngStore } from '@/web/common/utils/i18n';
+import { appWithTranslation } from 'next-i18next';
+
+import QueryClientContext from '@/web/context/QueryClient';
+import ChakraUIContext from '@/web/context/ChakraUI';
+import { useInitApp } from '@/web/context/useInitApp';
-import 'nprogress/nprogress.css';
import '@/web/styles/reset.scss';
-//Binding events.
-Router.events.on('routeChangeStart', () => NProgress.start());
-Router.events.on('routeChangeComplete', () => NProgress.done());
-Router.events.on('routeChangeError', () => NProgress.done());
-
-// Create a client
-const queryClient = new QueryClient({
- defaultOptions: {
- queries: {
- keepPreviousData: true,
- refetchOnWindowFocus: false,
- retry: false,
- cacheTime: 10
- }
- }
-});
-
function App({ Component, pageProps }: AppProps) {
- const router = useRouter();
- const { hiId } = router.query as { hiId?: string };
- const { i18n } = useTranslation();
- const { loadGitStar, setInitd, feConfigs } = useSystemStore();
- const [scripts, setScripts] = useState([]);
- const [title, setTitle] = useState(process.env.SYSTEM_NAME || 'AI');
-
- useEffect(() => {
- // get init data
- (async () => {
- const {
- feConfigs: { scripts, isPlus, show_git, systemTitle }
- } = await clientInitData();
-
- setTitle(systemTitle || 'FastGPT');
-
- // log fastgpt
- if (!isPlus) {
- console.log(
- '%cWelcome to FastGPT',
- 'font-family:Arial; color:#3370ff ; font-size:18px; font-weight:bold;',
- `GitHub:https://github.com/labring/FastGPT`
- );
- }
- if (show_git) {
- loadGitStar();
- }
-
- setScripts(scripts || []);
- setInitd();
- })();
-
- // add window error track
- window.onerror = function (msg, url) {
- window.umami?.track('windowError', {
- device: {
- userAgent: navigator.userAgent,
- platform: navigator.platform,
- appName: navigator.appName
- },
- msg,
- url
- });
- };
-
- return () => {
- window.onerror = null;
- };
- }, []);
-
- useEffect(() => {
- // get default language
- const targetLng = change2DefaultLng(i18n.language);
- if (targetLng) {
- setLngStore(targetLng);
- router.replace(router.asPath, undefined, { locale: targetLng });
- }
- }, []);
-
- useEffect(() => {
- hiId && localStorage.setItem('inviterId', hiId);
- }, [hiId]);
+ const { feConfigs, scripts, title } = useInitApp();
return (
<>
@@ -115,17 +29,15 @@ function App({ Component, pageProps }: AppProps) {
{scripts?.map((item, i) => )}
-
-
-
+
+
-
-
+
+
>
);
}
-// @ts-ignore
export default appWithTranslation(App);
diff --git a/projects/app/src/pages/chat/components/Empty.tsx b/projects/app/src/pages/chat/components/Empty.tsx
index 6f547125f..b0e67b2fc 100644
--- a/projects/app/src/pages/chat/components/Empty.tsx
+++ b/projects/app/src/pages/chat/components/Empty.tsx
@@ -1,8 +1,10 @@
import React from 'react';
import { Card, Box, Flex } from '@chakra-ui/react';
import { useMarkdown } from '@/web/common/hooks/useMarkdown';
-import Markdown from '@/components/Markdown';
-import Avatar from '@/components/Avatar';
+
+import dynamic from 'next/dynamic';
+const Markdown = dynamic(() => import('@/components/Markdown'));
+const Avatar = dynamic(() => import('@/components/Avatar'));
const Empty = ({
showChatProblem,
diff --git a/projects/app/src/pages/login/index.tsx b/projects/app/src/pages/login/index.tsx
index eba704fc8..bc76c1f0a 100644
--- a/projects/app/src/pages/login/index.tsx
+++ b/projects/app/src/pages/login/index.tsx
@@ -10,13 +10,13 @@ import LoginForm from './components/LoginForm/LoginForm';
import dynamic from 'next/dynamic';
import { serviceSideProps } from '@/web/common/utils/i18n';
import { clearToken, setToken } from '@/web/support/user/auth';
-import CommunityModal from '@/components/CommunityModal';
import Script from 'next/script';
import Loading from '@fastgpt/web/components/common/MyLoading';
const RegisterForm = dynamic(() => import('./components/RegisterForm'));
const ForgetPasswordForm = dynamic(() => import('./components/ForgetPasswordForm'));
const WechatForm = dynamic(() => import('./components/LoginForm/WechatForm'));
+const CommunityModal = dynamic(() => import('@/components/CommunityModal'));
const Login = () => {
const router = useRouter();
diff --git a/projects/app/src/web/context/ChakraUI.tsx b/projects/app/src/web/context/ChakraUI.tsx
new file mode 100644
index 000000000..fbe921ad7
--- /dev/null
+++ b/projects/app/src/web/context/ChakraUI.tsx
@@ -0,0 +1,22 @@
+import { ChakraProvider, ColorModeScript } from '@chakra-ui/react';
+import { theme } from '@fastgpt/web/styles/theme';
+import { Router } from 'next/router';
+import { ReactNode } from 'react';
+import NProgress from 'nprogress'; //nprogress module
+
+import 'nprogress/nprogress.css';
+
+Router.events.on('routeChangeStart', () => NProgress.start());
+Router.events.on('routeChangeComplete', () => NProgress.done());
+Router.events.on('routeChangeError', () => NProgress.done());
+
+export const ChakraUIContext = ({ children }: { children: ReactNode }) => {
+ return (
+
+
+ {children}
+
+ );
+};
+
+export default ChakraUIContext;
diff --git a/projects/app/src/web/context/QueryClient.tsx b/projects/app/src/web/context/QueryClient.tsx
new file mode 100644
index 000000000..3e0e5299f
--- /dev/null
+++ b/projects/app/src/web/context/QueryClient.tsx
@@ -0,0 +1,20 @@
+import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
+import { ReactNode } from 'react';
+
+// Create a client
+const queryClient = new QueryClient({
+ defaultOptions: {
+ queries: {
+ keepPreviousData: true,
+ refetchOnWindowFocus: false,
+ retry: false,
+ cacheTime: 10
+ }
+ }
+});
+
+const QueryClientContext = ({ children }: { children: ReactNode }) => {
+ return {children};
+};
+
+export default QueryClientContext;
diff --git a/projects/app/src/web/context/useInitApp.ts b/projects/app/src/web/context/useInitApp.ts
new file mode 100644
index 000000000..20d7ffbd0
--- /dev/null
+++ b/projects/app/src/web/context/useInitApp.ts
@@ -0,0 +1,81 @@
+import { useCallback, useEffect, useState } from 'react';
+import { clientInitData } from '@/web/common/system/staticData';
+import { useTranslation } from 'next-i18next';
+import { useRouter } from 'next/router';
+import { useSystemStore } from '@/web/common/system/useSystemStore';
+import type { FastGPTFeConfigsType } from '@fastgpt/global/common/system/types/index.d';
+import { change2DefaultLng, setLngStore } from '@/web/common/utils/i18n';
+
+export const useInitApp = () => {
+ const router = useRouter();
+ const { hiId } = router.query as { hiId?: string };
+ const { i18n } = useTranslation();
+ const { loadGitStar, setInitd, feConfigs } = useSystemStore();
+ const [scripts, setScripts] = useState([]);
+ const [title, setTitle] = useState(process.env.SYSTEM_NAME || 'AI');
+
+ const initFetch = useCallback(async () => {
+ const {
+ feConfigs: { scripts, isPlus, show_git, systemTitle }
+ } = await clientInitData();
+
+ setTitle(systemTitle || 'FastGPT');
+
+ // log fastgpt
+ if (!isPlus) {
+ console.log(
+ '%cWelcome to FastGPT',
+ 'font-family:Arial; color:#3370ff ; font-size:18px; font-weight:bold;',
+ `GitHub:https://github.com/labring/FastGPT`
+ );
+ }
+ if (show_git) {
+ loadGitStar();
+ }
+
+ setScripts(scripts || []);
+ setInitd();
+ }, [loadGitStar, setInitd]);
+
+ const initUserLanguage = useCallback(() => {
+ // get default language
+ const targetLng = change2DefaultLng(i18n.language);
+ if (targetLng) {
+ setLngStore(targetLng);
+ router.replace(router.asPath, undefined, { locale: targetLng });
+ }
+ }, []);
+
+ useEffect(() => {
+ initFetch();
+ initUserLanguage();
+
+ const errorTrack = (event: ErrorEvent) => {
+ window.umami?.track('windowError', {
+ device: {
+ userAgent: navigator.userAgent,
+ platform: navigator.platform,
+ appName: navigator.appName
+ },
+ error: event,
+ url: location.href
+ });
+ };
+ // add window error track
+ window.addEventListener('error', errorTrack);
+
+ return () => {
+ window.removeEventListener('error', errorTrack);
+ };
+ }, []);
+
+ useEffect(() => {
+ hiId && localStorage.setItem('inviterId', hiId);
+ }, [hiId]);
+
+ return {
+ feConfigs,
+ scripts,
+ title
+ };
+};