@bolt-ts/core v0.2.1
Bolt TS - Modular, typed REST API framework for NodeJS
Bolt is in early development. Expect breaking changes until v1.0.0, and use at your own risk.
Getting started
Installation
Core (required)
yarn add @bolt-ts/core
Fastify (you'll need at least one server implementation)
yarn add @bolt-ts/fastify
Plexus (you'll need at least one client implementation)
yarn add @bolt-ts/plexus @plexusjs/napi
Basic usage
First, you'll need to define some routes. Bolt uses a simple route definition format:
import { route } from '@bolt-ts/core';
// We're using zod, but you can use other validation/serialization libraries, as long as they're compatible with bolt
import { z } from 'zod';
const myRoute = route('/hello')
// Define the input body schema
.body(z.object({
name: z.string()
}))
// Define the output body schema
.output(z.object({
message: z.string()
}))
// Other methods include:
// .method()
// .headers()
// .query()
// .params()
Once you've defined your routes, you'll need to create a server. Bolt uses a modular server implementation, so you can use any server implementation you want. For this example, we'll use Fastify, which we primarily support.
import { BoltServer } from '@bolt-ts/fastify';
import fastify from 'fastify';
const app = fastify();
const server = new BoltServer({ myRoute }, app);
// Now we can define our route handlers
server.registerHandlers({
myRoute: async (req, res) => {
return {
message: `Hello ${req.body.name}!`
}
}
});
// This will attach all bolt routes to the fastify server
server.attachRoutes();
// You can now start the server
app.listen({
port: 3000,
});
Now that we have a server running, we can make requests to it. Just like for the backend, we use a modular client implementation. For this example, we'll use our Plexus API wrapper.
import { createPlexusRouter } from '@bolt-ts/plexus';
import { api } from '@bolt-ts/napi';
const client = api('http://localhost:3000')
const router = createPlexusRouter({ myRoute }, client);
// Now we can make requests to the server
const response = await router.myRoute({
body: {
name: 'Nico'
}
});
console.log(response.message); // Hello Nico!
Alternatives
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
1 year ago
1 year ago
1 year ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago