@torpor/build 0.2.0 → 0.3.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.
Files changed (158) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/dist/RouteType-g8Ce5gOd.js +107 -0
  3. package/dist/RouteType-g8Ce5gOd.js.map +1 -0
  4. package/dist/Server-CSpY_-Ba.d.ts +78 -0
  5. package/dist/Server-CSpY_-Ba.d.ts.map +1 -0
  6. package/dist/ServerEvent-2-CnAy1W.js +74 -0
  7. package/dist/ServerEvent-2-CnAy1W.js.map +1 -0
  8. package/dist/Site-D4x1l0p5.d.ts +67 -0
  9. package/dist/Site-D4x1l0p5.d.ts.map +1 -0
  10. package/dist/_page-Cv6YWocY.js +33 -0
  11. package/dist/_page-Cv6YWocY.js.map +1 -0
  12. package/dist/bin/index.d.ts +1 -1
  13. package/dist/bin/index.js +14 -19
  14. package/dist/bin/index.js.map +1 -1
  15. package/dist/connectMiddleware-DbLj0St1.js +252 -0
  16. package/dist/connectMiddleware-DbLj0St1.js.map +1 -0
  17. package/dist/index.d.ts +188 -179
  18. package/dist/index.d.ts.map +1 -0
  19. package/dist/index.js +109 -145
  20. package/dist/index.js.map +1 -1
  21. package/dist/nav.d.ts +14 -0
  22. package/dist/nav.d.ts.map +1 -0
  23. package/dist/nav.js +206 -0
  24. package/dist/nav.js.map +1 -0
  25. package/dist/pathToRegex-CTgx7hQP.js +11 -0
  26. package/dist/pathToRegex-CTgx7hQP.js.map +1 -0
  27. package/dist/response-D-XpIuMH.js +307 -0
  28. package/dist/response-D-XpIuMH.js.map +1 -0
  29. package/dist/response.d.ts +336 -151
  30. package/dist/response.d.ts.map +1 -0
  31. package/dist/response.js +4 -37
  32. package/dist/run-CVKpO0HO.js +331 -0
  33. package/dist/run-CVKpO0HO.js.map +1 -0
  34. package/dist/run.d.ts +11 -8
  35. package/dist/run.d.ts.map +1 -0
  36. package/dist/run.js +8 -18
  37. package/dist/seeOther-BmehiI4C.js +110 -0
  38. package/dist/seeOther-BmehiI4C.js.map +1 -0
  39. package/dist/server.d.ts +12 -11
  40. package/dist/server.d.ts.map +1 -0
  41. package/dist/server.js +5 -18
  42. package/dist/state.d.ts +14 -10
  43. package/dist/state.d.ts.map +1 -0
  44. package/dist/state.js +3 -7
  45. package/dist/test.d.ts +12 -11
  46. package/dist/test.d.ts.map +1 -0
  47. package/dist/test.js +152 -225
  48. package/dist/test.js.map +1 -1
  49. package/package.json +25 -29
  50. package/src/bin/index.ts +9 -11
  51. package/src/index.ts +3 -0
  52. package/src/nav/formSubmit.ts +48 -0
  53. package/src/nav/load.ts +9 -0
  54. package/src/nav/loadData.ts +121 -0
  55. package/src/nav/navigate.ts +163 -0
  56. package/src/nav/reload.ts +9 -0
  57. package/src/nav.ts +4 -0
  58. package/src/response/badRequest.ts +9 -4
  59. package/src/response/created.ts +10 -3
  60. package/src/response/forbidden.ts +11 -4
  61. package/src/response/found.ts +30 -0
  62. package/src/response/methodNotAllowed.ts +8 -4
  63. package/src/response/movedPermanently.ts +25 -0
  64. package/src/response/notFound.ts +14 -7
  65. package/src/response/notModified.ts +24 -4
  66. package/src/response/ok.ts +19 -10
  67. package/src/response/permanentRedirect.ts +30 -0
  68. package/src/response/seeOther.ts +9 -3
  69. package/src/response/serverError.ts +14 -2
  70. package/src/response/temporaryRedirect.ts +31 -0
  71. package/src/response/unauthorized.ts +11 -4
  72. package/src/response/unprocessable.ts +8 -2
  73. package/src/response.ts +8 -4
  74. package/src/{site → run}/prepareTemplate.ts +1 -1
  75. package/src/{site → run}/run.ts +1 -1
  76. package/src/{site → run}/runBuild.ts +2 -2
  77. package/src/{site → run}/runDev.ts +2 -2
  78. package/src/{site → run}/runPreview.ts +1 -1
  79. package/src/run.ts +4 -4
  80. package/src/server/Routerx.ts +3 -3
  81. package/src/server/Server.ts +3 -3
  82. package/src/server/connect/connectMiddleware.ts +2 -1
  83. package/src/server/connect/nodeMessageToNodeResponse.ts +2 -2
  84. package/src/site/Router.ts +3 -3
  85. package/src/site/clientEntry.ts +16 -269
  86. package/src/site/defaultAdapter.ts +1 -1
  87. package/src/site/serverEntry.ts +86 -45
  88. package/src/state/$page.ts +3 -12
  89. package/src/state/client.ts +6 -0
  90. package/src/state/internal.ts +45 -0
  91. package/src/test/runTest.ts +1 -1
  92. package/src/types/Adapter.ts +2 -4
  93. package/src/types/ClientState.ts +8 -0
  94. package/src/types/InternalState.ts +7 -0
  95. package/src/types/LayoutHandler.ts +2 -4
  96. package/src/types/LayoutPath.ts +10 -0
  97. package/src/types/ManifestRoute.ts +2 -4
  98. package/src/types/PageEndPoint.ts +2 -4
  99. package/src/types/PageLoadEvent.ts +2 -4
  100. package/src/types/PageServerEndPoint.ts +2 -4
  101. package/src/types/PageState.ts +8 -0
  102. package/src/types/RouteHandler.ts +2 -4
  103. package/src/types/RouteLayoutHandler.ts +2 -4
  104. package/src/types/RouteMatchResult.ts +2 -4
  105. package/src/types/ServerHook.ts +3 -7
  106. package/src/types/ServerLoadEvent.ts +2 -4
  107. package/src/{site → utils}/pathToRegex.ts +1 -1
  108. package/{tsup.config.ts → tsdown.config.ts} +3 -4
  109. package/dist/Server-CNZWh5ca.d.cts +0 -71
  110. package/dist/Server-CNZWh5ca.d.ts +0 -71
  111. package/dist/Site-C2020GV_.d.ts +0 -63
  112. package/dist/Site-DQojGpE-.d.cts +0 -63
  113. package/dist/bin/index.cjs +0 -778
  114. package/dist/bin/index.cjs.map +0 -1
  115. package/dist/bin/index.d.cts +0 -1
  116. package/dist/chunk-565UOT3F.js +0 -18
  117. package/dist/chunk-565UOT3F.js.map +0 -1
  118. package/dist/chunk-B2UNTYN5.js +0 -68
  119. package/dist/chunk-B2UNTYN5.js.map +0 -1
  120. package/dist/chunk-CZHJQCPI.js +0 -286
  121. package/dist/chunk-CZHJQCPI.js.map +0 -1
  122. package/dist/chunk-PTVHEJZ5.js +0 -152
  123. package/dist/chunk-PTVHEJZ5.js.map +0 -1
  124. package/dist/chunk-SJVHHGVW.js +0 -13
  125. package/dist/chunk-SJVHHGVW.js.map +0 -1
  126. package/dist/chunk-TDOXEXG6.js +0 -85
  127. package/dist/chunk-TDOXEXG6.js.map +0 -1
  128. package/dist/chunk-WVXAN4IV.js +0 -50
  129. package/dist/chunk-WVXAN4IV.js.map +0 -1
  130. package/dist/chunk-YRBEYKQM.js +0 -372
  131. package/dist/chunk-YRBEYKQM.js.map +0 -1
  132. package/dist/index.cjs +0 -322
  133. package/dist/index.cjs.map +0 -1
  134. package/dist/index.d.cts +0 -199
  135. package/dist/metafile-cjs.json +0 -1
  136. package/dist/metafile-esm.json +0 -1
  137. package/dist/response.cjs +0 -150
  138. package/dist/response.cjs.map +0 -1
  139. package/dist/response.d.cts +0 -166
  140. package/dist/response.js.map +0 -1
  141. package/dist/run.cjs +0 -787
  142. package/dist/run.cjs.map +0 -1
  143. package/dist/run.d.cts +0 -14
  144. package/dist/run.js.map +0 -1
  145. package/dist/server.cjs +0 -398
  146. package/dist/server.cjs.map +0 -1
  147. package/dist/server.d.cts +0 -17
  148. package/dist/server.js.map +0 -1
  149. package/dist/state.cjs +0 -44
  150. package/dist/state.cjs.map +0 -1
  151. package/dist/state.d.cts +0 -11
  152. package/dist/state.js.map +0 -1
  153. package/dist/test.cjs +0 -538
  154. package/dist/test.cjs.map +0 -1
  155. package/dist/test.d.cts +0 -15
  156. package/src/response/moved.ts +0 -16
  157. package/src/response/redirect.ts +0 -17
  158. package/src/state/Page.ts +0 -8
