@torpor/build 0.0.6 → 0.1.1
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 +13 -0
- package/README.md +1 -1
- package/dist/Server-CB99REgs.d.cts +74 -0
- package/dist/Server-CB99REgs.d.ts +74 -0
- package/dist/Site-CgoeDt8k.d.cts +29 -0
- package/dist/Site-D95nwrAg.d.ts +29 -0
- package/dist/adapters/cloudflare/index.cjs +125 -0
- package/dist/adapters/cloudflare/index.cjs.map +1 -0
- package/dist/adapters/cloudflare/index.d.cts +13 -0
- package/dist/adapters/cloudflare/index.d.ts +13 -0
- package/dist/adapters/cloudflare/index.js +80 -0
- package/dist/adapters/cloudflare/index.js.map +1 -0
- package/dist/adapters/node/index.cjs +152 -0
- package/dist/adapters/node/index.cjs.map +1 -0
- package/dist/adapters/node/index.d.cts +8 -0
- package/dist/adapters/node/index.d.ts +8 -0
- package/dist/adapters/node/index.js +8 -0
- package/dist/adapters/node/index.js.map +1 -0
- package/dist/bin/index.cjs +541 -93
- package/dist/bin/index.cjs.map +1 -1
- package/dist/bin/index.js +511 -22
- package/dist/bin/index.js.map +1 -1
- package/dist/chunk-5X4T3PZN.js +23 -0
- package/dist/chunk-5X4T3PZN.js.map +1 -0
- package/dist/chunk-ALHFYD7U.js +113 -0
- package/dist/chunk-ALHFYD7U.js.map +1 -0
- package/dist/chunk-V4XTDQEV.js +19 -0
- package/dist/chunk-V4XTDQEV.js.map +1 -0
- package/dist/chunk-VAGHGWM5.js +110 -0
- package/dist/chunk-VAGHGWM5.js.map +1 -0
- package/dist/index.cjs +200 -97
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +20 -28
- package/dist/index.d.ts +20 -28
- package/dist/index.js +85 -17
- package/dist/index.js.map +1 -1
- package/dist/metafile-cjs.json +1 -1
- package/dist/metafile-esm.json +1 -1
- package/dist/response.js +17 -91
- package/dist/response.js.map +1 -1
- package/package.json +26 -9
- package/src/adapters/cloudflare/_worker.ts +38 -0
- package/src/adapters/cloudflare/index.ts +98 -0
- package/src/adapters/node/constants.ts +1 -0
- package/src/adapters/node/createFetchHandler.ts +29 -0
- package/src/adapters/node/createMiddlewareHandler.ts +79 -0
- package/src/adapters/node/createNodeServer.ts +8 -0
- package/src/adapters/node/flattenHeaders.ts +44 -0
- package/src/adapters/node/index.ts +18 -0
- package/src/adapters/node/nodeMessageToNodeResponse.ts +89 -0
- package/src/adapters/node/nodeMessageToRequest.ts +43 -0
- package/src/adapters/node/readableToBuffer.ts +16 -0
- package/src/adapters/node/requestToNodeMessage.ts +26 -0
- package/src/adapters/node/responseToNodeResponse.ts +44 -0
- package/src/bin/index.ts +43 -36
- package/src/index.ts +6 -14
- package/src/server/CookieHelper.ts +36 -0
- package/src/server/HeaderHelper.ts +25 -0
- package/src/server/Server.ts +119 -0
- package/src/server/ServerEvent.ts +33 -0
- package/src/server/ServerFunction.ts +5 -0
- package/src/server/contentType.ts +85 -0
- package/src/site/Router.ts +136 -0
- package/src/site/Routerx.ts +67 -0
- package/src/site/Site.ts +114 -0
- package/src/site/clientEntry.ts +22 -20
- package/src/site/manifest.ts +49 -0
- package/src/site/pathToRegex.ts +10 -0
- package/src/site/prepareTemplate.ts +20 -0
- package/src/site/runBuild.ts +92 -0
- package/src/site/runDev.ts +84 -0
- package/src/site/runPreview.ts +83 -0
- package/src/site/serverEntry.ts +113 -200
- package/src/types/Adapter.ts +10 -0
- package/src/types/HttpMethod.ts +12 -0
- package/src/types/LayoutHandler.ts +7 -0
- package/src/types/ManifestRoute.ts +8 -0
- package/src/types/MiddlewareFunction.ts +8 -0
- package/src/types/PageEndPoint.ts +4 -3
- package/src/types/{PageEvent.ts → PageLoadEvent.ts} +3 -2
- package/src/types/PageServerAction.ts +5 -2
- package/src/types/PageServerEndPoint.ts +1 -0
- package/src/types/PageServerLoad.ts +5 -2
- package/src/types/RouteHandler.ts +6 -5
- package/src/types/RouteHandlerCollection.ts +1 -0
- package/src/types/RouteLayoutHandler.ts +3 -2
- package/src/types/RouteMatchResult.ts +3 -2
- package/src/types/RouteType.ts +7 -0
- package/src/types/ServerEndPoint.ts +1 -0
- package/src/types/ServerHook.ts +3 -2
- package/src/types/{ServerEvent.ts → ServerLoadEvent.ts} +13 -6
- package/src/types/ServerRequest.ts +5 -2
- package/src/types/manifest.d.ts +7 -0
- package/test/app.test.ts +47 -0
- package/tsconfig.json +1 -1
- package/tsup.config.ts +11 -1
- package/vitest.config.ts +3 -0
- package/dist/chunk-IE5EKBNX.js +0 -93
- package/dist/chunk-IE5EKBNX.js.map +0 -1
- package/src/site/FileSystemRouter.ts +0 -25
- package/src/site/buildRoutePath.ts +0 -25
- package/src/site/defineConfig.ts +0 -75
- package/src/site/lazyRoute.ts +0 -72
- package/src/site/routeHandlers.ts +0 -126
- package/src/types/CookieHelper.ts +0 -8
- package/src/types/UserConfig.ts +0 -4
package/src/site/serverEntry.ts
CHANGED
|
@@ -1,45 +1,42 @@
|
|
|
1
|
+
import manifest from "@torpor/build/manifest";
|
|
1
2
|
import { type ServerComponent, type ServerSlotRender } from "@torpor/view";
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
import
|
|
8
|
-
import
|
|
9
|
-
import
|
|
10
|
-
import
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
import
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
3
|
+
import notFound from "../response/notFound.ts";
|
|
4
|
+
import ok from "../response/ok.ts";
|
|
5
|
+
import seeOther from "../response/seeOther.ts";
|
|
6
|
+
import ServerEvent from "../server/ServerEvent.ts";
|
|
7
|
+
import $page from "../state/$page.ts";
|
|
8
|
+
import type PageEndPoint from "../types/PageEndPoint.ts";
|
|
9
|
+
import type PageServerEndPoint from "../types/PageServerEndPoint.ts";
|
|
10
|
+
import RouteHandler from "../types/RouteHandler.ts";
|
|
11
|
+
import {
|
|
12
|
+
HOOK_ROUTE,
|
|
13
|
+
HOOK_SERVER_ROUTE,
|
|
14
|
+
LAYOUT_ROUTE,
|
|
15
|
+
LAYOUT_SERVER_ROUTE,
|
|
16
|
+
PAGE_ROUTE,
|
|
17
|
+
PAGE_SERVER_ROUTE,
|
|
18
|
+
SERVER_ROUTE,
|
|
19
|
+
} from "../types/RouteType";
|
|
20
|
+
import type ServerEndPoint from "../types/ServerEndPoint.ts";
|
|
21
|
+
import type ServerHook from "../types/ServerHook.ts";
|
|
22
|
+
import type ServerLoadEvent from "../types/ServerLoadEvent.ts";
|
|
23
|
+
import Router from "./Router.ts";
|
|
24
|
+
|
|
25
|
+
// Build the router from the Site object created by the user
|
|
26
|
+
const router = new Router();
|
|
27
|
+
router.addPages(manifest.routes);
|
|
28
|
+
|
|
29
|
+
console.log(`routes:\n ${router.routes.map((r) => r.path).join("\n ")}`);
|
|
30
|
+
|
|
31
|
+
export async function load(ev: ServerEvent, template: string) {
|
|
32
|
+
//const url = new URL(`http://${process.env.HOST ?? "localhost"}${ev.request.url}`);
|
|
33
|
+
const url = new URL(ev.request.url);
|
|
25
34
|
const path = url.pathname;
|
|
35
|
+
const query = url.searchParams;
|
|
26
36
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
console.log(
|
|
30
|
-
"handling server",
|
|
31
|
-
event.method,
|
|
32
|
-
"for",
|
|
33
|
-
path,
|
|
34
|
-
searchParams.size ? `with ${searchParams}` : "",
|
|
35
|
-
);
|
|
36
|
-
|
|
37
|
-
if (!printedRoutes) {
|
|
38
|
-
printedRoutes = true;
|
|
39
|
-
console.log("routes:\n " + routeHandlers.handlers.map((h) => h.path).join("\n "));
|
|
40
|
-
}
|
|
37
|
+
console.log(`handling ${ev.request.method} for '${path}'${query.size ? ` with ${query}` : ""}`);
|
|
41
38
|
|
|
42
|
-
const route =
|
|
39
|
+
const route = router.match(path, query);
|
|
43
40
|
if (!route) {
|
|
44
41
|
return notFound();
|
|
45
42
|
}
|
|
@@ -49,121 +46,93 @@ export default eventHandler(async (event) => {
|
|
|
49
46
|
$page.url = url;
|
|
50
47
|
|
|
51
48
|
const handler = route.handler;
|
|
52
|
-
const params = route.
|
|
49
|
+
const params = route.params || {};
|
|
53
50
|
|
|
54
51
|
// TODO: Hit the server hook out here
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
52
|
+
// We could maybe set data loading up as middleware on a route??????
|
|
53
|
+
|
|
54
|
+
switch (handler.type) {
|
|
55
|
+
case PAGE_ROUTE:
|
|
56
|
+
case LAYOUT_ROUTE: {
|
|
57
|
+
// It's a /+page.ts or /_layout.ts endpoint
|
|
58
|
+
if (ev.request.method === "GET") {
|
|
59
|
+
return await loadView(ev, url, handler, params, template);
|
|
60
|
+
} else if (ev.request.method === "POST") {
|
|
61
|
+
return await runAction(ev, url, handler, params, query);
|
|
62
|
+
}
|
|
63
|
+
break;
|
|
64
64
|
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
65
|
+
case PAGE_SERVER_ROUTE:
|
|
66
|
+
case LAYOUT_SERVER_ROUTE: {
|
|
67
|
+
// It's a /+page.server.ts or /_layout.server.ts endpoint
|
|
68
|
+
if (ev.request.method === "GET") {
|
|
69
|
+
return await loadData(ev, url, handler, "load", params);
|
|
70
|
+
}
|
|
71
|
+
break;
|
|
72
|
+
}
|
|
73
|
+
case SERVER_ROUTE: {
|
|
74
|
+
// It's a /+server.ts endpoint
|
|
75
|
+
const functionName = ev.request.method.toLowerCase().replace("delete", "del");
|
|
76
|
+
return await loadData(ev, url, handler, functionName, params);
|
|
77
|
+
}
|
|
78
|
+
case HOOK_ROUTE:
|
|
79
|
+
case HOOK_SERVER_ROUTE: {
|
|
80
|
+
break;
|
|
70
81
|
}
|
|
71
82
|
}
|
|
72
|
-
|
|
83
|
+
|
|
84
|
+
return notFound();
|
|
85
|
+
}
|
|
73
86
|
|
|
74
87
|
async function loadData(
|
|
75
|
-
|
|
88
|
+
ev: ServerEvent,
|
|
76
89
|
url: URL,
|
|
77
90
|
handler: RouteHandler,
|
|
91
|
+
functionName: string,
|
|
78
92
|
params: Record<string, string>,
|
|
79
93
|
) {
|
|
80
|
-
const
|
|
81
|
-
|
|
82
|
-
const serverEndPoint: ServerEndPoint | undefined = (await handler.endPoint).default;
|
|
94
|
+
const serverEndPoint: ServerEndPoint | undefined = (await handler.endPoint()).default;
|
|
83
95
|
if (serverEndPoint && serverEndPoint[functionName]) {
|
|
84
|
-
const serverParams =
|
|
96
|
+
const serverParams = buildServerParams(ev, url, params);
|
|
85
97
|
|
|
86
98
|
if (handler.serverHook) {
|
|
87
|
-
const serverHook: ServerHook | undefined = (await handler.serverHook).default;
|
|
99
|
+
const serverHook: ServerHook | undefined = (await handler.serverHook()).default;
|
|
88
100
|
if (serverHook?.handle) {
|
|
89
101
|
await serverHook.handle(serverParams);
|
|
90
102
|
}
|
|
91
103
|
}
|
|
92
104
|
|
|
93
105
|
const result = await serverEndPoint[functionName](serverParams);
|
|
94
|
-
// If there was no response returned from load (such as errors or a
|
|
95
|
-
// redirect), send an ok response
|
|
96
|
-
return result || ok();
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
async function loadServerData(
|
|
101
|
-
event: H3Event<EventHandlerRequest>,
|
|
102
|
-
url: URL,
|
|
103
|
-
handler: RouteHandler,
|
|
104
|
-
params: Record<string, string>,
|
|
105
|
-
) {
|
|
106
|
-
const serverEndPoint: PageServerEndPoint | undefined = (await handler.endPoint).default;
|
|
107
|
-
if (serverEndPoint?.load) {
|
|
108
|
-
const serverParams = await buildServerParams(event, url, params);
|
|
109
106
|
|
|
110
|
-
if (handler.serverHook) {
|
|
111
|
-
const serverHook: ServerHook | undefined = (await handler.serverHook).default;
|
|
112
|
-
if (serverHook?.handle) {
|
|
113
|
-
await serverHook.handle(serverParams);
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
const result = await serverEndPoint.load(serverParams);
|
|
118
107
|
// If there was no response returned from load (such as errors or a
|
|
119
108
|
// redirect), send an ok response
|
|
120
109
|
return result || ok();
|
|
121
110
|
}
|
|
122
111
|
|
|
123
|
-
|
|
124
|
-
// when loading routes
|
|
125
|
-
//return ok();
|
|
112
|
+
return notFound();
|
|
126
113
|
}
|
|
127
114
|
|
|
128
115
|
async function loadView(
|
|
129
|
-
|
|
116
|
+
ev: ServerEvent,
|
|
130
117
|
url: URL,
|
|
131
118
|
handler: RouteHandler,
|
|
132
119
|
params: Record<string, string>,
|
|
120
|
+
template: string,
|
|
133
121
|
) {
|
|
134
122
|
// There must be a client endpoint with a component
|
|
135
|
-
const clientEndPoint: PageEndPoint | undefined = (await handler.endPoint).default;
|
|
123
|
+
const clientEndPoint: PageEndPoint | undefined = (await handler.endPoint()).default;
|
|
136
124
|
if (!clientEndPoint?.component) {
|
|
137
125
|
return notFound();
|
|
138
126
|
}
|
|
139
127
|
|
|
140
128
|
// There may be a server endpoint
|
|
141
|
-
const serverEndPoint: PageServerEndPoint | undefined =
|
|
142
|
-
|
|
143
|
-
// HACK: wrangle the view into app.html
|
|
144
|
-
// We could instead have an App.torp component with a slot, but you can run
|
|
145
|
-
// into hydration problems that way e.g. if there is a browser plugin that
|
|
146
|
-
// injects elements into <head> or <body>
|
|
147
|
-
const appHtml = loadAppHtml();
|
|
148
|
-
let contentStart = regexIndexOf(appHtml, /\<div\s+id=("app"|'app'|app)\s+/);
|
|
149
|
-
contentStart = appHtml.indexOf(">", contentStart) + 1;
|
|
150
|
-
let contentEnd = appHtml.indexOf("</div>", contentStart);
|
|
151
|
-
if (contentStart === -1 || contentEnd === -1) {
|
|
152
|
-
return serverError;
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
// Build client scripts
|
|
156
|
-
const clientManifest = getManifest("client");
|
|
157
|
-
const clientHandler = clientManifest.inputs[clientManifest.handler];
|
|
158
|
-
const clientScript = clientHandler.output.path;
|
|
159
|
-
const hasClientScript = !!clientScript;
|
|
160
|
-
const manifestJson = JSON.stringify(clientManifest.json());
|
|
161
|
-
const hasManifestJson = manifestJson !== "{}";
|
|
129
|
+
const serverEndPoint: PageServerEndPoint | undefined =
|
|
130
|
+
handler.serverEndPoint && (await handler.serverEndPoint())?.default;
|
|
162
131
|
|
|
163
132
|
// Maybe hit the server hook
|
|
164
|
-
const serverParams =
|
|
133
|
+
const serverParams = buildServerParams(ev, url, params);
|
|
165
134
|
if (handler.serverHook) {
|
|
166
|
-
const serverHook: ServerHook | undefined = (await handler.serverHook).default;
|
|
135
|
+
const serverHook: ServerHook | undefined = (await handler.serverHook()).default;
|
|
167
136
|
if (serverHook?.handle) {
|
|
168
137
|
await serverHook.handle(serverParams);
|
|
169
138
|
}
|
|
@@ -175,9 +144,9 @@ async function loadView(
|
|
|
175
144
|
let data = {};
|
|
176
145
|
if (handler.layouts) {
|
|
177
146
|
for (let layout of handler.layouts) {
|
|
178
|
-
const layoutEndPoint: PageEndPoint | undefined = (await layout.endPoint)?.default;
|
|
179
|
-
const layoutServerEndPoint: PageServerEndPoint | undefined =
|
|
180
|
-
?.default;
|
|
147
|
+
const layoutEndPoint: PageEndPoint | undefined = (await layout.endPoint())?.default;
|
|
148
|
+
const layoutServerEndPoint: PageServerEndPoint | undefined =
|
|
149
|
+
layout.serverEndPoint && (await layout.serverEndPoint())?.default;
|
|
181
150
|
const layoutData = await loadClientAndServerData(
|
|
182
151
|
url,
|
|
183
152
|
params,
|
|
@@ -212,7 +181,8 @@ async function loadView(
|
|
|
212
181
|
slotFunctions[handler.layouts.length] = (_, context) =>
|
|
213
182
|
(clientEndPoint.component as ServerComponent)($props, context);
|
|
214
183
|
for (let i = handler.layouts.length - 1; i >= 0; i--) {
|
|
215
|
-
const layoutEndPoint: PageEndPoint | undefined = (await handler.layouts[i].endPoint)
|
|
184
|
+
const layoutEndPoint: PageEndPoint | undefined = (await handler.layouts[i].endPoint())
|
|
185
|
+
?.default;
|
|
216
186
|
if (layoutEndPoint?.component) {
|
|
217
187
|
if (i === 0) {
|
|
218
188
|
component = layoutEndPoint.component as ServerComponent;
|
|
@@ -227,64 +197,62 @@ async function loadView(
|
|
|
227
197
|
}
|
|
228
198
|
}
|
|
229
199
|
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
let componentCode = "";
|
|
200
|
+
let html;
|
|
233
201
|
try {
|
|
234
|
-
|
|
202
|
+
html = component($props, undefined, slots);
|
|
203
|
+
html = template.replace("%COMPONENT_HTML%", html);
|
|
235
204
|
} catch (error) {
|
|
236
205
|
// TODO: Show a proper Error component
|
|
237
|
-
|
|
206
|
+
html = '<span style="color: red">Script syntax error</span><p>' + error + "</p>";
|
|
238
207
|
console.log(error);
|
|
239
208
|
}
|
|
240
209
|
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
(hasManifestJson ? `<script>window.manifest = ${manifestJson}</script>` : "");
|
|
248
|
-
|
|
249
|
-
//console.log(html);
|
|
250
|
-
|
|
251
|
-
return html;
|
|
210
|
+
return new Response(html, {
|
|
211
|
+
status: 200,
|
|
212
|
+
headers: {
|
|
213
|
+
"Content-Type": "text/html",
|
|
214
|
+
},
|
|
215
|
+
});
|
|
252
216
|
}
|
|
253
217
|
|
|
254
218
|
async function runAction(
|
|
255
|
-
|
|
219
|
+
ev: ServerEvent,
|
|
256
220
|
url: URL,
|
|
257
221
|
handler: RouteHandler,
|
|
258
222
|
params: Record<string, string>,
|
|
259
|
-
|
|
223
|
+
query: URLSearchParams,
|
|
260
224
|
) {
|
|
261
|
-
const actionName = (Array.from(
|
|
262
|
-
const serverEndPoint: PageServerEndPoint | undefined =
|
|
225
|
+
const actionName = (Array.from(query.keys())[0] || "default").replace(/^\//, "");
|
|
226
|
+
const serverEndPoint: PageServerEndPoint | undefined =
|
|
227
|
+
handler.serverEndPoint && (await handler.serverEndPoint()).default;
|
|
263
228
|
if (serverEndPoint?.actions) {
|
|
264
229
|
const action = serverEndPoint.actions[actionName];
|
|
265
230
|
if (action) {
|
|
266
231
|
// TODO: form.errors etc
|
|
267
|
-
const serverParams =
|
|
232
|
+
const serverParams = buildServerParams(ev, url, params);
|
|
268
233
|
|
|
269
234
|
if (handler.serverHook) {
|
|
270
|
-
const serverHook: ServerHook | undefined = (await handler.serverHook).default;
|
|
235
|
+
const serverHook: ServerHook | undefined = (await handler.serverHook()).default;
|
|
271
236
|
if (serverHook?.handle) {
|
|
272
237
|
await serverHook.handle(serverParams);
|
|
273
238
|
}
|
|
274
239
|
}
|
|
275
240
|
|
|
276
|
-
const result = await action(serverParams);
|
|
241
|
+
const result = await action(serverParams); // <--
|
|
242
|
+
|
|
277
243
|
// If there was no response returned from the action (such as errors
|
|
278
244
|
// or a redirect), reload the page by redirecting
|
|
279
245
|
return result || seeOther(url.pathname);
|
|
280
246
|
}
|
|
281
247
|
}
|
|
248
|
+
|
|
249
|
+
return notFound();
|
|
282
250
|
}
|
|
283
251
|
|
|
284
252
|
async function loadClientAndServerData(
|
|
285
253
|
url: URL,
|
|
286
254
|
params: Record<string, string>,
|
|
287
|
-
serverParams:
|
|
255
|
+
serverParams: ServerLoadEvent,
|
|
288
256
|
data: Record<string, any>,
|
|
289
257
|
clientEndPoint?: PageEndPoint,
|
|
290
258
|
serverEndPoint?: PageServerEndPoint,
|
|
@@ -314,72 +282,17 @@ function buildClientParams(url: URL, params: Record<string, string>, data: Recor
|
|
|
314
282
|
};
|
|
315
283
|
}
|
|
316
284
|
|
|
317
|
-
|
|
318
|
-
|
|
285
|
+
function buildServerParams(
|
|
286
|
+
ev: ServerEvent,
|
|
319
287
|
url: URL,
|
|
320
288
|
params: Record<string, string>,
|
|
321
|
-
):
|
|
289
|
+
): ServerLoadEvent {
|
|
322
290
|
return {
|
|
323
291
|
url,
|
|
324
292
|
params,
|
|
325
293
|
appData: {},
|
|
326
|
-
request:
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
get: (name: string) => getCookie(event, name),
|
|
330
|
-
set: (name: string, value: string, options?: CookieSerializeOptions) =>
|
|
331
|
-
setCookie(event, name, value, options),
|
|
332
|
-
delete: (name: string, options?: CookieSerializeOptions) =>
|
|
333
|
-
deleteCookie(event, name, options),
|
|
334
|
-
},
|
|
294
|
+
request: ev.request,
|
|
295
|
+
cookies: ev.cookies,
|
|
296
|
+
headers: ev.headers,
|
|
335
297
|
};
|
|
336
298
|
}
|
|
337
|
-
|
|
338
|
-
// From https://stackoverflow.com/a/78849544
|
|
339
|
-
async function incomingMessageToRequest(req: IncomingMessage, url: URL): Promise<Request> {
|
|
340
|
-
const headers = new Headers();
|
|
341
|
-
for (const [key, value] of Object.entries(req.headers)) {
|
|
342
|
-
if (Array.isArray(value)) {
|
|
343
|
-
value.forEach((v) => headers.append(key, v));
|
|
344
|
-
} else if (value !== undefined) {
|
|
345
|
-
headers.set(key, value);
|
|
346
|
-
}
|
|
347
|
-
}
|
|
348
|
-
// Convert body to Buffer if applicable
|
|
349
|
-
const body = req.method !== "GET" && req.method !== "HEAD" ? await getRequestBody(req) : null;
|
|
350
|
-
return new Request(url, {
|
|
351
|
-
method: req.method,
|
|
352
|
-
headers: headers,
|
|
353
|
-
body: body,
|
|
354
|
-
});
|
|
355
|
-
}
|
|
356
|
-
|
|
357
|
-
function getRequestBody(req: IncomingMessage): Promise<Buffer> {
|
|
358
|
-
return new Promise<Buffer>((resolve, reject) => {
|
|
359
|
-
const chunks: Buffer[] = [];
|
|
360
|
-
req.on("data", (chunk: Buffer) => {
|
|
361
|
-
chunks.push(chunk);
|
|
362
|
-
});
|
|
363
|
-
req.on("end", () => {
|
|
364
|
-
resolve(Buffer.concat(chunks));
|
|
365
|
-
});
|
|
366
|
-
req.on("error", (err) => {
|
|
367
|
-
reject(err);
|
|
368
|
-
});
|
|
369
|
-
});
|
|
370
|
-
}
|
|
371
|
-
|
|
372
|
-
let loadedAppHtml = "";
|
|
373
|
-
function loadAppHtml() {
|
|
374
|
-
if (!loadedAppHtml) {
|
|
375
|
-
let file = path.resolve("src/app.html");
|
|
376
|
-
loadedAppHtml = fs.readFileSync(file).toString();
|
|
377
|
-
}
|
|
378
|
-
return loadedAppHtml;
|
|
379
|
-
}
|
|
380
|
-
|
|
381
|
-
// From https://stackoverflow.com/a/274094
|
|
382
|
-
function regexIndexOf(string: string, regex: RegExp, position?: number) {
|
|
383
|
-
var indexOf = string.substring(position || 0).search(regex);
|
|
384
|
-
return indexOf >= 0 ? indexOf + (position || 0) : indexOf;
|
|
385
|
-
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import Server from "../server/Server";
|
|
2
|
+
import Site from "../site/Site";
|
|
3
|
+
|
|
4
|
+
type Adapter = {
|
|
5
|
+
prebuild?: (site: Site) => Promise<void> | void;
|
|
6
|
+
postbuild?: (site: Site) => Promise<void> | void;
|
|
7
|
+
serve: (server: Server, site: Site) => void;
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
export default Adapter;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type Component } from "@torpor/view";
|
|
2
|
-
import type
|
|
2
|
+
import type PageLoadEvent from "./PageLoadEvent";
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* For +page.
|
|
@@ -13,7 +13,7 @@ type PageEndPoint = {
|
|
|
13
13
|
/**
|
|
14
14
|
* Loads data for the page.
|
|
15
15
|
*/
|
|
16
|
-
load?: (event:
|
|
16
|
+
load?: (event: PageLoadEvent) => any;
|
|
17
17
|
/**
|
|
18
18
|
* The component that is displayed for the page.
|
|
19
19
|
*/
|
|
@@ -22,8 +22,9 @@ type PageEndPoint = {
|
|
|
22
22
|
/**
|
|
23
23
|
* The head element data for the page, which may include a <title> and <meta> elements.
|
|
24
24
|
*/
|
|
25
|
-
head?: HeadElement[] | ((event:
|
|
25
|
+
head?: HeadElement[] | ((event: PageLoadEvent) => HeadElement[]);
|
|
26
26
|
};
|
|
27
|
+
|
|
27
28
|
export default PageEndPoint;
|
|
28
29
|
|
|
29
30
|
type HeadElement = TitleElement | MetaElement;
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import type ServerLoadEvent from "./ServerLoadEvent";
|
|
2
|
+
|
|
3
|
+
type PageServerAction = (
|
|
4
|
+
event: ServerLoadEvent,
|
|
5
|
+
) => Response | Promise<Response | undefined> | Promise<void> | void;
|
|
2
6
|
|
|
3
|
-
type PageServerAction = (event: ServerEvent) => Response | Promise<Response | undefined> | void;
|
|
4
7
|
export default PageServerAction;
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import type ServerLoadEvent from "./ServerLoadEvent";
|
|
2
|
+
|
|
3
|
+
type PageServerLoad = (
|
|
4
|
+
event: ServerLoadEvent,
|
|
5
|
+
) => Response | Promise<Response | undefined> | Promise<void> | void;
|
|
2
6
|
|
|
3
|
-
type PageServerLoad = (event: ServerEvent) => Response | Promise<Response | undefined> | void;
|
|
4
7
|
export default PageServerLoad;
|
|
@@ -2,12 +2,13 @@ import type RouteLayoutHandler from "./RouteLayoutHandler";
|
|
|
2
2
|
|
|
3
3
|
type RouteHandler = {
|
|
4
4
|
path: string;
|
|
5
|
-
|
|
6
|
-
endPoint: Promise<any>;
|
|
5
|
+
type: number;
|
|
6
|
+
endPoint: () => Promise<any>;
|
|
7
7
|
|
|
8
|
-
loaded
|
|
8
|
+
loaded?: boolean;
|
|
9
9
|
layouts?: RouteLayoutHandler[];
|
|
10
|
-
serverEndPoint?: Promise<any>;
|
|
11
|
-
serverHook?: Promise<any>;
|
|
10
|
+
serverEndPoint?: () => Promise<any>;
|
|
11
|
+
serverHook?: () => Promise<any>;
|
|
12
12
|
};
|
|
13
|
+
|
|
13
14
|
export default RouteHandler;
|
|
@@ -2,7 +2,8 @@ import type RouteHandler from "./RouteHandler";
|
|
|
2
2
|
|
|
3
3
|
type RouteMatchResult = {
|
|
4
4
|
handler: RouteHandler;
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
params?: Record<string, string>;
|
|
6
|
+
query?: Record<string, string>;
|
|
7
7
|
};
|
|
8
|
+
|
|
8
9
|
export default RouteMatchResult;
|
package/src/types/ServerHook.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import type ServerLoadEvent from "./ServerLoadEvent";
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* For _hook.server.
|
|
@@ -9,6 +9,7 @@ type ServerHook = {
|
|
|
9
9
|
*/
|
|
10
10
|
handle?: ServerLoad;
|
|
11
11
|
};
|
|
12
|
+
|
|
12
13
|
export default ServerHook;
|
|
13
14
|
|
|
14
|
-
type ServerLoad = (event:
|
|
15
|
+
type ServerLoad = (event: ServerLoadEvent) => Promise<void> | void;
|