exisjs 0.5.11 → 0.5.12
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/dist/docs/BENCHMARKS.md +5 -5
- package/dist/docs/content/exisjs-mcp.mdx +97 -0
- package/dist/middleware/compression.d.ts +12 -0
- package/dist/middleware/compression.d.ts.map +1 -1
- package/dist/middleware/compression.js +61 -99
- package/dist/middleware/compression.js.map +1 -1
- package/dist/middleware/middleware.d.ts.map +1 -1
- package/dist/middleware/middleware.js +25 -8
- package/dist/middleware/middleware.js.map +1 -1
- package/dist/middleware/security.d.ts.map +1 -1
- package/dist/middleware/security.js +6 -3
- package/dist/middleware/security.js.map +1 -1
- package/dist/router/router.d.ts.map +1 -1
- package/dist/router/router.js +11 -7
- package/dist/router/router.js.map +1 -1
- package/dist/server/bun-adapter.d.ts.map +1 -1
- package/dist/server/bun-adapter.js +2 -2
- package/dist/server/bun-adapter.js.map +1 -1
- package/dist/server/request-handler.d.ts +7 -0
- package/dist/server/request-handler.d.ts.map +1 -1
- package/dist/server/request-handler.js +37 -2
- package/dist/server/request-handler.js.map +1 -1
- package/dist/server/request.d.ts.map +1 -1
- package/dist/server/request.js +4 -6
- package/dist/server/request.js.map +1 -1
- package/dist/server/route-scanner.d.ts.map +1 -1
- package/dist/server/route-scanner.js +4 -1
- package/dist/server/route-scanner.js.map +1 -1
- package/dist/server/uws-adapter.d.ts +5 -3
- package/dist/server/uws-adapter.d.ts.map +1 -1
- package/dist/server/uws-adapter.js +39 -4
- package/dist/server/uws-adapter.js.map +1 -1
- package/dist/server/ws-orchestrator.d.ts.map +1 -1
- package/dist/server/ws-orchestrator.js +4 -13
- package/dist/server/ws-orchestrator.js.map +1 -1
- package/package.json +10 -10
package/dist/docs/BENCHMARKS.md
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
- **Node:** v26.3.0
|
|
8
8
|
|
|
9
9
|
### Test Configuration
|
|
10
|
-
- **Tool:** autocannon
|
|
10
|
+
- **Tool:** autocannon ^8.0.0
|
|
11
11
|
- **Connections:** 100, **Duration:** 10s, **Pipelining:** 1 (no pipelining)
|
|
12
12
|
- **Trials:** 3 per framework, order randomized each trial, median reported
|
|
13
13
|
- **Warmup:** 2s untimed warmup run before each timed trial
|
|
@@ -18,10 +18,10 @@
|
|
|
18
18
|
|
|
19
19
|
| Framework | Req/Sec (median) | Latency avg (ms) | Latency p50 (ms) | Latency p99 (ms) | Errors | Server backend |
|
|
20
20
|
|---|---|---|---|---|---|---|
|
|
21
|
-
| Express |
|
|
22
|
-
| Fastify |
|
|
23
|
-
| Hono |
|
|
24
|
-
| Exis JS |
|
|
21
|
+
| Express | 25186.19 | 3.36 | 3.00 | 5.00 | 0 | n/a |
|
|
22
|
+
| Fastify | 42916.37 | 2.04 | 2.00 | 3.00 | 0 | n/a |
|
|
23
|
+
| Hono | 40938.19 | 2.08 | 2.00 | 4.00 | 0 | n/a |
|
|
24
|
+
| Exis JS | 53619.20 | 1.17 | 1.00 | 2.00 | 0 | uws |
|
|
25
25
|
|
|
26
26
|
### Handler Parity Note
|
|
27
27
|
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: 'AI Assistants (MCP)'
|
|
3
|
+
description: 'Connect AI agents like Claude and Cursor directly to your ExisJS projects.'
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# ExisJS MCP Server
|
|
7
|
+
|
|
8
|
+
The **Model Context Protocol (MCP)** is an open standard that allows AI coding assistants (like Claude, Cursor, and Google Antigravity) to access external tools and data sources.
|
|
9
|
+
|
|
10
|
+
ExisJS provides an official MCP Server (`@exisjs/mcp`) that acts as a bridge between your AI agent and your local ExisJS workspace. It empowers the AI with the ability to dynamically read your framework documentation offline and flawlessly scaffold idiomatic ExisJS boilerplate code (routes, plugins, gateways, configurations).
|
|
11
|
+
|
|
12
|
+
<Info title="Why use the MCP?">
|
|
13
|
+
Without the MCP, AI agents often hallucinate Express or NestJS syntax when asked to write ExisJS code because ExisJS might not be fully present in their training data. By using the ExisJS MCP, the AI reads the exact documentation for your installed version and uses strict generators to scaffold perfect code.
|
|
14
|
+
</Info>
|
|
15
|
+
|
|
16
|
+
## Prerequisites
|
|
17
|
+
|
|
18
|
+
- **Node.js (version >= 20.19)** installed on your machine.
|
|
19
|
+
- An AI Coding Assistant that supports the Model Context Protocol (e.g., Claude Code, Cursor, Windsurf, or Google Antigravity).
|
|
20
|
+
|
|
21
|
+
## Installation
|
|
22
|
+
|
|
23
|
+
The easiest way to install the MCP server across all your coding agents is by using the `add-mcp` CLI:
|
|
24
|
+
|
|
25
|
+
<div className="my-6 max-w-lg">
|
|
26
|
+
<CopyCommand command="npx add-mcp @exisjs/mcp@latest" />
|
|
27
|
+
</div>
|
|
28
|
+
|
|
29
|
+
Add `-y` to skip the prompt and install to all detected agents. Add `-g` to install globally across all projects.
|
|
30
|
+
|
|
31
|
+
### Manual Configuration
|
|
32
|
+
|
|
33
|
+
If you prefer to configure your AI client manually (or are using an unsupported client), you can add the following JSON to your client's MCP settings file:
|
|
34
|
+
|
|
35
|
+
```json filename="mcp.json"
|
|
36
|
+
{
|
|
37
|
+
"mcpServers": {
|
|
38
|
+
"exisjs-mcp": {
|
|
39
|
+
"command": "npx",
|
|
40
|
+
"args": ["-y", "@exisjs/mcp@latest"]
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
<details>
|
|
47
|
+
<summary className="cursor-pointer font-medium text-foreground py-2">Claude Code Setup</summary>
|
|
48
|
+
|
|
49
|
+
Run the following command in your terminal:
|
|
50
|
+
```bash
|
|
51
|
+
claude mcp add exisjs-mcp npx @exisjs/mcp@latest
|
|
52
|
+
```
|
|
53
|
+
</details>
|
|
54
|
+
|
|
55
|
+
<details>
|
|
56
|
+
<summary className="cursor-pointer font-medium text-foreground py-2">Cursor Setup</summary>
|
|
57
|
+
|
|
58
|
+
1. Open Cursor Settings.
|
|
59
|
+
2. Navigate to **Features > MCP**.
|
|
60
|
+
3. Click **+ Add New MCP Server**.
|
|
61
|
+
4. Type: `exisjs-mcp`
|
|
62
|
+
5. Command: `npx -y @exisjs/mcp@latest`
|
|
63
|
+
</details>
|
|
64
|
+
|
|
65
|
+
## Available Tools
|
|
66
|
+
|
|
67
|
+
Once the MCP server is installed and running, your AI assistant automatically gains access to the following capabilities:
|
|
68
|
+
|
|
69
|
+
### 1. Documentation Readers
|
|
70
|
+
|
|
71
|
+
ExisJS ships its official markdown documentation directly inside the npm package. The MCP server reads these files locally from your `node_modules`.
|
|
72
|
+
|
|
73
|
+
- **`exis_list_local_docs`**: Recursively scans and lists all available ExisJS documentation topics.
|
|
74
|
+
- **`exis_read_local_docs`**: Reads the exact markdown file requested by the AI so it can learn ExisJS best practices.
|
|
75
|
+
|
|
76
|
+
*Because this runs locally, the AI reads the exact documentation that matches the ExisJS version installed in your project, preventing version mismatches!*
|
|
77
|
+
|
|
78
|
+
### 2. Code Generators
|
|
79
|
+
|
|
80
|
+
When you ask the AI to build a new feature, it will use these strict scaffolding tools to generate the correct file structures instead of guessing the syntax.
|
|
81
|
+
|
|
82
|
+
- **`exis_generate_route`**: Scaffolds an idiomatic ExisJS route controller (Functional or OOP).
|
|
83
|
+
- **`exis_generate_plugin`**: Scaffolds a hybrid ExisJS plugin module.
|
|
84
|
+
- **`exis_generate_gateway`**: Scaffolds a WebSockets gateway.
|
|
85
|
+
- **`exis_generate_config`**: Scaffolds the strict `exis.config.ts` configuration system.
|
|
86
|
+
|
|
87
|
+
## Usage Example
|
|
88
|
+
|
|
89
|
+
Once configured, simply open your ExisJS project in your AI IDE and ask it a question!
|
|
90
|
+
|
|
91
|
+
Try asking:
|
|
92
|
+
> *"I want to create a new WebSockets gateway in ExisJS. Can you read the docs on how Gateways work and then scaffold one for me?"*
|
|
93
|
+
|
|
94
|
+
The AI will:
|
|
95
|
+
1. Use `exis_list_local_docs` to find the documentation on Gateways.
|
|
96
|
+
2. Use `exis_read_local_docs` to learn the exact syntax for your ExisJS version.
|
|
97
|
+
3. Use `exis_generate_gateway` to safely write the boilerplate into your codebase.
|
|
@@ -1,3 +1,15 @@
|
|
|
1
1
|
import type { Handler } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Compression middleware — optimized to avoid monkey-patching ServerResponse methods.
|
|
4
|
+
*
|
|
5
|
+
* Previous implementation replaced res.raw.write/end/setHeader/writeHead with new closures
|
|
6
|
+
* on every request, which:
|
|
7
|
+
* 1. Created 5+ closure objects per request (GC pressure)
|
|
8
|
+
* 2. Destroyed V8's hidden class optimization for ServerResponse
|
|
9
|
+
*
|
|
10
|
+
* This version hooks into the ExisResponse's _onFinish callback and overrides the
|
|
11
|
+
* high-level json()/send()/end() methods on ExisResponse instead. Since ExisResponse
|
|
12
|
+
* is our own object (and already pooled), modifying it doesn't deoptimize Node internals.
|
|
13
|
+
*/
|
|
2
14
|
export declare function compression(): Handler;
|
|
3
15
|
//# sourceMappingURL=compression.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compression.d.ts","sourceRoot":"","sources":["../../src/middleware/compression.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAqB,MAAM,UAAU,CAAA;AAE1D,wBAAgB,WAAW,IAAI,OAAO,
|
|
1
|
+
{"version":3,"file":"compression.d.ts","sourceRoot":"","sources":["../../src/middleware/compression.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAqB,MAAM,UAAU,CAAA;AAE1D;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,IAAI,OAAO,CAiFrC"}
|
|
@@ -5,6 +5,18 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.compression = compression;
|
|
7
7
|
const node_zlib_1 = __importDefault(require("node:zlib"));
|
|
8
|
+
/**
|
|
9
|
+
* Compression middleware — optimized to avoid monkey-patching ServerResponse methods.
|
|
10
|
+
*
|
|
11
|
+
* Previous implementation replaced res.raw.write/end/setHeader/writeHead with new closures
|
|
12
|
+
* on every request, which:
|
|
13
|
+
* 1. Created 5+ closure objects per request (GC pressure)
|
|
14
|
+
* 2. Destroyed V8's hidden class optimization for ServerResponse
|
|
15
|
+
*
|
|
16
|
+
* This version hooks into the ExisResponse's _onFinish callback and overrides the
|
|
17
|
+
* high-level json()/send()/end() methods on ExisResponse instead. Since ExisResponse
|
|
18
|
+
* is our own object (and already pooled), modifying it doesn't deoptimize Node internals.
|
|
19
|
+
*/
|
|
8
20
|
function compression() {
|
|
9
21
|
return (req, res, next) => {
|
|
10
22
|
const acceptEncoding = req.headers['accept-encoding'] || '';
|
|
@@ -19,115 +31,65 @@ function compression() {
|
|
|
19
31
|
if (!encoding || req.method === 'HEAD') {
|
|
20
32
|
return next();
|
|
21
33
|
}
|
|
22
|
-
|
|
23
|
-
const
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
: undefined;
|
|
29
|
-
res.raw.setHeader = function (name, value) {
|
|
30
|
-
if (name.toLowerCase() === 'content-length') {
|
|
31
|
-
return this;
|
|
32
|
-
}
|
|
33
|
-
return originalRawSetHeader(name, value);
|
|
34
|
-
};
|
|
35
|
-
if (originalRawWriteHead) {
|
|
36
|
-
res.raw.writeHead = function (statusCode, reasonOrHeaders, headers) {
|
|
37
|
-
const actualHeaders = headers || reasonOrHeaders;
|
|
38
|
-
if (actualHeaders && typeof actualHeaders === 'object') {
|
|
39
|
-
const cleaned = {};
|
|
40
|
-
for (const [k, v] of Object.entries(actualHeaders)) {
|
|
41
|
-
if (k.toLowerCase() !== 'content-length') {
|
|
42
|
-
cleaned[k] = v;
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
if (headers) {
|
|
46
|
-
reasonOrHeaders = cleaned;
|
|
47
|
-
}
|
|
48
|
-
else {
|
|
49
|
-
reasonOrHeaders = cleaned;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
return originalRawWriteHead(statusCode, reasonOrHeaders, headers);
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
let onFinishCallback;
|
|
56
|
-
const startCompression = () => {
|
|
57
|
-
if (stream)
|
|
58
|
-
return; // already started
|
|
59
|
-
originalRawSetHeader('Content-Encoding', encoding);
|
|
60
|
-
originalRawSetHeader('Vary', 'Accept-Encoding');
|
|
61
|
-
if (encoding === 'br') {
|
|
62
|
-
stream = node_zlib_1.default.createBrotliCompress();
|
|
63
|
-
}
|
|
64
|
-
else if (encoding === 'gzip') {
|
|
65
|
-
stream = node_zlib_1.default.createGzip();
|
|
66
|
-
}
|
|
67
|
-
else if (encoding === 'deflate') {
|
|
68
|
-
stream = node_zlib_1.default.createDeflate();
|
|
69
|
-
}
|
|
70
|
-
if (stream) {
|
|
71
|
-
stream.on('data', (chunk) => {
|
|
72
|
-
originalWrite(chunk);
|
|
73
|
-
});
|
|
74
|
-
stream.on('end', () => {
|
|
75
|
-
originalEnd(undefined, undefined, onFinishCallback);
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
};
|
|
79
|
-
res.raw.write = function (chunk, encodingOrCb, cb) {
|
|
34
|
+
// Store originals from the ExisResponse wrapper (our own object — safe to override)
|
|
35
|
+
const originalEnd = res.end.bind(res);
|
|
36
|
+
const selectedEncoding = encoding;
|
|
37
|
+
// Override ExisResponse.end() to compress the final payload in a single pass.
|
|
38
|
+
// This avoids touching ServerResponse's hidden class entirely.
|
|
39
|
+
res.end = function (data) {
|
|
80
40
|
if (res.raw.writableEnded)
|
|
81
|
-
return
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
return
|
|
86
|
-
}
|
|
87
|
-
return originalWrite(chunk, encodingOrCb, cb);
|
|
88
|
-
};
|
|
89
|
-
let ended = false;
|
|
90
|
-
res.raw.end = function (chunk, encodingOrCb, cb) {
|
|
91
|
-
if (res.raw.writableEnded || ended)
|
|
92
|
-
return this;
|
|
93
|
-
ended = true;
|
|
94
|
-
let callback;
|
|
95
|
-
let encodingArg;
|
|
96
|
-
if (typeof chunk === 'function') {
|
|
97
|
-
callback = chunk;
|
|
98
|
-
chunk = undefined;
|
|
99
|
-
}
|
|
100
|
-
else if (typeof encodingOrCb === 'function') {
|
|
101
|
-
callback = encodingOrCb;
|
|
102
|
-
encodingOrCb = undefined;
|
|
103
|
-
}
|
|
104
|
-
else if (typeof cb === 'function') {
|
|
105
|
-
callback = cb;
|
|
41
|
+
return;
|
|
42
|
+
// Skip compression for empty responses
|
|
43
|
+
if (!data) {
|
|
44
|
+
originalEnd(data);
|
|
45
|
+
return;
|
|
106
46
|
}
|
|
107
|
-
|
|
108
|
-
|
|
47
|
+
const buf = typeof data === 'string'
|
|
48
|
+
? Buffer.from(data, 'utf8')
|
|
49
|
+
: Buffer.isBuffer(data)
|
|
50
|
+
? data
|
|
51
|
+
: Buffer.from(String(data), 'utf8');
|
|
52
|
+
// For small payloads (< 1KB), compression overhead outweighs savings
|
|
53
|
+
if (buf.length < 1024) {
|
|
54
|
+
originalEnd(data);
|
|
55
|
+
return;
|
|
109
56
|
}
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
57
|
+
// Set encoding headers
|
|
58
|
+
res.raw.setHeader('Content-Encoding', selectedEncoding);
|
|
59
|
+
res.raw.setHeader('Vary', 'Accept-Encoding');
|
|
60
|
+
// Remove Content-Length since compressed size will differ
|
|
61
|
+
res.raw.removeHeader('Content-Length');
|
|
62
|
+
// Compress synchronously for small-to-medium payloads to avoid extra async overhead
|
|
63
|
+
let compressed;
|
|
64
|
+
try {
|
|
65
|
+
if (selectedEncoding === 'br') {
|
|
66
|
+
compressed = node_zlib_1.default.brotliCompressSync(buf);
|
|
67
|
+
}
|
|
68
|
+
else if (selectedEncoding === 'gzip') {
|
|
69
|
+
compressed = node_zlib_1.default.gzipSync(buf);
|
|
118
70
|
}
|
|
119
71
|
else {
|
|
120
|
-
|
|
72
|
+
compressed = node_zlib_1.default.deflateSync(buf);
|
|
121
73
|
}
|
|
122
74
|
}
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
75
|
+
catch {
|
|
76
|
+
// If compression fails, send uncompressed
|
|
77
|
+
originalEnd(data);
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
res.raw.setHeader('Content-Length', compressed.length);
|
|
81
|
+
// Fire _onFinish callbacks via the original end path
|
|
82
|
+
if (res._onFinish.length > 0) {
|
|
83
|
+
res.raw.end(compressed, () => {
|
|
84
|
+
// eslint-disable-next-line @typescript-eslint/prefer-for-of
|
|
85
|
+
for (let i = 0; i < res._onFinish.length; i++) {
|
|
86
|
+
res._onFinish[i]();
|
|
87
|
+
}
|
|
88
|
+
});
|
|
126
89
|
}
|
|
127
90
|
else {
|
|
128
|
-
|
|
91
|
+
res.raw.end(compressed);
|
|
129
92
|
}
|
|
130
|
-
return this;
|
|
131
93
|
};
|
|
132
94
|
next();
|
|
133
95
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compression.js","sourceRoot":"","sources":["../../src/middleware/compression.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"compression.js","sourceRoot":"","sources":["../../src/middleware/compression.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/middleware/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACzE,OAAO,EACL,eAAe,EAEhB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EACL,SAAS,EAEV,MAAM,kBAAkB,CAAA;AAKzB,wBAAgB,IAAI,CAAC,MAAM,GAAE,UAAe,GAAG,OAAO,CAwFrD;AAMD,wBAAgB,SAAS,IAAI,OAAO,CAenC;AAID,wBAAgB,aAAa,CAC3B,cAAc,GAAE,MAAM,GAAG,YAAiB,GACzC,OAAO,
|
|
1
|
+
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/middleware/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACzE,OAAO,EACL,eAAe,EAEhB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EACL,SAAS,EAEV,MAAM,kBAAkB,CAAA;AAKzB,wBAAgB,IAAI,CAAC,MAAM,GAAE,UAAe,GAAG,OAAO,CAwFrD;AAMD,wBAAgB,SAAS,IAAI,OAAO,CAenC;AAID,wBAAgB,aAAa,CAC3B,cAAc,GAAE,MAAM,GAAG,YAAiB,GACzC,OAAO,CAqDT;AAID,eAAO,MAAM,QAAQ,EAAE,OAQtB,CAAA;AAID,OAAO,EAAE,WAAW,IAAI,QAAQ,EAAE,MAAM,eAAe,CAAA;AACvD,OAAO,EACL,MAAM,EACN,IAAI,EACJ,OAAO,EACP,GAAG,EACH,aAAa,EACb,UAAU,GACX,MAAM,YAAY,CAAA;AACnB,YAAY,EACV,WAAW,EACX,cAAc,EACd,iBAAiB,EACjB,aAAa,GACd,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACxC,YAAY,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AACpD,OAAO,EAAE,eAAe,IAAI,KAAK,EAAE,MAAM,SAAS,CAAA;AAClD,OAAO,EAAE,gBAAgB,IAAI,MAAM,EAAE,MAAM,UAAU,CAAA;AACrD,OAAO,EAAE,sBAAsB,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAA;AACvE,OAAO,EAAE,kBAAkB,IAAI,QAAQ,EAAE,MAAM,aAAa,CAAA;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC/C,cAAc,SAAS,CAAA;AACvB,cAAc,QAAQ,CAAA;AAEtB,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAO,GAChC,OAAO,CA0ET;AAID,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,eAAe,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAA;IAE5C,KAAK,CAAC,EAAE,eAAe,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAA;IAE7C,MAAM,CAAC,EAAE,eAAe,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAA;CAC/C;AAED,wBAAgB,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAiCxD;AAID,wBAAgB,cAAc,IAAI,OAAO,CAKxC;AAED,cAAc,eAAe,CAAA"}
|
|
@@ -118,18 +118,35 @@ function requestLogger(loggerOrConfig = {}) {
|
|
|
118
118
|
: (0, logger_1.createLogger)(loggerOrConfig);
|
|
119
119
|
return (req, res, next) => {
|
|
120
120
|
const start = Date.now();
|
|
121
|
-
//
|
|
122
|
-
req.log
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
121
|
+
// Lazy child logger creation — only allocate when req.log is first accessed.
|
|
122
|
+
// Most successful requests never call req.log, saving a Pino child allocation.
|
|
123
|
+
let _childLog = null;
|
|
124
|
+
const parentLog = log;
|
|
125
|
+
Object.defineProperty(req, 'log', {
|
|
126
|
+
get() {
|
|
127
|
+
if (!_childLog) {
|
|
128
|
+
_childLog = parentLog.child({
|
|
129
|
+
requestId: req.requestId,
|
|
130
|
+
method: req.method,
|
|
131
|
+
url: req.path,
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
return _childLog;
|
|
135
|
+
},
|
|
136
|
+
set(v) {
|
|
137
|
+
_childLog = v;
|
|
138
|
+
},
|
|
139
|
+
configurable: true,
|
|
140
|
+
enumerable: true,
|
|
126
141
|
});
|
|
127
142
|
// Use _onFinish to capture response timing without deoptimizing V8 hidden classes
|
|
128
143
|
res._onFinish.push(() => {
|
|
129
144
|
const responseTime = Date.now() - start;
|
|
130
145
|
const logData = { statusCode: res.statusCode, responseTime };
|
|
146
|
+
// Use child if already created, otherwise use parent with inline context
|
|
147
|
+
const logger = _childLog || parentLog;
|
|
131
148
|
if (res.statusCode >= 500) {
|
|
132
|
-
|
|
149
|
+
logger.error(logData, `${req.method} ${req.path}`);
|
|
133
150
|
}
|
|
134
151
|
else if (res.statusCode >= 400) {
|
|
135
152
|
// Silently ignore favicon 404s to reduce noise
|
|
@@ -137,11 +154,11 @@ function requestLogger(loggerOrConfig = {}) {
|
|
|
137
154
|
// ignore
|
|
138
155
|
}
|
|
139
156
|
else {
|
|
140
|
-
|
|
157
|
+
logger.warn(logData, `${req.method} ${req.path}`);
|
|
141
158
|
}
|
|
142
159
|
}
|
|
143
160
|
else {
|
|
144
|
-
|
|
161
|
+
logger.info(logData, `${req.method} ${req.path}`);
|
|
145
162
|
}
|
|
146
163
|
});
|
|
147
164
|
next();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/middleware/middleware.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAaA,oBAwFC;AAMD,8BAeC;AAID,
|
|
1
|
+
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/middleware/middleware.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../../src/middleware/security.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAmC,MAAM,UAAU,CAAA;AAKxE,MAAM,WAAW,aAAa;IAC5B,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,IAAI,CAAC,EAAE,OAAO,GAAG;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,iBAAiB,EAAE,OAAO,CAAA;KAAE,CAAA;IAC/D,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,UAAU,CAAC,EAAE,OAAO,GAAG;QAAE,MAAM,EAAE,MAAM,GAAG,YAAY,CAAA;KAAE,CAAA;CACzD;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,
|
|
1
|
+
{"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../../src/middleware/security.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAmC,MAAM,UAAU,CAAA;AAKxE,MAAM,WAAW,aAAa;IAC5B,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,IAAI,CAAC,EAAE,OAAO,GAAG;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,iBAAiB,EAAE,OAAO,CAAA;KAAE,CAAA;IAC/D,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,UAAU,CAAC,EAAE,OAAO,GAAG;QAAE,MAAM,EAAE,MAAM,GAAG,YAAY,CAAA;KAAE,CAAA;CACzD;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAuE3D;AAID,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,aAAa,CAAC,EAAE;QACd,QAAQ,CAAC,EAAE,OAAO,CAAA;QAClB,MAAM,CAAC,EAAE,OAAO,CAAA;QAChB,QAAQ,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAA;QACpC,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,MAAM,CAAC,EAAE,MAAM,CAAA;KAChB,CAAA;CACF;AA2BD;;;;GAIG;AACH,wBAAgB,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAmElD;AAID,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc,GAAG,OAAO,CAqB5D;AAID,wBAAgB,GAAG,IAAI,OAAO,CAqB7B;AAmBD,wBAAgB,aAAa,IAAI,OAAO,CASvC;AAID,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED,wBAAgB,UAAU,CACxB,OAAO,GAAE,iBAAmC,GAC3C,OAAO,CAYT"}
|
|
@@ -48,7 +48,9 @@ function helmet(options = {}) {
|
|
|
48
48
|
staticHeaders['Content-Security-Policy'] = options.contentSecurityPolicy;
|
|
49
49
|
}
|
|
50
50
|
const hidePoweredBy = options.hidePoweredBy !== false;
|
|
51
|
-
const
|
|
51
|
+
const headerKeys = Object.keys(staticHeaders);
|
|
52
|
+
const headerValues = Object.values(staticHeaders);
|
|
53
|
+
const headerCount = headerKeys.length;
|
|
52
54
|
return (req, res, next) => {
|
|
53
55
|
// Generate CSP nonce if needed
|
|
54
56
|
if (options.contentSecurityPolicy &&
|
|
@@ -60,8 +62,9 @@ function helmet(options = {}) {
|
|
|
60
62
|
if (hidePoweredBy) {
|
|
61
63
|
res.removeHeader('X-Powered-By');
|
|
62
64
|
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
+
// Indexed loop — avoids allocating an iterator object on every request
|
|
66
|
+
for (let i = 0; i < headerCount; i++) {
|
|
67
|
+
res.setHeader(headerKeys[i], headerValues[i]);
|
|
65
68
|
}
|
|
66
69
|
next();
|
|
67
70
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"security.js","sourceRoot":"","sources":["../../src/middleware/security.ts"],"names":[],"mappings":";;;;;AAkBA,
|
|
1
|
+
{"version":3,"file":"security.js","sourceRoot":"","sources":["../../src/middleware/security.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/router/router.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/router/router.ts"],"names":[],"mappings":"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"}
|
package/dist/router/router.js
CHANGED
|
@@ -393,6 +393,16 @@ function runHandlers(handlers, req, res, done, filters) {
|
|
|
393
393
|
}
|
|
394
394
|
let index = 0;
|
|
395
395
|
const total = handlers.length;
|
|
396
|
+
// Track whether the current handler's next() was already called
|
|
397
|
+
let nextCalledForCurrentHandler = false;
|
|
398
|
+
// Shared safeNext — guards against double next() calls without a new closure per handler
|
|
399
|
+
// Defined OUTSIDE next() to avoid allocation per iteration
|
|
400
|
+
const safeNext = (err) => {
|
|
401
|
+
if (nextCalledForCurrentHandler)
|
|
402
|
+
return;
|
|
403
|
+
nextCalledForCurrentHandler = true;
|
|
404
|
+
return next(err);
|
|
405
|
+
};
|
|
396
406
|
const next = (err) => {
|
|
397
407
|
if (err) {
|
|
398
408
|
if (filters && filters.length > 0) {
|
|
@@ -426,14 +436,8 @@ function runHandlers(handlers, req, res, done, filters) {
|
|
|
426
436
|
return;
|
|
427
437
|
}
|
|
428
438
|
const handler = handlers[index++];
|
|
439
|
+
nextCalledForCurrentHandler = false;
|
|
429
440
|
let result;
|
|
430
|
-
let calledNext = false;
|
|
431
|
-
const safeNext = (err) => {
|
|
432
|
-
if (calledNext)
|
|
433
|
-
return;
|
|
434
|
-
calledNext = true;
|
|
435
|
-
return next(err);
|
|
436
|
-
};
|
|
437
441
|
try {
|
|
438
442
|
result = handler(req, res, safeNext);
|
|
439
443
|
}
|