@lark-apaas/devtool-kits 0.1.0-alpha.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/LICENSE +13 -0
- package/README.md +313 -0
- package/dist/index.cjs +29557 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +179 -0
- package/dist/index.d.ts +179 -0
- package/dist/index.js +29545 -0
- package/dist/index.js.map +1 -0
- package/package.json +54 -0
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import { Router, RequestHandler, Application } from 'express';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* 标准化基础路径,确保以 '/' 开头且不包含 trailing slash
|
|
5
|
+
* @param basePath 原始基础路径
|
|
6
|
+
* @returns 标准化后的基础路径
|
|
7
|
+
*/
|
|
8
|
+
declare function normalizeBasePath(basePath: string): string;
|
|
9
|
+
|
|
10
|
+
type PostprocessStats = {
|
|
11
|
+
replacedUnknown: number;
|
|
12
|
+
unmatchedUnknown: string[];
|
|
13
|
+
};
|
|
14
|
+
declare function postprocessDrizzleSchema(targetPath: string): PostprocessStats | undefined;
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Shared context passed to all middlewares
|
|
18
|
+
*/
|
|
19
|
+
interface MiddlewareContext {
|
|
20
|
+
/** Base path for the application (e.g., '/', '/app') */
|
|
21
|
+
basePath: string;
|
|
22
|
+
/** Whether running in development mode */
|
|
23
|
+
isDev: boolean;
|
|
24
|
+
/** Root directory of the project */
|
|
25
|
+
rootDir: string;
|
|
26
|
+
/** Additional custom options */
|
|
27
|
+
[key: string]: any;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Express-compatible app (rspack/webpack dev server)
|
|
31
|
+
*/
|
|
32
|
+
type ExpressApp = Application;
|
|
33
|
+
/**
|
|
34
|
+
* Vite-compatible middleware handler (Connect server)
|
|
35
|
+
* Using 'any' to avoid dependency on vite types
|
|
36
|
+
*/
|
|
37
|
+
type ViteMiddleware = any;
|
|
38
|
+
/**
|
|
39
|
+
* Route registration info for better visibility
|
|
40
|
+
*/
|
|
41
|
+
interface RouteInfo {
|
|
42
|
+
/** HTTP method (GET, POST, etc.) or '*' for all methods */
|
|
43
|
+
method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' | 'ALL' | '*';
|
|
44
|
+
/** Route path (relative to mount point) */
|
|
45
|
+
path: string;
|
|
46
|
+
/** Description of what this route does */
|
|
47
|
+
description: string;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Route-based middleware
|
|
51
|
+
* Mounts a router at a specific path
|
|
52
|
+
*/
|
|
53
|
+
interface RouteMiddleware {
|
|
54
|
+
/** Unique name for this middleware */
|
|
55
|
+
name: string;
|
|
56
|
+
/**
|
|
57
|
+
* Mount path for this middleware (relative to basePath)
|
|
58
|
+
* e.g., '/dev/logs', '/openapi.json'
|
|
59
|
+
* Required for route-based middlewares
|
|
60
|
+
*/
|
|
61
|
+
mountPath: string;
|
|
62
|
+
/**
|
|
63
|
+
* List of routes provided by this middleware
|
|
64
|
+
* Useful for debugging and documentation
|
|
65
|
+
*/
|
|
66
|
+
routes?: RouteInfo[];
|
|
67
|
+
/**
|
|
68
|
+
* Determine if this middleware should be enabled
|
|
69
|
+
* @param context - Shared context
|
|
70
|
+
* @returns true if middleware should be registered
|
|
71
|
+
*/
|
|
72
|
+
enabled?: (context: MiddlewareContext) => boolean;
|
|
73
|
+
/**
|
|
74
|
+
* Create router for this middleware
|
|
75
|
+
* @param context - Shared context
|
|
76
|
+
* @returns Express Router
|
|
77
|
+
*/
|
|
78
|
+
createRouter: (context: MiddlewareContext) => Router;
|
|
79
|
+
/** Explicitly disallow createHandler for route middleware */
|
|
80
|
+
createHandler?: never;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Global middleware
|
|
84
|
+
* Applies to all requests without a specific mount path
|
|
85
|
+
*/
|
|
86
|
+
interface GlobalMiddleware {
|
|
87
|
+
/** Unique name for this middleware */
|
|
88
|
+
name: string;
|
|
89
|
+
/**
|
|
90
|
+
* Global middlewares should not have a mount path
|
|
91
|
+
* If you need path-specific behavior, use RouteMiddleware instead
|
|
92
|
+
*/
|
|
93
|
+
mountPath?: never;
|
|
94
|
+
/**
|
|
95
|
+
* Determine if this middleware should be enabled
|
|
96
|
+
* @param context - Shared context
|
|
97
|
+
* @returns true if middleware should be registered
|
|
98
|
+
*/
|
|
99
|
+
enabled?: (context: MiddlewareContext) => boolean;
|
|
100
|
+
/**
|
|
101
|
+
* Create handler for this middleware
|
|
102
|
+
* @param context - Shared context
|
|
103
|
+
* @returns Express request handler
|
|
104
|
+
*/
|
|
105
|
+
createHandler: (context: MiddlewareContext) => RequestHandler;
|
|
106
|
+
/** Explicitly disallow createRouter for global middleware */
|
|
107
|
+
createRouter?: never;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Middleware can be either route-based or global
|
|
111
|
+
*/
|
|
112
|
+
type Middleware = RouteMiddleware | GlobalMiddleware;
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Options for OpenAPI middleware
|
|
116
|
+
*/
|
|
117
|
+
interface OpenapiMiddlewareOptions {
|
|
118
|
+
/** Path to the openapi.json file */
|
|
119
|
+
openapiFilePath: string;
|
|
120
|
+
/** Enable source code enhancement */
|
|
121
|
+
enableEnhancement?: boolean;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Creates OpenAPI middleware that serves enhanced openapi.json
|
|
126
|
+
* Supports both rspack/webpack and Vite dev servers
|
|
127
|
+
*/
|
|
128
|
+
declare function createOpenapiMiddleware(options: OpenapiMiddlewareOptions): RouteMiddleware;
|
|
129
|
+
|
|
130
|
+
interface DevLogsMiddlewareOptions {
|
|
131
|
+
/** Directory containing log files */
|
|
132
|
+
logDir?: string;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Creates dev logs middleware for viewing application logs
|
|
136
|
+
* Supports both rspack/webpack and Vite dev servers
|
|
137
|
+
*/
|
|
138
|
+
declare function createDevLogsMiddleware(options?: DevLogsMiddlewareOptions): RouteMiddleware;
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Register middlewares for Express-compatible servers or Vite
|
|
142
|
+
* @param server - Express app or Vite middleware instance
|
|
143
|
+
* @param middlewares - List of middlewares to register
|
|
144
|
+
* @param options - Optional context configuration
|
|
145
|
+
* @returns Promise that resolves when all middlewares are registered
|
|
146
|
+
*
|
|
147
|
+
* @example
|
|
148
|
+
* ```typescript
|
|
149
|
+
* // In rspack/webpack setupMiddlewares
|
|
150
|
+
* setupMiddlewares: (middlewares, devServer) => {
|
|
151
|
+
* if (devServer.app) {
|
|
152
|
+
* registerMiddlewares(devServer.app, [
|
|
153
|
+
* // Global middlewares (execute first)
|
|
154
|
+
* createCorsMiddleware({ origin: '*' }),
|
|
155
|
+
* createAuthMiddleware(),
|
|
156
|
+
*
|
|
157
|
+
* // Route middlewares
|
|
158
|
+
* createDevLogsMiddleware({ logDir: './logs' }),
|
|
159
|
+
* createOpenapiMiddleware({ openapiFilePath: './openapi.json' })
|
|
160
|
+
* ], {
|
|
161
|
+
* basePath: '/api',
|
|
162
|
+
* isDev: true,
|
|
163
|
+
* rootDir: __dirname
|
|
164
|
+
* });
|
|
165
|
+
* }
|
|
166
|
+
* return middlewares;
|
|
167
|
+
* }
|
|
168
|
+
*
|
|
169
|
+
* // In Vite configureServer
|
|
170
|
+
* configureServer: (server) => {
|
|
171
|
+
* registerMiddlewares(server.middlewares, [
|
|
172
|
+
* createDevLogsMiddleware({ logDir: './logs' })
|
|
173
|
+
* ], { basePath: '/', isDev: true, rootDir: __dirname });
|
|
174
|
+
* }
|
|
175
|
+
* ```
|
|
176
|
+
*/
|
|
177
|
+
declare function registerMiddlewares(server: ExpressApp | ViteMiddleware, middlewares: Middleware[], options?: Partial<MiddlewareContext>): Promise<void>;
|
|
178
|
+
|
|
179
|
+
export { type GlobalMiddleware, type Middleware, type MiddlewareContext, type RouteInfo, type RouteMiddleware, createDevLogsMiddleware, createOpenapiMiddleware, normalizeBasePath, postprocessDrizzleSchema, registerMiddlewares };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import { Router, RequestHandler, Application } from 'express';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* 标准化基础路径,确保以 '/' 开头且不包含 trailing slash
|
|
5
|
+
* @param basePath 原始基础路径
|
|
6
|
+
* @returns 标准化后的基础路径
|
|
7
|
+
*/
|
|
8
|
+
declare function normalizeBasePath(basePath: string): string;
|
|
9
|
+
|
|
10
|
+
type PostprocessStats = {
|
|
11
|
+
replacedUnknown: number;
|
|
12
|
+
unmatchedUnknown: string[];
|
|
13
|
+
};
|
|
14
|
+
declare function postprocessDrizzleSchema(targetPath: string): PostprocessStats | undefined;
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Shared context passed to all middlewares
|
|
18
|
+
*/
|
|
19
|
+
interface MiddlewareContext {
|
|
20
|
+
/** Base path for the application (e.g., '/', '/app') */
|
|
21
|
+
basePath: string;
|
|
22
|
+
/** Whether running in development mode */
|
|
23
|
+
isDev: boolean;
|
|
24
|
+
/** Root directory of the project */
|
|
25
|
+
rootDir: string;
|
|
26
|
+
/** Additional custom options */
|
|
27
|
+
[key: string]: any;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Express-compatible app (rspack/webpack dev server)
|
|
31
|
+
*/
|
|
32
|
+
type ExpressApp = Application;
|
|
33
|
+
/**
|
|
34
|
+
* Vite-compatible middleware handler (Connect server)
|
|
35
|
+
* Using 'any' to avoid dependency on vite types
|
|
36
|
+
*/
|
|
37
|
+
type ViteMiddleware = any;
|
|
38
|
+
/**
|
|
39
|
+
* Route registration info for better visibility
|
|
40
|
+
*/
|
|
41
|
+
interface RouteInfo {
|
|
42
|
+
/** HTTP method (GET, POST, etc.) or '*' for all methods */
|
|
43
|
+
method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' | 'ALL' | '*';
|
|
44
|
+
/** Route path (relative to mount point) */
|
|
45
|
+
path: string;
|
|
46
|
+
/** Description of what this route does */
|
|
47
|
+
description: string;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Route-based middleware
|
|
51
|
+
* Mounts a router at a specific path
|
|
52
|
+
*/
|
|
53
|
+
interface RouteMiddleware {
|
|
54
|
+
/** Unique name for this middleware */
|
|
55
|
+
name: string;
|
|
56
|
+
/**
|
|
57
|
+
* Mount path for this middleware (relative to basePath)
|
|
58
|
+
* e.g., '/dev/logs', '/openapi.json'
|
|
59
|
+
* Required for route-based middlewares
|
|
60
|
+
*/
|
|
61
|
+
mountPath: string;
|
|
62
|
+
/**
|
|
63
|
+
* List of routes provided by this middleware
|
|
64
|
+
* Useful for debugging and documentation
|
|
65
|
+
*/
|
|
66
|
+
routes?: RouteInfo[];
|
|
67
|
+
/**
|
|
68
|
+
* Determine if this middleware should be enabled
|
|
69
|
+
* @param context - Shared context
|
|
70
|
+
* @returns true if middleware should be registered
|
|
71
|
+
*/
|
|
72
|
+
enabled?: (context: MiddlewareContext) => boolean;
|
|
73
|
+
/**
|
|
74
|
+
* Create router for this middleware
|
|
75
|
+
* @param context - Shared context
|
|
76
|
+
* @returns Express Router
|
|
77
|
+
*/
|
|
78
|
+
createRouter: (context: MiddlewareContext) => Router;
|
|
79
|
+
/** Explicitly disallow createHandler for route middleware */
|
|
80
|
+
createHandler?: never;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Global middleware
|
|
84
|
+
* Applies to all requests without a specific mount path
|
|
85
|
+
*/
|
|
86
|
+
interface GlobalMiddleware {
|
|
87
|
+
/** Unique name for this middleware */
|
|
88
|
+
name: string;
|
|
89
|
+
/**
|
|
90
|
+
* Global middlewares should not have a mount path
|
|
91
|
+
* If you need path-specific behavior, use RouteMiddleware instead
|
|
92
|
+
*/
|
|
93
|
+
mountPath?: never;
|
|
94
|
+
/**
|
|
95
|
+
* Determine if this middleware should be enabled
|
|
96
|
+
* @param context - Shared context
|
|
97
|
+
* @returns true if middleware should be registered
|
|
98
|
+
*/
|
|
99
|
+
enabled?: (context: MiddlewareContext) => boolean;
|
|
100
|
+
/**
|
|
101
|
+
* Create handler for this middleware
|
|
102
|
+
* @param context - Shared context
|
|
103
|
+
* @returns Express request handler
|
|
104
|
+
*/
|
|
105
|
+
createHandler: (context: MiddlewareContext) => RequestHandler;
|
|
106
|
+
/** Explicitly disallow createRouter for global middleware */
|
|
107
|
+
createRouter?: never;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Middleware can be either route-based or global
|
|
111
|
+
*/
|
|
112
|
+
type Middleware = RouteMiddleware | GlobalMiddleware;
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Options for OpenAPI middleware
|
|
116
|
+
*/
|
|
117
|
+
interface OpenapiMiddlewareOptions {
|
|
118
|
+
/** Path to the openapi.json file */
|
|
119
|
+
openapiFilePath: string;
|
|
120
|
+
/** Enable source code enhancement */
|
|
121
|
+
enableEnhancement?: boolean;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Creates OpenAPI middleware that serves enhanced openapi.json
|
|
126
|
+
* Supports both rspack/webpack and Vite dev servers
|
|
127
|
+
*/
|
|
128
|
+
declare function createOpenapiMiddleware(options: OpenapiMiddlewareOptions): RouteMiddleware;
|
|
129
|
+
|
|
130
|
+
interface DevLogsMiddlewareOptions {
|
|
131
|
+
/** Directory containing log files */
|
|
132
|
+
logDir?: string;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Creates dev logs middleware for viewing application logs
|
|
136
|
+
* Supports both rspack/webpack and Vite dev servers
|
|
137
|
+
*/
|
|
138
|
+
declare function createDevLogsMiddleware(options?: DevLogsMiddlewareOptions): RouteMiddleware;
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Register middlewares for Express-compatible servers or Vite
|
|
142
|
+
* @param server - Express app or Vite middleware instance
|
|
143
|
+
* @param middlewares - List of middlewares to register
|
|
144
|
+
* @param options - Optional context configuration
|
|
145
|
+
* @returns Promise that resolves when all middlewares are registered
|
|
146
|
+
*
|
|
147
|
+
* @example
|
|
148
|
+
* ```typescript
|
|
149
|
+
* // In rspack/webpack setupMiddlewares
|
|
150
|
+
* setupMiddlewares: (middlewares, devServer) => {
|
|
151
|
+
* if (devServer.app) {
|
|
152
|
+
* registerMiddlewares(devServer.app, [
|
|
153
|
+
* // Global middlewares (execute first)
|
|
154
|
+
* createCorsMiddleware({ origin: '*' }),
|
|
155
|
+
* createAuthMiddleware(),
|
|
156
|
+
*
|
|
157
|
+
* // Route middlewares
|
|
158
|
+
* createDevLogsMiddleware({ logDir: './logs' }),
|
|
159
|
+
* createOpenapiMiddleware({ openapiFilePath: './openapi.json' })
|
|
160
|
+
* ], {
|
|
161
|
+
* basePath: '/api',
|
|
162
|
+
* isDev: true,
|
|
163
|
+
* rootDir: __dirname
|
|
164
|
+
* });
|
|
165
|
+
* }
|
|
166
|
+
* return middlewares;
|
|
167
|
+
* }
|
|
168
|
+
*
|
|
169
|
+
* // In Vite configureServer
|
|
170
|
+
* configureServer: (server) => {
|
|
171
|
+
* registerMiddlewares(server.middlewares, [
|
|
172
|
+
* createDevLogsMiddleware({ logDir: './logs' })
|
|
173
|
+
* ], { basePath: '/', isDev: true, rootDir: __dirname });
|
|
174
|
+
* }
|
|
175
|
+
* ```
|
|
176
|
+
*/
|
|
177
|
+
declare function registerMiddlewares(server: ExpressApp | ViteMiddleware, middlewares: Middleware[], options?: Partial<MiddlewareContext>): Promise<void>;
|
|
178
|
+
|
|
179
|
+
export { type GlobalMiddleware, type Middleware, type MiddlewareContext, type RouteInfo, type RouteMiddleware, createDevLogsMiddleware, createOpenapiMiddleware, normalizeBasePath, postprocessDrizzleSchema, registerMiddlewares };
|