summary refs log tree commit diff
path: root/gnu/packages/node-xyz.scm
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages/node-xyz.scm')
-rw-r--r--gnu/packages/node-xyz.scm1763
1 files changed, 898 insertions, 865 deletions
diff --git a/gnu/packages/node-xyz.scm b/gnu/packages/node-xyz.scm
index 9097d611a6..b49a19372b 100644
--- a/gnu/packages/node-xyz.scm
+++ b/gnu/packages/node-xyz.scm
@@ -33,6 +33,10 @@
   #:use-module (guix git-download)
   #:use-module (guix build-system node))
 
+;;;
+;;; Please: Try to add new module packages in alphabetic order.
+;;;
+
 (define-public node-acorn
   (package
     (name "node-acorn")
@@ -107,6 +111,113 @@
 architecture supporting plugins.")
     (license license:expat)))
 
+(define-public node-addon-api
+  (package
+    (name "node-addon-api")
+    (version "4.2.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/nodejs/node-addon-api")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1bhvfi2m9nxfz418s619914vmidcnrzbjv6l9nid476c3zlpazch"))))
+    (inputs
+     (list python node-safe-buffer))
+    (build-system node-build-system)
+    (arguments
+     `(#:modules
+       ((guix build node-build-system)
+        (srfi srfi-1)
+        (ice-9 match)
+        (guix build utils))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'patch-dependencies 'delete-dependencies
+           (lambda args
+             (delete-dependencies
+              `("benchmark"
+                "bindings"
+                "clang-format"
+                "eslint"
+                "eslint-config-semistandard"
+                "eslint-config-standard"
+                "eslint-plugin-import"
+                "eslint-plugin-node"
+                "eslint-plugin-promise"
+                "fs-extra"
+                "path"
+                "pre-commit"))))
+         (add-after 'unpack 'skip-js-tests
+           ;; We can't run the js-based tests,
+           ;; but we can still do the C++ parts
+           (lambda args
+             (define new-test-script
+               "echo stopping after pretest on Guix")
+             (with-atomic-json-file-replacement "package.json"
+               (match-lambda
+                 (('@ . pkg-meta-alist)
+                  (cons
+                   '@
+                   (map (match-lambda
+                          (("scripts" '@ . scripts-alist)
+                           `("scripts" @ ,@(map (match-lambda
+                                                  (("test" . _)
+                                                   (cons "test"
+                                                         new-test-script))
+                                                  (other
+                                                   other))
+                                                scripts-alist)))
+                          (other
+                           other))
+                        pkg-meta-alist))))))))))
+    (home-page "https://github.com/nodejs/node-addon-api")
+    (synopsis "Node.js API (Node-API) header-only C++ wrappers")
+    (description "This module contains header-only C++ wrapper classes which
+simplify the use of the C based Node-API provided by Node.js when using C++.
+It provides a C++ object model and exception handling semantics with low
+overhead.
+
+Node-API is an ABI stable C interface provided by Node.js for building native
+addons.  It is intended to insulate native addons from changes in the
+underlying JavaScript engine and allow modules compiled for one version to run
+on later versions of Node.js without recompilation.  The @code{node-addon-api}
+module, which is not part of Node.js, preserves the benefits of the Node-API
+as it consists only of inline code that depends only on the stable API
+provided by Node-API.
+
+It is important to remember that @emph{other} Node.js interfaces such as
+@code{libuv} (included in a project via @code{#include <uv.h>}) are not
+ABI-stable across Node.js major versions.")
+    (license license:expat)))
+
+(define-public node-bindings
+  (package
+    (name "node-bindings")
+    (version "1.5.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/TooTallNate/node-bindings")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "100gp6kpjvd4j1dqnp0sbjr1hqx5mz7r61q9qy527jyhk9mj47wk"))))
+    (inputs
+     (list node-file-uri-to-path))
+    (build-system node-build-system)
+    (arguments
+     ;; there are no tests
+     `(#:tests? #f))
+    (home-page "https://github.com/TooTallNate/node-bindings")
+    (synopsis "Locate native addons")
+    (description "This package provides a helper module to locate native
+addons in a wide array of potential locations.")
+    (license license:expat)))
+
 (define-public node-buffer-crc32
   (package
     (name "node-buffer-crc32")
@@ -198,6 +309,48 @@ and fancy character sets, signed or unsigned data and has tests, for Node.")
 64.0.3242 and above and all other browsers supporting the file format and API.")
     (license license:bsd-3)))
 
+(define-public node-debug
+  (package
+    (name "node-debug")
+    (version "4.3.3")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/debug-js/debug")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0ji0dmdl2xkgxqxvd6xjy7k3mmknmhvqjgc40vyly9ka1mpf20vb"))))
+    (inputs
+     (list node-ms))
+    (build-system node-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'patch-dependencies 'delete-dependencies
+           (lambda args
+             (delete-dependencies `("brfs"
+                                    "browserify"
+                                    "coveralls"
+                                    "istanbul"
+                                    "karma"
+                                    "karma-browserify"
+                                    "karma-chrome-launcher"
+                                    "karma-mocha"
+                                    "mocha"
+                                    "mocha-lcov-reporter"
+                                    "xo"
+                                    "supports-color")))))
+       #:tests? #f))
+    (home-page "https://github.com/debug-js/debug")
+    (synopsis "Debugging utility for Node.js")
+    (description "The @code{debug} module exposes a function, which if called
+with a module name as argument provides a function that writes debug output to
+@code{console.error} under that module name.  This output can be controlled in
+a more fine-grained manner by binding the @env{DEBUG} variable.")
+    (license license:expat)))
+
 (define-public node-env-variable
   (package
     (name "node-env-variable")
@@ -252,6 +405,60 @@ multiple node.js files, while providing useful information about output and exit
 codes.")
     (license license:expat)))
 
+(define-public node-file-uri-to-path
+  (package
+    (name "node-file-uri-to-path")
+    (version "2.0.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/TooTallNate/file-uri-to-path")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "08l779az44czm12xdhgcrnzpqw34s59hbrlfphs7g9y2k26drqav"))))
+    (native-inputs
+     (list esbuild))
+    (build-system node-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'patch-dependencies 'delete-dependencies
+           (lambda args
+             (delete-dependencies `("@types/mocha"
+                                    "@types/node"
+                                    "@typescript-eslint/eslint-plugin"
+                                    "@typescript-eslint/parser"
+                                    "cpy-cli"
+                                    "eslint"
+                                    "eslint-config-airbnb"
+                                    "eslint-config-prettier"
+                                    "eslint-import-resolver-typescript"
+                                    "eslint-plugin-import"
+                                    "eslint-plugin-jsx-a11y"
+                                    "eslint-plugin-react"
+                                    "mocha"
+                                    "rimraf"
+                                    "typescript"))))
+         (replace 'build
+           (lambda* (#:key inputs native-inputs #:allow-other-keys)
+             (copy-recursively "src" "dist")
+             (invoke (search-input-file (or native-inputs inputs)
+                                        "/bin/esbuild")
+                     "dist/index.ts"
+                     "--outfile=dist/src/index.js"
+                     "--format=cjs"
+                     "--sourcemap"
+                     "--platform=node"))))
+       #:tests? #f))
+    (home-page "https://github.com/TooTallNate/file-uri-to-path")
+    (synopsis "Convert a @code{file:} URI to a file path")
+    (description "This package provides a function to convert a @code{file:}
+URI to a file path.  It accepts a @code{file:} URI and returns a file path
+suitable for use with the @code{fs} module functions.")
+    (license license:expat)))
+
 (define-public node-global-gradle-clean
   (package
     (name "node-global-gradle-clean")
@@ -276,6 +483,121 @@ projects under a given directory.  It uses the gradle wrapper to execute the
 clean task of each project.")
     (license license:expat)))
 
+(define-public node-ieee754
+  (package
+    (name "node-ieee754")
+    (version "1.2.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/feross/ieee754")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "19rlg59lavnwsvbblhvrqwinz2wzqlxhddqpwrc3cyqkscjgza7i"))))
+    (build-system node-build-system)
+    (arguments
+     '(#:tests? #f
+       #:phases (modify-phases %standard-phases
+                  (add-after 'patch-dependencies 'delete-dependencies
+                    (lambda _
+                      (delete-dependencies '("airtap" "standard" "tape")))))))
+    (home-page "https://github.com/feross/ieee754")
+    (synopsis "Read/write IEEE754 floating point numbers in Javascript")
+    (description "This package can read and write IEEE754 floating point
+numbers from/to a Buffer or array-like object in Javascript.")
+    (license license:bsd-3)))
+
+(define-public node-inherits
+  (package
+    (name "node-inherits")
+    (version "2.0.4")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/isaacs/inherits")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0cpsr5yqwkxpbbbbl0rwk4mcby6zbx841k2zb4c3gb1579i5wq9p"))))
+    (build-system node-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (add-after 'patch-dependencies 'delete-dependencies
+           (lambda args
+             (delete-dependencies '("tap")))))
+       ;; FIXME: Tests depend on node-tap
+       #:tests? #f))
+    (home-page "https://github.com/isaacs/inherits")
+    (synopsis "Browser-friendly object inheritance")
+    (description "This package provides an alternative implementation of
+Node's @code{inherits} constructor that can be used in browsers, while
+defaulting to Node's implementation otherwise.")
+    (license license:isc)))
+
+(define-public node-irc
+  (package
+    (name "node-irc")
+    (version "0.5.2")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/martynsmith/node-irc")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1ln4qfx20jbwg4cp8lp0vf27m5281z2sz16d15xd6150n26cbi4x"))))
+    (build-system node-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (add-after 'patch-dependencies 'delete-dependencies
+           (lambda args
+             (delete-dependencies
+              `("ansi-color" "faucet" "jscs" "tape")))))
+       #:tests? #f))
+    (inputs
+     (list node-irc-colors))
+    (home-page "https://github.com/martynsmith/node-irc")
+    (synopsis "IRC client library for Node.js")
+    (description "@code{node-irc} is an IRC client library for Node.js.
+It has functions for joining, parting, talking, and many other IRC commands.")
+    (license license:gpl3+)))
+
+(define-public node-irc-colors
+  (package
+    (name "node-irc-colors")
+    (version "1.5.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/fent/irc-colors.js")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0q3y34rbnlc55jcakmdxkicwazyvyph9r6gaf6hi8k7wj2nfwfli"))))
+    (build-system node-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (add-after 'patch-dependencies 'delete-dependencies
+           (lambda args
+             (delete-dependencies `("istanbul" "vows")))))
+       #:tests? #f))
+    (home-page "https://github.com/fent/irc-colors.js")
+    (synopsis "Node.js module providing color and formatting for IRC")
+    (description "@code{node-irc-colors} is a Node.js module that
+allows you to easily use colored output and formatting in IRC bots.
+It contains functions for colours as well as more complex formatting
+such as rainbows.")
+    (license license:expat)))
+
 (define-public node-long-stack-traces
   (package
     (name "node-long-stack-traces")
@@ -347,6 +669,78 @@ random number generator.")
 Javascript.")
     (license license:expat)))
 
+(define-public node-ms
+  (package
+    (name "node-ms")
+    (version "2.1.3")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/vercel/ms")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1l74kmmwffmzdz38lli0v5mdb9p9jmsjxpb48ncknqw2n74cgf08"))))
+    (build-system node-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'patch-dependencies 'delete-dependencies
+           (lambda args
+             (delete-dependencies `("eslint"
+                                    "expect.js"
+                                    "husky"
+                                    "lint-staged"
+                                    "mocha"
+                                    "prettier")))))
+       #:tests? #f))
+    (home-page "https://github.com/vercel/ms")
+    (synopsis "Convert time to milliseconds")
+    (description "Use this package to easily convert various time formats to
+milliseconds.  A number supplied as integer or string is returned as-is, while
+a string consisting of a number and a time unit is converted to milliseconds.")
+    (license license:expat)))
+
+(define-public node-nan
+  (package
+    (name "node-nan")
+    (version "2.15.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/nodejs/nan")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "18xslh9va5ld872scrp5y4251ax9s3c6qh0lnl1200lpzbsxy7yd"))))
+    (build-system node-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'patch-dependencies 'delete-dependencies
+           (lambda args
+             (delete-dependencies
+              '("bindings"
+                "commander"
+                "glob"
+                "request"
+                "node-gyp" ;; would be needed for tests
+                "tap"
+                "xtend")))))
+       ;; tests need tap and other dependencies
+       #:tests? #f))
+    (inputs
+     (list node-readable-stream))
+    (home-page "https://github.com/nodejs/nan")
+    (synopsis "Native Abstractions for Node.js")
+    (description "Native Abstractions for Node.js (``NaN'') provides a header
+file filled with macros and utilities for making add-on development for Node.js
+easier across versions.  The goal is to provide all logic necessary to develop
+native Node.js addons without having to inspect @code{NODE_MODULE_VERSION}.")
+    (license license:expat)))
+
 (define-public node-normalize-path
   (package
     (name "node-normalize-path")
@@ -376,6 +770,38 @@ Can also condense repeated slashes to a single slash and remove trailing
 slashes, unless disabled.")
     (license license:expat)))
 
+(define-public node-once
+  (package
+    (name "node-once")
+    (version "1.4.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/isaacs/once")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1z8dcbf28dqdcp4wb0c53wrs90a07nkrax2c9kk26dsk1dhrnxav"))))
+    (build-system node-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (add-after 'patch-dependencies 'delete-dependencies
+           (lambda args
+             (delete-dependencies '("tap")))))
+       ;; FIXME: Tests depend on node-tap
+       #:tests? #f))
+    (inputs
+     (list node-wrappy))
+    (home-page "https://github.com/isaacs/once")
+    (synopsis "Node.js module to call a function only once")
+    (description
+     "@code{once} is a Node.js module to call a function exactly one time.
+Subsequent calls will either return the cached previous value or throw an error
+if desired.")
+    (license license:isc)))
+
 (define-public node-oop
   ;; No releases, last commit was February 2013.
   (let ((commit "f9d87cda0958886955c14a0a716e57021ed295dc")
@@ -401,6 +827,32 @@ slashes, unless disabled.")
 while being as light-weight and simple as possible.")
       (license license:expat))))
 
+(define-public node-path-key
+  (package
+    (name "node-path-key")
+    (version "4.0.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/sindresorhus/path-key")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "09f4rf70qhq234fcc3pw9nrqic8cb75pk2b6wfnpr96v0r1h8d8g"))))
+    (build-system node-build-system)
+    (arguments
+     '(#:tests? #f
+       #:phases (modify-phases %standard-phases
+                  (add-after 'patch-dependencies 'delete-dependencies
+                    (lambda _
+                      (delete-dependencies '("@types/node" "ava" "tsd" "xo")))))))
+    (home-page "https://github.com/sindresorhus/path-key")
+    (synopsis "Cross-platform utility to compute the PATH environment variable key")
+    (description "@code{path-key} provides an implementation to compute the
+particular cross-platform spellings of the PATH environment variable key.")
+    (license license:expat)))
+
 (define-public node-pbf
   (package
     (name "node-pbf")
@@ -468,358 +920,6 @@ code.")
 written in Javascript.")
     (license license:expat)))
 
-(define-public node-resolve-protobuf-schema
-  (package
-    (name "node-resolve-protobuf-schema")
-    (version "2.1.0")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/mafintosh/resolve-protobuf-schema")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "0zxavr0b2yz9xzp6zlsg5g09i0a6zqb24j12rdvfgph6wd4mzk40"))))
-    (build-system node-build-system)
-    (arguments
-     '(#:tests? #f
-       #:phases (modify-phases %standard-phases
-                  (add-after 'patch-dependencies 'delete-dependencies
-                    (lambda _
-                      (delete-dependencies '("standard" "tape")))))))
-    (inputs (list node-protocol-buffers-schema))
-    (home-page "https://github.com/mafintosh/resolve-protobuf-schema")
-    (synopsis "Resolve protobuf imports")
-    (description
-     "This package can read a protobuf schema from the disk, parse it and
-resolve all imports.")
-    (license license:expat)))
-
-(define-public node-safe-stable-stringify
-  (package
-    (name "node-safe-stable-stringify")
-    (version "2.4.3")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/BridgeAR/safe-stable-stringify")
-             (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32 "008adig8j13rn2a21ngnp770y4zz6yq176ix5rkskjbb8g2qwapg"))))
-    (build-system node-build-system)
-    (arguments
-     '(#:tests? #f
-       #:phases (modify-phases %standard-phases
-                  (add-after 'patch-dependencies 'delete-dependencies
-                    (lambda _
-                      (delete-dependencies '("benchmark" "clone"
-                                             "fast-json-stable-stringify"
-                                             "fast-safe-stringify"
-                                             "fast-stable-stringify"
-                                             "faster-stable-stringify"
-                                             "fastest-stable-stringify"
-                                             "json-stable-stringify"
-                                             "json-stringify-deterministic"
-                                             "json-stringify-safe"
-                                             "standard"
-                                             "tap"
-                                             "typescript"
-                                             "@types/node"
-                                             "@types/json-stable-stringify")))))))
-    (home-page "https://github.com/BridgeAR/safe-stable-stringify")
-    (synopsis "Serialization of javascript objects")
-    (description
-     "Safe, deterministic and fast serialization alternative to JSON.stringify.
-Gracefully handles circular structures and bigint instead of throwing.
-Optional custom circular values, deterministic behavior or strict JSON
-compatibility check.")
-    (license license:expat)))
-
-(define-public node-stack-trace
-  ;; There have been improvements since the last release.
-  (let ((commit "4fd379ee78965ce7ce8820b436f1b1b590d5dbcf")
-        (revision "1"))
-    (package
-      (name "node-stack-trace")
-      (version (git-version "0.0.10" revision commit))
-      (source
-        (origin
-          (method git-fetch)
-          (uri (git-reference
-                 (url "https://github.com/felixge/node-stack-trace")
-                 (commit commit)))
-          (file-name (git-file-name name version))
-          (sha256
-           (base32
-            "1pk19wcpy8i95z5jr77fybd57qj7xmzmniap4dy47vjlmpkqia4i"))))
-      (build-system node-build-system)
-      (arguments
-       '(#:phases
-         (modify-phases %standard-phases
-         (add-before 'check 'skip-intentionally-failing-test
-           (lambda _
-             (substitute* "test/run.js"
-               (("far.include") "far.exclude(/test-parse.js/)\nfar.include"))
-             #t)))))
-      (native-inputs
-       (list node-far node-long-stack-traces))
-      (home-page "https://github.com/felixge/node-stack-trace")
-      (synopsis "Get v8 stack traces as an array of CallSite objects")
-      (description "Get v8 stack traces as an array of CallSite objects.")
-      (license license:expat))))
-
-(define-public node-statsd-parser
-  (package
-    (name "node-statsd-parser")
-    (version "0.0.4")
-    (source
-      (origin
-        (method git-fetch)
-        (uri (git-reference
-               (url "https://github.com/dscape/statsd-parser")
-               (commit version)))
-        (file-name (git-file-name name version))
-        (sha256
-         (base32
-          "049rnczsd6pv6bk282q4w72bhqc5cs562djgr7yncy7lk0wzq5j3"))))
-    (build-system node-build-system)
-    (arguments '(#:tests? #f)) ; No tests.
-    (home-page "https://github.com/dscape/statsd-parser")
-    (synopsis "Streaming parser for the statsd protocol")
-    (description "This package provides a streaming parser for the statsd
-protocol used in @code{node-lynx}.")
-    (license license:asl2.0)))
-
-(define-public node-util-deprecate
-  (package
-    (name "node-util-deprecate")
-    (version "1.0.2")
-    (source
-      (origin
-        (method git-fetch)
-        (uri (git-reference
-               (url "https://github.com/TooTallNate/util-deprecate")
-               (commit version)))
-        (file-name (git-file-name name version))
-        (sha256
-         (base32
-          "1rk94nl3qc7znsk8400bnga30v0m7j2mmvz9ldwjinxv1d3n11xc"))))
-    (build-system node-build-system)
-    (arguments '(#:tests? #f)) ; No test suite.
-    (home-page "https://github.com/TooTallNate/util-deprecate")
-    (synopsis "Node.js `util.deprecate()` function with browser support")
-    (description "This package provides the Node.js @code{util.deprecate()}
-function with browser support.")
-    (license license:expat)))
-
-(define-public node-semver
-  (package
-    (name "node-semver")
-    (version "7.2.1")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/npm/node-semver")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "06biknqb05r9xsmcflm3ygh50pjvdk84x6r79w43kmck4fn3qn5p"))))
-    (build-system node-build-system)
-    (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         (add-after 'patch-dependencies 'delete-dependencies
-           (lambda args
-             (delete-dependencies '("tap")))))
-       ;; FIXME: Tests depend on node-tap
-       #:tests? #f))
-    (home-page "https://github.com/npm/node-semver")
-    (synopsis "Parses semantic versions strings")
-    (description
-     "@code{node-semver} is a JavaScript implementation of the
-@uref{https://semver.org/, SemVer.org} specification.")
-    (license license:isc)))
-
-(define-public node-wrappy
-  (package
-    (name "node-wrappy")
-    (version "1.0.2")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/npm/wrappy")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "1ymlc61cja6v5438vwb04gq8wg2b784lj39zf0g4i36fvgcw9783"))))
-    (build-system node-build-system)
-    (arguments
-     '(#:tests? #f ; FIXME: Tests depend on node-tap
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'patch-dependencies 'delete-dependencies
-           (lambda args
-             (delete-dependencies '("tap")))))))
-    (home-page "https://github.com/npm/wrappy")
-    (synopsis "Callback wrapping utility")
-    (description "@code{wrappy} is a utility for Node.js to wrap callbacks.")
-    (license license:isc)))
-
-(define-public node-once
-  (package
-    (name "node-once")
-    (version "1.4.0")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/isaacs/once")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "1z8dcbf28dqdcp4wb0c53wrs90a07nkrax2c9kk26dsk1dhrnxav"))))
-    (build-system node-build-system)
-    (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         (add-after 'patch-dependencies 'delete-dependencies
-           (lambda args
-             (delete-dependencies '("tap")))))
-       ;; FIXME: Tests depend on node-tap
-       #:tests? #f))
-    (inputs
-     (list node-wrappy))
-    (home-page "https://github.com/isaacs/once")
-    (synopsis "Node.js module to call a function only once")
-    (description
-     "@code{once} is a Node.js module to call a function exactly one time.
-Subsequent calls will either return the cached previous value or throw an error
-if desired.")
-    (license license:isc)))
-
-(define-public node-ieee754
-  (package
-    (name "node-ieee754")
-    (version "1.2.1")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/feross/ieee754")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "19rlg59lavnwsvbblhvrqwinz2wzqlxhddqpwrc3cyqkscjgza7i"))))
-    (build-system node-build-system)
-    (arguments
-     '(#:tests? #f
-       #:phases (modify-phases %standard-phases
-                  (add-after 'patch-dependencies 'delete-dependencies
-                    (lambda _
-                      (delete-dependencies '("airtap" "standard" "tape")))))))
-    (home-page "https://github.com/feross/ieee754")
-    (synopsis "Read/write IEEE754 floating point numbers in Javascript")
-    (description "This package can read and write IEEE754 floating point
-numbers from/to a Buffer or array-like object in Javascript.")
-    (license license:bsd-3)))
-
-(define-public node-inherits
-  (package
-    (name "node-inherits")
-    (version "2.0.4")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/isaacs/inherits")
-             (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32
-         "0cpsr5yqwkxpbbbbl0rwk4mcby6zbx841k2zb4c3gb1579i5wq9p"))))
-    (build-system node-build-system)
-    (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         (add-after 'patch-dependencies 'delete-dependencies
-           (lambda args
-             (delete-dependencies '("tap")))))
-       ;; FIXME: Tests depend on node-tap
-       #:tests? #f))
-    (home-page "https://github.com/isaacs/inherits")
-    (synopsis "Browser-friendly object inheritance")
-    (description "This package provides an alternative implementation of
-Node's @code{inherits} constructor that can be used in browsers, while
-defaulting to Node's implementation otherwise.")
-    (license license:isc)))
-
-(define-public node-safe-buffer
-  (package
-    (name "node-safe-buffer")
-    (version "5.2.1")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/feross/safe-buffer")
-             (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32
-         "0r26m0nl41h90ihnl2xf0cqs6z9z7jb87dl5j8yqb7887r9jlbpi"))))
-    (build-system node-build-system)
-    (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         (add-after 'patch-dependencies 'delete-dependencies
-           (lambda args
-             (delete-dependencies '("tape" "standard")))))
-       #:tests? #f))
-    (home-page "https://github.com/feross/safe-buffer")
-    (synopsis "Buffer creation with explicit semantics")
-    (description "This package provides a drop-in replacement for Node.js
-@code{Buffer} API, which provides newer, explicit constructors (such as
-@code{Buffer.alloc(SIZE)}) in older versions.")
-    (license license:expat)))
-
-(define-public node-string-decoder
-  (package
-    (name "node-string-decoder")
-    (version "1.3.0")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/nodejs/string_decoder")
-             (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32
-         "0xxvyya9fl9rlkqwmxzqzbz4rdr3jgw4vf37hff7cgscxkhg266k"))))
-    (build-system node-build-system)
-    (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         (add-after 'patch-dependencies 'delete-dependencies
-           (lambda args
-             (delete-dependencies
-              '("tap" "core-util-is" "babel-polyfill")))))
-       ;; FIXME: Tests depend on node-tap
-       #:tests? #f))
-    (inputs (list node-safe-buffer node-inherits))
-    (home-page "https://github.com/nodejs/string_decoder")
-    (synopsis "Decode buffers while preserving multi-byte sequences")
-    (description "This package provides a user-land implementation of
-Node-core's @code{string_decoder}, which serves to decode buffers to
-strings so that the decoded string does not contain incomplete multibyte
-sequences.")
-    (license license:expat)))
-
 (define-public node-readable-stream
   (package
     (name "node-readable-stream")
@@ -869,392 +969,103 @@ sequences.")
 that behaves the same across different versions.")
     (license license:expat)))
 
-(define-public node-irc-colors
+(define-public node-resolve-protobuf-schema
   (package
-    (name "node-irc-colors")
-    (version "1.5.0")
+    (name "node-resolve-protobuf-schema")
+    (version "2.1.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
-                    (url "https://github.com/fent/irc-colors.js")
+                    (url "https://github.com/mafintosh/resolve-protobuf-schema")
                     (commit (string-append "v" version))))
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0q3y34rbnlc55jcakmdxkicwazyvyph9r6gaf6hi8k7wj2nfwfli"))))
+                "0zxavr0b2yz9xzp6zlsg5g09i0a6zqb24j12rdvfgph6wd4mzk40"))))
     (build-system node-build-system)
     (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         (add-after 'patch-dependencies 'delete-dependencies
-           (lambda args
-             (delete-dependencies `("istanbul" "vows")))))
-       #:tests? #f))
-    (home-page "https://github.com/fent/irc-colors.js")
-    (synopsis "Node.js module providing color and formatting for IRC")
-    (description "@code{node-irc-colors} is a Node.js module that
-allows you to easily use colored output and formatting in IRC bots.
-It contains functions for colours as well as more complex formatting
-such as rainbows.")
+     '(#:tests? #f
+       #:phases (modify-phases %standard-phases
+                  (add-after 'patch-dependencies 'delete-dependencies
+                    (lambda _
+                      (delete-dependencies '("standard" "tape")))))))
+    (inputs (list node-protocol-buffers-schema))
+    (home-page "https://github.com/mafintosh/resolve-protobuf-schema")
+    (synopsis "Resolve protobuf imports")
+    (description
+     "This package can read a protobuf schema from the disk, parse it and
+resolve all imports.")
     (license license:expat)))
 
-(define-public node-irc
-  (package
-    (name "node-irc")
-    (version "0.5.2")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/martynsmith/node-irc")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "1ln4qfx20jbwg4cp8lp0vf27m5281z2sz16d15xd6150n26cbi4x"))))
-    (build-system node-build-system)
-    (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         (add-after 'patch-dependencies 'delete-dependencies
-           (lambda args
-             (delete-dependencies
-              `("ansi-color" "faucet" "jscs" "tape")))))
-       #:tests? #f))
-    (inputs
-     (list node-irc-colors))
-    (home-page "https://github.com/martynsmith/node-irc")
-    (synopsis "IRC client library for Node.js")
-    (description "@code{node-irc} is an IRC client library for Node.js.
-It has functions for joining, parting, talking, and many other IRC commands.")
-    (license license:gpl3+)))
-
-(define-public node-nan
+(define-public node-safe-buffer
   (package
-    (name "node-nan")
-    (version "2.15.0")
+    (name "node-safe-buffer")
+    (version "5.2.1")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
-             (url "https://github.com/nodejs/nan")
+             (url "https://github.com/feross/safe-buffer")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "18xslh9va5ld872scrp5y4251ax9s3c6qh0lnl1200lpzbsxy7yd"))))
+        (base32
+         "0r26m0nl41h90ihnl2xf0cqs6z9z7jb87dl5j8yqb7887r9jlbpi"))))
     (build-system node-build-system)
     (arguments
-     `(#:phases
+     '(#:phases
        (modify-phases %standard-phases
          (add-after 'patch-dependencies 'delete-dependencies
            (lambda args
-             (delete-dependencies
-              '("bindings"
-                "commander"
-                "glob"
-                "request"
-                "node-gyp" ;; would be needed for tests
-                "tap"
-                "xtend")))))
-       ;; tests need tap and other dependencies
+             (delete-dependencies '("tape" "standard")))))
        #:tests? #f))
-    (inputs
-     (list node-readable-stream))
-    (home-page "https://github.com/nodejs/nan")
-    (synopsis "Native Abstractions for Node.js")
-    (description "Native Abstractions for Node.js (``NaN'') provides a header
-file filled with macros and utilities for making add-on development for Node.js
-easier across versions.  The goal is to provide all logic necessary to develop
-native Node.js addons without having to inspect @code{NODE_MODULE_VERSION}.")
-    (license license:expat)))
-
-(define-public node-addon-api
-  (package
-    (name "node-addon-api")
-    (version "4.2.0")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/nodejs/node-addon-api")
-             (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32 "1bhvfi2m9nxfz418s619914vmidcnrzbjv6l9nid476c3zlpazch"))))
-    (inputs
-     (list python node-safe-buffer))
-    (build-system node-build-system)
-    (arguments
-     `(#:modules
-       ((guix build node-build-system)
-        (srfi srfi-1)
-        (ice-9 match)
-        (guix build utils))
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'patch-dependencies 'delete-dependencies
-           (lambda args
-             (delete-dependencies
-              `("benchmark"
-                "bindings"
-                "clang-format"
-                "eslint"
-                "eslint-config-semistandard"
-                "eslint-config-standard"
-                "eslint-plugin-import"
-                "eslint-plugin-node"
-                "eslint-plugin-promise"
-                "fs-extra"
-                "path"
-                "pre-commit"))))
-         (add-after 'unpack 'skip-js-tests
-           ;; We can't run the js-based tests,
-           ;; but we can still do the C++ parts
-           (lambda args
-             (define new-test-script
-               "echo stopping after pretest on Guix")
-             (with-atomic-json-file-replacement "package.json"
-               (match-lambda
-                 (('@ . pkg-meta-alist)
-                  (cons
-                   '@
-                   (map (match-lambda
-                          (("scripts" '@ . scripts-alist)
-                           `("scripts" @ ,@(map (match-lambda
-                                                  (("test" . _)
-                                                   (cons "test"
-                                                         new-test-script))
-                                                  (other
-                                                   other))
-                                                scripts-alist)))
-                          (other
-                           other))
-                        pkg-meta-alist))))))))))
-    (home-page "https://github.com/nodejs/node-addon-api")
-    (synopsis "Node.js API (Node-API) header-only C++ wrappers")
-    (description "This module contains header-only C++ wrapper classes which
-simplify the use of the C based Node-API provided by Node.js when using C++.
-It provides a C++ object model and exception handling semantics with low
-overhead.
-
-Node-API is an ABI stable C interface provided by Node.js for building native
-addons.  It is intended to insulate native addons from changes in the
-underlying JavaScript engine and allow modules compiled for one version to run
-on later versions of Node.js without recompilation.  The @code{node-addon-api}
-module, which is not part of Node.js, preserves the benefits of the Node-API
-as it consists only of inline code that depends only on the stable API
-provided by Node-API.
-
-It is important to remember that @emph{other} Node.js interfaces such as
-@code{libuv} (included in a project via @code{#include <uv.h>}) are not
-ABI-stable across Node.js major versions.")
+    (home-page "https://github.com/feross/safe-buffer")
+    (synopsis "Buffer creation with explicit semantics")
+    (description "This package provides a drop-in replacement for Node.js
+@code{Buffer} API, which provides newer, explicit constructors (such as
+@code{Buffer.alloc(SIZE)}) in older versions.")
     (license license:expat)))
 
-(define-public node-sqlite3
+(define-public node-safe-stable-stringify
   (package
-    (name "node-sqlite3")
-    (version "5.0.2")
+    (name "node-safe-stable-stringify")
+    (version "2.4.3")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
-             (url "https://github.com/mapbox/node-sqlite3")
+             (url "https://github.com/BridgeAR/safe-stable-stringify")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0sbbzzli282nxyfha10zx0k5m8hdp0sf3ipl59khjb7wm449j86h"))
-       (snippet
-        (with-imported-modules '((guix build utils))
-          #~(begin
-              (use-modules (guix build utils))
-              ;; unbundle sqlite
-              (for-each delete-file-recursively
-                        (find-files "deps"
-                                    (lambda (pth stat)
-                                      (gzip-file? pth)))))))))
-    (inputs
-     (list node-addon-api python sqlite))
+        (base32 "008adig8j13rn2a21ngnp770y4zz6yq176ix5rkskjbb8g2qwapg"))))
     (build-system node-build-system)
     (arguments
-     `(#:modules
-       ((guix build node-build-system)
-        (srfi srfi-1)
-        (ice-9 match)
-        (guix build utils))
-       #:tests? #f ; FIXME: tests depend on node-mocha
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'patch-dependencies 'delete-dependencies
-           (lambda args
-             (delete-dependencies
-              `(;; Normally, this is "built" using @mapbox/node-pre-gyp,
-                ;; which publishes or downloads pre-built binaries or
-                ;; falls back to building from source.  Here, we patch out
-                ;; all of that and just build directly.  It might be
-                ;; better to patch a version of @mapbox/node-pre-gyp that
-                ;; always builds from source, as Debian does, but there
-                ;; are a number of dependencies that need to be packaged
-                ;; or removed.
-                "@mapbox/node-pre-gyp"
-                "node-pre-gyp" ;; deprecated name still used in some places
-                "aws-sdk"
-                "@mapbox/cloudfriend"
-                ;; Confusingly, this is only a dependency because of
-                ;; @mapbox/node-pre-gyp: with that removed,
-                ;; npm will use its own copy:
-                "node-gyp"
-                ;; These we'd like, we just don't have them yet:
-                "eslint"
-                "mocha"))))
-         (add-before 'configure 'npm-config-sqlite
-           ;; We need this step even if we do replace @mapbox/node-pre-gyp
-           ;; because the package expects to build its bundled sqlite
-           (lambda* (#:key inputs #:allow-other-keys)
-             (setenv "npm_config_sqlite" (assoc-ref inputs "sqlite"))))
-         (add-after 'install 'patch-binding-path
-           ;; We replace a file that dynamic searches for the addon using
-           ;; node-pre-gyp (which we don't have) with a version that
-           ;; simply uses the path to the addon we built directly.
-           ;; The exact path is supposed to depend on things like the
-           ;; architecture and napi_build_version, so, to avoid having
-           ;; hard-code the details accurately, we do this after the addon
-           ;; has been built so we can just find where it ended up.
-           (lambda* (#:key outputs #:allow-other-keys)
-             (with-directory-excursion
-                 (search-input-directory outputs
-                                         "lib/node_modules/sqlite3/lib")
-               (match (find-files "binding" "\\.node$")
-                 ((rel-path)
-                  (with-atomic-file-replacement "sqlite3-binding.js"
-                    (lambda (in out)
-                      (format out "var binding = require('./~a');\n" rel-path)
-                      (display "module.exports = exports = binding;\n"
-                               out))))))))
-         (add-after 'patch-dependencies 'avoid-node-pre-gyp
-           (lambda args
-             ;; We need to patch .npmignore before the 'repack phase
-             ;; so that the built addon is installed with in the package.
-             ;; (Upstream assumes node-pre-gyp will download a pre-built
-             ;; version when this package is installed.)
-             (substitute* ".npmignore"
-               (("lib/binding")
-                "#lib/binding # <- patched for Guix"))
-             (with-atomic-json-file-replacement "package.json"
-               (match-lambda
-                 (('@ . pkg-meta-alist)
-                  (match (assoc-ref pkg-meta-alist "binary")
-                    (('@ . binary-alist)
-                     ;; When it builds from source, node-pre-gyp supplies
-                     ;; module_name and module_path based on the entries under
-                     ;; "binary" from "package.json", so this package's
-                     ;; "binding.gyp" doesn't define them. Thus, we also need
-                     ;; to supply them. The GYP_DEFINES environment variable
-                     ;; turns out to be the easiest way to make sure they are
-                     ;; propagated from npm to node-gyp to gyp.
-                     (setenv "GYP_DEFINES"
-                             (string-append
-                              "module_name="
-                              (assoc-ref binary-alist "module_name")
-                              " "
-                              "module_path="
-                              (assoc-ref binary-alist "module_path")))))
-                  ;; We need to remove the install script from "package.json",
-                  ;; as it would try to use node-pre-gyp and would block the
-                  ;; automatic building performed by `npm install`.
-                  (cons '@ (map (match-lambda
-                                  (("scripts" @ . scripts-alist)
-                                   `("scripts" @ ,@(filter (match-lambda
-                                                             (("install" . _)
-                                                              #f)
-                                                             (_
-                                                              #t))
-                                                           scripts-alist)))
-                                  (other
-                                   other))
-                                pkg-meta-alist))))))))))
-    (home-page "https://github.com/mapbox/node-sqlite3")
-    (synopsis "Node.js bindings for SQLite3")
+     '(#:tests? #f
+       #:phases (modify-phases %standard-phases
+                  (add-after 'patch-dependencies 'delete-dependencies
+                    (lambda _
+                      (delete-dependencies '("benchmark" "clone"
+                                             "fast-json-stable-stringify"
+                                             "fast-safe-stringify"
+                                             "fast-stable-stringify"
+                                             "faster-stable-stringify"
+                                             "fastest-stable-stringify"
+                                             "json-stable-stringify"
+                                             "json-stringify-deterministic"
+                                             "json-stringify-safe"
+                                             "standard"
+                                             "tap"
+                                             "typescript"
+                                             "@types/node"
+                                             "@types/json-stable-stringify")))))))
+    (home-page "https://github.com/BridgeAR/safe-stable-stringify")
+    (synopsis "Serialization of javascript objects")
     (description
-     "@code{node-sqlite3} provides a set of a Node.js bindings for interacting
-with SQLite3 databases.")
-     (license license:bsd-3)))
-
-(define-public node-file-uri-to-path
-  (package
-    (name "node-file-uri-to-path")
-    (version "2.0.0")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/TooTallNate/file-uri-to-path")
-             (commit version)))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32 "08l779az44czm12xdhgcrnzpqw34s59hbrlfphs7g9y2k26drqav"))))
-    (native-inputs
-     (list esbuild))
-    (build-system node-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'patch-dependencies 'delete-dependencies
-           (lambda args
-             (delete-dependencies `("@types/mocha"
-                                    "@types/node"
-                                    "@typescript-eslint/eslint-plugin"
-                                    "@typescript-eslint/parser"
-                                    "cpy-cli"
-                                    "eslint"
-                                    "eslint-config-airbnb"
-                                    "eslint-config-prettier"
-                                    "eslint-import-resolver-typescript"
-                                    "eslint-plugin-import"
-                                    "eslint-plugin-jsx-a11y"
-                                    "eslint-plugin-react"
-                                    "mocha"
-                                    "rimraf"
-                                    "typescript"))))
-         (replace 'build
-           (lambda* (#:key inputs native-inputs #:allow-other-keys)
-             (copy-recursively "src" "dist")
-             (invoke (search-input-file (or native-inputs inputs)
-                                        "/bin/esbuild")
-                     "dist/index.ts"
-                     "--outfile=dist/src/index.js"
-                     "--format=cjs"
-                     "--sourcemap"
-                     "--platform=node"))))
-       #:tests? #f))
-    (home-page "https://github.com/TooTallNate/file-uri-to-path")
-    (synopsis "Convert a @code{file:} URI to a file path")
-    (description "This package provides a function to convert a @code{file:}
-URI to a file path.  It accepts a @code{file:} URI and returns a file path
-suitable for use with the @code{fs} module functions.")
-    (license license:expat)))
-
-(define-public node-bindings
-  (package
-    (name "node-bindings")
-    (version "1.5.0")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/TooTallNate/node-bindings")
-             (commit version)))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32 "100gp6kpjvd4j1dqnp0sbjr1hqx5mz7r61q9qy527jyhk9mj47wk"))))
-    (inputs
-     (list node-file-uri-to-path))
-    (build-system node-build-system)
-    (arguments
-     ;; there are no tests
-     `(#:tests? #f))
-    (home-page "https://github.com/TooTallNate/node-bindings")
-    (synopsis "Locate native addons")
-    (description "This package provides a helper module to locate native
-addons in a wide array of potential locations.")
+     "Safe, deterministic and fast serialization alternative to JSON.stringify.
+Gracefully handles circular structures and bigint instead of throwing.
+Optional custom circular values, deterministic behavior or strict JSON
+compatibility check.")
     (license license:expat)))
 
 (define-public node-segfault-handler
@@ -1286,97 +1097,84 @@ code modules and getting stack traces when things go wrong.  If a
 both @file{stderr} and to a timestamped file.")
     (license license:bsd-3)))
 
-(define-public node-ms
+(define-public node-semver
   (package
-    (name "node-ms")
-    (version "2.1.3")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/vercel/ms")
-             (commit version)))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32 "1l74kmmwffmzdz38lli0v5mdb9p9jmsjxpb48ncknqw2n74cgf08"))))
+    (name "node-semver")
+    (version "7.2.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/npm/node-semver")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "06biknqb05r9xsmcflm3ygh50pjvdk84x6r79w43kmck4fn3qn5p"))))
     (build-system node-build-system)
     (arguments
-     `(#:phases
+     '(#:phases
        (modify-phases %standard-phases
          (add-after 'patch-dependencies 'delete-dependencies
            (lambda args
-             (delete-dependencies `("eslint"
-                                    "expect.js"
-                                    "husky"
-                                    "lint-staged"
-                                    "mocha"
-                                    "prettier")))))
+             (delete-dependencies '("tap")))))
+       ;; FIXME: Tests depend on node-tap
        #:tests? #f))
-    (home-page "https://github.com/vercel/ms")
-    (synopsis "Convert time to milliseconds")
-    (description "Use this package to easily convert various time formats to
-milliseconds.  A number supplied as integer or string is returned as-is, while
-a string consisting of a number and a time unit is converted to milliseconds.")
-    (license license:expat)))
+    (home-page "https://github.com/npm/node-semver")
+    (synopsis "Parses semantic versions strings")
+    (description
+     "@code{node-semver} is a JavaScript implementation of the
+@uref{https://semver.org/, SemVer.org} specification.")
+    (license license:isc)))
 
