barejs 0.1.45 → 0.1.47
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +74 -69
- package/dist/index.js +150 -133
- package/dist/types/core/bare.d.ts +2 -1
- package/dist/types/core/context.d.ts +2 -0
- package/dist/types/core/router.d.ts +1 -9
- package/dist/types/index.d.ts +0 -1
- package/package.json +68 -68
- package/src/core/bare.ts +89 -57
- package/src/core/context.ts +45 -15
- package/src/core/radix.ts +4 -9
- package/src/core/router.ts +19 -25
- package/src/index.ts +1 -1
- package/src/security/auth.ts +9 -13
- package/src/security/validators.ts +2 -1
- package/dist/types/utils/logger.d.ts +0 -2
- package/src/utils/logger.ts +0 -23
package/README.md
CHANGED
|
@@ -1,60 +1,53 @@
|
|
|
1
|
-
|
|
2
1
|
<div align="center">
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
<a href="#-quick-start">Quick Start</a> •
|
|
27
|
-
<a href="#-configuration">Configuration</a> •
|
|
28
|
-
<a href="#-architecture">Architecture</a>
|
|
29
|
-
</p>
|
|
30
|
-
|
|
31
|
-
---
|
|
2
|
+
<br />
|
|
3
|
+
<h1>Bare<span style="color: #F7DF1E;">JS</span></h1>
|
|
4
|
+
<p><strong>The "Metal" of Web Frameworks</strong></p>
|
|
5
|
+
<p><i>An ultra-high-performance web engine built for Bun, architected strictly for Mechanical Sympathy.</i></p>
|
|
6
|
+
|
|
7
|
+
<p>
|
|
8
|
+
<a href="https://www.npmjs.com/package/barejs">
|
|
9
|
+
<img src="https://img.shields.io/npm/v/barejs?style=for-the-badge&logo=npm&color=CB3837" alt="NPM Version">
|
|
10
|
+
</a>
|
|
11
|
+
<a href="https://github.com/xarhang/barejs/actions/workflows/bench.yml">
|
|
12
|
+
<img src="https://img.shields.io/github/actions/workflow/status/xarhang/barejs/bench.yml?branch=main&label=Performance&style=for-the-badge&logo=github" alt="Performance">
|
|
13
|
+
</a>
|
|
14
|
+
<a href="https://bun.sh">
|
|
15
|
+
<img src="https://img.shields.io/badge/Bun-%3E%3D1.0.0-black?style=for-the-badge&logo=bun" alt="Bun Version">
|
|
16
|
+
</a>
|
|
17
|
+
<a href="https://github.com/xarhang/barejs/blob/main/LICENSE">
|
|
18
|
+
<img src="https://img.shields.io/github/license/xarhang/barejs?style=for-the-badge&color=blue" alt="License">
|
|
19
|
+
</a>
|
|
20
|
+
</p>
|
|
21
|
+
</div>
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
32
25
|
</div>
|
|
33
26
|
|
|
34
27
|
## 📊 Benchmarks: Real-World Performance
|
|
35
28
|
|
|
36
29
|
BareJS leads in complex, real-world scenarios. We measure engine efficiency using a **stress test** involving **10+ middlewares** and **deep radix tree routing** to ensure performance holds under high concurrency.
|
|
37
|
-
|
|
38
30
|
<!-- MARKER: PERFORMANCE_TABLE_START -->
|
|
39
31
|
|
|
40
32
|
| Framework | Latency | Speed |
|
|
41
33
|
| :--- | :--- | :--- |
|
|
42
|
-
| **BareJS** | **1.
|
|
43
|
-
| Elysia | 2.
|
|
44
|
-
| Hono |
|
|
34
|
+
| **BareJS** | **1.79 µs** | **Baseline** |
|
|
35
|
+
| Elysia | 2.44 µs | 1.36x slower |
|
|
36
|
+
| Hono | 9.86 µs | 5.52x slower |
|
|
45
37
|
|
|
46
|
-
> Last Updated: 2026-01-
|
|
38
|
+
> Last Updated: 2026-01-14 (github action)
|
|
47
39
|
|
|
48
40
|
<!-- MARKER: PERFORMANCE_TABLE_END -->
|
|
49
|
-
> [!TIP]
|
|
50
|
-
> **View our [Continuous Benchmark Dashboard](https://xarhang.github.io/bareJS/dev/benchmarks/)** for historical data and detailed performance trends across different hardware.
|
|
51
41
|
|
|
42
|
+
> [!TIP]
|
|
43
|
+
> **View our [Continuous Benchmark Dashboard**](https://xarhang.github.io/bareJS/dev/benchmarks/) for historical data and detailed performance trends.
|
|
52
44
|
|
|
53
45
|
## 🚀 Key Features
|
|
54
46
|
|
|
55
47
|
* **JIT Pipeline Compilation**: Routes and middleware chains are flattened into a single function at runtime.
|
|
56
48
|
* **Object Pooling**: Recycles `Context` objects via a circular buffer, drastically reducing GC pressure.
|
|
57
|
-
* **
|
|
49
|
+
* **Internal High-Performance Logger**: Zero-overhead logging integrated directly into the JIT engine.
|
|
50
|
+
* **Precise Radix Router**: v0.1.46 introduces optimized segment matching for deep-nested paths.
|
|
58
51
|
* **Mechanical Sympathy**: Intentionally designed to align with V8's optimization and Bun's I/O.
|
|
59
52
|
|
|
60
53
|
## 🛠️ Installation
|
|
@@ -70,7 +63,12 @@ bun add barejs
|
|
|
70
63
|
import { BareJS, type Context } from 'barejs';
|
|
71
64
|
|
|
72
65
|
const app = new BareJS();
|
|
66
|
+
|
|
67
|
+
// Enable Internal Logger
|
|
68
|
+
app.useLog(true);
|
|
69
|
+
|
|
73
70
|
app.get('/', (ctx: Context) => ctx.json({ hello: "world" }));
|
|
71
|
+
|
|
74
72
|
app.listen(3000);
|
|
75
73
|
|
|
76
74
|
```
|
|
@@ -79,9 +77,23 @@ app.listen(3000);
|
|
|
79
77
|
|
|
80
78
|
## 📘 Comprehensive Guide
|
|
81
79
|
|
|
82
|
-
### 1.
|
|
80
|
+
### 1. ⚡ Standardized Response & Chaining
|
|
83
81
|
|
|
84
|
-
BareJS
|
|
82
|
+
BareJS v0.1.46 provides a fluent API for building responses.
|
|
83
|
+
|
|
84
|
+
```typescript
|
|
85
|
+
app.get('/api/v1/health', (ctx: Context) => {
|
|
86
|
+
// Chainable status and standardized send helper
|
|
87
|
+
return ctx.status(200).send("System is healthy", {
|
|
88
|
+
uptime: process.uptime()
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
// Output: { "status": "success", "msg": "System is healthy", "uptime": ... }
|
|
93
|
+
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### 2. 🛡️ Security & Authentication (Dual-API)
|
|
85
97
|
|
|
86
98
|
```typescript
|
|
87
99
|
import { bareAuth, createToken, Password, Hash, type Context } from 'barejs';
|
|
@@ -103,37 +115,23 @@ app.post('/register', async (ctx: Context) => {
|
|
|
103
115
|
}
|
|
104
116
|
});
|
|
105
117
|
|
|
106
|
-
// Protect routes
|
|
118
|
+
// Protect routes with built-in JWT middleware
|
|
107
119
|
app.get('/me', bareAuth(SECRET), (ctx: Context) => {
|
|
108
|
-
return { user: ctx.get('user') };
|
|
120
|
+
return ctx.send("Authenticated", { user: ctx.get('user') });
|
|
109
121
|
});
|
|
110
122
|
|
|
111
123
|
```
|
|
112
124
|
|
|
113
|
-
### 2. ⚙️ Configuration
|
|
114
|
-
|
|
115
|
-
Customize your engine by creating a `bare.config.ts` in your root directory.
|
|
116
|
-
|
|
117
|
-
```typescript
|
|
118
|
-
// bare.config.ts
|
|
119
|
-
export default {
|
|
120
|
-
port: 3000,
|
|
121
|
-
hash: {
|
|
122
|
-
algorithm: "argon2id",
|
|
123
|
-
memoryCost: 65536, // 64MB
|
|
124
|
-
timeCost: 2
|
|
125
|
-
}
|
|
126
|
-
};
|
|
127
|
-
|
|
128
|
-
```
|
|
129
|
-
|
|
130
125
|
### 3. ✅ Data Validation (3 Styles)
|
|
131
126
|
|
|
127
|
+
BareJS is the only engine that offers JIT-optimized validation paths.
|
|
128
|
+
|
|
132
129
|
```typescript
|
|
133
130
|
import { typebox, zod, native, t, type Context } from 'barejs';
|
|
134
131
|
import { z } from 'zod';
|
|
135
132
|
|
|
136
133
|
// Style A: TypeBox (JIT Optimized - Recommended)
|
|
134
|
+
// Pre-compiled validation to outperform competitors by 55%
|
|
137
135
|
const Schema = t.Object({ name: t.String() });
|
|
138
136
|
app.post('/user', typebox(Schema), (ctx) => ctx.json(ctx.body));
|
|
139
137
|
|
|
@@ -141,14 +139,16 @@ app.post('/user', typebox(Schema), (ctx) => ctx.json(ctx.body));
|
|
|
141
139
|
const ZodSchema = z.object({ age: z.number() });
|
|
142
140
|
app.post('/age', zod(ZodSchema), (ctx) => ctx.json(ctx.body));
|
|
143
141
|
|
|
142
|
+
// Style C: Native (Zero Dependency - Simple Checks)
|
|
143
|
+
app.post('/native', native({ properties: { id: { type: 'number' } } }), (ctx) => ctx.json(ctx.body));
|
|
144
|
+
|
|
144
145
|
```
|
|
145
146
|
|
|
146
|
-
### 4. 🔌 Essential
|
|
147
|
+
### 4. 🔌 Essential Middleware
|
|
147
148
|
|
|
148
149
|
```typescript
|
|
149
|
-
import {
|
|
150
|
+
import { cors, staticFile } from 'barejs';
|
|
150
151
|
|
|
151
|
-
app.use(logger);
|
|
152
152
|
app.use(cors());
|
|
153
153
|
app.use(staticFile("public"));
|
|
154
154
|
|
|
@@ -162,9 +162,12 @@ app.use(staticFile("public"));
|
|
|
162
162
|
| --- | --- |
|
|
163
163
|
| `ctx.req` | Raw incoming Bun `Request` object. |
|
|
164
164
|
| `ctx.params` | Route parameters (e.g., `:id`). |
|
|
165
|
-
| `ctx.jsonBody()` | **[Async]** Parses and caches JSON body. |
|
|
166
|
-
| `ctx.status(code)` | Sets the HTTP status code. |
|
|
167
|
-
| `ctx.
|
|
165
|
+
| `ctx.jsonBody()` | **[Async]** Parses and caches JSON body for performance. |
|
|
166
|
+
| `ctx.status(code)` | Sets the HTTP status code (**Chainable**). |
|
|
167
|
+
| `ctx.send(msg, ext)` | Returns a standardized JSON response. |
|
|
168
|
+
| `ctx.json(data)` | Returns an optimized raw JSON response. |
|
|
169
|
+
| `ctx.setHeader(k, v)` | Sets a response header. |
|
|
170
|
+
| `ctx.set / ctx.get` | Manual storage within the request lifecycle. |
|
|
168
171
|
|
|
169
172
|
---
|
|
170
173
|
|
|
@@ -172,8 +175,10 @@ app.use(staticFile("public"));
|
|
|
172
175
|
|
|
173
176
|
| OS Variable / File | Default | Description |
|
|
174
177
|
| --- | --- | --- |
|
|
175
|
-
| `bare.config.ts` | - | Centralized config for Port and Hash. |
|
|
176
|
-
| `BARE_POOL_SIZE` | `1024` | Context pool size (Must be Power of 2). |
|
|
177
|
-
| `NODE_ENV` | `development` | Set to `production`
|
|
178
|
+
| `bare.config.ts` | - | Centralized config for Port and Hash algorithms. |
|
|
179
|
+
| `BARE_POOL_SIZE` | `1024` | Context pool size (**Must be Power of 2**). |
|
|
180
|
+
| `NODE_ENV` | `development` | Set to `production` to enable peak JIT optimizations. |
|
|
181
|
+
|
|
182
|
+
---
|
|
178
183
|
|
|
179
|
-
**Maintained by [xarhang](https://github.com/xarhang) | License: MIT**
|
|
184
|
+
**Maintained by [xarhang](https://github.com/xarhang) | License: MIT**
|