#!/bin/sh
set -eu

# Avoid downloading Renovate in tests; only dependency extraction output matters
# to Flint's checker integration here.
case " $* " in
  *" --platform=local "*) ;;
  *) echo "expected --platform=local" >&2; exit 2 ;;
esac
case " $* " in
  *" --dry-run=extract "*|*" --dry-run=lookup "*) ;;
  *) echo "expected an extract or lookup dry run" >&2; exit 2 ;;
esac
test -n "${RENOVATE_CONFIG_FILE:-}" && test -f "$RENOVATE_CONFIG_FILE"

node <<'JS'
const fs = require("node:fs");

const packageFiles = {};

if (fs.existsSync("mise.toml")) {
  const deps = [...fs.readFileSync("mise.toml", "utf8").matchAll(/^\s*"?([^"=\s]+)"?\s*=/gm)]
    .map(([, depName]) => ({ depName }));
  if (deps.length > 0) {
    packageFiles.mise = [{ packageFile: "mise.toml", deps }];
  }
}

if (fs.existsSync("package.json")) {
  const pkg = JSON.parse(fs.readFileSync("package.json", "utf8"));
  const dependencySections = [
    pkg.dependencies,
    pkg.devDependencies,
    pkg.optionalDependencies,
    pkg.peerDependencies,
  ];
  const deps = [...new Set(dependencySections.flatMap((section) => Object.keys(section ?? {})))]
    .sort()
    .map((depName) => ({ depName }));
  if (deps.length > 0) {
    packageFiles.npm = [{ packageFile: "package.json", deps }];
  }
}

console.log(JSON.stringify({ msg: "Extracted dependencies", packageFiles }));
JS