-(define-public node-debug
+(define-public node-serialport
   (package
-    (name "node-debug")
-    (version "4.3.3")
+    (name "node-serialport")
+    (version "9.2.7")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
-             (url "https://github.com/debug-js/debug")
-             (commit version)))
-       (file-name (git-file-name name version))
+             (url "https://github.com/serialport/node-serialport")
+             (commit (string-append "v" version))))
        (sha256
-        (base32 "0ji0dmdl2xkgxqxvd6xjy7k3mmknmhvqjgc40vyly9ka1mpf20vb"))))
+        (base32 "0x7zm59a5ff5yygjyw15xs3r5m3rb8av1yfrh4snn44mrwq87yg8"))))
     (inputs
-     (list node-ms))
+     (list node-serialport-bindings
+           node-serialport-parser-delimiter
+           node-serialport-parser-readline
+           node-serialport-parser-regex
+           node-serialport-parser-ready
+           node-serialport-parser-inter-byte-timeout
+           node-serialport-parser-cctalk
+           node-serialport-parser-byte-length
+           node-serialport-stream
+           node-debug))
     (build-system node-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (add-after 'patch-dependencies 'delete-dependencies
            (lambda args
-             (delete-dependencies `("brfs"
-                                    "browserify"
-                                    "coveralls"
-                                    "istanbul"
-                                    "karma"
-                                    "karma-browserify"
-                                    "karma-chrome-launcher"
-                                    "karma-mocha"
-                                    "mocha"
-                                    "mocha-lcov-reporter"
-                                    "xo"
-                                    "supports-color")))))
+             (delete-dependencies `("@serialport/binding-mock"))))
+         (add-after 'unpack 'chdir
+           (lambda args
+             (chdir "packages/serialport"))))
        #:tests? #f))
