# mercurius-upload

> Fastify plugin to support GraphQL uploads using graphql-upload

Latest version **8.0.0** (published 2024-11-12) · ISC license · 0 weekly downloads

## Install

```sh
npm install mercurius-upload
pnpm add mercurius-upload
yarn add mercurius-upload
bun add mercurius-upload
```

## Health

**Score 35/100 (D)** — status: maintenance-mode.

Positive: has types; no vulnerabilities; high quality score.

Warnings: low downloads; no esm support.

Negative: stale; low maintenance score.

## Facts

| | |
|---|---|
| Version | 8.0.0 |
| Published | 2024-11-12 |
| First published | 2020-10-02 |
| Weekly downloads | 0 |
| License | ISC |
| TypeScript types | bundled |
| Module format | CommonJS |
| Dependencies | 2 |
| Unpacked size | 6.9 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 33 |
| Author | PabloSzx |
| Maintainers | matteo.collina, pablosz |
| Keywords | fastify, mercurius, gql, graphql, upload, file, files, typescript |

## Links

- npm: https://www.npmjs.com/package/mercurius-upload
- Repository: https://github.com/mercurius-js/mercurius-upload
- Homepage: https://github.com/mercurius-js/mercurius-upload#readme
- Issues: https://github.com/mercurius-js/mercurius-upload/issues
- npm.io page: https://npm.io/package/mercurius-upload

## Dependencies (2)

- [fastify-plugin](https://npm.io/package/fastify-plugin.md) ^5.0.1
- [graphql-upload-minimal](https://npm.io/package/graphql-upload-minimal.md) ^1.6.1

## Alternatives

- [apollo-link-http-common](https://npm.io/package/apollo-link-http-common.md) — 879.0K weekly downloads
- [react-relay](https://npm.io/package/react-relay.md) — 336.8K weekly downloads
- [relay-test-utils](https://npm.io/package/relay-test-utils.md) — 181.6K weekly downloads
- [@vendure/core](https://npm.io/package/@vendure/core.md) — 14.8K weekly downloads
- [@pnpm/deps.graph-sequencer](https://npm.io/package/@pnpm/deps.graph-sequencer.md) — 13.4K weekly downloads

## Recent versions

- 8.0.0 (latest) — 2024-11-12
- 7.0.0 — 2023-09-04
- 6.0.1 — 2023-02-24
- 6.0.0 — 2022-11-22
- 5.0.0 — 2022-06-13
- 4.0.0 — 2022-03-22
- 3.0.1 — 2021-12-12
- 3.0.0 — 2021-12-10
- 2.0.0 — 2021-05-18
- 1.1.1 — 2020-10-02

## README

# mercurius-upload

[graphql-upload-minimal](https://github.com/flash-oss/graphql-upload-minimal) implementation plugin for [Fastify](https://www.fastify.io/) & [mercurius](https://github.com/mercurius-js/mercurius).

Plugin made for **Fastify v5**:

## Install

```sh
yarn add mercurius-upload
# or
npm i mercurius-upload
# or
pnpm add mercurius-upload
```

## Usage

Plugin options should conform to https://github.com/flash-oss/graphql-upload-minimal#type-processrequestoptions

```js
fastify.register(require('mercurius-upload'), {
  // options passed to processRequest from graphql-upload-minimal
  // maxFileSize: 1024 * 1024 * 5,
  // maxFiles: 1,
})
```

> or

```ts
import MercuriusGQLUpload from 'mercurius-upload'

// ...

fastify.register(MercuriusGQLUpload, {
  // options passed to processRequest from graphql-upload-minimal
})
```

## Example

```js
const GQL = require('mercurius')
const { GraphQLUpload } = require('graphql-upload-minimal')
const fs = require('fs')
const util = require('util')
const stream = require('stream')
const path = require('path')

const pipeline = util.promisify(stream.pipeline)
const uploadsDir = path.resolve(__dirname, '../uploads')

const schema = /* GraphQL */ `
  scalar Upload

  type Query {
    add(x: Int, y: Int): Int
  }

  type Mutation {
    uploadImage(image: Upload): Boolean
  }
`

const resolvers = {
  Upload: GraphQLUpload,
  Query: {
    add: async (_, { x, y }) => {
      return x + y
    },
  },
  Mutation: {
    uploadImage: async (_, { image }) => {
      const { filename, createReadStream } = await image
      const rs = createReadStream()
      const ws = fs.createWriteStream(path.join(uploadsDir, filename))
      await pipeline(rs, ws)
      return true
    },
  },
}

module.exports = function (fastify, options, done) {
  fastify.register(require('mercurius-upload'))

  fastify.register(GQL, {
    schema,
    resolvers,
    graphiql: true,
  })

  done()
}
```

---
_Source: https://npm.io/package/mercurius-upload · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
