summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaxim Cournoyer <maxim@guixotic.coop>2026-06-04 22:25:00 +0900
committerMaxim Cournoyer <maxim@guixotic.coop>2026-06-24 14:29:03 +0900
commitff2b3e6b1032e31fd137804d538f4cac7ec325e6 (patch)
treefc9766cd9d62bc9ff9caa4947affa89a49cd5e07
parent0311b0e1f8a804db26703ed761d628cded0b542b (diff)
import: npm-binary: Do not hard-code version in URL.
The URL is now made to look like: (uri (string-append "https://registry.npmjs.org/undici-types/-/" "undici-types-" version ".tgz")) avoiding hard-coding the version string in the URL directly. * guix/import/npm-binary.scm (npm-package->package-sexp) <sexpify-url/maybe>: New nested procedure, used to post-process the dist URL. Change-Id: I518af46a5cb731f52bb5e194e4cc27cfeb2545d6
-rw-r--r--guix/import/npm-binary.scm37
1 files changed, 33 insertions, 4 deletions
diff --git a/guix/import/npm-binary.scm b/guix/import/npm-binary.scm
index 9c4e0ca57a2..ba97f35edfb 100644
--- a/guix/import/npm-binary.scm
+++ b/guix/import/npm-binary.scm
@@ -3,6 +3,7 @@
3;;; Copyright © 2021 Lars-Dominik Braun <lars@6xq.net> 3;;; Copyright © 2021 Lars-Dominik Braun <lars@6xq.net>
4;;; Copyright © 2020, 2023, 2024 Jelle Licht <jlicht@fsfe.org> 4;;; Copyright © 2020, 2023, 2024 Jelle Licht <jlicht@fsfe.org>
5;;; Copyright © 2025 Nicolas Graves <ngraves@ngraves.fr> 5;;; Copyright © 2025 Nicolas Graves <ngraves@ngraves.fr>
6;;; Copyright © 2026 Maxim Cournoyer <maxim@guixotic.coop>
6;;; 7;;;
7;;; This file is part of GNU Guix. 8;;; This file is part of GNU Guix.
8;;; 9;;;
@@ -37,6 +38,7 @@
37 #:use-module (srfi srfi-2) 38 #:use-module (srfi srfi-2)
38 #:use-module (srfi srfi-26) 39 #:use-module (srfi srfi-26)
39 #:use-module (srfi srfi-41) 40 #:use-module (srfi srfi-41)
41 #:use-module (srfi srfi-71)
40 #:use-module (srfi srfi-9) 42 #:use-module (srfi srfi-9)
41 #:use-module (web client) 43 #:use-module (web client)
42 #:use-module (web response) 44 #:use-module (web response)
@@ -219,12 +221,39 @@
219 (string-drop-right url 7) 221 (string-drop-right url 7)
220 url)) 222 url))
221 223
224 (define (sexpify-url/maybe dist-url name version)
225 ;; Return a S-exp for the package URL, which is computed using the package
226 ;; version, if it matches the distribution tarball DIST-URL.
227
228 ;; The newer "scoped" packages use a different scheme for their dist URL
229 ;; (see: <https://docs.npmjs.com/about-scopes>).
230 (let* ((scope name (if (and (string-prefix? "@" name)
231 (string-contains name "/"))
232 (apply values (string-split name #\/))
233 (values #f name)))
234 (versioned-url (string-append (%npm-registry)
235 (if scope
236 (string-append "/" scope "/")
237 "/")
238 name "/-/" name "-" version ".tgz")))
239 (if (string=? dist-url versioned-url)
240 `(string-append ,(string-append (%npm-registry)
241 (if scope
242 (string-append "/" scope "/")
243 "/")
244 name)
245 ,(string-append "/-/" name "-") version ".tgz")
246 dist-url)))
247
222 (match npm-package 248 (match npm-package
223 (($ <package-revision> 249 (($ <package-revision>
224 name version home-page dependencies dev-dependencies 250 name version home-page dependencies dev-dependencies
225 peer-dependencies license description dist) 251 peer-dependencies license description dist)
226 (let* ((name (npm-name->name name)) 252 (let* ((version-string (semver->string
227 (url (dist-tarball dist)) 253 (package-revision-version npm-package)))
254 (dist-url (dist-tarball dist))
255 (url (sexpify-url/maybe dist-url name version-string))
256 (name (npm-name->name name))
228 (home-page (if (string? home-page) 257 (home-page (if (string? home-page)
229 (sanitize-home-page-url home-page) 258 (sanitize-home-page-url home-page)
230 (string-append %default-page "/" (uri-encode name)))) 259 (string-append %default-page "/" (uri-encode name))))
@@ -250,11 +279,11 @@
250 (values 279 (values
251 `(package 280 `(package
252 (name ,name) 281 (name ,name)
253 (version ,(semver->string (package-revision-version npm-package))) 282 (version ,version-string)
254 (source (origin 283 (source (origin
255 (method url-fetch) 284 (method url-fetch)
256 (uri ,url) 285 (uri ,url)
257 (sha256 (base32 ,(hash-url url))))) 286 (sha256 (base32 ,(hash-url dist-url)))))
258 (build-system node-build-system) 287 (build-system node-build-system)
259 (arguments 288 (arguments
260 (list 289 (list