knip
Version:
Find and fix unused dependencies, exports and files in your TypeScript and JavaScript projects
46 lines (45 loc) • 1.67 kB
JavaScript
import { existsSync } from 'node:fs';
import os from 'node:os';
import { toEntry } from '../../util/input.js';
import { join } from '../../util/path.js';
import { hasDependency, load } from '../../util/plugin.js';
import vite from '../vite/index.js';
const isWindows = os.platform() === 'win32';
const title = 'React Router';
const enablers = ['@react-router/dev'];
const isEnabled = ({ dependencies }) => hasDependency(dependencies, enablers);
const config = ['react-router.config.{js,ts}', ...vite.config];
const resolveConfig = async (localConfig, options) => {
const { configFileDir } = options;
const appDirectory = localConfig.appDirectory ?? 'app';
const appDir = join(configFileDir, appDirectory);
globalThis.__reactRouterAppDirectory = appDir;
let routeConfig = [];
const routesPathTs = join(appDir, 'routes.ts');
const routesPathJs = join(appDir, 'routes.js');
if (existsSync(routesPathTs)) {
routeConfig = await load(routesPathTs);
}
else if (existsSync(routesPathJs)) {
routeConfig = await load(routesPathJs);
}
const mapRoute = (route) => {
return [join(appDir, route.file), ...(route.children ? route.children.flatMap(mapRoute) : [])];
};
const routes = routeConfig
.flatMap(mapRoute)
.map(route => (isWindows ? route : route.replace(/[$^*+?()\[\]]/g, '\\$&')));
return [
join(appDir, 'routes.{js,ts}'),
join(appDir, 'root.{jsx,tsx}'),
join(appDir, 'entry.{client,server}.{js,jsx,ts,tsx}'),
...routes,
].map(id => toEntry(id));
};
export default {
title,
enablers,
isEnabled,
config,
resolveConfig,
};