@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 ADDED
@@ -0,0 +1,3 @@
1
+ # Node Shim For Minimum Common Web Platform API
2
+
3
+ link: https://common-min-api.proposal.wintercg.org
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
+ }