summaryrefslogtreecommitdiff
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.scm935
1 files changed, 912 insertions, 23 deletions
diff --git a/gnu/packages/node-xyz.scm b/gnu/packages/node-xyz.scm
index 9a0be96852..87892410f9 100644
--- a/gnu/packages/node-xyz.scm
+++ b/gnu/packages/node-xyz.scm
@@ -3,6 +3,7 @@
;;; Copyright © 2020 Giacomo Leidi <goodoldpaul@autistici.org>
;;; Copyright © 2021 Noisytoot <noisytoot@disroot.org>
;;; Copyright © 2021 Charles <charles.b.jackson@protonmail.com>
+;;; Copyright © 2021 Philip McGrath <philip@philipmcgrath.com>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -21,6 +22,10 @@
(define-module (gnu packages node-xyz)
#:use-module ((guix licenses) #:prefix license:)
+ #:use-module (gnu packages sqlite)
+ #:use-module (gnu packages python)
+ #:use-module (gnu packages web)
+ #:use-module (guix gexp)
#:use-module (guix packages)
#:use-module (guix git-download)
#:use-module (guix build-system node))
@@ -167,7 +172,7 @@ user-land JavaScript.")
(arguments '(#:tests? #f)) ; No tests.
(home-page "http://www.enchantedage.com/node-mersenne")
(synopsis "Node.js module for generating Mersenne Twister random numbers")
- (description "Thix package provides a node.js port of the Mersenne Twister
+ (description "This package provides a node.js port of the Mersenne Twister
random number generator.")
(license license:bsd-3)))
@@ -288,11 +293,13 @@ function with browser support.")
"06biknqb05r9xsmcflm3ygh50pjvdk84x6r79w43kmck4fn3qn5p"))))
(build-system node-build-system)
(arguments
- '(#:tests? #f ; FIXME: Tests depend on node-tap
- #:phases
+ '(#:phases
(modify-phases %standard-phases
- ;; The only dependency to check for is tap, which we don't have.
- (delete 'configure))))
+ (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
@@ -318,8 +325,9 @@ function with browser support.")
'(#:tests? #f ; FIXME: Tests depend on node-tap
#:phases
(modify-phases %standard-phases
- ;; The only dependency to check for is tap, which we don't have.
- (delete 'configure))))
+ (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.")
@@ -340,13 +348,13 @@ function with browser support.")
"1z8dcbf28dqdcp4wb0c53wrs90a07nkrax2c9kk26dsk1dhrnxav"))))
(build-system node-build-system)
(arguments
- '(#:tests? #f ; FIXME: tests depend on node-tap
- #:phases
+ '(#:phases
(modify-phases %standard-phases
- ;; The default configure phase fails due to tap being missing, as we do
- ;; not have tap packaged yet. It is used only for tests. This package
- ;; still works as a dependency of node-glob and node-inflight.
- (delete 'configure))))
+ (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")
@@ -357,6 +365,147 @@ Subsequent calls will either return the cached previous value or throw an error
if desired.")
(license license:isc)))
+(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} constructer 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")
+ (version "3.6.0")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/nodejs/readable-stream")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "0ybl4cdgsm9c5jq3xq8s01201jk8w0yakh63hlclsfbcdfqhd9ri"))))
+ (build-system node-build-system)
+ (arguments
+ `(#:phases
+ (modify-phases %standard-phases
+ (add-after 'patch-dependencies 'delete-dependencies
+ (lambda args
+ (delete-dependencies `("@babel/cli"
+ "@babel/core"
+ "@babel/polyfill"
+ "@babel/preset-env"
+ "airtap"
+ "assert"
+ "bl"
+ "deep-strict-equal"
+ "events.once"
+ "glob"
+ "gunzip-maybe"
+ "hyperquest"
+ "lolex"
+ "nyc"
+ "pump"
+ "rimraf"
+ "tap"
+ "tape"
+ "tar-fs"
+ "util-promisify")))))
+ #:tests? #f))
+ (inputs (list node-util-deprecate node-string-decoder node-inherits))
+ (home-page "https://github.com/nodejs/readable-stream")
+ (synopsis "Node.js core streams for userland")
+ (description
+ "@code{readable-stream} provides an implementation of Node.js core streams
+that behaves the same across different versions.")
+ (license license:expat)))
+
(define-public node-irc-colors
(package
(name "node-irc-colors")
@@ -372,12 +521,12 @@ if desired.")
"0q3y34rbnlc55jcakmdxkicwazyvyph9r6gaf6hi8k7wj2nfwfli"))))
(build-system node-build-system)
(arguments
- '(#:tests? #f ; FIXME: tests depend on node-istanbul
- #:phases
+ '(#:phases
(modify-phases %standard-phases
- ;; The default configure phase fails due to various packages
- ;; being missing, as we don't have them packaged yet.
- (delete 'configure))))
+ (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
@@ -401,12 +550,13 @@ such as rainbows.")
"1ln4qfx20jbwg4cp8lp0vf27m5281z2sz16d15xd6150n26cbi4x"))))
(build-system node-build-system)
(arguments
- '(#:tests? #f ; FIXME: tests depend on node-faucet
- #:phases
+ '(#:phases
(modify-phases %standard-phases
- ;; The default configure phase fails due to various packages
- ;; being missing, as we don't have them packaged yet.
- (delete 'configure))))
+ (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")
@@ -414,3 +564,742 @@ such as rainbows.")
(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
+ (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-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-sqlite3
+ (package
+ (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-addon-api python sqlite))
+ (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")
+ (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.")
+ (license license:expat)))
+
+(define-public node-segfault-handler
+ (package
+ (name "node-segfault-handler")
+ (version "1.3.0")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/ddopson/node-segfault-handler")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32 "07nbw35wvrr18kmh8f388v4k5mpjgyy0260bx0xzjdv795i3xvfv"))))
+ (native-inputs
+ (list python))
+ (inputs
+ (list node-bindings node-nan))
+ (build-system node-build-system)
+ (arguments
+ ;; there are no tests
+ `(#:tests? #f))
+ (home-page "https://github.com/ddopson/node-segfault-handler")
+ (synopsis "Catches @code{SIGSEGV} and prints diagnostic information")
+ (description "This package is a tool for debugging Node.js C/C++ native
+code modules and getting stack traces when things go wrong. If a
+@code{SIGSEGV} signal is raised, the module will print a native stack trace to
+both @file{stderr} and to a timestamped file.")
+ (license license:bsd-3)))
+
+(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-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-serialport-binding-abstract
+ (package
+ (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
+ (add-after 'unpack 'chdir
+ (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
+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.")))
+
+(define-public node-serialport-bindings
+ (package
+ (inherit node-serialport-binding-abstract)
+ (name "node-serialport-bindings")
+ (version "9.2.7")
+ (native-inputs
+ (list python))
+ (inputs
+ (list node-nan node-bindings node-serialport-binding-abstract
+ node-serialport-parser-readline node-debug))
+ (arguments
+ `(#:modules
+ ((guix build node-build-system)
+ (srfi srfi-1)
+ (ice-9 match)
+ (guix build utils))
+ #:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'chdir
+ (lambda args
+ (chdir "packages/bindings")))
+ (add-after 'patch-dependencies 'delete-dependencies
+ (lambda args
+ (delete-dependencies `("prebuild-install"
+ ;; devDependencies
+ "@serialport/binding-mock"
+ "node-abi"))))
+ (add-after 'chdir 'avoid-prebuild-install
+ (lambda args
+ (with-atomic-json-file-replacement "package.json"
+ (match-lambda
+ (('@ . pkg-meta-alist)
+ (cons '@ (map (match-lambda
+ (("scripts" @ . scripts-alist)
+ `("scripts" @ ,@(filter (match-lambda
+ (("install" . _)
+ #f)
+ (_
+ #t))
+ scripts-alist)))
+ (other
+ other))
+ pkg-meta-alist))))))))
+ #:tests? #f))
+ (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
+recommended high-level interface.
+
+This package provides the @code{Binding} class, which uses a native addon to
+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
+ (package
+ (inherit node-serialport-binding-abstract)
+ (name "node-serialport-parser-regex")
+ (version "9.2.4")
+ (inputs `())
+ (arguments
+ `(#:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'chdir
+ (lambda args
+ (chdir "packages/parser-regex"))))
+ #:tests? #f))
+ (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{Regex}, a parser that uses a regular
+expression to split the incoming text.")))
+
+(define-public node-serialport-parser-ready
+ (package
+ (inherit node-serialport-binding-abstract)
+ (name "node-serialport-parser-ready")
+ (version "9.2.4")
+ (inputs `())
+ (arguments
+ `(#:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'chdir
+ (lambda args
+ (chdir "packages/parser-ready"))))
+ #:tests? #f))
+ (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{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-inter-byte-timeout
+ (package
+ (inherit node-serialport-binding-abstract)
+ (name "node-serialport-parser-inter-byte-timeout")
+ (version "9.2.4")
+ (inputs `())
+ (arguments
+ `(#:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'chdir
+ (lambda args
+ (chdir "packages/parser-inter-byte-timeout"))))
+ #:tests? #f))
+ (synopsis "Node SerialPort parser to detect pauses in data")
+ (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{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
+ (package
+ (inherit node-serialport-binding-abstract)
+ (name "node-serialport-parser-cctalk")
+ (version "9.2.4")
+ (inputs `())
+ (arguments
+ `(#:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'chdir
+ (lambda args
+ (chdir "packages/parser-cctalk"))))
+ #:tests? #f))
+ (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{CCTalk}, which emits packets for the
+ccTalk protocol (an open standard for currency detectors) as they are
+received.")))
+
+(define-public node-serialport-parser-byte-length
+ (package
+ (inherit node-serialport-binding-abstract)
+ (name "node-serialport-parser-byte-length")
+ (version "9.2.4")
+ (inputs `())
+ (arguments
+ `(#:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'chdir
+ (lambda args
+ (chdir "packages/parser-byte-length"))))
+ #:tests? #f))
+ (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{ByteLength}, a parser that emits data
+as a buffer every time a specified number of bytes are received.")))
+
+(define-public node-serialport-stream
+ (package
+ (inherit node-serialport-binding-abstract)
+ (name "node-serialport-stream")
+ (version "9.2.4")
+ (inputs
+ (list node-debug))
+ (arguments
+ `(#:phases
+ (modify-phases %standard-phases
+ (add-after 'patch-dependencies 'delete-dependencies
+ (lambda args
+ (delete-dependencies `(;; devDependencies
+ "@serialport/binding-mock"))))
+ (add-after 'unpack 'chdir
+ (lambda args
+ (chdir "packages/stream"))))
+ #:tests? #f))
+ (synopsis "Node.js stream interface for Node SerialPort")
+ (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.
+
+This package provides an interface for using Node SerialPort bindings via the
+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
+ (package
+ (inherit node-serialport-binding-abstract)
+ (name "node-serialport")
+ (version "9.2.7")
+ (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))
+ (arguments
+ `(#:phases
+ (modify-phases %standard-phases
+ (add-after 'patch-dependencies 'delete-dependencies
+ (lambda args
+ (delete-dependencies `("@serialport/binding-mock"))
+ ))
+ (add-after 'unpack 'chdir
+ (lambda args
+ (chdir "packages/serialport"))))
+ #: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.")))