summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilip McGrath <philip@philipmcgrath.com>2022-01-08 03:41:53 -0500
committerLiliana Marie Prikler <liliana.prikler@gmail.com>2022-01-09 02:07:12 +0100
commita62e6e3220e8c7e577b1e682bc1b88273a67de3a (patch)
treea8415ad7b78d4030bfaf872e9d962d9175831c10
parentdf7d787ba45c4d7b5a4a49c7fdb163069ff2e47b (diff)
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>
-rw-r--r--guix/build/node-build-system.scm23
1 files changed, 23 insertions, 0 deletions
diff --git a/guix/build/node-build-system.scm b/guix/build/node-build-system.scm
index a1556ce4b8..bee3792e93 100644
--- a/guix/build/node-build-system.scm
+++ b/guix/build/node-build-system.scm
@@ -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."