@haibun/web-server-express 1.28.2 → 1.28.3

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/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@haibun/web-server-express",
3
3
  "type": "module",
4
- "version": "1.28.2",
4
+ "version": "1.28.3",
5
5
  "description": "",
6
6
  "main": "build/web-server-stepper.js",
7
7
  "files": [
@@ -20,13 +20,13 @@
20
20
  "author": "",
21
21
  "license": "ISC",
22
22
  "dependencies": {
23
- "@haibun/core": "1.28.2",
24
- "@haibun/domain-webpage": "1.28.2",
23
+ "@haibun/core": "1.28.3",
24
+ "@haibun/domain-webpage": "1.28.3",
25
25
  "cookie-parser": "^1.4.5",
26
26
  "express": "^4.17.1"
27
27
  },
28
28
  "devDependencies": {
29
- "@haibun/web-http": "1.28.2",
29
+ "@haibun/web-http": "1.28.3",
30
30
  "@types/cookie-parser": "^1.4.2",
31
31
  "@types/express": "^4.17.15"
32
32
  },
@@ -1,28 +0,0 @@
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
- static 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): Promise<void>;
22
- private addMounted;
23
- addStaticFolder(relativeFolder: string, mountAt?: string): Promise<void>;
24
- addKnownStaticFolder(folder: string, mountAt?: string): Promise<void>;
25
- private doAddStaticFolder;
26
- checkMountBadOrMounted(type: string, loc: string, what: string): void;
27
- close(): Promise<void>;
28
- }
@@ -1,99 +0,0 @@
1
- import { statSync, existsSync } from 'fs';
2
- import express from 'express';
3
- import cookieParser from 'cookie-parser';
4
- export const DEFAULT_PORT = 8123;
5
- export class ServerExpress {
6
- logger;
7
- static listening = false;
8
- listener;
9
- app = express();
10
- static mounted = { get: {}, post: {} };
11
- base;
12
- port;
13
- constructor(logger, base, port = DEFAULT_PORT) {
14
- this.logger = logger;
15
- this.base = base;
16
- this.port = port;
17
- this.app.use(cookieParser());
18
- this.app.use(express.json({ limit: '50mb' }));
19
- }
20
- use(middleware) {
21
- this.app.use(middleware);
22
- }
23
- listen() {
24
- return new Promise((resolve, reject) => {
25
- if (!ServerExpress.listening) {
26
- try {
27
- this.listener = this.app.listen(this.port, () => {
28
- this.logger.log(`Server listening on port: ${this.port}`);
29
- ServerExpress.listening = true;
30
- this.logger.log('express listening');
31
- resolve('started');
32
- });
33
- }
34
- catch (e) {
35
- console.error(e);
36
- reject(e);
37
- }
38
- }
39
- else {
40
- this.logger.log('express already listening');
41
- resolve('already listening');
42
- }
43
- });
44
- }
45
- async addRoute(type, path, route) {
46
- if (type !== 'get' && type !== 'post') {
47
- throw Error(`invalid route type ${type}`);
48
- }
49
- this.checkMountBadOrMounted(type, path, route.toString());
50
- this.logger.log(`adding ${type} route from ${path}`);
51
- this.app[type](path, route);
52
- await this.addMounted(type, path, route.toString());
53
- }
54
- async addMounted(type, path, what) {
55
- ServerExpress.mounted[type][path] = what;
56
- if (!this.listener) {
57
- await this.listen();
58
- }
59
- }
60
- // add a static folder restricted to relative paths from files
61
- async addStaticFolder(relativeFolder, mountAt = '/') {
62
- const folder = [this.base, relativeFolder].join('/');
63
- await this.doAddStaticFolder(folder, mountAt);
64
- }
65
- // add a static folder at any path
66
- async addKnownStaticFolder(folder, mountAt = '/') {
67
- await this.doAddStaticFolder(folder, mountAt);
68
- }
69
- async doAddStaticFolder(folder, mountAt = '/') {
70
- this.checkMountBadOrMounted('get', mountAt, folder);
71
- if (!existsSync(folder)) {
72
- throw Error(`"${folder}" doesn't exist`);
73
- }
74
- const stat = statSync(folder);
75
- if (!stat.isDirectory()) {
76
- throw Error(`"${folder}" is not a directory`);
77
- }
78
- this.app.use(mountAt, express.static(folder));
79
- await this.addMounted('get', mountAt, folder);
80
- this.logger.info(`serving files from ${folder} at ${mountAt}`);
81
- return;
82
- }
83
- checkMountBadOrMounted(type, loc, what) {
84
- if (loc !== loc.replace(/[^a-zA-Z-0-9/-_]/g, '')) {
85
- throw Error(`mount folder ${loc} has illegal characters`);
86
- }
87
- const alreadyMounted = ServerExpress.mounted[type][loc] || Object.keys(ServerExpress.mounted[type]).find((m) => m.startsWith(`${loc}/`));
88
- if (alreadyMounted) {
89
- throw Error(`cannot mount ${type} ${what} at ${loc}, ${alreadyMounted} is already mounted}`);
90
- }
91
- }
92
- async close() {
93
- this.logger.info('closing server');
94
- this.listener?.close();
95
- ServerExpress.mounted = { get: {}, post: {} };
96
- ServerExpress.listening = false;
97
- }
98
- }
99
- //# sourceMappingURL=server-express.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"server-express.js","sourceRoot":"","sources":["../src/server-express.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,17 +0,0 @@
1
- import { ServerExpress } from "./server-express.js";
2
- import TestLogger from '@haibun/core/build/lib/TestLogger.js';
3
- describe('mounts', () => {
4
- it.only('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('fails to double mount a route', () => {
11
- const tl = new TestLogger();
12
- const se = new ServerExpress(tl, '/', 8999);
13
- se.listen = async () => 'started';
14
- expect(() => se.addRoute('get', '/', () => undefined)).toThrow();
15
- });
16
- });
17
- //# sourceMappingURL=server-express.test.js.map