guix: node-build-system: Add 'delete-dependencies' helper function.

Many node packages currently skip the configure phase, because they lack
both dependencies and a convenient way to build without all of them, e.g.
for the purposes of bootstrapping.  This patch adds a big hammer to flatten
these nails.

* guix/build/node-build-system.scm (delete-dependencies): New variable.

Signed-off-by: Liliana Marie Prikler <liliana.prikler@gmail.com>
This commit is contained in:
Philip McGrath 2022-01-08 03:41:53 -05:00 committed by Liliana Marie Prikler
parent df7d787ba4
commit a62e6e3220
No known key found for this signature in database
GPG Key ID: 442A84B8C70E2F87

@ -25,11 +25,13 @@
#:use-module (guix build utils)
#:use-module (guix build json)
#:use-module (ice-9 ftw)
#:use-module (ice-9 regex)
#:use-module (ice-9 match)
#:use-module (srfi srfi-1)
#:use-module (srfi srfi-71)
#:export (%standard-phases
with-atomic-json-file-replacement
delete-dependencies
node-build))
(define (with-atomic-json-file-replacement file proc)
@ -187,6 +189,27 @@ found in one of the OBJECTS."
(@)))))
#t)
(define (delete-dependencies absent)
"Rewrite 'package.json' to allow the build to proceed without packages
listed in ABSENT, a list of strings naming npm packages.
To prevent the deleted dependencies from being reintroduced, use this function
only after the 'patch-dependencies' phase."
(define delete-from-jsobject
(match-lambda
(('@ . alist)
(cons '@ (filter (match-lambda
((k . _)
(not (member k absent))))
alist)))))
(with-atomic-json-file-replacement "package.json"
(lambda (pkg-meta)
(jsobject-update*
pkg-meta
`("devDependencies" ,delete-from-jsobject (@))
`("dependencies" ,delete-from-jsobject (@))))))
(define* (delete-lockfiles #:key inputs #:allow-other-keys)
"Delete 'package-lock.json', 'yarn.lock', and 'npm-shrinkwrap.json', if they
exist."