Skip to content
Merged
Show file tree
Hide file tree
Changes from 6 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .changeset/quick-cloths-repair.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
'@tanstack/start-server-core': patch
'@tanstack/router-core': patch
---

chore: bump to h3 v2 rc 20
4 changes: 2 additions & 2 deletions e2e/e2e-utils/src/localDummyServer.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import http from 'node:http'
import { posts } from './posts'
import { users } from './users'
import posts from './posts'
import users from './users'

// some tests redirect to an external host
// however, in CI this is unstable due to network conditions
Expand Down
5 changes: 4 additions & 1 deletion e2e/e2e-utils/src/posts.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ export type Post = {
body: string
}

export const posts: Array<Post> = [
Comment thread
birkskyum marked this conversation as resolved.
const posts: Array<Post> = [
{
userId: 1,
id: 1,
Expand Down Expand Up @@ -617,3 +617,6 @@ export const posts: Array<Post> = [
body: 'cupiditate quo est a modi nesciunt soluta\nipsa voluptas error itaque dicta in\nautem qui minus magnam et distinctio eum\naccusamus ratione error aut',
},
]

export { posts }
export default posts
5 changes: 4 additions & 1 deletion e2e/e2e-utils/src/users.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ export type User = {
}
}

export const users: Array<User> = [
Comment thread
birkskyum marked this conversation as resolved.
const users: Array<User> = [
{
id: 1,
name: 'Leanne Graham',
Expand Down Expand Up @@ -256,3 +256,6 @@ export const users: Array<User> = [
},
},
]

export { users }
export default users
2 changes: 1 addition & 1 deletion packages/router-core/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -183,7 +183,7 @@
},
"dependencies": {
"@tanstack/history": "workspace:*",
"cookie-es": "^2.0.0",
"cookie-es": "^3.0.0",
"seroval": "^1.4.2",
"seroval-plugins": "^1.4.2"
},
Expand Down
4 changes: 2 additions & 2 deletions packages/start-server-core/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -82,13 +82,13 @@
"@tanstack/router-core": "workspace:*",
"@tanstack/start-client-core": "workspace:*",
"@tanstack/start-storage-context": "workspace:*",
"h3-v2": "npm:h3@2.0.1-rc.16",
"h3-v2": "npm:h3@2.0.1-rc.20",
"seroval": "^1.4.2"
},
"devDependencies": {
"@standard-schema/spec": "^1.0.0",
"@tanstack/intent": "^0.0.14",
"cookie-es": "^2.0.0",
"cookie-es": "^3.0.0",
"fetchdts": "^0.1.6",
"vite": "*",
"@types/node": ">=20"
Expand Down
34 changes: 31 additions & 3 deletions packages/start-server-core/src/request-response.ts
Original file line number Diff line number Diff line change
Expand Up @@ -118,14 +118,33 @@ function attachResponseHeaders<T>(
return value
}

function createMalformedPathFallbackRequest(request: Request): Request {
const url = new URL(request.url)
url.pathname = '/__tanstack_start_malformed_path__'

return new Request(url, request)
}

export function requestHandler<TRegister = unknown>(
handler: RequestHandler<TRegister>,
) {
return (request: Request, requestOpts: any): Promise<Response> | Response => {
const h3Event = new H3Event(request)
let effectiveRequest = request
let h3Event: H3Event

try {
h3Event = new H3Event(request)
} catch (error) {
if (!(error instanceof URIError)) {
throw error
}

effectiveRequest = createMalformedPathFallbackRequest(request)
h3Event = new H3Event(effectiveRequest)
}

const response = eventStorage.run({ h3Event }, () =>
handler(request, requestOpts),
handler(effectiveRequest, requestOpts),
)
return h3_toResponse(attachResponseHeaders(response, h3Event), h3Event)
}
Expand Down Expand Up @@ -284,7 +303,16 @@ export function setResponseStatus(code?: number, text?: string): void {
*/
export function getCookies(): Record<string, string> {
const event = getH3Event()
return h3_parseCookies(event)
const cookies = h3_parseCookies(event)
const definedCookies = Object.create(null) as Record<string, string>

for (const [name, value] of Object.entries(cookies)) {
if (value !== undefined) {
definedCookies[name] = value
}
}

return definedCookies
}

/**
Expand Down
46 changes: 40 additions & 6 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading