Subject: [PATCH v2 3/6] build-system/node: Add guile-json extension.

From: Nicolas Graves <[email-masked]>
Date: Tue, 18 Feb 2025 00:43:54 +0100

* guix/build-system/node.scm (default-guile-json): New variable.
(node-build): Use guile-json extension.
---
 guix/build-system/node.scm | 39 ++++++++++++++++++++++----------------
 1 file changed, 23 insertions(+), 16 deletions(-)

diff --git a/guix/build-system/node.scm b/guix/build-system/node.scm
index 425b8cd9b3..240336ea35 100644
--- a/guix/build-system/node.scm
+++ b/guix/build-system/node.scm
@@ -80,6 +80,12 @@ (define private-keywords
          (build node-build)
          (arguments (strip-keyword-arguments private-keywords arguments)))))
 
+(define (default-guile-json)
+  "Return the default guile-json package."
+  ;; Lazily resolve the binding to avoid a circular dependency.
+  (let ((mod (resolve-interface '(gnu packages guile))))
+    (module-ref mod 'guile-json-4)))
+
 (define* (node-build name inputs
                      #:key
                      source
@@ -90,27 +96,28 @@ (define* (node-build name inputs
                      (outputs '("out"))
                      (search-paths '())
                      (system (%current-system))
-                     (guile #f)
+                     (guile-json (default-guile-json))
                      (imported-modules %node-build-system-modules)
                      (modules '((guix build node-build-system)
                                 (guix build utils))))
   "Build SOURCE using NODE and INPUTS."
   (define builder
-    (with-imported-modules imported-modules
-      #~(begin
-          (use-modules #$@(sexp->gexp modules))
-          (node-build #:name #$name
-                      #:source #+source
-                      #:system #$system
-                      #:npm-flags #$npm-flags
-                      #:test-target #$test-target
-                      #:tests? #$tests?
-                      #:phases #$phases
-                      #:outputs #$(outputs->gexp outputs)
-                      #:search-paths '#$(sexp->gexp
-                                         (map search-path-specification->sexp
-                                              search-paths))
-                      #:inputs #$(input-tuples->gexp inputs)))))
+    (with-extensions (list guile-json)
+      (with-imported-modules imported-modules
+        #~(begin
+            (use-modules #$@(sexp->gexp modules))
+            (node-build #:name #$name
+                        #:source #+source
+                        #:system #$system
+                        #:npm-flags #$npm-flags
+                        #:test-target #$test-target
+                        #:tests? #$tests?
+                        #:phases #$phases
+                        #:outputs #$(outputs->gexp outputs)
+                        #:search-paths '#$(sexp->gexp
+                                           (map search-path-specification->sexp
+                                                search-paths))
+                        #:inputs #$(input-tuples->gexp inputs))))))
 
   (mlet %store-monad ((guile (package->derivation (or guile (default-guile))
                                                   system #:graft? #f)))
-- 
2.48.1