nexus-cloudinary

Nexus plugin for Cloudinary

Usage no npm install needed!

<script type="module">
  import nexusCloudinary from 'https://cdn.skypack.dev/nexus-cloudinary';
</script>

README

cloudinary-nexus

Top language Vulnerabilities Version Node Version Last commit

Nexus plugin for Cloudinary. Useful for uploading files with GraphQL.

Install

pnpm i nexus-cloudinary cloudinary # cloudinary SDK is a peer dep

Setup

To make this plugin work you need to pass it to the makeSchema function and create a context.ts file with initializing cloudinary (so the plugin can use it internally).

// server.ts

import { makeSchema } from 'nexus'
import { nexusCloudinary } from 'nexus-cloudinary'
import { ApolloServer } from 'apollo-server'
import * as path from 'path'
import { context } from './context'

const schema = makeSchema({
  types: [],
  outputs: {
    schema: path.join(process.cwd(), 'api.graphql'),
    typegen: path.join(process.cwd().replace(/\/dist$/, '/src'), 'typegen.ts')
  },
  plugins: [nexusCloudinary()],
  contextType: {
    module: path.join(process.cwd(), 'context.ts'),
    export: 'Context'
  }
})

const server = new ApolloServer({
  schema,
  context
})

server.listen({ port: 4000 }, () => console.log(`🚀 Server ready at http://localhost:4000${server.graphqlPath}`))

Next, create a file with GraphQL context where you need to initialize cloudinary SDK.

// context.ts

import * as dotenv from '@tinyhttp/dotenv'
import { v2 as cloudinary } from 'cloudinary'

dotenv.config()

export type Context = {
  cloudinary: typeof cloudinary
}

cloudinary.config({
  cloud_name: process.env.CLOUD_NAME,
  api_key: process.env.API_KEY,
  api_secret: process.env.API_SECRET
})

export const context = {
  cloudinary
}

Usage

This plugin adds new types for interacting with Cloudinary using GraphQL.

For example, you can upload an image using uploadImage mutation:

mutation {
  uploadImage(file: "./pic.jpg") {
    height
    width
    url
  }
}