one
Version:
One is a new React Framework that makes Vite serve both native and web.
262 lines (260 loc) • 10.8 kB
JavaScript
;
var import_vitest = require("vitest");
var import_createHandleRequest = require("./createHandleRequest.native.js");
import_vitest.vi.mock("./vite/getManifest", function () {
return {
getManifest: function () {
return {
pageRoutes: [{
file: "app/index.tsx",
page: "/",
namedRegex: "^/(?:/)?$",
routeKeys: {},
type: "ssr",
middlewares: []
}, {
file: "app/(public)/otp+ssg.tsx",
page: "/otp",
namedRegex: "^/otp(?:/)?$",
routeKeys: {},
type: "ssg",
middlewares: [],
hasLoader: false
}, {
file: "app/(public)/profile+ssg.tsx",
page: "/profile",
namedRegex: "^/profile(?:/)?$",
routeKeys: {},
type: "ssg",
middlewares: [],
hasLoader: true
}, {
file: "app/[slug].tsx",
page: "/[slug]",
namedRegex: "^/(?<nxtPslug>[^/]+?)(?:/)?$",
routeKeys: {
nxtPslug: "slug"
},
type: "ssr",
middlewares: []
}],
apiRoutes: []
};
}
};
});
function createRequest(path) {
return new Request(`http://localhost:3000${path}`, {
headers: {
host: "localhost:3000"
}
});
}
(0, import_vitest.describe)("createHandleRequest", function () {
var mockHandlers = {
handlePage: import_vitest.vi.fn().mockResolvedValue("<html></html>")
};
(0, import_vitest.beforeEach)(function () {
import_vitest.vi.clearAllMocks();
});
(0, import_vitest.describe)("static file extension filtering", function () {
(0, import_vitest.it)("should skip paths with file extensions (favicon.ico)", async function () {
var {
handler
} = (0, import_createHandleRequest.createHandleRequest)(mockHandlers, {
routerRoot: "/app"
});
var result = await handler(createRequest("/favicon.ico"));
(0, import_vitest.expect)(result).toBeNull();
(0, import_vitest.expect)(mockHandlers.handlePage).not.toHaveBeenCalled();
});
(0, import_vitest.it)("should skip paths with file extensions (logo.png)", async function () {
var {
handler
} = (0, import_createHandleRequest.createHandleRequest)(mockHandlers, {
routerRoot: "/app"
});
var result = await handler(createRequest("/logo.png"));
(0, import_vitest.expect)(result).toBeNull();
(0, import_vitest.expect)(mockHandlers.handlePage).not.toHaveBeenCalled();
});
(0, import_vitest.it)("should skip paths with file extensions (styles.css)", async function () {
var {
handler
} = (0, import_createHandleRequest.createHandleRequest)(mockHandlers, {
routerRoot: "/app"
});
var result = await handler(createRequest("/styles.css"));
(0, import_vitest.expect)(result).toBeNull();
(0, import_vitest.expect)(mockHandlers.handlePage).not.toHaveBeenCalled();
});
(0, import_vitest.it)("should skip paths with file extensions (robots.txt)", async function () {
var {
handler
} = (0, import_createHandleRequest.createHandleRequest)(mockHandlers, {
routerRoot: "/app"
});
var result = await handler(createRequest("/robots.txt"));
(0, import_vitest.expect)(result).toBeNull();
(0, import_vitest.expect)(mockHandlers.handlePage).not.toHaveBeenCalled();
});
(0, import_vitest.it)("should skip nested paths with file extensions", async function () {
var {
handler
} = (0, import_createHandleRequest.createHandleRequest)(mockHandlers, {
routerRoot: "/app"
});
var result = await handler(createRequest("/assets/images/logo.png"));
(0, import_vitest.expect)(result).toBeNull();
(0, import_vitest.expect)(mockHandlers.handlePage).not.toHaveBeenCalled();
});
(0, import_vitest.it)("should skip extensions 2-4 chars like .xyz", async function () {
var {
handler
} = (0, import_createHandleRequest.createHandleRequest)(mockHandlers, {
routerRoot: "/app"
});
var result = await handler(createRequest("/somefile.xyz"));
(0, import_vitest.expect)(result).toBeNull();
(0, import_vitest.expect)(mockHandlers.handlePage).not.toHaveBeenCalled();
});
(0, import_vitest.it)("should NOT skip extensions longer than 4 chars (routes with dots in names)", async function () {
var {
handler
} = (0, import_createHandleRequest.createHandleRequest)(mockHandlers, {
routerRoot: "/app"
});
await handler(createRequest("/route.normal"));
(0, import_vitest.expect)(mockHandlers.handlePage).toHaveBeenCalled();
});
(0, import_vitest.it)("should NOT skip 5+ char extensions like .woff2", async function () {
var {
handler
} = (0, import_createHandleRequest.createHandleRequest)(mockHandlers, {
routerRoot: "/app"
});
await handler(createRequest("/font.woff2"));
(0, import_vitest.expect)(mockHandlers.handlePage).toHaveBeenCalled();
});
(0, import_vitest.it)("should NOT skip loader paths ending with _vxrn_loader.js", async function () {
var mockHandlersWithLoader = {
handlePage: import_vitest.vi.fn().mockResolvedValue("<html></html>"),
handleLoader: import_vitest.vi.fn().mockResolvedValue("loader data")
};
var {
handler
} = (0, import_createHandleRequest.createHandleRequest)(mockHandlersWithLoader, {
routerRoot: "/app"
});
await handler(createRequest("/assets/my-page_123_vxrn_loader.js"));
(0, import_vitest.expect)(mockHandlersWithLoader.handleLoader).toHaveBeenCalled();
});
});
(0, import_vitest.describe)("loader dispatch short-circuit for no-loader routes", function () {
(0, import_vitest.it)("should return empty loader module without calling handleLoader when route has hasLoader: false", async function () {
var mockHandlersWithLoader = {
handlePage: import_vitest.vi.fn().mockResolvedValue("<html></html>"),
handleLoader: import_vitest.vi.fn().mockResolvedValue("loader data")
};
var {
handler
} = (0, import_createHandleRequest.createHandleRequest)(mockHandlersWithLoader, {
routerRoot: "/app"
});
var response = await handler(createRequest("/assets/otp_123_vxrn_loader.js"));
(0, import_vitest.expect)(mockHandlersWithLoader.handleLoader).not.toHaveBeenCalled();
(0, import_vitest.expect)(response).not.toBeNull();
(0, import_vitest.expect)(response.status).toBe(200);
(0, import_vitest.expect)(response.headers.get("Content-Type")).toBe("text/javascript");
var body = await response.text();
(0, import_vitest.expect)(body).toContain("export function loader()");
(0, import_vitest.expect)(body).toContain("return undefined");
});
(0, import_vitest.it)("should still call handleLoader when route has hasLoader: true", async function () {
var mockHandlersWithLoader = {
handlePage: import_vitest.vi.fn().mockResolvedValue("<html></html>"),
handleLoader: import_vitest.vi.fn().mockResolvedValue("export function loader(){return 1}")
};
var {
handler
} = (0, import_createHandleRequest.createHandleRequest)(mockHandlersWithLoader, {
routerRoot: "/app"
});
await handler(createRequest("/assets/profile_123_vxrn_loader.js"));
(0, import_vitest.expect)(mockHandlersWithLoader.handleLoader).toHaveBeenCalled();
});
(0, import_vitest.it)("should still call handleLoader when hasLoader is undefined (dev/back-compat)", async function () {
var mockHandlersWithLoader = {
handlePage: import_vitest.vi.fn().mockResolvedValue("<html></html>"),
handleLoader: import_vitest.vi.fn().mockResolvedValue("loader data")
};
var {
handler
} = (0, import_createHandleRequest.createHandleRequest)(mockHandlersWithLoader, {
routerRoot: "/app"
});
await handler(createRequest("/assets/my-page_123_vxrn_loader.js"));
(0, import_vitest.expect)(mockHandlersWithLoader.handleLoader).toHaveBeenCalled();
});
});
(0, import_vitest.describe)("dynamic route matching", function () {
(0, import_vitest.it)("should match dynamic routes for regular paths without extensions", async function () {
var {
handler
} = (0, import_createHandleRequest.createHandleRequest)(mockHandlers, {
routerRoot: "/app"
});
await handler(createRequest("/my-page"));
(0, import_vitest.expect)(mockHandlers.handlePage).toHaveBeenCalled();
});
(0, import_vitest.it)("should match index route", async function () {
var {
handler
} = (0, import_createHandleRequest.createHandleRequest)(mockHandlers, {
routerRoot: "/app"
});
await handler(createRequest("/"));
(0, import_vitest.expect)(mockHandlers.handlePage).toHaveBeenCalled();
});
(0, import_vitest.it)("should match paths with hyphens", async function () {
var {
handler
} = (0, import_createHandleRequest.createHandleRequest)(mockHandlers, {
routerRoot: "/app"
});
await handler(createRequest("/my-awesome-page"));
(0, import_vitest.expect)(mockHandlers.handlePage).toHaveBeenCalled();
});
});
(0, import_vitest.describe)("special paths", function () {
(0, import_vitest.it)("should skip __vxrnhmr path", async function () {
var {
handler
} = (0, import_createHandleRequest.createHandleRequest)(mockHandlers, {
routerRoot: "/app"
});
var result = await handler(createRequest("/__vxrnhmr"));
(0, import_vitest.expect)(result).toBeNull();
});
(0, import_vitest.it)("should skip vite internal paths like /@fs/", async function () {
var {
handler
} = (0, import_createHandleRequest.createHandleRequest)(mockHandlers, {
routerRoot: "/app"
});
(0, import_vitest.expect)(await handler(createRequest("/@fs/some/path"))).toBeNull();
(0, import_vitest.expect)(await handler(createRequest("/@vite/client"))).toBeNull();
(0, import_vitest.expect)(await handler(createRequest("/@id/__x00__virtual:one-entry"))).toBeNull();
});
(0, import_vitest.it)("should NOT skip user routes that start with @", async function () {
var {
handler
} = (0, import_createHandleRequest.createHandleRequest)(mockHandlers, {
routerRoot: "/app"
});
await handler(createRequest("/@admin"));
(0, import_vitest.expect)(mockHandlers.handlePage).toHaveBeenCalled();
});
});
});
//# sourceMappingURL=createHandleRequest.test.native.js.map