UNPKG

one

Version:

One is a new React Framework that makes Vite serve both native and web.

172 lines (171 loc) 4.93 kB
import { describe, expect, it } from "vitest"; import { getServerManifest } from "./getServerManifest.native.js"; function makeRouteNode(overrides) { return { loadRoute: function () { return {}; }, contextKey: "", route: "", children: [], dynamic: null, type: "ssg", ...overrides }; } describe("getServerManifest route specificity", function () { it("static segment /blog/[slug] should come before fully dynamic /[a]/[b]", function () { var root = makeRouteNode({ route: "", children: [ // group (site) with blog/[slug] makeRouteNode({ route: "(site)", children: [makeRouteNode({ route: "blog/[slug]", contextKey: "(site)/blog/[slug]+ssg.tsx", type: "ssg", dynamic: [{ name: "slug", deep: false }], children: [] })] }), // group (chat) with [serverId]/[channelId] makeRouteNode({ route: "(chat)", children: [makeRouteNode({ route: "[serverId]", dynamic: [{ name: "serverId", deep: false }], children: [makeRouteNode({ route: "[channelId]", dynamic: [{ name: "channelId", deep: false }], children: [makeRouteNode({ route: "index", contextKey: "(chat)/[serverId]/[channelId]/index.tsx", type: "spa", children: [] })] })] })] })] }); var manifest = getServerManifest(root); var pages = manifest.pageRoutes.map(function (r) { return r.file; }); var blogIdx = pages.indexOf("(site)/blog/[slug]+ssg.tsx"); var chatIdx = pages.indexOf("(chat)/[serverId]/[channelId]/index.tsx"); expect(blogIdx).toBeGreaterThanOrEqual(0); expect(chatIdx).toBeGreaterThanOrEqual(0); expect(blogIdx).toBeLessThan(chatIdx); }); it("/blog should come before /[slug]", function () { var root = makeRouteNode({ route: "", children: [makeRouteNode({ route: "blog", contextKey: "blog.tsx", type: "ssg", children: [] }), makeRouteNode({ route: "[slug]", contextKey: "[slug].tsx", type: "ssr", dynamic: [{ name: "slug", deep: false }], children: [] })] }); var manifest = getServerManifest(root); var pages = manifest.pageRoutes.map(function (r) { return r.file; }); expect(pages.indexOf("blog.tsx")).toBeLessThan(pages.indexOf("[slug].tsx")); }); it("/blog/hello-world should match blog route first, not [serverId]/[channelId]", function () { var root = makeRouteNode({ route: "", children: [makeRouteNode({ route: "(site)", children: [makeRouteNode({ route: "blog/[slug]", contextKey: "(site)/blog/[slug]+ssg.tsx", type: "ssg", dynamic: [{ name: "slug", deep: false }], children: [] })] }), makeRouteNode({ route: "(chat)", children: [makeRouteNode({ route: "[serverId]", dynamic: [{ name: "serverId", deep: false }], children: [makeRouteNode({ route: "[channelId]", dynamic: [{ name: "channelId", deep: false }], children: [makeRouteNode({ route: "index", contextKey: "(chat)/[serverId]/[channelId]/index.tsx", type: "spa", children: [] })] })] })] })] }); var manifest = getServerManifest(root); var pathname = "/blog/hello-world"; var matched = manifest.pageRoutes.find(function (route) { return new RegExp(route.namedRegex).test(pathname); }); expect(matched === null || matched === void 0 ? void 0 : matched.file).toBe("(site)/blog/[slug]+ssg.tsx"); }); it("[slug] should come before [...catchAll]", function () { var root = makeRouteNode({ route: "", children: [makeRouteNode({ route: "[...catchAll]", contextKey: "[...catchAll].tsx", type: "ssr", dynamic: [{ name: "catchAll", deep: true }], children: [] }), makeRouteNode({ route: "[slug]", contextKey: "[slug].tsx", type: "ssr", dynamic: [{ name: "slug", deep: false }], children: [] })] }); var manifest = getServerManifest(root); var pages = manifest.pageRoutes.map(function (r) { return r.file; }); expect(pages.indexOf("[slug].tsx")).toBeLessThan(pages.indexOf("[...catchAll].tsx")); }); }); //# sourceMappingURL=getServerManifest.test.native.js.map