@torpor/build 0.0.5 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -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 +33 -36
- package/dist/index.d.ts +33 -36
- 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-L7GOYKUG.js +0 -93
- package/dist/chunk-L7GOYKUG.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/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# @torpor/build
|
|
2
2
|
|
|
3
|
+
## 0.1.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- Chore: replace Vinxi with Vite plugins
|
|
8
|
+
|
|
9
|
+
## 0.0.6
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- Updated dependencies [b90d729]
|
|
14
|
+
- @torpor/view@0.0.7
|
|
15
|
+
- @torpor/unplugin@0.0.6
|
|
16
|
+
|
|
3
17
|
## 0.0.5
|
|
4
18
|
|
|
5
19
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { SerializeOptions } from 'cookie';
|
|
2
|
+
|
|
3
|
+
declare class CookieHelper {
|
|
4
|
+
request: Request;
|
|
5
|
+
cookies: Map<string, string>;
|
|
6
|
+
constructor(request: Request);
|
|
7
|
+
get(name: string): string | undefined;
|
|
8
|
+
set(name: string, value: string, options?: SerializeOptions): void;
|
|
9
|
+
delete(name: string, options?: SerializeOptions): void;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
declare class HeaderHelper {
|
|
13
|
+
request: Request;
|
|
14
|
+
headers: Map<string, string>;
|
|
15
|
+
constructor(request: Request);
|
|
16
|
+
get(name: string): string | undefined;
|
|
17
|
+
set(name: string, value: string): void;
|
|
18
|
+
delete(name: string): void;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
declare class ServerEvent {
|
|
22
|
+
request: Request;
|
|
23
|
+
response?: Response;
|
|
24
|
+
params?: {
|
|
25
|
+
[key: string]: string;
|
|
26
|
+
};
|
|
27
|
+
cookies: CookieHelper;
|
|
28
|
+
headers: HeaderHelper;
|
|
29
|
+
constructor(request: Request, params?: {
|
|
30
|
+
[key: string]: string;
|
|
31
|
+
});
|
|
32
|
+
addHeaders(): void;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
type MiddlewareFunction = (ev: ServerEvent, next: () => void | Promise<void>) => void | Promise<void>;
|
|
36
|
+
|
|
37
|
+
type ServerFunction = (e: ServerEvent) => Response | Promise<Response | undefined> | undefined;
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* A Fetch API Request/Response server.
|
|
41
|
+
*/
|
|
42
|
+
declare class Server {
|
|
43
|
+
routes: RouteHandler[];
|
|
44
|
+
middleware: MiddlewareFunction[];
|
|
45
|
+
constructor();
|
|
46
|
+
/**
|
|
47
|
+
* The standard Fetch API method that should work in any runtime (including
|
|
48
|
+
* Node with polyfills).
|
|
49
|
+
* @returns
|
|
50
|
+
*/
|
|
51
|
+
fetch: (input: RequestInfo | URL, init?: RequestInit) => Promise<Response>;
|
|
52
|
+
/**
|
|
53
|
+
* Adds a server function at a route path.
|
|
54
|
+
* @param path The route path pattern.
|
|
55
|
+
* @param fn The function to call when the pattern is matched.
|
|
56
|
+
* @returns
|
|
57
|
+
*/
|
|
58
|
+
add(path: string, fn: ServerFunction): Server;
|
|
59
|
+
match(path: string): {
|
|
60
|
+
fn: ServerFunction;
|
|
61
|
+
params: {
|
|
62
|
+
[key: string]: string;
|
|
63
|
+
} | undefined;
|
|
64
|
+
} | undefined;
|
|
65
|
+
use(...fn: MiddlewareFunction[]): Server;
|
|
66
|
+
}
|
|
67
|
+
declare class RouteHandler {
|
|
68
|
+
path: string;
|
|
69
|
+
regex: RegExp;
|
|
70
|
+
fn: ServerFunction;
|
|
71
|
+
constructor(path: string, fn: ServerFunction);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export { CookieHelper as C, HeaderHelper as H, Server as S };
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { SerializeOptions } from 'cookie';
|
|
2
|
+
|
|
3
|
+
declare class CookieHelper {
|
|
4
|
+
request: Request;
|
|
5
|
+
cookies: Map<string, string>;
|
|
6
|
+
constructor(request: Request);
|
|
7
|
+
get(name: string): string | undefined;
|
|
8
|
+
set(name: string, value: string, options?: SerializeOptions): void;
|
|
9
|
+
delete(name: string, options?: SerializeOptions): void;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
declare class HeaderHelper {
|
|
13
|
+
request: Request;
|
|
14
|
+
headers: Map<string, string>;
|
|
15
|
+
constructor(request: Request);
|
|
16
|
+
get(name: string): string | undefined;
|
|
17
|
+
set(name: string, value: string): void;
|
|
18
|
+
delete(name: string): void;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
declare class ServerEvent {
|
|
22
|
+
request: Request;
|
|
23
|
+
response?: Response;
|
|
24
|
+
params?: {
|
|
25
|
+
[key: string]: string;
|
|
26
|
+
};
|
|
27
|
+
cookies: CookieHelper;
|
|
28
|
+
headers: HeaderHelper;
|
|
29
|
+
constructor(request: Request, params?: {
|
|
30
|
+
[key: string]: string;
|
|
31
|
+
});
|
|
32
|
+
addHeaders(): void;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
type MiddlewareFunction = (ev: ServerEvent, next: () => void | Promise<void>) => void | Promise<void>;
|
|
36
|
+
|
|
37
|
+
type ServerFunction = (e: ServerEvent) => Response | Promise<Response | undefined> | undefined;
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* A Fetch API Request/Response server.
|
|
41
|
+
*/
|
|
42
|
+
declare class Server {
|
|
43
|
+
routes: RouteHandler[];
|
|
44
|
+
middleware: MiddlewareFunction[];
|
|
45
|
+
constructor();
|
|
46
|
+
/**
|
|
47
|
+
* The standard Fetch API method that should work in any runtime (including
|
|
48
|
+
* Node with polyfills).
|
|
49
|
+
* @returns
|
|
50
|
+
*/
|
|
51
|
+
fetch: (input: RequestInfo | URL, init?: RequestInit) => Promise<Response>;
|
|
52
|
+
/**
|
|
53
|
+
* Adds a server function at a route path.
|
|
54
|
+
* @param path The route path pattern.
|
|
55
|
+
* @param fn The function to call when the pattern is matched.
|
|
56
|
+
* @returns
|
|
57
|
+
*/
|
|
58
|
+
add(path: string, fn: ServerFunction): Server;
|
|
59
|
+
match(path: string): {
|
|
60
|
+
fn: ServerFunction;
|
|
61
|
+
params: {
|
|
62
|
+
[key: string]: string;
|
|
63
|
+
} | undefined;
|
|
64
|
+
} | undefined;
|
|
65
|
+
use(...fn: MiddlewareFunction[]): Server;
|
|
66
|
+
}
|
|
67
|
+
declare class RouteHandler {
|
|
68
|
+
path: string;
|
|
69
|
+
regex: RegExp;
|
|
70
|
+
fn: ServerFunction;
|
|
71
|
+
constructor(path: string, fn: ServerFunction);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export { CookieHelper as C, HeaderHelper as H, Server as S };
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Plugin } from 'vite';
|
|
2
|
+
import { S as Server } from './Server-CB99REgs.cjs';
|
|
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
|
+
/**
|
|
11
|
+
* The Site class contains the information necessary to setup a @torpor/build
|
|
12
|
+
* site, including routes, plugins, and options.
|
|
13
|
+
*/
|
|
14
|
+
declare class Site {
|
|
15
|
+
#private;
|
|
16
|
+
root: string;
|
|
17
|
+
routes: {
|
|
18
|
+
path: string;
|
|
19
|
+
file: string;
|
|
20
|
+
type: number;
|
|
21
|
+
}[];
|
|
22
|
+
plugins: Plugin[];
|
|
23
|
+
adapter: Adapter;
|
|
24
|
+
constructor();
|
|
25
|
+
addRouteFolder(folder: string): Promise<void>;
|
|
26
|
+
addRouteFile(path: string, file: string): void;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export { Site as S };
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Plugin } from 'vite';
|
|
2
|
+
import { S as Server } from './Server-CB99REgs.js';
|
|
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
|
+
/**
|
|
11
|
+
* The Site class contains the information necessary to setup a @torpor/build
|
|
12
|
+
* site, including routes, plugins, and options.
|
|
13
|
+
*/
|
|
14
|
+
declare class Site {
|
|
15
|
+
#private;
|
|
16
|
+
root: string;
|
|
17
|
+
routes: {
|
|
18
|
+
path: string;
|
|
19
|
+
file: string;
|
|
20
|
+
type: number;
|
|
21
|
+
}[];
|
|
22
|
+
plugins: Plugin[];
|
|
23
|
+
adapter: Adapter;
|
|
24
|
+
constructor();
|
|
25
|
+
addRouteFolder(folder: string): Promise<void>;
|
|
26
|
+
addRouteFile(path: string, file: string): void;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export { Site as S };
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
|
|
30
|
+
// src/adapters/cloudflare/index.ts
|
|
31
|
+
var cloudflare_exports = {};
|
|
32
|
+
__export(cloudflare_exports, {
|
|
33
|
+
default: () => cloudflare_default
|
|
34
|
+
});
|
|
35
|
+
module.exports = __toCommonJS(cloudflare_exports);
|
|
36
|
+
var import_node_fs = require("fs");
|
|
37
|
+
var import_node_path = __toESM(require("path"), 1);
|
|
38
|
+
var import_node_url = require("url");
|
|
39
|
+
var import_vite = require("vite");
|
|
40
|
+
|
|
41
|
+
// src/site/prepareTemplate.ts
|
|
42
|
+
function prepareTemplate(template, clientScript) {
|
|
43
|
+
let contentStart = regexIndexOf(template, /\<div\s+id=("app"|'app'|app)\s+/);
|
|
44
|
+
contentStart = template.indexOf(">", contentStart) + 1;
|
|
45
|
+
let contentEnd = template.indexOf("</div>", contentStart);
|
|
46
|
+
if (contentStart === -1 || contentEnd === -1) {
|
|
47
|
+
throw new Error(`Couldn't find <div id="app"></div>`);
|
|
48
|
+
}
|
|
49
|
+
return template.substring(0, contentStart) + "%COMPONENT_HTML%" + template.substring(contentEnd) + `<script type="module" src="${clientScript}"></script>`;
|
|
50
|
+
}
|
|
51
|
+
function regexIndexOf(string, regex, position) {
|
|
52
|
+
var indexOf = string.substring(position || 0).search(regex);
|
|
53
|
+
return indexOf >= 0 ? indexOf + (position || 0) : indexOf;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// src/adapters/cloudflare/index.ts
|
|
57
|
+
var import_meta = {};
|
|
58
|
+
var __dirname = import_node_path.default.dirname((0, import_node_url.fileURLToPath)(import_meta.url));
|
|
59
|
+
var cloudflare_default = {
|
|
60
|
+
postbuild,
|
|
61
|
+
serve: () => {
|
|
62
|
+
console.log("TODO");
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
async function postbuild(site) {
|
|
66
|
+
const distFolder = import_node_path.default.resolve(site.root, "dist");
|
|
67
|
+
const clientFolder = import_node_path.default.join(distFolder, "client");
|
|
68
|
+
const serverFolder = import_node_path.default.join(distFolder, "server");
|
|
69
|
+
const tempFolder = import_node_path.default.join(distFolder, "temp");
|
|
70
|
+
const cloudflareFolder = import_node_path.default.join(distFolder, "cloudflare");
|
|
71
|
+
let workerFile = import_node_path.default.resolve(__dirname, "../../../src/adapters/cloudflare/_worker.ts");
|
|
72
|
+
let workerSource = await import_node_fs.promises.readFile(workerFile, "utf-8");
|
|
73
|
+
let clientScript = (await import_node_fs.promises.readdir(import_node_path.default.join(clientFolder, "assets"))).find(
|
|
74
|
+
(f) => f.startsWith("clientEntry-")
|
|
75
|
+
);
|
|
76
|
+
if (!clientScript) {
|
|
77
|
+
throw new Error("clientEntry.js not found");
|
|
78
|
+
}
|
|
79
|
+
clientScript = `/assets/${clientScript}`;
|
|
80
|
+
let siteHtml = import_node_path.default.join(clientFolder, "site.html");
|
|
81
|
+
let template = await import_node_fs.promises.readFile(siteHtml, "utf-8");
|
|
82
|
+
template = prepareTemplate(template, clientScript);
|
|
83
|
+
const serverClass = import_node_path.default.resolve(__dirname, "../../../src/server/Server.ts");
|
|
84
|
+
const serverScript = import_node_path.default.join(serverFolder, "serverEntry.js");
|
|
85
|
+
workerSource = workerSource.replace("%SERVER_CLASS%", serverClass).replace("%SERVER_SCRIPT%", serverScript).replace("%HTML_TEMPLATE%", template);
|
|
86
|
+
workerFile = import_node_path.default.join(tempFolder, "_worker.ts");
|
|
87
|
+
await import_node_fs.promises.mkdir(tempFolder);
|
|
88
|
+
await import_node_fs.promises.writeFile(workerFile, workerSource);
|
|
89
|
+
await (0, import_vite.build)(
|
|
90
|
+
(0, import_vite.defineConfig)({
|
|
91
|
+
build: {
|
|
92
|
+
outDir: cloudflareFolder,
|
|
93
|
+
rollupOptions: {
|
|
94
|
+
input: [workerFile],
|
|
95
|
+
output: {
|
|
96
|
+
entryFileNames: `[name].js`,
|
|
97
|
+
chunkFileNames: `[name].js`,
|
|
98
|
+
assetFileNames: `[name].[ext]`
|
|
99
|
+
},
|
|
100
|
+
preserveEntrySignatures: "strict"
|
|
101
|
+
},
|
|
102
|
+
// HACK: We don't need to minify as the worker isn't downloaded?
|
|
103
|
+
// And it makes debugging easier
|
|
104
|
+
minify: false,
|
|
105
|
+
// HACK: Disable preload so that the _worker.js file doesn't end
|
|
106
|
+
// up with document and window references that are not available
|
|
107
|
+
modulePreload: false
|
|
108
|
+
}
|
|
109
|
+
})
|
|
110
|
+
);
|
|
111
|
+
workerFile = import_node_path.default.join(distFolder, "cloudflare", "_worker.js");
|
|
112
|
+
const wranglerConfig = {
|
|
113
|
+
name: "torpor-miniflare",
|
|
114
|
+
main: "cloudflare/_worker.js",
|
|
115
|
+
compatibility_date: "2025-01-01",
|
|
116
|
+
assets: {
|
|
117
|
+
directory: "./client",
|
|
118
|
+
binding: "ASSETS"
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
const wranglerFile = import_node_path.default.join(distFolder, "wrangler.json");
|
|
122
|
+
await import_node_fs.promises.writeFile(wranglerFile, JSON.stringify(wranglerConfig, null, 2).replaceAll(" ", " "));
|
|
123
|
+
await import_node_fs.promises.rm(tempFolder, { recursive: true });
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/adapters/cloudflare/index.ts","../../../src/site/prepareTemplate.ts"],"sourcesContent":["import { promises as fs } from \"node:fs\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { build, defineConfig } from \"vite\";\nimport Site from \"../../site/Site\";\nimport prepareTemplate from \"../../site/prepareTemplate\";\nimport type Adapter from \"../../types/Adapter\";\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n\nexport default {\n\tpostbuild,\n\tserve: (/* server: Server, site: Site*/) => {\n\t\tconsole.log(\"TODO\");\n\t},\n} satisfies Adapter;\n\nasync function postbuild(site: Site) {\n\t// Build _worker.js as per\n\t// https://developers.cloudflare.com/pages/functions/advanced-mode/\n\n\tconst distFolder = path.resolve(site.root, \"dist\");\n\tconst clientFolder = path.join(distFolder, \"client\");\n\tconst serverFolder = path.join(distFolder, \"server\");\n\tconst tempFolder = path.join(distFolder, \"temp\");\n\tconst cloudflareFolder = path.join(distFolder, \"cloudflare\");\n\n\t// Compile _worker.ts\n\tlet workerFile = path.resolve(__dirname, \"../../../src/adapters/cloudflare/_worker.ts\");\n\tlet workerSource = await fs.readFile(workerFile, \"utf-8\");\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 and prepare site.html so that we can just splice components into it\n\tlet siteHtml = path.join(clientFolder, \"site.html\");\n\tlet template = await fs.readFile(siteHtml, \"utf-8\");\n\ttemplate = prepareTemplate(template, clientScript);\n\n\tconst serverClass = path.resolve(__dirname, \"../../../src/server/Server.ts\");\n\tconst serverScript = path.join(serverFolder, \"serverEntry.js\");\n\n\t// Splice file names into _worker.ts\n\t//let workerSource = await fs.readFile(workerFile, \"utf-8\");\n\tworkerSource = workerSource\n\t\t.replace(\"%SERVER_CLASS%\", serverClass)\n\t\t.replace(\"%SERVER_SCRIPT%\", serverScript)\n\t\t.replace(\"%HTML_TEMPLATE%\", template);\n\n\tworkerFile = path.join(tempFolder, \"_worker.ts\");\n\tawait fs.mkdir(tempFolder);\n\tawait fs.writeFile(workerFile, workerSource);\n\n\tawait build(\n\t\tdefineConfig({\n\t\t\tbuild: {\n\t\t\t\toutDir: cloudflareFolder,\n\t\t\t\trollupOptions: {\n\t\t\t\t\tinput: [workerFile],\n\t\t\t\t\toutput: {\n\t\t\t\t\t\tentryFileNames: `[name].js`,\n\t\t\t\t\t\tchunkFileNames: `[name].js`,\n\t\t\t\t\t\tassetFileNames: `[name].[ext]`,\n\t\t\t\t\t},\n\t\t\t\t\tpreserveEntrySignatures: \"strict\",\n\t\t\t\t},\n\t\t\t\t// HACK: We don't need to minify as the worker isn't downloaded?\n\t\t\t\t// And it makes debugging easier\n\t\t\t\tminify: false,\n\t\t\t\t// HACK: Disable preload so that the _worker.js file doesn't end\n\t\t\t\t// up with document and window references that are not available\n\t\t\t\tmodulePreload: false,\n\t\t\t},\n\t\t}),\n\t);\n\tworkerFile = path.join(distFolder, \"cloudflare\", \"_worker.js\");\n\n\t// Build a wrangler.json file for running with `wrangler dev`\n\tconst wranglerConfig = {\n\t\tname: \"torpor-miniflare\",\n\t\tmain: \"cloudflare/_worker.js\",\n\t\tcompatibility_date: \"2025-01-01\",\n\t\tassets: {\n\t\t\tdirectory: \"./client\",\n\t\t\tbinding: \"ASSETS\",\n\t\t},\n\t};\n\tconst wranglerFile = path.join(distFolder, \"wrangler.json\");\n\tawait fs.writeFile(wranglerFile, JSON.stringify(wranglerConfig, null, 2).replaceAll(\" \", \"\\t\"));\n\n\tawait fs.rm(tempFolder, { recursive: true });\n}\n","export default function prepareTemplate(template: string, clientScript: string) {\n\tlet contentStart = regexIndexOf(template, /\\<div\\s+id=(\"app\"|'app'|app)\\s+/);\n\tcontentStart = template.indexOf(\">\", contentStart) + 1;\n\tlet contentEnd = template.indexOf(\"</div>\", contentStart);\n\tif (contentStart === -1 || contentEnd === -1) {\n\t\tthrow new Error(`Couldn't find <div id=\"app\"></div>`);\n\t}\n\treturn (\n\t\ttemplate.substring(0, contentStart) +\n\t\t\"%COMPONENT_HTML%\" +\n\t\ttemplate.substring(contentEnd) +\n\t\t`<script type=\"module\" src=\"${clientScript}\"></script>`\n\t);\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"],"mappings":"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","names":["path","fs"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { S as Site } from '../../Site-CgoeDt8k.cjs';
|
|
2
|
+
import 'vite';
|
|
3
|
+
import '../../Server-CB99REgs.cjs';
|
|
4
|
+
import 'cookie';
|
|
5
|
+
|
|
6
|
+
declare const _default: {
|
|
7
|
+
postbuild: typeof postbuild;
|
|
8
|
+
serve: () => void;
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
declare function postbuild(site: Site): Promise<void>;
|
|
12
|
+
|
|
13
|
+
export { _default as default };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { S as Site } from '../../Site-D95nwrAg.js';
|
|
2
|
+
import 'vite';
|
|
3
|
+
import '../../Server-CB99REgs.js';
|
|
4
|
+
import 'cookie';
|
|
5
|
+
|
|
6
|
+
declare const _default: {
|
|
7
|
+
postbuild: typeof postbuild;
|
|
8
|
+
serve: () => void;
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
declare function postbuild(site: Site): Promise<void>;
|
|
12
|
+
|
|
13
|
+
export { _default as default };
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import {
|
|
2
|
+
prepareTemplate
|
|
3
|
+
} from "../../chunk-V4XTDQEV.js";
|
|
4
|
+
|
|
5
|
+
// src/adapters/cloudflare/index.ts
|
|
6
|
+
import { promises as fs } from "node:fs";
|
|
7
|
+
import path from "node:path";
|
|
8
|
+
import { fileURLToPath } from "node:url";
|
|
9
|
+
import { build, defineConfig } from "vite";
|
|
10
|
+
var __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
11
|
+
var cloudflare_default = {
|
|
12
|
+
postbuild,
|
|
13
|
+
serve: () => {
|
|
14
|
+
console.log("TODO");
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
async function postbuild(site) {
|
|
18
|
+
const distFolder = path.resolve(site.root, "dist");
|
|
19
|
+
const clientFolder = path.join(distFolder, "client");
|
|
20
|
+
const serverFolder = path.join(distFolder, "server");
|
|
21
|
+
const tempFolder = path.join(distFolder, "temp");
|
|
22
|
+
const cloudflareFolder = path.join(distFolder, "cloudflare");
|
|
23
|
+
let workerFile = path.resolve(__dirname, "../../../src/adapters/cloudflare/_worker.ts");
|
|
24
|
+
let workerSource = await fs.readFile(workerFile, "utf-8");
|
|
25
|
+
let clientScript = (await fs.readdir(path.join(clientFolder, "assets"))).find(
|
|
26
|
+
(f) => f.startsWith("clientEntry-")
|
|
27
|
+
);
|
|
28
|
+
if (!clientScript) {
|
|
29
|
+
throw new Error("clientEntry.js not found");
|
|
30
|
+
}
|
|
31
|
+
clientScript = `/assets/${clientScript}`;
|
|
32
|
+
let siteHtml = path.join(clientFolder, "site.html");
|
|
33
|
+
let template = await fs.readFile(siteHtml, "utf-8");
|
|
34
|
+
template = prepareTemplate(template, clientScript);
|
|
35
|
+
const serverClass = path.resolve(__dirname, "../../../src/server/Server.ts");
|
|
36
|
+
const serverScript = path.join(serverFolder, "serverEntry.js");
|
|
37
|
+
workerSource = workerSource.replace("%SERVER_CLASS%", serverClass).replace("%SERVER_SCRIPT%", serverScript).replace("%HTML_TEMPLATE%", template);
|
|
38
|
+
workerFile = path.join(tempFolder, "_worker.ts");
|
|
39
|
+
await fs.mkdir(tempFolder);
|
|
40
|
+
await fs.writeFile(workerFile, workerSource);
|
|
41
|
+
await build(
|
|
42
|
+
defineConfig({
|
|
43
|
+
build: {
|
|
44
|
+
outDir: cloudflareFolder,
|
|
45
|
+
rollupOptions: {
|
|
46
|
+
input: [workerFile],
|
|
47
|
+
output: {
|
|
48
|
+
entryFileNames: `[name].js`,
|
|
49
|
+
chunkFileNames: `[name].js`,
|
|
50
|
+
assetFileNames: `[name].[ext]`
|
|
51
|
+
},
|
|
52
|
+
preserveEntrySignatures: "strict"
|
|
53
|
+
},
|
|
54
|
+
// HACK: We don't need to minify as the worker isn't downloaded?
|
|
55
|
+
// And it makes debugging easier
|
|
56
|
+
minify: false,
|
|
57
|
+
// HACK: Disable preload so that the _worker.js file doesn't end
|
|
58
|
+
// up with document and window references that are not available
|
|
59
|
+
modulePreload: false
|
|
60
|
+
}
|
|
61
|
+
})
|
|
62
|
+
);
|
|
63
|
+
workerFile = path.join(distFolder, "cloudflare", "_worker.js");
|
|
64
|
+
const wranglerConfig = {
|
|
65
|
+
name: "torpor-miniflare",
|
|
66
|
+
main: "cloudflare/_worker.js",
|
|
67
|
+
compatibility_date: "2025-01-01",
|
|
68
|
+
assets: {
|
|
69
|
+
directory: "./client",
|
|
70
|
+
binding: "ASSETS"
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
const wranglerFile = path.join(distFolder, "wrangler.json");
|
|
74
|
+
await fs.writeFile(wranglerFile, JSON.stringify(wranglerConfig, null, 2).replaceAll(" ", " "));
|
|
75
|
+
await fs.rm(tempFolder, { recursive: true });
|
|
76
|
+
}
|
|
77
|
+
export {
|
|
78
|
+
cloudflare_default as default
|
|
79
|
+
};
|
|
80
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/adapters/cloudflare/index.ts"],"sourcesContent":["import { promises as fs } from \"node:fs\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { build, defineConfig } from \"vite\";\nimport Site from \"../../site/Site\";\nimport prepareTemplate from \"../../site/prepareTemplate\";\nimport type Adapter from \"../../types/Adapter\";\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n\nexport default {\n\tpostbuild,\n\tserve: (/* server: Server, site: Site*/) => {\n\t\tconsole.log(\"TODO\");\n\t},\n} satisfies Adapter;\n\nasync function postbuild(site: Site) {\n\t// Build _worker.js as per\n\t// https://developers.cloudflare.com/pages/functions/advanced-mode/\n\n\tconst distFolder = path.resolve(site.root, \"dist\");\n\tconst clientFolder = path.join(distFolder, \"client\");\n\tconst serverFolder = path.join(distFolder, \"server\");\n\tconst tempFolder = path.join(distFolder, \"temp\");\n\tconst cloudflareFolder = path.join(distFolder, \"cloudflare\");\n\n\t// Compile _worker.ts\n\tlet workerFile = path.resolve(__dirname, \"../../../src/adapters/cloudflare/_worker.ts\");\n\tlet workerSource = await fs.readFile(workerFile, \"utf-8\");\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 and prepare site.html so that we can just splice components into it\n\tlet siteHtml = path.join(clientFolder, \"site.html\");\n\tlet template = await fs.readFile(siteHtml, \"utf-8\");\n\ttemplate = prepareTemplate(template, clientScript);\n\n\tconst serverClass = path.resolve(__dirname, \"../../../src/server/Server.ts\");\n\tconst serverScript = path.join(serverFolder, \"serverEntry.js\");\n\n\t// Splice file names into _worker.ts\n\t//let workerSource = await fs.readFile(workerFile, \"utf-8\");\n\tworkerSource = workerSource\n\t\t.replace(\"%SERVER_CLASS%\", serverClass)\n\t\t.replace(\"%SERVER_SCRIPT%\", serverScript)\n\t\t.replace(\"%HTML_TEMPLATE%\", template);\n\n\tworkerFile = path.join(tempFolder, \"_worker.ts\");\n\tawait fs.mkdir(tempFolder);\n\tawait fs.writeFile(workerFile, workerSource);\n\n\tawait build(\n\t\tdefineConfig({\n\t\t\tbuild: {\n\t\t\t\toutDir: cloudflareFolder,\n\t\t\t\trollupOptions: {\n\t\t\t\t\tinput: [workerFile],\n\t\t\t\t\toutput: {\n\t\t\t\t\t\tentryFileNames: `[name].js`,\n\t\t\t\t\t\tchunkFileNames: `[name].js`,\n\t\t\t\t\t\tassetFileNames: `[name].[ext]`,\n\t\t\t\t\t},\n\t\t\t\t\tpreserveEntrySignatures: \"strict\",\n\t\t\t\t},\n\t\t\t\t// HACK: We don't need to minify as the worker isn't downloaded?\n\t\t\t\t// And it makes debugging easier\n\t\t\t\tminify: false,\n\t\t\t\t// HACK: Disable preload so that the _worker.js file doesn't end\n\t\t\t\t// up with document and window references that are not available\n\t\t\t\tmodulePreload: false,\n\t\t\t},\n\t\t}),\n\t);\n\tworkerFile = path.join(distFolder, \"cloudflare\", \"_worker.js\");\n\n\t// Build a wrangler.json file for running with `wrangler dev`\n\tconst wranglerConfig = {\n\t\tname: \"torpor-miniflare\",\n\t\tmain: \"cloudflare/_worker.js\",\n\t\tcompatibility_date: \"2025-01-01\",\n\t\tassets: {\n\t\t\tdirectory: \"./client\",\n\t\t\tbinding: \"ASSETS\",\n\t\t},\n\t};\n\tconst wranglerFile = path.join(distFolder, \"wrangler.json\");\n\tawait fs.writeFile(wranglerFile, JSON.stringify(wranglerConfig, null, 2).replaceAll(\" \", \"\\t\"));\n\n\tawait fs.rm(tempFolder, { recursive: true });\n}\n"],"mappings":";;;;;AAAA,SAAS,YAAY,UAAU;AAC/B,OAAO,UAAU;AACjB,SAAS,qBAAqB;AAC9B,SAAS,OAAO,oBAAoB;AAKpC,IAAM,YAAY,KAAK,QAAQ,cAAc,YAAY,GAAG,CAAC;AAE7D,IAAO,qBAAQ;AAAA,EACd;AAAA,EACA,OAAO,MAAqC;AAC3C,YAAQ,IAAI,MAAM;AAAA,EACnB;AACD;AAEA,eAAe,UAAU,MAAY;AAIpC,QAAM,aAAa,KAAK,QAAQ,KAAK,MAAM,MAAM;AACjD,QAAM,eAAe,KAAK,KAAK,YAAY,QAAQ;AACnD,QAAM,eAAe,KAAK,KAAK,YAAY,QAAQ;AACnD,QAAM,aAAa,KAAK,KAAK,YAAY,MAAM;AAC/C,QAAM,mBAAmB,KAAK,KAAK,YAAY,YAAY;AAG3D,MAAI,aAAa,KAAK,QAAQ,WAAW,6CAA6C;AACtF,MAAI,eAAe,MAAM,GAAG,SAAS,YAAY,OAAO;AAGxD,MAAI,gBAAgB,MAAM,GAAG,QAAQ,KAAK,KAAK,cAAc,QAAQ,CAAC,GAAG;AAAA,IAAK,CAAC,MAC9E,EAAE,WAAW,cAAc;AAAA,EAC5B;AACA,MAAI,CAAC,cAAc;AAClB,UAAM,IAAI,MAAM,0BAA0B;AAAA,EAC3C;AACA,iBAAe,WAAW,YAAY;AAGtC,MAAI,WAAW,KAAK,KAAK,cAAc,WAAW;AAClD,MAAI,WAAW,MAAM,GAAG,SAAS,UAAU,OAAO;AAClD,aAAW,gBAAgB,UAAU,YAAY;AAEjD,QAAM,cAAc,KAAK,QAAQ,WAAW,+BAA+B;AAC3E,QAAM,eAAe,KAAK,KAAK,cAAc,gBAAgB;AAI7D,iBAAe,aACb,QAAQ,kBAAkB,WAAW,EACrC,QAAQ,mBAAmB,YAAY,EACvC,QAAQ,mBAAmB,QAAQ;AAErC,eAAa,KAAK,KAAK,YAAY,YAAY;AAC/C,QAAM,GAAG,MAAM,UAAU;AACzB,QAAM,GAAG,UAAU,YAAY,YAAY;AAE3C,QAAM;AAAA,IACL,aAAa;AAAA,MACZ,OAAO;AAAA,QACN,QAAQ;AAAA,QACR,eAAe;AAAA,UACd,OAAO,CAAC,UAAU;AAAA,UAClB,QAAQ;AAAA,YACP,gBAAgB;AAAA,YAChB,gBAAgB;AAAA,YAChB,gBAAgB;AAAA,UACjB;AAAA,UACA,yBAAyB;AAAA,QAC1B;AAAA;AAAA;AAAA,QAGA,QAAQ;AAAA;AAAA;AAAA,QAGR,eAAe;AAAA,MAChB;AAAA,IACD,CAAC;AAAA,EACF;AACA,eAAa,KAAK,KAAK,YAAY,cAAc,YAAY;AAG7D,QAAM,iBAAiB;AAAA,IACtB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,oBAAoB;AAAA,IACpB,QAAQ;AAAA,MACP,WAAW;AAAA,MACX,SAAS;AAAA,IACV;AAAA,EACD;AACA,QAAM,eAAe,KAAK,KAAK,YAAY,eAAe;AAC1D,QAAM,GAAG,UAAU,cAAc,KAAK,UAAU,gBAAgB,MAAM,CAAC,EAAE,WAAW,MAAM,GAAI,CAAC;AAE/F,QAAM,GAAG,GAAG,YAAY,EAAE,WAAW,KAAK,CAAC;AAC5C;","names":[]}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/adapters/node/index.ts
|
|
21
|
+
var node_exports = {};
|
|
22
|
+
__export(node_exports, {
|
|
23
|
+
default: () => node_default
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(node_exports);
|
|
26
|
+
|
|
27
|
+
// src/adapters/node/createNodeServer.ts
|
|
28
|
+
var import_node_http = require("http");
|
|
29
|
+
|
|
30
|
+
// src/adapters/node/constants.ts
|
|
31
|
+
var INTERNAL_BODY = Symbol("internal_body");
|
|
32
|
+
|
|
33
|
+
// src/adapters/node/nodeMessageToRequest.ts
|
|
34
|
+
var import_node_stream = require("stream");
|
|
35
|
+
|
|
36
|
+
// src/adapters/node/flattenHeaders.ts
|
|
37
|
+
function flattenHeaders(headers) {
|
|
38
|
+
const flatHeaders = new Headers();
|
|
39
|
+
for (const [key, value] of Object.entries(headers)) {
|
|
40
|
+
if (value === void 0 || value === null) {
|
|
41
|
+
continue;
|
|
42
|
+
} else if (Array.isArray(value)) {
|
|
43
|
+
for (const v of value) {
|
|
44
|
+
if (v !== void 0 && v !== null) {
|
|
45
|
+
value.forEach((v2) => flatHeaders.append(key, v2));
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
} else {
|
|
49
|
+
flatHeaders.set(key, String(value));
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return flatHeaders;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// src/adapters/node/nodeMessageToRequest.ts
|
|
56
|
+
async function nodeMessageToRequest(req) {
|
|
57
|
+
let path = req.url;
|
|
58
|
+
if (path === void 0) {
|
|
59
|
+
throw new Error(`Empty request URL`);
|
|
60
|
+
}
|
|
61
|
+
if (!path.startsWith("/")) {
|
|
62
|
+
path = "/" + path;
|
|
63
|
+
}
|
|
64
|
+
const { host } = req.headers;
|
|
65
|
+
if (host == void 0) {
|
|
66
|
+
throw new Error(`Missing "Host" header`);
|
|
67
|
+
}
|
|
68
|
+
const protocol = "encrypted" in req.socket && req.socket.encrypted ? "https" : "http";
|
|
69
|
+
const url = `${protocol}://${host}${path}`;
|
|
70
|
+
const headers = flattenHeaders(req.headers);
|
|
71
|
+
const body = req.method !== "GET" && req.method !== "HEAD" ? import_node_stream.Readable.toWeb(req) : null;
|
|
72
|
+
return new Request(url, {
|
|
73
|
+
method: req.method,
|
|
74
|
+
headers,
|
|
75
|
+
body,
|
|
76
|
+
// @ts-ignore this is needed for using a Readable for some reason
|
|
77
|
+
duplex: "half"
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// src/adapters/node/responseToNodeResponse.ts
|
|
82
|
+
var import_types = require("util/types");
|
|
83
|
+
async function responseToNodeResponse(res, outgoing) {
|
|
84
|
+
outgoing.statusCode = res.status;
|
|
85
|
+
outgoing.statusMessage = res.statusText;
|
|
86
|
+
res.headers.forEach((value, key) => {
|
|
87
|
+
outgoing.setHeader(key, value);
|
|
88
|
+
});
|
|
89
|
+
const body = res[INTERNAL_BODY];
|
|
90
|
+
if (body === null || body === void 0) {
|
|
91
|
+
outgoing.writeHead(res.status, res.statusText);
|
|
92
|
+
outgoing.end();
|
|
93
|
+
} else if (typeof body === "string" || body instanceof Uint8Array) {
|
|
94
|
+
outgoing.writeHead(res.status, res.statusText);
|
|
95
|
+
outgoing.end(body);
|
|
96
|
+
} else if (body instanceof Blob) {
|
|
97
|
+
outgoing.writeHead(res.status, res.statusText);
|
|
98
|
+
outgoing.end(new Uint8Array(await body.arrayBuffer()));
|
|
99
|
+
} else if (body instanceof ArrayBuffer) {
|
|
100
|
+
outgoing.writeHead(res.status, res.statusText);
|
|
101
|
+
outgoing.end(new Uint8Array(body));
|
|
102
|
+
} else if ((0, import_types.isArrayBufferView)(body)) {
|
|
103
|
+
outgoing.writeHead(res.status, res.statusText);
|
|
104
|
+
outgoing.end(new Uint8Array(body.buffer));
|
|
105
|
+
} else if (body instanceof FormData) {
|
|
106
|
+
outgoing.setHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
|
|
107
|
+
outgoing.writeHead(res.status, res.statusText);
|
|
108
|
+
outgoing.end();
|
|
109
|
+
} else {
|
|
110
|
+
outgoing.writeHead(res.status, res.statusText);
|
|
111
|
+
outgoing.end();
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// src/adapters/node/createFetchHandler.ts
|
|
116
|
+
var GlobalResponse = Response;
|
|
117
|
+
globalThis.Response = class Response2 extends GlobalResponse {
|
|
118
|
+
[INTERNAL_BODY] = null;
|
|
119
|
+
constructor(body, init) {
|
|
120
|
+
super(body, init);
|
|
121
|
+
this[INTERNAL_BODY] = body;
|
|
122
|
+
}
|
|
123
|
+
};
|
|
124
|
+
function createFetchHandler(handler) {
|
|
125
|
+
return async (incoming, outgoing) => {
|
|
126
|
+
const req = await nodeMessageToRequest(incoming);
|
|
127
|
+
const res = await handler(req);
|
|
128
|
+
return await responseToNodeResponse(res, outgoing);
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// src/adapters/node/createNodeServer.ts
|
|
133
|
+
function createNodeServer(handler) {
|
|
134
|
+
return (0, import_node_http.createServer)(createFetchHandler(handler));
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
// src/adapters/node/index.ts
|
|
138
|
+
var node_default = {
|
|
139
|
+
serve: (server) => {
|
|
140
|
+
process.env.PROTOCOL ??= "http:";
|
|
141
|
+
process.env.HOST ??= "localhost";
|
|
142
|
+
process.env.PORT ??= "7059";
|
|
143
|
+
console.log(`
|
|
144
|
+
Connecting to ${process.env.HOST}:${process.env.PORT}`);
|
|
145
|
+
const devServer = createNodeServer(server.fetch);
|
|
146
|
+
devServer.listen(parseInt(process.env.PORT), process.env.HOST, () => {
|
|
147
|
+
console.log(`Listening on ${process.env.HOST}:${process.env.PORT}
|
|
148
|
+
`);
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
};
|
|
152
|
+
//# sourceMappingURL=index.cjs.map
|