jeasx 2.4.0 β 2.4.2
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/CHANGELOG.md +35 -27
- package/README.md +2 -2
- package/package.json +6 -4
- package/serverless.js +4 -6
- package/serverless.js.map +1 -1
- package/serverless.ts +7 -6
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 2026-03-05 - Jeasx 2.4.2 released
|
|
4
|
+
|
|
5
|
+
π Just a patch release to update Fastify to fix [CVE-2026-3419](https://github.com/fastify/fastify/security/advisories/GHSA-573f-x89g-hqp9).
|
|
6
|
+
|
|
7
|
+
Jeasx uses from now on [trusted publishing for npm packages](https://docs.npmjs.com/trusted-publishers) to release new versions.
|
|
8
|
+
|
|
9
|
+
Dependency updates: `fastify@5.8.1`, `jsx-async-runtime@2.0.3`
|
|
10
|
+
|
|
11
|
+
## 2026-03-02 - Jeasx 2.4.1 released
|
|
12
|
+
|
|
13
|
+
π This release introduces route prop inheritance from guards. Guards can return objects whose entries are used as additional props for your routes. Previously, only props from the closest guard were used. With this update, props from all guards along the route are collected and passed down. If multiple guards provide props with the same key, the value from the guard nearest to the route takes precedence and overwrites earlier ones.
|
|
14
|
+
|
|
15
|
+
Dependency updates: `@types/node@25.3.3`
|
|
16
|
+
|
|
3
17
|
## 2026-02-20 - Jeasx 2.4.0 released
|
|
4
18
|
|
|
5
19
|
π This release is both a step forward and a step back: the recently introduced support for MDX has been removed from the core project. Jeasx aims to keep its core as lean as possible, so this change aligns with the project's overall goals. Since MDX is not essential for every Jeasx website or application, it makes sense to move it out of the core.
|
|
@@ -25,16 +39,16 @@ export default {
|
|
|
25
39
|
development: process.env.NODE_ENV === "development",
|
|
26
40
|
jsxImportSource: "jsx-async-runtime",
|
|
27
41
|
elementAttributeNameCase: "html",
|
|
28
|
-
stylePropertyNameCase: "css"
|
|
29
|
-
})
|
|
30
|
-
]
|
|
42
|
+
stylePropertyNameCase: "css",
|
|
43
|
+
}),
|
|
44
|
+
],
|
|
31
45
|
}),
|
|
32
46
|
|
|
33
47
|
/** @type {() => import("esbuild").BuildOptions} */
|
|
34
48
|
ESBUILD_BROWSER_OPTIONS: () => ({
|
|
35
|
-
target: ["chrome130", "edge130", "firefox130", "safari18"]
|
|
36
|
-
})
|
|
37
|
-
}
|
|
49
|
+
target: ["chrome130", "edge130", "firefox130", "safari18"],
|
|
50
|
+
}),
|
|
51
|
+
};
|
|
38
52
|
```
|
|
39
53
|
|
|
40
54
|
The existing configuration options for Fastify (such as `FASTIFY_SERVER_OPTIONS`, `FASTIFY_COOKIE_OPTIONS`, `FASTIFY_MULTIPART_OPTIONS`, `FASTIFY_STATIC_OPTIONS`) now require a minor change: they must be defined as functions instead of plain objects.
|
|
@@ -53,14 +67,14 @@ export default {
|
|
|
53
67
|
/** @type {() => import("fastify").FastifyServerOptions} */
|
|
54
68
|
FASTIFY_SERVER_OPTIONS: () => ({
|
|
55
69
|
disableRequestLogging: NODE_ENV_IS_DEVELOPMENT,
|
|
56
|
-
bodyLimit: 1024 * 1024
|
|
70
|
+
bodyLimit: 1024 * 1024,
|
|
57
71
|
}),
|
|
58
72
|
|
|
59
73
|
/** @type {() => import("@fastify/static").FastifyStaticOptions} */
|
|
60
74
|
FASTIFY_STATIC_OPTIONS: () => ({
|
|
61
75
|
immutable: !NODE_ENV_IS_DEVELOPMENT,
|
|
62
|
-
maxAge: NODE_ENV_IS_DEVELOPMENT ? 0 : "365d"
|
|
63
|
-
})
|
|
76
|
+
maxAge: NODE_ENV_IS_DEVELOPMENT ? 0 : "365d",
|
|
77
|
+
}),
|
|
64
78
|
};
|
|
65
79
|
```
|
|
66
80
|
|
|
@@ -89,15 +103,12 @@ Dependency updates: `fastify@5.7.4`, `@types/node@24.10.10`
|
|
|
89
103
|
π This release introduces support for [MDX](https://mdxjs.com), enabling you to seamlessly embed JSX within Markdown content. Just create a route with a `.mdx` extension, and youβre all set to enhance your websites and blogs with Markdown enriched by dynamic JSX components.
|
|
90
104
|
|
|
91
105
|
```jsx
|
|
92
|
-
import Layout from "./Layout"
|
|
106
|
+
import Layout from "./Layout";
|
|
93
107
|
|
|
94
108
|
<Layout title="MDX - Markdown for the component era">
|
|
95
|
-
# MDX as content companion alongside JSX
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
- Current url: {props.request.url}
|
|
100
|
-
</Layout>
|
|
109
|
+
# MDX as content companion alongside JSX You can easily access existing `props` in MDX: - Current
|
|
110
|
+
url: {props.request.url}
|
|
111
|
+
</Layout>;
|
|
101
112
|
```
|
|
102
113
|
|
|
103
114
|
You can also create MDX-based components for use within JSX by importing them with their full `.mdx` file extension into your JSX routes or components.
|
|
@@ -117,10 +128,10 @@ export default {
|
|
|
117
128
|
/** @type import("@mdx-js/esbuild").Options */
|
|
118
129
|
ESBUILD_MDX_OPTIONS: {
|
|
119
130
|
remarkPlugins: [[remarkGFM, { singleTilde: false }]],
|
|
120
|
-
rehypePlugins: [rehypePrismPlus, [rehypeSlug, { prefix: "jeasx-" }]]
|
|
121
|
-
}
|
|
131
|
+
rehypePlugins: [rehypePrismPlus, [rehypeSlug, { prefix: "jeasx-" }]],
|
|
132
|
+
},
|
|
122
133
|
//...
|
|
123
|
-
}
|
|
134
|
+
};
|
|
124
135
|
```
|
|
125
136
|
|
|
126
137
|
For a full overview of available configuration options and plugins, check out the excellent documentation of [@mdx-js/esbuild](https://mdxjs.com/packages/esbuild).
|
|
@@ -130,9 +141,9 @@ For a full overview of available configuration options and plugins, check out th
|
|
|
130
141
|
```js
|
|
131
142
|
export default {
|
|
132
143
|
/** @type import("esbuild").BuildOptions["target"] */
|
|
133
|
-
ESBUILD_BROWSER_TARGET: ["chrome130", "edge130", "firefox130", "safari18"]
|
|
144
|
+
ESBUILD_BROWSER_TARGET: ["chrome130", "edge130", "firefox130", "safari18"],
|
|
134
145
|
//...
|
|
135
|
-
}
|
|
146
|
+
};
|
|
136
147
|
```
|
|
137
148
|
|
|
138
149
|
Dependency updates: `fastify@5.7.2`, `@fastify/multipart@9.4.0`
|
|
@@ -220,10 +231,7 @@ import { gzip } from "node:zlib";
|
|
|
220
231
|
|
|
221
232
|
export default function ({ request, reply }) {
|
|
222
233
|
this.responseHandler = (payload) => {
|
|
223
|
-
if (
|
|
224
|
-
typeof payload === "string" &&
|
|
225
|
-
request.headers["accept-encoding"]?.includes("gzip")
|
|
226
|
-
) {
|
|
234
|
+
if (typeof payload === "string" && request.headers["accept-encoding"]?.includes("gzip")) {
|
|
227
235
|
reply.header("content-encoding", "gzip");
|
|
228
236
|
return promisify(gzip)(payload);
|
|
229
237
|
} else {
|
|
@@ -318,7 +326,7 @@ This change makes the required code for handling form body requests much easier:
|
|
|
318
326
|
```js
|
|
319
327
|
// Change this code...
|
|
320
328
|
const file = await request.file();
|
|
321
|
-
const upload = await file.toBuffer()
|
|
329
|
+
const upload = await file.toBuffer();
|
|
322
330
|
const format = file.fields["format"]["value"];
|
|
323
331
|
|
|
324
332
|
// ... to this code.
|
|
@@ -346,7 +354,7 @@ To set up an error handler, simply register it in a route of your choice:
|
|
|
346
354
|
this.errorHandler = async (error) => {
|
|
347
355
|
console.error("β", error);
|
|
348
356
|
return <h1>Internal error</h1>;
|
|
349
|
-
}
|
|
357
|
+
};
|
|
350
358
|
```
|
|
351
359
|
|
|
352
360
|
An error handler is called with this as context, allowing easy access to your context setup.
|
package/README.md
CHANGED
package/package.json
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "jeasx",
|
|
3
|
-
"version": "2.4.
|
|
3
|
+
"version": "2.4.2",
|
|
4
4
|
"description": "Jeasx - the ease of JSX with the power of SSR",
|
|
5
5
|
"keywords": [
|
|
6
|
+
"async",
|
|
7
|
+
"esbuild",
|
|
6
8
|
"fastify",
|
|
7
9
|
"jsx",
|
|
8
10
|
"node",
|
|
@@ -31,9 +33,9 @@
|
|
|
31
33
|
"@fastify/formbody": "8.0.2",
|
|
32
34
|
"@fastify/multipart": "9.4.0",
|
|
33
35
|
"@fastify/static": "9.0.0",
|
|
34
|
-
"@types/node": "25.3.
|
|
36
|
+
"@types/node": "25.3.3",
|
|
35
37
|
"esbuild": "0.27.3",
|
|
36
|
-
"fastify": "5.
|
|
37
|
-
"jsx-async-runtime": "2.0.
|
|
38
|
+
"fastify": "5.8.1",
|
|
39
|
+
"jsx-async-runtime": "2.0.3"
|
|
38
40
|
}
|
|
39
41
|
}
|
package/serverless.js
CHANGED
|
@@ -51,6 +51,7 @@ const modules = /* @__PURE__ */ new Map();
|
|
|
51
51
|
async function handler(request, reply) {
|
|
52
52
|
let response;
|
|
53
53
|
const context = {};
|
|
54
|
+
const props = { request, reply };
|
|
54
55
|
try {
|
|
55
56
|
for (const route of generateRoutes(request.path)) {
|
|
56
57
|
let module = modules.get(route);
|
|
@@ -86,12 +87,8 @@ async function handler(request, reply) {
|
|
|
86
87
|
}
|
|
87
88
|
}
|
|
88
89
|
request.route = route;
|
|
89
|
-
response = // Call functions with
|
|
90
|
-
typeof module.default === "function" ? await module.default.call(context,
|
|
91
|
-
request,
|
|
92
|
-
reply,
|
|
93
|
-
...typeof response === "object" ? response : {}
|
|
94
|
-
}) : module.default;
|
|
90
|
+
response = // Call functions with 'this' context and props as parameters
|
|
91
|
+
typeof module.default === "function" ? await module.default.call(context, props) : module.default;
|
|
95
92
|
if (reply.sent) {
|
|
96
93
|
return;
|
|
97
94
|
} else if (route.endsWith("/[404]")) {
|
|
@@ -102,6 +99,7 @@ async function handler(request, reply) {
|
|
|
102
99
|
} else if (typeof response === "string" || Buffer.isBuffer(response) || isJSX(response)) {
|
|
103
100
|
break;
|
|
104
101
|
} else if (route.endsWith("/[...guard]") && (response === void 0 || typeof response === "object")) {
|
|
102
|
+
Object.assign(props, response);
|
|
105
103
|
continue;
|
|
106
104
|
} else if (reply.statusCode === 404) {
|
|
107
105
|
continue;
|
package/serverless.js.map
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["serverless.ts"],
|
|
4
|
-
"mappings": "AAAA,OAAO,mBAA6C;AACpD,OAAO,qBAAiD;AACxD,OAAO,sBAAmD;AAC1D,OAAO,mBAA6C;AACpD,OAAO,aAKA;AACP,SAAS,mBAAmB;AAC5B,SAAS,YAAY;AACrB,SAAS,eAAe;AACxB,SAAS,YAAY;AACrB,OAAO,SAAS;AAEhB,MAAM,MAAM,MAAM,IAAI;AAEtB,MAAM,MAAM,QAAQ,IAAI;AACxB,MAAM,0BAA0B,QAAQ,IAAI,aAAa;AACzD,MAAM,0BAA0B,KAAK,MAAM,QAAQ,IAAI,OAAO,IAAI;AAUlE,MAAM,iBAAkB,IAAI,mBAAmB,CAACA,aAAYA;AAK5D,IAAO,qBAAQ;AAAA,EACb,QAAQ;AAAA,IACN,QAAQ;AAAA,IACR,GAAI,IAAI,yBAAyB;AAAA,EACnC,CAAC;AACH,EAEG,SAAS,CAACA,aAAY;AACrB,EAAAA,SACG,SAAS,eAAe;AAAA,IACvB,GAAI,IAAI,yBAAyB;AAAA,EACnC,CAAC,EACA,SAAS,iBAAiB;AAAA,IACzB,GAAI,IAAI,2BAA2B;AAAA,EACrC,CAAC,EACA,SAAS,kBAAkB;AAAA,IAC1B,oBAAoB;AAAA,IACpB,GAAI,IAAI,4BAA4B;AAAA,EACtC,CAAC,EACA,SAAS,eAAe;AAAA,IACvB,MAAM,CAAC,CAAC,QAAQ,GAAG,CAAC,QAAQ,SAAS,CAAC,EAAE,IAAI,CAAC,QAAQ,KAAK,KAAK,GAAG,GAAG,CAAC;AAAA,IACtE,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,GAAI,IAAI,yBAAyB;AAAA,EACnC,CAAC,EACA,gBAAgB,SAAS,EAAE,EAC3B,gBAAgB,QAAQ,EAAE,EAC1B,QAAQ,aAAa,OAAO,YAAY;AAEvC,UAAM,QAAQ,QAAQ,IAAI,QAAQ,GAAG;AACrC,YAAQ,OAAO,UAAU,KAAK,QAAQ,MAAM,QAAQ,IAAI,MAAM,GAAG,KAAK;AAAA,EACxE,CAAC,EACA,IAAI,KAAK,OAAO,SAAyB,UAAwB;AAChE,QAAI;AACF,YAAM,UAAU,MAAM,QAAQ,SAAS,KAAK;AAC5C,UACE,MAAM,UAAU,cAAc,MAAM,WACnC,OAAO,YAAY,YAAY,OAAO,SAAS,OAAO,IACvD;AACA,cAAM,KAAK,0BAA0B;AAAA,MACvC;AACA,aAAO;AAAA,IACT,SAAS,OAAO;AACd,cAAQ,MAAM,UAAK,KAAK;AACxB,YAAM;AAAA,IACR;AAAA,EACF,CAAC;AACL,CAAC;AAGH,MAAM,UAAU,oBAAI,IAAmC;AAKvD,eAAe,QAAQ,SAAyB,OAAqB;AACnE,MAAI;AAGJ,QAAM,UAAU,CAAC;
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": ["fastify"]
|
|
6
6
|
}
|
package/serverless.ts
CHANGED
|
@@ -94,6 +94,9 @@ async function handler(request: FastifyRequest, reply: FastifyReply) {
|
|
|
94
94
|
// Global context object for route handlers
|
|
95
95
|
const context = {};
|
|
96
96
|
|
|
97
|
+
// Default props for route handlers
|
|
98
|
+
const props = { request, reply };
|
|
99
|
+
|
|
97
100
|
try {
|
|
98
101
|
// Execute route handlers for current request
|
|
99
102
|
for (const route of generateRoutes(request.path)) {
|
|
@@ -145,13 +148,9 @@ async function handler(request: FastifyRequest, reply: FastifyReply) {
|
|
|
145
148
|
request.route = route;
|
|
146
149
|
|
|
147
150
|
response =
|
|
148
|
-
// Call functions with
|
|
151
|
+
// Call functions with 'this' context and props as parameters
|
|
149
152
|
typeof module.default === "function"
|
|
150
|
-
? await module.default.call(context,
|
|
151
|
-
request,
|
|
152
|
-
reply,
|
|
153
|
-
...(typeof response === "object" ? response : {}),
|
|
154
|
-
})
|
|
153
|
+
? await module.default.call(context, props)
|
|
155
154
|
: module.default; // otherwise return default export
|
|
156
155
|
|
|
157
156
|
if (reply.sent) {
|
|
@@ -169,6 +168,8 @@ async function handler(request: FastifyRequest, reply: FastifyReply) {
|
|
|
169
168
|
route.endsWith("/[...guard]") &&
|
|
170
169
|
(response === undefined || typeof response === "object")
|
|
171
170
|
) {
|
|
171
|
+
// Add object entries from guard to props
|
|
172
|
+
Object.assign(props, response);
|
|
172
173
|
continue;
|
|
173
174
|
} else if (reply.statusCode === 404) {
|
|
174
175
|
continue;
|