-    (home-page "https://github.com/debug-js/debug")
-    (synopsis "Debugging utility for Node.js")
-    (description "The @code{debug} module exposes a function, which if called
-with a module name as argument provides a function that writes debug output to
-@code{console.error} under that module name.  This output can be controlled in
-a more fine-grained manner by binding the @env{DEBUG} variable.")
+    (home-page "https://serialport.io")
+    (synopsis "Node.js package to access serial ports")
+    (description "Node SerialPort is a modular suite of Node.js packages for
+accessing serial ports.  This package is the recommended entry point for most
+projects.  It combines a high-level Node.js stream interface with a useful
+default set of parsers and bindings.")
     (license license:expat)))
 
 (define-public node-serialport-binding-abstract
   (package
+    (inherit node-serialport)
     (name "node-serialport-binding-abstract")
     (version "9.2.3")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/serialport/node-serialport")
-             (commit "v9.2.7")))
-       (file-name (git-file-name "serialport-monorepo" version))
-       (sha256
-        (base32 "0x7zm59a5ff5yygjyw15xs3r5m3rb8av1yfrh4snn44mrwq87yg8"))))
     (inputs
      (list node-debug))
-    (build-system node-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -1384,7 +1182,6 @@ a more fine-grained manner by binding the @env{DEBUG} variable.")
            (lambda args
              (chdir "packages/binding-abstract"))))
        #:tests? #f))
