huxy-node-server 1.1.1 → 1.1.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.
Files changed (2) hide show
  1. package/package.json +3 -3
  2. package/src/index.js +155 -141
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "huxy-node-server",
3
- "version": "1.1.1",
3
+ "version": "1.1.3",
4
4
  "description": "一个精炼、高性能的 Express.js 服务器模板,为现代 Node.js 应用程序设计,提供灵活的功能和最佳实践。",
5
5
  "type": "module",
6
6
  "module": "./src/index.js",
@@ -35,12 +35,12 @@
35
35
  },
36
36
  "dependencies": {
37
37
  "compression": "^1.8.1",
38
- "cors": "^2.8.5",
38
+ "cors": "^2.8.6",
39
39
  "dotenv": "^17.2.3",
40
40
  "express": "^5.2.1",
41
41
  "express-rate-limit": "^8.2.1",
42
42
  "helmet": "^8.1.0",
43
- "pino": "^10.2.1",
43
+ "pino": "^10.3.0",
44
44
  "pino-http": "^11.0.0",
45
45
  "pino-pretty": "^13.1.3"
46
46
  },
package/src/index.js CHANGED
@@ -1,32 +1,32 @@
1
- import y from 'express';
1
+ import T from 'express';
2
2
  import K from 'helmet';
3
3
  import z from 'cors';
4
4
  import {rateLimit as B, ipKeyGenerator as X} from 'express-rate-limit';
5
5
  import Q from 'compression';
6
- import {createServer as N} from 'node:http';
6
+ import {createServer as O} from 'node:http';
7
7
  import J from 'node:https';
8
- import U from 'node:os';
9
- import j from 'node:net';
10
- var c = (t = new Date()) => t.toLocaleString('zh-CN', {timeZone: 'Asia/Shanghai', hour12: !1}),
11
- L = t => Object.prototype.toString.call(t).slice(8, -1).toLowerCase(),
8
+ import H from 'node:os';
9
+ import k from 'node:net';
10
+ var l = (t = new Date()) => t.toLocaleString('zh-CN', {timeZone: 'Asia/Shanghai', hour12: !1}),
11
+ w = t => Object.prototype.toString.call(t).slice(8, -1).toLowerCase(),
12
12
  f = t => {
13
- let o = t ? 'https' : 'http',
14
- s = U.networkInterfaces(),
13
+ let r = t ? 'https' : 'http',
14
+ o = H.networkInterfaces(),
15
15
  e = [];
16
- return (Object.keys(s).map(n => e.push(...s[n])), e.filter(n => n.family === 'IPv4').map(n => n.address));
16
+ return (Object.keys(o).map(n => e.push(...o[n])), e.filter(n => n.family === 'IPv4').map(n => n.address));
17
17
  },
