rasengan 1.0.0-beta.32 → 1.0.0-beta.34

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.
@@ -49,17 +49,18 @@ import path, { join } from "node:path";
49
49
  import { createStaticHandler, createStaticRouter, } from "react-router-dom/server.js";
50
50
  // @ts-ignore
51
51
  import { createFetchRequest } from "rasengan";
52
+ import { fileTypeFromBuffer } from "file-type";
52
53
  // // @ts-ignore
53
54
  // import { handleRequest } from "rasengan";
54
55
  // // @ts-ignore
55
56
  // import type { Context } from "@netlify/functions"
56
57
  export default (function (req, context) { return __awaiter(void 0, void 0, void 0, function () {
57
- var url, host, appPath, err_1, segments, segmentsWithoutOrigin, _i, segments_1, segment, filePath, file, otherFile, file, templateHtml, serverFilePath, bootstrapDirPath, entry, bootstrap, styles, render, staticRoutes, loadTemplateHtml, handler, fetchRequest, context_1, status_1, redirect, helmetContext, router, rendered, html, e_1;
58
+ var url, host, appPath, err_1, segments, segmentsWithoutOrigin, _i, segments_1, segment, filePath, file, otherFile, result, mimeType, file, file, res, buffer, mimeType, templateHtml, serverFilePath, bootstrapDirPath, entry, bootstrap, styles, render, staticRoutes, loadTemplateHtml, handler, fetchRequest, context_1, status_1, redirect, helmetContext, router, rendered, html, e_1;
58
59
  var _a;
59
60
  return __generator(this, function (_b) {
60
61
  switch (_b.label) {
61
62
  case 0:
62
- _b.trys.push([0, 13, , 14]);
63
+ _b.trys.push([0, 19, , 20]);
63
64
  url = req.url;
64
65
  host = req.headers.get("host");
65
66
  appPath = process.cwd();
@@ -83,7 +84,7 @@ export default (function (req, context) { return __awaiter(void 0, void 0, void
83
84
  if (url === "/manifest.json") {
84
85
  return [2 /*return*/, new Response(path.resolve(join(appPath, "dist/client/manifest.json")))];
85
86
  }
86
- if (!url.includes("/assets")) return [3 /*break*/, 7];
87
+ if (!url.includes("/assets")) return [3 /*break*/, 8];
87
88
  segments = url.split("/");
88
89
  segmentsWithoutOrigin = __spreadArray([], segments, true);
89
90
  for (_i = 0, segments_1 = segments; _i < segments_1.length; _i++) {
@@ -108,16 +109,20 @@ export default (function (req, context) { return __awaiter(void 0, void 0, void
108
109
  return [4 /*yield*/, fs.readFile(filePath)];
109
110
  case 6:
110
111
  otherFile = _b.sent();
112
+ return [4 /*yield*/, fileTypeFromBuffer(otherFile)];
113
+ case 7:
114
+ result = _b.sent();
115
+ mimeType = result ? result.mime : url.endsWith(".svg") ? "image/svg+xml" : "application/octet-stream";
111
116
  return [2 /*return*/, new Response(otherFile, {
112
117
  headers: {
113
- "Content-Type": "application/octet-stream",
118
+ "Content-Type": mimeType,
114
119
  "Cache-Control": "max-age=31536000",
115
120
  },
116
121
  })];
117
- case 7:
118
- if (!(url.endsWith(".js") || url.endsWith(".css"))) return [3 /*break*/, 9];
119
- return [4 /*yield*/, fs.readFile(url, "utf-8")];
120
122
  case 8:
123
+ if (!(url.endsWith(".js") || url.endsWith(".css"))) return [3 /*break*/, 10];
124
+ return [4 /*yield*/, fs.readFile(url, "utf-8")];
125
+ case 9:
121
126
  file = _b.sent();
122
127
  return [2 /*return*/, new Response(file, {
123
128
  headers: {
@@ -125,12 +130,38 @@ export default (function (req, context) { return __awaiter(void 0, void 0, void
125
130
  "Cache-Control": "max-age=31536000",
126
131
  },
127
132
  })];
128
- case 9:
133
+ case 10:
134
+ if (!(url.endsWith(".ttf") || url.endsWith(".woff") || url.endsWith(".woff2") || url.endsWith(".eot") || url.endsWith(".otf"))) return [3 /*break*/, 12];
135
+ return [4 /*yield*/, fs.readFile(url, "utf-8")];
136
+ case 11:
137
+ file = _b.sent();
138
+ return [2 /*return*/, new Response(file, {
139
+ headers: {
140
+ "Content-Type": "font/".concat(url.split(".").pop()),
141
+ "Cache-Control": "max-age=31536000",
142
+ },
143
+ })];
144
+ case 12:
145
+ if (!url.includes('/.netlify/images')) return [3 /*break*/, 15];
146
+ return [4 /*yield*/, fetch(url)];
147
+ case 13:
148
+ res = _b.sent();
149
+ return [4 /*yield*/, res.arrayBuffer()];
150
+ case 14:
151
+ buffer = _b.sent();
152
+ mimeType = res.headers.get("Content-Type") || "application/octet-stream";
153
+ return [2 /*return*/, new Response(buffer, {
154
+ headers: {
155
+ "Content-Type": mimeType,
156
+ "Cache-Control": "max-age=31536000",
157
+ },
158
+ })];
159
+ case 15:
129
160
  templateHtml = "";
130
161
  serverFilePath = join(appPath, "dist/server/entry-server.js");
131
162
  bootstrapDirPath = join(appPath, "dist/client/assets");
132
163
  return [4 /*yield*/, import(serverFilePath)];
133
- case 10:
164
+ case 16:
134
165
  entry = _b.sent();
135
166
  bootstrap = "/assets/" +
136
167
  fsSync
@@ -144,7 +175,7 @@ export default (function (req, context) { return __awaiter(void 0, void 0, void
144
175
  handler = createStaticHandler(staticRoutes);
145
176
  fetchRequest = createFetchRequest(req, host);
146
177
  return [4 /*yield*/, handler.query(fetchRequest)];
147
- case 11:
178
+ case 17:
148
179
  context_1 = _b.sent();
149
180
  status_1 = context_1.status;
150
181
  if (status_1 === 302) {
@@ -156,7 +187,7 @@ export default (function (req, context) { return __awaiter(void 0, void 0, void
156
187
  helmetContext = {};
157
188
  router = createStaticRouter(handler.dataRoutes, context_1);
158
189
  return [4 /*yield*/, render(router, context_1, helmetContext)];
159
- case 12:
190
+ case 18:
160
191
  rendered = _b.sent();
161
192
  // Load template html
162
193
  if (!templateHtml) {
@@ -171,13 +202,13 @@ export default (function (req, context) { return __awaiter(void 0, void 0, void
171
202
  "Cache-Control": "max-age=31536000",
172
203
  },
173
204
  })];
174
- case 13:
205
+ case 19:
175
206
  e_1 = _b.sent();
176
207
  console.log(e_1.stack);
177
208
  return [2 /*return*/, new Response(e_1.stack, {
178
209
  status: 500,
179
210
  })];
180
- case 14: return [2 /*return*/];
211
+ case 20: return [2 /*return*/];
181
212
  }
182
213
  });
183
214
  }); });
@@ -49,15 +49,16 @@ import path, { join } from "node:path";
49
49
  import { createStaticHandler, createStaticRouter, } from "react-router-dom/server.js";
50
50
  // @ts-ignore
51
51
  import { createFetchRequest } from "rasengan";
52
+ import { fileTypeFromBuffer } from "file-type";
52
53
  // Create server for production only
53
54
  export default function handler(req, res) {
54
55
  var _a;
55
56
  return __awaiter(this, void 0, void 0, function () {
56
- var url, host, appPath, err_1, segments, segmentsWithoutOrigin, _i, segments_1, segment, filePath, file, otherFile, file, templateHtml, serverFilePath, bootstrapDirPath, entry, bootstrap, styles, render, staticRoutes, loadTemplateHtml, handler_1, fetchRequest, context, status_1, redirect, helmetContext, router, rendered, html, e_1;
57
+ var url, host, appPath, err_1, segments, segmentsWithoutOrigin, _i, segments_1, segment, filePath, file, otherFile, result, mimeType, file, templateHtml, serverFilePath, bootstrapDirPath, entry, bootstrap, styles, render, staticRoutes, loadTemplateHtml, handler_1, fetchRequest, context, status_1, redirect, helmetContext, router, rendered, html, e_1;
57
58
  return __generator(this, function (_b) {
58
59
  switch (_b.label) {
59
60
  case 0:
60
- _b.trys.push([0, 13, , 14]);
61
+ _b.trys.push([0, 14, , 15]);
61
62
  url = req.url;
62
63
  host = req.headers.host;
63
64
  appPath = process.cwd();
@@ -81,7 +82,7 @@ export default function handler(req, res) {
81
82
  if (url === "/manifest.json") {
82
83
  return [2 /*return*/, res.send(path.resolve(join(appPath, "dist/client/manifest.json")))];
83
84
  }
84
- if (!url.includes("/assets")) return [3 /*break*/, 7];
85
+ if (!url.includes("/assets")) return [3 /*break*/, 8];
85
86
  segments = url.split("/");
86
87
  segmentsWithoutOrigin = __spreadArray([], segments, true);
87
88
  for (_i = 0, segments_1 = segments; _i < segments_1.length; _i++) {
@@ -106,28 +107,32 @@ export default function handler(req, res) {
106
107
  return [4 /*yield*/, fs.readFile(filePath)];
107
108
  case 6:
108
109
  otherFile = _b.sent();
110
+ return [4 /*yield*/, fileTypeFromBuffer(otherFile)];
111
+ case 7:
112
+ result = _b.sent();
113
+ mimeType = result ? result.mime : url.endsWith(".svg") ? "image/svg+xml" : "application/octet-stream";
109
114
  return [2 /*return*/, new Response(otherFile, {
110
115
  headers: {
111
- "Content-Type": "application/octet-stream",
116
+ "Content-Type": mimeType,
112
117
  "Cache-Control": "max-age=31536000",
113
118
  },
114
119
  })];
115
- case 7:
116
- if (!(url.endsWith(".js") || url.endsWith(".css"))) return [3 /*break*/, 9];
117
- return [4 /*yield*/, fs.readFile(url, "utf-8")];
118
120
  case 8:
121
+ if (!(url.endsWith(".js") || url.endsWith(".css"))) return [3 /*break*/, 10];
122
+ return [4 /*yield*/, fs.readFile(url, "utf-8")];
123
+ case 9:
119
124
  file = _b.sent();
120
125
  return [2 /*return*/, res
121
126
  .status(200)
122
127
  .setHeader("Content-Type", url.endsWith(".js") ? "text/javascript" : "text/css")
123
128
  .setHeader("Cache-Control", "max-age=31536000")
124
129
  .end(file)];
125
- case 9:
130
+ case 10:
126
131
  templateHtml = "";
127
132
  serverFilePath = join(appPath, "dist/server/entry-server.js");
128
133
  bootstrapDirPath = join(appPath, "dist/client/assets");
129
134
  return [4 /*yield*/, import(serverFilePath)];
130
- case 10:
135
+ case 11:
131
136
  entry = _b.sent();
132
137
  bootstrap = "/assets/" +
133
138
  fsSync
@@ -141,7 +146,7 @@ export default function handler(req, res) {
141
146
  handler_1 = createStaticHandler(staticRoutes);
142
147
  fetchRequest = createFetchRequest(req, host);
143
148
  return [4 /*yield*/, handler_1.query(fetchRequest)];
144
- case 11:
149
+ case 12:
145
150
  context = _b.sent();
146
151
  status_1 = context.status;
147
152
  if (status_1 === 302) {
@@ -152,7 +157,7 @@ export default function handler(req, res) {
152
157
  helmetContext = {};
153
158
  router = createStaticRouter(handler_1.dataRoutes, context);
154
159
  return [4 /*yield*/, render(router, context, helmetContext)];
155
- case 12:
160
+ case 13:
156
161
  rendered = _b.sent();
157
162
  // Load template html
158
163
  if (!templateHtml) {
@@ -165,12 +170,12 @@ export default function handler(req, res) {
165
170
  .setHeader("Content-Type", "text/html")
166
171
  .setHeader("Cache-Control", "max-age=31536000")
167
172
  .end(html)];
168
- case 13:
173
+ case 14:
169
174
  e_1 = _b.sent();
170
175
  console.log(e_1.stack);
171
176
  res.status(500).end(e_1.stack);
172
- return [3 /*break*/, 14];
173
- case 14: return [2 /*return*/];
177
+ return [3 /*break*/, 15];
178
+ case 15: return [2 /*return*/];
174
179
  }
175
180
  });
176
181
  });
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "rasengan",
3
3
  "private": false,
4
- "version": "1.0.0-beta.32",
4
+ "version": "1.0.0-beta.34",
5
5
  "description": "The modern frontend framework for React",
6
6
  "type": "module",
7
7
  "main": "lib/esm/index.js",
@@ -42,18 +42,15 @@
42
42
  "scripts": {
43
43
  "dev": "node server",
44
44
  "preview": "cross-env NODE_ENV=production node server",
45
-
46
45
  "build": "npm run build:client && npm run build:server",
47
46
  "build:client": "vite build --ssrManifest --outDir dist/client",
48
47
  "build:server": "vite build --ssr node_modules/rasengan/lib/esm/entries/entry-server.js --outDir dist/server",
49
48
  "compile": "tsc -b ./tsconfig.esm.json ./tsconfig.types.json",
50
49
  "build:lib:clean": "rm -rf ./lib",
51
50
  "build:lib:all": "npm-run-all build:lib:clean compile && node ./src/scripts/copy-extra-files.js",
52
-
53
51
  "deploy": "npm publish --access public",
54
52
  "deploy:beta": "npm run deploy --tag beta",
55
53
  "pack": "npm pack --pack-destination ./../packages/rasengan/"
56
-
57
54
  },
58
55
  "dependencies": {
59
56
  "@vercel/node": "^3.0.14",
@@ -64,6 +61,7 @@
64
61
  "cross-spawn": "^7.0.3",
65
62
  "execa": "^8.0.1",
66
63
  "express": "^4.18.2",
64
+ "file-type": "^19.0.0",
67
65
  "inquirer": "^9.2.12",
68
66
  "keypress": "^0.2.1",
69
67
  "node-fetch": "^3.3.2",
@@ -75,12 +73,12 @@
75
73
  "vite-plugin-css-injected-by-js": "^3.5.0"
76
74
  },
77
75
  "peerDependencies": {
78
- "@types/node": "^18.0.0 || >=20.0.0",
79
76
  "@netlify/functions": "^2.6.0",
77
+ "@types/node": "^18.0.0 || >=20.0.0",
78
+ "less": "*",
80
79
  "react": "^18.2.0",
81
80
  "react-dom": "^18.2.0",
82
81
  "sass": "*",
83
- "less": "*",
84
82
  "stylus": "*",
85
83
  "vite": "^5.2.0"
86
84
  },