akmj
v0.1.2
Published
API Kit for Modern JavaScript - A sleek, type-safe HTTP client for modern JavaScript.
Maintainers
Readme
AKMJ: API Kit for Modern JavaScript
[!WARNING] This library is still in experimental stage, API changes may occur without warning.
"AKMJ" is a lightweight and powerful library designed to streamline API integration in modern JavaScript applications. With a focus on simplicity, flexibility, and type safety, "AKMJ" empowers developers to define and interact with RESTful APIs efficiently while maintaining robust code quality.
Key Features
- Type-Safe Interactions: Full TypeScript support with automatic type inference
- Declarative API Definitions: Clean, structured format to define your API routes
- Path Parameter Inference: Automatically extracts and types path parameters
- Dynamic Method Calls: Intuitive syntax (e.g.,
client.auth.$login({ email, password })) based on API definitions - Request Lifecycle Hooks: Built-in support for request/response lifecycle events
- Small Footprint: Lightweight core powered by Ky
Installation
# npm
npm install akmj
# pnpm
pnpm add akmj
# yarn
yarn add akmjUsage
Basic Setup
import { createClient, type AkmjDefinition } from "akmj";
const api = {
auth: {
$login: {
method: "post",
path: "/login",
types: {
request: akmj.object({
email: akmj.string(),
password: akmj.string(),
}),
response: {
200: akmj.object({
token: akmj.string(),
}),
},
},
},
},
} as const satisfies AkmjDefinition;
const client = createClient({
baseUrl: "https://api.example.com",
api,
});
// Use the client
const { token } = await client.auth.$login({
email: "[email protected]",
password: "password",
});Path Parameters
Parameters in the URL path are automatically inferred from :param syntax:
const api = {
users: {
$getUser: {
method: "get",
path: "/users/:id",
types: {
request: akmj.object({
include: akmj.string().optional(),
}),
response: {
200: akmj.object({
id: akmj.string(),
name: akmj.string(),
}),
},
},
},
},
} as const satisfies AkmjDefinition;
// Usage
const user = await client.users.$getUser(
{ id: "123" }, // Path parameters
{ include: "profile" } // Query parameters
);Type Utilities
AKMJ provides several type utilities to define your API schema:
// Array types
akmj.string().array(); // string[]
akmj.object({ id: akmj.string() }).array(); // Array<{ id: string }>
// Optional fields
akmj.string().optional(); // string | undefined
// Nullable fields
akmj.string().nullable(); // string | nullAdvanced Configuration
For additional options and hooks, refer to Ky documentation.
Roadmap
- [x] Automatic path parameter type inference
- [ ] RPC-style client support (
GET /users/1asclient.users({ id: 1 }).$get()) - [ ] Enum, union, and intersection types
- [ ] Comprehensive test suite
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