18
- T = t => {
19
- let o = t ?? process.argv.slice(2) ?? [],
20
- s = {};
18
+ y = t => {
19
+ let r = t ?? process.argv.slice(2) ?? [],
20
+ o = {};
21
21
  return (
22
- o.map(e => {
23
- let [r, n] = e.split('=');
24
- s[r] = n;
22
+ r.map(e => {
23
+ let [s, n] = e.split('=');
24
+ o[s] = n;
25
25
  }),
26
- s
26
+ o
27
27
  );
28
28
  },
29
- G = {
29
+ U = {
30
30
  NODE_ENV: 'nodeEnv',
31
31
  PORT: 'port',
32
32
  STATIC_PORT: 'staticPort',
@@ -40,159 +40,165 @@ var c = (t = new Date()) => t.toLocaleString('zh-CN', {timeZone: 'Asia/Shanghai'
40
40
  JWT_SECRET: 'secret',
41
41
  AUTH_TOKEN: 'authToken',
42
42
  },
43
- F = (t, o, s) => {
44
- let [e, r] = t.split('.');
45
- e && r ? (s[e] || (s[e] = {}), (s[e][r] = o)) : (s[e] = o);
43
+ j = (t, r, o) => {
44
+ let [e, s] = t.split('.');
45
+ e && s ? (o[e] || (o[e] = {}), (o[e][s] = r)) : (o[e] = r);
46
+ },
47
+ G = t => {
48
+ let {connectSrc: r, ...o} = t;
49
+ if (!r) return o;
50
+ (o.helmet.contentSecurityPolicy || (o.helmet.contentSecurityPolicy = {}), o.helmet.contentSecurityPolicy.directives || (o.helmet.contentSecurityPolicy.directives = {}));
51
+ let e = typeof r == 'string' ? r.split(',').map(s => s.trim()) : Array.isArray(r) ? r : [];
52
+ return ((o.helmet.contentSecurityPolicy.directives.connectSrc = [...o.helmet.contentSecurityPolicy.directives.connectSrc, ...e]), o);
46
53
  },
47
- g = (t = {}, o = G) => {
48
- let {env: s} = process;
49
- Object.keys(o).map(r => {
50
- let n = s[r] ?? t[r];
51
- n && F(o[r], n, t);
54
+ h = (t = {}, r = U) => {
55
+ let {env: o} = process;
56
+ Object.keys(r).map(s => {
57
+ let n = o[s] ?? t[s];
58
+ n && j(r[s], n, t);
52
59
  });
53
- let e = {...t, ...T()};
54
- return ((e.port = e.staticPort || e.port), (e.isDev = e.nodeEnv === 'development'), (e.protocol = 'http'), e);
60
+ let e = {...t, ...y()};
61
+ return ((e.port = e.staticPort || e.port), (e.isDev = e.nodeEnv === 'development'), (e.protocol = 'http'), G(e));
55
62
  },
56
- h = (t, o = '127.0.0.1') =>
57
- new Promise(s => {
58
- let e = j.createServer();
59
- (e.once('error', r => {
60
- (e.close(), s((r.code === 'EADDRINUSE', !1)));
63
+ g = (t, r = '127.0.0.1') =>
64
+ new Promise(o => {
65
+ let e = k.createServer();
66
+ (e.once('error', s => {
67
+ (e.close(), o((s.code === 'EADDRINUSE', !1)));
61
68
  }),
62
69
  e.once('listening', () => {
63
- (e.close(), s(!0));
70
+ (e.close(), o(!0));
64
71
  }),
65
- e.listen(Number(t), o));
72
+ e.listen(Number(t), r));
66
73
  }),
67
- I = (t, o = {}, s) => {
68
- let e = r => {
69
- (s.warn(`\u6536\u5230 ${r} \u4FE1\u53F7, \u{1F6D1} \u6B63\u5728\u5173\u95ED\u670D\u52A1\u5668...`),
74
+ I = (t, r = {}, o) => {
75
+ let e = s => {
76
+ (o.warn(`\u6536\u5230 ${s} \u4FE1\u53F7, \u{1F6D1} \u6B63\u5728\u5173\u95ED\u670D\u52A1\u5668...`),
70
77
  t.close(async () => {
71
- (s.info('\u{1F44B} \u670D\u52A1\u5668\u5DF2\u5173\u95ED'), await o.shutdown?.(), process.exit(0));
78
+ (o.info('\u{1F44B} \u670D\u52A1\u5668\u5DF2\u5173\u95ED'), await r.shutdown?.(), process.exit(0));
72
79
  }),
73
80
  setTimeout(() => {
74
- (s.error('\u274C \u5F3A\u5236\u5173\u95ED\u670D\u52A1\u5668'), process.exit(1));
81
+ (o.error('\u274C \u5F3A\u5236\u5173\u95ED\u670D\u52A1\u5668'), process.exit(1));
75
82
  }, 5e3));
76
83
  };
77
84
  (process.on('SIGTERM', () => e('SIGTERM')),
78
85
  process.on('SIGINT', () => e('SIGINT')),
79
- process.on('uncaughtException', r => {
80
- (s.fatal(r, `\u{1F4A5} \u672A\u6355\u83B7\u7684\u5F02\u5E38: ${r.message}`), process.exit(1));
86
+ process.on('uncaughtException', s => {
87
+ (o.fatal(s, `\u{1F4A5} \u672A\u6355\u83B7\u7684\u5F02\u5E38: ${s.message}`), process.exit(1));
81
88
  }),
82
- process.on('unhandledRejection', (r, n) => {
83
- (s.fatal({reason: r, promise: n}, '\u26A0\uFE0F \u672A\u5904\u7406\u7684 Promise \u62D2\u7EDD'), process.exit(1));
89
+ process.on('unhandledRejection', (s, n) => {
90
+ (o.fatal({reason: s, promise: n}, '\u26A0\uFE0F \u672A\u5904\u7406\u7684 Promise \u62D2\u7EDD'), process.exit(1));
84
91
  }));
85
92
  },
86
- A = (t, {port: o, host: s = '0.0.0.0'} = {}) =>
87
- new Promise((e, r) => {
88
- let n = a => {
89
- (p(), r(a));
93
+ L = (t, {port: r, host: o = '0.0.0.0'} = {}) =>
94
+ new Promise((e, s) => {
95
+ let n = c => {
96
+ (a(), s(c));
90
97
  },
91
98
  i = () => {
92
- (p(), e(t));
99
+ (a(), e(t));
93
100
  },
94
- p = () => {
101
+ a = () => {
95
102
  (t.off('error', n), t.off('listening', i));
96
103
  };
97
- (t.once('error', n), t.once('listening', i), t.listen(o, s));
104
+ (t.once('error', n), t.once('listening', i), t.listen(r, o));
98
105
  }),
99
- $ = (t, o = 56) => {
100
- let s = t.length,
101
- e = o - s,
102
- r = ~~(e / 2);
103
- return `${'-'.repeat(r)}${t}${'-'.repeat(e - r)}`;
106
+ A = (t, r = 56) => {
107
+ let o = t.length,
108
+ e = r - o,
109
+ s = ~~(e / 2);
110
+ return `${'-'.repeat(s)}${t}${'-'.repeat(e - s)}`;
104
111
  };
105
- var E =
112
+ var F =
106
113
  (t = {}) =>
107
- async (o = 'huxy') => {
108
- let {logLevel: s, transportOpt: e, ...r} = t,
114
+ async (r = 'huxy') => {
115
+ let {logLevel: o, transportOpt: e, ...s} = t,
109
116
  n = (await import('pino')).default,
110
117
  i = n({
111
- name: o,
112
- level: s ?? 'info',
113
- formatters: {level: p => ({level: p})},
118
+ name: r,
119
+ level: o ?? 'info',
120
+ formatters: {level: a => ({level: a})},
114
121
  timestamp: n.stdTimeFunctions.isoTime,
115
122
  base: null,
116
123
  transport: {target: 'pino-pretty', options: {colorize: !0, levelFirst: !0, ...e}, ignore: 'pid,hostname,level,time', translateTime: 'SYS:yyyy-mm-dd HH:MM:ss'},
117
- ...r,
124
+ ...s,
118
125
  });
119
126
  return ((i.isPino = !0), i);
120
127
  };
121
- var x = E;
122
- var R = E('error-handler'),
123
- b = t => (o, s, e) => {
124
- (R.error({message: 'Not Found', timestamp: c(), url: o.originalUrl, method: o.method, ip: o.ip, userAgent: o.get('User-Agent')}, '\u627E\u4E0D\u5230\u8DEF\u5F84'),
125
- s.status(404).json({success: !1, status: 404, url: o.originalUrl, message: `\u8DEF\u7531 [${o.method} ${o.originalUrl}] \u4E0D\u5B58\u5728`, timestamp: c()}));
128
+ var v = F;
129
+ var $ = (t, r) => (o, e, s) => {
130
+ (r.error({message: 'Not Found', timestamp: l(), url: o.originalUrl, method: o.method, ip: o.ip, userAgent: o.get('User-Agent')}, '\u627E\u4E0D\u5230\u8DEF\u5F84'),
131
+ e.status(404).json({success: !1, status: 404, url: o.originalUrl, message: `\u8DEF\u7531 [${o.method} ${o.originalUrl}] \u4E0D\u5B58\u5728`, timestamp: l()}));
126
132
  },
127
- O = t => (o, s, e, r) => {
128
- let n = o.status || 500,
129
- i = o.message;
130
- (R.error({message: i, timestamp: c(), stack: o.stack, url: s.originalUrl, method: s.method, ip: s.ip, userAgent: s.get('User-Agent')}, '\u670D\u52A1\u5668\u5185\u90E8\u9519\u8BEF'),
131
- e.status(n).json({success: !1, message: (t.isDev, i), stack: t.isDev ? o.stack : void 0, timestamp: c()}));
133
+ R = (t, r) => (o, e, s, n) => {
134
+ let i = o.status || 500,
135
+ a = o.message;
136
+ (r.error({message: a, timestamp: l(), stack: o.stack, url: e.originalUrl, method: e.method, ip: e.ip, userAgent: e.get('User-Agent')}, '\u670D\u52A1\u5668\u5185\u90E8\u9519\u8BEF'),
137
+ s.status(i).json({success: !1, message: (t.isDev, a), stack: t.isDev ? o.stack : void 0, timestamp: l()}));
132
138
  };
133
139
  import {Router as V} from 'express';
134
140
  var W = t => {
135
- let o = V();
141
+ let r = V();
136
142
  return (
137
- o.use('/health', (s, e) => {
138
- e.status(200).json({status: 'OK', timestamp: c(), environment: t.nodeEnv, uptime: process.uptime(), memoryUsage: process.memoryUsage(), pid: process.pid});
143
+ r.use('/health', (o, e) => {
144
+ e.status(200).json({status: 'OK', timestamp: l(), environment: t.nodeEnv, uptime: process.uptime(), memoryUsage: process.memoryUsage(), pid: process.pid});
139
145
  }),
140
- o.get('/', (s, e) => {
141
- e.status(200).json({message: 'Node.js \u670D\u52A1\u5668\u8FD0\u884C\u4E2D', timestamp: c(), environment: t.nodeEnv});
146
+ r.get('/', (o, e) => {
147
+ e.status(200).json({message: 'Node.js \u670D\u52A1\u5668\u8FD0\u884C\u4E2D', timestamp: l(), environment: t.nodeEnv});
142
148
  }),
143
- o
149
+ r
144
150
  );
145
151
  },
146
- _ = W;
147
- var Y = async (t, o = {}, s) => {
148
- if ((t.disable('x-powered-by'), t.set('trust proxy', o.trustProxy ?? 1), s.isPino)) {
152
+ b = W;
153
+ var Y = async (t, r = {}, o) => {
154
+ if ((t.disable('x-powered-by'), t.set('trust proxy', r.trustProxy ?? 1), o.isPino)) {
149
155
  let e = (await import('pino-http')).default;
150
- t.use(e({logger: s, quietReqLogger: !0, autoLogging: !1, genReqId: !1}));
156
+ t.use(e({logger: o, quietReqLogger: !0, autoLogging: !1, genReqId: !1}));
151
157
  } else
152
- t.use((e, r, n) => {
153
- e.log = s;
158
+ t.use((e, s, n) => {
159
+ e.log = o;
154
160
  });
155
161
  (t.use(Q()),
156
- t.use(K(o.helmet)),
157
- t.use(z(o.cors)),
158
- t.use(o.apiPrefix, B({keyGenerator: e => X(e.ip) || e.headers['x-huxy-auth'] || e.headers['x-api-key'] || e.headers.authorization, ...o.rateLimit})),
159
- t.use(y.json({limit: '20mb'})),
160
- t.use(y.urlencoded({extended: !0, limit: '20mb'})));
162
+ t.use(K(r.helmet)),
163
+ t.use(z(r.cors)),
164
+ t.use(r.apiPrefix, B({keyGenerator: e => X(e.ip) || e.headers['x-huxy-auth'] || e.headers['x-api-key'] || e.headers.authorization, ...r.rateLimit})),
165
+ t.use(T.json({limit: '20mb'})),
166
+ t.use(T.urlencoded({extended: !0, limit: '20mb'})));
161
167
  },
162
- Z = (t, o = {}) => {
163
- (t.use(_(o)), t.use(b(o)), t.use(O(o)));
168
+ Z = (t, r = {}, o) => {
169
+ (t.use(b(r)), t.use($(r, o)), t.use(R(r, o)));
164
170
  },
165
- q = async (t = {}, o) => {
166
- let {logger: s, ...e} = g(t),
167
- r = s ?? (await x(e.loggerConfig)('huxy')),
171
+ q = async (t = {}, r) => {
172
+ let {logger: o, ...e} = h(t),
173
+ s = o ?? (await v(e.loggerConfig)('huxy')),
168
174
  {port: n, ssl: i} = e;
169
- (await h(n, e.host)) || ((e.port = Number(n) + 1), r.warn(`\u7AEF\u53E3 ${n} \u5DF2\u88AB\u5360\u7528\uFF0C\u73B0\u5728\u4F7F\u7528\u7AEF\u53E3 ${e.port}`));
170
- let a = y();
171
- await Y(a, e, r);
172
- let l;
175
+ (await g(n, e.host)) || ((e.port = Number(n) + 1), s.warn(`\u7AEF\u53E3 ${n} \u5DF2\u88AB\u5360\u7528\uFF0C\u73B0\u5728\u4F7F\u7528\u7AEF\u53E3 ${e.port}`));
176
+ let c = T();
177
+ await Y(c, e, s);
178
+ let p;
173
179
  (i
174
- ? (L(i) === 'object' ||
175
- (r.error({ssl: {key: '/path/to/name.key', cert: '/path/to/name.pem'}}, '\u26A0\uFE0F \u8BF7\u8BBE\u7F6E\u6709\u6548 SSL \u6216\u8BBE\u7F6E {ssl: false}'), process.exit(1)),
180
+ ? (w(i) === 'object' ||
181
+ (s.error({ssl: {key: '/path/to/name.key', cert: '/path/to/name.pem'}}, '\u26A0\uFE0F \u8BF7\u8BBE\u7F6E\u6709\u6548 SSL \u6216\u8BBE\u7F6E {ssl: false}'), process.exit(1)),
176
182
  (e.protocol = 'https'),
177
- (l = J.createServer(i, a)),
178
- N((u, d) => {
183
+ (p = J.createServer(i, c)),
184
+ O((u, d) => {
179
185
  (d.writeHead(301, {Location: `${e.protocol}://${u.headers.host}${u.url}`}), d.end());
180
186
  }).listen(80))
181
- : (l = N(a)),
182
- I(l, e, r));
187
+ : (p = O(c)),
188
+ I(p, e, s));
183
189
  try {
184
- await A(l, e);
190
+ await L(p, e);
185
191
  } catch (m) {
186
- (r.error({err: m}, '\u26A0\uFE0F \u670D\u52A1\u5668\u542F\u52A8\u5931\u8D25'), process.exit(1));
192
+ (s.error({err: m}, '\u26A0\uFE0F \u670D\u52A1\u5668\u542F\u52A8\u5931\u8D25'), process.exit(1));
187
193
  }
188
194
  try {
189
- await o?.(e, a, l, r);
195
+ await r?.(e, c, p, s);
190
196
  } catch (m) {
191
- (r.error({err: m}, `\u274C \u56DE\u8C03\u51FD\u6570\u9519\u8BEF\uFF1A${m.message}`), process.exit(1));
197
+ (s.error({err: m}, `\u274C \u56DE\u8C03\u51FD\u6570\u9519\u8BEF\uFF1A${m.message}`), process.exit(1));
192
198
  }
193
- return (Z(a, e), {app: a, httpServer: l, config: e, logger: r});
199
+ return (Z(c, e, s), {app: c, httpServer: p, config: e, logger: s});
194
200
  },
195
- M = q;
201
+ _ = q;
196
202
  import 'dotenv';
197
203
  var ee = {
198
204
  nodeEnv: process.env.NODE_ENV || 'development',
@@ -208,51 +214,59 @@ var ee = {
208
214
  message: {message: '\u8BF7\u6C42\u8FC7\u4E8E\u9891\u7E41\uFF0C\u8BF7\u7A0D\u540E\u518D\u8BD5'},
209
215
  },
210
216
  helmet: {
211
- contentSecurityPolicy: {directives: {defaultSrc: ["'self'"], styleSrc: ["'self'", "'unsafe-inline'"], scriptSrc: ["'self'", "'unsafe-eval'"], imgSrc: ["'self'", 'data:', 'https:']}},
217
+ contentSecurityPolicy: {
218
+ directives: {
219
+ defaultSrc: ["'self'"],
220
+ connectSrc: ['*'],
221
+ styleSrc: ["'self'", "'unsafe-inline'"],
222
+ scriptSrc: ["'self'", "'unsafe-eval'", "'unsafe-inline'"],
223
+ imgSrc: ["'self'", 'data:', 'https:'],
224
+ },
225
+ },
212
226
  crossOriginEmbedderPolicy: !1,
213
227
  },
214
228
  logLevel: process.env.LOG_LEVEL || 30,
215
229
  },
216
- C = ee;
217
- var te = (t, o, s) =>
218
- M({...C, ...t}, async (e, r, n, i) => {
219
- let {port: p, host: a, nodeEnv: l, basepath: m, appName: u = 'HuxyServer', protocol: d} = e;
220
- if (!s) {
221
- let k = f()
222
- .filter(S => S !== a)
223
- .map(S => `${d}://${S}:${p}${m}`);
224
- (i.info($(u)),
225
- i.info(`\u{1F680} \u670D\u52A1\u8FD0\u884C\u5728\u3010${l}\u3011\u73AF\u5883: ${d}://${a}:${p}${m}`),
226
- i.info(`-----------------[${c()}]------------------`),
227
- i.info({ips: k}, '\u672C\u5730\u5730\u5740'));
230
+ N = ee;
231
+ var te = (t, r, o) =>
232
+ _({...N, ...t}, async (e, s, n, i) => {
233
+ let {port: a, host: c, nodeEnv: p, basepath: m, appName: u = 'HuxyServer', protocol: d} = e;
234
+ if (!o) {
235
+ let D = f()
236
+ .filter(S => S !== c)
237
+ .map(S => `${d}://${S}:${a}${m}`);
238
+ (i.info(A(u)),
239
+ i.info(`\u{1F680} \u670D\u52A1\u8FD0\u884C\u5728\u3010${p}\u3011\u73AF\u5883: ${d}://${c}:${a}${m}`),
240
+ i.info(`-----------------[${l()}]------------------`),
241
+ i.info({ips: D}, '\u672C\u5730\u5730\u5740'));
228
242
  }
229
- await o?.(e, r, n, i);
243
+ await r?.(e, s, n, i);
230
244
  }),
231
- v = te;
245
+ x = te;
232
246
  import ne from 'express';
233
247
  import {fileURLToPath as oe} from 'node:url';
234
- import {dirname as se, resolve as re} from 'node:path';
235
- var P = (t = import.meta.url) => se(oe(t)),
236
- w = (...t) => re(P(), ...t),
237
- D = w;
248
+ import {dirname as re, resolve as se} from 'node:path';
249
+ var E = (t = import.meta.url) => re(oe(t)),
250
+ P = (...t) => se(E(), ...t),
251
+ C = P;
238
252
  var ie = {port: 9e3, host: 'localhost', basepath: '/', buildPath: './build'},
239
253
  ae = t => (t ? (t.endsWith('/') ? t : `${t}/`) : '/'),
240
- ce = (t, o) =>
241
- v({...ie, ...t}, async (s, e, r, n) => {
242
- await o?.(s, e, r, n);
243
- let {basepath: i, buildPath: p} = s;
254
+ ce = (t, r) =>
255
+ x({...ie, ...t}, async (o, e, s, n) => {
256
+ await r?.(o, e, s, n);
257
+ let {basepath: i, buildPath: a} = o;
244
258
  (i !== '/' &&
245
259
  e.get('/', (m, u, d) => {
246
260
  if (m.path === '/') return u.redirect(i);
247
261
  d();
248
262
  }),
249
- e.use(i, ne.static(p, {...s.staticCache})));
250
- let a = ae(i),
251
- l = new RegExp(`^${a.replace(/\//g, '\\/')}(.*)$`);
252
- e.get(l, (m, u) => {
253
- u.sendFile(D(p, 'index.html'));
263
+ e.use(i, ne.static(a, {...o.staticCache})));
264
+ let c = ae(i),
265
+ p = new RegExp(`^${c.replace(/\//g, '\\/')}(.*)$`);
266
+ e.get(p, (m, u) => {
267
+ u.sendFile(C(a, 'index.html'));
254
268
  });
255
269
  }),
256
- H = ce;
257
- var Ye = {startServer: v, startStatic: H, createLogger: x, dateTime: c, localIPs: f, nodeArgs: T, getEnvConfig: g, checkPort: h, getDirName: P, resolvePath: w};
258
- export {h as checkPort, x as createLogger, c as dateTime, Ye as default, P as getDirName, g as getEnvConfig, f as localIPs, T as nodeArgs, w as resolvePath, v as startServer, H as startStatic};
270
+ M = ce;
271
+ var Je = {startServer: x, startStatic: M, createLogger: v, dateTime: l, localIPs: f, nodeArgs: y, getEnvConfig: h, checkPort: g, getDirName: E, resolvePath: P};
272
+ export {g as checkPort, v as createLogger, l as dateTime, Je as default, E as getDirName, h as getEnvConfig, f as localIPs, y as nodeArgs, P as resolvePath, x as startServer, M as startStatic};