Skip to content

ServerRoute middleware chain context not merged but replaced #4661

@xtmu

Description

@xtmu

Which project does this relate to?

Start

Describe the bug

const testParentMiddleware = createMiddleware({ type: "request" }).server(
  async ({ next, request }) => {
    console.info("In: testParentMiddleware");
    const result = await next({ context: { testParent: true } });
    result.response.headers.set("x-test-parent", "true");
    console.info("Out: testParentMiddleware");
    return result;
  },
);

const testMiddleware = createMiddleware({ type: "request" })
  .middleware([testParentMiddleware])
  .server(async ({ next, request }) => {
    console.info("In: testMiddleware");
    const result = await next({ context: { test: true } });
    result.response.headers.set("x-test", "true");

    console.info("Out: testMiddleware");
    return result;
  });

export const ServerRoute = createServerFileRoute("/api/users")
  .middleware([userLoggerMiddleware, testParentMiddleware, testMiddleware])
  .methods({
    GET: async ({ request, context }) => {
      console.info("GET /api/users @", request.url);
      console.info("Fetching users... @", request.url);
      console.info("Context:", context); // context inferred type is { testParent: boolean; test: boolean; }, but actually got { test:true }, expected is {test:true,testParent:true}
      const res = await fetch("https://jsonplaceholder.typicode.com/users");
      if (!res.ok) {
        throw new Error("Failed to fetch users");
      }

      const data = (await res.json()) as Array<User>;

      const list = data.slice(0, 10);

      return json(list.map((u) => ({ id: u.id, name: u.name, email: u.email })));
    },
  });

Your Example Website or App

https://github.com/xtmu/start-basic

Steps to Reproduce the Bug or Issue

  1. npm run dev
  2. go to page /api/users
  3. check app server log, found Context: { test: true }

Expected behavior

  1. npm run dev
  2. go to page /api/users
  3. check app server log, found Context: { testParent:true, test: true }

Screenshots or Videos

No response

Platform

  • Router / Start Version: [1.124.0]
  • OS: [Linux]
  • Browser: [ Firefox]
  • Browser Version: [e.g. 91.1]
  • Bundler: [e.g. vite]
  • Bundler Version: [e.g. 7.0.0]

Additional context

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions