@web-widget/node 0.0.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/README.md +3 -0
- package/dist/node.d.ts +23 -0
- package/dist/node.js +99 -0
- package/package.json +33 -0
package/README.md
ADDED
package/dist/node.d.ts
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { IncomingMessage, ServerResponse } from 'node:http';
|
|
2
|
+
import primitives from '@edge-runtime/primitives';
|
|
3
|
+
import { RequestOptions, WebHandler, NodeHandler } from '@edge-runtime/node-utils';
|
|
4
|
+
|
|
5
|
+
interface NodeAdapterOptions extends RequestOptions {
|
|
6
|
+
}
|
|
7
|
+
interface Middlware {
|
|
8
|
+
(req: IncomingMessage, res: ServerResponse, next: Function): void;
|
|
9
|
+
}
|
|
10
|
+
declare class NodeAdapter {
|
|
11
|
+
#private;
|
|
12
|
+
constructor(webRouter: {
|
|
13
|
+
handler: WebHandler;
|
|
14
|
+
options: {
|
|
15
|
+
origin?: string;
|
|
16
|
+
};
|
|
17
|
+
}, options?: NodeAdapterOptions);
|
|
18
|
+
get middlware(): Middlware;
|
|
19
|
+
get handler(): NodeHandler;
|
|
20
|
+
static get primitives(): typeof primitives;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export { Middlware, NodeAdapterOptions, NodeAdapter as default };
|
package/dist/node.js
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
// src/index.ts
|
|
2
|
+
import primitives from "@edge-runtime/primitives";
|
|
3
|
+
import {
|
|
4
|
+
buildToNodeHandler,
|
|
5
|
+
buildToRequest,
|
|
6
|
+
buildToFetchEvent,
|
|
7
|
+
mergeIntoServerResponse,
|
|
8
|
+
toToReadable,
|
|
9
|
+
toOutgoingHeaders
|
|
10
|
+
} from "@edge-runtime/node-utils";
|
|
11
|
+
if (!Reflect.get(global, "DISABLE_INSTALL_MCA_SHIMS")) {
|
|
12
|
+
Object.assign(global, primitives);
|
|
13
|
+
}
|
|
14
|
+
var FetchEvent = class {
|
|
15
|
+
constructor(request) {
|
|
16
|
+
this.request = request;
|
|
17
|
+
this.response = null;
|
|
18
|
+
this.awaiting = /* @__PURE__ */ new Set();
|
|
19
|
+
}
|
|
20
|
+
respondWith(response) {
|
|
21
|
+
this.response = response;
|
|
22
|
+
}
|
|
23
|
+
waitUntil() {
|
|
24
|
+
throw new Error("waitUntil is not implemented yet for Node.js");
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
var dependencies = {
|
|
28
|
+
Headers,
|
|
29
|
+
ReadableStream,
|
|
30
|
+
// @ts-ignore
|
|
31
|
+
Request: class extends Request {
|
|
32
|
+
constructor(input, init) {
|
|
33
|
+
super(input, addDuplexToInit(init));
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
Uint8Array,
|
|
37
|
+
FetchEvent
|
|
38
|
+
};
|
|
39
|
+
var NodeAdapter = class {
|
|
40
|
+
#handler;
|
|
41
|
+
#middlware;
|
|
42
|
+
constructor(webRouter, options = {
|
|
43
|
+
defaultOrigin: webRouter.options.origin ?? "https://web-widget.js.org"
|
|
44
|
+
}) {
|
|
45
|
+
this.#handler = buildToNodeHandler(
|
|
46
|
+
dependencies,
|
|
47
|
+
options
|
|
48
|
+
)(webRouter.handler);
|
|
49
|
+
this.#middlware = toMiddlware(webRouter.handler, options);
|
|
50
|
+
}
|
|
51
|
+
get middlware() {
|
|
52
|
+
return this.#middlware;
|
|
53
|
+
}
|
|
54
|
+
get handler() {
|
|
55
|
+
return this.#handler;
|
|
56
|
+
}
|
|
57
|
+
static get primitives() {
|
|
58
|
+
return primitives;
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
function addDuplexToInit(init) {
|
|
62
|
+
if (typeof init === "undefined" || typeof init === "object") {
|
|
63
|
+
return { duplex: "half", ...init };
|
|
64
|
+
}
|
|
65
|
+
return init;
|
|
66
|
+
}
|
|
67
|
+
async function toServerResponse(webResponse, serverResponse) {
|
|
68
|
+
return new Promise((resolve, reject) => {
|
|
69
|
+
if (!webResponse) {
|
|
70
|
+
serverResponse.end();
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
mergeIntoServerResponse(
|
|
74
|
+
// @ts-ignore getAll() is not standard https://fetch.spec.whatwg.org/#headers-class
|
|
75
|
+
toOutgoingHeaders(webResponse.headers),
|
|
76
|
+
serverResponse
|
|
77
|
+
);
|
|
78
|
+
serverResponse.statusCode = webResponse.status;
|
|
79
|
+
serverResponse.statusMessage = webResponse.statusText;
|
|
80
|
+
if (!webResponse.body) {
|
|
81
|
+
serverResponse.end();
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
toToReadable(webResponse.body).pipe(serverResponse).on("finish", () => resolve(void 0)).on("error", reject);
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
function toMiddlware(webHandler, options) {
|
|
88
|
+
const toRequest = buildToRequest(dependencies);
|
|
89
|
+
const toFetchEvent = buildToFetchEvent(dependencies);
|
|
90
|
+
return async function middlware(incomingMessage, serverResponse, next) {
|
|
91
|
+
const request = toRequest(incomingMessage, options);
|
|
92
|
+
const webResponse = await webHandler(request, toFetchEvent(request));
|
|
93
|
+
await toServerResponse(webResponse, serverResponse);
|
|
94
|
+
next();
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
export {
|
|
98
|
+
NodeAdapter as default
|
|
99
|
+
};
|
package/package.json
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@web-widget/node",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"exports": {
|
|
6
|
+
".": {
|
|
7
|
+
"types": "./dist/node.d.ts",
|
|
8
|
+
"default": "./dist/node.js"
|
|
9
|
+
}
|
|
10
|
+
},
|
|
11
|
+
"files": [
|
|
12
|
+
"dist/"
|
|
13
|
+
],
|
|
14
|
+
"dependencies": {
|
|
15
|
+
"@edge-runtime/node-utils": "^2.1.2",
|
|
16
|
+
"@edge-runtime/primitives": "^3.0.4"
|
|
17
|
+
},
|
|
18
|
+
"devDependencies": {
|
|
19
|
+
"@types/node": "^17.0.42",
|
|
20
|
+
"tsup": "^7.0.0",
|
|
21
|
+
"typescript": "^5.0.4"
|
|
22
|
+
},
|
|
23
|
+
"engines": {
|
|
24
|
+
"node": ">=18"
|
|
25
|
+
},
|
|
26
|
+
"publishConfig": {
|
|
27
|
+
"access": "public"
|
|
28
|
+
},
|
|
29
|
+
"scripts": {
|
|
30
|
+
"build": "pnpm exec tsup",
|
|
31
|
+
"dev": "pnpm exec tsup --watch"
|
|
32
|
+
}
|
|
33
|
+
}
|