jeasx 1.2.2 → 1.4.0

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jeasx",
3
- "version": "1.2.2",
3
+ "version": "1.4.0",
4
4
  "description": "Jeasx - the ease of JSX with the power of SSR",
5
5
  "keywords": [
6
6
  "jsx",
@@ -25,14 +25,14 @@
25
25
  },
26
26
  "dependencies": {
27
27
  "@fastify/cookie": "11.0.2",
28
- "@fastify/formbody": "8.0.1",
29
- "@fastify/multipart": "9.0.1",
30
- "@fastify/static": "8.0.3",
31
- "@types/node": "22.10.5",
28
+ "@fastify/formbody": "8.0.2",
29
+ "@fastify/multipart": "9.0.3",
30
+ "@fastify/static": "8.1.0",
31
+ "@types/node": "22.13.1",
32
32
  "dotenv-flow": "4.1.0",
33
- "esbuild": "0.24.2",
33
+ "esbuild": "0.25.0",
34
34
  "fastify": "5.2.1",
35
- "jsx-async-runtime": "0.6.2",
35
+ "jsx-async-runtime": "0.7.1",
36
36
  "pm2": "5.4.3"
37
37
  },
38
38
  "scripts": {
package/serverless.js CHANGED
@@ -37,6 +37,7 @@ serverless.register(fastifyStatic, {
37
37
  }
38
38
  } : void 0
39
39
  });
40
+ serverless.decorateRequest("route", "");
40
41
  serverless.decorateRequest("path", "");
41
42
  serverless.addHook("onRequest", async (request, reply) => {
42
43
  const index = request.url.indexOf("?");
@@ -49,7 +50,7 @@ serverless.all("*", async (request, reply) => {
49
50
  const context = {};
50
51
  const path = request.path;
51
52
  for (const route of generateRoutes(path)) {
52
- const modulePath = join(cwd, "dist", route);
53
+ const modulePath = join(cwd, "dist", `routes${route}.js`);
53
54
  let module = modulesCache[modulePath];
54
55
  if (module === null) {
55
56
  continue;
@@ -69,6 +70,7 @@ serverless.all("*", async (request, reply) => {
69
70
  module = modulesCache[modulePath] = await import(`file://${modulePath}`);
70
71
  }
71
72
  }
73
+ request.route = route;
72
74
  response = await module.default.call(context, {
73
75
  request,
74
76
  reply,
@@ -78,9 +80,9 @@ serverless.all("*", async (request, reply) => {
78
80
  return;
79
81
  } else if (typeof response === "string" || Buffer.isBuffer(response)) {
80
82
  break;
81
- } else if (route.endsWith("/[...guard].js") && (response === void 0 || !isJSX(response))) {
83
+ } else if (route.endsWith("/[...guard]") && (response === void 0 || !isJSX(response))) {
82
84
  continue;
83
- } else if (route.endsWith("/[404].js")) {
85
+ } else if (route.endsWith("/[404]")) {
84
86
  reply.status(404);
85
87
  break;
86
88
  } else if (reply.statusCode === 404) {
@@ -100,10 +102,10 @@ function generateRoutes(path) {
100
102
  const segments = generateSegments(path);
101
103
  const edges = generateEdges(segments[0]);
102
104
  return [
103
- ...segments.toReversed().map((segment) => `routes${segment}/[...guard].js`),
104
- ...edges.map((edge) => `routes${edge}.js`),
105
- ...segments.map((segment) => `routes${segment}/[...path].js`),
106
- ...segments.map((segment) => `routes${segment}/[404].js`)
105
+ ...segments.toReversed().map((segment) => `${segment}/[...guard]`),
106
+ ...edges.map((edge) => `${edge}`),
107
+ ...segments.map((segment) => `${segment}/[...path]`),
108
+ ...segments.map((segment) => `${segment}/[404]`)
107
109
  ];
108
110
  }
109
111
  function generateSegments(path) {
package/serverless.ts CHANGED
@@ -50,13 +50,14 @@ serverless.register(fastifyStatic, {
50
50
  : undefined,
51
51
  });
52
52
 
53
- // Add path without query parameters to request
54
53
  declare module "fastify" {
55
54
  interface FastifyRequest {
56
- path: string;
55
+ path: string; // Path without query parameters
56
+ route: string; // Path to resolved route handler
57
57
  }
58
58
  }
59
59
 
60
+ serverless.decorateRequest("route", "");
60
61
  serverless.decorateRequest("path", "");
61
62
  serverless.addHook("onRequest", async (request, reply) => {
62
63
  const index = request.url.indexOf("?");
@@ -81,7 +82,7 @@ serverless.all("*", async (request, reply) => {
81
82
 
82
83
  // Execute route handlers for current request
83
84
  for (const route of generateRoutes(path)) {
84
- const modulePath = join(cwd, "dist", route);
85
+ const modulePath = join(cwd, "dist", `routes${route}.js`);
85
86
 
86
87
  // Resolve module via cache
87
88
  let module = modulesCache[modulePath];
@@ -119,6 +120,9 @@ serverless.all("*", async (request, reply) => {
119
120
  }
120
121
  }
121
122
 
123
+ // Store current route in request
124
+ request.route = route;
125
+
122
126
  // Call the handler with request, reply and optional props
123
127
  response = await module.default.call(context, {
124
128
  request,
@@ -131,11 +135,11 @@ serverless.all("*", async (request, reply) => {
131
135
  } else if (typeof response === "string" || Buffer.isBuffer(response)) {
132
136
  break;
133
137
  } else if (
134
- route.endsWith("/[...guard].js") &&
138
+ route.endsWith("/[...guard]") &&
135
139
  (response === undefined || !isJSX(response))
136
140
  ) {
137
141
  continue;
138
- } else if (route.endsWith("/[404].js")) {
142
+ } else if (route.endsWith("/[404]")) {
139
143
  reply.status(404);
140
144
  break;
141
145
  } else if (reply.statusCode === 404) {
@@ -174,10 +178,10 @@ function generateRoutes(path: string): string[] {
174
178
  return [
175
179
  ...segments
176
180
  .toReversed() // [...guard]s are evaluated from top to bottom
177
- .map((segment) => `routes${segment}/[...guard].js`),
178
- ...edges.map((edge) => `routes${edge}.js`),
179
- ...segments.map((segment) => `routes${segment}/[...path].js`),
180
- ...segments.map((segment) => `routes${segment}/[404].js`),
181
+ .map((segment) => `${segment}/[...guard]`),
182
+ ...edges.map((edge) => `${edge}`),
183
+ ...segments.map((segment) => `${segment}/[...path]`),
184
+ ...segments.map((segment) => `${segment}/[404]`),
181
185
  ];
182
186
  }
183
187