GraphQL Yoga

GraphQL Yoga

Install the adapter and peer deps

npm i @aexol/axolotl-core @aexol/axolotl-graphql-yoga graphql-yoga graphql

Now you need a schema.graphql file or a URL with settings to download the schema from upstream. Out of it Axolotl can generate simple type definitions needed for the library out of your GraphQL Schema.

models.ts is generated at the path you provide.

First, generate models with axolotl build:

npx @aexol/axolotl build

Then write your axolotl.ts file:

axolotl.ts
import { Axolotl } from '@aexol/axolotl-core';
import { graphqlYogaAdapter } from '@aexol/axolotl-graphql-yoga';
import { Models } from './models.js';
 
export const { createResolvers, adapter } = Axolotl(graphqlYogaAdapter)<Models>();
resolvers.ts
import { createResolvers } from './axolotl.js';
export default createResolvers({
    // your type-safe resolvers here
});

Finally, write your index.ts file and start the server:

index.ts
import { adapter } from './axolotl.js';
import resolvers from './resolvers.js';
 
const PORT = Number(process.env.PORT) || 4000;
adapter({ resolvers }).server.listen(PORT, () => {
  console.log(`GraphQL running at http://localhost:${PORT}/graphql`);
});

You can also use this adapter with Express (useful for webhooks). Example:

index.ts
import { adapter } from './axolotl.js';
import resolvers from './resolvers.js';
import express from 'express'
 
const app = express();
 
const {yoga} = adapter({ resolvers });
 
app.use(yoga.graphqlEndpoint, yoga);
 
app.get('/webhook', (req, res) => {
  res.send('ok');
});
 
app.listen(PORT, () => {
  console.log(`Running a GraphQL API server at http://localhost:${PORT}/graphql`);
});

And you can implement anything you want in express now.

Use with context

Use the context adapter to get type‑safe context in all resolvers:

axolotl.ts
import { Axolotl } from '@aexol/axolotl-core';
import { graphqlYogaWithContextAdapter } from '@aexol/axolotl-graphql-yoga';
import { Models } from './models.js';
 
export const { createResolvers, adapter } = Axolotl(graphqlYogaWithContextAdapter<{yourContextVar?: string; counter?: number}>({yourContextVar: "hello"}))<Models>();