UNPKG

@reliverse/rse-sdk

Version:

@reliverse/rse-sdk allows you to create new plugins for @reliverse/rse CLI, interact with reliverse.org, and even extend your own CLI functionality (you may also try @reliverse/dler-sdk for this case).

32 lines (31 loc) 1.14 kB
import path from "@reliverse/pathkit"; import fs from "@reliverse/relifso"; import { destr } from "destr"; import { glob } from "tinyglobby"; export async function getUnusedDependencies(cwd, ignoredDeps = []) { const packageJsonPath = path.join(cwd, "package.json"); const packageJson = destr( await fs.readFile(packageJsonPath, "utf-8") ); const allDeps = { ...packageJson.dependencies ?? {}, ...packageJson.devDependencies ?? {} }; const files = await glob("**/*.{js,jsx,ts,tsx}", { cwd }); const imports = /* @__PURE__ */ new Set(); for (const file of files) { const content = await fs.readFile(path.join(cwd, file), "utf-8"); const importMatches = content.matchAll(/from ['"]([^'"]+)['"]/g); for (const match of importMatches) { const [, pkg] = match; if (pkg && !pkg.startsWith(".") && !pkg.startsWith("~/")) { imports.add(pkg.split("/")[0]); } } } return Object.keys(allDeps).filter( (dep) => !imports.has(dep) && !ignoredDeps.some( (pattern) => pattern.startsWith("/") ? new RegExp(pattern.slice(1, -1)).test(dep) : pattern === dep ) ); }