@haibun/web-server-express 1.28.18 → 1.29.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/build/defs.d.ts +20 -0
- package/build/defs.js +3 -0
- package/build/defs.js.map +1 -0
- package/build/server-express.d.ts +29 -0
- package/build/server-express.js +114 -0
- package/build/server-express.js.map +1 -0
- package/build/server-express.test.d.ts +1 -0
- package/build/server-express.test.js +17 -0
- package/build/server-express.test.js.map +1 -0
- package/build/web-server-stepper-route.test.d.ts +1 -0
- package/build/web-server-stepper-route.test.js +35 -0
- package/package.json +4 -4
- package/build/web-server-stepper.d.ts.map +0 -1
- package/build/web-server-stepper.test.d.ts.map +0 -1
package/build/defs.d.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export declare const WEBSERVER = "webserver";
|
|
2
|
+
export declare const CHECK_LISTENER = "CHECK_LISTENER";
|
|
3
|
+
import * as express from 'express';
|
|
4
|
+
export interface IWebServer {
|
|
5
|
+
checkAddStaticFolder(subdir: string, loc: string): undefined | string;
|
|
6
|
+
checkAddIndexFolder(subdir: string, loc: string): undefined | string;
|
|
7
|
+
addKnownStaticFolder(subdir: string, mountAt?: string): undefined | string;
|
|
8
|
+
listen(): Promise<unknown>;
|
|
9
|
+
close(): Promise<void>;
|
|
10
|
+
mounted: {
|
|
11
|
+
get: object;
|
|
12
|
+
post: object;
|
|
13
|
+
};
|
|
14
|
+
addRoute(type: TRouteTypes, path: string, route: TRequestHandler): void;
|
|
15
|
+
use(middleware: express.RequestHandler): void;
|
|
16
|
+
}
|
|
17
|
+
export type TRouteTypes = 'get' | 'post';
|
|
18
|
+
export type IRequest = typeof express.request;
|
|
19
|
+
export type IResponse = typeof express.response;
|
|
20
|
+
export type TRequestHandler = (req: IRequest, res: IResponse) => void;
|
package/build/defs.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defs.js","sourceRoot":"","sources":["../src/defs.ts"],"names":[],"mappings":"AACA,MAAM,CAAC,MAAM,SAAS,GAAG,WAAW,CAAC;AACrC,MAAM,CAAC,MAAM,cAAc,GAAG,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
+
import http from 'http';
|
|
3
|
+
import { RequestHandler } from 'express';
|
|
4
|
+
import { IWebServer, TRouteTypes } from './defs.js';
|
|
5
|
+
import { ILogger } from '@haibun/core/build/lib/interfaces/logger.js';
|
|
6
|
+
export declare const DEFAULT_PORT = 8123;
|
|
7
|
+
export declare class ServerExpress implements IWebServer {
|
|
8
|
+
logger: ILogger;
|
|
9
|
+
static listening: boolean;
|
|
10
|
+
listener?: http.Server;
|
|
11
|
+
app: import("express-serve-static-core").Express;
|
|
12
|
+
mounted: {
|
|
13
|
+
get: {};
|
|
14
|
+
post: {};
|
|
15
|
+
};
|
|
16
|
+
base: string;
|
|
17
|
+
port: number;
|
|
18
|
+
constructor(logger: ILogger, base: string, port?: number);
|
|
19
|
+
use(middleware: RequestHandler): void;
|
|
20
|
+
listen(): Promise<unknown>;
|
|
21
|
+
addRoute(type: TRouteTypes, path: string, route: RequestHandler): void;
|
|
22
|
+
private addMounted;
|
|
23
|
+
checkAddStaticFolder(relativeFolder: string, mountAt?: string): string;
|
|
24
|
+
checkAddIndexFolder(relativeFolder: string, mountAt?: string): string;
|
|
25
|
+
addKnownStaticFolder(folder: string, mountAt?: string): string;
|
|
26
|
+
private doAddStaticFolder;
|
|
27
|
+
checkMountBadOrMounted(type: string, loc: string, what: string): string;
|
|
28
|
+
close(): Promise<void>;
|
|
29
|
+
}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { statSync, existsSync } from 'fs';
|
|
2
|
+
import express from 'express';
|
|
3
|
+
import serveIndex from 'serve-index';
|
|
4
|
+
import cookieParser from 'cookie-parser';
|
|
5
|
+
export const DEFAULT_PORT = 8123;
|
|
6
|
+
export class ServerExpress {
|
|
7
|
+
logger;
|
|
8
|
+
static listening = false;
|
|
9
|
+
listener;
|
|
10
|
+
app = express();
|
|
11
|
+
mounted = { get: {}, post: {} };
|
|
12
|
+
base;
|
|
13
|
+
port;
|
|
14
|
+
constructor(logger, base, port = DEFAULT_PORT) {
|
|
15
|
+
this.logger = logger;
|
|
16
|
+
this.base = base;
|
|
17
|
+
this.port = port;
|
|
18
|
+
this.app.use(cookieParser());
|
|
19
|
+
this.app.use(express.json({ limit: '50mb' }));
|
|
20
|
+
}
|
|
21
|
+
use(middleware) {
|
|
22
|
+
this.app.use(middleware);
|
|
23
|
+
}
|
|
24
|
+
listen() {
|
|
25
|
+
return new Promise((resolve, reject) => {
|
|
26
|
+
if (!ServerExpress.listening) {
|
|
27
|
+
try {
|
|
28
|
+
this.listener = this.app.listen(this.port, () => {
|
|
29
|
+
this.logger.log(`Server listening on port: ${this.port}`);
|
|
30
|
+
ServerExpress.listening = true;
|
|
31
|
+
this.logger.log('express listening');
|
|
32
|
+
resolve('started');
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
catch (e) {
|
|
36
|
+
reject(e);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
this.logger.log('express already listening');
|
|
41
|
+
resolve('already listening');
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
addRoute(type, path, route) {
|
|
46
|
+
if (type !== 'get' && type !== 'post') {
|
|
47
|
+
throw Error(`invalid route type ${type}`);
|
|
48
|
+
}
|
|
49
|
+
const bad = this.checkMountBadOrMounted('get', path, route.toString());
|
|
50
|
+
if (bad) {
|
|
51
|
+
throw Error(bad);
|
|
52
|
+
}
|
|
53
|
+
this.logger.log(`adding ${type} route from ${path}`);
|
|
54
|
+
this.app[type](path, route);
|
|
55
|
+
this.addMounted(type, path, route.toString());
|
|
56
|
+
}
|
|
57
|
+
addMounted(type, path, what) {
|
|
58
|
+
this.mounted[type][path] = what;
|
|
59
|
+
}
|
|
60
|
+
// add a static folder restricted to relative paths from files
|
|
61
|
+
checkAddStaticFolder(relativeFolder, mountAt = '/') {
|
|
62
|
+
const folder = [this.base, relativeFolder].join('/');
|
|
63
|
+
return this.doAddStaticFolder(folder, mountAt);
|
|
64
|
+
}
|
|
65
|
+
// add a index folder restricted to relative paths from files
|
|
66
|
+
checkAddIndexFolder(relativeFolder, mountAt = '/') {
|
|
67
|
+
const folder = [this.base, relativeFolder].join('/');
|
|
68
|
+
const bad = this.checkMountBadOrMounted('get', folder, mountAt);
|
|
69
|
+
if (bad) {
|
|
70
|
+
return bad;
|
|
71
|
+
}
|
|
72
|
+
this.logger.info(`serving index from ${folder} at ${mountAt}`);
|
|
73
|
+
this.app.use(mountAt, serveIndex(folder), express.static(folder));
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
// add a static folder at any path
|
|
77
|
+
addKnownStaticFolder(folder, mountAt = '/') {
|
|
78
|
+
return this.doAddStaticFolder(folder, mountAt);
|
|
79
|
+
}
|
|
80
|
+
doAddStaticFolder(folder, mountAt = '/') {
|
|
81
|
+
const bad = this.checkMountBadOrMounted('get', mountAt, folder);
|
|
82
|
+
if (bad) {
|
|
83
|
+
return bad;
|
|
84
|
+
}
|
|
85
|
+
if (!existsSync(folder)) {
|
|
86
|
+
return `"${folder}" doesn't exist`;
|
|
87
|
+
}
|
|
88
|
+
const stat = statSync(folder);
|
|
89
|
+
if (!stat.isDirectory()) {
|
|
90
|
+
return `"${folder}" is not a directory`;
|
|
91
|
+
}
|
|
92
|
+
this.app.use(mountAt, express.static(folder));
|
|
93
|
+
this.addMounted('get', mountAt, folder);
|
|
94
|
+
this.logger.info(`serving files from ${folder} at ${mountAt}`);
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
checkMountBadOrMounted(type, loc, what) {
|
|
98
|
+
if (loc !== loc.replace(/[^a-zA-Z-0-9/\-_]/g, '')) {
|
|
99
|
+
return `mount folder ${loc} has illegal characters`;
|
|
100
|
+
}
|
|
101
|
+
const alreadyMounted = this.mounted[type][loc] || Object.keys(this.mounted[type]).find((m) => m.startsWith(`${loc}/`));
|
|
102
|
+
if (alreadyMounted) {
|
|
103
|
+
return `cannot mount ${type} ${what} at ${loc}, ${alreadyMounted} is already mounted}`;
|
|
104
|
+
}
|
|
105
|
+
return undefined;
|
|
106
|
+
}
|
|
107
|
+
async close() {
|
|
108
|
+
this.logger.info(`closing server ${this.port}`);
|
|
109
|
+
await this.listener?.close();
|
|
110
|
+
this.mounted = { get: {}, post: {} };
|
|
111
|
+
ServerExpress.listening = false;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=server-express.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server-express.js","sourceRoot":"","sources":["../src/server-express.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { ServerExpress } from "./server-express.js";
|
|
2
|
+
import TestLogger from '@haibun/core/build/lib/TestLogger.js';
|
|
3
|
+
describe('mounts', () => {
|
|
4
|
+
it('mounts a route', () => {
|
|
5
|
+
const tl = new TestLogger();
|
|
6
|
+
const se = new ServerExpress(tl, '/', 8999);
|
|
7
|
+
se.listen = async () => 'started';
|
|
8
|
+
expect(() => se.addRoute('get', '/', () => undefined)).not.toThrow();
|
|
9
|
+
});
|
|
10
|
+
it.skip('throws instead of double mounting a route', () => {
|
|
11
|
+
const tl = new TestLogger();
|
|
12
|
+
const se = new ServerExpress(tl, '/', 8999);
|
|
13
|
+
se.listen = async () => 'started';
|
|
14
|
+
expect(async () => await se.addRoute('get', '/', () => undefined)).rejects.toThrow();
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
//# sourceMappingURL=server-express.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server-express.test.js","sourceRoot":"","sources":["../src/server-express.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,UAAU,MAAM,sCAAsC,CAAC;AAE9D,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;IACpB,EAAE,CAAC,gBAAgB,EAAE,GAAG,EAAE;QACtB,MAAM,EAAE,GAAG,IAAI,UAAU,EAAE,CAAC;QAC5B,MAAM,EAAE,GAAG,IAAI,aAAa,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QAC5C,EAAE,CAAC,MAAM,GAAG,KAAK,IAAI,EAAE,CAAC,SAAS,CAAC;QAClC,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IACzE,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,IAAI,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACtD,MAAM,EAAE,GAAG,IAAI,UAAU,EAAE,CAAC;QAC5B,MAAM,EAAE,GAAG,IAAI,aAAa,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QAC5C,EAAE,CAAC,MAAM,GAAG,KAAK,IAAI,EAAE,CAAC,SAAS,CAAC;QAClC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;IACzF,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import WebHttp from '@haibun/web-http/build/web-http.js';
|
|
2
|
+
import { actionOK, getFromRuntime, getStepperOptionName } from '@haibun/core/build/lib/util/index.js';
|
|
3
|
+
import { DEFAULT_DEST } from '@haibun/core/build/lib/defs.js';
|
|
4
|
+
import { WEBSERVER } from './defs.js';
|
|
5
|
+
import Server from './web-server-stepper.js';
|
|
6
|
+
import { AStepper } from '@haibun/core/build/lib/defs.js';
|
|
7
|
+
import { testWithDefaults } from '@haibun/core/build/lib/test/lib.js';
|
|
8
|
+
import WebServerStepper from './web-server-stepper.js';
|
|
9
|
+
describe('route mount', () => {
|
|
10
|
+
it.skip('mounts a route', async () => {
|
|
11
|
+
const TestRoute = class TestRoute extends AStepper {
|
|
12
|
+
steps = {
|
|
13
|
+
addRoute: {
|
|
14
|
+
gwta: 'serve test route to {loc}',
|
|
15
|
+
action: async ({ loc }) => {
|
|
16
|
+
const route = (req, res) => res.status(200).send('ok');
|
|
17
|
+
const webserver = await getFromRuntime(this.getWorld().runtime, WEBSERVER);
|
|
18
|
+
await webserver.addRoute('get', loc, route);
|
|
19
|
+
return actionOK();
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
const wss = new WebServerStepper();
|
|
25
|
+
const feature = { path: '/features/test.feature', content: `serve test route to /test\nwebserver is listening\nfetch from http://localhost:8124/test is "ok"` };
|
|
26
|
+
const result = await testWithDefaults([feature], [Server, TestRoute, WebHttp], {
|
|
27
|
+
options: { DEST: DEFAULT_DEST, },
|
|
28
|
+
extraOptions: {
|
|
29
|
+
[getStepperOptionName(wss, 'PORT')]: '8124',
|
|
30
|
+
},
|
|
31
|
+
});
|
|
32
|
+
expect(result.ok).toBe(true);
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
//# sourceMappingURL=web-server-stepper-route.test.js.map
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@haibun/web-server-express",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.29.0",
|
|
5
5
|
"description": "",
|
|
6
6
|
"main": "build/web-server-stepper.js",
|
|
7
7
|
"files": [
|
|
@@ -20,14 +20,14 @@
|
|
|
20
20
|
"author": "",
|
|
21
21
|
"license": "ISC",
|
|
22
22
|
"dependencies": {
|
|
23
|
-
"@haibun/core": "1.
|
|
24
|
-
"@haibun/domain-webpage": "1.
|
|
23
|
+
"@haibun/core": "1.29.0",
|
|
24
|
+
"@haibun/domain-webpage": "1.29.0",
|
|
25
25
|
"cookie-parser": "^1.4.5",
|
|
26
26
|
"express": "^4.17.1",
|
|
27
27
|
"serve-index": "^1.9.1"
|
|
28
28
|
},
|
|
29
29
|
"devDependencies": {
|
|
30
|
-
"@haibun/web-http": "1.
|
|
30
|
+
"@haibun/web-http": "1.29.0",
|
|
31
31
|
"@types/cookie-parser": "^1.4.2",
|
|
32
32
|
"@types/express": "^4.17.15"
|
|
33
33
|
},
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"web-server-stepper.d.ts","sourceRoot":"","sources":["../src/web-server-stepper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAe,MAAM,6BAA6B,CAAC;AAEvH,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,UAAU,EAAc,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,aAAa,EAAgB,MAAM,kBAAkB,CAAC;AAK/D,QAAA,MAAM,gBAAgB;;mBACT,aAAa,GAAG,SAAS;;;;8BAKlB,MAAM;;;;;;;;;wBAIR,MAAM,YAAY,QAAQ,EAAE;;;;;oCAed,MAAM,SAAS,MAAM;;;;6CAaZ,MAAM,UAAU,MAAM;sCAO7B,MAAM,cAAc,MAAM,aAAa,gBAAgB;0CA2ChE,gBAAgB;;;;;;;;;;;;;;;kCAbX,MAAM;iCAOP,MAAM;;;8BAMV,gBAAgB;;;;;;CAcxC,CAAC;AACF,eAAe,gBAAgB,CAAC;AAEhC,oBAAY,cAAc,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,KAAK,IAAI,CAAC;AAChF,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,UAAU,CAAC;IACtB,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"web-server-stepper.test.d.ts","sourceRoot":"","sources":["../src/web-server-stepper.test.ts"],"names":[],"mappings":""}
|