chore: integrate @tanstack/eslint-plugin-query and fix service layer lint errors (#30444)

This commit is contained in:
yyh
2026-01-04 11:20:06 +08:00
committed by GitHub
parent 815ae6c754
commit 822374eca5
11 changed files with 44 additions and 25 deletions

View File

@@ -110,7 +110,7 @@ const GotoAnything: FC<Props> = ({
isWorkflowPage, isWorkflowPage,
isRagPipelinePage, isRagPipelinePage,
defaultLocale, defaultLocale,
Object.keys(Actions).sort().join(','), Actions,
], ],
queryFn: async () => { queryFn: async () => {
const query = searchQueryDebouncedValue.toLowerCase() const query = searchQueryDebouncedValue.toLowerCase()

View File

@@ -1,5 +1,6 @@
// @ts-check // @ts-check
import antfu from '@antfu/eslint-config' import antfu from '@antfu/eslint-config'
import pluginQuery from '@tanstack/eslint-plugin-query'
import sonar from 'eslint-plugin-sonarjs' import sonar from 'eslint-plugin-sonarjs'
import storybook from 'eslint-plugin-storybook' import storybook from 'eslint-plugin-storybook'
import tailwind from 'eslint-plugin-tailwindcss' import tailwind from 'eslint-plugin-tailwindcss'
@@ -79,6 +80,7 @@ export default antfu(
}, },
}, },
storybook.configs['flat/recommended'], storybook.configs['flat/recommended'],
...pluginQuery.configs['flat/recommended'],
// sonar // sonar
{ {
rules: { rules: {

View File

@@ -165,6 +165,7 @@
"@storybook/addon-themes": "9.1.13", "@storybook/addon-themes": "9.1.13",
"@storybook/nextjs": "9.1.13", "@storybook/nextjs": "9.1.13",
"@storybook/react": "9.1.13", "@storybook/react": "9.1.13",
"@tanstack/eslint-plugin-query": "^5.91.2",
"@tanstack/react-devtools": "^0.9.0", "@tanstack/react-devtools": "^0.9.0",
"@tanstack/react-form-devtools": "^0.2.9", "@tanstack/react-form-devtools": "^0.2.9",
"@tanstack/react-query-devtools": "^5.90.2", "@tanstack/react-query-devtools": "^5.90.2",

30
web/pnpm-lock.yaml generated
View File

@@ -406,6 +406,9 @@ importers:
'@storybook/react': '@storybook/react':
specifier: 9.1.13 specifier: 9.1.13
version: 9.1.13(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@9.1.17(@testing-library/dom@10.4.1)(vite@7.3.0(@types/node@18.15.0)(jiti@1.21.7)(sass@1.95.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(typescript@5.9.3) version: 9.1.13(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@9.1.17(@testing-library/dom@10.4.1)(vite@7.3.0(@types/node@18.15.0)(jiti@1.21.7)(sass@1.95.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(typescript@5.9.3)
'@tanstack/eslint-plugin-query':
specifier: ^5.91.2
version: 5.91.2(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3)
'@tanstack/react-devtools': '@tanstack/react-devtools':
specifier: ^0.9.0 specifier: ^0.9.0
version: 0.9.0(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(csstype@3.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(solid-js@1.9.10) version: 0.9.0(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(csstype@3.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(solid-js@1.9.10)
@@ -3387,6 +3390,11 @@ packages:
peerDependencies: peerDependencies:
solid-js: '>=1.9.7' solid-js: '>=1.9.7'
'@tanstack/eslint-plugin-query@5.91.2':
resolution: {integrity: sha512-UPeWKl/Acu1IuuHJlsN+eITUHqAaa9/04geHHPedY8siVarSaWprY0SVMKrkpKfk5ehRT7+/MZ5QwWuEtkWrFw==}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
'@tanstack/form-core@1.27.1': '@tanstack/form-core@1.27.1':
resolution: {integrity: sha512-hPM+0tUnZ2C2zb2TE1lar1JJ0S0cbnQHlUwFcCnVBpMV3rjtUzkoM766gUpWrlmTGCzNad0GbJ0aTxVsjT6J8g==} resolution: {integrity: sha512-hPM+0tUnZ2C2zb2TE1lar1JJ0S0cbnQHlUwFcCnVBpMV3rjtUzkoM766gUpWrlmTGCzNad0GbJ0aTxVsjT6J8g==}
@@ -10130,7 +10138,7 @@ snapshots:
'@es-joy/jsdoccomment@0.76.0': '@es-joy/jsdoccomment@0.76.0':
dependencies: dependencies:
'@types/estree': 1.0.8 '@types/estree': 1.0.8
'@typescript-eslint/types': 8.50.0 '@typescript-eslint/types': 8.50.1
comment-parser: 1.4.1 comment-parser: 1.4.1
esquery: 1.6.0 esquery: 1.6.0
jsdoc-type-pratt-parser: 6.10.0 jsdoc-type-pratt-parser: 6.10.0
@@ -10138,7 +10146,7 @@ snapshots:
'@es-joy/jsdoccomment@0.78.0': '@es-joy/jsdoccomment@0.78.0':
dependencies: dependencies:
'@types/estree': 1.0.8 '@types/estree': 1.0.8
'@typescript-eslint/types': 8.50.0 '@typescript-eslint/types': 8.50.1
comment-parser: 1.4.1 comment-parser: 1.4.1
esquery: 1.6.0 esquery: 1.6.0
jsdoc-type-pratt-parser: 7.0.0 jsdoc-type-pratt-parser: 7.0.0
@@ -11957,7 +11965,7 @@ snapshots:
'@stylistic/eslint-plugin@5.6.1(eslint@9.39.2(jiti@1.21.7))': '@stylistic/eslint-plugin@5.6.1(eslint@9.39.2(jiti@1.21.7))':
dependencies: dependencies:
'@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2(jiti@1.21.7)) '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2(jiti@1.21.7))
'@typescript-eslint/types': 8.49.0 '@typescript-eslint/types': 8.50.1
eslint: 9.39.2(jiti@1.21.7) eslint: 9.39.2(jiti@1.21.7)
eslint-visitor-keys: 4.2.1 eslint-visitor-keys: 4.2.1
espree: 10.4.0 espree: 10.4.0
@@ -12039,6 +12047,14 @@ snapshots:
- csstype - csstype
- utf-8-validate - utf-8-validate
'@tanstack/eslint-plugin-query@5.91.2(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3)':
dependencies:
'@typescript-eslint/utils': 8.50.1(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3)
eslint: 9.39.2(jiti@1.21.7)
transitivePeerDependencies:
- supports-color
- typescript
'@tanstack/form-core@1.27.1': '@tanstack/form-core@1.27.1':
dependencies: dependencies:
'@tanstack/devtools-event-client': 0.3.5 '@tanstack/devtools-event-client': 0.3.5
@@ -12512,8 +12528,8 @@ snapshots:
'@typescript-eslint/project-service@8.50.0(typescript@5.9.3)': '@typescript-eslint/project-service@8.50.0(typescript@5.9.3)':
dependencies: dependencies:
'@typescript-eslint/tsconfig-utils': 8.50.0(typescript@5.9.3) '@typescript-eslint/tsconfig-utils': 8.50.1(typescript@5.9.3)
'@typescript-eslint/types': 8.50.0 '@typescript-eslint/types': 8.50.1
debug: 4.4.3 debug: 4.4.3
typescript: 5.9.3 typescript: 5.9.3
transitivePeerDependencies: transitivePeerDependencies:
@@ -12742,7 +12758,7 @@ snapshots:
'@vitest/eslint-plugin@1.6.1(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3)(vitest@4.0.16(@types/node@18.15.0)(happy-dom@20.0.11)(jiti@1.21.7)(jsdom@27.3.0(canvas@3.2.0))(sass@1.95.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))': '@vitest/eslint-plugin@1.6.1(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3)(vitest@4.0.16(@types/node@18.15.0)(happy-dom@20.0.11)(jiti@1.21.7)(jsdom@27.3.0(canvas@3.2.0))(sass@1.95.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))':
dependencies: dependencies:
'@typescript-eslint/scope-manager': 8.49.0 '@typescript-eslint/scope-manager': 8.50.1
'@typescript-eslint/utils': 8.50.1(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) '@typescript-eslint/utils': 8.50.1(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3)
eslint: 9.39.2(jiti@1.21.7) eslint: 9.39.2(jiti@1.21.7)
optionalDependencies: optionalDependencies:
@@ -14240,7 +14256,7 @@ snapshots:
eslint-plugin-perfectionist@4.15.1(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3): eslint-plugin-perfectionist@4.15.1(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3):
dependencies: dependencies:
'@typescript-eslint/types': 8.49.0 '@typescript-eslint/types': 8.50.1
'@typescript-eslint/utils': 8.50.1(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) '@typescript-eslint/utils': 8.50.1(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3)
eslint: 9.39.2(jiti@1.21.7) eslint: 9.39.2(jiti@1.21.7)
natural-orderby: 5.0.0 natural-orderby: 5.0.0

View File

@@ -73,7 +73,7 @@ export const useUpdateAccessMode = () => {
export const useGetUserCanAccessApp = ({ appId, isInstalledApp = true, enabled }: { appId?: string, isInstalledApp?: boolean, enabled?: boolean }) => { export const useGetUserCanAccessApp = ({ appId, isInstalledApp = true, enabled }: { appId?: string, isInstalledApp?: boolean, enabled?: boolean }) => {
const systemFeatures = useGlobalPublicStore(s => s.systemFeatures) const systemFeatures = useGlobalPublicStore(s => s.systemFeatures)
return useQuery({ return useQuery({
queryKey: [NAME_SPACE, 'user-can-access-app', appId], queryKey: [NAME_SPACE, 'user-can-access-app', appId, systemFeatures.webapp_auth.enabled, isInstalledApp],
queryFn: () => { queryFn: () => {
if (systemFeatures.webapp_auth.enabled) if (systemFeatures.webapp_auth.enabled)
return getUserCanAccess(appId!, isInstalledApp) return getUserCanAccess(appId!, isInstalledApp)

View File

@@ -38,7 +38,7 @@ export const useDocumentList = (payload: {
if (normalizedStatus && normalizedStatus !== 'all') if (normalizedStatus && normalizedStatus !== 'all')
params.status = normalizedStatus params.status = normalizedStatus
return useQuery<DocumentListResponse>({ return useQuery<DocumentListResponse>({
queryKey: [...useDocumentListKey, datasetId, keyword, page, limit, sort, normalizedStatus], queryKey: [...useDocumentListKey, datasetId, params],
queryFn: () => get<DocumentListResponse>(`/datasets/${datasetId}/documents`, { queryFn: () => get<DocumentListResponse>(`/datasets/${datasetId}/documents`, {
params, params,
}), }),
@@ -123,7 +123,7 @@ export const useDocumentDetail = (payload: {
}) => { }) => {
const { datasetId, documentId, params } = payload const { datasetId, documentId, params } = payload
return useQuery<DocumentDetailResponse>({ return useQuery<DocumentDetailResponse>({
queryKey: [...useDocumentDetailKey, 'withoutMetaData', datasetId, documentId], queryKey: [...useDocumentDetailKey, 'withoutMetaData', datasetId, documentId, params],
queryFn: () => get<DocumentDetailResponse>(`/datasets/${datasetId}/documents/${documentId}`, { params }), queryFn: () => get<DocumentDetailResponse>(`/datasets/${datasetId}/documents/${documentId}`, { params }),
}) })
} }
@@ -135,7 +135,7 @@ export const useDocumentMetadata = (payload: {
}) => { }) => {
const { datasetId, documentId, params } = payload const { datasetId, documentId, params } = payload
return useQuery<DocumentDetailResponse>({ return useQuery<DocumentDetailResponse>({
queryKey: [...useDocumentDetailKey, 'onlyMetaData', datasetId, documentId], queryKey: [...useDocumentDetailKey, 'onlyMetaData', datasetId, documentId, params],
queryFn: () => get<DocumentDetailResponse>(`/datasets/${datasetId}/documents/${documentId}`, { params }), queryFn: () => get<DocumentDetailResponse>(`/datasets/${datasetId}/documents/${documentId}`, { params }),
}) })
} }

View File

@@ -32,9 +32,9 @@ export const useSegmentList = (
disable?: boolean, disable?: boolean,
) => { ) => {
const { datasetId, documentId, params } = payload const { datasetId, documentId, params } = payload
const { page, limit, keyword, enabled } = params
return useQuery<SegmentsResponse>({ return useQuery<SegmentsResponse>({
queryKey: [...useSegmentListKey, { datasetId, documentId, page, limit, keyword, enabled }], queryKey: [...useSegmentListKey, datasetId, documentId, params],
queryFn: () => { queryFn: () => {
return get<SegmentsResponse>(`/datasets/${datasetId}/documents/${documentId}/segments`, { params }) return get<SegmentsResponse>(`/datasets/${datasetId}/documents/${documentId}/segments`, { params })
}, },
@@ -111,9 +111,9 @@ export const useChildSegmentList = (
disable?: boolean, disable?: boolean,
) => { ) => {
const { datasetId, documentId, segmentId, params } = payload const { datasetId, documentId, segmentId, params } = payload
const { page, limit, keyword } = params
return useQuery({ return useQuery({
queryKey: [...useChildSegmentListKey, { datasetId, documentId, segmentId, page, limit, keyword }], queryKey: [...useChildSegmentListKey, datasetId, documentId, segmentId, params],
queryFn: () => { queryFn: () => {
return get<ChildSegmentsResponse>(`/datasets/${datasetId}/documents/${documentId}/segments/${segmentId}/child_chunks`, { params }) return get<ChildSegmentsResponse>(`/datasets/${datasetId}/documents/${documentId}/segments/${segmentId}/child_chunks`, { params })
}, },

View File

@@ -59,7 +59,7 @@ export const useUpdateAppPinStatus = () => {
export const useGetInstalledAppAccessModeByAppId = (appId: string | null) => { export const useGetInstalledAppAccessModeByAppId = (appId: string | null) => {
const systemFeatures = useGlobalPublicStore(s => s.systemFeatures) const systemFeatures = useGlobalPublicStore(s => s.systemFeatures)
return useQuery({ return useQuery({
queryKey: [NAME_SPACE, 'appAccessMode', appId], queryKey: [NAME_SPACE, 'appAccessMode', appId, systemFeatures.webapp_auth.enabled],
queryFn: () => { queryFn: () => {
if (systemFeatures.webapp_auth.enabled === false) { if (systemFeatures.webapp_auth.enabled === false) {
return { return {

View File

@@ -82,7 +82,7 @@ export const useGetModelCredential = (
) => { ) => {
return useQuery({ return useQuery({
enabled, enabled,
queryKey: [NAME_SPACE, 'model-list', provider, model, modelType, credentialId], queryKey: [NAME_SPACE, 'model-list', provider, model, modelType, credentialId, configFrom],
queryFn: () => get<ModelCredential>(`/workspaces/current/model-providers/${provider}/models/credentials?model=${model}&model_type=${modelType}&config_from=${configFrom}${credentialId ? `&credential_id=${credentialId}` : ''}`), queryFn: () => get<ModelCredential>(`/workspaces/current/model-providers/${provider}/models/credentials?model=${model}&model_type=${modelType}&config_from=${configFrom}${credentialId ? `&credential_id=${credentialId}` : ''}`),
staleTime: 0, staleTime: 0,
gcTime: 0, gcTime: 0,

View File

@@ -40,9 +40,8 @@ const NAME_SPACE = 'pipeline'
export const PipelineTemplateListQueryKeyPrefix = [NAME_SPACE, 'template-list'] export const PipelineTemplateListQueryKeyPrefix = [NAME_SPACE, 'template-list']
export const usePipelineTemplateList = (params: PipelineTemplateListParams, enabled = true) => { export const usePipelineTemplateList = (params: PipelineTemplateListParams, enabled = true) => {
const { type, language } = params
return useQuery<PipelineTemplateListResponse>({ return useQuery<PipelineTemplateListResponse>({
queryKey: [...PipelineTemplateListQueryKeyPrefix, type, language], queryKey: [...PipelineTemplateListQueryKeyPrefix, params],
queryFn: () => { queryFn: () => {
return get<PipelineTemplateListResponse>('/rag/pipeline/templates', { params }) return get<PipelineTemplateListResponse>('/rag/pipeline/templates', { params })
}, },

View File

@@ -677,20 +677,21 @@ export const useMutationCheckDependencies = () => {
} }
export const useModelInList = (currentProvider?: ModelProvider, modelId?: string) => { export const useModelInList = (currentProvider?: ModelProvider, modelId?: string) => {
const provider = currentProvider?.provider
return useQuery({ return useQuery({
queryKey: ['modelInList', currentProvider?.provider, modelId], queryKey: ['modelInList', provider, modelId],
queryFn: async () => { queryFn: async () => {
if (!modelId || !currentProvider) if (!modelId || !provider)
return false return false
try { try {
const modelsData = await fetchModelProviderModelList(`/workspaces/current/model-providers/${currentProvider?.provider}/models`) const modelsData = await fetchModelProviderModelList(`/workspaces/current/model-providers/${provider}/models`)
return !!modelId && !!modelsData.data.find(item => item.model === modelId) return !!modelId && !!modelsData.data.find(item => item.model === modelId)
} }
catch { catch {
return false return false
} }
}, },
enabled: !!modelId && !!currentProvider, enabled: !!modelId && !!provider,
}) })
} }
@@ -742,7 +743,7 @@ export const usePluginReadme = ({ plugin_unique_identifier, language }: { plugin
export const usePluginReadmeAsset = ({ file_name, plugin_unique_identifier }: { file_name?: string, plugin_unique_identifier?: string }) => { export const usePluginReadmeAsset = ({ file_name, plugin_unique_identifier }: { file_name?: string, plugin_unique_identifier?: string }) => {
const normalizedFileName = file_name?.replace(/(^\.\/_assets\/|^_assets\/)/, '') const normalizedFileName = file_name?.replace(/(^\.\/_assets\/|^_assets\/)/, '')
return useQuery({ return useQuery({
queryKey: ['pluginReadmeAsset', plugin_unique_identifier, file_name], queryKey: ['pluginReadmeAsset', plugin_unique_identifier, normalizedFileName],
queryFn: () => get<Blob>('/workspaces/current/plugin/asset', { params: { plugin_unique_identifier, file_name: normalizedFileName } }, { silent: true }), queryFn: () => get<Blob>('/workspaces/current/plugin/asset', { params: { plugin_unique_identifier, file_name: normalizedFileName } }, { silent: true }),
enabled: !!plugin_unique_identifier && !!file_name && /(^\.\/_assets|^_assets)/.test(file_name), enabled: !!plugin_unique_identifier && !!file_name && /(^\.\/_assets|^_assets)/.test(file_name),
}) })