{"_id":"@api-hooks/maven","name":"@api-hooks/maven","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@api-hooks/maven","version":"1.0.0","description":"React hooks for the Maven Central REST API, built on @tanstack/react-query","keywords":["react","hooks","maven","maven-central","registry","api","react-query","tanstack"],"license":"MIT","homepage":"https://github.com/ElJijuna/api-hooks#readme","repository":{"type":"git","url":"git+https://github.com/ElJijuna/api-hooks.git","directory":"packages/maven"},"bugs":{"url":"https://github.com/ElJijuna/api-hooks/issues"},"publishConfig":{"access":"public"},"type":"module","main":"./dist/index.js","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./types":{"types":"./dist/types.d.ts","import":"./dist/types.js"}},"sideEffects":false,"scripts":{"build":"vite build && tsc --emitDeclarationOnly --declarationMap","dev":"vite build --watch","test":"jest --passWithNoTests","test:coverage":"jest --coverage --passWithNoTests","typecheck":"tsc --noEmit","docs":"typedoc"},"peerDependencies":{"@tanstack/react-query":"^5.0.0","react":">=19.0.0"},"dependencies":{"maven-api-client":"^1.0.0"},"devDependencies":{"@tanstack/react-query":"^5.101.0","@testing-library/react":"^16.3.2","jest":"^30.4.2","jest-environment-jsdom":"^30.4.1","react":"^19.2.7","react-dom":"^19.2.7","typedoc":"^0.28.19","vite":"^8.0.16","vite-magic-tree-shaking":"^1.0.0"},"author":{"name":"pilmee","email":"pilmee@gmail.com","url":"https://github.com/ElJijuna"},"gitHead":"fce135b2548f42a2a33b5d61420b339ef7d967ae","_id":"@api-hooks/maven@1.0.0","_nodeVersion":"22.23.0","_npmVersion":"11.18.0","dist":{"integrity":"sha512-SAKEcfEEKkXsT1D/m9Sg0Lk3L/SS9lYVrvfZsarN6jpAI/POdT49KY6HeG0v36J4LOvrv7iwkoFfMklQNSfnYA==","shasum":"d8cca235680cfd7fbaf0e34392aa06e2be5f8aa4","tarball":"https://registry.npmjs.org/@api-hooks/maven/-/maven-1.0.0.tgz","fileCount":43,"unpackedSize":43629,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIAsILLgcr9IaVTWa4DojQY3JxElYEnhl5619xnKNr7HjAiB4kVmuc44UUGNyxtI/1YFsGyXJ9Rw/tUg9nV3gnM1/Cw=="}]},"_npmUser":{"name":"pilmee","email":"pilmee@gmail.com"},"directories":{},"maintainers":[{"name":"pilmee","email":"pilmee@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/maven_1.0.0_1782996388057_0.14082231673018986"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-02T12:46:27.919Z","1.0.0":"2026-07-02T12:46:28.196Z","modified":"2026-07-02T12:46:28.495Z"},"maintainers":[{"name":"pilmee","email":"pilmee@gmail.com"}],"description":"React hooks for the Maven Central REST API, built on @tanstack/react-query","homepage":"https://github.com/ElJijuna/api-hooks#readme","keywords":["react","hooks","maven","maven-central","registry","api","react-query","tanstack"],"repository":{"type":"git","url":"git+https://github.com/ElJijuna/api-hooks.git","directory":"packages/maven"},"author":{"name":"pilmee","email":"pilmee@gmail.com","url":"https://github.com/ElJijuna"},"bugs":{"url":"https://github.com/ElJijuna/api-hooks/issues"},"license":"MIT","readme":"# @api-hooks/maven\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/ElJijuna/api-hooks/main/public/assets/api-hooks.png\" alt=\"api-hooks logo\" width=\"240\" />\n</p>\n\nReact hooks for the [Maven Central REST API](https://search.maven.org), built on [`maven-api-client`](https://www.npmjs.com/package/maven-api-client) and [`@tanstack/react-query`](https://tanstack.com/query).\n\n[![npm](https://img.shields.io/npm/v/@api-hooks/maven)](https://www.npmjs.com/package/@api-hooks/maven)\n[![npm downloads](https://img.shields.io/npm/dm/@api-hooks/maven)](https://www.npmjs.com/package/@api-hooks/maven)\n[![CI](https://github.com/ElJijuna/api-hooks/actions/workflows/ci.yml/badge.svg)](https://github.com/ElJijuna/api-hooks/actions/workflows/ci.yml)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](../../LICENSE)\n[![TypeScript](https://img.shields.io/badge/TypeScript-strict-blue?logo=typescript&logoColor=white)](https://www.typescriptlang.org/)\n\n## Requirements\n\n| Peer dependency | Version |\n| --------------- | ------- |\n| `react` | `>=19.0.0` |\n| `@tanstack/react-query` | `^5.0.0` |\n\n## Installation\n\n```bash\nnpm install @api-hooks/maven @tanstack/react-query\n```\n\n## Setup\n\nWrap your application with a `QueryClientProvider` and a `MavenClientProvider` once at the root:\n\n```tsx\nimport { QueryClient, QueryClientProvider } from '@tanstack/react-query';\nimport { MavenClientProvider } from '@api-hooks/maven';\n\nconst queryClient = new QueryClient();\n\nexport default function App() {\n  return (\n    <QueryClientProvider client={queryClient}>\n      <MavenClientProvider>\n        <YourApp />\n      </MavenClientProvider>\n    </QueryClientProvider>\n  );\n}\n```\n\nBy default, requests go to Maven Central (`search.maven.org`). To point at a private Nexus/Artifactory mirror, pass a `baseUrl` through `MavenClientProvider`:\n\n```tsx\n<MavenClientProvider options={{ baseUrl: 'https://my-nexus.example.com' }}>\n  <YourApp />\n</MavenClientProvider>\n```\n\n`MavenClientProvider` is optional — hooks fall back to a default `MavenClient` (pointed at Maven Central) when no provider is present.\n\n## Hooks\n\nQuery hooks return a [`UseQueryResult`](https://tanstack.com/query/latest/docs/framework/react/reference/useQuery) — you get the full TanStack Query API: `data`, `isLoading`, `isFetching`, `isError`, `error`, `refetch`, and more. `useMavenSearchInfinite` returns a [`UseInfiniteQueryResult`](https://tanstack.com/query/latest/docs/framework/react/reference/useInfiniteQuery).\n\n| Hook | Description | Returns |\n| ---- | ----------- | ------- |\n| [`useMavenSearch(params, options?)`](#usemavensearchparams-options) | Search Maven Central artifacts | `MavenSearchResult` |\n| [`useMavenSearchInfinite(options?)`](#usemavensearchinfiniteoptions) | Infinite-scroll variant of `useMavenSearch` | `InfiniteData<MavenSearchResult>` |\n| [`useMavenSuggest(params, options?)`](#usemavensuggestparams-options) | Prefix/keyword suggestions for artifacts | `MavenSearchResult` |\n| [`useMavenArtifactVersions(groupId, artifactId, options?)`](#usemavenartifactversionsgroupid-artifactid-options) | All published versions of an artifact | `string[]` |\n| [`useMavenArtifactVersion(groupId, artifactId, version, options?)`](#usemavenartifactversiongroupid-artifactid-version-options) | Metadata for a specific version | `MavenVersionDoc` |\n| [`useMavenArtifactLatest(groupId, artifactId, options?)`](#usemavenartifactlatestgroupid-artifactid-options) | Metadata for the latest version | `MavenVersionDoc` |\n\n---\n\n## API Reference\n\n### `useMavenSearch(params, options?)`\n\nSearches Maven Central artifacts by group ID, artifact ID, class name, or free text.\n\n```tsx\nimport { useMavenSearch } from '@api-hooks/maven';\n\nfunction ArtifactSearch() {\n  const { data, isLoading } = useMavenSearch({ query: 'g:org.springframework a:spring-core' });\n\n  if (isLoading) return <p>Loading…</p>;\n\n  return (\n    <ul>\n      {data?.response.docs.map(doc => (\n        <li key={doc.id}>{doc.id} — {doc.latestVersion}</li>\n      ))}\n    </ul>\n  );\n}\n```\n\n| Option | Type | Default | Description |\n| ------ | ---- | ------- | ----------- |\n| `enabled` | `boolean` | `true` | Disable the query |\n| `queryOptions` | `QueryOverrides<TData>` | `undefined` | Override TanStack Query options (`staleTime`, `retry`, `gcTime`, `select`, etc.) |\n\n---\n\n### `useMavenSearchInfinite(options?)`\n\nInfinite-scroll variant of `useMavenSearch`. Each page is fetched by advancing the `start` offset by `rows`. Call `fetchNextPage()` to load the next batch — results accumulate in `data.pages`.\n\n```tsx\nimport { useMavenSearchInfinite } from '@api-hooks/maven';\n\nfunction ArtifactSearchInfinite() {\n  const { data, fetchNextPage, hasNextPage } = useMavenSearchInfinite({ query: 'spring' });\n\n  return (\n    <>\n      {data?.pages.flatMap(page => page.response.docs).map(doc => (\n        <div key={doc.id}>{doc.id}</div>\n      ))}\n      {hasNextPage && <button onClick={() => fetchNextPage()}>Load more</button>}\n    </>\n  );\n}\n```\n\n| Option | Type | Default | Description |\n| ------ | ---- | ------- | ----------- |\n| `query` | `string` | `undefined` | Search query |\n| `rows` | `number` | `20` | Page size |\n| `enabled` | `boolean` | `true` | Disable the query |\n| `queryOptions` | `InfiniteQueryOverrides<TData>` | `undefined` | Override TanStack Query options |\n\n---\n\n### `useMavenSuggest(params, options?)`\n\nSuggests Maven Central artifacts for prefix or keyword matching. The query is automatically disabled when `query` is empty.\n\n```tsx\nimport { useMavenSuggest } from '@api-hooks/maven';\n\nfunction ArtifactAutocomplete({ query }: { query: string }) {\n  const { data } = useMavenSuggest({ query });\n\n  return (\n    <ul>\n      {data?.response.docs.map(doc => (\n        <li key={doc.id}>{doc.id}</li>\n      ))}\n    </ul>\n  );\n}\n```\n\n| Option | Type | Default | Description |\n| ------ | ---- | ------- | ----------- |\n| `enabled` | `boolean` | `true` | Disable the query (also disabled when `query` is empty) |\n| `queryOptions` | `QueryOverrides<TData>` | `undefined` | Override TanStack Query options (`staleTime`, `retry`, `gcTime`, `select`, etc.) |\n\n---\n\n### `useMavenArtifactVersions(groupId, artifactId, options?)`\n\nFetches all published versions of a Maven Central artifact.\n\n```tsx\nimport { useMavenArtifactVersions } from '@api-hooks/maven';\n\nfunction VersionList() {\n  const { data } = useMavenArtifactVersions('org.springframework', 'spring-core');\n\n  return <ul>{data?.map(v => <li key={v}>{v}</li>)}</ul>;\n}\n```\n\n| Option | Type | Default | Description |\n| ------ | ---- | ------- | ----------- |\n| `enabled` | `boolean` | `true` | Disable the query (also disabled when `groupId` or `artifactId` is empty) |\n| `queryOptions` | `QueryOverrides<TData>` | `undefined` | Override TanStack Query options (`staleTime`, `retry`, `gcTime`, `select`, etc.) |\n\n---\n\n### `useMavenArtifactVersion(groupId, artifactId, version, options?)`\n\nFetches metadata for a specific published version of a Maven Central artifact.\n\n```tsx\nimport { useMavenArtifactVersion } from '@api-hooks/maven';\n\nfunction VersionDetail() {\n  const { data } = useMavenArtifactVersion('org.springframework', 'spring-core', '6.1.0');\n\n  return <p>{data?.p} — {data?.timestamp}</p>;\n}\n```\n\n| Option | Type | Default | Description |\n| ------ | ---- | ------- | ----------- |\n| `enabled` | `boolean` | `true` | Disable the query (also disabled when `groupId`, `artifactId`, or `version` is empty) |\n| `queryOptions` | `QueryOverrides<TData>` | `undefined` | Override TanStack Query options (`staleTime`, `retry`, `gcTime`, `select`, etc.) |\n\n---\n\n### `useMavenArtifactLatest(groupId, artifactId, options?)`\n\nFetches metadata for the latest published version of a Maven Central artifact.\n\n```tsx\nimport { useMavenArtifactLatest } from '@api-hooks/maven';\n\nfunction LatestVersion() {\n  const { data } = useMavenArtifactLatest('org.springframework', 'spring-core');\n\n  return <p>Latest: {data?.v}</p>;\n}\n```\n\n| Option | Type | Default | Description |\n| ------ | ---- | ------- | ----------- |\n| `enabled` | `boolean` | `true` | Disable the query (also disabled when `groupId` or `artifactId` is empty) |\n| `queryOptions` | `QueryOverrides<TData>` | `undefined` | Override TanStack Query options (`staleTime`, `retry`, `gcTime`, `select`, etc.) |\n\n---\n\n## License\n\nMIT © [ElJijuna](https://github.com/ElJijuna)\n","readmeFilename":"README.md","_rev":"1-8b60647fd78407339d78a49644a23dcc"}