Subject: Update UglifyJs (& dependencies) and update dependents
From: Charles <[email-masked]>
To: "[email-masked]" <[email-masked]>
Date: Sun, 27 Jun 2021 16:01:21 +0000
List-Id: <debbugs-submit.debbugs.gnu.org>

Feedback on package guildlines welcome. More info about why I am making this change in the commit message. Let me know if you think the new uglify-js package should go in a different file.

From 19a60318625b04f16861c89e6f1879d8b4f558d4 Mon Sep 17 00:00:00 2001
From: Charles <[email-masked]>
Date: Sat, 26 Jun 2021 14:33:19 -0500
Subject: [PATCH] gnu: Add node-acorn.

* gnu/packages/node-xyz.scm (node-acorn): Add new variable.
---
 gnu/packages/node-xyz.scm | 27 +++++++++++++++++++++++++++
 1 file changed, 27 insertions(+)

diff --git a/gnu/packages/node-xyz.scm b/gnu/packages/node-xyz.scm
index 27a76f59c3..7818b44d9e 100644
--- a/gnu/packages/node-xyz.scm
+++ b/gnu/packages/node-xyz.scm
@@ -21,6 +21,7 @@
 (define-module (gnu packages node-xyz)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
+  #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module (guix build-system node))
 
@@ -330,3 +331,29 @@ function with browser support.")
 Subsequent calls will either return the cached previous value or throw an error
 if desired.")
     (license license:isc)))
+
+(define-public node-acorn
+  (package
+    (name "node-acorn")
+    (version "8.4.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://github.com/acornjs/acorn/archive/refs/tags/"
+             version ".tar.gz"))
+       (sha256
+        (base32 "0x049p4f0pdck168vc9zbagj1jw26g8d71dycckmd02y2rjddb9b"))))
+    (build-system node-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'change-directory
+           (lambda _
+             (chdir "acorn")
+             #t)))))
+    (home-page "https://github.com/acornjs/acorn/tree/master/acorn")
+    (synopsis "A small, fast, Javascript-based Javascript parser")
+    (description "Acornjs is a Javascrip parser with many options and an
+architecture supporting plugins.")
+    (license license:expat)))
-- 
2.32.0

From 53b96b21be2946e84e9687096313557a83c2e103 Mon Sep 17 00:00:00 2001
From: Charles <[email-masked]>
Date: Sat, 26 Jun 2021 14:44:23 -0500
Subject: [PATCH] gnu: Update UglifyJs.

This change is to update the UglifyJs library. This updated Javascript
implementation is by the same author as the original Common Lisp version and
is the official successor. It supports many commonly found features of
ECMAscript 6.

* gnu/packages/lisp-xyz.scm (uglify-js): Remove variable.
* gnu/packages/node-xyz.scm (node-uglify-js): Add new variable.
* guix/build-system/minify.scm (default-uglify-js): Update module-ref.
* gnu/packages/bioinformatics.scm (bismark): Update inputs.
* gnu/packages/ci.scm (laminar): Update inputs.
* gnu/packages/cran.scm (r-shiny): Update inputs.
* gnu/packages/cran.scm (r-shinytree): Update inputs.
* gnu/packages/cran.scm (r-colourpicker): Update inputs.
* gnu/packages/cran.scm (r-threejs): Update inputs.
* gnu/packages/cran.scm (r-flexdashboard): Update inputs.
* gnu/packages/cran.scm (r-bios2cor): Update inputs.
* gnu/packages/cran.scm (r-rintrojs): Update inputs.
* gnu/packages/cran.scm (r-dygraphs): Update inputs.
* gnu/packages/javascript.scm (js-mathjax): Update inputs.
* gnu/packages/web.scm (hpcguix-web): Update inputs.
---
 gnu/packages/bioinformatics.scm    |  6 ++--
 gnu/packages/ci.scm                |  6 ++--
 gnu/packages/cran.scm              | 36 ++++++++++-----------
 gnu/packages/javascript.scm        |  6 ++--
 gnu/packages/lisp-xyz.scm          | 52 ------------------------------
 gnu/packages/node-xyz.scm          | 24 ++++++++++++++
 gnu/packages/web.scm               |  4 +--
 guix/build-system/minify.scm       |  4 +--
 guix/build/minify-build-system.scm |  2 +-
 9 files changed, 56 insertions(+), 84 deletions(-)

diff --git a/gnu/packages/bioinformatics.scm b/gnu/packages/bioinformatics.scm
index 7a1c8cc8e3..d11159b88c 100644
--- a/gnu/packages/bioinformatics.scm
+++ b/gnu/packages/bioinformatics.scm
@@ -105,7 +105,6 @@
   #:use-module (gnu packages java-compression)
   #:use-module (gnu packages jemalloc)
   #:use-module (gnu packages linux)
-  #:use-module (gnu packages lisp-xyz)
   #:use-module (gnu packages logging)
   #:use-module (gnu packages lsof)
   #:use-module (gnu packages machine-learning)
@@ -114,6 +113,7 @@
   #:use-module (gnu packages mpi)
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages node)
+  #:use-module (gnu packages node-xyz)
   #:use-module (gnu packages ocaml)
   #:use-module (gnu packages pcre)
   #:use-module (gnu packages parallel)
