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>();