forked from remix-run/react-router
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.ts
45 lines (40 loc) · 1.43 KB
/
index.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import fs from "node:fs";
import path from "node:path";
import {
type RouteConfigEntry,
getAppDirectory,
} from "@react-router/dev/routes";
import { routeManifestToRouteConfig } from "./manifest";
import { flatRoutes as flatRoutesImpl } from "./flatRoutes";
import { normalizeSlashes } from "./normalizeSlashes";
/**
* Creates route config from the file system using a convention that matches
* [Remix v2's route file
* naming](https://remix.run/docs/en/v2/file-conventions/routes-files), for use
* within `routes.ts`.
*/
export async function flatRoutes(
options: {
/**
* An array of [minimatch](https://www.npmjs.com/package/minimatch) globs that match files to ignore.
* Defaults to `[]`.
*/
ignoredRouteFiles?: string[];
/**
* The directory containing file system routes, relative to the app directory.
* Defaults to `"./routes"`.
*/
rootDirectory?: string;
} = {}
): Promise<RouteConfigEntry[]> {
let { ignoredRouteFiles = [], rootDirectory: userRootDirectory = "routes" } =
options;
let appDirectory = getAppDirectory();
let rootDirectory = path.resolve(appDirectory, userRootDirectory);
let relativeRootDirectory = path.relative(appDirectory, rootDirectory);
let prefix = normalizeSlashes(relativeRootDirectory);
let routes = fs.existsSync(rootDirectory)
? flatRoutesImpl(appDirectory, ignoredRouteFiles, prefix)
: {};
return routeManifestToRouteConfig(routes);
}