knip
Version:
Find and fix unused dependencies, exports and files in your TypeScript and JavaScript projects
59 lines (58 loc) • 2.1 kB
JavaScript
import { toDependency, toProductionEntry } from "../../util/input.js";
import { join } from "../../util/path.js";
import { hasDependency } from "../../util/plugin.js";
const title = 'Nitro';
const enablers = ['nitropack', 'nitro'];
const isEnabled = ({ dependencies }) => hasDependency(dependencies, enablers);
const config = ['nitro.config.{js,mjs,ts}'];
const production = [
'server.{js,mjs,ts}',
'api/**/*.ts',
'routes/**/*.ts',
'middleware/**/*.ts',
'plugins/**/*.ts',
'.nitro/types/*.d.ts',
];
const setup = async () => {
if (globalThis && !('defineNitroConfig' in globalThis)) {
Object.defineProperty(globalThis, 'defineNitroConfig', {
value: (id) => id,
writable: true,
configurable: true,
});
}
};
const resolveConfig = async (localConfig) => {
const srcDir = localConfig.srcDir ?? '.';
const patterns = [
toProductionEntry('.nitro/types/*.d.ts'),
...[
typeof localConfig.serverEntry === 'string' ? localConfig.serverEntry : 'server.{js,mjs,ts}',
join(typeof localConfig.apiDir === 'string' ? localConfig.apiDir : 'api', '**/*.ts'),
join(typeof localConfig.routesDir === 'string' ? localConfig.routesDir : 'routes', '**/*.ts'),
'middleware/**/*.ts',
'plugins/**/*.ts',
].map(pattern => toProductionEntry(join(srcDir, pattern))),
];
const deps = localConfig.modules?.reduce((acc, id) => {
if (Array.isArray(id) && typeof id[0] === 'string')
acc.push(toDependency(id[0]));
if (typeof id === 'string')
acc.push(toDependency(id));
return acc;
}, []) ?? [];
return [...deps, ...patterns];
};
const note = `Knip works best with [manual imports](https://nitro.build/guide/utils#manual-imports).
Nitro allows you to disable auto-imports by setting \`imports: false\` in your Nitro config.`;
export const docs = { note };
const plugin = {
title,
enablers,
isEnabled,
config,
production,
setup,
resolveConfig,
};
export default plugin;