@infodb/revx 0.2.2 → 1.0.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/README.md +314 -118
- package/dist/commands/init.d.ts +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +68 -64
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +63 -64
- package/dist/commands/start.js.map +1 -1
- package/dist/commands/validate.d.ts.map +1 -1
- package/dist/commands/validate.js +14 -17
- package/dist/commands/validate.js.map +1 -1
- package/dist/index.js +5 -4
- package/dist/index.js.map +1 -1
- package/dist/utils/config.d.ts +6 -63
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +10 -11
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/logger.d.ts +3 -2
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +7 -4
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/proxy.d.ts +7 -16
- package/dist/utils/proxy.d.ts.map +1 -1
- package/dist/utils/proxy.js +12 -101
- package/dist/utils/proxy.js.map +1 -1
- package/dist/utils/vite-middleware.d.ts +14 -0
- package/dist/utils/vite-middleware.d.ts.map +1 -0
- package/dist/utils/vite-middleware.js +63 -0
- package/dist/utils/vite-middleware.js.map +1 -0
- package/package.json +11 -6
- package/sample/revx.mixed.yaml +63 -0
- package/sample/revx.simple.yaml +4 -4
- package/sample/revx.vite.yaml +56 -0
- package/sample/revx.yaml +9 -58
package/dist/commands/init.js
CHANGED
|
@@ -14,9 +14,6 @@ server:
|
|
|
14
14
|
|
|
15
15
|
# Global configuration
|
|
16
16
|
global:
|
|
17
|
-
# Request timeout in milliseconds
|
|
18
|
-
timeout: 30000
|
|
19
|
-
|
|
20
17
|
# Max concurrent sockets (can also be set here)
|
|
21
18
|
# maxSockets: 256
|
|
22
19
|
|
|
@@ -31,7 +28,6 @@ global:
|
|
|
31
28
|
logging:
|
|
32
29
|
enabled: true
|
|
33
30
|
format: "combined" # combined | dev | common | short | tiny
|
|
34
|
-
level: "info" # error | warn | info | debug
|
|
35
31
|
|
|
36
32
|
# Route definitions
|
|
37
33
|
routes:
|
|
@@ -41,67 +37,22 @@ routes:
|
|
|
41
37
|
changeOrigin: true
|
|
42
38
|
pathRewrite:
|
|
43
39
|
"^/api": ""
|
|
44
|
-
options:
|
|
45
|
-
timeout: 5000
|
|
46
|
-
headers:
|
|
47
|
-
X-Forwarded-Host: "\${HOST}"
|
|
48
40
|
|
|
49
|
-
# Example 2: WebSocket proxy
|
|
41
|
+
# Example 2: WebSocket proxy (critical for HMR)
|
|
50
42
|
- path: "/ws"
|
|
51
43
|
target: "ws://localhost:5000"
|
|
52
44
|
ws: true
|
|
53
45
|
changeOrigin: true
|
|
54
46
|
|
|
55
|
-
# Example 3:
|
|
56
|
-
- path: "
|
|
57
|
-
|
|
58
|
-
- "http://localhost:8001"
|
|
59
|
-
- "http://localhost:8002"
|
|
60
|
-
- "http://localhost:8003"
|
|
61
|
-
strategy: "round-robin" # round-robin | random | ip-hash
|
|
62
|
-
pathRewrite:
|
|
63
|
-
"^/balanced": ""
|
|
64
|
-
healthCheck:
|
|
65
|
-
enabled: true
|
|
66
|
-
interval: 30000
|
|
67
|
-
path: "/health"
|
|
68
|
-
timeout: 3000
|
|
69
|
-
|
|
70
|
-
# Example 4: Request/Response transformation
|
|
71
|
-
- path: "/transform/*"
|
|
72
|
-
target: "http://localhost:6000"
|
|
73
|
-
changeOrigin: true
|
|
74
|
-
transform:
|
|
75
|
-
request:
|
|
76
|
-
headers:
|
|
77
|
-
add:
|
|
78
|
-
X-API-Version: "v2"
|
|
79
|
-
remove:
|
|
80
|
-
- "Cookie"
|
|
81
|
-
response:
|
|
82
|
-
headers:
|
|
83
|
-
add:
|
|
84
|
-
X-Proxy-Server: "revx"
|
|
85
|
-
remove:
|
|
86
|
-
- "Server"
|
|
87
|
-
|
|
88
|
-
# Middleware configuration
|
|
89
|
-
middleware:
|
|
90
|
-
# Request ID middleware
|
|
91
|
-
- type: "requestId"
|
|
92
|
-
enabled: true
|
|
93
|
-
headerName: "X-Request-ID"
|
|
94
|
-
|
|
95
|
-
# Compression middleware
|
|
96
|
-
- type: "compression"
|
|
97
|
-
enabled: true
|
|
98
|
-
threshold: 1024
|
|
47
|
+
# Example 3: Static file serving (for Vite build output)
|
|
48
|
+
- path: "/*"
|
|
49
|
+
static: "./dist"
|
|
99
50
|
|
|
100
|
-
#
|
|
101
|
-
#
|
|
102
|
-
#
|
|
103
|
-
#
|
|
104
|
-
#
|
|
51
|
+
# Example 4: Proxy to Vite dev server
|
|
52
|
+
# - path: "/*"
|
|
53
|
+
# target: "http://localhost:5173"
|
|
54
|
+
# ws: true # Enable WebSocket for HMR
|
|
55
|
+
# changeOrigin: true
|
|
105
56
|
`;
|
|
106
57
|
const SIMPLE_CONFIG = `# revx.yaml - Simple Reverse Proxy Configuration
|
|
107
58
|
|
|
@@ -114,10 +65,53 @@ routes:
|
|
|
114
65
|
pathRewrite:
|
|
115
66
|
"^/api": ""
|
|
116
67
|
|
|
117
|
-
- path: "
|
|
118
|
-
target: "http://localhost:
|
|
68
|
+
- path: "/*"
|
|
69
|
+
target: "http://localhost:5173"
|
|
70
|
+
ws: true
|
|
71
|
+
changeOrigin: true
|
|
72
|
+
`;
|
|
73
|
+
const VITE_CONFIG = `# revx.yaml - Multi-Vite Project Configuration
|
|
74
|
+
|
|
75
|
+
# Server settings
|
|
76
|
+
server:
|
|
77
|
+
port: 3000
|
|
78
|
+
host: 0.0.0.0
|
|
79
|
+
name: "Multi-Vite Dev Server"
|
|
80
|
+
# Increase max sockets for better performance with Vite
|
|
81
|
+
maxSockets: 512
|
|
82
|
+
|
|
83
|
+
# Global configuration
|
|
84
|
+
global:
|
|
85
|
+
# CORS settings
|
|
86
|
+
cors:
|
|
87
|
+
enabled: true
|
|
88
|
+
origin: "*"
|
|
89
|
+
|
|
90
|
+
# Logging settings
|
|
91
|
+
logging:
|
|
92
|
+
enabled: true
|
|
93
|
+
format: "dev"
|
|
94
|
+
|
|
95
|
+
# Route definitions
|
|
96
|
+
routes:
|
|
97
|
+
# Vite project 1
|
|
98
|
+
- path: "/app1"
|
|
99
|
+
vite:
|
|
100
|
+
root: "./projects/app1"
|
|
101
|
+
base: "/app1"
|
|
102
|
+
|
|
103
|
+
# Vite project 2
|
|
104
|
+
- path: "/app2"
|
|
105
|
+
vite:
|
|
106
|
+
root: "./projects/app2"
|
|
107
|
+
base: "/app2"
|
|
108
|
+
|
|
109
|
+
# Backend API proxy
|
|
110
|
+
- path: "/api/*"
|
|
111
|
+
target: "http://localhost:4000"
|
|
112
|
+
changeOrigin: true
|
|
119
113
|
pathRewrite:
|
|
120
|
-
"^/
|
|
114
|
+
"^/api": ""
|
|
121
115
|
`;
|
|
122
116
|
export async function initCommand(options) {
|
|
123
117
|
const logger = new Logger(options.verbose);
|
|
@@ -129,11 +123,21 @@ export async function initCommand(options) {
|
|
|
129
123
|
logger.info('Use --output to specify a different file name');
|
|
130
124
|
process.exit(1);
|
|
131
125
|
}
|
|
132
|
-
|
|
126
|
+
let content;
|
|
127
|
+
if (options.proxy) {
|
|
128
|
+
content = SAMPLE_CONFIG;
|
|
129
|
+
}
|
|
130
|
+
else if (options.simple) {
|
|
131
|
+
content = SIMPLE_CONFIG;
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
// Default: Vite configuration
|
|
135
|
+
content = VITE_CONFIG;
|
|
136
|
+
}
|
|
133
137
|
writeFileSync(fullPath, content, 'utf-8');
|
|
134
138
|
logger.success(`Configuration file created: ${fullPath}`);
|
|
135
|
-
logger.info('Edit the file to configure your
|
|
136
|
-
logger.info(`Start the
|
|
139
|
+
logger.info('Edit the file to configure your routes');
|
|
140
|
+
logger.info(`Start the server with: revx start ${outputPath}`);
|
|
137
141
|
}
|
|
138
142
|
catch (error) {
|
|
139
143
|
if (error instanceof Error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,aAAa,GAAG
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoDrB,CAAC;AAEF,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;CAerB,CAAC;AAEF,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0CnB,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAkF;IAClH,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3C,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,IAAI,WAAW,CAAC;IACjD,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,CAAC;IAEpD,IAAI,CAAC;QACH,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzB,MAAM,CAAC,KAAK,CAAC,sCAAsC,QAAQ,EAAE,CAAC,CAAC;YAC/D,MAAM,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;YAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,OAAe,CAAC;QACpB,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,OAAO,GAAG,aAAa,CAAC;QAC1B,CAAC;aAAM,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YAC1B,OAAO,GAAG,aAAa,CAAC;QAC1B,CAAC;aAAM,CAAC;YACN,8BAA8B;YAC9B,OAAO,GAAG,WAAW,CAAC;QACxB,CAAC;QAED,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAE1C,MAAM,CAAC,OAAO,CAAC,+BAA+B,QAAQ,EAAE,CAAC,CAAC;QAC1D,MAAM,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;QACtD,MAAM,CAAC,IAAI,CAAC,qCAAqC,UAAU,EAAE,CAAC,CAAC;IACjE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,MAAM,CAAC,KAAK,CAAC,wCAAwC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACxE,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"AAYA,wBAAsB,YAAY,CAAC,UAAU,EAAE,MAAM,YAAc,EAAE,OAAO,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,iBA2BlG"}
|
package/dist/commands/start.js
CHANGED
|
@@ -2,35 +2,35 @@ import express from 'express';
|
|
|
2
2
|
import cors from 'cors';
|
|
3
3
|
import morgan from 'morgan';
|
|
4
4
|
import http from 'http';
|
|
5
|
-
import https from 'https';
|
|
6
5
|
import { createServer } from 'http';
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
6
|
+
import { existsSync } from 'fs';
|
|
7
|
+
import { resolve } from 'path';
|
|
9
8
|
import { ConfigLoader } from '../utils/config.js';
|
|
10
9
|
import { ProxyManager } from '../utils/proxy.js';
|
|
10
|
+
import { ViteMiddlewareManager } from '../utils/vite-middleware.js';
|
|
11
11
|
import { Logger } from '../utils/logger.js';
|
|
12
|
-
import { randomUUID } from 'crypto';
|
|
13
12
|
export async function startCommand(configFile = 'revx.yaml', options) {
|
|
14
13
|
const logger = new Logger(options.verbose);
|
|
15
14
|
const configLoader = new ConfigLoader(logger);
|
|
15
|
+
const viteManager = new ViteMiddlewareManager(logger);
|
|
16
16
|
try {
|
|
17
17
|
logger.info(`Loading configuration from: ${configFile}`);
|
|
18
18
|
const config = configLoader.load(configFile);
|
|
19
19
|
// Configure max sockets for better performance with dev servers like Vite
|
|
20
20
|
const maxSockets = config.server.maxSockets || config.global?.maxSockets || 256;
|
|
21
21
|
http.globalAgent.maxSockets = maxSockets;
|
|
22
|
-
https.globalAgent.maxSockets = maxSockets;
|
|
23
22
|
logger.verbose(`Max sockets configured: ${maxSockets}`);
|
|
24
23
|
const app = express();
|
|
25
24
|
const proxyManager = new ProxyManager(logger);
|
|
26
25
|
setupMiddleware(app, config, logger);
|
|
27
|
-
setupRoutes(app, config, proxyManager, logger);
|
|
28
|
-
await startServer(app, config, logger);
|
|
26
|
+
await setupRoutes(app, config, proxyManager, viteManager, logger);
|
|
27
|
+
await startServer(app, config, viteManager, proxyManager, logger);
|
|
29
28
|
}
|
|
30
29
|
catch (error) {
|
|
31
30
|
if (error instanceof Error) {
|
|
32
31
|
logger.error(`Failed to start server: ${error.message}`);
|
|
33
32
|
}
|
|
33
|
+
await viteManager.cleanup();
|
|
34
34
|
process.exit(1);
|
|
35
35
|
}
|
|
36
36
|
}
|
|
@@ -44,43 +44,37 @@ function setupMiddleware(app, config, logger) {
|
|
|
44
44
|
app.use(cors(corsOptions));
|
|
45
45
|
logger.verbose('CORS enabled', corsOptions);
|
|
46
46
|
}
|
|
47
|
-
const requestIdMiddleware = config.middleware?.find(m => m.type === 'requestId');
|
|
48
|
-
if (requestIdMiddleware?.enabled !== false) {
|
|
49
|
-
const headerName = requestIdMiddleware?.headerName || 'X-Request-ID';
|
|
50
|
-
app.use((req, res, next) => {
|
|
51
|
-
const requestId = randomUUID();
|
|
52
|
-
req.headers[headerName.toLowerCase()] = requestId;
|
|
53
|
-
res.setHeader(headerName, requestId);
|
|
54
|
-
next();
|
|
55
|
-
});
|
|
56
|
-
logger.verbose('Request ID middleware enabled');
|
|
57
|
-
}
|
|
58
47
|
if (config.global?.logging?.enabled !== false) {
|
|
59
48
|
const format = config.global?.logging?.format || 'combined';
|
|
60
49
|
app.use(morgan(format));
|
|
61
50
|
logger.verbose(`Logging middleware enabled: ${format}`);
|
|
62
51
|
}
|
|
63
|
-
const compressionMiddleware = config.middleware?.find(m => m.type === 'compression');
|
|
64
|
-
if (compressionMiddleware?.enabled) {
|
|
65
|
-
logger.verbose('Compression middleware enabled');
|
|
66
|
-
}
|
|
67
52
|
app.use(express.json());
|
|
68
53
|
app.use(express.urlencoded({ extended: true }));
|
|
69
54
|
}
|
|
70
|
-
function
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
55
|
+
function setupStaticRoute(app, route, logger) {
|
|
56
|
+
const rootPath = resolve(process.cwd(), route.static);
|
|
57
|
+
if (!existsSync(rootPath)) {
|
|
58
|
+
logger.error(`Static directory does not exist: ${rootPath}`);
|
|
59
|
+
throw new Error(`Static directory not found: ${rootPath}`);
|
|
60
|
+
}
|
|
61
|
+
logger.info(`Static files configured: ${route.path} -> ${rootPath}`);
|
|
62
|
+
app.use(route.path, express.static(rootPath));
|
|
63
|
+
}
|
|
64
|
+
async function setupRoutes(app, config, proxyManager, viteManager, logger) {
|
|
65
|
+
for (const route of config.routes) {
|
|
66
|
+
if (route.vite) {
|
|
67
|
+
const viteMiddleware = await viteManager.createViteMiddleware(route);
|
|
68
|
+
app.use(route.path, viteMiddleware);
|
|
80
69
|
}
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
70
|
+
else if (route.static) {
|
|
71
|
+
setupStaticRoute(app, route, logger);
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
const proxyMiddleware = proxyManager.createProxyMiddleware(route);
|
|
75
|
+
app.use(proxyMiddleware);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
84
78
|
app.get('/health', (req, res) => {
|
|
85
79
|
res.json({ status: 'ok', timestamp: new Date().toISOString() });
|
|
86
80
|
});
|
|
@@ -100,41 +94,45 @@ function setupRoutes(app, config, proxyManager, logger) {
|
|
|
100
94
|
}
|
|
101
95
|
});
|
|
102
96
|
}
|
|
103
|
-
async function startServer(app, config, logger) {
|
|
97
|
+
async function startServer(app, config, viteManager, proxyManager, logger) {
|
|
104
98
|
return new Promise((resolve, reject) => {
|
|
105
99
|
const port = config.server.port;
|
|
106
100
|
const host = config.server.host || '0.0.0.0';
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
101
|
+
const server = createServer(app);
|
|
102
|
+
// Handle WebSocket upgrade requests for proxied routes
|
|
103
|
+
server.on('upgrade', (req, socket, head) => {
|
|
104
|
+
const proxies = proxyManager.getProxies();
|
|
105
|
+
for (const { middleware, route } of proxies) {
|
|
106
|
+
if (route.ws) {
|
|
107
|
+
// Check if the request URL matches the proxy route
|
|
108
|
+
const urlPath = req.url || '/';
|
|
109
|
+
const routePath = route.path.replace(/\/\*$/, ''); // Remove trailing /*
|
|
110
|
+
if (urlPath.startsWith(routePath)) {
|
|
111
|
+
logger.verbose(`WebSocket upgrade: ${urlPath} -> ${route.target}`);
|
|
112
|
+
// @ts-ignore - upgrade method exists on the middleware
|
|
113
|
+
middleware.upgrade(req, socket, head);
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
121
116
|
}
|
|
122
|
-
return;
|
|
123
117
|
}
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
}
|
|
118
|
+
// If no proxy matched, close the socket
|
|
119
|
+
logger.verbose(`WebSocket upgrade failed: no matching route for ${req.url}`);
|
|
120
|
+
socket.destroy();
|
|
121
|
+
});
|
|
128
122
|
server.listen(port, host, () => {
|
|
129
|
-
const protocol = config.ssl?.enabled ? 'https' : 'http';
|
|
130
123
|
logger.server(`${config.server.name || 'Reverse Proxy'} started`);
|
|
131
|
-
logger.success(`Listening on
|
|
124
|
+
logger.success(`Listening on http://${host}:${port}`);
|
|
132
125
|
logger.info('');
|
|
133
126
|
logger.info('Configured routes:');
|
|
134
127
|
config.routes.forEach((route) => {
|
|
135
|
-
const target = route.target ||
|
|
136
|
-
|
|
128
|
+
const target = route.target || route.static || (route.vite ? `vite:${route.vite.root}` : 'unknown');
|
|
129
|
+
const wsIndicator = route.ws ? ' (WS)' : '';
|
|
130
|
+
logger.info(` ${route.path} -> ${target}${wsIndicator}`);
|
|
137
131
|
});
|
|
132
|
+
if (viteManager.getServerCount() > 0) {
|
|
133
|
+
logger.info('');
|
|
134
|
+
logger.info(`Running ${viteManager.getServerCount()} Vite dev server(s)`);
|
|
135
|
+
}
|
|
138
136
|
logger.info('');
|
|
139
137
|
logger.info('Press Ctrl+C to stop the server');
|
|
140
138
|
resolve();
|
|
@@ -147,20 +145,21 @@ async function startServer(app, config, logger) {
|
|
|
147
145
|
reject(error);
|
|
148
146
|
}
|
|
149
147
|
});
|
|
150
|
-
|
|
148
|
+
const shutdown = async () => {
|
|
151
149
|
logger.info('');
|
|
152
150
|
logger.info('Shutting down server...');
|
|
151
|
+
await viteManager.cleanup();
|
|
153
152
|
server.close(() => {
|
|
154
153
|
logger.success('Server stopped');
|
|
155
154
|
process.exit(0);
|
|
156
155
|
});
|
|
156
|
+
};
|
|
157
|
+
process.on('SIGINT', () => {
|
|
158
|
+
shutdown();
|
|
157
159
|
});
|
|
158
160
|
process.on('SIGTERM', () => {
|
|
159
161
|
logger.info('Received SIGTERM signal');
|
|
160
|
-
|
|
161
|
-
logger.success('Server stopped');
|
|
162
|
-
process.exit(0);
|
|
163
|
-
});
|
|
162
|
+
shutdown();
|
|
164
163
|
});
|
|
165
164
|
});
|
|
166
165
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"AAAA,OAAO,OAA4C,MAAM,SAAS,CAAC;AACnE,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AAGA,wBAAsB,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AAGA,wBAAsB,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,iBA4CvF"}
|
|
@@ -18,26 +18,23 @@ export async function validateCommand(configFile, options) {
|
|
|
18
18
|
logger.info(` ${index + 1}. ${route.path}`);
|
|
19
19
|
if (route.target) {
|
|
20
20
|
logger.info(` Target: ${route.target}`);
|
|
21
|
+
if (route.ws) {
|
|
22
|
+
logger.info(` WebSocket: enabled`);
|
|
23
|
+
}
|
|
21
24
|
}
|
|
22
|
-
else if (route.
|
|
23
|
-
logger.info(`
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
});
|
|
25
|
+
else if (route.static) {
|
|
26
|
+
logger.info(` Static: ${route.static}`);
|
|
27
|
+
}
|
|
28
|
+
else if (route.vite) {
|
|
29
|
+
logger.info(` Vite: ${route.vite.root}`);
|
|
30
|
+
if (route.vite.base) {
|
|
31
|
+
logger.info(` Base: ${route.vite.base}`);
|
|
32
|
+
}
|
|
33
|
+
if (route.vite.configFile) {
|
|
34
|
+
logger.info(` Config: ${route.vite.configFile}`);
|
|
35
|
+
}
|
|
27
36
|
}
|
|
28
37
|
});
|
|
29
|
-
if (config.middleware && config.middleware.length > 0) {
|
|
30
|
-
logger.info('');
|
|
31
|
-
logger.info('Middleware:');
|
|
32
|
-
config.middleware.forEach((mw, index) => {
|
|
33
|
-
const status = mw.enabled === false ? 'disabled' : 'enabled';
|
|
34
|
-
logger.info(` ${index + 1}. ${mw.type} (${status})`);
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
if (config.ssl?.enabled) {
|
|
38
|
-
logger.info('');
|
|
39
|
-
logger.info('SSL: enabled');
|
|
40
|
-
}
|
|
41
38
|
}
|
|
42
39
|
}
|
|
43
40
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,UAAkB,EAAE,OAA8B;IACtF,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3C,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC;IAE9C,IAAI,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,kCAAkC,UAAU,EAAE,CAAC,CAAC;QAE5D,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAE7C,MAAM,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;QACzC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChB,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC,aAAa,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAClF,MAAM,CAAC,IAAI,CAAC,aAAa,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAEjD,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAChB,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAC9B,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;gBACrC,MAAM,CAAC,IAAI,CAAC,KAAK,KAAK,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC7C,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;oBACjB,MAAM,CAAC,IAAI,CAAC,gBAAgB,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,UAAkB,EAAE,OAA8B;IACtF,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3C,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC;IAE9C,IAAI,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,kCAAkC,UAAU,EAAE,CAAC,CAAC;QAE5D,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAE7C,MAAM,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;QACzC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChB,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC,aAAa,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAClF,MAAM,CAAC,IAAI,CAAC,aAAa,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAEjD,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAChB,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAC9B,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;gBACrC,MAAM,CAAC,IAAI,CAAC,KAAK,KAAK,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC7C,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;oBACjB,MAAM,CAAC,IAAI,CAAC,gBAAgB,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;oBAC5C,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC;wBACb,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;oBACzC,CAAC;gBACH,CAAC;qBAAM,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;oBACxB,MAAM,CAAC,IAAI,CAAC,gBAAgB,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC9C,CAAC;qBAAM,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;oBACtB,MAAM,CAAC,IAAI,CAAC,cAAc,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;oBAC7C,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;wBACpB,MAAM,CAAC,IAAI,CAAC,cAAc,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;oBAC/C,CAAC;oBACD,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;wBAC1B,MAAM,CAAC,IAAI,CAAC,gBAAgB,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;oBACvD,CAAC;gBACH,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,MAAM,CAAC,KAAK,CAAC,sBAAsB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACtD,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -6,8 +6,8 @@ import { initCommand } from './commands/init.js';
|
|
|
6
6
|
const program = new Command();
|
|
7
7
|
program
|
|
8
8
|
.name('revx')
|
|
9
|
-
.description('
|
|
10
|
-
.version('0.
|
|
9
|
+
.description('Multi-Vite project development server')
|
|
10
|
+
.version('1.0.0');
|
|
11
11
|
program
|
|
12
12
|
.command('start')
|
|
13
13
|
.description('Start the reverse proxy server')
|
|
@@ -22,8 +22,9 @@ program
|
|
|
22
22
|
.action(validateCommand);
|
|
23
23
|
program
|
|
24
24
|
.command('init')
|
|
25
|
-
.description('Create a sample configuration file')
|
|
26
|
-
.option('--simple', 'Create a simple configuration
|
|
25
|
+
.description('Create a sample configuration file (default: Vite multi-project)')
|
|
26
|
+
.option('--simple', 'Create a simple Vite proxy configuration')
|
|
27
|
+
.option('--proxy', 'Create a reverse proxy configuration')
|
|
27
28
|
.option('--output <file>', 'Output file path', 'revx.yaml')
|
|
28
29
|
.option('--verbose', 'Verbose output')
|
|
29
30
|
.action(initCommand);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,MAAM,CAAC;KACZ,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,MAAM,CAAC;KACZ,WAAW,CAAC,uCAAuC,CAAC;KACpD,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,gCAAgC,CAAC;KAC7C,QAAQ,CAAC,eAAe,EAAE,yBAAyB,EAAE,WAAW,CAAC;KACjE,MAAM,CAAC,WAAW,EAAE,gBAAgB,CAAC;KACrC,MAAM,CAAC,YAAY,CAAC,CAAC;AAExB,OAAO;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,6BAA6B,CAAC;KAC1C,QAAQ,CAAC,eAAe,EAAE,yBAAyB,CAAC;KACpD,MAAM,CAAC,WAAW,EAAE,gBAAgB,CAAC;KACrC,MAAM,CAAC,eAAe,CAAC,CAAC;AAE3B,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,kEAAkE,CAAC;KAC/E,MAAM,CAAC,UAAU,EAAE,0CAA0C,CAAC;KAC9D,MAAM,CAAC,SAAS,EAAE,sCAAsC,CAAC;KACzD,MAAM,CAAC,iBAAiB,EAAE,kBAAkB,EAAE,WAAW,CAAC;KAC1D,MAAM,CAAC,WAAW,EAAE,gBAAgB,CAAC;KACrC,MAAM,CAAC,WAAW,CAAC,CAAC;AAEvB,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
package/dist/utils/config.d.ts
CHANGED
|
@@ -5,21 +5,14 @@ export interface CorsConfig {
|
|
|
5
5
|
methods?: string[];
|
|
6
6
|
credentials?: boolean;
|
|
7
7
|
}
|
|
8
|
-
export interface RateLimitConfig {
|
|
9
|
-
enabled?: boolean;
|
|
10
|
-
windowMs?: number;
|
|
11
|
-
max?: number;
|
|
12
|
-
}
|
|
13
8
|
export interface LoggingConfig {
|
|
14
9
|
enabled?: boolean;
|
|
15
10
|
format?: 'combined' | 'dev' | 'common' | 'short' | 'tiny';
|
|
16
11
|
level?: 'error' | 'warn' | 'info' | 'debug';
|
|
17
12
|
}
|
|
18
13
|
export interface GlobalConfig {
|
|
19
|
-
timeout?: number;
|
|
20
14
|
cors?: CorsConfig;
|
|
21
15
|
logging?: LoggingConfig;
|
|
22
|
-
rateLimit?: RateLimitConfig;
|
|
23
16
|
maxSockets?: number;
|
|
24
17
|
}
|
|
25
18
|
export interface ServerConfig {
|
|
@@ -28,74 +21,24 @@ export interface ServerConfig {
|
|
|
28
21
|
name?: string;
|
|
29
22
|
maxSockets?: number;
|
|
30
23
|
}
|
|
31
|
-
export interface
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
}
|
|
36
|
-
export interface CacheConfig {
|
|
37
|
-
enabled?: boolean;
|
|
38
|
-
ttl?: number;
|
|
39
|
-
}
|
|
40
|
-
export interface AuthConfig {
|
|
41
|
-
type?: 'bearer' | 'basic' | 'apikey';
|
|
42
|
-
headerName?: string;
|
|
43
|
-
}
|
|
44
|
-
export interface HealthCheckConfig {
|
|
45
|
-
enabled?: boolean;
|
|
46
|
-
interval?: number;
|
|
47
|
-
path?: string;
|
|
48
|
-
timeout?: number;
|
|
49
|
-
}
|
|
50
|
-
export interface TransformConfig {
|
|
51
|
-
request?: {
|
|
52
|
-
headers?: {
|
|
53
|
-
add?: Record<string, string>;
|
|
54
|
-
remove?: string[];
|
|
55
|
-
};
|
|
56
|
-
};
|
|
57
|
-
response?: {
|
|
58
|
-
headers?: {
|
|
59
|
-
add?: Record<string, string>;
|
|
60
|
-
remove?: string[];
|
|
61
|
-
};
|
|
62
|
-
};
|
|
24
|
+
export interface ViteConfig {
|
|
25
|
+
root: string;
|
|
26
|
+
base?: string;
|
|
27
|
+
configFile?: string;
|
|
63
28
|
}
|
|
64
29
|
export interface RouteConfig {
|
|
65
30
|
path: string;
|
|
66
31
|
target?: string;
|
|
67
|
-
|
|
32
|
+
static?: string;
|
|
33
|
+
vite?: ViteConfig;
|
|
68
34
|
changeOrigin?: boolean;
|
|
69
35
|
pathRewrite?: Record<string, string>;
|
|
70
36
|
ws?: boolean;
|
|
71
|
-
strategy?: 'round-robin' | 'random' | 'ip-hash';
|
|
72
|
-
options?: RouteOptions;
|
|
73
|
-
cors?: CorsConfig;
|
|
74
|
-
cache?: CacheConfig;
|
|
75
|
-
auth?: AuthConfig;
|
|
76
|
-
healthCheck?: HealthCheckConfig;
|
|
77
|
-
transform?: TransformConfig;
|
|
78
|
-
}
|
|
79
|
-
export interface MiddlewareConfig {
|
|
80
|
-
type: string;
|
|
81
|
-
enabled?: boolean;
|
|
82
|
-
paths?: string[];
|
|
83
|
-
config?: Record<string, any>;
|
|
84
|
-
headerName?: string;
|
|
85
|
-
threshold?: number;
|
|
86
|
-
}
|
|
87
|
-
export interface SslConfig {
|
|
88
|
-
enabled?: boolean;
|
|
89
|
-
key?: string;
|
|
90
|
-
cert?: string;
|
|
91
|
-
ca?: string;
|
|
92
37
|
}
|
|
93
38
|
export interface RevxConfig {
|
|
94
39
|
server: ServerConfig;
|
|
95
40
|
global?: GlobalConfig;
|
|
96
41
|
routes: RouteConfig[];
|
|
97
|
-
middleware?: MiddlewareConfig[];
|
|
98
|
-
ssl?: SslConfig;
|
|
99
42
|
}
|
|
100
43
|
export declare class ConfigLoader {
|
|
101
44
|
private logger;
|