Skip to content

πŸ“‚ Type safe, file-based routing for SST apps

Notifications You must be signed in to change notification settings

bill-kerr/sst-file-routes

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

52 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

SST File Routes

sst-file-routes is a package that generates an SST API route configuration based on the file structure of your project. It gives SST application development a NextJS-like file-based routing experience.

Getting Started

The easiest way to get started is via NPX.

npx sst-file-routes routes

This command assumes you have a routes directory with your SST API handlers. If your handlers are in a different file, replace routes with the relative path to the correct directory.

A file called routes.ts will be created inside of the specified directory.

Conventions

The following conventions assume your API routes are in a routes directory.

To generate a handler for the route GET /healthcheck, create a file named get.ts inside of /routes/healthcheck.

For routes with path parameters, use curly braces in the folder names. For instance, to create the GET /users/{userId} route, you would create a /routes/users/{userId}/get.ts.

Your handler must be exported as handler. export const handler = () => {};

└── routes
    β”œβ”€β”€ get.ts
    └── users
        β”œβ”€β”€ post.ts
        └── {userId}
            β”œβ”€β”€ get.ts

The above folder structure would produce the following route configuation:

GET  /
POST /users
GET  /users/{userId}

Using the Route Config

Once your route config has been generated by npx sst-file-routes, simply import it into the file where you are configuring your SST API routes and drop it into the routes property of the API construct, calling the routes() method on the config object.

// sst.config.ts

import { SSTConfig } from "sst";
import { Api } from "sst/constructs";
import { routeConfig } from "./routes/routes";

export default {
	config(_input) {
		return {
			name: "sst-demo",
			region: "us-east-1",
		};
	},
	stacks(app) {
		new Api(app, "api", {
			routes: routeConfig.routes(),
		});
	},
} satisfies SSTConfig;

To configure a specific route, call .configureRoute() on the routeConfig before calling routes.

routeConfig
	.configureRoute("GET /users/{userId}", (_currentConfig) => {
		// Return any custom configuration you want.
		return {
			type: "function",
			url: "http://example.com",
		};
	})
	.routes();

Getting Path Parameters

If a route in your application has a path parameter, a getPathParameters function will be exported from routes.ts. This function will give you nice autocomplete based on the files in your routes directory.

const { userId } = getPathParameters("GET /users/{userId}", event);

Creating a catch-all route

SST has support for a catch-all route. To create a catch-all route, create a $default.ts handler file in the root routes directory.

└── routes
    β”œβ”€β”€ $default.ts // This handler file will create a catch-all route.
    β”œβ”€β”€ get.ts
    └── users
        β”œβ”€β”€ post.ts
        └── {userId}
            β”œβ”€β”€ get.ts

Roadmap

Features to come:

  • queue and cron function conventions
  • watch mode
  • better CLI

About

πŸ“‚ Type safe, file-based routing for SST apps

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published