veloxapi
Version:
An ultra-fast, zero-dependency Node.js web framework built entirely with Node.js built-in modules
438 lines (263 loc) • 7.87 kB
Markdown
# VeloxAPI - API Reference
## Table of Contents
- [VeloxServer](#veloxserver)
- [VeloxRouter](#veloxrouter)
- [Request](#request)
- [Response](#response)
- [Cookie](#cookie)
- [LRUCache](#lrucache)
---
## VeloxServer
High-performance HTTP/HTTPS server class.
### Constructor
```javascript
const server = new VeloxServer();
```
### Methods
#### `setPort(port)`
Sets the server port.
**Parameters:**
- `port` (number): Port number (default: 3000)
**Returns:** `VeloxServer` instance for chaining
#### `setHost(host)`
Sets the server host.
**Parameters:**
- `host` (string): Host address (default: '0.0.0.0')
**Returns:** `VeloxServer` instance for chaining
#### `setRouter(router)`
Sets the router for handling requests.
**Parameters:**
- `router` (VeloxRouter): Router instance
**Returns:** `VeloxServer` instance for chaining
#### `enableHTTPS(options)`
Enables HTTPS with SSL options.
**Parameters:**
- `options` (Object): SSL options (`key`, `cert`)
**Returns:** `VeloxServer` instance for chaining
#### `start()`
Starts the server.
**Returns:** `http.Server` or `https.Server` instance
#### `stop(callback)`
Stops the server gracefully.
**Parameters:**
- `callback` (Function): Optional callback function
---
## VeloxRouter
High-performance router with radix tree routing.
### Constructor
```javascript
const router = new VeloxRouter();
```
### Methods
#### `get(path, handler)`
Adds a GET route.
**Parameters:**
- `path` (string): Route path (supports typed parameters)
- `handler` (Function): Route handler `(res, req, query, params) => {}`
- `res` (Response): Response object
- `req` (Request): Request object
- `query` (Object): Query parameters
- `params` (Object): Path parameters (typed and validated)
**Note:** Body parsing is lazy - call `await req.getBody()` when needed.
**Returns:** `VeloxRouter` instance for chaining
#### `post(path, handler)`
Adds a POST route (same signature as `get`).
#### `put(path, handler)`
Adds a PUT route (same signature as `get`).
#### `delete(path, handler)`
Adds a DELETE route (same signature as `get`).
#### `patch(path, handler)`
Adds a PATCH route (same signature as `get`).
#### `use(pathOrHandler, handler)`
Adds middleware.
**Parameters:**
- `pathOrHandler` (string|Function): Path or middleware function
- `handler` (Function): Middleware function if path is provided
**Returns:** `VeloxRouter` instance for chaining
#### `setPrefix(prefix)`
Sets a prefix for all routes.
**Parameters:**
- `prefix` (string): Route prefix
**Returns:** `VeloxRouter` instance for chaining
### Typed Parameters
VeloxAPI supports typed route parameters for automatic validation:
```javascript
router.get('/user/:id=number', (res, req, query, params) => {
console.log(typeof params.id); // 'number'
});
```
**Supported Types:**
- `number` - Numeric values only
- `string` - Alphabetic characters only
- `alphanumeric` - Letters and numbers
- `uuid` - UUID format
- `email` - Email format
- `slug` - URL-friendly slugs
- `date` - Date format (YYYY-MM-DD)
- `phone` - Phone numbers
- `ip` - IPv4 addresses
- `hex` - Hexadecimal values
- `version` - Version strings (v1, v2, etc.)
- `boolean` - true/false/1/0
---
## Request
Request wrapper with utilities.
### Methods
#### `getUrl()`
Returns the full request URL.
#### `getPathname()`
Returns the pathname.
#### `getMethod()`
Returns the HTTP method.
#### `getHeader(name)`
Gets a specific header.
**Parameters:**
- `name` (string): Header name
**Returns:** Header value or `undefined`
#### `getQuery(key)`
Gets query parameter(s).
**Parameters:**
- `key` (string): Optional specific query key
**Returns:** Query value or all query params
#### `getBody(maxSize)`
Parses and returns the request body.
**Parameters:**
- `maxSize` (number): Maximum body size in bytes (default: 10MB)
**Returns:** `Promise<*>` Parsed body
**Supported Content Types:**
- `application/json`
- `application/x-www-form-urlencoded`
- `multipart/form-data`
- `text/plain`
- `application/xml`
#### `isSecure()`
Checks if request is HTTPS.
**Returns:** `boolean`
#### `getClientIP()`
Gets client IP address.
**Returns:** `string`
---
## Response
Response wrapper with streaming methods.
### Methods
#### `status(code)`
Sets HTTP status code.
**Parameters:**
- `code` (number): Status code
**Returns:** `Response` instance for chaining
#### `setHeader(name, value)`
Sets response header(s).
**Parameters:**
- `name` (string|Object): Header name or object of headers
- `value` (string): Header value
**Returns:** `Response` instance for chaining
#### `sendJSON(data)`
Sends JSON response.
**Parameters:**
- `data` (*): Data to stringify
#### `sendHTML(html)`
Sends HTML response.
**Parameters:**
- `html` (string): HTML content
#### `sendText(text)`
Sends plain text response.
**Parameters:**
- `text` (string): Text content
#### `sendFile(filePath, baseDir)`
Sends file with streaming (supports range requests).
**Parameters:**
- `filePath` (string): Path to file
- `baseDir` (string): Base directory (default: `process.cwd()`)
#### `sendBuffer(buffer, contentType)`
Sends buffer response.
**Parameters:**
- `buffer` (Buffer): Buffer data
- `contentType` (string): Content type (default: 'application/octet-stream')
#### `sendError(message, statusCode)`
Sends error response.
**Parameters:**
- `message` (string): Error message
- `statusCode` (number): Status code (default: 500)
#### `redirect(url, statusCode)`
Redirects to a URL.
**Parameters:**
- `url` (string): Redirect URL
- `statusCode` (number): Status code (default: 302)
#### `setCORS(origin, methods, headers)`
Sets CORS headers.
**Parameters:**
- `origin` (string): Allowed origin (default: '*')
- `methods` (string): Allowed methods (default: 'GET,POST,PUT,DELETE,PATCH')
- `headers` (string): Allowed headers (default: 'Content-Type')
**Returns:** `Response` instance for chaining
---
## Cookie
Cookie management with signing support.
### Constructor
```javascript
const cookie = new Cookie('name', 'value', options);
```
**Options:**
- `httpOnly` (boolean): HttpOnly flag (default: true)
- `secure` (boolean): Secure flag (default: true)
- `sameSite` (string): SameSite attribute (default: 'Strict')
- `maxAge` (number): Max age in seconds
- `path` (string): Cookie path (default: '/')
- `domain` (string): Cookie domain
### Methods
#### `toString()`
Converts cookie to string format.
#### `sign(secret)`
Signs the cookie value.
**Parameters:**
- `secret` (string): Secret key
**Returns:** Signed value
#### `Cookie.verify(signedValue, secret)` (static)
Verifies a signed cookie.
**Parameters:**
- `signedValue` (string): Signed value
- `secret` (string): Secret key
**Returns:** Original value or `null`
---
## LRUCache
Least Recently Used cache with TTL support.
### Constructor
```javascript
const cache = new LRUCache(maxSize, ttl);
```
**Parameters:**
- `maxSize` (number): Maximum cache size (default: 500)
- `ttl` (number): Time to live in milliseconds (optional)
### Methods
#### `get(key)`
Gets a value from cache.
**Returns:** Cached value or `undefined`
#### `set(key, value)`
Sets a value in cache.
#### `delete(key)`
Deletes a key from cache.
**Returns:** `boolean`
#### `has(key)`
Checks if key exists.
**Returns:** `boolean`
#### `clear()`
Clears all cached values.
#### `getSize()`
Gets current cache size.
**Returns:** `number`
---
## Example Usage
```javascript
import { VeloxServer, VeloxRouter } from 'veloxapi';
const router = new VeloxRouter();
router.get('/user/:id=number', (res, req, query, params) => {
res.sendJSON({ userId: params.id });
});
router.post('/data', async (res, req, query, params, body) => {
res.sendJSON({ received: body });
});
const server = new VeloxServer()
.setPort(3000)
.setRouter(router)
.start();
```