@forklaunch/hyper-express 0.1.32 → 0.2.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/lib/hyperExpressApplication.d.mts +30 -0
- package/lib/{src/hyperExpressApplication.d.ts → hyperExpressApplication.d.ts} +5 -3
- package/lib/hyperExpressApplication.js +143 -0
- package/lib/hyperExpressApplication.mjs +111 -0
- package/lib/hyperExpressRouter.d.mts +12 -0
- package/lib/{src/hyperExpressRouter.d.ts → hyperExpressRouter.d.ts} +5 -3
- package/lib/hyperExpressRouter.js +130 -0
- package/lib/hyperExpressRouter.mjs +109 -0
- package/lib/middleware/contentParse.middleware.d.mts +10 -0
- package/lib/{src/middleware → middleware}/contentParse.middleware.d.ts +4 -2
- package/lib/middleware/contentParse.middleware.js +49 -0
- package/lib/middleware/contentParse.middleware.mjs +24 -0
- package/lib/middleware/enrichResponseTransmission.middleware.d.mts +17 -0
- package/lib/middleware/enrichResponseTransmission.middleware.d.ts +17 -0
- package/lib/middleware/enrichResponseTransmission.middleware.js +67 -0
- package/lib/middleware/enrichResponseTransmission.middleware.mjs +44 -0
- package/lib/middleware/polyfillGetHeaders.middleware.d.mts +5 -0
- package/lib/middleware/polyfillGetHeaders.middleware.d.ts +5 -0
- package/lib/middleware/polyfillGetHeaders.middleware.js +36 -0
- package/lib/middleware/polyfillGetHeaders.middleware.mjs +11 -0
- package/lib/middleware/swagger.middleware.d.mts +27 -0
- package/lib/{src/middleware → middleware}/swagger.middleware.d.ts +5 -3
- package/lib/middleware/swagger.middleware.js +97 -0
- package/lib/middleware/swagger.middleware.mjs +61 -0
- package/lib/types/hyperExpress.types.d.mts +44 -0
- package/lib/{src/types → types}/hyperExpress.types.d.ts +7 -5
- package/lib/types/hyperExpress.types.js +18 -0
- package/lib/types/hyperExpress.types.mjs +0 -0
- package/package.json +13 -10
- package/lib/config.d.ts +0 -2
- package/lib/config.d.ts.map +0 -1
- package/lib/config.js +0 -1
- package/lib/index.d.ts +0 -25
- package/lib/index.d.ts.map +0 -1
- package/lib/index.js +0 -25
- package/lib/src/hyperExpressApplication.d.ts.map +0 -1
- package/lib/src/hyperExpressApplication.js +0 -41
- package/lib/src/hyperExpressRouter.d.ts.map +0 -1
- package/lib/src/hyperExpressRouter.js +0 -22
- package/lib/src/middleware/contentParse.middleware.d.ts.map +0 -1
- package/lib/src/middleware/contentParse.middleware.js +0 -26
- package/lib/src/middleware/enrichResponseTransmission.middleware.d.ts +0 -14
- package/lib/src/middleware/enrichResponseTransmission.middleware.d.ts.map +0 -1
- package/lib/src/middleware/enrichResponseTransmission.middleware.js +0 -56
- package/lib/src/middleware/polyfillGetHeaders.middleware.d.ts +0 -3
- package/lib/src/middleware/polyfillGetHeaders.middleware.d.ts.map +0 -1
- package/lib/src/middleware/polyfillGetHeaders.middleware.js +0 -8
- package/lib/src/middleware/swagger.middleware.d.ts.map +0 -1
- package/lib/src/middleware/swagger.middleware.js +0 -75
- package/lib/src/types/hyperExpress.types.d.ts.map +0 -1
- package/lib/src/types/hyperExpress.types.js +0 -1
- package/lib/tests/typebox.forklaunch.hyperExpress.test.d.ts +0 -2
- package/lib/tests/typebox.forklaunch.hyperExpress.test.d.ts.map +0 -1
- package/lib/tests/typebox.forklaunch.hyperExpress.test.js +0 -111
- package/lib/tests/zod.forklaunch.hyperExpress.test.d.ts +0 -2
- package/lib/tests/zod.forklaunch.hyperExpress.test.d.ts.map +0 -1
- package/lib/tests/zod.forklaunch.hyperExpress.test.js +0 -109
- package/lib/vitest.config.d.ts +0 -3
- package/lib/vitest.config.d.ts.map +0 -1
- package/lib/vitest.config.js +0 -7
@@ -0,0 +1,30 @@
|
|
1
|
+
import { ForklaunchExpressLikeApplication } from '@forklaunch/core/http';
|
2
|
+
import { AnySchemaValidator } from '@forklaunch/validator';
|
3
|
+
import { Server, MiddlewareHandler } from 'hyper-express';
|
4
|
+
import * as uWebsockets from 'uWebSockets.js';
|
5
|
+
|
6
|
+
/**
|
7
|
+
* Represents an application built on top of Hyper-Express and Forklaunch.
|
8
|
+
*
|
9
|
+
* @template SV - A type that extends AnySchemaValidator.
|
10
|
+
*/
|
11
|
+
declare class Application<SV extends AnySchemaValidator> extends ForklaunchExpressLikeApplication<SV, Server, MiddlewareHandler> {
|
12
|
+
/**
|
13
|
+
* Creates an instance of the Application class.
|
14
|
+
*
|
15
|
+
* @param {SV} schemaValidator - The schema validator.
|
16
|
+
*/
|
17
|
+
constructor(schemaValidator: SV);
|
18
|
+
/**
|
19
|
+
* Starts the server and sets up Swagger documentation.
|
20
|
+
*
|
21
|
+
* @param {string | number} arg0 - The port number or UNIX path to listen on.
|
22
|
+
* @param {...unknown[]} args - Additional arguments.
|
23
|
+
* @returns {Promise<uWebsockets.us_listen_socket>} - A promise that resolves with the listening socket.
|
24
|
+
*/
|
25
|
+
listen(port: number, callback?: (listen_socket: uWebsockets.us_listen_socket) => void): Promise<uWebsockets.us_listen_socket>;
|
26
|
+
listen(port: number, host?: string, callback?: (listen_socket: uWebsockets.us_listen_socket) => void): Promise<uWebsockets.us_listen_socket>;
|
27
|
+
listen(unix_path: string, callback?: (listen_socket: uWebsockets.us_listen_socket) => void): Promise<uWebsockets.us_listen_socket>;
|
28
|
+
}
|
29
|
+
|
30
|
+
export { Application };
|
@@ -1,13 +1,14 @@
|
|
1
1
|
import { ForklaunchExpressLikeApplication } from '@forklaunch/core/http';
|
2
2
|
import { AnySchemaValidator } from '@forklaunch/validator';
|
3
|
-
import {
|
3
|
+
import { Server, MiddlewareHandler } from 'hyper-express';
|
4
4
|
import * as uWebsockets from 'uWebSockets.js';
|
5
|
+
|
5
6
|
/**
|
6
7
|
* Represents an application built on top of Hyper-Express and Forklaunch.
|
7
8
|
*
|
8
9
|
* @template SV - A type that extends AnySchemaValidator.
|
9
10
|
*/
|
10
|
-
|
11
|
+
declare class Application<SV extends AnySchemaValidator> extends ForklaunchExpressLikeApplication<SV, Server, MiddlewareHandler> {
|
11
12
|
/**
|
12
13
|
* Creates an instance of the Application class.
|
13
14
|
*
|
@@ -25,4 +26,5 @@ export declare class Application<SV extends AnySchemaValidator> extends Forklaun
|
|
25
26
|
listen(port: number, host?: string, callback?: (listen_socket: uWebsockets.us_listen_socket) => void): Promise<uWebsockets.us_listen_socket>;
|
26
27
|
listen(unix_path: string, callback?: (listen_socket: uWebsockets.us_listen_socket) => void): Promise<uWebsockets.us_listen_socket>;
|
27
28
|
}
|
28
|
-
|
29
|
+
|
30
|
+
export { Application };
|
@@ -0,0 +1,143 @@
|
|
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/hyperExpressApplication.ts
|
31
|
+
var hyperExpressApplication_exports = {};
|
32
|
+
__export(hyperExpressApplication_exports, {
|
33
|
+
Application: () => Application
|
34
|
+
});
|
35
|
+
module.exports = __toCommonJS(hyperExpressApplication_exports);
|
36
|
+
var import_http = require("@forklaunch/core/http");
|
37
|
+
var import_hyper_express = require("hyper-express");
|
38
|
+
|
39
|
+
// src/middleware/swagger.middleware.ts
|
40
|
+
var import_live_directory = __toESM(require("live-directory"));
|
41
|
+
var import_absolute_path = __toESM(require("swagger-ui-dist/absolute-path"));
|
42
|
+
var import_swagger_ui_express = __toESM(require("swagger-ui-express"));
|
43
|
+
function swaggerRedirect(path) {
|
44
|
+
return (req, res, next) => {
|
45
|
+
if (req.path === path) {
|
46
|
+
res.redirect(`${path}/`);
|
47
|
+
}
|
48
|
+
return next?.();
|
49
|
+
};
|
50
|
+
}
|
51
|
+
function swagger(path, document, opts, options, customCss, customfavIcon, swaggerUrl, customSiteTitle) {
|
52
|
+
const LiveAssets = new import_live_directory.default((0, import_absolute_path.default)(), {
|
53
|
+
filter: {
|
54
|
+
keep: {
|
55
|
+
names: [
|
56
|
+
"swagger-ui-bundle.js",
|
57
|
+
"swagger-ui-standalone-preset.js",
|
58
|
+
"swagger-ui-init.js",
|
59
|
+
"swagger-ui.css",
|
60
|
+
"favicon-32x32.png",
|
61
|
+
"favicon-16x16.png"
|
62
|
+
]
|
63
|
+
}
|
64
|
+
},
|
65
|
+
cache: {
|
66
|
+
max_file_count: 10,
|
67
|
+
max_file_size: 1024 * 1024 * 1.5
|
68
|
+
}
|
69
|
+
});
|
70
|
+
const serve = import_swagger_ui_express.default.serve[0];
|
71
|
+
const staticAssets = (req, res, next) => {
|
72
|
+
const filePath = req.path.replace(path, "");
|
73
|
+
const file = LiveAssets.get(filePath);
|
74
|
+
if (file === void 0) {
|
75
|
+
if (next) {
|
76
|
+
return next();
|
77
|
+
}
|
78
|
+
return res.status(404).send();
|
79
|
+
}
|
80
|
+
const fileParts = file.path.split(".");
|
81
|
+
const extension = fileParts[fileParts.length - 1];
|
82
|
+
const content = file.content;
|
83
|
+
return res.type(extension).send(content);
|
84
|
+
};
|
85
|
+
const ui = import_swagger_ui_express.default.setup(
|
86
|
+
document,
|
87
|
+
opts,
|
88
|
+
options,
|
89
|
+
customCss,
|
90
|
+
customfavIcon,
|
91
|
+
swaggerUrl,
|
92
|
+
customSiteTitle
|
93
|
+
);
|
94
|
+
return [serve, staticAssets, ui];
|
95
|
+
}
|
96
|
+
|
97
|
+
// src/hyperExpressApplication.ts
|
98
|
+
var Application = class extends import_http.ForklaunchExpressLikeApplication {
|
99
|
+
/**
|
100
|
+
* Creates an instance of the Application class.
|
101
|
+
*
|
102
|
+
* @param {SV} schemaValidator - The schema validator.
|
103
|
+
*/
|
104
|
+
constructor(schemaValidator) {
|
105
|
+
super(schemaValidator, new import_hyper_express.Server());
|
106
|
+
}
|
107
|
+
listen(arg0, arg1, arg2) {
|
108
|
+
if (typeof arg0 === "number") {
|
109
|
+
const port = arg0 || Number(process.env.PORT);
|
110
|
+
this.internal.set_error_handler((_req, res, err) => {
|
111
|
+
res.locals.errorMessage = err.message;
|
112
|
+
console.error(err);
|
113
|
+
res.status(
|
114
|
+
res.statusCode && res.statusCode >= 400 ? res.statusCode : 500
|
115
|
+
).send(`Internal server error:
|
116
|
+
|
117
|
+
${err.message}`);
|
118
|
+
});
|
119
|
+
const swaggerPath = `/api${process.env.VERSION ?? "/v1"}${process.env.SWAGGER_PATH ?? "/swagger"}`;
|
120
|
+
this.internal.use(swaggerPath, swaggerRedirect(swaggerPath));
|
121
|
+
this.internal.get(
|
122
|
+
`${swaggerPath}/*`,
|
123
|
+
swagger(
|
124
|
+
swaggerPath,
|
125
|
+
(0, import_http.generateSwaggerDocument)(this.schemaValidator, port, this.routers)
|
126
|
+
)
|
127
|
+
);
|
128
|
+
if (arg1 && typeof arg1 === "string") {
|
129
|
+
return this.internal.listen(port, arg1, arg2);
|
130
|
+
} else if (arg1 && typeof arg1 === "function") {
|
131
|
+
return this.internal.listen(port, arg1);
|
132
|
+
}
|
133
|
+
}
|
134
|
+
return this.internal.listen(
|
135
|
+
arg0,
|
136
|
+
arg1
|
137
|
+
);
|
138
|
+
}
|
139
|
+
};
|
140
|
+
// Annotate the CommonJS export names for ESM import in node:
|
141
|
+
0 && (module.exports = {
|
142
|
+
Application
|
143
|
+
});
|
@@ -0,0 +1,111 @@
|
|
1
|
+
// src/hyperExpressApplication.ts
|
2
|
+
import {
|
3
|
+
ForklaunchExpressLikeApplication,
|
4
|
+
generateSwaggerDocument
|
5
|
+
} from "@forklaunch/core/http";
|
6
|
+
import { Server } from "hyper-express";
|
7
|
+
|
8
|
+
// src/middleware/swagger.middleware.ts
|
9
|
+
import LiveDirectory from "live-directory";
|
10
|
+
import getAbsoluteSwaggerFsPath from "swagger-ui-dist/absolute-path";
|
11
|
+
import swaggerUi from "swagger-ui-express";
|
12
|
+
function swaggerRedirect(path) {
|
13
|
+
return (req, res, next) => {
|
14
|
+
if (req.path === path) {
|
15
|
+
res.redirect(`${path}/`);
|
16
|
+
}
|
17
|
+
return next?.();
|
18
|
+
};
|
19
|
+
}
|
20
|
+
function swagger(path, document, opts, options, customCss, customfavIcon, swaggerUrl, customSiteTitle) {
|
21
|
+
const LiveAssets = new LiveDirectory(getAbsoluteSwaggerFsPath(), {
|
22
|
+
filter: {
|
23
|
+
keep: {
|
24
|
+
names: [
|
25
|
+
"swagger-ui-bundle.js",
|
26
|
+
"swagger-ui-standalone-preset.js",
|
27
|
+
"swagger-ui-init.js",
|
28
|
+
"swagger-ui.css",
|
29
|
+
"favicon-32x32.png",
|
30
|
+
"favicon-16x16.png"
|
31
|
+
]
|
32
|
+
}
|
33
|
+
},
|
34
|
+
cache: {
|
35
|
+
max_file_count: 10,
|
36
|
+
max_file_size: 1024 * 1024 * 1.5
|
37
|
+
}
|
38
|
+
});
|
39
|
+
const serve = swaggerUi.serve[0];
|
40
|
+
const staticAssets = (req, res, next) => {
|
41
|
+
const filePath = req.path.replace(path, "");
|
42
|
+
const file = LiveAssets.get(filePath);
|
43
|
+
if (file === void 0) {
|
44
|
+
if (next) {
|
45
|
+
return next();
|
46
|
+
}
|
47
|
+
return res.status(404).send();
|
48
|
+
}
|
49
|
+
const fileParts = file.path.split(".");
|
50
|
+
const extension = fileParts[fileParts.length - 1];
|
51
|
+
const content = file.content;
|
52
|
+
return res.type(extension).send(content);
|
53
|
+
};
|
54
|
+
const ui = swaggerUi.setup(
|
55
|
+
document,
|
56
|
+
opts,
|
57
|
+
options,
|
58
|
+
customCss,
|
59
|
+
customfavIcon,
|
60
|
+
swaggerUrl,
|
61
|
+
customSiteTitle
|
62
|
+
);
|
63
|
+
return [serve, staticAssets, ui];
|
64
|
+
}
|
65
|
+
|
66
|
+
// src/hyperExpressApplication.ts
|
67
|
+
var Application = class extends ForklaunchExpressLikeApplication {
|
68
|
+
/**
|
69
|
+
* Creates an instance of the Application class.
|
70
|
+
*
|
71
|
+
* @param {SV} schemaValidator - The schema validator.
|
72
|
+
*/
|
73
|
+
constructor(schemaValidator) {
|
74
|
+
super(schemaValidator, new Server());
|
75
|
+
}
|
76
|
+
listen(arg0, arg1, arg2) {
|
77
|
+
if (typeof arg0 === "number") {
|
78
|
+
const port = arg0 || Number(process.env.PORT);
|
79
|
+
this.internal.set_error_handler((_req, res, err) => {
|
80
|
+
res.locals.errorMessage = err.message;
|
81
|
+
console.error(err);
|
82
|
+
res.status(
|
83
|
+
res.statusCode && res.statusCode >= 400 ? res.statusCode : 500
|
84
|
+
).send(`Internal server error:
|
85
|
+
|
86
|
+
${err.message}`);
|
87
|
+
});
|
88
|
+
const swaggerPath = `/api${process.env.VERSION ?? "/v1"}${process.env.SWAGGER_PATH ?? "/swagger"}`;
|
89
|
+
this.internal.use(swaggerPath, swaggerRedirect(swaggerPath));
|
90
|
+
this.internal.get(
|
91
|
+
`${swaggerPath}/*`,
|
92
|
+
swagger(
|
93
|
+
swaggerPath,
|
94
|
+
generateSwaggerDocument(this.schemaValidator, port, this.routers)
|
95
|
+
)
|
96
|
+
);
|
97
|
+
if (arg1 && typeof arg1 === "string") {
|
98
|
+
return this.internal.listen(port, arg1, arg2);
|
99
|
+
} else if (arg1 && typeof arg1 === "function") {
|
100
|
+
return this.internal.listen(port, arg1);
|
101
|
+
}
|
102
|
+
}
|
103
|
+
return this.internal.listen(
|
104
|
+
arg0,
|
105
|
+
arg1
|
106
|
+
);
|
107
|
+
}
|
108
|
+
};
|
109
|
+
export {
|
110
|
+
Application
|
111
|
+
};
|
@@ -0,0 +1,12 @@
|
|
1
|
+
import { ForklaunchExpressLikeRouter, ForklaunchRouter, TypedMiddlewareDefinition } from '@forklaunch/core/http';
|
2
|
+
import { AnySchemaValidator } from '@forklaunch/validator';
|
3
|
+
import { MiddlewareHandler, Router as Router$1 } from 'hyper-express';
|
4
|
+
|
5
|
+
declare class Router<SV extends AnySchemaValidator, BasePath extends `/${string}`> extends ForklaunchExpressLikeRouter<SV, BasePath, MiddlewareHandler, Router$1> implements ForklaunchRouter<SV> {
|
6
|
+
basePath: BasePath;
|
7
|
+
constructor(basePath: BasePath, schemaValidator: SV);
|
8
|
+
route(path: string): this;
|
9
|
+
any: TypedMiddlewareDefinition<this, SV>;
|
10
|
+
}
|
11
|
+
|
12
|
+
export { Router };
|
@@ -1,10 +1,12 @@
|
|
1
1
|
import { ForklaunchExpressLikeRouter, ForklaunchRouter, TypedMiddlewareDefinition } from '@forklaunch/core/http';
|
2
2
|
import { AnySchemaValidator } from '@forklaunch/validator';
|
3
|
-
import { Router as
|
4
|
-
|
3
|
+
import { MiddlewareHandler, Router as Router$1 } from 'hyper-express';
|
4
|
+
|
5
|
+
declare class Router<SV extends AnySchemaValidator, BasePath extends `/${string}`> extends ForklaunchExpressLikeRouter<SV, BasePath, MiddlewareHandler, Router$1> implements ForklaunchRouter<SV> {
|
5
6
|
basePath: BasePath;
|
6
7
|
constructor(basePath: BasePath, schemaValidator: SV);
|
7
8
|
route(path: string): this;
|
8
9
|
any: TypedMiddlewareDefinition<this, SV>;
|
9
10
|
}
|
10
|
-
|
11
|
+
|
12
|
+
export { Router };
|
@@ -0,0 +1,130 @@
|
|
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/hyperExpressRouter.ts
|
21
|
+
var hyperExpressRouter_exports = {};
|
22
|
+
__export(hyperExpressRouter_exports, {
|
23
|
+
Router: () => Router
|
24
|
+
});
|
25
|
+
module.exports = __toCommonJS(hyperExpressRouter_exports);
|
26
|
+
var import_http2 = require("@forklaunch/core/http");
|
27
|
+
var import_hyper_express = require("hyper-express");
|
28
|
+
|
29
|
+
// src/middleware/contentParse.middleware.ts
|
30
|
+
async function contentParse(req) {
|
31
|
+
console.debug("[MIDDLEWARE] contentParse started");
|
32
|
+
switch (req.headers["content-type"] && req.headers["content-type"].split(";")[0]) {
|
33
|
+
case "application/json":
|
34
|
+
req.body = await req.json();
|
35
|
+
break;
|
36
|
+
case "application/x-www-form-urlencoded":
|
37
|
+
req.body = await req.urlencoded();
|
38
|
+
break;
|
39
|
+
case "text/plain":
|
40
|
+
req.body = await req.text();
|
41
|
+
break;
|
42
|
+
case "application/octet-stream":
|
43
|
+
req.body = await req.buffer();
|
44
|
+
break;
|
45
|
+
default:
|
46
|
+
req.body = await req.json();
|
47
|
+
break;
|
48
|
+
}
|
49
|
+
}
|
50
|
+
|
51
|
+
// src/middleware/enrichResponseTransmission.middleware.ts
|
52
|
+
var import_http = require("@forklaunch/core/http");
|
53
|
+
function enrichResponseTransmission(req, res, next) {
|
54
|
+
console.debug("[MIDDLEWARE] enrichResponseTransmission");
|
55
|
+
const originalSend = res.send;
|
56
|
+
const originalJson = res.json;
|
57
|
+
const originalSetHeader = res.setHeader;
|
58
|
+
res.json = function(data) {
|
59
|
+
res.bodyData = data;
|
60
|
+
const result = originalJson.call(this, data);
|
61
|
+
return result;
|
62
|
+
};
|
63
|
+
res.send = function(data) {
|
64
|
+
if (!res.bodyData) {
|
65
|
+
res.bodyData = data;
|
66
|
+
res.statusCode = res._status_code;
|
67
|
+
}
|
68
|
+
return (0, import_http.enrichExpressLikeSend)(
|
69
|
+
this,
|
70
|
+
req,
|
71
|
+
res,
|
72
|
+
originalSend,
|
73
|
+
data,
|
74
|
+
!res.cors && (res._cork && !res._corked || !res._cork)
|
75
|
+
);
|
76
|
+
};
|
77
|
+
res.setHeader = function(name, value) {
|
78
|
+
let stringifiedValue;
|
79
|
+
if (Array.isArray(value)) {
|
80
|
+
stringifiedValue = value.map(
|
81
|
+
(v) => typeof v !== "string" ? JSON.stringify(v) : v
|
82
|
+
);
|
83
|
+
} else {
|
84
|
+
stringifiedValue = typeof value !== "string" ? JSON.stringify(value) : value;
|
85
|
+
}
|
86
|
+
return originalSetHeader.call(this, name, stringifiedValue);
|
87
|
+
};
|
88
|
+
next();
|
89
|
+
}
|
90
|
+
|
91
|
+
// src/middleware/polyfillGetHeaders.middleware.ts
|
92
|
+
function polyfillGetHeaders(_req, res, next) {
|
93
|
+
console.debug("[MIDDLEWARE] polyfillGetHeaders started");
|
94
|
+
res.getHeaders = () => {
|
95
|
+
return res._headers;
|
96
|
+
};
|
97
|
+
next?.();
|
98
|
+
}
|
99
|
+
|
100
|
+
// src/hyperExpressRouter.ts
|
101
|
+
var Router = class extends import_http2.ForklaunchExpressLikeRouter {
|
102
|
+
constructor(basePath, schemaValidator) {
|
103
|
+
super(basePath, schemaValidator, new import_hyper_express.Router());
|
104
|
+
this.basePath = basePath;
|
105
|
+
this.internal.use(polyfillGetHeaders);
|
106
|
+
this.internal.use(contentParse);
|
107
|
+
this.internal.use(
|
108
|
+
enrichResponseTransmission
|
109
|
+
);
|
110
|
+
}
|
111
|
+
route(path) {
|
112
|
+
this.internal.route(path);
|
113
|
+
return this;
|
114
|
+
}
|
115
|
+
any = (pathOrContractDetailsOrMiddlewareOrTypedHandler, contractDetailsOrMiddlewareOrTypedHandler, ...middlewareOrMiddlewareWithTypedHandler) => {
|
116
|
+
return this.registerMiddlewareHandler(
|
117
|
+
this.internal.any,
|
118
|
+
pathOrContractDetailsOrMiddlewareOrTypedHandler,
|
119
|
+
contractDetailsOrMiddlewareOrTypedHandler,
|
120
|
+
...middlewareOrMiddlewareWithTypedHandler
|
121
|
+
);
|
122
|
+
};
|
123
|
+
// TODO: Implement the rest of the methods
|
124
|
+
// upgrade
|
125
|
+
// ws
|
126
|
+
};
|
127
|
+
// Annotate the CommonJS export names for ESM import in node:
|
128
|
+
0 && (module.exports = {
|
129
|
+
Router
|
130
|
+
});
|
@@ -0,0 +1,109 @@
|
|
1
|
+
// src/hyperExpressRouter.ts
|
2
|
+
import {
|
3
|
+
ForklaunchExpressLikeRouter
|
4
|
+
} from "@forklaunch/core/http";
|
5
|
+
import { Router as ExpressRouter } from "hyper-express";
|
6
|
+
|
7
|
+
// src/middleware/contentParse.middleware.ts
|
8
|
+
async function contentParse(req) {
|
9
|
+
console.debug("[MIDDLEWARE] contentParse started");
|
10
|
+
switch (req.headers["content-type"] && req.headers["content-type"].split(";")[0]) {
|
11
|
+
case "application/json":
|
12
|
+
req.body = await req.json();
|
13
|
+
break;
|
14
|
+
case "application/x-www-form-urlencoded":
|
15
|
+
req.body = await req.urlencoded();
|
16
|
+
break;
|
17
|
+
case "text/plain":
|
18
|
+
req.body = await req.text();
|
19
|
+
break;
|
20
|
+
case "application/octet-stream":
|
21
|
+
req.body = await req.buffer();
|
22
|
+
break;
|
23
|
+
default:
|
24
|
+
req.body = await req.json();
|
25
|
+
break;
|
26
|
+
}
|
27
|
+
}
|
28
|
+
|
29
|
+
// src/middleware/enrichResponseTransmission.middleware.ts
|
30
|
+
import {
|
31
|
+
enrichExpressLikeSend
|
32
|
+
} from "@forklaunch/core/http";
|
33
|
+
function enrichResponseTransmission(req, res, next) {
|
34
|
+
console.debug("[MIDDLEWARE] enrichResponseTransmission");
|
35
|
+
const originalSend = res.send;
|
36
|
+
const originalJson = res.json;
|
37
|
+
const originalSetHeader = res.setHeader;
|
38
|
+
res.json = function(data) {
|
39
|
+
res.bodyData = data;
|
40
|
+
const result = originalJson.call(this, data);
|
41
|
+
return result;
|
42
|
+
};
|
43
|
+
res.send = function(data) {
|
44
|
+
if (!res.bodyData) {
|
45
|
+
res.bodyData = data;
|
46
|
+
res.statusCode = res._status_code;
|
47
|
+
}
|
48
|
+
return enrichExpressLikeSend(
|
49
|
+
this,
|
50
|
+
req,
|
51
|
+
res,
|
52
|
+
originalSend,
|
53
|
+
data,
|
54
|
+
!res.cors && (res._cork && !res._corked || !res._cork)
|
55
|
+
);
|
56
|
+
};
|
57
|
+
res.setHeader = function(name, value) {
|
58
|
+
let stringifiedValue;
|
59
|
+
if (Array.isArray(value)) {
|
60
|
+
stringifiedValue = value.map(
|
61
|
+
(v) => typeof v !== "string" ? JSON.stringify(v) : v
|
62
|
+
);
|
63
|
+
} else {
|
64
|
+
stringifiedValue = typeof value !== "string" ? JSON.stringify(value) : value;
|
65
|
+
}
|
66
|
+
return originalSetHeader.call(this, name, stringifiedValue);
|
67
|
+
};
|
68
|
+
next();
|
69
|
+
}
|
70
|
+
|
71
|
+
// src/middleware/polyfillGetHeaders.middleware.ts
|
72
|
+
function polyfillGetHeaders(_req, res, next) {
|
73
|
+
console.debug("[MIDDLEWARE] polyfillGetHeaders started");
|
74
|
+
res.getHeaders = () => {
|
75
|
+
return res._headers;
|
76
|
+
};
|
77
|
+
next?.();
|
78
|
+
}
|
79
|
+
|
80
|
+
// src/hyperExpressRouter.ts
|
81
|
+
var Router = class extends ForklaunchExpressLikeRouter {
|
82
|
+
constructor(basePath, schemaValidator) {
|
83
|
+
super(basePath, schemaValidator, new ExpressRouter());
|
84
|
+
this.basePath = basePath;
|
85
|
+
this.internal.use(polyfillGetHeaders);
|
86
|
+
this.internal.use(contentParse);
|
87
|
+
this.internal.use(
|
88
|
+
enrichResponseTransmission
|
89
|
+
);
|
90
|
+
}
|
91
|
+
route(path) {
|
92
|
+
this.internal.route(path);
|
93
|
+
return this;
|
94
|
+
}
|
95
|
+
any = (pathOrContractDetailsOrMiddlewareOrTypedHandler, contractDetailsOrMiddlewareOrTypedHandler, ...middlewareOrMiddlewareWithTypedHandler) => {
|
96
|
+
return this.registerMiddlewareHandler(
|
97
|
+
this.internal.any,
|
98
|
+
pathOrContractDetailsOrMiddlewareOrTypedHandler,
|
99
|
+
contractDetailsOrMiddlewareOrTypedHandler,
|
100
|
+
...middlewareOrMiddlewareWithTypedHandler
|
101
|
+
);
|
102
|
+
};
|
103
|
+
// TODO: Implement the rest of the methods
|
104
|
+
// upgrade
|
105
|
+
// ws
|
106
|
+
};
|
107
|
+
export {
|
108
|
+
Router
|
109
|
+
};
|
@@ -0,0 +1,10 @@
|
|
1
|
+
import { Request } from 'hyper-express';
|
2
|
+
|
3
|
+
/**
|
4
|
+
* Middleware function to parse the request body based on the content type.
|
5
|
+
*
|
6
|
+
* @returns {Function} - The middleware function.
|
7
|
+
*/
|
8
|
+
declare function contentParse(req: Request): Promise<void>;
|
9
|
+
|
10
|
+
export { contentParse };
|
@@ -1,8 +1,10 @@
|
|
1
1
|
import { Request } from 'hyper-express';
|
2
|
+
|
2
3
|
/**
|
3
4
|
* Middleware function to parse the request body based on the content type.
|
4
5
|
*
|
5
6
|
* @returns {Function} - The middleware function.
|
6
7
|
*/
|
7
|
-
|
8
|
-
|
8
|
+
declare function contentParse(req: Request): Promise<void>;
|
9
|
+
|
10
|
+
export { contentParse };
|
@@ -0,0 +1,49 @@
|
|
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/middleware/contentParse.middleware.ts
|
21
|
+
var contentParse_middleware_exports = {};
|
22
|
+
__export(contentParse_middleware_exports, {
|
23
|
+
contentParse: () => contentParse
|
24
|
+
});
|
25
|
+
module.exports = __toCommonJS(contentParse_middleware_exports);
|
26
|
+
async function contentParse(req) {
|
27
|
+
console.debug("[MIDDLEWARE] contentParse started");
|
28
|
+
switch (req.headers["content-type"] && req.headers["content-type"].split(";")[0]) {
|
29
|
+
case "application/json":
|
30
|
+
req.body = await req.json();
|
31
|
+
break;
|
32
|
+
case "application/x-www-form-urlencoded":
|
33
|
+
req.body = await req.urlencoded();
|
34
|
+
break;
|
35
|
+
case "text/plain":
|
36
|
+
req.body = await req.text();
|
37
|
+
break;
|
38
|
+
case "application/octet-stream":
|
39
|
+
req.body = await req.buffer();
|
40
|
+
break;
|
41
|
+
default:
|
42
|
+
req.body = await req.json();
|
43
|
+
break;
|
44
|
+
}
|
45
|
+
}
|
46
|
+
// Annotate the CommonJS export names for ESM import in node:
|
47
|
+
0 && (module.exports = {
|
48
|
+
contentParse
|
49
|
+
});
|
@@ -0,0 +1,24 @@
|
|
1
|
+
// src/middleware/contentParse.middleware.ts
|
2
|
+
async function contentParse(req) {
|
3
|
+
console.debug("[MIDDLEWARE] contentParse started");
|
4
|
+
switch (req.headers["content-type"] && req.headers["content-type"].split(";")[0]) {
|
5
|
+
case "application/json":
|
6
|
+
req.body = await req.json();
|
7
|
+
break;
|
8
|
+
case "application/x-www-form-urlencoded":
|
9
|
+
req.body = await req.urlencoded();
|
10
|
+
break;
|
11
|
+
case "text/plain":
|
12
|
+
req.body = await req.text();
|
13
|
+
break;
|
14
|
+
case "application/octet-stream":
|
15
|
+
req.body = await req.buffer();
|
16
|
+
break;
|
17
|
+
default:
|
18
|
+
req.body = await req.json();
|
19
|
+
break;
|
20
|
+
}
|
21
|
+
}
|
22
|
+
export {
|
23
|
+
contentParse
|
24
|
+
};
|