Skip to content
On this page

Route API ​

Route input ​

The route input is the object received by any route handler.

ts
import { Response, route, Status } from "svarta";

// prettier-ignore
export default route
  .handle(async (routeInput) => { 
    console.log(routeInput);
    return new Response(Status.Ok, "Hello world!");
  });
import { Response, route, Status } from "svarta";

// prettier-ignore
export default route
  .handle(async (routeInput) => { 
    console.log(routeInput);
    return new Response(Status.Ok, "Hello world!");
  });

ctx ​

User-provided context. This can be set by using middlewares.

ts
import { Response, route, Status } from "svarta";

const myRoute = route.middleware(async () => {
  return {
    message: "Hello world!",
  };
});

export default myRoute.handle(async ({ ctx }) => {
  return new Response(Status.Ok, ctx.message);
});
import { Response, route, Status } from "svarta";

const myRoute = route.middleware(async () => {
  return {
    message: "Hello world!",
  };
});

export default myRoute.handle(async ({ ctx }) => {
  return new Response(Status.Ok, ctx.message);
});

path ​

Full path without the query parameters.

Example: /user?id=3 => /user

ts
import { Response, route, Status } from "svarta";

export default route.handle(async ({ path }) => {
  console.log(path); // => "/"
  return new Response(Status.Ok, "Hello world!");
});
import { Response, route, Status } from "svarta";

export default route.handle(async ({ path }) => {
  console.log(path); // => "/"
  return new Response(Status.Ok, "Hello world!");
});

url ​

Full path with query parameters.

Example: /user?id=3 => /user?id=3

ts
import { Response, route, Status } from "svarta";

export default route.handle(async ({ url }) => {
  console.log(url);
  return new Response(Status.Ok, "Hello world!");
});
import { Response, route, Status } from "svarta";

export default route.handle(async ({ url }) => {
  console.log(url);
  return new Response(Status.Ok, "Hello world!");
});

method ​

HTTP method (GET, POST, etc).

ts
import { Response, route, Status } from "svarta";

export default route.handle(async ({ method }) => {
  console.log(method); // => "GET"
  return new Response(Status.Ok, "Hello world!");
});
import { Response, route, Status } from "svarta";

export default route.handle(async ({ method }) => {
  console.log(method); // => "GET"
  return new Response(Status.Ok, "Hello world!");
});

headers ​

Can be used to get and set HTTP headers.

ts
import { Redirect, Response, route, Status } from "svarta";
import YAML from "yaml";

export default route.handle(async ({ headers }) => {
  if (!headers.get("authorization")) {
    return new Redirect("/", false);
  }

  headers.set("content-type", "application/yaml");
  const body = YAML.stringify({
    message: "welcome to the secret page",
  });

  return new Response(Status.Ok, body);
});
import { Redirect, Response, route, Status } from "svarta";
import YAML from "yaml";

export default route.handle(async ({ headers }) => {
  if (!headers.get("authorization")) {
    return new Redirect("/", false);
  }

  headers.set("content-type", "application/yaml");
  const body = YAML.stringify({
    message: "welcome to the secret page",
  });

  return new Response(Status.Ok, body);
});

input ​

Input body. Use route.input to define an input, which will be automatically validated before your route handler runs. See more here.

output ​

Like input, but validates the server response body. See more here.

params ​

Route parameters. See more here.

ts
import { Response, route, Status } from "svarta";

export const params = ["user"];

// prettier-ignore
export default route
  .params(params)
  .handle(async ({ params }) => {
    return new Response(Status.Ok, `Hello ${params.user}`);
  });
import { Response, route, Status } from "svarta";

export const params = ["user"];

// prettier-ignore
export default route
  .params(params)
  .handle(async ({ params }) => {
    return new Response(Status.Ok, `Hello ${params.user}`);
  });

query ​

Route query parameters.

ts
import { Response, route, Status } from "svarta";

export default route.handle(async ({ query }) => {
  const result = await db.find({
    query: query.q ?? "",
    page: query.page ?? 0,
    pageSize: 100,
  });
  return new Response(Status.Ok, result);
});
import { Response, route, Status } from "svarta";

export default route.handle(async ({ query }) => {
  const result = await db.find({
    query: query.q ?? "",
    page: query.page ?? 0,
    pageSize: 100,
  });
  return new Response(Status.Ok, result);
});

isDev ​

Development flag, which is true if the app is run in development mode.

ts
import { Response, route, Status } from "svarta";

export default route.handle(async ({ isDev }) => {
  if (!isDev) {
    logRequest();
  }

  return new Response(Status.Ok, {
    message: "hello",
  });
});
import { Response, route, Status } from "svarta";

export default route.handle(async ({ isDev }) => {
  if (!isDev) {
    logRequest();
  }

  return new Response(Status.Ok, {
    message: "hello",
  });
});

cookies ​

Can be used to get and set HTTP cookies.

ts
import { Redirect, Response, route, Status } from "svarta";

export default route.handle(async ({ cookies }) => {
  const session = cookies.get("session");
  if (!session) {
    return new Redirect("/", false);
  }

  const user = await getUser(session);
  if (!user) {
    return new Redirect("/", false);
  }

  cookies.set("session", generateSession(), {
    httpOnly: true,
    // additional cookie parameters here
    // the options parameter is optional
  });

  return new Response(Status.Ok, {
    message: "You are signed in",
  });
});
import { Redirect, Response, route, Status } from "svarta";

export default route.handle(async ({ cookies }) => {
  const session = cookies.get("session");
  if (!session) {
    return new Redirect("/", false);
  }

  const user = await getUser(session);
  if (!user) {
    return new Redirect("/", false);
  }

  cookies.set("session", generateSession(), {
    httpOnly: true,
    // additional cookie parameters here
    // the options parameter is optional
  });

  return new Response(Status.Ok, {
    message: "You are signed in",
  });
});