summaryrefslogtreecommitdiff
path: root/lib/api/helpers/packages/npm.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/api/helpers/packages/npm.rb')
-rw-r--r--lib/api/helpers/packages/npm.rb23
1 files changed, 19 insertions, 4 deletions
diff --git a/lib/api/helpers/packages/npm.rb b/lib/api/helpers/packages/npm.rb
index c1f6a001201..2d556f889bf 100644
--- a/lib/api/helpers/packages/npm.rb
+++ b/lib/api/helpers/packages/npm.rb
@@ -49,13 +49,28 @@ module API
when :project
params[:id]
when :instance
- ::Packages::Package.npm
- .with_name(params[:package_name])
- .first
- &.project_id
+ namespace_path = namespace_path_from_package_name
+ next unless namespace_path
+
+ namespace = Namespace.top_most
+ .by_path(namespace_path)
+ next unless namespace
+
+ finder = ::Packages::Npm::PackageFinder.new(params[:package_name], namespace: namespace)
+
+ finder.last&.project_id
end
end
end
+
+ # from "@scope/package-name" return "scope" or nil
+ def namespace_path_from_package_name
+ package_name = params[:package_name]
+ return unless package_name.starts_with?('@')
+ return unless package_name.include?('/')
+
+ package_name.match(Gitlab::Regex.npm_package_name_regex)&.captures&.first
+ end
end
end
end