@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.
Files changed (162) hide show
  1. package/lib/index.d.ts +9 -1
  2. package/lib/index.d.ts.map +1 -1
  3. package/lib/index.js +153 -114
  4. package/lib/index.js.map +1 -1
  5. package/lib/plugins/{basename-injection.d.ts → basename.d.ts} +4 -4
  6. package/lib/plugins/basename.d.ts.map +1 -0
  7. package/lib/plugins/{basename-injection.js → basename.js} +7 -15
  8. package/lib/plugins/basename.js.map +1 -0
  9. package/lib/plugins/capabilities.d.ts +9 -6
  10. package/lib/plugins/capabilities.d.ts.map +1 -1
  11. package/lib/plugins/capabilities.js +27 -29
  12. package/lib/plugins/capabilities.js.map +1 -1
  13. package/lib/plugins/dev-proxy.d.ts +41 -0
  14. package/lib/plugins/dev-proxy.d.ts.map +1 -0
  15. package/lib/plugins/dev-proxy.js +229 -0
  16. package/lib/plugins/dev-proxy.js.map +1 -0
  17. package/lib/plugins/fonts-mirror.d.ts.map +1 -1
  18. package/lib/plugins/fonts-mirror.js +28 -0
  19. package/lib/plugins/fonts-mirror.js.map +1 -1
  20. package/lib/plugins/html-output.d.ts +21 -0
  21. package/lib/plugins/html-output.d.ts.map +1 -0
  22. package/lib/plugins/html-output.js +171 -0
  23. package/lib/plugins/html-output.js.map +1 -0
  24. package/lib/plugins/server-log.d.ts +55 -0
  25. package/lib/plugins/server-log.d.ts.map +1 -0
  26. package/lib/plugins/server-log.js +80 -0
  27. package/lib/plugins/server-log.js.map +1 -0
  28. package/lib/plugins/view-context.d.ts +0 -5
  29. package/lib/plugins/view-context.d.ts.map +1 -1
  30. package/lib/plugins/view-context.js +0 -3
  31. package/lib/plugins/view-context.js.map +1 -1
  32. package/lib/server-log/compat.d.ts +36 -0
  33. package/lib/server-log/compat.d.ts.map +1 -0
  34. package/lib/server-log/compat.js +73 -0
  35. package/lib/server-log/compat.js.map +1 -0
  36. package/lib/server-log/dev-logs/api-list-handler.d.ts +6 -0
  37. package/lib/server-log/dev-logs/api-list-handler.d.ts.map +1 -0
  38. package/lib/server-log/dev-logs/api-list-handler.js +132 -0
  39. package/lib/server-log/dev-logs/api-list-handler.js.map +1 -0
  40. package/lib/server-log/dev-logs/controller.d.ts +45 -0
  41. package/lib/server-log/dev-logs/controller.d.ts.map +1 -0
  42. package/lib/server-log/dev-logs/controller.js +239 -0
  43. package/lib/server-log/dev-logs/controller.js.map +1 -0
  44. package/lib/server-log/dev-logs/health.controller.d.ts +15 -0
  45. package/lib/server-log/dev-logs/health.controller.d.ts.map +1 -0
  46. package/lib/server-log/dev-logs/health.controller.js +79 -0
  47. package/lib/server-log/dev-logs/health.controller.js.map +1 -0
  48. package/lib/server-log/dev-logs/helper/path-matcher.d.ts +117 -0
  49. package/lib/server-log/dev-logs/helper/path-matcher.d.ts.map +1 -0
  50. package/lib/server-log/dev-logs/helper/path-matcher.js +214 -0
  51. package/lib/server-log/dev-logs/helper/path-matcher.js.map +1 -0
  52. package/lib/server-log/dev-logs/index.d.ts +12 -0
  53. package/lib/server-log/dev-logs/index.d.ts.map +1 -0
  54. package/lib/server-log/dev-logs/index.js +61 -0
  55. package/lib/server-log/dev-logs/index.js.map +1 -0
  56. package/lib/server-log/dev-logs/router.d.ts +7 -0
  57. package/lib/server-log/dev-logs/router.d.ts.map +1 -0
  58. package/lib/server-log/dev-logs/router.js +40 -0
  59. package/lib/server-log/dev-logs/router.js.map +1 -0
  60. package/lib/server-log/dev-logs/services/capability.service.d.ts +33 -0
  61. package/lib/server-log/dev-logs/services/capability.service.d.ts.map +1 -0
  62. package/lib/server-log/dev-logs/services/capability.service.js +127 -0
  63. package/lib/server-log/dev-logs/services/capability.service.js.map +1 -0
  64. package/lib/server-log/dev-logs/services/file-reader.d.ts +10 -0
  65. package/lib/server-log/dev-logs/services/file-reader.d.ts.map +1 -0
  66. package/lib/server-log/dev-logs/services/file-reader.js +67 -0
  67. package/lib/server-log/dev-logs/services/file-reader.js.map +1 -0
  68. package/lib/server-log/dev-logs/services/index.d.ts +8 -0
  69. package/lib/server-log/dev-logs/services/index.d.ts.map +1 -0
  70. package/lib/server-log/dev-logs/services/index.js +30 -0
  71. package/lib/server-log/dev-logs/services/index.js.map +1 -0
  72. package/lib/server-log/dev-logs/services/parsers.d.ts +23 -0
  73. package/lib/server-log/dev-logs/services/parsers.d.ts.map +1 -0
  74. package/lib/server-log/dev-logs/services/parsers.js +157 -0
  75. package/lib/server-log/dev-logs/services/parsers.js.map +1 -0
  76. package/lib/server-log/dev-logs/services/server-log.service.d.ts +17 -0
  77. package/lib/server-log/dev-logs/services/server-log.service.d.ts.map +1 -0
  78. package/lib/server-log/dev-logs/services/server-log.service.js +119 -0
  79. package/lib/server-log/dev-logs/services/server-log.service.js.map +1 -0
  80. package/lib/server-log/dev-logs/services/trace.service.d.ts +14 -0
  81. package/lib/server-log/dev-logs/services/trace.service.d.ts.map +1 -0
  82. package/lib/server-log/dev-logs/services/trace.service.js +162 -0
  83. package/lib/server-log/dev-logs/services/trace.service.js.map +1 -0
  84. package/lib/server-log/dev-logs/services/trigger.service.d.ts +14 -0
  85. package/lib/server-log/dev-logs/services/trigger.service.d.ts.map +1 -0
  86. package/lib/server-log/dev-logs/services/trigger.service.js +153 -0
  87. package/lib/server-log/dev-logs/services/trigger.service.js.map +1 -0
  88. package/lib/server-log/dev-logs/services.d.ts +7 -0
  89. package/lib/server-log/dev-logs/services.d.ts.map +1 -0
  90. package/lib/server-log/dev-logs/services.js +20 -0
  91. package/lib/server-log/dev-logs/services.js.map +1 -0
  92. package/lib/server-log/dev-logs/sse/client-manager.d.ts +61 -0
  93. package/lib/server-log/dev-logs/sse/client-manager.d.ts.map +1 -0
  94. package/lib/server-log/dev-logs/sse/client-manager.js +140 -0
  95. package/lib/server-log/dev-logs/sse/client-manager.js.map +1 -0
  96. package/lib/server-log/dev-logs/sse/index.d.ts +5 -0
  97. package/lib/server-log/dev-logs/sse/index.d.ts.map +1 -0
  98. package/lib/server-log/dev-logs/sse/index.js +11 -0
  99. package/lib/server-log/dev-logs/sse/index.js.map +1 -0
  100. package/lib/server-log/dev-logs/sse/log-watcher.d.ts +51 -0
  101. package/lib/server-log/dev-logs/sse/log-watcher.d.ts.map +1 -0
  102. package/lib/server-log/dev-logs/sse/log-watcher.js +381 -0
  103. package/lib/server-log/dev-logs/sse/log-watcher.js.map +1 -0
  104. package/lib/server-log/dev-logs/sse/sse.controller.d.ts +25 -0
  105. package/lib/server-log/dev-logs/sse/sse.controller.d.ts.map +1 -0
  106. package/lib/server-log/dev-logs/sse/sse.controller.js +95 -0
  107. package/lib/server-log/dev-logs/sse/sse.controller.js.map +1 -0
  108. package/lib/server-log/dev-logs/types.d.ts +104 -0
  109. package/lib/server-log/dev-logs/types.d.ts.map +1 -0
  110. package/lib/server-log/dev-logs/types.js +3 -0
  111. package/lib/server-log/dev-logs/types.js.map +1 -0
  112. package/lib/server-log/dev-logs/utils.d.ts +68 -0
  113. package/lib/server-log/dev-logs/utils.d.ts.map +1 -0
  114. package/lib/server-log/dev-logs/utils.js +151 -0
  115. package/lib/server-log/dev-logs/utils.js.map +1 -0
  116. package/lib/server-log/openapi/controller.d.ts +7 -0
  117. package/lib/server-log/openapi/controller.d.ts.map +1 -0
  118. package/lib/server-log/openapi/controller.js +60 -0
  119. package/lib/server-log/openapi/controller.js.map +1 -0
  120. package/lib/server-log/openapi/index.d.ts +10 -0
  121. package/lib/server-log/openapi/index.d.ts.map +1 -0
  122. package/lib/server-log/openapi/index.js +48 -0
  123. package/lib/server-log/openapi/index.js.map +1 -0
  124. package/lib/server-log/openapi/router.d.ts +20 -0
  125. package/lib/server-log/openapi/router.d.ts.map +1 -0
  126. package/lib/server-log/openapi/router.js +26 -0
  127. package/lib/server-log/openapi/router.js.map +1 -0
  128. package/lib/server-log/openapi/services.d.ts +15 -0
  129. package/lib/server-log/openapi/services.d.ts.map +1 -0
  130. package/lib/server-log/openapi/services.js +276 -0
  131. package/lib/server-log/openapi/services.js.map +1 -0
  132. package/lib/server-log/openapi/spec-controller.d.ts +4 -0
  133. package/lib/server-log/openapi/spec-controller.d.ts.map +1 -0
  134. package/lib/server-log/openapi/spec-controller.js +136 -0
  135. package/lib/server-log/openapi/spec-controller.js.map +1 -0
  136. package/lib/server-log/openapi/types.d.ts +56 -0
  137. package/lib/server-log/openapi/types.d.ts.map +1 -0
  138. package/lib/server-log/openapi/types.js +3 -0
  139. package/lib/server-log/openapi/types.js.map +1 -0
  140. package/lib/server-log/openapi/utils.d.ts +18 -0
  141. package/lib/server-log/openapi/utils.d.ts.map +1 -0
  142. package/lib/server-log/openapi/utils.js +128 -0
  143. package/lib/server-log/openapi/utils.js.map +1 -0
  144. package/lib/server-log/register.d.ts +34 -0
  145. package/lib/server-log/register.d.ts.map +1 -0
  146. package/lib/server-log/register.js +196 -0
  147. package/lib/server-log/register.js.map +1 -0
  148. package/lib/server-log/types.d.ts +99 -0
  149. package/lib/server-log/types.d.ts.map +1 -0
  150. package/lib/server-log/types.js +3 -0
  151. package/lib/server-log/types.js.map +1 -0
  152. package/lib/utils/local-dev.d.ts +46 -0
  153. package/lib/utils/local-dev.d.ts.map +1 -0
  154. package/lib/utils/local-dev.js +96 -0
  155. package/lib/utils/local-dev.js.map +1 -0
  156. package/lib/utils/proxy-error.d.ts +29 -0
  157. package/lib/utils/proxy-error.d.ts.map +1 -0
  158. package/lib/utils/proxy-error.js +158 -0
  159. package/lib/utils/proxy-error.js.map +1 -0
  160. package/package.json +3 -1
  161. package/lib/plugins/basename-injection.d.ts.map +0 -1
  162. 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,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -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"}