mirror of
				https://github.com/TriliumNext/Notes.git
				synced 2025-11-04 07:01:31 +08:00 
			
		
		
		
	fix(desktop): adapt request mocking to express 5
This commit is contained in:
		
							parent
							
								
									0bc91349f6
								
							
						
					
					
						commit
						ebeabe2b54
					
				@ -1,42 +1,63 @@
 | 
			
		||||
import electron from "electron";
 | 
			
		||||
import type { Application } from "express";
 | 
			
		||||
import type { ParamsDictionary, Request, Response } from "express-serve-static-core";
 | 
			
		||||
import type QueryString from "qs";
 | 
			
		||||
import { Session, SessionData } from "express-session";
 | 
			
		||||
 | 
			
		||||
interface Response {
 | 
			
		||||
    statusCode: number;
 | 
			
		||||
    getHeader: (name: string) => string;
 | 
			
		||||
    setHeader: (name: string, value: string) => Response;
 | 
			
		||||
    header: (name: string, value: string) => Response;
 | 
			
		||||
    status: (statusCode: number) => Response;
 | 
			
		||||
    send: (obj: {}) => void; // eslint-disable-line @typescript-eslint/no-empty-object-type
 | 
			
		||||
}
 | 
			
		||||
type MockedResponse = Response<any, Record<string, any>, number>;
 | 
			
		||||
 | 
			
		||||
function init(app: Application) {
 | 
			
		||||
    const fakeSession: Session & Partial<SessionData> = {
 | 
			
		||||
        id: "session-id", // Placeholder for session ID
 | 
			
		||||
        cookie: {
 | 
			
		||||
            originalMaxAge: 3600000, // 1 hour
 | 
			
		||||
        },
 | 
			
		||||
        loggedIn: true,
 | 
			
		||||
        regenerate(callback) {
 | 
			
		||||
            callback?.(null);
 | 
			
		||||
            return fakeSession;
 | 
			
		||||
        },
 | 
			
		||||
        destroy(callback) {
 | 
			
		||||
            callback?.(null);
 | 
			
		||||
            return fakeSession;
 | 
			
		||||
        },
 | 
			
		||||
        reload(callback) {
 | 
			
		||||
            callback?.(null);
 | 
			
		||||
            return fakeSession;
 | 
			
		||||
        },
 | 
			
		||||
        save(callback) {
 | 
			
		||||
            callback?.(null);
 | 
			
		||||
            return fakeSession;
 | 
			
		||||
        },
 | 
			
		||||
        resetMaxAge: () => fakeSession,
 | 
			
		||||
        touch: () => fakeSession
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
function init(app: Express.Application) {
 | 
			
		||||
    electron.ipcMain.on("server-request", (event, arg) => {
 | 
			
		||||
        const req = {
 | 
			
		||||
        const req: Pick<Request<ParamsDictionary, any, any, QueryString.ParsedQs, Record<string, any>>, "url" | "method" | "body" | "headers" | "session"> = {
 | 
			
		||||
            url: arg.url,
 | 
			
		||||
            method: arg.method,
 | 
			
		||||
            body: arg.data,
 | 
			
		||||
            headers: arg.headers,
 | 
			
		||||
            session: {
 | 
			
		||||
                loggedIn: true
 | 
			
		||||
            }
 | 
			
		||||
            session: fakeSession
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        const respHeaders: Record<string, string> = {};
 | 
			
		||||
        const respHeaders: Record<string, string | string[]> = {};
 | 
			
		||||
 | 
			
		||||
        const res: Response = {
 | 
			
		||||
        const res: Pick<Response<any, Record<string, any>, number>, "statusCode" | "getHeader" | "setHeader" | "header" | "status" | "send" | "locals" | "json"> = {
 | 
			
		||||
            statusCode: 200,
 | 
			
		||||
            getHeader: (name) => respHeaders[name],
 | 
			
		||||
            setHeader: (name, value) => {
 | 
			
		||||
                respHeaders[name] = value.toString();
 | 
			
		||||
                return res;
 | 
			
		||||
                return res as MockedResponse;
 | 
			
		||||
            },
 | 
			
		||||
            header: (name, value) => {
 | 
			
		||||
                respHeaders[name] = value.toString();
 | 
			
		||||
                return res;
 | 
			
		||||
            header(name: string, value?: string | string[]) {
 | 
			
		||||
                respHeaders[name] = value ?? "";
 | 
			
		||||
                return res as MockedResponse;
 | 
			
		||||
            },
 | 
			
		||||
            status: (statusCode) => {
 | 
			
		||||
                res.statusCode = statusCode;
 | 
			
		||||
                return res;
 | 
			
		||||
                return res as MockedResponse;
 | 
			
		||||
            },
 | 
			
		||||
            send: (obj) => {
 | 
			
		||||
                event.sender.send("server-response", {
 | 
			
		||||
@ -47,10 +68,16 @@ function init(app: Express.Application) {
 | 
			
		||||
                    headers: respHeaders,
 | 
			
		||||
                    body: obj
 | 
			
		||||
                });
 | 
			
		||||
                return res as MockedResponse;
 | 
			
		||||
            },
 | 
			
		||||
            locals: {},
 | 
			
		||||
            json: (obj) => {
 | 
			
		||||
                res.send(JSON.stringify(obj));
 | 
			
		||||
                return res as MockedResponse;
 | 
			
		||||
            }
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        return (app as any)._router.handle(req, res, () => {});
 | 
			
		||||
        return app.router(req as any, res as any, () => {});
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user