import {
parseBunLock,
parseComposer,
parsePackageJson,
parsePackageLock,
parsePipfileLock,
parsePnpmLock,
parseYarnLock,
} from "./manifests-json";
import type { Dependency } from "./manifests-json";
import {
parseCargoLock,
parseCargoToml,
parseGemfileLock,
parseGoMod,
parsePyproject,
parseRequirementsTxt,
} from "./manifests-text";
export type { Dependency } from "./manifests-json";
export type Ecosystem = "npm" | "pip" | "go" | "cargo" | "rubygems" | "composer";
type ManifestKind = { ecosystem: Ecosystem; parse: (text: string) => Dependency[] };
const MANIFESTS: Record<string, ManifestKind> = {
"package.json": { ecosystem: "npm", parse: parsePackageJson },
"package-lock.json": { ecosystem: "npm", parse: parsePackageLock },
"npm-shrinkwrap.json": { ecosystem: "npm", parse: parsePackageLock },
"bun.lock": { ecosystem: "npm", parse: parseBunLock },
"yarn.lock": { ecosystem: "npm", parse: parseYarnLock },
"pnpm-lock.yaml": { ecosystem: "npm", parse: parsePnpmLock },
"requirements.txt": { ecosystem: "pip", parse: (text) => parseRequirementsTxt(text, "runtime") },
"requirements-dev.txt": { ecosystem: "pip", parse: (text) => parseRequirementsTxt(text, "development") },
"pyproject.toml": { ecosystem: "pip", parse: parsePyproject },
"Pipfile.lock": { ecosystem: "pip", parse: parsePipfileLock },
"go.mod": { ecosystem: "go", parse: parseGoMod },
"Cargo.toml": { ecosystem: "cargo", parse: parseCargoToml },
"Cargo.lock": { ecosystem: "cargo", parse: parseCargoLock },
"Gemfile.lock": { ecosystem: "rubygems", parse: parseGemfileLock },
"composer.json": { ecosystem: "composer", parse: (text) => parseComposer(text, false) },