Skip to content

Commit

Permalink
Merge branch 'main' into nested-route-escaping
Browse files Browse the repository at this point in the history
  • Loading branch information
birkskyum authored Mar 3, 2025
2 parents 0f35b6d + 75581e0 commit b9a25a2
Show file tree
Hide file tree
Showing 16 changed files with 620 additions and 170 deletions.
5 changes: 0 additions & 5 deletions .changeset/lovely-comics-hammer.md

This file was deleted.

612 changes: 498 additions & 114 deletions examples/pnpm-lock.yaml

Large diffs are not rendered by default.

1 change: 0 additions & 1 deletion examples/with-tanstack-router/app.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ import { defineConfig } from "@solidjs/start/config";
import { TanStackRouterVite } from "@tanstack/router-plugin/vite";

export default defineConfig({
ssr: false,
vite: {
plugins: [TanStackRouterVite({ target: "solid" })]
}
Expand Down
6 changes: 3 additions & 3 deletions examples/with-tanstack-router/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@
"version": "vinxi version"
},
"dependencies": {
"@tanstack/solid-router": "^1.108.0",
"@tanstack/router-plugin": "^1.108.0",
"@solidjs/start": "^1.1.0",
"@tanstack/solid-router": "^1.112.2",
"@tanstack/router-plugin": "^1.112.0",
"@solidjs/start": "^1.1.2",
"solid-js": "^1.9.5",
"vinxi": "^0.5.3"
},
Expand Down
19 changes: 2 additions & 17 deletions examples/with-tanstack-router/src/app.tsx
Original file line number Diff line number Diff line change
@@ -1,23 +1,8 @@
import { RouterProvider, createRouter } from "@tanstack/solid-router";
import { routeTree } from "./routeTree.gen";
import { router } from "./router";
import { RouterProvider } from "@tanstack/solid-router";

import "./app.css";

const router = createRouter({
defaultErrorComponent: (err) => <div>{err.error.stack}</div>,
routeTree,
defaultPreload: "intent",
defaultStaleTime: 5000,
scrollRestoration: true
});

// Register things for typesafety
declare module "@tanstack/solid-router" {
interface Register {
router: typeof router;
}
}

export default function App() {
return <RouterProvider router={router} />;
}
4 changes: 2 additions & 2 deletions examples/with-tanstack-router/src/entry-client.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// @refresh reload
import { mount, StartClient } from "@solidjs/start/client";
import { mount, StartClientTanstack } from "@solidjs/start/client";

mount(() => <StartClient />, document.getElementById("app")!);
mount(() => <StartClientTanstack />, document.getElementById("app")!);
57 changes: 38 additions & 19 deletions examples/with-tanstack-router/src/entry-server.tsx
Original file line number Diff line number Diff line change
@@ -1,21 +1,40 @@
// @refresh reload
import { createHandler, StartServer } from "@solidjs/start/server";
import { createHandler, FetchEvent, StartServer } from "@solidjs/start/server";
import { createMemoryHistory } from "@tanstack/solid-router";
import { router } from "./router";

export default createHandler(() => (
<StartServer
document={({ assets, children, scripts }) => (
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="icon" href="/favicon.ico" />
{assets}
</head>
<body>
<div id="app">{children}</div>
{scripts}
</body>
</html>
)}
/>
));
const routerLoad = async (event: FetchEvent) => {
const url = new URL(event.request.url);
const path = url.href.replace(url.origin, "");

router.update({
history: createMemoryHistory({
initialEntries: [path]
})
});

await router.load();
};

export default createHandler(
() => (
<StartServer
document={({ assets, children, scripts }) => (
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="icon" href="/favicon.ico" />
{assets}
</head>
<body>
<div id="app">{children}</div>
{scripts}
</body>
</html>
)}
/>
),
undefined,
routerLoad
);
20 changes: 20 additions & 0 deletions examples/with-tanstack-router/src/routeTree.gen.ts
Original file line number Diff line number Diff line change
Expand Up @@ -89,3 +89,23 @@ const rootRouteChildren: RootRouteChildren = {
export const routeTree = rootRoute
._addFileChildren(rootRouteChildren)
._addFileTypes<FileRouteTypes>()

/* ROUTE_MANIFEST_START
{
"routes": {
"__root__": {
"filePath": "__root.tsx",
"children": [
"/",
"/about"
]
},
"/": {
"filePath": "index.tsx"
},
"/about": {
"filePath": "about.tsx"
}
}
}
ROUTE_MANIFEST_END */
22 changes: 22 additions & 0 deletions examples/with-tanstack-router/src/router.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import { createRouter as createTanstackSolidRouter } from "@tanstack/solid-router";
import { routeTree } from "./routeTree.gen";

export function createRouter() {
const router = createTanstackSolidRouter({
defaultErrorComponent: err => <div>{err.error.stack}</div>,
routeTree,
defaultPreload: "intent",
defaultStaleTime: 5000,
scrollRestoration: true
});
return router;
}

export const router = createRouter();

// Register things for typesafety
declare module "@tanstack/solid-router" {
interface Register {
router: ReturnType<typeof createRouter>;
}
}
7 changes: 7 additions & 0 deletions packages/start/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@
# @solidjs/start

## 1.1.2

### Patch Changes

- 0c9bc47: Fix issue with anonymous default exports
- 26e97be: Fix ssr for tanstack router

## 1.1.1

### Patch Changes
Expand Down
2 changes: 1 addition & 1 deletion packages/start/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@solidjs/start",
"version": "1.1.1",
"version": "1.1.2",
"type": "module",
"author": "Ryan Carniato",
"license": "MIT",
Expand Down
10 changes: 10 additions & 0 deletions packages/start/src/client/StartClient.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -24,3 +24,13 @@ export function StartClient() {
</Dummy>
);
}

export function StartClientTanstack() {
return (
<Dummy>
<ErrorBoundary>
<App />
</ErrorBoundary>
</Dummy>
);
}
2 changes: 1 addition & 1 deletion packages/start/src/client/index.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// @refresh skip
import "vinxi/client";
export { StartClient } from "./StartClient";
export { StartClient, StartClientTanstack } from "./StartClient";
export { mount } from "./mount";

2 changes: 1 addition & 1 deletion packages/start/src/client/spa/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,4 @@ export function mount(fn: () => JSX.Element, el: MountableElement) {
render(fn, el);
}

export { StartClient } from "../StartClient";
export { StartClient, StartClientTanstack } from "../StartClient";
16 changes: 12 additions & 4 deletions packages/start/src/server/handler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,18 +31,24 @@ export function getExpectedRedirectStatus(response: ResponseStub): number {
export function createBaseHandler(
fn: (context: PageEvent) => unknown,
createPageEvent: (event: FetchEvent) => Promise<PageEvent>,
options: HandlerOptions | ((context: PageEvent) => HandlerOptions | Promise<HandlerOptions>) = {}
options: HandlerOptions | ((context: PageEvent) => HandlerOptions | Promise<HandlerOptions>) = {},
routerLoad?: (event: FetchEvent) => Promise<void>
) {
return eventHandler({
handler: (e: HTTPEvent) => {
const event = getFetchEvent(e);

return provideRequestEvent(event, async () => {
if (routerLoad) {
await routerLoad(event);
}

// api
const match = matchAPIRoute(new URL(event.request.url).pathname, event.request.method);
if (match) {
const mod = await match.handler.import();
const fn = event.request.method === "HEAD" ? mod["HEAD"] || mod["GET"] : mod[event.request.method];
const fn =
event.request.method === "HEAD" ? mod["HEAD"] || mod["GET"] : mod[event.request.method];
(event as APIEvent).params = match.params || {};
// @ts-ignore
sharedConfig.context = { event };
Expand All @@ -62,6 +68,7 @@ export function createBaseHandler(
const mode = resolvedOptions.mode || "stream";
// @ts-ignore
if (resolvedOptions.nonce) context.nonce = resolvedOptions.nonce;

if (mode === "sync" || !import.meta.env.START_SSR) {
const html = renderToString(() => {
(sharedConfig.context as any).event = context;
Expand Down Expand Up @@ -130,7 +137,8 @@ function handleStreamCompleteRedirect(context: PageEvent) {
*/
export function createHandler(
fn: (context: PageEvent) => unknown,
options?: HandlerOptions | ((context: PageEvent) => HandlerOptions | Promise<HandlerOptions>)
options?: HandlerOptions | ((context: PageEvent) => HandlerOptions | Promise<HandlerOptions>),
routerLoad?: (event: FetchEvent) => Promise<void>
) {
return createBaseHandler(fn, createPageEvent, options);
return createBaseHandler(fn, createPageEvent, options, routerLoad);
}
5 changes: 3 additions & 2 deletions packages/start/src/server/spa/handler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,10 @@ import { FetchEvent, HandlerOptions, PageEvent } from "../types";
*/
export function createHandler(
fn: (context: PageEvent) => unknown,
options?: HandlerOptions | ((context: PageEvent) => HandlerOptions)
options?: HandlerOptions | ((context: PageEvent) => HandlerOptions),
routerLoad?: (event: FetchEvent) => Promise<void>
) {
return createBaseHandler(fn, createPageEvent, options);
return createBaseHandler(fn, createPageEvent, options, routerLoad);
}

export async function createPageEvent(ctx: FetchEvent) {
Expand Down

0 comments on commit b9a25a2

Please sign in to comment.