Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/drizzle-team/drizzle-graphql
Automatically generate GraphQL schema or customizable schema config fields from Drizzle ORM schema
https://github.com/drizzle-team/drizzle-graphql
drizzle-orm graphql nodejs typescript
Last synced: 4 days ago
JSON representation
Automatically generate GraphQL schema or customizable schema config fields from Drizzle ORM schema
- Host: GitHub
- URL: https://github.com/drizzle-team/drizzle-graphql
- Owner: drizzle-team
- License: apache-2.0
- Created: 2024-03-19T18:26:36.000Z (11 months ago)
- Default Branch: main
- Last Pushed: 2024-08-12T16:41:56.000Z (6 months ago)
- Last Synced: 2024-10-29T11:02:26.772Z (3 months ago)
- Topics: drizzle-orm, graphql, nodejs, typescript
- Language: TypeScript
- Homepage: https://www.npmjs.com/package/drizzle-graphql
- Size: 708 KB
- Stars: 51
- Watchers: 2
- Forks: 5
- Open Issues: 9
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Drizzle-GraphQL
Automatically create GraphQL schema or customizable schema config fields from Drizzle ORM schema
## Usage
- Pass your drizzle database instance and schema into builder to generate `{ schema, entities }` object
- Use `schema` if pre-built schema already satisfies all your neeeds. It's compatible witn any server that consumes `GraphQLSchema` class instanceExample: hosting schema using [GraphQL Yoga](https://the-guild.dev/graphql/yoga-server)
```Typescript
import { createServer } from 'node:http'
import { createYoga } from 'graphql-yoga'
import { buildSchema } from 'drizzle-graphql'// db - your drizzle instance
import { db } from './database'const { schema } = buildSchema(db)
const yoga = createYoga({ schema })
server.listen(4000, () => {
console.info('Server is running on http://localhost:4000/graphql')
})
```- If you want to customize your schema, you can use `entities` object to build your own new schema
```Typescript
import { createServer } from 'node:http'
import { GraphQLList, GraphQLNonNull, GraphQLObjectType, GraphQLSchema } from 'graphql'
import { createYoga } from 'graphql-yoga'
import { buildSchema } from 'drizzle-graphql'// Schema contains 'Users' and 'Customers' tables
import { db } from './database'const { entities } = buildSchema(db)
// You can customize which parts of queries or mutations you want
const schema = new GraphQLSchema({
query: new GraphQLObjectType({
name: 'Query',
fields: {
// Select only wanted queries out of all generated
users: entities.queries.users,
customer: entities.queries.customersSingle,// Create a custom one
customUsers: {
// You can reuse and customize types from original schema
type: new GraphQLList(new GraphQLNonNull(entities.types.UsersItem)),
args: {
// You can reuse inputs as well
where: {
type: entities.inputs.UsersFilters
}
},
resolve: async (source, args, context, info) => {
// Your custom logic goes here...
const result = await db.select(schema.Users).where()...return result
}
}
}
}),
// Same rules apply to mutations
mutation: new GraphQLObjectType({
name: 'Mutation',
fields: entities.mutations
}),
// In case you need types inside your schema
types: [...Object.values(entities.types), ...Object.values(entities.inputs)]
})const yoga = createYoga({
schema
})server.listen(4000, () => {
console.info('Server is running on http://localhost:4000/graphql')
})
```