@lark-apaas/coding-preset-vite-react 1.0.13-alpha.0 → 1.0.13-alpha.10
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/lib/index.d.ts +9 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +153 -114
- package/lib/index.js.map +1 -1
- package/lib/plugins/{basename-injection.d.ts → basename.d.ts} +4 -4
- package/lib/plugins/basename.d.ts.map +1 -0
- package/lib/plugins/{basename-injection.js → basename.js} +7 -15
- package/lib/plugins/basename.js.map +1 -0
- package/lib/plugins/capabilities.d.ts +9 -6
- package/lib/plugins/capabilities.d.ts.map +1 -1
- package/lib/plugins/capabilities.js +27 -29
- package/lib/plugins/capabilities.js.map +1 -1
- package/lib/plugins/dev-proxy.d.ts +41 -0
- package/lib/plugins/dev-proxy.d.ts.map +1 -0
- package/lib/plugins/dev-proxy.js +229 -0
- package/lib/plugins/dev-proxy.js.map +1 -0
- package/lib/plugins/fonts-mirror.d.ts.map +1 -1
- package/lib/plugins/fonts-mirror.js +28 -0
- package/lib/plugins/fonts-mirror.js.map +1 -1
- package/lib/plugins/html-output.d.ts +21 -0
- package/lib/plugins/html-output.d.ts.map +1 -0
- package/lib/plugins/html-output.js +171 -0
- package/lib/plugins/html-output.js.map +1 -0
- package/lib/plugins/server-log.d.ts +55 -0
- package/lib/plugins/server-log.d.ts.map +1 -0
- package/lib/plugins/server-log.js +80 -0
- package/lib/plugins/server-log.js.map +1 -0
- package/lib/plugins/view-context.d.ts +0 -5
- package/lib/plugins/view-context.d.ts.map +1 -1
- package/lib/plugins/view-context.js +0 -3
- package/lib/plugins/view-context.js.map +1 -1
- package/lib/server-log/compat.d.ts +36 -0
- package/lib/server-log/compat.d.ts.map +1 -0
- package/lib/server-log/compat.js +73 -0
- package/lib/server-log/compat.js.map +1 -0
- package/lib/server-log/dev-logs/api-list-handler.d.ts +6 -0
- package/lib/server-log/dev-logs/api-list-handler.d.ts.map +1 -0
- package/lib/server-log/dev-logs/api-list-handler.js +132 -0
- package/lib/server-log/dev-logs/api-list-handler.js.map +1 -0
- package/lib/server-log/dev-logs/controller.d.ts +45 -0
- package/lib/server-log/dev-logs/controller.d.ts.map +1 -0
- package/lib/server-log/dev-logs/controller.js +239 -0
- package/lib/server-log/dev-logs/controller.js.map +1 -0
- package/lib/server-log/dev-logs/health.controller.d.ts +15 -0
- package/lib/server-log/dev-logs/health.controller.d.ts.map +1 -0
- package/lib/server-log/dev-logs/health.controller.js +79 -0
- package/lib/server-log/dev-logs/health.controller.js.map +1 -0
- package/lib/server-log/dev-logs/helper/path-matcher.d.ts +117 -0
- package/lib/server-log/dev-logs/helper/path-matcher.d.ts.map +1 -0
- package/lib/server-log/dev-logs/helper/path-matcher.js +214 -0
- package/lib/server-log/dev-logs/helper/path-matcher.js.map +1 -0
- package/lib/server-log/dev-logs/index.d.ts +12 -0
- package/lib/server-log/dev-logs/index.d.ts.map +1 -0
- package/lib/server-log/dev-logs/index.js +61 -0
- package/lib/server-log/dev-logs/index.js.map +1 -0
- package/lib/server-log/dev-logs/router.d.ts +7 -0
- package/lib/server-log/dev-logs/router.d.ts.map +1 -0
- package/lib/server-log/dev-logs/router.js +40 -0
- package/lib/server-log/dev-logs/router.js.map +1 -0
- package/lib/server-log/dev-logs/services/capability.service.d.ts +33 -0
- package/lib/server-log/dev-logs/services/capability.service.d.ts.map +1 -0
- package/lib/server-log/dev-logs/services/capability.service.js +127 -0
- package/lib/server-log/dev-logs/services/capability.service.js.map +1 -0
- package/lib/server-log/dev-logs/services/file-reader.d.ts +10 -0
- package/lib/server-log/dev-logs/services/file-reader.d.ts.map +1 -0
- package/lib/server-log/dev-logs/services/file-reader.js +67 -0
- package/lib/server-log/dev-logs/services/file-reader.js.map +1 -0
- package/lib/server-log/dev-logs/services/index.d.ts +8 -0
- package/lib/server-log/dev-logs/services/index.d.ts.map +1 -0
- package/lib/server-log/dev-logs/services/index.js +30 -0
- package/lib/server-log/dev-logs/services/index.js.map +1 -0
- package/lib/server-log/dev-logs/services/parsers.d.ts +23 -0
- package/lib/server-log/dev-logs/services/parsers.d.ts.map +1 -0
- package/lib/server-log/dev-logs/services/parsers.js +157 -0
- package/lib/server-log/dev-logs/services/parsers.js.map +1 -0
- package/lib/server-log/dev-logs/services/server-log.service.d.ts +17 -0
- package/lib/server-log/dev-logs/services/server-log.service.d.ts.map +1 -0
- package/lib/server-log/dev-logs/services/server-log.service.js +119 -0
- package/lib/server-log/dev-logs/services/server-log.service.js.map +1 -0
- package/lib/server-log/dev-logs/services/trace.service.d.ts +14 -0
- package/lib/server-log/dev-logs/services/trace.service.d.ts.map +1 -0
- package/lib/server-log/dev-logs/services/trace.service.js +162 -0
- package/lib/server-log/dev-logs/services/trace.service.js.map +1 -0
- package/lib/server-log/dev-logs/services/trigger.service.d.ts +14 -0
- package/lib/server-log/dev-logs/services/trigger.service.d.ts.map +1 -0
- package/lib/server-log/dev-logs/services/trigger.service.js +153 -0
- package/lib/server-log/dev-logs/services/trigger.service.js.map +1 -0
- package/lib/server-log/dev-logs/services.d.ts +7 -0
- package/lib/server-log/dev-logs/services.d.ts.map +1 -0
- package/lib/server-log/dev-logs/services.js +20 -0
- package/lib/server-log/dev-logs/services.js.map +1 -0
- package/lib/server-log/dev-logs/sse/client-manager.d.ts +61 -0
- package/lib/server-log/dev-logs/sse/client-manager.d.ts.map +1 -0
- package/lib/server-log/dev-logs/sse/client-manager.js +140 -0
- package/lib/server-log/dev-logs/sse/client-manager.js.map +1 -0
- package/lib/server-log/dev-logs/sse/index.d.ts +5 -0
- package/lib/server-log/dev-logs/sse/index.d.ts.map +1 -0
- package/lib/server-log/dev-logs/sse/index.js +11 -0
- package/lib/server-log/dev-logs/sse/index.js.map +1 -0
- package/lib/server-log/dev-logs/sse/log-watcher.d.ts +51 -0
- package/lib/server-log/dev-logs/sse/log-watcher.d.ts.map +1 -0
- package/lib/server-log/dev-logs/sse/log-watcher.js +381 -0
- package/lib/server-log/dev-logs/sse/log-watcher.js.map +1 -0
- package/lib/server-log/dev-logs/sse/sse.controller.d.ts +25 -0
- package/lib/server-log/dev-logs/sse/sse.controller.d.ts.map +1 -0
- package/lib/server-log/dev-logs/sse/sse.controller.js +95 -0
- package/lib/server-log/dev-logs/sse/sse.controller.js.map +1 -0
- package/lib/server-log/dev-logs/types.d.ts +104 -0
- package/lib/server-log/dev-logs/types.d.ts.map +1 -0
- package/lib/server-log/dev-logs/types.js +3 -0
- package/lib/server-log/dev-logs/types.js.map +1 -0
- package/lib/server-log/dev-logs/utils.d.ts +68 -0
- package/lib/server-log/dev-logs/utils.d.ts.map +1 -0
- package/lib/server-log/dev-logs/utils.js +151 -0
- package/lib/server-log/dev-logs/utils.js.map +1 -0
- package/lib/server-log/openapi/controller.d.ts +7 -0
- package/lib/server-log/openapi/controller.d.ts.map +1 -0
- package/lib/server-log/openapi/controller.js +60 -0
- package/lib/server-log/openapi/controller.js.map +1 -0
- package/lib/server-log/openapi/index.d.ts +10 -0
- package/lib/server-log/openapi/index.d.ts.map +1 -0
- package/lib/server-log/openapi/index.js +48 -0
- package/lib/server-log/openapi/index.js.map +1 -0
- package/lib/server-log/openapi/router.d.ts +20 -0
- package/lib/server-log/openapi/router.d.ts.map +1 -0
- package/lib/server-log/openapi/router.js +26 -0
- package/lib/server-log/openapi/router.js.map +1 -0
- package/lib/server-log/openapi/services.d.ts +15 -0
- package/lib/server-log/openapi/services.d.ts.map +1 -0
- package/lib/server-log/openapi/services.js +276 -0
- package/lib/server-log/openapi/services.js.map +1 -0
- package/lib/server-log/openapi/spec-controller.d.ts +4 -0
- package/lib/server-log/openapi/spec-controller.d.ts.map +1 -0
- package/lib/server-log/openapi/spec-controller.js +136 -0
- package/lib/server-log/openapi/spec-controller.js.map +1 -0
- package/lib/server-log/openapi/types.d.ts +56 -0
- package/lib/server-log/openapi/types.d.ts.map +1 -0
- package/lib/server-log/openapi/types.js +3 -0
- package/lib/server-log/openapi/types.js.map +1 -0
- package/lib/server-log/openapi/utils.d.ts +18 -0
- package/lib/server-log/openapi/utils.d.ts.map +1 -0
- package/lib/server-log/openapi/utils.js +128 -0
- package/lib/server-log/openapi/utils.js.map +1 -0
- package/lib/server-log/register.d.ts +34 -0
- package/lib/server-log/register.d.ts.map +1 -0
- package/lib/server-log/register.js +196 -0
- package/lib/server-log/register.js.map +1 -0
- package/lib/server-log/types.d.ts +99 -0
- package/lib/server-log/types.d.ts.map +1 -0
- package/lib/server-log/types.js +3 -0
- package/lib/server-log/types.js.map +1 -0
- package/lib/utils/local-dev.d.ts +46 -0
- package/lib/utils/local-dev.d.ts.map +1 -0
- package/lib/utils/local-dev.js +96 -0
- package/lib/utils/local-dev.js.map +1 -0
- package/lib/utils/proxy-error.d.ts +29 -0
- package/lib/utils/proxy-error.d.ts.map +1 -0
- package/lib/utils/proxy-error.js +158 -0
- package/lib/utils/proxy-error.js.map +1 -0
- package/package.json +3 -1
- package/lib/plugins/basename-injection.d.ts.map +0 -1
- package/lib/plugins/basename-injection.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/server-log/openapi/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { Middleware, MiddlewareContext, ExpressApp, ViteMiddleware } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Register middlewares for Express-compatible servers or Vite.
|
|
4
|
+
*
|
|
5
|
+
* MUST stay synchronous (no async/await).
|
|
6
|
+
*
|
|
7
|
+
* Why: when called from webpack/rspack-dev-server's `setupMiddlewares` callback,
|
|
8
|
+
* any `await` here yields a microtask, allowing dev-server to finish registering
|
|
9
|
+
* its own built-ins (proxy, historyApiFallback, serveStatic, ...) BEFORE our
|
|
10
|
+
* later iterations run. The first router lands before historyApiFallback while
|
|
11
|
+
* subsequent routers land after — causing extensionless GETs (e.g. `/dev/openapi/spec`
|
|
12
|
+
* with a wildcard Accept header) to be rewritten to `/index.html`. All registered work
|
|
13
|
+
* (`server.use`, `createRouter`, `createHandler`) is sync, so async/await is also
|
|
14
|
+
* unnecessary.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```typescript
|
|
18
|
+
* // In rspack/webpack setupMiddlewares
|
|
19
|
+
* setupMiddlewares: (middlewares, devServer) => {
|
|
20
|
+
* if (devServer.app) {
|
|
21
|
+
* registerMiddlewares(devServer.app, [
|
|
22
|
+
* createDevLogsMiddleware({ logDir: './logs' }),
|
|
23
|
+
* createOpenapiMiddleware({ openapiFilePath: './openapi.json' })
|
|
24
|
+
* ], { basePath: '/api', isDev: true, rootDir: __dirname });
|
|
25
|
+
* }
|
|
26
|
+
* return middlewares;
|
|
27
|
+
* }
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
export declare function registerMiddlewares(server: ExpressApp | ViteMiddleware, middlewares: Middleware[], options?: Partial<MiddlewareContext>): void;
|
|
31
|
+
export type { Middleware, RouteMiddleware, GlobalMiddleware, MiddlewareContext, RouteInfo, } from './types';
|
|
32
|
+
export { createDevLogsMiddleware } from './dev-logs';
|
|
33
|
+
export { sendJson, sendError, sendSuccess, getQuery, getQueryParam } from './compat';
|
|
34
|
+
//# sourceMappingURL=register.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../src/server-log/register.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,UAAU,EAGV,iBAAiB,EACjB,UAAU,EACV,cAAc,EACf,MAAM,SAAS,CAAC;AAmIjB;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,UAAU,GAAG,cAAc,EACnC,WAAW,EAAE,UAAU,EAAE,EACzB,OAAO,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,GACnC,IAAI,CAsDN;AAGD,YAAY,EACV,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,SAAS,GACV,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAErD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC"}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.getQueryParam = exports.getQuery = exports.sendSuccess = exports.sendError = exports.sendJson = exports.createDevLogsMiddleware = void 0;
|
|
7
|
+
exports.registerMiddlewares = registerMiddlewares;
|
|
8
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
9
|
+
/**
|
|
10
|
+
* Enhance Request/Response objects with Express-compatible methods
|
|
11
|
+
* This allows middleware written for Express to work with Vite/Connect
|
|
12
|
+
*/
|
|
13
|
+
function enhanceForCompat(req, res) {
|
|
14
|
+
// Enhance Response with Express-like methods
|
|
15
|
+
if (!res.status) {
|
|
16
|
+
res.status = function (code) {
|
|
17
|
+
res.statusCode = code;
|
|
18
|
+
return res;
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
if (!res.json) {
|
|
22
|
+
res.json = function (data) {
|
|
23
|
+
res.setHeader('Content-Type', 'application/json');
|
|
24
|
+
res.end(JSON.stringify(data));
|
|
25
|
+
return res;
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
if (!res.send) {
|
|
29
|
+
res.send = function (data) {
|
|
30
|
+
if (typeof data === 'object' && data !== null) {
|
|
31
|
+
res.setHeader('Content-Type', 'application/json');
|
|
32
|
+
res.end(JSON.stringify(data));
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
res.end(String(data));
|
|
36
|
+
}
|
|
37
|
+
return res;
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
// Enhance Request with parsed query
|
|
41
|
+
if (!req.query) {
|
|
42
|
+
const url = new URL(req.url || '', `http://${req.headers.host || 'localhost'}`);
|
|
43
|
+
req.query = Object.fromEntries(url.searchParams.entries());
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Detect if the server is a Connect/Vite middleware server (not Express)
|
|
48
|
+
* Connect servers don't have Express-specific methods like 'set' or 'engine'
|
|
49
|
+
*/
|
|
50
|
+
function isConnectServer(server) {
|
|
51
|
+
return (typeof server === 'function' &&
|
|
52
|
+
!('set' in server) &&
|
|
53
|
+
!('engine' in server));
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Type guard to check if middleware is route-based
|
|
57
|
+
*/
|
|
58
|
+
function isRouteMiddleware(middleware) {
|
|
59
|
+
return 'createRouter' in middleware && middleware.createRouter !== undefined;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Type guard to check if middleware is global
|
|
63
|
+
*/
|
|
64
|
+
function isGlobalMiddleware(middleware) {
|
|
65
|
+
return 'createHandler' in middleware && middleware.createHandler !== undefined;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Compute the full mount path by combining basePath and middleware mountPath
|
|
69
|
+
*/
|
|
70
|
+
function computeMountPath(basePath, mountPath) {
|
|
71
|
+
const routePath = node_path_1.default.posix.join(basePath, mountPath);
|
|
72
|
+
return routePath.startsWith('/') ? routePath : `/${routePath}`;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Log middleware registration with routes info
|
|
76
|
+
*/
|
|
77
|
+
function logMiddlewareRegistration(middleware, fullMountPath) {
|
|
78
|
+
if (middleware.routes && middleware.routes.length > 0) {
|
|
79
|
+
console.log(`[Middleware] Registered: ${middleware.name} at ${fullMountPath}`);
|
|
80
|
+
middleware.routes.forEach((route) => {
|
|
81
|
+
const routePath = route.path === '/' ? fullMountPath : node_path_1.default.posix.join(fullMountPath, route.path);
|
|
82
|
+
console.log(` ${route.method} ${routePath} - ${route.description}`);
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
console.log(`[Middleware] Registered: ${middleware.name} at ${fullMountPath}`);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
// MUST stay synchronous. See note on `registerMiddlewares` below.
|
|
90
|
+
function registerRouteMiddleware(server, middleware, context) {
|
|
91
|
+
if (!middleware.mountPath) {
|
|
92
|
+
console.error(`[Middleware] ${middleware.name}: Route middleware must have mountPath. Skipping.`);
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
const router = middleware.createRouter(context);
|
|
96
|
+
const fullMountPath = computeMountPath(context.basePath, middleware.mountPath);
|
|
97
|
+
server.use(fullMountPath, router);
|
|
98
|
+
logMiddlewareRegistration(middleware, fullMountPath);
|
|
99
|
+
}
|
|
100
|
+
// MUST stay synchronous. See note on `registerMiddlewares` below.
|
|
101
|
+
function registerGlobalMiddleware(server, middleware, context) {
|
|
102
|
+
if (middleware.mountPath) {
|
|
103
|
+
console.warn(`[Middleware] ${middleware.name}: Global middleware should not have mountPath. ` +
|
|
104
|
+
`Ignoring mountPath "${middleware.mountPath}".`);
|
|
105
|
+
}
|
|
106
|
+
const handler = middleware.createHandler(context);
|
|
107
|
+
server.use(handler);
|
|
108
|
+
console.log(`[Middleware] Registered global: ${middleware.name}`);
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Register middlewares for Express-compatible servers or Vite.
|
|
112
|
+
*
|
|
113
|
+
* MUST stay synchronous (no async/await).
|
|
114
|
+
*
|
|
115
|
+
* Why: when called from webpack/rspack-dev-server's `setupMiddlewares` callback,
|
|
116
|
+
* any `await` here yields a microtask, allowing dev-server to finish registering
|
|
117
|
+
* its own built-ins (proxy, historyApiFallback, serveStatic, ...) BEFORE our
|
|
118
|
+
* later iterations run. The first router lands before historyApiFallback while
|
|
119
|
+
* subsequent routers land after — causing extensionless GETs (e.g. `/dev/openapi/spec`
|
|
120
|
+
* with a wildcard Accept header) to be rewritten to `/index.html`. All registered work
|
|
121
|
+
* (`server.use`, `createRouter`, `createHandler`) is sync, so async/await is also
|
|
122
|
+
* unnecessary.
|
|
123
|
+
*
|
|
124
|
+
* @example
|
|
125
|
+
* ```typescript
|
|
126
|
+
* // In rspack/webpack setupMiddlewares
|
|
127
|
+
* setupMiddlewares: (middlewares, devServer) => {
|
|
128
|
+
* if (devServer.app) {
|
|
129
|
+
* registerMiddlewares(devServer.app, [
|
|
130
|
+
* createDevLogsMiddleware({ logDir: './logs' }),
|
|
131
|
+
* createOpenapiMiddleware({ openapiFilePath: './openapi.json' })
|
|
132
|
+
* ], { basePath: '/api', isDev: true, rootDir: __dirname });
|
|
133
|
+
* }
|
|
134
|
+
* return middlewares;
|
|
135
|
+
* }
|
|
136
|
+
* ```
|
|
137
|
+
*/
|
|
138
|
+
function registerMiddlewares(server, middlewares, options) {
|
|
139
|
+
// Build context with defaults
|
|
140
|
+
const context = {
|
|
141
|
+
basePath: '/',
|
|
142
|
+
isDev: process.env.NODE_ENV !== 'production',
|
|
143
|
+
rootDir: process.cwd(),
|
|
144
|
+
...options,
|
|
145
|
+
};
|
|
146
|
+
// If running in Connect/Vite environment, register compatibility middleware first
|
|
147
|
+
// This adds Express-like methods (res.status, res.json, req.query) to the request/response
|
|
148
|
+
if (isConnectServer(server)) {
|
|
149
|
+
server.use((req, res, next) => {
|
|
150
|
+
enhanceForCompat(req, res);
|
|
151
|
+
next();
|
|
152
|
+
});
|
|
153
|
+
console.log('[Middleware] Registered Express compatibility layer for Connect/Vite');
|
|
154
|
+
}
|
|
155
|
+
// 合并默认中间件和用户提供的中间件
|
|
156
|
+
const allMiddlewares = [...middlewares];
|
|
157
|
+
for (const middleware of allMiddlewares) {
|
|
158
|
+
// Check if middleware should be enabled
|
|
159
|
+
if (middleware.enabled && !middleware.enabled(context)) {
|
|
160
|
+
continue;
|
|
161
|
+
}
|
|
162
|
+
try {
|
|
163
|
+
// Check if both createRouter and createHandler are provided (type-unsafe case)
|
|
164
|
+
const hasCreateRouter = 'createRouter' in middleware && typeof middleware.createRouter === 'function';
|
|
165
|
+
const hasCreateHandler = 'createHandler' in middleware && typeof middleware.createHandler === 'function';
|
|
166
|
+
if (hasCreateRouter && hasCreateHandler) {
|
|
167
|
+
console.warn(`[Middleware] ${middleware.name}: Both createRouter and createHandler provided. ` +
|
|
168
|
+
`Using createRouter and ignoring createHandler.`);
|
|
169
|
+
}
|
|
170
|
+
if (isRouteMiddleware(middleware)) {
|
|
171
|
+
registerRouteMiddleware(server, middleware, context);
|
|
172
|
+
}
|
|
173
|
+
else if (isGlobalMiddleware(middleware)) {
|
|
174
|
+
registerGlobalMiddleware(server, middleware, context);
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
// Type-unsafe middleware that has neither createRouter nor createHandler
|
|
178
|
+
console.error(`[Middleware] ${middleware.name || 'unknown'}: Must provide either createRouter or createHandler.`);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
catch (error) {
|
|
182
|
+
console.error(`[Middleware] Failed to register ${middleware.name}:`, error);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
// openapi / collect-logs middleware 没搬过来 (preset 用不到), 只保留 dev-logs
|
|
187
|
+
var dev_logs_1 = require("./dev-logs");
|
|
188
|
+
Object.defineProperty(exports, "createDevLogsMiddleware", { enumerable: true, get: function () { return dev_logs_1.createDevLogsMiddleware; } });
|
|
189
|
+
// Export compat utilities for controllers that want to explicitly use them
|
|
190
|
+
var compat_1 = require("./compat");
|
|
191
|
+
Object.defineProperty(exports, "sendJson", { enumerable: true, get: function () { return compat_1.sendJson; } });
|
|
192
|
+
Object.defineProperty(exports, "sendError", { enumerable: true, get: function () { return compat_1.sendError; } });
|
|
193
|
+
Object.defineProperty(exports, "sendSuccess", { enumerable: true, get: function () { return compat_1.sendSuccess; } });
|
|
194
|
+
Object.defineProperty(exports, "getQuery", { enumerable: true, get: function () { return compat_1.getQuery; } });
|
|
195
|
+
Object.defineProperty(exports, "getQueryParam", { enumerable: true, get: function () { return compat_1.getQueryParam; } });
|
|
196
|
+
//# sourceMappingURL=register.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register.js","sourceRoot":"","sources":["../../src/server-log/register.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import type { Application, Router, RequestHandler } from 'express';
|
|
2
|
+
/**
|
|
3
|
+
* Shared context passed to all middlewares
|
|
4
|
+
*/
|
|
5
|
+
export interface MiddlewareContext {
|
|
6
|
+
/** Base path for the application (e.g., '/', '/app') */
|
|
7
|
+
basePath: string;
|
|
8
|
+
/** Whether running in development mode */
|
|
9
|
+
isDev: boolean;
|
|
10
|
+
/** Root directory of the project */
|
|
11
|
+
rootDir: string;
|
|
12
|
+
/** Additional custom options */
|
|
13
|
+
[key: string]: any;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Express-compatible app (rspack/webpack dev server)
|
|
17
|
+
*/
|
|
18
|
+
export type ExpressApp = Application;
|
|
19
|
+
/**
|
|
20
|
+
* Vite-compatible middleware handler (Connect server)
|
|
21
|
+
* Using 'any' to avoid dependency on vite types
|
|
22
|
+
*/
|
|
23
|
+
export type ViteMiddleware = any;
|
|
24
|
+
/**
|
|
25
|
+
* Route registration info for better visibility
|
|
26
|
+
*/
|
|
27
|
+
export interface RouteInfo {
|
|
28
|
+
/** HTTP method (GET, POST, etc.) or '*' for all methods */
|
|
29
|
+
method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' | 'ALL' | '*';
|
|
30
|
+
/** Route path (relative to mount point) */
|
|
31
|
+
path: string;
|
|
32
|
+
/** Description of what this route does */
|
|
33
|
+
description: string;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Route-based middleware
|
|
37
|
+
* Mounts a router at a specific path
|
|
38
|
+
*/
|
|
39
|
+
export interface RouteMiddleware {
|
|
40
|
+
/** Unique name for this middleware */
|
|
41
|
+
name: string;
|
|
42
|
+
/**
|
|
43
|
+
* Mount path for this middleware (relative to basePath)
|
|
44
|
+
* e.g., '/dev/logs', '/openapi.json'
|
|
45
|
+
* Required for route-based middlewares
|
|
46
|
+
*/
|
|
47
|
+
mountPath: string;
|
|
48
|
+
/**
|
|
49
|
+
* List of routes provided by this middleware
|
|
50
|
+
* Useful for debugging and documentation
|
|
51
|
+
*/
|
|
52
|
+
routes?: RouteInfo[];
|
|
53
|
+
/**
|
|
54
|
+
* Determine if this middleware should be enabled
|
|
55
|
+
* @param context - Shared context
|
|
56
|
+
* @returns true if middleware should be registered
|
|
57
|
+
*/
|
|
58
|
+
enabled?: (context: MiddlewareContext) => boolean;
|
|
59
|
+
/**
|
|
60
|
+
* Create router for this middleware
|
|
61
|
+
* @param context - Shared context
|
|
62
|
+
* @returns Express Router
|
|
63
|
+
*/
|
|
64
|
+
createRouter: (context: MiddlewareContext) => Router;
|
|
65
|
+
/** Explicitly disallow createHandler for route middleware */
|
|
66
|
+
createHandler?: never;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Global middleware
|
|
70
|
+
* Applies to all requests without a specific mount path
|
|
71
|
+
*/
|
|
72
|
+
export interface GlobalMiddleware {
|
|
73
|
+
/** Unique name for this middleware */
|
|
74
|
+
name: string;
|
|
75
|
+
/**
|
|
76
|
+
* Global middlewares should not have a mount path
|
|
77
|
+
* If you need path-specific behavior, use RouteMiddleware instead
|
|
78
|
+
*/
|
|
79
|
+
mountPath?: never;
|
|
80
|
+
/**
|
|
81
|
+
* Determine if this middleware should be enabled
|
|
82
|
+
* @param context - Shared context
|
|
83
|
+
* @returns true if middleware should be registered
|
|
84
|
+
*/
|
|
85
|
+
enabled?: (context: MiddlewareContext) => boolean;
|
|
86
|
+
/**
|
|
87
|
+
* Create handler for this middleware
|
|
88
|
+
* @param context - Shared context
|
|
89
|
+
* @returns Express request handler
|
|
90
|
+
*/
|
|
91
|
+
createHandler: (context: MiddlewareContext) => RequestHandler;
|
|
92
|
+
/** Explicitly disallow createRouter for global middleware */
|
|
93
|
+
createRouter?: never;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Middleware can be either route-based or global
|
|
97
|
+
*/
|
|
98
|
+
export type Middleware = RouteMiddleware | GlobalMiddleware;
|
|
99
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/server-log/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEnE;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,wDAAwD;IACxD,QAAQ,EAAE,MAAM,CAAC;IACjB,0CAA0C;IAC1C,KAAK,EAAE,OAAO,CAAC;IACf,oCAAoC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,gCAAgC;IAChC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,WAAW,CAAC;AAErC;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG,GAAG,CAAC;AAEjC;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,2DAA2D;IAC3D,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,GAAG,KAAK,GAAG,GAAG,CAAC;IAClE,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,0CAA0C;IAC1C,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,sCAAsC;IACtC,IAAI,EAAE,MAAM,CAAC;IAEb;;;;OAIG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC;IAErB;;;;OAIG;IACH,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,OAAO,CAAC;IAElD;;;;OAIG;IACH,YAAY,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,MAAM,CAAC;IAErD,6DAA6D;IAC7D,aAAa,CAAC,EAAE,KAAK,CAAC;CACvB;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,sCAAsC;IACtC,IAAI,EAAE,MAAM,CAAC;IAEb;;;OAGG;IACH,SAAS,CAAC,EAAE,KAAK,CAAC;IAElB;;;;OAIG;IACH,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,OAAO,CAAC;IAElD;;;;OAIG;IACH,aAAa,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,cAAc,CAAC;IAE9D,6DAA6D;IAC7D,YAAY,CAAC,EAAE,KAAK,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,eAAe,GAAG,gBAAgB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/server-log/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 本地开发总开关。
|
|
3
|
+
*
|
|
4
|
+
* 由 `dev-local.sh`(平台 CLI `miaoda app sync` 同步到项目)export `MIAODA_LOCAL_DEV=1`。
|
|
5
|
+
* 沙箱 dev / 生产都不设此 env,所以本地专属逻辑(view-context 占位填充、__runtime__ 反代沙箱)
|
|
6
|
+
* 只在用户本机 `npm run dev:local` 时启用,沙箱 / 生产行为完全不受影响。
|
|
7
|
+
*/
|
|
8
|
+
export declare function isLocalDev(): boolean;
|
|
9
|
+
/**
|
|
10
|
+
* 反代沙箱时的认证组装。两条入口:
|
|
11
|
+
* - 新流(推荐):env `FORCE_AUTHN_PREVIEW_SESSION_ID` —— 后端下发的单值 session(实际是
|
|
12
|
+
* X-Force-Runtime-Session 的值)。SDK 自动拼 cookie,suda-csrf-token 用本地常量。
|
|
13
|
+
* - 老流(兼容):env `SANDBOX_COOKIE` —— 用户从浏览器手抠的完整 cookie 字符串(包含
|
|
14
|
+
* X-Force-Runtime-Session / suda-csrf-token / suda_web_did 等)。原样透传,suda-csrf-token
|
|
15
|
+
* 从其中正则提取作为出向 x-suda-csrf-token header。
|
|
16
|
+
*
|
|
17
|
+
* 两个都给的话 `SANDBOX_COOKIE` 优先("已显式拼好"信号更强)。两个都缺的话返回空字符串
|
|
18
|
+
* (local dev 跑不通,但不抛错——交给上层 `localDev && sandboxBase` 条件兜底)。
|
|
19
|
+
*/
|
|
20
|
+
export declare function composeSandboxOutboundAuth(): {
|
|
21
|
+
cookie: string;
|
|
22
|
+
csrfToken: string;
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* 解析沙箱反代的 target origin。两条入口:
|
|
26
|
+
* - 新流(推荐):env `MIAODA_DEV_PLATFORM_BASE` —— 后端下发的完整 URL,**可能带路径前缀**
|
|
27
|
+
* (例如 `https://ai-tenant-<app>-<sandbox>.aiforce-boe-preview.bytedance.net/app/<app>`)。
|
|
28
|
+
* SDK 抽 `new URL(...).origin` 拿 host,扔掉路径——避免反代 target 双前缀。
|
|
29
|
+
* - 老流(兼容):env `SANDBOX_COOKIE` 配套用的 `SANDBOX_PUBLIC_URL`(用户从沙箱信息手抠 host)。
|
|
30
|
+
*
|
|
31
|
+
* 两个都给的话 `MIAODA_DEV_PLATFORM_BASE` 优先。两个都缺的话返回空字符串
|
|
32
|
+
* (local dev 跑不通,但不抛错——交给上层 `localDev && sandboxBase` 条件兜底)。
|
|
33
|
+
*/
|
|
34
|
+
export declare function resolveSandboxOrigin(): string;
|
|
35
|
+
/**
|
|
36
|
+
* 解析 `process.env.SUDA_WEBUSER`,容忍沙箱下发的 shell-quoted JSON。
|
|
37
|
+
*
|
|
38
|
+
* 沙箱 env pull 下发到 .env.local 的 SUDA_WEBUSER 是双引号包裹 + 内部 `\"` 转义;
|
|
39
|
+
* dotenv@17 剥外层引号后**不还原**内部 `\"`,导致 `process.env.SUDA_WEBUSER` 是
|
|
40
|
+
* `{\"user_id\":\"...\"}` 这种带反斜杠的字符串,直接 JSON.parse 会挂在
|
|
41
|
+
* `Expected property name or '}' in JSON at position 1`。
|
|
42
|
+
*
|
|
43
|
+
* 容错:先直接 parse;失败再 unescape `\"` 后 parse;都失败返回 null。
|
|
44
|
+
*/
|
|
45
|
+
export declare function parseSudaWebUserEnv<T = unknown>(raw: string | undefined): T | null;
|
|
46
|
+
//# sourceMappingURL=local-dev.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-dev.d.ts","sourceRoot":"","sources":["../../src/utils/local-dev.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,wBAAgB,UAAU,IAAI,OAAO,CAIpC;AAKD;;;;;;;;;;GAUG;AACH,wBAAgB,0BAA0B,IAAI;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAclF;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAU7C;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,CAAC,GAAG,IAAI,CAYlF"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isLocalDev = isLocalDev;
|
|
4
|
+
exports.composeSandboxOutboundAuth = composeSandboxOutboundAuth;
|
|
5
|
+
exports.resolveSandboxOrigin = resolveSandboxOrigin;
|
|
6
|
+
exports.parseSudaWebUserEnv = parseSudaWebUserEnv;
|
|
7
|
+
/**
|
|
8
|
+
* 本地开发总开关。
|
|
9
|
+
*
|
|
10
|
+
* 由 `dev-local.sh`(平台 CLI `miaoda app sync` 同步到项目)export `MIAODA_LOCAL_DEV=1`。
|
|
11
|
+
* 沙箱 dev / 生产都不设此 env,所以本地专属逻辑(view-context 占位填充、__runtime__ 反代沙箱)
|
|
12
|
+
* 只在用户本机 `npm run dev:local` 时启用,沙箱 / 生产行为完全不受影响。
|
|
13
|
+
*/
|
|
14
|
+
function isLocalDev() {
|
|
15
|
+
if (process.env.NODE_ENV === 'production')
|
|
16
|
+
return false;
|
|
17
|
+
const flag = process.env.MIAODA_LOCAL_DEV;
|
|
18
|
+
return flag === '1' || flag === 'true';
|
|
19
|
+
}
|
|
20
|
+
/** 本地常量 csrf token —— sandbox 是 double-submit 模式(cookie===header 即放行),本地随便定一个一致值即可。 */
|
|
21
|
+
const LOCAL_CSRF_TOKEN = 'local-dev-csrf';
|
|
22
|
+
/**
|
|
23
|
+
* 反代沙箱时的认证组装。两条入口:
|
|
24
|
+
* - 新流(推荐):env `FORCE_AUTHN_PREVIEW_SESSION_ID` —— 后端下发的单值 session(实际是
|
|
25
|
+
* X-Force-Runtime-Session 的值)。SDK 自动拼 cookie,suda-csrf-token 用本地常量。
|
|
26
|
+
* - 老流(兼容):env `SANDBOX_COOKIE` —— 用户从浏览器手抠的完整 cookie 字符串(包含
|
|
27
|
+
* X-Force-Runtime-Session / suda-csrf-token / suda_web_did 等)。原样透传,suda-csrf-token
|
|
28
|
+
* 从其中正则提取作为出向 x-suda-csrf-token header。
|
|
29
|
+
*
|
|
30
|
+
* 两个都给的话 `SANDBOX_COOKIE` 优先("已显式拼好"信号更强)。两个都缺的话返回空字符串
|
|
31
|
+
* (local dev 跑不通,但不抛错——交给上层 `localDev && sandboxBase` 条件兜底)。
|
|
32
|
+
*/
|
|
33
|
+
function composeSandboxOutboundAuth() {
|
|
34
|
+
const legacyCookie = process.env.SANDBOX_COOKIE;
|
|
35
|
+
if (legacyCookie) {
|
|
36
|
+
const m = legacyCookie.match(/(?:^|;\s*)suda-csrf-token=([^;]+)/i);
|
|
37
|
+
return { cookie: legacyCookie, csrfToken: m ? m[1] : '' };
|
|
38
|
+
}
|
|
39
|
+
const sessionId = process.env.FORCE_AUTHN_PREVIEW_SESSION_ID;
|
|
40
|
+
if (sessionId) {
|
|
41
|
+
return {
|
|
42
|
+
cookie: `X-Force-Runtime-Session=${sessionId}; suda-csrf-token=${LOCAL_CSRF_TOKEN}`,
|
|
43
|
+
csrfToken: LOCAL_CSRF_TOKEN,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
return { cookie: '', csrfToken: '' };
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* 解析沙箱反代的 target origin。两条入口:
|
|
50
|
+
* - 新流(推荐):env `MIAODA_DEV_PLATFORM_BASE` —— 后端下发的完整 URL,**可能带路径前缀**
|
|
51
|
+
* (例如 `https://ai-tenant-<app>-<sandbox>.aiforce-boe-preview.bytedance.net/app/<app>`)。
|
|
52
|
+
* SDK 抽 `new URL(...).origin` 拿 host,扔掉路径——避免反代 target 双前缀。
|
|
53
|
+
* - 老流(兼容):env `SANDBOX_COOKIE` 配套用的 `SANDBOX_PUBLIC_URL`(用户从沙箱信息手抠 host)。
|
|
54
|
+
*
|
|
55
|
+
* 两个都给的话 `MIAODA_DEV_PLATFORM_BASE` 优先。两个都缺的话返回空字符串
|
|
56
|
+
* (local dev 跑不通,但不抛错——交给上层 `localDev && sandboxBase` 条件兜底)。
|
|
57
|
+
*/
|
|
58
|
+
function resolveSandboxOrigin() {
|
|
59
|
+
const platformBase = process.env.MIAODA_DEV_PLATFORM_BASE;
|
|
60
|
+
if (platformBase) {
|
|
61
|
+
try {
|
|
62
|
+
return new URL(platformBase).origin;
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
// 非合法 URL → 回落到 legacy
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return process.env.SANDBOX_PUBLIC_URL || '';
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* 解析 `process.env.SUDA_WEBUSER`,容忍沙箱下发的 shell-quoted JSON。
|
|
72
|
+
*
|
|
73
|
+
* 沙箱 env pull 下发到 .env.local 的 SUDA_WEBUSER 是双引号包裹 + 内部 `\"` 转义;
|
|
74
|
+
* dotenv@17 剥外层引号后**不还原**内部 `\"`,导致 `process.env.SUDA_WEBUSER` 是
|
|
75
|
+
* `{\"user_id\":\"...\"}` 这种带反斜杠的字符串,直接 JSON.parse 会挂在
|
|
76
|
+
* `Expected property name or '}' in JSON at position 1`。
|
|
77
|
+
*
|
|
78
|
+
* 容错:先直接 parse;失败再 unescape `\"` 后 parse;都失败返回 null。
|
|
79
|
+
*/
|
|
80
|
+
function parseSudaWebUserEnv(raw) {
|
|
81
|
+
if (!raw)
|
|
82
|
+
return null;
|
|
83
|
+
try {
|
|
84
|
+
return JSON.parse(raw);
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
// fall through to unescape attempt
|
|
88
|
+
}
|
|
89
|
+
try {
|
|
90
|
+
return JSON.parse(raw.replace(/\\"/g, '"'));
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=local-dev.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-dev.js","sourceRoot":"","sources":["../../src/utils/local-dev.ts"],"names":[],"mappings":";;AAOA,gCAIC;AAgBD,gEAcC;AAYD,oDAUC;AAYD,kDAYC;AAvFD;;;;;;GAMG;AACH,SAAgB,UAAU;IACxB,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY;QAAE,OAAO,KAAK,CAAC;IACxD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;IAC1C,OAAO,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,MAAM,CAAC;AACzC,CAAC;AAED,uFAAuF;AACvF,MAAM,gBAAgB,GAAG,gBAAgB,CAAC;AAE1C;;;;;;;;;;GAUG;AACH,SAAgB,0BAA0B;IACxC,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IAChD,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACnE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IAC5D,CAAC;IACD,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC;IAC7D,IAAI,SAAS,EAAE,CAAC;QACd,OAAO;YACL,MAAM,EAAE,2BAA2B,SAAS,qBAAqB,gBAAgB,EAAE;YACnF,SAAS,EAAE,gBAAgB;SAC5B,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;AACvC,CAAC;AAED;;;;;;;;;GASG;AACH,SAAgB,oBAAoB;IAClC,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;IAC1D,IAAI,YAAY,EAAE,CAAC;QACjB,IAAI,CAAC;YACH,OAAO,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC;QACtC,CAAC;QAAC,MAAM,CAAC;YACP,uBAAuB;QACzB,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,EAAE,CAAC;AAC9C,CAAC;AAED;;;;;;;;;GASG;AACH,SAAgB,mBAAmB,CAAc,GAAuB;IACtE,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAM,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,mCAAmC;IACrC,CAAC;IACD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAM,CAAC;IACnD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dev server proxy 错误处理 —— nest hot reload 友好的等待 + 重试 + 重定向。
|
|
3
|
+
*
|
|
4
|
+
* 场景:fullstack 形态下 vite (8080) proxy 转发到 nest (3000)。user 改 server 代码
|
|
5
|
+
* 时 nest --watch 重新编译 + 重启,1~3 秒窗口期内 nest 没在 listen,vite proxy 收到
|
|
6
|
+
* ECONNREFUSED → 之前直接给浏览器抛 502 JSON("Backend service is not running"),
|
|
7
|
+
* user 看到黑屏。
|
|
8
|
+
*
|
|
9
|
+
* 实现搬自 `@lark-apaas/fullstack-toolkits` 的 handleDevProxyError (内联避免新跨包
|
|
10
|
+
* 依赖)。逻辑跟 fullstack-vite-preset 老版本保持一致。
|
|
11
|
+
*
|
|
12
|
+
* 处理策略:
|
|
13
|
+
* 1. **连接错误**(ECONNREFUSED / ECONNRESET / ETIMEDOUT / ENOTFOUND / ENETUNREACH)
|
|
14
|
+
* → 服务可能在热重启,轮询 nest / 最多等 retryTimeout 毫秒
|
|
15
|
+
* → 恢复了 sendRedirect 302 让浏览器重发原请求(无感)
|
|
16
|
+
* → 超时仍未恢复才回 502
|
|
17
|
+
* 2. **其他错误**(socket hang up / 协议错等)→ 立即 502,没必要等
|
|
18
|
+
*/
|
|
19
|
+
import type { IncomingMessage, ServerResponse } from 'node:http';
|
|
20
|
+
export interface ProxyErrorOptions {
|
|
21
|
+
/** 等待服务重启的超时时间(毫秒),默认 5000ms */
|
|
22
|
+
retryTimeout?: number;
|
|
23
|
+
/** 轮询检查服务的间隔时间(毫秒),默认 500ms */
|
|
24
|
+
retryInterval?: number;
|
|
25
|
+
/** 目标服务器地址,用于检查服务是否恢复,格式:http://localhost:3000 */
|
|
26
|
+
target?: string;
|
|
27
|
+
}
|
|
28
|
+
export declare function handleDevProxyError(err: Error, req: IncomingMessage, res: ServerResponse, options?: ProxyErrorOptions): void;
|
|
29
|
+
//# sourceMappingURL=proxy-error.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proxy-error.d.ts","sourceRoot":"","sources":["../../src/utils/proxy-error.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEjE,MAAM,WAAW,iBAAiB;IAChC,gCAAgC;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+BAA+B;IAC/B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kDAAkD;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAqFD,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,KAAK,EACV,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,IAAI,CAmCN"}
|