one
Version:
One is a new React Framework that makes Vite serve both native and web.
162 lines • 5.02 kB
JavaScript
var import_vitest = require("vitest");
var import_getServerManifest = require("./getServerManifest.cjs");
function makeRouteNode(overrides) {
return {
loadRoute: () => ({}),
contextKey: "",
route: "",
children: [],
dynamic: null,
type: "ssg",
...overrides
};
}
(0, import_vitest.describe)("getServerManifest route specificity", () => {
(0, import_vitest.it)("static segment /blog/[slug] should come before fully dynamic /[a]/[b]", () => {
const 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: []
})]
})]
})]
})]
});
const manifest = (0, import_getServerManifest.getServerManifest)(root);
const pages = manifest.pageRoutes.map(r => r.file);
const blogIdx = pages.indexOf("(site)/blog/[slug]+ssg.tsx");
const chatIdx = pages.indexOf("(chat)/[serverId]/[channelId]/index.tsx");
(0, import_vitest.expect)(blogIdx).toBeGreaterThanOrEqual(0);
(0, import_vitest.expect)(chatIdx).toBeGreaterThanOrEqual(0);
(0, import_vitest.expect)(blogIdx).toBeLessThan(chatIdx);
});
(0, import_vitest.it)("/blog should come before /[slug]", () => {
const 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: []
})]
});
const manifest = (0, import_getServerManifest.getServerManifest)(root);
const pages = manifest.pageRoutes.map(r => r.file);
(0, import_vitest.expect)(pages.indexOf("blog.tsx")).toBeLessThan(pages.indexOf("[slug].tsx"));
});
(0, import_vitest.it)("/blog/hello-world should match blog route first, not [serverId]/[channelId]", () => {
const 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: []
})]
})]
})]
})]
});
const manifest = (0, import_getServerManifest.getServerManifest)(root);
const pathname = "/blog/hello-world";
const matched = manifest.pageRoutes.find(route => {
return new RegExp(route.namedRegex).test(pathname);
});
(0, import_vitest.expect)(matched?.file).toBe("(site)/blog/[slug]+ssg.tsx");
});
(0, import_vitest.it)("[slug] should come before [...catchAll]", () => {
const 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: []
})]
});
const manifest = (0, import_getServerManifest.getServerManifest)(root);
const pages = manifest.pageRoutes.map(r => r.file);
(0, import_vitest.expect)(pages.indexOf("[slug].tsx")).toBeLessThan(pages.indexOf("[...catchAll].tsx"));
});
});