Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2021-11-10 21:12:35 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2021-11-10 21:12:35 +0300
commit6fd750c19206412cfc52b49a70b56147d839c52f (patch)
tree04607e6c9864c09dd312d6bfc3efe9cc5f81c762 /app/models/packages
parent26881dd926cfac47c9603d44e8d5a504ab8c4a14 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app/models/packages')
-rw-r--r--app/models/packages/npm.rb4
-rw-r--r--app/models/packages/npm/metadatum.rb25
-rw-r--r--app/models/packages/package.rb2
3 files changed, 31 insertions, 0 deletions
diff --git a/app/models/packages/npm.rb b/app/models/packages/npm.rb
index e49199d911c..9221187d92a 100644
--- a/app/models/packages/npm.rb
+++ b/app/models/packages/npm.rb
@@ -9,5 +9,9 @@ module Packages
package_name.match(Gitlab::Regex.npm_package_name_regex)&.captures&.first
end
+
+ def self.table_name_prefix
+ 'packages_npm_'
+ end
end
end
diff --git a/app/models/packages/npm/metadatum.rb b/app/models/packages/npm/metadatum.rb
new file mode 100644
index 00000000000..7388c4bdbd2
--- /dev/null
+++ b/app/models/packages/npm/metadatum.rb
@@ -0,0 +1,25 @@
+# frozen_string_literal: true
+
+class Packages::Npm::Metadatum < ApplicationRecord
+ belongs_to :package, -> { where(package_type: :npm) }, inverse_of: :npm_metadatum
+
+ validates :package, presence: true
+ # From https://github.com/npm/registry/blob/master/docs/responses/package-metadata.md#abbreviated-version-object
+ validates :package_json, json_schema: { filename: "npm_package_json" }
+ validate :ensure_npm_package_type
+ validate :ensure_package_json_size
+
+ private
+
+ def ensure_npm_package_type
+ return if package&.npm?
+
+ errors.add(:base, _('Package type must be NPM'))
+ end
+
+ def ensure_package_json_size
+ return if package_json.to_s.size < 20000
+
+ errors.add(:package_json, _('structure is too large'))
+ end
+end
diff --git a/app/models/packages/package.rb b/app/models/packages/package.rb
index ff9e7ef4cf5..f25d0299524 100644
--- a/app/models/packages/package.rb
+++ b/app/models/packages/package.rb
@@ -39,6 +39,7 @@ class Packages::Package < ApplicationRecord
has_one :nuget_metadatum, inverse_of: :package, class_name: 'Packages::Nuget::Metadatum'
has_one :composer_metadatum, inverse_of: :package, class_name: 'Packages::Composer::Metadatum'
has_one :rubygems_metadatum, inverse_of: :package, class_name: 'Packages::Rubygems::Metadatum'
+ has_one :npm_metadatum, inverse_of: :package, class_name: 'Packages::Npm::Metadatum'
has_many :build_infos, inverse_of: :package
has_many :pipelines, through: :build_infos, disable_joins: -> { disable_cross_joins_to_pipelines? }
has_one :debian_publication, inverse_of: :package, class_name: 'Packages::Debian::Publication'
@@ -126,6 +127,7 @@ class Packages::Package < ApplicationRecord
.where(Packages::Composer::Metadatum.table_name => { target_sha: target })
end
scope :preload_composer, -> { preload(:composer_metadatum) }
+ scope :preload_npm_metadatum, -> { preload(:npm_metadatum) }
scope :without_nuget_temporary_name, -> { where.not(name: Packages::Nuget::TEMPORARY_PACKAGE_NAME) }