-    (home-page "https://serialport.io")
     (synopsis "Abstract base class for Node SerialPort bindings")
     (description "Node SerialPort is a modular suite of Node.js packages for
 accessing serial ports.  The Guix package @code{node-serialport} provides the
@@ -1392,57 +1189,11 @@ recommended high-level interface.
 
 This package provides the @code{AbstractBinding} class, the base for all Node
 SerialPort bindings.  You wouldn't use this class directly, but instead extend
-it to make a new binding for a different platform or underling technology.")
-    (license license:expat)))
-
-(define-public node-serialport-parser-delimiter
-  (package
-    (inherit node-serialport-binding-abstract)
-    (name "node-serialport-parser-delimiter")
-    (version "9.2.4")
-    (inputs `())
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'chdir
-           (lambda args
-             (chdir "packages/parser-delimiter"))))
-       #:tests? #f))
-    (synopsis "Node SerialPort parser to split data on a delimiter")
-    (description "Node SerialPort is a modular suite of Node.js packages for
-accessing serial ports.  The Guix package @code{node-serialport} provides the
-recommended high-level interface.
-
-Parsers are used to take raw binary data and transform them into usable
-messages.  This package provides @code{Delimiter}, a parser that emits data
-each time a specified byte sequence is received.")))
-
-(define-public node-serialport-parser-readline
-  (package
-    (inherit node-serialport-binding-abstract)
-    (name "node-serialport-parser-readline")
-    (version "9.2.4")
-    (inputs
-     (list node-serialport-parser-delimiter))
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'chdir
-           (lambda args
-             (chdir "packages/parser-readline"))))
-       #:tests? #f))
-    (synopsis "Node SerialPort parser to split data on newlines")
-    (description "Node SerialPort is a modular suite of Node.js packages for
-accessing serial ports.  The Guix package @code{node-serialport} provides the
-recommended high-level interface.
-
-Parsers are used to take raw binary data and transform them into usable
-messages.  This package provides @code{Readline}, a parser that emits data
-after a (configurable) newline delimiter is received.")))
+it to make a new binding for a different platform or underling technology.")))
 
 (define-public node-serialport-bindings
   (package
-    (inherit node-serialport-binding-abstract)
+    (inherit node-serialport)
     (name "node-serialport-bindings")
     (version "9.2.7")
     (native-inputs
@@ -1496,10 +1247,10 @@ talk to the underlying system.  You never have to use @code{Binding} objects
 directly.  There is also a @code{MockBinding} available (but not yet packaged
 for Guix) to assist with testing.")))
 
-(define-public node-serialport-parser-regex
+(define-public node-serialport-parser-byte-length
   (package
-    (inherit node-serialport-binding-abstract)
-    (name "node-serialport-parser-regex")
+    (inherit node-serialport)
+    (name "node-serialport-parser-byte-length")
     (version "9.2.4")
     (inputs `())
     (arguments
@@ -1507,21 +1258,21 @@ for Guix) to assist with testing.")))
        (modify-phases %standard-phases
          (add-after 'unpack 'chdir
            (lambda args
-             (chdir "packages/parser-regex"))))
+             (chdir "packages/parser-byte-length"))))
        #:tests? #f))
