release: WRNexusJS 0.4.0
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
import { test, expect } from "bun:test";
|
||||
import {
|
||||
buildRouter,
|
||||
compileRoutePattern,
|
||||
fileToRoute,
|
||||
generateRoutesFile,
|
||||
@@ -77,3 +78,57 @@ test("route groups and page/index filenames do not affect URLs", () => {
|
||||
test("malformed encoded route params return no match instead of throwing", () => {
|
||||
expect(matchRoute([route("/users/[id]")], "/users/%E0%A4%A")).toBeNull();
|
||||
});
|
||||
|
||||
test("application routes override package routes with the same path", async () => {
|
||||
const { mkdtempSync, mkdirSync, rmSync, writeFileSync } = await import("node:fs");
|
||||
const { tmpdir } = await import("node:os");
|
||||
const { join } = await import("node:path");
|
||||
const root = mkdtempSync(join(tmpdir(), "wrnexus-router-override-"));
|
||||
|
||||
try {
|
||||
const appDir = join(root, "app");
|
||||
const appRoute = join(appDir, "pages", "account.ts");
|
||||
const packageRoute = join(root, "package-account.ts");
|
||||
mkdirSync(join(appDir, "pages"), { recursive: true });
|
||||
writeFileSync(appRoute, "export default function account() {}\n");
|
||||
writeFileSync(packageRoute, "export default function packageAccount() {}\n");
|
||||
|
||||
const router = buildRouter(appDir, {
|
||||
externalRoutes: [{ kind: "page", path: "/account", entry: packageRoute }],
|
||||
});
|
||||
|
||||
expect(router.matchPage("/account")?.route.file).toBe(appRoute);
|
||||
expect(router.pages.filter((route) => route.raw === "/account")).toHaveLength(1);
|
||||
} finally {
|
||||
rmSync(root, { recursive: true, force: true });
|
||||
}
|
||||
});
|
||||
|
||||
test("components use declaration names with case-insensitive overrides", async () => {
|
||||
const { mkdtempSync, mkdirSync, rmSync, writeFileSync } = await import("node:fs");
|
||||
const { tmpdir } = await import("node:os");
|
||||
const { join } = await import("node:path");
|
||||
const root = mkdtempSync(join(tmpdir(), "wrnexus-router-components-"));
|
||||
|
||||
try {
|
||||
const appDir = join(root, "app");
|
||||
const componentsDir = join(root, "library-components");
|
||||
mkdirSync(join(appDir, "pages"), { recursive: true });
|
||||
mkdirSync(componentsDir, { recursive: true });
|
||||
writeFileSync(join(appDir, "pages", "index.wrn"), "page Home { view { <p>Home</p> } }\n");
|
||||
writeFileSync(
|
||||
join(componentsDir, "button.wrn"),
|
||||
'component Button { view { <button type="button">Button</button> } }\n',
|
||||
);
|
||||
|
||||
const router = buildRouter(appDir, { componentDirs: [componentsDir] });
|
||||
|
||||
expect(router.components).toHaveLength(1);
|
||||
expect(router.components[0]).toEqual({
|
||||
name: "Button",
|
||||
file: join(componentsDir, "button.wrn"),
|
||||
});
|
||||
} finally {
|
||||
rmSync(root, { recursive: true, force: true });
|
||||
}
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user