diff options
Diffstat (limited to 'app/presenters/packages/npm/package_presenter.rb')
-rw-r--r-- | app/presenters/packages/npm/package_presenter.rb | 38 |
1 files changed, 28 insertions, 10 deletions
diff --git a/app/presenters/packages/npm/package_presenter.rb b/app/presenters/packages/npm/package_presenter.rb index b9595eb6647..9e3308c2573 100644 --- a/app/presenters/packages/npm/package_presenter.rb +++ b/app/presenters/packages/npm/package_presenter.rb @@ -5,26 +5,37 @@ module Packages class PackagePresenter include API::Helpers::RelatedResourcesHelpers + # Allowed fields are those defined in the abbreviated form + # defined here: https://github.com/npm/registry/blob/master/docs/responses/package-metadata.md#abbreviated-version-object + # except: name, version, dist, dependencies and xDependencies. Those are generated by this presenter. + PACKAGE_JSON_ALLOWED_FIELDS = %w[deprecated bin directories dist engines _hasShrinkwrap].freeze + attr_reader :name, :packages - def initialize(name, packages) + def initialize(name, packages, include_metadata: false) @name = name @packages = packages + @include_metadata = include_metadata end def versions package_versions = {} packages.each_batch do |relation| - relation.including_dependency_links - .preload_files - .each do |package| - package_file = package.package_files.last + batched_packages = relation.including_dependency_links + .preload_files + + if @include_metadata + batched_packages = batched_packages.preload_npm_metadatum + end + + batched_packages.each do |package| + package_file = package.package_files.last - next unless package_file + next unless package_file - package_versions[package.version] = build_package_version(package, package_file) - end + package_versions[package.version] = build_package_version(package, package_file) + end end package_versions @@ -41,14 +52,14 @@ module Packages end def build_package_version(package, package_file) - { + abbreviated_package_json(package).merge( name: package.name, version: package.version, dist: { shasum: package_file.file_sha1, tarball: tarball_url(package, package_file) } - }.tap do |package_version| + ).tap do |package_version| package_version.merge!(build_package_dependencies(package)) end end @@ -79,6 +90,13 @@ module Packages Packages::Tag.for_packages(packages) .preload_package end + + def abbreviated_package_json(package) + return {} unless @include_metadata + + json = package.npm_metadatum&.package_json || {} + json.slice(*PACKAGE_JSON_ALLOWED_FIELDS) + end end end end |