50 lines · 2.0 KB
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) },