npm package: @iwatakeshi/apollo-link-prismic
Description: Apollo link for Prismic
Author: sebastien@prismic.io
Latest version: 1.2.1

# apollo-link-prismic

[![npm version](https://badge.fury.io/js/@iwatakeshi%2Fapollo-link-prismic.svg)](https://badge.fury.io/js/@iwatakeshi%2Fapollo-link-prismic)
[![License](https://img.shields.io/npm/l/@iwatakeshi/apollo-link-prismic.svg)](https://github.com/iwatakeshi/apollo-link-prismic/blob/master/LICENSE)

An Apollo Link that allows you to query Prismic's GraphQL API with [Apollo Client](https://www.apollographql.com/client/).

## Installation

```bash
npm install @iwatakeshi/apollo-link-prismic
```

## Usage

### Basic Usage

```typescript
import { ApolloClient, InMemoryCache } from '@apollo/client';
import { createPrismicLink } from '@iwatakeshi/apollo-link-prismic';

const client = new ApolloClient({
  link: createPrismicLink({
    repositoryName: 'your-repo-name',
    // Provide an access token if your repository is secured
    accessToken: 'your-access-token',
  }),
  cache: new InMemoryCache(),
});
```

### Custom GraphQL Endpoint

```typescript
import { ApolloClient, InMemoryCache } from '@apollo/client';
import { createPrismicLink } from '@iwatakeshi/apollo-link-prismic';

const client = new ApolloClient({
  link: createPrismicLink({
    uri: 'https://your-repo.cdn.prismic.io/graphql',
    accessToken: 'your-access-token',
  }),
  cache: new InMemoryCache(),
});
```

### Providing a Custom Fetch Function

If you're using this in an environment where a global `fetch` function doesn't exist (like Node.js), you can provide your own:

```typescript
import { ApolloClient, InMemoryCache } from '@apollo/client';
import { createPrismicLink } from '@iwatakeshi/apollo-link-prismic';
import fetch from 'node-fetch';

const client = new ApolloClient({
  link: createPrismicLink({
    repositoryName: 'your-repo-name',
    accessToken: 'your-access-token',
    fetch: fetch as any,
  }),
  cache: new InMemoryCache(),
});
```

### React Native Setup

Using `@iwatakeshi/apollo-link-prismic` in React Native requires a URL polyfill:

```bash
npm install react-native-url-polyfill
```

Then import the polyfill in your app's entry file:

```javascript
// App.js or index.js
import 'react-native-url-polyfill/auto';

// Your app code here...
```

## API Reference

### `createPrismicLink(config)`

Creates an Apollo Link for querying a Prismic GraphQL API.

#### Parameters

- `config` (Object): Configuration options
  - `repositoryName` (string, optional): The name of your Prismic repository
  - `uri` (string, optional): The GraphQL API endpoint URL
  - `accessToken` (string, optional): Access token for secured repositories
  - `apiEndpoint` (string, optional): Custom REST API endpoint for Prismic
  - `fetch` (function, optional): Custom fetch function

**Note**: Either `repositoryName` or `uri` must be provided.

#### Returns

An Apollo Link instance configured for your Prismic repository.

### Legacy API

For backward compatibility, `PrismicLink` is available as an alias for `createPrismicLink`:

```typescript
import { PrismicLink } from '@iwatakeshi/apollo-link-prismic';

// This is the same as createPrismicLink
const link = PrismicLink({
  repositoryName: 'your-repo-name',
});
```

## Development

### Setup

```bash
git clone https://github.com/iwatakeshi/apollo-link-prismic.git
cd apollo-link-prismic
npm install
```

### Scripts

- `npm run build` - Build the library
- `npm run dev` - Build in watch mode
- `npm test` - Run tests
- `npm run test:watch` - Run tests in watch mode
- `npm run lint` - Lint the code
- `npm run format` - Format code with Prettier

## License

Apache 2.0 - See [LICENSE](LICENSE) file for details.

## Contributing

Issues and pull requests are welcome! Please check the [issues page](https://github.com/iwatakeshi/apollo-link-prismic/issues) before submitting.

## Credits

This package is a modernized fork of the original [apollo-link-prismic](https://github.com/prismicio/apollo-link-prismic) by Prismic.