9.6.2 • Published 8 months ago

@teamstarter/graphql-sequelize-generator v9.6.2

Weekly downloads
-
License
BSD-3-Clause
Repository
github
Last release
8 months ago

Graphql-Sequelize-Generator

Graphql-Sequelize-Generator (GSG) is a set of tools that will allow you to easily generate a GraphQL API from your sequelize models.

It's a very good fit for POCs and MVPs, while also scaling pretty well thanks to dataloader-sequelize.


Documentation

The complete documentation car be found here

What can I do with GSG?

The tools provided by this library will allow you to:

  • Query any model defined in your app through GraphQL.
  • Auto-generate create/update/delete mutations.
  • Define before/after hooks and all resolvers, including the mutations.
  • Easily create custom mutations.
  • Get an integrated interface to test your GraphQL API.
  • Counts for each model can also be generated.
  • Subscriptions auto-generated for mutations.
  • Add custom fields/resolvers on auto-generated types.
  • Easy integration with dataloader-sequelize

Getting started


Setting up the dependencies and the library

Add the lib and the peer dependencies of GraphQL-Sequelize-Generator:

yarn add graphql-sequelize-generator graphql sequelize graphql-sequelize @apollo/server dataloader-sequelize graphql-relay ws

āš ļø Caution: GSG requires Node v9.11.2 or greater as it is using async/await.


Initializing the project with Sequelize-CLI and adding data to the database

If you need to initialize the project, please follow this Sequelize documentation page : Sequelize-Cli and Migrations


Setting up your server

Create a file where you will set up your server and paste the following code. We used index.js (at the root of our example project):

// index.js
const { expressMiddleware } = require('@apollo/server/express4')
const express = require('express')
const http = require('http')
const cors = require('cors')
const json = require('body-parser')
const { createContext, EXPECTED_OPTIONS_KEY } = require('dataloader-sequelize')
const setupServer = require('./schema')
const models = require('./models') //Assuming "models" is your import of the Sequelize models folder, initialized by Sequelize-Cli

const createServer = async (options = {}, globalPreCallback = () => null) => {
  const app = express()
  options = {
    spdy: { plain: true },
    ...options,
  }
  const httpServer = http.createServer(options, app)
  const { server } = setupServer(globalPreCallback, httpServer)
  await server.start()
  //server.applyMiddleware({ app, path: '/graphql' })
  app.use(
    '/graphql',
    cors(),
    json(),
    expressMiddleware(server, {
      context: async ({ req, connection }) => {
        const contextDataloader = createContext(models.sequelize)

        // Connection is provided when a webSocket is connected.
        if (connection) {
          // check connection for metadata
          return {
            ...connection.context,
            [EXPECTED_OPTIONS_KEY]: contextDataloader,
          }
        }
      },
    })
  )

  await new Promise((resolve) => {
    httpServer.listen(process.env.PORT || 8080, () => {
      resolve()
    })

    console.log(
      `šŸš€ Server ready at http://localhost:${process.env.PORT || 8080}/graphql`
    )
  })
  return httpServer
}

const closeServer = async (server) => {
  await Promise.all([new Promise((resolve) => server.close(() => resolve()))])
}

createServer()

Getting started with boilerplates

You can easily start a project with graphql-sequelize-generator using these boilerplates:

9.5.4

10 months ago

9.6.2

8 months ago

9.5.3

10 months ago

9.6.1

9 months ago

9.5.2

10 months ago

9.6.0

9 months ago

9.5.1

10 months ago

9.5.0

10 months ago

9.4.1

10 months ago

9.4.0

10 months ago

9.3.0

10 months ago

9.0.3

10 months ago

9.2.0

10 months ago

9.0.2

10 months ago

9.1.0

10 months ago

9.0.1

10 months ago

9.0.0

10 months ago

8.7.4

2 years ago

8.7.3

2 years ago

8.7.2

2 years ago

8.7.1

2 years ago

8.7.0

2 years ago

8.6.1

2 years ago

8.6.0

2 years ago

8.5.0

2 years ago

8.4.3

2 years ago

8.4.1

2 years ago

8.4.0

2 years ago

8.4.2

2 years ago

8.3.2

2 years ago

8.3.1

2 years ago

8.3.0

2 years ago

8.2.0

2 years ago