From 0b839bf89df5188447275f960e9bbff3935afea4 Mon Sep 17 00:00:00 2001 From: Liliana Marie Prikler Date: Thu, 6 Jan 2022 15:35:35 +0100 Subject: [PATCH 3/3] Fixup 05/41. 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 --- guix/build/node-build-system.scm | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/guix/build/node-build-system.scm b/guix/build/node-build-system.scm index 1a0e187028..76aa51c52f 100644 --- a/guix/build/node-build-system.scm +++ b/guix/build/node-build-system.scm @@ -23,6 +23,7 @@ (define-module (guix build node-build-system) #: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) @@ -183,22 +184,29 @@ (define resolve-dependencies (@))))) #t) -(define (delete-dependencies pkg-meta absent-dependencies) - "Functionally update PKG-META, a json object corresponding to a -'package.json' file, to allow building without the ABSENT-DEPENDENCIES. To -avoid reintroducing the ABSENT-DEPENDENCIES, only use this procedure after the -'patch-dependencies' phase." - (define delete-fom-jsobject +(define (delete-dependencies unwanted) + "Rewrite package.json to remove UNWANTED dependencies. Unwanted dependencies +can be specified as regular expressions to exclude a range of related +dependencies, e.g. \"tap\" excludes all dependencies including \"tap\" in their +name, but \"^tap$\" explicitly excludes \"tap\"." + (define delete-from-jsobject (match-lambda (('@ . alist) (cons '@ (filter (match-lambda ((k . v) - (not (member k absent-dependencies)))) + (not (any + (lambda (pattern) + (string-match pattern k)) + unwanted)))) alist))))) - (jsobject-update* - pkg-meta - "devDependencies" '(@) delete-fom-jsobject - "dependencies" '(@) delete-fom-jsobject)) + + (with-atomic-json-file-replacement "package.json" + (lambda (pkg-meta) + (jsobject-update* + pkg-meta + `("peerDependencies" ,delete-from-jsobject (@)) + `("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 -- 2.34.0