object {
  attr "name" {
    type     = string
    required = true
  }
  attr "version" {
    type     = string
    required = true
  }
  attr "description" {
    type = string
  }
  attr "keywords" {
    type = list(string)
  }
  attr "homepage" {
    # "homepage_url" in input file is translated to "homepage" in output
    name = "homepage_url"
  }
  block "bugs" {
    object {
      attr "url" {
        type = string
      }
      attr "email" {
        type = string
      }
    }
  }
  attr "license" {
    type = string
  }
  block "author" {
    object {
      attr "name" {
        type = string
      }
      attr "email" {
        type = string
      }
      attr "url" {
        type = string
      }
    }
  }
  block_list "contributors" {
    block_type = "contributor"
    object {
      attr "name" {
        type = string
      }
      attr "email" {
        type = string
      }
      attr "url" {
        type = string
      }
    }
  }
  attr "files" {
    type = list(string)
  }
  attr "main" {
    type = string
  }
  attr "bin" {
    type = map(string)
  }
  attr "man" {
    type = list(string)
  }
  attr "directories" {
    type = map(string)
  }
  block "repository" {
    object {
      attr "type" {
        type     = string
        required = true
      }
      attr "url" {
        type     = string
        required = true
      }
    }
  }
  attr "scripts" {
    type = map(string)
  }
  attr "config" {
    type = map(string)
  }
  attr "dependencies" {
    type = map(string)
  }
  attr "devDependencies" {
    name = "dev_dependencies"
    type = map(string)
  }
  attr "peerDependencies" {
    name = "peer_dependencies"
    type = map(string)
  }
  attr "bundledDependencies" {
    name = "bundled_dependencies"
    type = map(string)
  }
  attr "optionalDependencies" {
    name = "optional_dependencies"
    type = map(string)
  }
  attr "engines" {
    type = map(string)
  }
  attr "os" {
    type = list(string)
  }
  attr "cpu" {
    type = list(string)
  }
  attr "prefer_global" {
    type = bool
  }
  default "private" {
    attr {
      name = "private"
      type = bool
    }
    literal {
      value = false
    }
  }
  attr "publishConfig" {
    type = map(any)
  }
}