@@ -9245,7 +9245,7 @@ Browser.")
            (lambda* (#:key inputs #:allow-other-keys)
              (let* ((file (assoc-ref inputs "plotly.js"))
                     (installed "plotly/plotly.js"))
-               (let ((minified (open-pipe* OPEN_READ "uglify-js" file)))
+               (let ((minified (open-pipe* OPEN_READ "uglifyjs" file)))
                  (call-with-output-file installed
                    (cut dump-port minified <>))))
              #t))
@@ -9303,7 +9303,7 @@ Browser.")
                                "v1.39.4/dist/plotly.js"))
            (sha256
             (base32 "138mwsr4nf5qif4mrxx286mpnagxd1xwl6k8aidrjgknaqg88zyr"))))
-       ("uglify-js" ,uglify-js)))
+       ("node-uglify-js" ,node-uglify-js)))
     (home-page "https://www.bioinformatics.babraham.ac.uk/projects/bismark/")
     (synopsis "Map bisulfite treated sequence reads and analyze methylation")
     (description "Bismark is a program to map bisulfite treated sequencing
diff --git a/gnu/packages/ci.scm b/gnu/packages/ci.scm
index 0bcde0fad5..9f9f5d6c20 100644
--- a/gnu/packages/ci.scm
+++ b/gnu/packages/ci.scm
@@ -38,7 +38,7 @@
   #:use-module (gnu packages guile)
   #:use-module (gnu packages guile-xyz)
   #:use-module (gnu packages gnupg)
-  #:use-module (gnu packages lisp-xyz)
+  #:use-module (gnu packages node-xyz)
   #:use-module (gnu packages mail)
   #:use-module (gnu packages package-management)
   #:use-module (gnu packages perl)
@@ -252,7 +252,7 @@ intended as a replacement for Hydra.")
                          (let* ((file
                                  (assoc-ref inputs (string-append name ".js")))
                                 (port
-                                 (open-pipe* OPEN_READ "uglify-js" file))
+                                 (open-pipe* OPEN_READ "uglifyjs" file))
                                 (destination
                                  (string-append
                                   "../build/js/" name ".min.js")))
@@ -282,7 +282,7 @@ intended as a replacement for Hydra.")
        ("zlib" ,zlib)))
     (native-inputs
      `(("googletest" ,googletest)
-       ("uglify-js" ,uglify-js)
+       ("node-uglify-js" ,node-uglify-js)
 
        ("vue.js"
         ,(origin (method url-fetch)
diff --git a/gnu/packages/cran.scm b/gnu/packages/cran.scm
index e01b2417d2..69d98d34aa 100644
--- a/gnu/packages/cran.scm
+++ b/gnu/packages/cran.scm
@@ -83,13 +83,13 @@
   #:use-module (gnu packages java)
   #:use-module (gnu packages javascript)
   #:use-module (gnu packages libevent)
-  #:use-module (gnu packages lisp-xyz)
   #:use-module (gnu packages machine-learning)
   #:use-module (gnu packages maths)
   #:use-module (gnu packages mpi)
   #:use-module (gnu packages multiprecision)
   #:use-module (gnu packages networking)
   #:use-module (gnu packages node)
+  #:use-module (gnu packages node-xyz)
   #:use-module (gnu packages pcre)
   #:use-module (gnu packages pdf)
   #:use-module (gnu packages perl)
@@ -1991,7 +1991,7 @@ previewing themes in real time.")
        ("js-strftime" ,js-strftime)
        ("js-highlight" ,js-highlight)))
     (native-inputs
-     `(("uglify-js" ,uglify-js)
+     `(("node-uglify-js" ,node-uglify-js)
        ("gfortran" ,gfortran)
        ("js-bootstrap-accessibility"
         ,(origin
@@ -2058,7 +2058,7 @@ responsive, and powerful applications with minimal effort.")
                    (for-each (lambda (source target)
                                (format #t "Processing ~a --> ~a~%"
                                        source target)
-                               (let ((minified (open-pipe* OPEN_READ "uglify-js" source)))
+                               (let ((minified (open-pipe* OPEN_READ "uglifyjs" source)))
                                  (call-with-output-file target
                                    (lambda (port)
                                      (dump-port minified port)))))
@@ -2073,7 +2073,7 @@ responsive, and powerful applications with minimal effort.")
     (inputs
      `(("js-requirejs" ,js-requirejs)))
     (native-inputs
-     `(("uglify-js" ,uglify-js)
+     `(("node-uglify-js" ,node-uglify-js)
        ("js-jquery"
         ,(origin
            (method url-fetch)
@@ -2111,7 +2111,7 @@ supports interactive trees, to enable rich, editable trees in Shiny.")
            (lambda _
              (with-directory-excursion "inst/AdminLTE"
                (delete-file "app.min.js")
-               (let ((minified (open-pipe* OPEN_READ "uglify-js" "app.js")))
+               (let ((minified (open-pipe* OPEN_READ "uglifyjs" "app.js")))
                  (call-with-output-file "app.min.js"
                    (lambda (port)
                      (dump-port minified port))))))))))
@@ -2120,7 +2120,7 @@ supports interactive trees, to enable rich, editable trees in Shiny.")
        ("r-promises" ,r-promises)
        ("r-shiny" ,r-shiny)))
     (native-inputs
-     `(("uglify-js" ,uglify-js)))
+     `(("node-uglify-js" ,node-uglify-js)))
     (home-page "https://rstudio.github.io/shinydashboard/")
     (synopsis "Create dashboards with shiny")
     (description "This package provides an extension to the Shiny web
@@ -14849,7 +14849,7 @@ to easily call your own custom JavaScript functions from R.")
                                (format #t "Processing ~a --> ~a~%"
                                        source target)
                                (delete-file target)
-                               (let ((minified (open-pipe* OPEN_READ "uglify-js" source)))
+                               (let ((minified (open-pipe* OPEN_READ "uglifyjs" source)))
                                  (call-with-output-file target
                                    (lambda (port)
                                      (dump-port minified port)))))
@@ -14865,7 +14865,7 @@ to easily call your own custom JavaScript functions from R.")
        ("r-shinyjs" ,r-shinyjs)))
     (native-inputs
      `(("r-knitr" ,r-knitr)
-       ("uglify-js" ,uglify-js)
+       ("node-uglify-js" ,node-uglify-js)
        ("js-jquery"
         ,(origin
            (method url-fetch)
@@ -17276,7 +17276,7 @@ and Learning to Rank measures (LambdaMart).")
                                (format #t "Processing ~a --> ~a~%"
                                        source target)
                                (delete-file target)
-                               (let ((minified (open-pipe* OPEN_READ "uglify-js" source)))
+                               (let ((minified (open-pipe* OPEN_READ "uglifyjs" source)))
                                  (call-with-output-file target
                                    (lambda (port)
                                      (dump-port minified port)))))
@@ -17288,7 +17288,7 @@ and Learning to Rank measures (LambdaMart).")
        ("r-htmlwidgets" ,r-htmlwidgets)
        ("r-igraph" ,r-igraph)))
     (native-inputs
-     `(("uglify-js" ,uglify-js)
+     `(("node-uglify-js" ,node-uglify-js)
        ("js-jquery"
         ,(origin
            (method url-fetch)
@@ -17523,7 +17523,7 @@ etc.).  Text boxes with automatic word wrap are also supported.")
                    (for-each (lambda (source target)
                                (format #t "Processing ~a --> ~a~%"
                                        source target)
-                               (let ((minified (open-pipe* OPEN_READ "uglify-js" source)))
+                               (let ((minified (open-pipe* OPEN_READ "uglifyjs" source)))
                                  (call-with-output-file target
                                    (lambda (port)
                                      (dump-port minified port)))))
@@ -17537,7 +17537,7 @@ etc.).  Text boxes with automatic word wrap are also supported.")
        ("r-rmarkdown" ,r-rmarkdown)
        ("r-shiny" ,r-shiny)))
     (native-inputs
-     `(("uglify-js" ,uglify-js)
+     `(("node-uglify-js" ,node-uglify-js)
        ("js-raphael"
         ,(origin
            (method url-fetch)
@@ -19380,14 +19380,14 @@ tools for help in data interpretation.")
                    (for-each (lambda (source target)
                                (format #t "Processing ~a --> ~a~%"
                                        source target)
-                               (let ((minified (open-pipe* OPEN_READ "uglify-js" source)))
+                               (let ((minified (open-pipe* OPEN_READ "uglifyjs" source)))
                                  (call-with-output-file target
                                    (lambda (port)
                                      (dump-port minified port)))))
                              sources targets))))
              #t)))))
     (native-inputs
-     `(("uglify-js" ,uglify-js)
+     `(("node-uglify-js" ,node-uglify-js)
        ;; NOTE: Make sure that this version of d3 is still valid when
        ;; upgrading the package.
        ("d3.v4.js"
@@ -19645,14 +19645,14 @@ cell free DNA} (cfDNA).")
                    (for-each (lambda (source target)
                                (format #t "Processing ~a --> ~a~%"
                                        source target)
-                               (let ((minified (open-pipe* OPEN_READ "uglify-js" source)))
+                               (let ((minified (open-pipe* OPEN_READ "uglifyjs" source)))
                                  (call-with-output-file target
                                    (lambda (port)
                                      (dump-port minified port)))))
                              sources targets))))
              #t)))))
     (native-inputs
-     `(("uglify-js" ,uglify-js)
+     `(("node-uglify-js" ,node-uglify-js)
        ("intro.js"
         ,(origin
            (method url-fetch)
@@ -23716,14 +23716,14 @@ documents, Shiny applications, Plumber APIs, plots, and static web content.")
                    (for-each (lambda (source target)
                                (format #t "Processing ~a --> ~a~%"
                                        source target)
-                               (let ((minified (open-pipe* OPEN_READ "uglify-js" source)))
+                               (let ((minified (open-pipe* OPEN_READ "uglifyjs" source)))
                                  (call-with-output-file target
                                    (lambda (port)
                                      (dump-port minified port)))))
                              sources targets))))
              #t)))))
     (native-inputs
-     `(("uglify-js" ,uglify-js)
+     `(("uglify-js" ,node-uglify-js)
        ;; They actually use version 1.11.1, but this more recent version
        ;; should be just fine.
        ("js-jquery"
diff --git a/gnu/packages/javascript.scm b/gnu/packages/javascript.scm
index a935d321c5..2dc1c330a2 100644
--- a/gnu/packages/javascript.scm
+++ b/gnu/packages/javascript.scm
@@ -26,7 +26,7 @@
   #:use-module (gnu packages)
   #:use-module (gnu packages base)
   #:use-module (gnu packages compression)
-  #:use-module (gnu packages lisp-xyz)
+  #:use-module (gnu packages node-xyz)
   #:use-module (gnu packages readline)
   #:use-module (gnu packages web)
   #:use-module (guix packages)
@@ -163,7 +163,7 @@ context menu in TypeScript.")
                 (cond
                  ((string-match "\\.js$" file)
                   (mkdir-p (dirname installed))
-                  (let ((minified (open-pipe* OPEN_READ "uglify-js" file)))
+                  (let ((minified (open-pipe* OPEN_READ "uglifyjs" file)))
                     (call-with-output-file installed
                       (lambda (port)
                         (dump-port minified port)))
@@ -179,7 +179,7 @@ context menu in TypeScript.")
     (native-inputs
      `(("font-mathjax" ,font-mathjax)
        ("glibc-utf8-locales" ,glibc-utf8-locales)
-       ("uglify-js" ,uglify-js)
+       ("node-uglify-js" ,node-uglify-js)
        ,@(package-native-inputs font-mathjax)))
     (synopsis "JavaScript display engine for LaTeX, MathML, and AsciiMath")
     (description "MathJax is a JavaScript display engine for LaTeX, MathML,
diff --git a/gnu/packages/lisp-xyz.scm b/gnu/packages/lisp-xyz.scm
index a4a5d6f543..3c891162ee 100644
--- a/gnu/packages/lisp-xyz.scm
+++ b/gnu/packages/lisp-xyz.scm
@@ -1276,58 +1276,6 @@ compressor.  It works on data produced by @code{parse-js} to generate a
 (define-public ecl-cl-uglify-js
   (sbcl-package->ecl-package sbcl-cl-uglify-js))
 
-(define-public uglify-js
-  (package
-    (inherit sbcl-cl-uglify-js)
-    (name "uglify-js")
-    (build-system trivial-build-system)
-    (arguments
-     `(#:modules ((guix build utils))
-       #:builder
-       (let* ((bin    (string-append (assoc-ref %outputs "out") "/bin/"))
-              (script (string-append bin "uglify-js")))
-         (use-modules (guix build utils))
-         (mkdir-p bin)
-         (with-output-to-file script
-           (lambda _
-             (format #t "#!~a/bin/sbcl --script
-
- (require :asdf)
- (asdf:initialize-source-registry
-  #p\"~a/etc/common-lisp/source-registry.conf.d/\")
- (asdf:initialize-output-translations
-  #p\"~a/etc/common-lisp/asdf-output-translations.conf.d/\")"
-                     (assoc-ref %build-inputs "sbcl")
-                     (assoc-ref %build-inputs "sbcl-cl-uglify-js")
-                     (assoc-ref %build-inputs "sbcl-cl-uglify-js"))
-             ;; FIXME: cannot use progn here because otherwise it fails to
-             ;; find cl-uglify-js.
-             (for-each
-              write
-              '(;; Quiet, please!
-                (let ((*standard-output* (make-broadcast-stream))
-                      (*error-output* (make-broadcast-stream)))
-                  (asdf:load-system :cl-uglify-js))
-                (let ((file (cadr *posix-argv*)))
-                  (if file
-                      (format t "~a"
-                              (cl-uglify-js:ast-gen-code
-                               (cl-uglify-js:ast-mangle
-                                (cl-uglify-js:ast-squeeze
-                                 (with-open-file (in file)
-                                                 (parse-js:parse-js in))))
-                               :beautify nil))
-                      (progn
-                       (format *error-output*
-                               "Please provide a JavaScript file.~%")
-                       (sb-ext:exit :code 1))))))))
-         (chmod script #o755)
-         #t)))
-    (inputs
-     `(("sbcl" ,sbcl)
-       ("sbcl-cl-uglify-js" ,sbcl-cl-uglify-js)))
-    (synopsis "JavaScript compressor")))
-
 (define-public sbcl-cl-strings
   (let ((revision "1")
         (commit "c5c5cbafbf3e6181d03c354d66e41a4f063f00ae"))
diff --git a/gnu/packages/node-xyz.scm b/gnu/packages/node-xyz.scm
index 7818b44d9e..3661fdb0c4 100644
--- a/gnu/packages/node-xyz.scm
+++ b/gnu/packages/node-xyz.scm
@@ -357,3 +357,27 @@ if desired.")
     (description "Acornjs is a Javascrip parser with many options and an
 architecture supporting plugins.")
     (license license:expat)))
+
+(define-public node-uglify-js
+  (package
+    (name "node-uglify-js")
+    (version "3.13.9")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://github.com/mishoo/UglifyJS/archive/refs/tags/v"
+             version ".tar.gz"))
+       (sha256
+        (base32 "0dpgkqwyrkqlvixwl841375s134slnj3h0viff1cpxq81mxqph09"))))
+    (build-system node-build-system)
+    (inputs
+     `(("semver" ,node-semver)
+       ("acorn" ,node-acorn)))
+    (home-page "https://lisperator.net/uglifyjs/")
+    (synopsis "JavaScript parser / mangler / compressor / beautifier toolkit")
+    (description "UglifyJS is a JavaScript compressor/minifier written in
+JavaScript. It also contains tools that allow one to automate working with
+JavaScript code: parser, code generator, compressor, mangler, scope analyzer,
+tree walker, and tree transformer.")
+    (license license:bsd-2)))
diff --git a/gnu/packages/web.scm b/gnu/packages/web.scm
index 412308b417..6d39103b5b 100644
--- a/gnu/packages/web.scm
+++ b/gnu/packages/web.scm
@@ -138,7 +138,7 @@
   #:use-module (gnu packages libunistring)
   #:use-module (gnu packages libunwind)
   #:use-module (gnu packages linux)
-  #:use-module (gnu packages lisp-xyz)
+  #:use-module (gnu packages node-xyz)
   #:use-module (gnu packages lsof)
   #:use-module (gnu packages lua)
   #:use-module (gnu packages mail)
@@ -7759,7 +7759,7 @@ compressed JSON header blocks.
       (native-inputs
        `(("autoconf" ,autoconf)
          ("automake" ,automake)
-         ("uglify-js" ,uglify-js)
+         ("node-uglify-js" ,node-uglify-js)
          ("pkg-config" ,pkg-config)))
       (inputs
        `(("guile" ,@(assoc-ref (package-native-inputs guix) "guile"))
diff --git a/guix/build-system/minify.scm b/guix/build-system/minify.scm
index 28a6781c06..add6b9f080 100644
--- a/guix/build-system/minify.scm
+++ b/guix/build-system/minify.scm
@@ -44,8 +44,8 @@
 (define (default-uglify-js)
   "Return the default package to minify JavaScript source files."
   ;; Lazily resolve the binding to avoid a circular dependency.
-  (let ((mod (resolve-interface '(gnu packages lisp-xyz))))
-    (module-ref mod 'uglify-js)))
+  (let ((mod (resolve-interface '(gnu packages node-xyz))))
+    (module-ref mod 'node-uglify-js)))
 
 (define* (lower name
                 #:key source inputs native-inputs outputs system
diff --git a/guix/build/minify-build-system.scm b/guix/build/minify-build-system.scm
index 92158a033f..c5a876726f 100644
--- a/guix/build/minify-build-system.scm
+++ b/guix/build/minify-build-system.scm
@@ -39,7 +39,7 @@
   (format #t "minifying ~a\n" file)
   (let* ((base (basename file ".js"))
          (installed (or target (string-append directory base ".min.js")))
-         (minified (open-pipe* OPEN_READ "uglify-js" file)))
+         (minified (open-pipe* OPEN_READ "uglifyjs" file)))
     (call-with-output-file installed
       (cut dump-port minified <>))
     #t))
-- 
2.32.0