This commit is contained in:
ClarkXia 2025-07-01 18:41:46 +08:00 committed by GitHub
commit a5eaf7435d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 203 additions and 0 deletions

View File

@ -0,0 +1,5 @@
# @ice/plugin-react-query
## 1.0.0
- Initial release

View File

View File

@ -0,0 +1,36 @@
{
"name": "@ice/plugin-react-query",
"version": "1.0.0",
"description": "React Query plugin for ice.",
"license": "MIT",
"type": "module",
"main": "./esm/index.js",
"types": "./esm/index.d.ts",
"files": [
"esm",
"!esm/**/*.map",
"*.d.ts"
],
"dependencies": {
"@tanstack/react-query": "^5.50.1",
"@tanstack/react-query-devtools": "^5.50.1"
},
"devDependencies": {
"@ice/app": "^3.4.9",
"@ice/runtime": "^1.4.8",
"@types/react": "^18.0.0",
"@types/react-dom": "^18.0.0",
"@tanstack/query-devtools": "^5.50.1"
},
"repository": {
"type": "http",
"url": "https://github.com/alibaba/ice/tree/master/packages/plugin-request"
},
"scripts": {
"watch": "tsc -w --sourceMap",
"build": "tsc"
},
"publishConfig": {
"access": "public"
}
}

View File

@ -0,0 +1,47 @@
import { createRequire } from 'module';
import type { Plugin } from '@ice/app/types';
const require = createRequire(import.meta.url);
const PLUGIN_NAME = '@ice/plugin-react-query';
const plugin: Plugin<void> = () => {
return {
name: PLUGIN_NAME,
setup: ({ generator, onGetConfig }) => {
generator.addExport({
specifier: [
// Core API export from @tanstack/react-query
'useQuery',
'useMutation',
'useQueryClient',
'useMutationState',
'useSuspenseQuery',
'useSuspenseInfiniteQuery',
'useSuspenseQueries',
'queryOptions',
'infiniteQueryOptions',
'QueryClientProvider',
'useQueryClient',
'QueryErrorResetBoundary',
'useQueryErrorResetBoundary',
'useIsRestoring',
'IsRestoringProvider',
],
source: '@tanstack/react-query',
type: false,
});
onGetConfig((config) => {
// Add alias for react-query and react-query-devtools to avoid mismatching versions.
config.alias = {
...config.alias,
'@tanstack/react-query': require.resolve('@tanstack/react-query'),
'@tanstack/react-query-devtools': require.resolve('@tanstack/react-query-devtools'),
};
});
},
runtime: `${PLUGIN_NAME}/runtime`,
staticRuntime: true,
};
};
export default plugin;

View File

@ -0,0 +1,36 @@
import * as React from 'react';
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
import { ReactQueryDevtools } from '@tanstack/react-query-devtools';
import type { RuntimePlugin } from '@ice/runtime/types';
import type { ReactQueryConfig } from './types';
const EXPORT_CONFIG_NAME = 'reactQueryConfig';
const runtime: RuntimePlugin = ({ addProvider, appContext }) => {
const { appExport } = appContext;
const reactQueryConfig = appExport[EXPORT_CONFIG_NAME] as ReactQueryConfig;
const queryClient = new QueryClient({
...(reactQueryConfig?.queryClientConfig || {}),
defaultOptions: {
queries: {
refetchOnWindowFocus: false,
retry: false,
...(reactQueryConfig?.queryClientConfig.defaultOptions?.queries || {}),
},
},
});
const ProviderWrapper = ({ children }) => {
return (
<QueryClientProvider client={queryClient}>
{children}
{ reactQueryConfig?.devTools &&
<ReactQueryDevtools
{...(reactQueryConfig.devTools || {})}
/> }
</QueryClientProvider>
);
};
addProvider(ProviderWrapper);
};
export default runtime;

View File

