rasengan 1.0.0-beta.13 → 1.0.0-beta.15
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 +1 -1
- package/lib/cjs/cli/index.js +20 -1
- package/lib/cjs/core/components/index.js +11 -5
- package/lib/cjs/index.js +4 -2
- package/lib/cjs/routing/components/index.js +12 -7
- package/lib/cjs/routing/utils/index.js +32 -12
- package/lib/cjs/scripts/copy-extra-files.js +28 -0
- package/lib/cjs/server/functions/netlify/functions/api.js +48 -0
- package/lib/cjs/server/functions/netlify/netlify.toml +26 -0
- package/lib/cjs/server/functions/vercel/api/index.js +4 -111
- package/lib/cjs/server/utils/createFetchRequest.js +3 -1
- package/lib/cjs/server/utils/handleError.js +0 -4
- package/lib/cjs/server/utils/handleRequest.js +168 -0
- package/lib/cjs/server/utils/log.js +3 -1
- package/lib/esm/cli/index.js +20 -1
- package/lib/esm/core/components/index.js +12 -6
- package/lib/esm/index.js +3 -2
- package/lib/esm/routing/components/index.js +12 -7
- package/lib/esm/routing/utils/index.js +33 -13
- package/lib/esm/scripts/copy-extra-files.js +23 -0
- package/lib/esm/server/functions/netlify/functions/api.js +46 -0
- package/lib/esm/server/functions/netlify/netlify.toml +26 -0
- package/lib/esm/server/functions/vercel/api/index.js +5 -86
- package/lib/esm/server/utils/createFetchRequest.js +3 -1
- package/lib/esm/server/utils/handleError.js +0 -4
- package/lib/esm/server/utils/handleRequest.js +139 -0
- package/lib/esm/server/utils/log.js +3 -1
- package/lib/types/core/components/index.d.ts +1 -1
- package/lib/types/core/types.d.ts +5 -1
- package/lib/types/index.d.ts +2 -1
- package/lib/types/routing/components/index.d.ts +5 -3
- package/lib/types/scripts/copy-extra-files.d.ts +1 -0
- package/lib/types/server/functions/netlify/functions/api.d.ts +2 -0
- package/lib/types/server/functions/vercel/api/index.d.ts +1 -1
- package/lib/types/server/utils/handleRequest.d.ts +1 -0
- package/package.json +20 -7
- package/tsconfig.json +1 -0
- package/vite.config.ts +9 -1
package/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
[](https://rasengan.dev)
|
|
2
2
|
|
|
3
3
|
[](https://badge.fury.io/js/rasengan)
|
|
4
4
|
[](https://www.npmjs.com/package/rasengan)
|
package/lib/cjs/cli/index.js
CHANGED
|
@@ -123,7 +123,26 @@ program
|
|
|
123
123
|
stdio: "inherit",
|
|
124
124
|
});
|
|
125
125
|
}
|
|
126
|
-
else if (hostingStrategy === "netlify") {
|
|
126
|
+
else if (hostingStrategy === "netlify") {
|
|
127
|
+
// Displaying the message
|
|
128
|
+
console.log("Your project is configured to be hosted on ".concat(chalk_1.default.bold.blue(hostingStrategy), "\n"));
|
|
129
|
+
// create a netlify folder at the root
|
|
130
|
+
(0, execa_1.execa)("mkdir", ["-p", "netlify"], {
|
|
131
|
+
stdio: "inherit",
|
|
132
|
+
});
|
|
133
|
+
// Copying the netlify folder to the root directory
|
|
134
|
+
(0, execa_1.execa)("cp", [
|
|
135
|
+
"-r",
|
|
136
|
+
"node_modules/rasengan/lib/esm/server/functions/netlify/functions",
|
|
137
|
+
"./netlify",
|
|
138
|
+
], {
|
|
139
|
+
stdio: "inherit",
|
|
140
|
+
});
|
|
141
|
+
// Copying the netlify.toml file to the root directory
|
|
142
|
+
(0, execa_1.execa)("cp", ["node_modules/rasengan/lib/esm/server/functions/netlify/netlify.toml", "."], {
|
|
143
|
+
stdio: "inherit",
|
|
144
|
+
});
|
|
145
|
+
}
|
|
127
146
|
});
|
|
128
147
|
// Handle the start command
|
|
129
148
|
program
|
|
@@ -79,16 +79,22 @@ exports.Component = Component;
|
|
|
79
79
|
*/
|
|
80
80
|
var PageToRender = function (_a) {
|
|
81
81
|
var _b, _c;
|
|
82
|
-
var Page = _a.page, data = _a.data;
|
|
82
|
+
var Page = _a.page, data = _a.data, layoutMetadata = _a.layoutMetadata;
|
|
83
83
|
// Get the page props
|
|
84
84
|
var props = data.props || {};
|
|
85
|
+
// get params
|
|
86
|
+
var params = (0, react_router_dom_1.useParams)();
|
|
87
|
+
var finalProps = __assign(__assign({}, props), { params: params });
|
|
85
88
|
// Generate meta tags
|
|
86
89
|
var metaTags = react_1.default.useMemo(function () {
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
+
var metadatas = [];
|
|
91
|
+
if (Page.metadata)
|
|
92
|
+
metadatas.push(Page.metadata);
|
|
93
|
+
if (layoutMetadata)
|
|
94
|
+
metadatas.push(layoutMetadata);
|
|
95
|
+
return (0, index_js_1.generateMetadata)(metadatas);
|
|
90
96
|
}, []);
|
|
91
|
-
return ((0, jsx_runtime_1.jsxs)(react_1.default.Fragment, { children: [(0, jsx_runtime_1.jsxs)(H.Helmet, { children: [metaTags.map(function (meta) { return meta; }), (0, jsx_runtime_1.jsx)("meta", { name: "description", content: ((_b = Page.metadata) === null || _b === void 0 ? void 0 : _b.description) || "" }), (0, jsx_runtime_1.jsx)("title", { children: ((_c = Page.metadata) === null || _c === void 0 ? void 0 : _c.title) || Page.name })] }), (0, jsx_runtime_1.jsx)(Page, __assign({},
|
|
97
|
+
return ((0, jsx_runtime_1.jsxs)(react_1.default.Fragment, { children: [(0, jsx_runtime_1.jsxs)(H.Helmet, { children: [metaTags.map(function (meta) { return meta; }), (0, jsx_runtime_1.jsx)("meta", { name: "description", content: ((_b = Page.metadata) === null || _b === void 0 ? void 0 : _b.description) || "" }), (0, jsx_runtime_1.jsx)("title", { children: ((_c = Page.metadata) === null || _c === void 0 ? void 0 : _c.title) || Page.name })] }), (0, jsx_runtime_1.jsx)(Page, __assign({}, finalProps))] }));
|
|
92
98
|
};
|
|
93
99
|
exports.PageToRender = PageToRender;
|
|
94
100
|
/**
|
package/lib/cjs/index.js
CHANGED
|
@@ -17,12 +17,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
17
17
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
18
18
|
};
|
|
19
19
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
-
exports.createFetchRequest = void 0;
|
|
20
|
+
exports.handleRequest = exports.createFetchRequest = void 0;
|
|
21
21
|
// Imports
|
|
22
22
|
var createFetchRequest_js_1 = __importDefault(require("./server/utils/createFetchRequest.js"));
|
|
23
23
|
exports.createFetchRequest = createFetchRequest_js_1.default;
|
|
24
|
+
var handleRequest_js_1 = __importDefault(require("./server/utils/handleRequest.js"));
|
|
25
|
+
exports.handleRequest = handleRequest_js_1.default;
|
|
24
26
|
// Exports
|
|
27
|
+
// export * from "./decorators/index.js";
|
|
25
28
|
__exportStar(require("./core/index.js"), exports);
|
|
26
29
|
__exportStar(require("./routing/index.js"), exports);
|
|
27
|
-
// export * from "./decorators/index.js";
|
|
28
30
|
__exportStar(require("./config/index.js"), exports);
|
|
@@ -41,12 +41,15 @@ exports.ErrorBoundary = ErrorBoundary;
|
|
|
41
41
|
* @returns React.ReactNode
|
|
42
42
|
*/
|
|
43
43
|
var ServerComponent = function (_a) {
|
|
44
|
-
var page = _a.page;
|
|
44
|
+
var page = _a.page, layoutMetadata = _a.layoutMetadata;
|
|
45
45
|
// Default data
|
|
46
|
-
var
|
|
47
|
-
props: {
|
|
46
|
+
var defaultData = {
|
|
47
|
+
props: {
|
|
48
|
+
params: {}
|
|
49
|
+
},
|
|
48
50
|
};
|
|
49
|
-
|
|
51
|
+
var data = (0, react_router_dom_1.useLoaderData)() || defaultData;
|
|
52
|
+
return ((0, jsx_runtime_1.jsx)(index_js_1.PageToRender, { page: page, data: data, layoutMetadata: layoutMetadata }));
|
|
50
53
|
};
|
|
51
54
|
exports.ServerComponent = ServerComponent;
|
|
52
55
|
/**
|
|
@@ -54,13 +57,15 @@ exports.ServerComponent = ServerComponent;
|
|
|
54
57
|
* @returns React.ReactNode
|
|
55
58
|
*/
|
|
56
59
|
var ClientComponent = function (_a) {
|
|
57
|
-
var page = _a.page;
|
|
60
|
+
var page = _a.page, layoutMetadata = _a.layoutMetadata;
|
|
58
61
|
// Default data
|
|
59
62
|
var defaultData = {
|
|
60
|
-
props: {
|
|
63
|
+
props: {
|
|
64
|
+
params: {}
|
|
65
|
+
},
|
|
61
66
|
};
|
|
62
67
|
var data = (0, react_router_dom_1.useLoaderData)() || defaultData;
|
|
63
|
-
return ((0, jsx_runtime_1.jsx)(index_js_1.PageToRender, { page: page, data: data }));
|
|
68
|
+
return ((0, jsx_runtime_1.jsx)(index_js_1.PageToRender, { page: page, data: data, layoutMetadata: layoutMetadata }));
|
|
64
69
|
};
|
|
65
70
|
exports.ClientComponent = ClientComponent;
|
|
66
71
|
/**
|
|
@@ -80,7 +80,10 @@ var generateBrowserRoutes = function (router, isRoot) {
|
|
|
80
80
|
props: {},
|
|
81
81
|
};
|
|
82
82
|
var props = ((0, react_router_dom_1.useLoaderData)() || defaultData).props;
|
|
83
|
-
|
|
83
|
+
// get params
|
|
84
|
+
var params = (0, react_router_dom_1.useParams)();
|
|
85
|
+
var finalProps = __assign(__assign({}, props), { params: params });
|
|
86
|
+
return (0, jsx_runtime_1.jsx)(Layout, __assign({}, finalProps));
|
|
84
87
|
},
|
|
85
88
|
children: [],
|
|
86
89
|
};
|
|
@@ -93,14 +96,18 @@ var generateBrowserRoutes = function (router, isRoot) {
|
|
|
93
96
|
}
|
|
94
97
|
// Get informations about pages
|
|
95
98
|
var pages = router.pages.map(function (Page) {
|
|
99
|
+
var pagePathFormated = Page.path[0] === "/" && Page.path !== "/"
|
|
100
|
+
? Page.path.slice(1)
|
|
101
|
+
: Page.path;
|
|
96
102
|
// Get the path of the page
|
|
97
|
-
var path = Page.path === "/"
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
103
|
+
var path = Page.path === "/"
|
|
104
|
+
? Layout.path
|
|
105
|
+
: Layout.path.length > 1
|
|
106
|
+
? pagePathFormated
|
|
107
|
+
: Page.path;
|
|
101
108
|
return {
|
|
102
109
|
path: path,
|
|
103
|
-
element: ((0, jsx_runtime_1.jsx)(index_js_1.ClientComponent, { page: Page, loader: router.loaderComponent({}) })),
|
|
110
|
+
element: ((0, jsx_runtime_1.jsx)(index_js_1.ClientComponent, { page: Page, loader: router.loaderComponent({}), layoutMetadata: Layout.metadata })),
|
|
104
111
|
elementError: (0, jsx_runtime_1.jsx)(index_js_2.ErrorBoundary, {}),
|
|
105
112
|
};
|
|
106
113
|
});
|
|
@@ -141,7 +148,16 @@ var generateStaticRoutes = function (router, isRoot) {
|
|
|
141
148
|
path: Layout.path,
|
|
142
149
|
elementError: (0, jsx_runtime_1.jsx)(index_js_2.ErrorBoundary, {}),
|
|
143
150
|
Component: function () {
|
|
144
|
-
|
|
151
|
+
// Default data
|
|
152
|
+
var defaultData = {
|
|
153
|
+
props: {},
|
|
154
|
+
};
|
|
155
|
+
// Get SSR data
|
|
156
|
+
var props = ((0, react_router_dom_1.useLoaderData)() || defaultData).props;
|
|
157
|
+
// get params
|
|
158
|
+
var params = (0, react_router_dom_1.useParams)();
|
|
159
|
+
var finalProps = __assign(__assign({}, props), { params: params });
|
|
160
|
+
return (0, jsx_runtime_1.jsx)(Layout, __assign({}, finalProps));
|
|
145
161
|
},
|
|
146
162
|
loader: function (_a) {
|
|
147
163
|
var params = _a.params, request = _a.request;
|
|
@@ -191,11 +207,15 @@ var generateStaticRoutes = function (router, isRoot) {
|
|
|
191
207
|
}
|
|
192
208
|
// Get informations about pages
|
|
193
209
|
var pages = router.pages.map(function (Page) {
|
|
210
|
+
var pagePathFormated = Page.path[0] === "/" && Page.path !== "/"
|
|
211
|
+
? Page.path.slice(1)
|
|
212
|
+
: Page.path;
|
|
194
213
|
// Get the path of the page
|
|
195
|
-
var path = Page.path === "/"
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
214
|
+
var path = Page.path === "/"
|
|
215
|
+
? Layout.path
|
|
216
|
+
: Layout.path.length > 1
|
|
217
|
+
? pagePathFormated
|
|
218
|
+
: Page.path;
|
|
199
219
|
return {
|
|
200
220
|
path: path,
|
|
201
221
|
loader: function (_a) {
|
|
@@ -236,7 +256,7 @@ var generateStaticRoutes = function (router, isRoot) {
|
|
|
236
256
|
});
|
|
237
257
|
},
|
|
238
258
|
Component: function () {
|
|
239
|
-
return ((0, jsx_runtime_1.jsx)(index_js_1.ServerComponent, { page: Page, loader: router.loaderComponent({}) }));
|
|
259
|
+
return ((0, jsx_runtime_1.jsx)(index_js_1.ServerComponent, { page: Page, loader: router.loaderComponent({}), layoutMetadata: Layout.metadata }));
|
|
240
260
|
},
|
|
241
261
|
elementError: (0, jsx_runtime_1.jsx)(index_js_2.ErrorBoundary, {}),
|
|
242
262
|
};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
var node_fs_1 = __importDefault(require("node:fs"));
|
|
7
|
+
var node_path_1 = __importDefault(require("node:path"));
|
|
8
|
+
var execa_1 = require("execa");
|
|
9
|
+
var buildDir = "./lib";
|
|
10
|
+
function copyExtraFiles() {
|
|
11
|
+
node_fs_1.default.readdir(buildDir, function (err, dirs) {
|
|
12
|
+
if (err) {
|
|
13
|
+
throw err;
|
|
14
|
+
}
|
|
15
|
+
dirs.forEach(function (dir) {
|
|
16
|
+
if (dir === "esm" || dir === "cjs") {
|
|
17
|
+
var targetDir = node_path_1.default.join(buildDir, dir);
|
|
18
|
+
(0, execa_1.execa)("cp", [
|
|
19
|
+
"./src/server/functions/netlify/netlify.toml",
|
|
20
|
+
"".concat(targetDir, "/server/functions/netlify"),
|
|
21
|
+
], {
|
|
22
|
+
stdio: "inherit",
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
copyExtraFiles();
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
+
function step(op) {
|
|
16
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
18
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
+
switch (op[0]) {
|
|
21
|
+
case 0: case 1: t = op; break;
|
|
22
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
+
default:
|
|
26
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
+
if (t[2]) _.ops.pop();
|
|
31
|
+
_.trys.pop(); continue;
|
|
32
|
+
}
|
|
33
|
+
op = body.call(thisArg, _);
|
|
34
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
// @ts-ignore
|
|
40
|
+
var rasengan_1 = require("rasengan");
|
|
41
|
+
exports.default = (function (req, context) { return __awaiter(void 0, void 0, void 0, function () {
|
|
42
|
+
return __generator(this, function (_a) {
|
|
43
|
+
switch (_a.label) {
|
|
44
|
+
case 0: return [4 /*yield*/, (0, rasengan_1.handleRequest)(req)];
|
|
45
|
+
case 1: return [2 /*return*/, _a.sent()];
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
}); });
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
[dev]
|
|
2
|
+
command = "npm run start"
|
|
3
|
+
publish = "dist"
|
|
4
|
+
# We need another port for the application because Vite occupies the 3000.
|
|
5
|
+
port = 5000
|
|
6
|
+
|
|
7
|
+
[build]
|
|
8
|
+
command = "npm run build"
|
|
9
|
+
publish = "dist"
|
|
10
|
+
|
|
11
|
+
[functions]
|
|
12
|
+
# We are goint to use ES modules so we need esbuild to transpile the code.
|
|
13
|
+
node_bundler = "esbuild"
|
|
14
|
+
|
|
15
|
+
[[redirects]]
|
|
16
|
+
from = "/assets/*"
|
|
17
|
+
to = "/assets/:splat"
|
|
18
|
+
status = 200
|
|
19
|
+
conditions = { Path = "/assets/*" }
|
|
20
|
+
|
|
21
|
+
# We have to tell the Netlify that this URL will be served by the books.js function.
|
|
22
|
+
[[redirects]]
|
|
23
|
+
from = "/*"
|
|
24
|
+
to = "/.netlify/functions/api"
|
|
25
|
+
status = 200
|
|
26
|
+
conditions = { not = { Path = "/assets/*" }}
|
|
@@ -1,27 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
2
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
26
3
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
27
4
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -58,100 +35,16 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
58
35
|
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
59
36
|
}
|
|
60
37
|
};
|
|
61
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
62
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
63
|
-
};
|
|
64
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
65
|
-
var promises_1 = __importDefault(require("node:fs/promises"));
|
|
66
|
-
var node_fs_1 = __importDefault(require("node:fs"));
|
|
67
|
-
var node_path_1 = __importStar(require("node:path"));
|
|
68
|
-
var node_url_1 = require("node:url");
|
|
69
|
-
var server_js_1 = require("react-router-dom/server.js");
|
|
70
39
|
// @ts-ignore
|
|
71
40
|
var rasengan_1 = require("rasengan");
|
|
72
|
-
// @ts-ignore
|
|
73
|
-
var __filename = (0, node_url_1.fileURLToPath)(import.meta.url);
|
|
74
|
-
var __dirname = (0, node_path_1.dirname)(__filename);
|
|
75
41
|
// Create server for production only
|
|
76
42
|
function handler(req, res) {
|
|
77
|
-
var _a;
|
|
78
43
|
return __awaiter(this, void 0, void 0, function () {
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
case
|
|
83
|
-
_b.trys.push([0, 8, , 9]);
|
|
84
|
-
url = req.url;
|
|
85
|
-
host = req.headers.host;
|
|
86
|
-
appPath = (0, node_path_1.join)(__dirname, "..");
|
|
87
|
-
if (!(url === "/robots.txt")) return [3 /*break*/, 4];
|
|
88
|
-
_b.label = 1;
|
|
89
|
-
case 1:
|
|
90
|
-
_b.trys.push([1, 3, , 4]);
|
|
91
|
-
return [4 /*yield*/, promises_1.default.access(node_path_1.default.resolve((0, node_path_1.join)(appPath, "dist/client/robots.txt")))];
|
|
92
|
-
case 2:
|
|
93
|
-
_b.sent();
|
|
94
|
-
return [2 /*return*/, res.send(node_path_1.default.resolve((0, node_path_1.join)(appPath, "dist/client/robots.txt")))];
|
|
95
|
-
case 3:
|
|
96
|
-
err_1 = _b.sent();
|
|
97
|
-
return [2 /*return*/, res.send("\n user-agent: *\n disallow: /downloads/\n disallow: /private/\n allow: /\n \n user-agent: magicsearchbot\n disallow: /uploads/\n ")];
|
|
98
|
-
case 4:
|
|
99
|
-
// ! Sitemap Fix
|
|
100
|
-
if (url === "/sitemap.xml") {
|
|
101
|
-
return [2 /*return*/, res.send(node_path_1.default.resolve((0, node_path_1.join)(appPath, "dist/client/sitemap.xml")))];
|
|
102
|
-
}
|
|
103
|
-
// ! Manifest Fix
|
|
104
|
-
if (url === "/manifest.json") {
|
|
105
|
-
return [2 /*return*/, res.send(node_path_1.default.resolve((0, node_path_1.join)(appPath, "dist/client/manifest.json")))];
|
|
106
|
-
}
|
|
107
|
-
templateHtml = "";
|
|
108
|
-
serverFilePath = (0, node_path_1.join)(appPath, "dist/server/entry-server.js");
|
|
109
|
-
bootstrapDirPath = (0, node_path_1.join)(appPath, "dist/client/assets");
|
|
110
|
-
return [4 /*yield*/, Promise.resolve("".concat(serverFilePath)).then(function (s) { return __importStar(require(s)); })];
|
|
111
|
-
case 5:
|
|
112
|
-
entry = _b.sent();
|
|
113
|
-
bootstrap = "/assets/" +
|
|
114
|
-
node_fs_1.default
|
|
115
|
-
.readdirSync(bootstrapDirPath)
|
|
116
|
-
.filter(function (fn) { return fn.includes("entry-client") && fn.endsWith(".js"); })[0];
|
|
117
|
-
styles = "/assets/" +
|
|
118
|
-
node_fs_1.default
|
|
119
|
-
.readdirSync((0, node_path_1.join)(appPath, "dist/client/assets"))
|
|
120
|
-
.filter(function (fn) { return fn.includes("entry-client") && fn.endsWith(".css"); })[0];
|
|
121
|
-
render = entry.render, staticRoutes = entry.staticRoutes, loadTemplateHtml = entry.loadTemplateHtml;
|
|
122
|
-
handler_1 = (0, server_js_1.createStaticHandler)(staticRoutes);
|
|
123
|
-
fetchRequest = (0, rasengan_1.createFetchRequest)(req, host);
|
|
124
|
-
return [4 /*yield*/, handler_1.query(fetchRequest)];
|
|
125
|
-
case 6:
|
|
126
|
-
context = _b.sent();
|
|
127
|
-
status_1 = context.status;
|
|
128
|
-
if (status_1 === 302) {
|
|
129
|
-
redirect = context.headers.get("Location");
|
|
130
|
-
if (redirect)
|
|
131
|
-
return [2 /*return*/, res.redirect(redirect)];
|
|
132
|
-
}
|
|
133
|
-
helmetContext = {};
|
|
134
|
-
router = (0, server_js_1.createStaticRouter)(handler_1.dataRoutes, context);
|
|
135
|
-
return [4 /*yield*/, render(router, context, helmetContext)];
|
|
136
|
-
case 7:
|
|
137
|
-
rendered = _b.sent();
|
|
138
|
-
// Load template html
|
|
139
|
-
if (!templateHtml) {
|
|
140
|
-
templateHtml = loadTemplateHtml(helmetContext, bootstrap, styles);
|
|
141
|
-
}
|
|
142
|
-
html = templateHtml.replace("rasengan-body-app", (_a = rendered.html) !== null && _a !== void 0 ? _a : "");
|
|
143
|
-
// Send the rendered html page
|
|
144
|
-
return [2 /*return*/, res
|
|
145
|
-
.status(200)
|
|
146
|
-
.setHeader("Content-Type", "text/html")
|
|
147
|
-
.setHeader("Cache-Control", "max-age=31536000")
|
|
148
|
-
.end(html)];
|
|
149
|
-
case 8:
|
|
150
|
-
e_1 = _b.sent();
|
|
151
|
-
console.log(e_1.stack);
|
|
152
|
-
res.status(500).end(e_1.stack);
|
|
153
|
-
return [3 /*break*/, 9];
|
|
154
|
-
case 9: return [2 /*return*/];
|
|
44
|
+
return __generator(this, function (_a) {
|
|
45
|
+
switch (_a.label) {
|
|
46
|
+
case 0: return [4 /*yield*/, (0, rasengan_1.handleRequest)(req, res)];
|
|
47
|
+
case 1: return [2 /*return*/, _a.sent()];
|
|
155
48
|
}
|
|
156
49
|
});
|
|
157
50
|
});
|
|
@@ -8,7 +8,9 @@ function createFetchRequest(req, host) {
|
|
|
8
8
|
// Note: This had to take originalUrl into account for presumably vite's proxying
|
|
9
9
|
var url = new URL(req.originalUrl || req.url, origin);
|
|
10
10
|
var controller = new AbortController();
|
|
11
|
-
req.on
|
|
11
|
+
if (req.on) {
|
|
12
|
+
req.on("close", function () { return controller.abort(); });
|
|
13
|
+
}
|
|
12
14
|
var headers = new Headers();
|
|
13
15
|
for (var _i = 0, _a = Object.entries(req.headers); _i < _a.length; _i++) {
|
|
14
16
|
var _b = _a[_i], key = _b[0], values = _b[1];
|
|
@@ -26,10 +26,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
26
26
|
exports.fix404 = void 0;
|
|
27
27
|
var node_path_1 = __importStar(require("node:path"));
|
|
28
28
|
function fix404(url, res, appPath) {
|
|
29
|
-
// ! Favicon Fix
|
|
30
|
-
if (url === "/favicon.ico") {
|
|
31
|
-
return res.sendFile(node_path_1.default.resolve((0, node_path_1.join)(appPath, "dist/client/rasengan.png")));
|
|
32
|
-
}
|
|
33
29
|
// ! Robots Fix
|
|
34
30
|
if (url === "/robots.txt") {
|
|
35
31
|
return res.send("\n user-agent: *\n disallow: /downloads/\n disallow: /private/\n allow: /\n \n user-agent: magicsearchbot\n disallow: /uploads/\n ");
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
26
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
27
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
28
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
29
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
30
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
31
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
35
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
36
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
37
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
38
|
+
function step(op) {
|
|
39
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
40
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
41
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
42
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
43
|
+
switch (op[0]) {
|
|
44
|
+
case 0: case 1: t = op; break;
|
|
45
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
46
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
47
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
48
|
+
default:
|
|
49
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
50
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
51
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
52
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
53
|
+
if (t[2]) _.ops.pop();
|
|
54
|
+
_.trys.pop(); continue;
|
|
55
|
+
}
|
|
56
|
+
op = body.call(thisArg, _);
|
|
57
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
58
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
62
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
63
|
+
};
|
|
64
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
65
|
+
var promises_1 = __importDefault(require("node:fs/promises"));
|
|
66
|
+
var node_fs_1 = __importDefault(require("node:fs"));
|
|
67
|
+
var node_path_1 = __importStar(require("node:path"));
|
|
68
|
+
var server_js_1 = require("react-router-dom/server.js");
|
|
69
|
+
// @ts-ignore
|
|
70
|
+
var rasengan_1 = require("rasengan");
|
|
71
|
+
// Create server for production only
|
|
72
|
+
function handleRequest(req, res) {
|
|
73
|
+
var _a;
|
|
74
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
75
|
+
var url, host, appPath, err_1, templateHtml, serverFilePath, bootstrapDirPath, entry, bootstrap, styles, render, staticRoutes, loadTemplateHtml, handler, fetchRequest, context, status_1, redirect, helmetContext, router, rendered, html, e_1;
|
|
76
|
+
return __generator(this, function (_b) {
|
|
77
|
+
switch (_b.label) {
|
|
78
|
+
case 0:
|
|
79
|
+
_b.trys.push([0, 8, , 9]);
|
|
80
|
+
url = req.url;
|
|
81
|
+
host = req.headers.host;
|
|
82
|
+
appPath = process.cwd();
|
|
83
|
+
if (!(url === "/robots.txt")) return [3 /*break*/, 4];
|
|
84
|
+
_b.label = 1;
|
|
85
|
+
case 1:
|
|
86
|
+
_b.trys.push([1, 3, , 4]);
|
|
87
|
+
return [4 /*yield*/, promises_1.default.access(node_path_1.default.resolve((0, node_path_1.join)(appPath, "dist/client/robots.txt")))];
|
|
88
|
+
case 2:
|
|
89
|
+
_b.sent();
|
|
90
|
+
return [2 /*return*/, res.send(node_path_1.default.resolve((0, node_path_1.join)(appPath, "dist/client/robots.txt")))];
|
|
91
|
+
case 3:
|
|
92
|
+
err_1 = _b.sent();
|
|
93
|
+
return [2 /*return*/, res.send("\n user-agent: *\n disallow: /downloads/\n disallow: /private/\n allow: /\n \n user-agent: magicsearchbot\n disallow: /uploads/\n ")];
|
|
94
|
+
case 4:
|
|
95
|
+
// ! Sitemap Fix
|
|
96
|
+
if (url === "/sitemap.xml") {
|
|
97
|
+
return [2 /*return*/, res.send(node_path_1.default.resolve((0, node_path_1.join)(appPath, "dist/client/sitemap.xml")))];
|
|
98
|
+
}
|
|
99
|
+
// ! Manifest Fix
|
|
100
|
+
if (url === "/manifest.json") {
|
|
101
|
+
return [2 /*return*/, res.send(node_path_1.default.resolve((0, node_path_1.join)(appPath, "dist/client/manifest.json")))];
|
|
102
|
+
}
|
|
103
|
+
templateHtml = "";
|
|
104
|
+
serverFilePath = (0, node_path_1.join)(appPath, "dist/server/entry-server.js");
|
|
105
|
+
bootstrapDirPath = (0, node_path_1.join)(appPath, "dist/client/assets");
|
|
106
|
+
return [4 /*yield*/, Promise.resolve("".concat(serverFilePath)).then(function (s) { return __importStar(require(s)); })];
|
|
107
|
+
case 5:
|
|
108
|
+
entry = _b.sent();
|
|
109
|
+
bootstrap = "/assets/" +
|
|
110
|
+
node_fs_1.default
|
|
111
|
+
.readdirSync(bootstrapDirPath)
|
|
112
|
+
.filter(function (fn) { return fn.includes("entry-client") && fn.endsWith(".js"); })[0];
|
|
113
|
+
styles = "/assets/" +
|
|
114
|
+
node_fs_1.default
|
|
115
|
+
.readdirSync((0, node_path_1.join)(appPath, "dist/client/assets"))
|
|
116
|
+
.filter(function (fn) { return fn.includes("entry-client") && fn.endsWith(".css"); })[0];
|
|
117
|
+
render = entry.render, staticRoutes = entry.staticRoutes, loadTemplateHtml = entry.loadTemplateHtml;
|
|
118
|
+
handler = (0, server_js_1.createStaticHandler)(staticRoutes);
|
|
119
|
+
fetchRequest = (0, rasengan_1.createFetchRequest)(req, host);
|
|
120
|
+
return [4 /*yield*/, handler.query(fetchRequest)];
|
|
121
|
+
case 6:
|
|
122
|
+
context = _b.sent();
|
|
123
|
+
status_1 = context.status;
|
|
124
|
+
if (status_1 === 302) {
|
|
125
|
+
redirect = context.headers.get("Location");
|
|
126
|
+
if (redirect)
|
|
127
|
+
return [2 /*return*/, res.redirect(redirect)];
|
|
128
|
+
}
|
|
129
|
+
helmetContext = {};
|
|
130
|
+
router = (0, server_js_1.createStaticRouter)(handler.dataRoutes, context);
|
|
131
|
+
return [4 /*yield*/, render(router, context, helmetContext)];
|
|
132
|
+
case 7:
|
|
133
|
+
rendered = _b.sent();
|
|
134
|
+
// Load template html
|
|
135
|
+
if (!templateHtml) {
|
|
136
|
+
templateHtml = loadTemplateHtml(helmetContext, bootstrap, styles);
|
|
137
|
+
}
|
|
138
|
+
html = templateHtml.replace("rasengan-body-app", (_a = rendered.html) !== null && _a !== void 0 ? _a : "");
|
|
139
|
+
// Send the rendered html page
|
|
140
|
+
if (res) {
|
|
141
|
+
return [2 /*return*/, res
|
|
142
|
+
.status(200)
|
|
143
|
+
.setHeader("Content-Type", "text/html")
|
|
144
|
+
.setHeader("Cache-Control", "max-age=31536000")
|
|
145
|
+
.end(html)];
|
|
146
|
+
}
|
|
147
|
+
return [2 /*return*/, new Response(html, {
|
|
148
|
+
status: 200,
|
|
149
|
+
headers: {
|
|
150
|
+
"Content-Type": "text/html",
|
|
151
|
+
"Cache-Control": "max-age=31536000",
|
|
152
|
+
},
|
|
153
|
+
})];
|
|
154
|
+
case 8:
|
|
155
|
+
e_1 = _b.sent();
|
|
156
|
+
console.log(e_1.stack);
|
|
157
|
+
if (res) {
|
|
158
|
+
return [2 /*return*/, res.status(500).end(e_1.stack)];
|
|
159
|
+
}
|
|
160
|
+
return [2 /*return*/, new Response(e_1.stack, {
|
|
161
|
+
status: 500,
|
|
162
|
+
})];
|
|
163
|
+
case 9: return [2 /*return*/];
|
|
164
|
+
}
|
|
165
|
+
});
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
exports.default = handleRequest;
|
|
@@ -114,7 +114,9 @@ function logServerInfo(port, isProduction, open) {
|
|
|
114
114
|
}
|
|
115
115
|
});
|
|
116
116
|
// Allow the process to exit when Ctrl+C is pressed
|
|
117
|
-
process.stdin.setRawMode
|
|
117
|
+
if (process.stdin.setRawMode instanceof Function) {
|
|
118
|
+
process.stdin.setRawMode(true);
|
|
119
|
+
}
|
|
118
120
|
process.stdin.resume();
|
|
119
121
|
// Set a higher limit for the number of listeners
|
|
120
122
|
process.stdin.setMaxListeners(100);
|