huxy-node-server 1.1.3 → 1.1.5

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