@@ -1,372 +0,0 @@
1
- import {
2
- serverError
3
- } from "./chunk-B2UNTYN5.js";
4
- import {
5
- Server,
6
- connectMiddleware
7
- } from "./chunk-CZHJQCPI.js";
8
-
9
- // src/site/runBuild.ts
10
- import torpor from "@torpor/unplugin/vite";
11
- import { existsSync, promises as fs } from "fs";
12
- import path2 from "path";
13
- import { build, defineConfig } from "vite";
14
-
15
- // src/site/manifest.ts
16
- import { readFileSync } from "fs";
17
- import path from "path";
18
- var moduleId = "@torpor/build/manifest";
19
- function manifest(site, server = false) {
20
- return {
21
- name: "torpor-manifest",
22
- resolveId: {
23
- order: "pre",
24
- handler(id) {
25
- if (id === moduleId) {
26
- return id;
27
- }
28
- }
29
- },
30
- // @ts-ignore
31
- load(id, viteOptions) {
32
- if (id === moduleId) {
33
- let serverRequest = server && !!viteOptions?.ssr;
34
- return `
35
- ${!serverRequest ? "const load = { default: { load: true } };" : ""}
36
- export default {
37
- routes: [
38
- ${site.routes.map((r) => {
39
- if (serverRequest || !/server\.(ts|js)$/.test(r.file)) {
40
- return `{ path: "${r.path}", type: ${r.type}, endPoint: ${serverRequest || !/server\.(ts|js)$/.test(r.file) ? `() => import(/* @vite-ignore */ "${path.join(site.root, r.file)}")` : "undefined"} }`;
41
- } else {
42
- const haveLoad = readFileSync(path.join(site.root, r.file)).includes("load:");
43
- return `{ path: "${r.path}", type: ${r.type}, endPoint: ${haveLoad ? "() => load" : "undefined"} }`;
44
- }
45
- }).join(",\n ")}
46
- ],
47
- };
48
- `;
49
- }
50
- }
51
- };
52
- }
53
-
54
- // src/site/runBuild.ts
55
- async function runBuild(site) {
56
- const distFolder = path2.resolve(site.root, "dist");
57
- if (existsSync(distFolder)) {
58
- await fs.rm(distFolder, { recursive: true });
59
- }
60
- const clientFolder = path2.join(distFolder, "client");
61
- const serverFolder = path2.join(distFolder, "server");
62
- if (site.adapter.prebuild) {
63
- await site.adapter.prebuild(site);
64
- }
65
- let siteHtml = path2.resolve(site.root, "src/site.html");
66
- const siteFolder = path2.resolve(site.root, "./node_modules/@torpor/build/src/site/");
67
- let clientScript = path2.join(siteFolder, "clientEntry.ts");
68
- let serverScript = path2.join(siteFolder, "serverEntry.ts");
69
- const clientConfig = structuredClone(site.viteConfig ?? {});
70
- clientConfig.plugins = [manifest(site), torpor(), ...site.plugins];
71
- clientConfig.build ??= {};
72
- clientConfig.build.outDir = clientFolder;
73
- clientConfig.build.rollupOptions ??= {};
74
- clientConfig.build.rollupOptions.input = [
75
- siteHtml,
76
- clientScript,
77
- ...site.routes.filter((r) => !/server\.(ts|js)$/.test(r.file)).map((r) => path2.resolve(site.root, r.file)),
78
- ...site.inputs.filter((f) => !/server\.(ts|js)$/.test(f))
79
- ];
80
- clientConfig.build.ssrManifest = true;
81
- await build(defineConfig(clientConfig));
82
- const serverConfig = structuredClone(site.viteConfig ?? {});
83
- serverConfig.plugins = [manifest(site, true), torpor(), ...site.plugins];
84
- serverConfig.build ??= {};
85
- serverConfig.build.outDir = serverFolder;
86
- serverConfig.build.rollupOptions ??= {};
87
- serverConfig.build.rollupOptions.input = [
88
- serverScript,
89
- ...site.routes.map((r) => path2.resolve(site.root, r.file)),
90
- ...site.inputs
91
- ];
92
- serverConfig.build.ssr = serverScript;
93
- await build(defineConfig(serverConfig));
94
- siteHtml = path2.join(clientFolder, "site.html");
95
- await fs.rename(path2.join(clientFolder, "src", "site.html"), siteHtml);
96
- await fs.rm(path2.join(clientFolder, "src"), { recursive: true });
97
- if (site.adapter.postbuild) {
98
- await site.adapter.postbuild(site);
99
- }
100
- }
101
-
102
- // src/site/runDev.ts
103
- import estorpor from "@torpor/unplugin/esbuild";
104
- import torpor2 from "@torpor/unplugin/vite";
105
- import { configDotenv } from "dotenv";
106
- import { promises as fs2 } from "fs";
107
- import path3 from "path";
108
- import { createServer as createViteServer } from "vite";
109
-
110
- // src/site/prepareTemplate.ts
111
- function prepareTemplate(template, clientScript) {
112
- let result = template;
113
- let headStart = result.indexOf("</head>");
114
- if (headStart === -1) {
115
- throw new Error(`Couldn't find <head> end tag`);
116
- }
117
- result = result.substring(0, headStart) + "%COMPONENT_HEAD%" + result.substring(headStart);
118
- let bodyStart = regexIndexOf(result, /\<div\s+id=("app"|'app'|app)\s+/);
119
- bodyStart = result.indexOf(">", bodyStart) + 1;
120
- let bodyEnd = result.indexOf("</div>", bodyStart);
121
- if (bodyStart === -1 || bodyEnd === -1) {
122
- throw new Error(`Couldn't find <div id="app"></div>`);
123
- }
124
- result = result.substring(0, bodyStart) + "%COMPONENT_BODY%" + result.substring(bodyEnd);
125
- result += `<script type="module" src="${clientScript}"></script>`;
126
- return result;
127
- }
128
- function regexIndexOf(string, regex, position) {
129
- var indexOf = string.substring(position || 0).search(regex);
130
- return indexOf >= 0 ? indexOf + (position || 0) : indexOf;
131
- }
132
-
133
- // src/site/runDev.ts
134
- async function runDev(site) {
135
- const server = new Server();
136
- const config = structuredClone(site.viteConfig ?? {});
137
- config.server = { middlewareMode: true };
138
- config.appType = "custom";
139
- config.plugins = [manifest(site, true), torpor2(), ...site.plugins];
140
- config.optimizeDeps ??= {};
141
- config.optimizeDeps.extensions ??= [];
142
- config.optimizeDeps.extensions.push(".torp");
143
- config.optimizeDeps.esbuildOptions ??= {};
144
- config.optimizeDeps.esbuildOptions.plugins ??= [];
145
- config.optimizeDeps.esbuildOptions.plugins.push(estorpor());
146
- const vite = await createViteServer(config);
147
- const templateFile = path3.resolve(site.root, "src/site.html");
148
- let template = await fs2.readFile(templateFile, "utf-8");
149
- template = await vite.transformIndexHtml("", template);
150
- const siteFolder = path3.resolve(site.root, "./node_modules/@torpor/build/src/site/");
151
- let clientScript = path3.join(siteFolder, "clientEntry.ts");
152
- let serverScript = path3.join(siteFolder, "serverEntry.ts");
153
- template = prepareTemplate(template, clientScript);
154
- server.use(connectMiddleware(vite.middlewares));
155
- server.add("*", async (ev) => {
156
- try {
157
- const { load } = await vite.ssrLoadModule(serverScript);
158
- return await load(ev, template);
159
- } catch (e) {
160
- vite.ssrFixStacktrace(e);
161
- return serverError(e);
162
- }
163
- });
164
- configDotenv();
165
- process.env.PROTOCOL ??= "http:";
166
- process.env.HOST ??= "localhost";
167
- process.env.PORT ??= "7059";
168
- site.adapter.serve(server, site);
169
- }
170
-
171
- // src/site/runPreview.ts
172
- import { configDotenv as configDotenv2 } from "dotenv";
173
- import { existsSync as existsSync2, promises as fs3 } from "fs";
174
- import path4 from "path";
175
-
176
- // src/server/contentType.ts
177
- function contentType(extension) {
178
- return types[extension] || "application/octet-stream";
179
- }
180
- var types = {
181
- ".aac": "audio/aac",
182
- ".abw": "application/x-abiword",
183
- ".apng": "image/apng",
184
- ".arc": "application/x-freearc",
185
- ".avif": "image/avif",
186
- ".avi": "video/x-msvideo",
187
- ".azw": "application/vnd.amazon.ebook",
188
- ".bin": "application/octet-stream",
189
- ".bmp": "image/bmp",
190
- ".bz": "application/x-bzip",
191
- ".bz2": "application/x-bzip2",
192
- ".cda": "application/x-cdf",
193
- ".csh": "application/x-csh",
194
- ".css": "text/css",
195
- ".csv": "text/csv",
196
- ".doc": "application/msword",
197
- ".docx": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
198
- ".eot": "application/vnd.ms-fontobject",
199
- ".epub": "application/epub+zip",
200
- ".gz": "application/gzip",
201
- ".gif": "image/gif",
202
- ".htm": "text/html",
203
- ".html": "text/html",
204
- ".ico": "image/vnd.microsoft.icon",
205
- ".ics": "text/calendar",
206
- ".jar": "application/java-archive",
207
- ".jpeg": "image/jpeg",
208
- ".jpg": "image/jpeg",
209
- ".js": "text/javascript",
210
- ".json": "application/json",
211
- ".jsonld": "application/ld+json",
212
- ".mid": "audio/midi",
213
- ".midi": "audio/midi",
214
- ".mjs": "text/javascript",
215
- ".mp3": "audio/mpeg",
216
- ".mp4": "video/mp4",
217
- ".mpeg": "video/mpeg",
218
- ".mpkg": "application/vnd.apple.installer+xml",
219
- ".odp": "application/vnd.oasis.opendocument.presentation",
220
- ".ods": "application/vnd.oasis.opendocument.spreadsheet",
221
- ".odt": "application/vnd.oasis.opendocument.text",
222
- ".oga": "audio/ogg",
223
- ".ogv": "video/ogg",
224
- ".ogx": "application/ogg",
225
- ".opus": "audio/ogg",
226
- ".otf": "font/otf",
227
- ".png": "image/png",
228
- ".pdf": "application/pdf",
229
- ".php": "application/x-httpd-php",
230
- ".ppt": "application/vnd.ms-powerpoint",
231
- ".pptx": "application/vnd.openxmlformats-officedocument.presentationml.presentation",
232
- ".rar": "application/vnd.rar",
233
- ".rtf": "application/rtf",
234
- ".sh": "application/x-sh",
235
- ".svg": "image/svg+xml",
236
- ".tar": "application/x-tar",
237
- ".tif": "image/tiff",
238
- ".tiff": "image/tiff",
239
- ".ts": "video/mp2t",
240
- ".ttf": "font/ttf",
241
- ".txt": "text/plain",
242
- ".vsd": "application/vnd.visio",
243
- ".wav": "audio/wav",
244
- ".weba": "audio/webm",
245
- ".webm": "video/webm",
246
- ".webp": "image/webp",
247
- ".woff": "font/woff",
248
- ".woff2": "font/woff2",
249
- ".xhtml": "application/xhtml+xml",
250
- ".xls": "application/vnd.ms-excel",
251
- ".xlsx": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
252
- ".xml": "application/xml",
253
- ".xul": "application/vnd.mozilla.xul+xml",
254
- ".zip": "application/zip",
255
- ".3gp": "video/3gpp",
256
- ".3g2": "video/3gpp2",
257
- ".7z": "application/x-7z-compressed"
258
- };
259
-
260
- // src/site/runPreview.ts
261
- async function runPreview(site) {
262
- await runBuild(site);
263
- const distFolder = path4.resolve(site.root, "dist");
264
- const clientFolder = path4.join(distFolder, "client");
265
- const serverFolder = path4.join(distFolder, "server");
266
- let clientScript = (await fs3.readdir(path4.join(clientFolder, "assets"))).find(
267
- (f) => f.startsWith("clientEntry-")
268
- );
269
- if (!clientScript) {
270
- throw new Error("clientEntry.js not found");
271
- }
272
- clientScript = `/assets/${clientScript}`;
273
- let siteHtml = path4.join(clientFolder, "site.html");
274
- let template = await fs3.readFile(siteHtml, "utf-8");
275
- template = prepareTemplate(template, clientScript);
276
- const server = new Server();
277
- server.add("/assets/*", async (ev) => {
278
- try {
279
- const url = new URL(ev.request.url);
280
- const file = path4.join(site.root, "dist", "client", url.pathname);
281
- if (existsSync2(file)) {
282
- const body = bufferToArrayBuffer(await fs3.readFile(file));
283
- return new Response(body, {
284
- status: 200,
285
- headers: {
286
- "Content-Type": contentType(path4.extname(file))
287
- }
288
- });
289
- }
290
- } catch (e) {
291
- return serverError(e);
292
- }
293
- });
294
- const serverScript = path4.resolve(serverFolder, "serverEntry.js");
295
- server.add("*", async (ev) => {
296
- try {
297
- const { load } = await import(serverScript);
298
- return await load(ev, template);
299
- } catch (e) {
300
- return serverError(e);
301
- }
302
- });
303
- configDotenv2();
304
- process.env.PROTOCOL ??= "http:";
305
- process.env.HOST ??= "localhost";
306
- process.env.PORT ??= "7059";
307
- site.adapter.serve(server, site);
308
- }
309
- function bufferToArrayBuffer(buffer) {
310
- return buffer.buffer.slice(
311
- buffer.byteOffset,
312
- buffer.byteOffset + buffer.byteLength
313
- );
314
- }
315
-
316
- // src/site/run.ts
317
- import fs4 from "fs";
318
- import path5 from "path";
319
- import { transformWithEsbuild } from "vite";
320
- async function run(folder, mode) {
321
- let configFile = "";
322
- let deleteConfigFile = false;
323
- const jsConfigFile = path5.join(folder, "site.config.js");
324
- const tsConfigFile = path5.join(folder, "site.config.ts");
325
- if (fs4.existsSync(jsConfigFile)) {
326
- configFile = jsConfigFile;
327
- } else if (fs4.existsSync(tsConfigFile)) {
328
- configFile = path5.join(folder, "site.config.temp.js");
329
- let source = fs4.readFileSync(tsConfigFile, "utf-8");
330
- let transformed = await transformWithEsbuild(source, tsConfigFile, {
331
- loader: "ts"
332
- });
333
- fs4.writeFileSync(configFile, transformed.code);
334
- deleteConfigFile = true;
335
- } else {
336
- throw new Error("site.config file not found");
337
- }
338
- const site = (await import(configFile)).default;
339
- if (!site || !site.root || !site.routes) {
340
- throw new Error("Invalid site in config file");
341
- }
342
- if (deleteConfigFile) {
343
- fs4.rmSync(configFile);
344
- }
345
- switch (mode) {
346
- case "dev": {
347
- await runDev(site);
348
- break;
349
- }
350
- case "build": {
351
- await runBuild(site);
352
- break;
353
- }
354
- case "preview": {
355
- await runPreview(site);
356
- break;
357
- }
358
- default: {
359
- console.log("No mode passed, running in dev");
360
- await runDev(site);
361
- break;
362
- }
363
- }
364
- }
365
-
366
- export {
367
- runBuild,
368
- runDev,
369
- runPreview,
370
- run
371
- };
372
- //# sourceMappingURL=chunk-YRBEYKQM.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/site/runBuild.ts","../src/site/manifest.ts","../src/site/runDev.ts","../src/site/prepareTemplate.ts","../src/site/runPreview.ts","../src/server/contentType.ts","../src/site/run.ts"],"sourcesContent":["import torpor from \"@torpor/unplugin/vite\";\nimport { existsSync, promises as fs } from \"node:fs\";\nimport path from \"node:path\";\nimport { build, defineConfig } from \"vite\";\nimport Site from \"./Site.ts\";\nimport manifest from \"./manifest.ts\";\n\n// TODO: Don't cache index.html in dev?\n// TODO: Multiple hook.server locations\n// TODO: Don't reload layouts during client routing\n// TODO: Call the correct +page and +server routes when in the same folder\n\nexport default async function runBuild(site: Site): Promise<void> {\n\t// Delete the dist folder if it exists\n\tconst distFolder = path.resolve(site.root, \"dist\");\n\tif (existsSync(distFolder)) {\n\t\tawait fs.rm(distFolder, { recursive: true });\n\t}\n\tconst clientFolder = path.join(distFolder, \"client\");\n\tconst serverFolder = path.join(distFolder, \"server\");\n\n\t// HOOK: Prebuild\n\tif (site.adapter.prebuild) {\n\t\tawait site.adapter.prebuild(site);\n\t}\n\n\t// TODO: From a setting\n\tlet siteHtml = path.resolve(site.root, \"src/site.html\");\n\n\t// TODO: Is this going to be the correct path after installing from npm?\n\tconst siteFolder = path.resolve(site.root, \"./node_modules/@torpor/build/src/site/\");\n\tlet clientScript = path.join(siteFolder, \"clientEntry.ts\");\n\tlet serverScript = path.join(siteFolder, \"serverEntry.ts\");\n\n\t// Build the client assets, including site.html and the route files\n\t// EXCLUDING anything with `server.js` in the name\n\tconst clientConfig = structuredClone(site.viteConfig ?? {});\n\tclientConfig.plugins = [manifest(site), torpor(), ...site.plugins];\n\tclientConfig.build ??= {};\n\tclientConfig.build.outDir = clientFolder;\n\tclientConfig.build.rollupOptions ??= {};\n\tclientConfig.build.rollupOptions.input = [\n\t\tsiteHtml,\n\t\tclientScript,\n\t\t...site.routes\n\t\t\t.filter((r) => !/server\\.(ts|js)$/.test(r.file))\n\t\t\t.map((r) => path.resolve(site.root, r.file)),\n\t\t...site.inputs.filter((f) => !/server\\.(ts|js)$/.test(f)),\n\t];\n\tclientConfig.build.ssrManifest = true;\n\tawait build(defineConfig(clientConfig));\n\n\t// Build the server assets, including the server entry script and the route\n\t// files\n\tconst serverConfig = structuredClone(site.viteConfig ?? {});\n\tserverConfig.plugins = [manifest(site, true), torpor(), ...site.plugins];\n\tserverConfig.build ??= {};\n\tserverConfig.build.outDir = serverFolder;\n\tserverConfig.build.rollupOptions ??= {};\n\tserverConfig.build.rollupOptions.input = [\n\t\tserverScript,\n\t\t...site.routes.map((r) => path.resolve(site.root, r.file)),\n\t\t...site.inputs,\n\t];\n\tserverConfig.build.ssr = serverScript;\n\tawait build(defineConfig(serverConfig));\n\n\t// Move the site.html file into /client\n\t// HACK: Should do this in Rollup if possible?\n\tsiteHtml = path.join(clientFolder, \"site.html\");\n\tawait fs.rename(path.join(clientFolder, \"src\", \"site.html\"), siteHtml);\n\tawait fs.rm(path.join(clientFolder, \"src\"), { recursive: true });\n\n\t// HOOK: Postbuild\n\tif (site.adapter.postbuild) {\n\t\tawait site.adapter.postbuild(site);\n\t}\n}\n","import { readFileSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { Plugin } from \"vite\";\nimport Site from \"./Site\";\n\nconst moduleId = \"@torpor/build/manifest\";\n\n/**\n * A Vite plugin that provides information about the app to both clientEntry and\n * serverEntry.\n */\nexport default function manifest(site: Site, server = false): Plugin {\n\treturn {\n\t\tname: \"torpor-manifest\",\n\t\tresolveId: {\n\t\t\torder: \"pre\",\n\t\t\thandler(id) {\n\t\t\t\tif (id === moduleId) {\n\t\t\t\t\treturn id;\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t\t// @ts-ignore\n\t\tload(id, viteOptions) {\n\t\t\tif (id === moduleId) {\n\t\t\t\tlet serverRequest = server && !!viteOptions?.ssr;\n\t\t\t\treturn `\n${!serverRequest ? \"const load = { default: { load: true } };\" : \"\"}\nexport default {\n routes: [\n ${site.routes\n\t\t\t.map((r) => {\n\t\t\t\tif (serverRequest || !/server\\.(ts|js)$/.test(r.file)) {\n\t\t\t\t\treturn `{ path: \"${r.path}\", type: ${r.type}, endPoint: ${serverRequest || !/server\\.(ts|js)$/.test(r.file) ? `() => import(/* @vite-ignore */ \"${path.join(site.root, r.file)}\")` : \"undefined\"} }`;\n\t\t\t\t} else {\n\t\t\t\t\t// On the client, for a server route, we need to check\n\t\t\t\t\t// whether there's a load function and set a dummy endPoint\n\t\t\t\t\t// if so. The correct endpoint will be hit in clientEntry\n\t\t\t\t\t// HACK: Should do this better than checking for `load:` in source...\n\t\t\t\t\tconst haveLoad = readFileSync(path.join(site.root, r.file)).includes(\"load:\");\n\t\t\t\t\treturn `{ path: \"${r.path}\", type: ${r.type}, endPoint: ${haveLoad ? \"() => load\" : \"undefined\"} }`;\n\t\t\t\t}\n\t\t\t})\n\t\t\t.join(\",\\n \")}\n ],\n};\n`;\n\t\t\t}\n\t\t},\n\t};\n}\n","import estorpor from \"@torpor/unplugin/esbuild\";\nimport torpor from \"@torpor/unplugin/vite\";\nimport { configDotenv } from \"dotenv\";\nimport { promises as fs } from \"node:fs\";\nimport path from \"node:path\";\nimport { createServer as createViteServer } from \"vite\";\nimport { serverError } from \"../response.ts\";\nimport Server from \"../server/Server.ts\";\nimport connectMiddleware from \"../server/connect/connectMiddleware.ts\";\nimport Site from \"./Site.ts\";\nimport manifest from \"./manifest.ts\";\nimport prepareTemplate from \"./prepareTemplate.ts\";\n\nexport default async function runDev(site: Site): Promise<void> {\n\tconst server = new Server();\n\n\t// Create the Vite server in middleware mode and configure the app type as\n\t// \"custom\", disabling Vite's own HTML serving logic so the parent server\n\t// can take control\n\tconst config = structuredClone(site.viteConfig ?? {});\n\tconfig.server = { middlewareMode: true };\n\tconfig.appType = \"custom\";\n\tconfig.plugins = [manifest(site, true), torpor(), ...site.plugins];\n\n\t// HACK: To be able to import `.torp` files from barrel files in\n\t// node_modules, we need to add their libraries to `ssr.noExternal` in\n\t// site.config.ts, and let esbuild know how to compile them here\n\tconfig.optimizeDeps ??= {};\n\tconfig.optimizeDeps.extensions ??= [];\n\tconfig.optimizeDeps.extensions.push(\".torp\");\n\tconfig.optimizeDeps.esbuildOptions ??= {};\n\tconfig.optimizeDeps.esbuildOptions.plugins ??= [];\n\tconfig.optimizeDeps.esbuildOptions.plugins.push(estorpor());\n\n\tconst vite = await createViteServer(config);\n\n\t// Read site.html\n\t// It's called site.html because @torpor/build builds the site (html, routes\n\t// etc) while the user builds the app (components etc)\n\tconst templateFile = path.resolve(site.root, \"src/site.html\");\n\tlet template = await fs.readFile(templateFile, \"utf-8\");\n\n\t// Apply Vite HTML transforms. This injects the Vite HMR client, and also\n\t// applies HTML transforms from Vite plugins. Note that we only support a\n\t// universal transform, not individual transforms for each route\n\ttemplate = await vite.transformIndexHtml(\"\", template);\n\n\t// TODO: Is this going to be the correct path after installing from npm?\n\tconst siteFolder = path.resolve(site.root, \"./node_modules/@torpor/build/src/site/\");\n\tlet clientScript = path.join(siteFolder, \"clientEntry.ts\");\n\tlet serverScript = path.join(siteFolder, \"serverEntry.ts\");\n\n\t// Prepare site.html so that we can just splice components into it\n\ttemplate = prepareTemplate(template, clientScript);\n\n\t// Use Vite's Connect instance as middleware. We need to wrap it with\n\t// createMiddlewareHandler that converts Connect middleware to\n\t// Request/Response web handlers\n\tserver.use(connectMiddleware(vite.middlewares));\n\n\t// Every request (GET, POST, etc) goes through loadEndPoint\n\tserver.add(\"*\", async (ev) => {\n\t\ttry {\n\t\t\t// Load the server entry. ssrLoadModule automatically transforms ESM\n\t\t\t// source code to be usable in Node.js. No bundling is required, and\n\t\t\t// it provides efficient invalidation similar to HMR\n\t\t\tconst { load } = await vite.ssrLoadModule(serverScript);\n\n\t\t\t// Render the app HTML (or fetch server data etc) via serverEntry's\n\t\t\t// exported `load` function\n\t\t\treturn await load(ev, template);\n\t\t} catch (e: any) {\n\t\t\t// If an error is caught, let Vite fix the stack trace so it maps\n\t\t\t// back to your actual source code\n\t\t\tvite.ssrFixStacktrace(e);\n\t\t\treturn serverError(e);\n\t\t}\n\t});\n\n\t// Load environment variables from a `.env` file, with defaults if not set\n\tconfigDotenv();\n\n\tprocess.env.PROTOCOL ??= \"http:\";\n\tprocess.env.HOST ??= \"localhost\";\n\tprocess.env.PORT ??= \"7059\";\n\n\t// Serve the site\n\tsite.adapter.serve(server, site);\n}\n","export default function prepareTemplate(template: string, clientScript: string): string {\n\tlet result = template;\n\n\t// Put %COMPONENT_HEAD% before </head>\n\t// This is where styles will go\n\tlet headStart = result.indexOf(\"</head>\");\n\tif (headStart === -1) {\n\t\tthrow new Error(`Couldn't find <head> end tag`);\n\t}\n\tresult = result.substring(0, headStart) + \"%COMPONENT_HEAD%\" + result.substring(headStart);\n\n\t// Put %COMPONENT_BODY% inside <div id=\"app\"></div>\n\t// This is where the component's HTML will go\n\tlet bodyStart = regexIndexOf(result, /\\<div\\s+id=(\"app\"|'app'|app)\\s+/);\n\tbodyStart = result.indexOf(\">\", bodyStart) + 1;\n\tlet bodyEnd = result.indexOf(\"</div>\", bodyStart);\n\tif (bodyStart === -1 || bodyEnd === -1) {\n\t\tthrow new Error(`Couldn't find <div id=\"app\"></div>`);\n\t}\n\tresult = result.substring(0, bodyStart) + \"%COMPONENT_BODY%\" + result.substring(bodyEnd);\n\n\t// Add the clientEntry script at the very end, for hydrating and navigating\n\tresult += `<script type=\"module\" src=\"${clientScript}\"></script>`;\n\n\treturn result;\n}\n\n// From https://stackoverflow.com/a/274094\nfunction regexIndexOf(string: string, regex: RegExp, position?: number) {\n\tvar indexOf = string.substring(position || 0).search(regex);\n\treturn indexOf >= 0 ? indexOf + (position || 0) : indexOf;\n}\n","import { configDotenv } from \"dotenv\";\nimport { existsSync, promises as fs } from \"node:fs\";\nimport path from \"node:path\";\nimport { serverError } from \"../response.ts\";\nimport Server from \"../server/Server.ts\";\nimport contentType from \"../server/contentType.ts\";\nimport Site from \"./Site\";\nimport prepareTemplate from \"./prepareTemplate.ts\";\nimport runBuild from \"./runBuild\";\n\nexport default async function runPreview(site: Site): Promise<void> {\n\t// Build the site\n\tawait runBuild(site);\n\n\tconst distFolder = path.resolve(site.root, \"dist\");\n\tconst clientFolder = path.join(distFolder, \"client\");\n\tconst serverFolder = path.join(distFolder, \"server\");\n\n\t// Find the client script file in /assets\n\tlet clientScript = (await fs.readdir(path.join(clientFolder, \"assets\"))).find((f) =>\n\t\tf.startsWith(\"clientEntry-\"),\n\t);\n\tif (!clientScript) {\n\t\tthrow new Error(\"clientEntry.js not found\");\n\t}\n\tclientScript = `/assets/${clientScript}`;\n\n\t// Read site.html\n\t// It's called site.html because @torpor/build builds the site (html, routes\n\t// etc) while the user builds the app (components etc)\n\tlet siteHtml = path.join(clientFolder, \"site.html\");\n\tlet template = await fs.readFile(siteHtml, \"utf-8\");\n\n\t// Prepare site.html so that we can just splice components into it\n\ttemplate = prepareTemplate(template, clientScript);\n\n\t// Configure the server\n\tconst server = new Server();\n\n\t// Serve dist/client/assets statically\n\tserver.add(\"/assets/*\", async (ev) => {\n\t\ttry {\n\t\t\tconst url = new URL(ev.request.url);\n\t\t\tconst file = path.join(site.root, \"dist\", \"client\", url.pathname);\n\t\t\tif (existsSync(file)) {\n\t\t\t\t// TODO: Stream the data?\n\t\t\t\tconst body = bufferToArrayBuffer(await fs.readFile(file));\n\t\t\t\treturn new Response(body, {\n\t\t\t\t\tstatus: 200,\n\t\t\t\t\theaders: {\n\t\t\t\t\t\t\"Content-Type\": contentType(path.extname(file)),\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t} catch (e: any) {\n\t\t\treturn serverError(e);\n\t\t}\n\t});\n\n\t// Every request (GET, POST, etc) goes through loadEndPoint\n\tconst serverScript = path.resolve(serverFolder, \"serverEntry.js\");\n\tserver.add(\"*\", async (ev) => {\n\t\ttry {\n\t\t\t// Load the server entry\n\t\t\tconst { load } = await import(serverScript);\n\n\t\t\t// Render the app HTML (or fetch server data etc) via serverEntry's\n\t\t\t// exported `load` function\n\t\t\treturn await load(ev, template);\n\t\t} catch (e: any) {\n\t\t\treturn serverError(e);\n\t\t}\n\t});\n\n\t// Load environment variables from a `.env` file, with defaults if not set\n\tconfigDotenv();\n\n\tprocess.env.PROTOCOL ??= \"http:\";\n\tprocess.env.HOST ??= \"localhost\";\n\tprocess.env.PORT ??= \"7059\";\n\n\t// Serve the site\n\tsite.adapter.serve(server, site);\n}\n\n// From https://stackoverflow.com/a/79345620\n// No idea why it is needed\nfunction bufferToArrayBuffer(buffer: Buffer): ArrayBuffer {\n\treturn buffer.buffer.slice(\n\t\tbuffer.byteOffset,\n\t\tbuffer.byteOffset + buffer.byteLength,\n\t) as ArrayBuffer;\n}\n","// From https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/MIME_types/Common_types\n\nexport default function contentType(extension: string): string {\n\treturn types[extension] || \"application/octet-stream\";\n}\n\nconst types: Record<string, string> = {\n\t\".aac\": \"audio/aac\",\n\t\".abw\": \"application/x-abiword\",\n\t\".apng\": \"image/apng\",\n\t\".arc\": \"application/x-freearc\",\n\t\".avif\": \"image/avif\",\n\t\".avi\": \"video/x-msvideo\",\n\t\".azw\": \"application/vnd.amazon.ebook\",\n\t\".bin\": \"application/octet-stream\",\n\t\".bmp\": \"image/bmp\",\n\t\".bz\": \"application/x-bzip\",\n\t\".bz2\": \"application/x-bzip2\",\n\t\".cda\": \"application/x-cdf\",\n\t\".csh\": \"application/x-csh\",\n\t\".css\": \"text/css\",\n\t\".csv\": \"text/csv\",\n\t\".doc\": \"application/msword\",\n\t\".docx\": \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\n\t\".eot\": \"application/vnd.ms-fontobject\",\n\t\".epub\": \"application/epub+zip\",\n\t\".gz\": \"application/gzip\",\n\t\".gif\": \"image/gif\",\n\t\".htm\": \"text/html\",\n\t\".html\": \"text/html\",\n\t\".ico\": \"image/vnd.microsoft.icon\",\n\t\".ics\": \"text/calendar\",\n\t\".jar\": \"application/java-archive\",\n\t\".jpeg\": \"image/jpeg\",\n\t\".jpg\": \"image/jpeg\",\n\t\".js\": \"text/javascript\",\n\t\".json\": \"application/json\",\n\t\".jsonld\": \"application/ld+json\",\n\t\".mid\": \"audio/midi\",\n\t\".midi\": \"audio/midi\",\n\t\".mjs\": \"text/javascript\",\n\t\".mp3\": \"audio/mpeg\",\n\t\".mp4\": \"video/mp4\",\n\t\".mpeg\": \"video/mpeg\",\n\t\".mpkg\": \"application/vnd.apple.installer+xml\",\n\t\".odp\": \"application/vnd.oasis.opendocument.presentation\",\n\t\".ods\": \"application/vnd.oasis.opendocument.spreadsheet\",\n\t\".odt\": \"application/vnd.oasis.opendocument.text\",\n\t\".oga\": \"audio/ogg\",\n\t\".ogv\": \"video/ogg\",\n\t\".ogx\": \"application/ogg\",\n\t\".opus\": \"audio/ogg\",\n\t\".otf\": \"font/otf\",\n\t\".png\": \"image/png\",\n\t\".pdf\": \"application/pdf\",\n\t\".php\": \"application/x-httpd-php\",\n\t\".ppt\": \"application/vnd.ms-powerpoint\",\n\t\".pptx\": \"application/vnd.openxmlformats-officedocument.presentationml.presentation\",\n\t\".rar\": \"application/vnd.rar\",\n\t\".rtf\": \"application/rtf\",\n\t\".sh\": \"application/x-sh\",\n\t\".svg\": \"image/svg+xml\",\n\t\".tar\": \"application/x-tar\",\n\t\".tif\": \"image/tiff\",\n\t\".tiff\": \"image/tiff\",\n\t\".ts\": \"video/mp2t\",\n\t\".ttf\": \"font/ttf\",\n\t\".txt\": \"text/plain\",\n\t\".vsd\": \"application/vnd.visio\",\n\t\".wav\": \"audio/wav\",\n\t\".weba\": \"audio/webm\",\n\t\".webm\": \"video/webm\",\n\t\".webp\": \"image/webp\",\n\t\".woff\": \"font/woff\",\n\t\".woff2\": \"font/woff2\",\n\t\".xhtml\": \"application/xhtml+xml\",\n\t\".xls\": \"application/vnd.ms-excel\",\n\t\".xlsx\": \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n\t\".xml\": \"application/xml\",\n\t\".xul\": \"application/vnd.mozilla.xul+xml\",\n\t\".zip\": \"application/zip\",\n\t\".3gp\": \"video/3gpp\",\n\t\".3g2\": \"video/3gpp2\",\n\t\".7z\": \"application/x-7z-compressed\",\n};\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { transformWithEsbuild } from \"vite\";\nimport Site from \"./Site\";\nimport runBuild from \"./runBuild\";\nimport runDev from \"./runDev\";\nimport runPreview from \"./runPreview\";\n\nexport default async function run(\n\tfolder: string,\n\tmode: \"dev\" | \"build\" | \"preview\",\n): Promise<void> {\n\t// Look for and load a site.config.js/ts file in the working directory\n\tlet configFile = \"\";\n\tlet deleteConfigFile = false;\n\tconst jsConfigFile = path.join(folder, \"site.config.js\");\n\tconst tsConfigFile = path.join(folder, \"site.config.ts\");\n\tif (fs.existsSync(jsConfigFile)) {\n\t\t// If it's JS, we can just import it straight up\n\t\tconfigFile = jsConfigFile;\n\t} else if (fs.existsSync(tsConfigFile)) {\n\t\t// If it's TS, we need to convert it to JS\n\t\t// TODO: Put the generated file somewhere better (dist?)\n\t\tconfigFile = path.join(folder, \"site.config.temp.js\");\n\t\tlet source = fs.readFileSync(tsConfigFile, \"utf-8\");\n\t\tlet transformed = await transformWithEsbuild(source, tsConfigFile, {\n\t\t\tloader: \"ts\",\n\t\t});\n\t\tfs.writeFileSync(configFile, transformed.code);\n\t\tdeleteConfigFile = true;\n\t} else {\n\t\tthrow new Error(\"site.config file not found\");\n\t}\n\n\tconst site = (await import(configFile)).default as Site;\n\tif (!site || !site.root || !site.routes) {\n\t\tthrow new Error(\"Invalid site in config file\");\n\t}\n\tif (deleteConfigFile) {\n\t\tfs.rmSync(configFile);\n\t}\n\n\tswitch (mode) {\n\t\tcase \"dev\": {\n\t\t\tawait runDev(site);\n\t\t\tbreak;\n\t\t}\n\t\tcase \"build\": {\n\t\t\tawait runBuild(site);\n\t\t\tbreak;\n\t\t}\n\t\tcase \"preview\": {\n\t\t\tawait runPreview(site);\n\t\t\tbreak;\n\t\t}\n\t\tdefault: {\n\t\t\tconsole.log(\"No mode passed, running in dev\");\n\t\t\tawait runDev(site);\n\t\t\tbreak;\n\t\t}\n\t}\n}\n"],"mappings":"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","names":["path","path","torpor","fs","path","torpor","path","fs","configDotenv","existsSync","fs","path","path","fs","existsSync","configDotenv","fs","path","path","fs"]}