-    (synopsis "Node SerialPort parser to split data on a regular expression")
+    (synopsis "Node SerialPort parser for fixed-length buffers")
     (description "Node SerialPort is a modular suite of Node.js packages for
 accessing serial ports.  The Guix package @code{node-serialport} provides the
 recommended high-level interface.
 
 Parsers are used to take raw binary data and transform them into usable
-messages.  This package provides @code{Regex}, a parser that uses a regular
-expression to split the incoming text.")))
+messages.  This package provides @code{ByteLength}, a parser that emits data
+as a buffer every time a specified number of bytes are received.")))
 
-(define-public node-serialport-parser-ready
+(define-public node-serialport-parser-cctalk
   (package
-    (inherit node-serialport-binding-abstract)
-    (name "node-serialport-parser-ready")
+    (inherit node-serialport)
+    (name "node-serialport-parser-cctalk")
     (version "9.2.4")
     (inputs `())
     (arguments
@@ -1529,21 +1280,43 @@ expression to split the incoming text.")))
        (modify-phases %standard-phases
          (add-after 'unpack 'chdir
            (lambda args
-             (chdir "packages/parser-ready"))))
+             (chdir "packages/parser-cctalk"))))
        #:tests? #f))
-    (synopsis "Node SerialPort parser to wait for specified byte sequence")
+    (synopsis "Node SerialPort parser for the ccTalk protocol")
     (description "Node SerialPort is a modular suite of Node.js packages for
 accessing serial ports.  The Guix package @code{node-serialport} provides the
 recommended high-level interface.
 
 Parsers are used to take raw binary data and transform them into usable
-messages.  This package provides @code{Ready}, a parser that waits for a
-specified sequence of ``ready'' bytes before emitting a ready event and
-emitting data events.")))
+messages.  This package provides @code{CCTalk}, which emits packets for the
+ccTalk protocol (an open standard for currency detectors) as they are
+received.")))
+
+(define-public node-serialport-parser-delimiter
+  (package
+    (inherit node-serialport)
+    (name "node-serialport-parser-delimiter")
+    (version "9.2.4")
+    (inputs `())
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'chdir
+           (lambda args
+             (chdir "packages/parser-delimiter"))))
+       #:tests? #f))
+    (synopsis "Node SerialPort parser to split data on a delimiter")
+    (description "Node SerialPort is a modular suite of Node.js packages for
+accessing serial ports.  The Guix package @code{node-serialport} provides the
+recommended high-level interface.
+
+Parsers are used to take raw binary data and transform them into usable
+messages.  This package provides @code{Delimiter}, a parser that emits data
+each time a specified byte sequence is received.")))
 
 (define-public node-serialport-parser-inter-byte-timeout
   (package
-    (inherit node-serialport-binding-abstract)
+    (inherit node-serialport)
     (name "node-serialport-parser-inter-byte-timeout")
     (version "9.2.4")
     (inputs `())
@@ -1563,10 +1336,33 @@ Parsers are used to take raw binary data and transform them into usable
 messages.  This package provides @code{InterByteTimeout}, a parser that emits
 data if there is a pause between packets for the specified amount of time.")))
 
-(define-public node-serialport-parser-cctalk
+(define-public node-serialport-parser-readline
   (package
-    (inherit node-serialport-binding-abstract)
-    (name "node-serialport-parser-cctalk")
+    (inherit node-serialport)
+    (name "node-serialport-parser-readline")
+    (version "9.2.4")
+    (inputs
+     (list node-serialport-parser-delimiter))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'chdir
+           (lambda args
+             (chdir "packages/parser-readline"))))
+       #:tests? #f))
+    (synopsis "Node SerialPort parser to split data on newlines")
+    (description "Node SerialPort is a modular suite of Node.js packages for
+accessing serial ports.  The Guix package @code{node-serialport} provides the
+recommended high-level interface.
+
+Parsers are used to take raw binary data and transform them into usable
+messages.  This package provides @code{Readline}, a parser that emits data
+after a (configurable) newline delimiter is received.")))
+
+(define-public node-serialport-parser-ready
+  (package
+    (inherit node-serialport)
+    (name "node-serialport-parser-ready")
     (version "9.2.4")
     (inputs `())
     (arguments
@@ -1574,22 +1370,22 @@ data if there is a pause between packets for the specified amount of time.")))
        (modify-phases %standard-phases
          (add-after 'unpack 'chdir
            (lambda args
-             (chdir "packages/parser-cctalk"))))
+             (chdir "packages/parser-ready"))))
        #:tests? #f))
-    (synopsis "Node SerialPort parser for the ccTalk protocol")
+    (synopsis "Node SerialPort parser to wait for specified byte sequence")
     (description "Node SerialPort is a modular suite of Node.js packages for
 accessing serial ports.  The Guix package @code{node-serialport} provides the
 recommended high-level interface.
 
 Parsers are used to take raw binary data and transform them into usable
-messages.  This package provides @code{CCTalk}, which emits packets for the
-ccTalk protocol (an open standard for currency detectors) as they are
-received.")))
+messages.  This package provides @code{Ready}, a parser that waits for a
+specified sequence of ``ready'' bytes before emitting a ready event and
+emitting data events.")))
 
-(define-public node-serialport-parser-byte-length
+(define-public node-serialport-parser-regex
   (package
-    (inherit node-serialport-binding-abstract)
-    (name "node-serialport-parser-byte-length")
+    (inherit node-serialport)
+    (name "node-serialport-parser-regex")
     (version "9.2.4")
     (inputs `())
     (arguments
@@ -1597,20 +1393,20 @@ received.")))
        (modify-phases %standard-phases
          (add-after 'unpack 'chdir
            (lambda args
-             (chdir "packages/parser-byte-length"))))
+             (chdir "packages/parser-regex"))))
        #:tests? #f))
-    (synopsis "Node SerialPort parser for fixed-length buffers")
+    (synopsis "Node SerialPort parser to split data on a regular expression")
     (description "Node SerialPort is a modular suite of Node.js packages for
 accessing serial ports.  The Guix package @code{node-serialport} provides the
 recommended high-level interface.
 
 Parsers are used to take raw binary data and transform them into usable
-messages.  This package provides @code{ByteLength}, a parser that emits data
-as a buffer every time a specified number of bytes are received.")))
+messages.  This package provides @code{Regex}, a parser that uses a regular
+expression to split the incoming text.")))
 
 (define-public node-serialport-stream
   (package
-    (inherit node-serialport-binding-abstract)
+    (inherit node-serialport)
     (name "node-serialport-stream")
     (version "9.2.4")
     (inputs
@@ -1636,38 +1432,270 @@ Node.js Stream API.  The stream is a duplex stream, allowing for reading and
 writing.  It has additional methods for managing the SerialPort
 connection.")))
 
-(define-public node-serialport
+(define-public node-sqlite3
   (package
-    (inherit node-serialport-binding-abstract)
-    (name "node-serialport")
-    (version "9.2.7")
+    (name "node-sqlite3")
+    (version "5.0.2")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/mapbox/node-sqlite3")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0sbbzzli282nxyfha10zx0k5m8hdp0sf3ipl59khjb7wm449j86h"))
+       (snippet
+        (with-imported-modules '((guix build utils))
+          #~(begin
+              (use-modules (guix build utils))
+              ;; unbundle sqlite
+              (for-each delete-file-recursively
+                        (find-files "deps"
+                                    (lambda (pth stat)
+                                      (gzip-file? pth)))))))))
     (inputs
-     (list node-serialport-bindings
-           node-serialport-parser-delimiter
-           node-serialport-parser-readline
-           node-serialport-parser-regex
-           node-serialport-parser-ready
-           node-serialport-parser-inter-byte-timeout
-           node-serialport-parser-cctalk
-           node-serialport-parser-byte-length
-           node-serialport-stream
-           node-debug))
+     (list node-addon-api python sqlite))
+    (build-system node-build-system)
     (arguments
-     `(#:phases
+     `(#:modules
+       ((guix build node-build-system)
+        (srfi srfi-1)
+        (ice-9 match)
+        (guix build utils))
+       #:tests? #f ; FIXME: tests depend on node-mocha
+       #:phases
        (modify-phases %standard-phases
          (add-after 'patch-dependencies 'delete-dependencies
            (lambda args
-             (delete-dependencies `("@serialport/binding-mock"))
-             ))
-         (add-after 'unpack 'chdir
+             (delete-dependencies
+              `(;; Normally, this is "built" using @mapbox/node-pre-gyp,
+                ;; which publishes or downloads pre-built binaries or
+                ;; falls back to building from source.  Here, we patch out
+                ;; all of that and just build directly.  It might be
+                ;; better to patch a version of @mapbox/node-pre-gyp that
+                ;; always builds from source, as Debian does, but there
+                ;; are a number of dependencies that need to be packaged
+                ;; or removed.
+                "@mapbox/node-pre-gyp"
+                "node-pre-gyp" ;; deprecated name still used in some places
+                "aws-sdk"
+                "@mapbox/cloudfriend"
+                ;; Confusingly, this is only a dependency because of
+                ;; @mapbox/node-pre-gyp: with that removed,
+                ;; npm will use its own copy:
+                "node-gyp"
+                ;; These we'd like, we just don't have them yet:
+                "eslint"
+                "mocha"))))
+         (add-before 'configure 'npm-config-sqlite
+           ;; We need this step even if we do replace @mapbox/node-pre-gyp
+           ;; because the package expects to build its bundled sqlite
+           (lambda* (#:key inputs #:allow-other-keys)
+             (setenv "npm_config_sqlite" (assoc-ref inputs "sqlite"))))
+         (add-after 'install 'patch-binding-path
+           ;; We replace a file that dynamic searches for the addon using
+           ;; node-pre-gyp (which we don't have) with a version that
+           ;; simply uses the path to the addon we built directly.
+           ;; The exact path is supposed to depend on things like the
+           ;; architecture and napi_build_version, so, to avoid having
+           ;; hard-code the details accurately, we do this after the addon
+           ;; has been built so we can just find where it ended up.
+           (lambda* (#:key outputs #:allow-other-keys)
+             (with-directory-excursion
+                 (search-input-directory outputs
+                                         "lib/node_modules/sqlite3/lib")
+               (match (find-files "binding" "\\.node$")
+                 ((rel-path)
+                  (with-atomic-file-replacement "sqlite3-binding.js"
+                    (lambda (in out)
+                      (format out "var binding = require('./~a');\n" rel-path)
+                      (display "module.exports = exports = binding;\n"
+                               out))))))))
+         (add-after 'patch-dependencies 'avoid-node-pre-gyp
            (lambda args
-             (chdir "packages/serialport"))))
+             ;; We need to patch .npmignore before the 'repack phase
+             ;; so that the built addon is installed with in the package.
+             ;; (Upstream assumes node-pre-gyp will download a pre-built
+             ;; version when this package is installed.)
+             (substitute* ".npmignore"
+               (("lib/binding")
+                "#lib/binding # <- patched for Guix"))
+             (with-atomic-json-file-replacement "package.json"
+               (match-lambda
+                 (('@ . pkg-meta-alist)
+                  (match (assoc-ref pkg-meta-alist "binary")
+                    (('@ . binary-alist)
+                     ;; When it builds from source, node-pre-gyp supplies
+                     ;; module_name and module_path based on the entries under
+                     ;; "binary" from "package.json", so this package's
+                     ;; "binding.gyp" doesn't define them. Thus, we also need
+                     ;; to supply them. The GYP_DEFINES environment variable
+                     ;; turns out to be the easiest way to make sure they are
+                     ;; propagated from npm to node-gyp to gyp.
+                     (setenv "GYP_DEFINES"
+                             (string-append
+                              "module_name="
+                              (assoc-ref binary-alist "module_name")
+                              " "
+                              "module_path="
+                              (assoc-ref binary-alist "module_path")))))
+                  ;; We need to remove the install script from "package.json",
+                  ;; as it would try to use node-pre-gyp and would block the
+                  ;; automatic building performed by `npm install`.
+                  (cons '@ (map (match-lambda
+                                  (("scripts" @ . scripts-alist)
+                                   `("scripts" @ ,@(filter (match-lambda
+                                                             (("install" . _)
+                                                              #f)
+                                                             (_
+                                                              #t))
+                                                           scripts-alist)))
+                                  (other
+                                   other))
+                                pkg-meta-alist))))))))))
+    (home-page "https://github.com/mapbox/node-sqlite3")
+    (synopsis "Node.js bindings for SQLite3")
+    (description
+     "@code{node-sqlite3} provides a set of a Node.js bindings for interacting
+with SQLite3 databases.")
+     (license license:bsd-3)))
+
+(define-public node-stack-trace
+  ;; There have been improvements since the last release.
+  (let ((commit "4fd379ee78965ce7ce8820b436f1b1b590d5dbcf")
+        (revision "1"))
+    (package
+      (name "node-stack-trace")
+      (version (git-version "0.0.10" revision commit))
+      (source
+        (origin
+          (method git-fetch)
+          (uri (git-reference
+                 (url "https://github.com/felixge/node-stack-trace")
+                 (commit commit)))
+          (file-name (git-file-name name version))
+          (sha256
+           (base32
+            "1pk19wcpy8i95z5jr77fybd57qj7xmzmniap4dy47vjlmpkqia4i"))))
+      (build-system node-build-system)
+      (arguments
+       '(#:phases
+         (modify-phases %standard-phases
+         (add-before 'check 'skip-intentionally-failing-test
+           (lambda _
+             (substitute* "test/run.js"
+               (("far.include") "far.exclude(/test-parse.js/)\nfar.include"))
+             #t)))))
+      (native-inputs
+       (list node-far node-long-stack-traces))
+      (home-page "https://github.com/felixge/node-stack-trace")
+      (synopsis "Get v8 stack traces as an array of CallSite objects")
+      (description "Get v8 stack traces as an array of CallSite objects.")
+      (license license:expat))))
+
+(define-public node-statsd-parser
+  (package
+    (name "node-statsd-parser")
+    (version "0.0.4")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/dscape/statsd-parser")
+               (commit version)))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32
+          "049rnczsd6pv6bk282q4w72bhqc5cs562djgr7yncy7lk0wzq5j3"))))
+    (build-system node-build-system)
+    (arguments '(#:tests? #f)) ; No tests.
+    (home-page "https://github.com/dscape/statsd-parser")
+    (synopsis "Streaming parser for the statsd protocol")
+    (description "This package provides a streaming parser for the statsd
+protocol used in @code{node-lynx}.")
+    (license license:asl2.0)))
+
+(define-public node-string-decoder
+  (package
+    (name "node-string-decoder")
+    (version "1.3.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/nodejs/string_decoder")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0xxvyya9fl9rlkqwmxzqzbz4rdr3jgw4vf37hff7cgscxkhg266k"))))
+    (build-system node-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (add-after 'patch-dependencies 'delete-dependencies
+           (lambda args
+             (delete-dependencies
+              '("tap" "core-util-is" "babel-polyfill")))))
+       ;; FIXME: Tests depend on node-tap
        #:tests? #f))
-    (synopsis "Node.js package to access serial ports")
-    (description "Node SerialPort is a modular suite of Node.js packages for
-accessing serial ports.  This package is the recommended entry point for most
-projects.  It combines a high-level Node.js stream interface with a useful
-default set of parsers and bindings.")))
+    (inputs (list node-safe-buffer node-inherits))
+    (home-page "https://github.com/nodejs/string_decoder")
+    (synopsis "Decode buffers while preserving multi-byte sequences")
+    (description "This package provides a user-land implementation of
+Node-core's @code{string_decoder}, which serves to decode buffers to
+strings so that the decoded string does not contain incomplete multibyte
+sequences.")
+    (license license:expat)))
+
+(define-public node-util-deprecate
+  (package
+    (name "node-util-deprecate")
+    (version "1.0.2")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/TooTallNate/util-deprecate")
+               (commit version)))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32
+          "1rk94nl3qc7znsk8400bnga30v0m7j2mmvz9ldwjinxv1d3n11xc"))))
+    (build-system node-build-system)
+    (arguments '(#:tests? #f)) ; No test suite.
+    (home-page "https://github.com/TooTallNate/util-deprecate")
+    (synopsis "Node.js `util.deprecate()` function with browser support")
+    (description "This package provides the Node.js @code{util.deprecate()}
+function with browser support.")
+    (license license:expat)))
+
+(define-public node-wrappy
+  (package
+    (name "node-wrappy")
+    (version "1.0.2")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/npm/wrappy")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1ymlc61cja6v5438vwb04gq8wg2b784lj39zf0g4i36fvgcw9783"))))
+    (build-system node-build-system)
+    (arguments
+     '(#:tests? #f ; FIXME: Tests depend on node-tap
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'patch-dependencies 'delete-dependencies
+           (lambda args
+             (delete-dependencies '("tap")))))))
+    (home-page "https://github.com/npm/wrappy")
+    (synopsis "Callback wrapping utility")
+    (description "@code{wrappy} is a utility for Node.js to wrap callbacks.")
+    (license license:isc)))
 
 (define-public node-yazl
   (package
@@ -1702,3 +1730,8 @@ files in RAM at once.
 @item Prefer to open input files one at a time than all at once.
 @end enumerate")
     (license license:expat)))
+
+;;;
+;;; Avoid adding new packages to the end of this file. To reduce the chances
+;;; of a merge conflict, place them above in alphabetic order.
+;;;