// This script lists all dependencies that have package install scripts
const path = require('path')
const readInstalled = require('read-installed')

const installScripts = ['preinstall', 'install', 'postinstall']

readInstalled('./', { dev: true }, function (err, data) {
  if (err) {
    throw err
  }

  const deps = data.dependencies
  Object.entries(deps).forEach(([packageName, packageData]) => {
    const packageScripts = packageData.scripts || {}
    const scriptKeys = Reflect.ownKeys(packageScripts)

    const hasInstallScript = installScripts.some((installKey) =>
      scriptKeys.includes(installKey),
    )
    if (!hasInstallScript) {
      return
    }

    const matchingScripts = {}
    if (packageScripts.preinstall) {
      matchingScripts.preinstall = packageScripts.preinstall
    }
    if (packageScripts.install) {
      matchingScripts.install = packageScripts.install
    }
    if (packageScripts.postinstall) {
      matchingScripts.postinstall = packageScripts.postinstall
    }
    const scriptNames = Reflect.ownKeys(matchingScripts)

    const relativePath = path.relative(process.cwd(), packageData.path)

    console.log(`${packageName}: ${relativePath} ${scriptNames}`)
  })
})