@ -0,0 +1,17 @@
import type { QueryClientConfig, QueryClient } from '@tanstack/react-query';
import type { DevtoolsButtonPosition, DevtoolsPosition, DevToolsErrorType } from '@tanstack/query-devtools';
interface DevtoolsOptions {
initialIsOpen?: boolean;
buttonPosition?: DevtoolsButtonPosition;
position?: DevtoolsPosition;
client?: QueryClient;
errorTypes?: Array<DevToolsErrorType>;
styleNonce?: string;
shadowDOMTarget?: ShadowRoot;
}
export interface ReactQueryConfig {
devTools?: DevtoolsOptions;
queryClientConfig?: QueryClientConfig;
}

View File

@ -0,0 +1,10 @@
{
"extends": "../../tsconfig.base.json",
"compilerOptions": {
"baseUrl": "./",
"rootDir": "src",
"outDir": "esm",
"jsx": "react"
},
"include": ["src"]
}

View File

@ -2252,6 +2252,31 @@ importers:
specifier: ^5.88.0
version: 5.88.2
packages/plugin-react-query:
dependencies:
'@tanstack/react-query':
specifier: ^5.50.1
version: 5.50.1(react@18.2.0)
'@tanstack/react-query-devtools':
specifier: ^5.50.1
version: 5.50.1(@tanstack/react-query@5.50.1)(react@18.2.0)
devDependencies:
'@ice/app':
specifier: ^3.4.9
version: link:../ice
'@ice/runtime':
specifier: ^1.4.8
version: link:../runtime
'@tanstack/query-devtools':
specifier: ^5.50.1
version: 5.50.1
'@types/react':
specifier: ^18.0.0
version: 18.0.34
'@types/react-dom':
specifier: ^18.0.0
version: 18.0.11
packages/plugin-request:
dependencies:
ahooks:
@ -8568,6 +8593,33 @@ packages:
dependencies:
defer-to-connect: 1.1.3
/@tanstack/query-core@5.50.1:
resolution: {integrity: sha512-lpfhKPrJlyV2DSVcQb/HuozH3Av3kws4ge22agx+lNGpFkS4vLZ7St0l3GLwlAD+bqB+qXGex3JdRKUNtMviEQ==}
dev: false
/@tanstack/query-devtools@5.50.1:
resolution: {integrity: sha512-MQ5JK3yRwBP1SRuwoJVPGZP4cMLXCQ0t+6blDbcAVGEoqrEuvbgTdwlN729AKBR0hidOWPFR9n5YpI2Y8bBZOQ==}
/@tanstack/react-query-devtools@5.50.1(@tanstack/react-query@5.50.1)(react@18.2.0):
resolution: {integrity: sha512-zgPmEFv9GhLAx6eaf9r0ACbcxit1ZSuv/uPpOXBTTSPLijlWcfpQTOdZx0jYQ14t2cUfWjrAW41cUmcCvT4X/g==}
peerDependencies:
'@tanstack/react-query': ^5.50.1
react: ^18 || ^19
dependencies:
'@tanstack/query-devtools': 5.50.1
'@tanstack/react-query': 5.50.1(react@18.2.0)
react: 18.2.0
dev: false
/@tanstack/react-query@5.50.1(react@18.2.0):
resolution: {integrity: sha512-s0DW3rVBDPReDDovUjVqItVa3R2nPfUANK9nqGvarO2DwTiY9U4EBTsqizMxItRCoGgK5apeM7D3mxlHrSKpdQ==}
peerDependencies:
react: ^18.0.0
dependencies:
'@tanstack/query-core': 5.50.1
react: 18.2.0
dev: false
/@testing-library/dom@8.20.0:
resolution: {integrity: sha512-d9ULIT+a4EXLX3UU8FBjauG9NnsZHkHztXoIcTsOKoOw030fyjheN9svkTULjJxtYag9DZz5Jz5qkWZDPxTFwA==}
engines: {node: '>=12'}