Files
router/src/app.ts
xiongxiao 151586f98c chore: update package version and dependencies
- Bump version from 0.1.1 to 0.1.2 in package.json
- Update dependencies:
  - @kevisual/js-filter from ^0.0.5 to ^0.0.6
  - @opencode-ai/plugin from ^1.2.24 to ^1.2.26
  - @types/node from ^25.4.0 to ^25.5.0
  - hono from ^4.12.7 to ^4.12.8
  - Add crypto-js and es-toolkit as new dependencies
- Remove unused AddOpts import in src/app.ts
- Enhance commander.ts to support remote application connection
- Modify route.ts to use hashIdMd5Sync for ID generation
- Add hashIdMd5Sync function in utils/random.ts for deterministic ID generation
2026-03-15 04:59:42 +08:00

83 lines
3.0 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { QueryRouterServer, Route, RouteContext, RouteOpts } from './route.ts';
import { ServerNode, ServerNodeOpts } from './server/server.ts';
import { HandleCtx } from './server/server-base.ts';
import { ServerType } from './server/server-type.ts';
import { handleServer } from './server/handle-server.ts';
import { IncomingMessage, ServerResponse } from 'http';
import { isBun } from './utils/is-engine.ts';
import { BunServer } from './server/server-bun.ts';
import { randomId } from './utils/random.ts';
type RouterHandle = (msg: { path: string;[key: string]: any }) => { code: string; data?: any; message?: string;[key: string]: any };
type AppOptions<T = {}> = {
router?: QueryRouterServer;
server?: ServerType;
/** handle msg 关联 */
routerHandle?: RouterHandle;
routerContext?: RouteContext<T>;
serverOptions?: ServerNodeOpts;
appId?: string;
};
export type AppRouteContext<T> = HandleCtx & RouteContext<T> & { app: App<T> };
/**
* 封装了 Router 和 Server 的 App 模块处理http的请求和响应内置了 Cookie 和 Token 和 res 的处理
* U - Route Context的扩展类型
*/
export class App<U = {}> extends QueryRouterServer<AppRouteContext<U>> {
declare appId: string;
router: QueryRouterServer;
server: ServerType;
declare context: AppRouteContext<U>;
constructor(opts?: AppOptions<U>) {
super({ initHandle: false, context: { needSerialize: true, ...opts?.routerContext } as any });
const router = this;
let server = opts?.server;
if (!server) {
const serverOptions = opts?.serverOptions || {};
if (!isBun) {
server = new ServerNode(serverOptions)
} else {
server = new BunServer(serverOptions)
}
}
server.setHandle(router.getHandle(router, opts?.routerHandle, opts?.routerContext));
this.router = router;
this.server = server;
if (opts?.appId) {
this.appId = opts.appId;
} else {
this.appId = randomId(16, 'rand-');
}
router.appId = this.appId;
}
listen(port: number, hostname?: string, backlog?: number, listeningListener?: () => void): void;
listen(port: number, hostname?: string, listeningListener?: () => void): void;
listen(port: number, backlog?: number, listeningListener?: () => void): void;
listen(port: number, listeningListener?: () => void): void;
listen(path: string, backlog?: number, listeningListener?: () => void): void;
listen(path: string, listeningListener?: () => void): void;
listen(handle: any, backlog?: number, listeningListener?: () => void): void;
listen(handle: any, listeningListener?: () => void): void;
listen(...args: any[]) {
// @ts-ignore
this.server.listen(...args);
}
Route = Route;
static handleRequest(req: IncomingMessage, res: ServerResponse) {
return handleServer(req, res);
}
onServerRequest(fn: (req: IncomingMessage, res: ServerResponse) => void) {
if (!this.server) {
throw new Error('Server is not initialized');
}
this.server.on({
id: 'app-request-listener',
func: fn as any,
});
}
}
export * from './browser.ts';