Merge pull request #162509 from mkg20001/haste

haste-server: init at 3dcc43578b99dbafac35dece9d774ff2af39e8d0

Lassulus 2bd0053d ce289526

Changed files
+2359
nixos
modules
services
editors
tests
pkgs
+1
nixos/modules/module-list.nix
···
./services/display-managers/greetd.nix
./services/editors/emacs.nix
./services/editors/infinoted.nix
+
./services/editors/haste.nix
./services/finance/odoo.nix
./services/games/asf.nix
./services/games/crossfire-server.nix
+86
nixos/modules/services/editors/haste.nix
···
+
{ config, lib, pkgs, ... }:
+
+
with lib;
+
+
let
+
pkg = pkgs.haste-server;
+
cfg = config.services.haste-server;
+
+
format = pkgs.formats.json {};
+
in
+
{
+
options.services.haste-server = {
+
enable = mkEnableOption "haste-server";
+
openFirewall = mkEnableOption "firewall passthrough for haste-server";
+
+
settings = mkOption {
+
description = ''
+
Configuration for haste-server.
+
For documentation see <link xlink:href="https://github.com/toptal/haste-server#settings">project readme</link>
+
'';
+
type = format.type;
+
};
+
};
+
+
config = mkIf (cfg.enable) {
+
networking.firewall.allowedTCPPorts = mkIf (cfg.openFirewall) [ cfg.settings.port ];
+
+
services.haste-server = {
+
settings = {
+
host = mkDefault "::";
+
port = mkDefault 7777;
+
+
keyLength = mkDefault 10;
+
maxLength = mkDefault 400000;
+
+
staticMaxAge = mkDefault 86400;
+
recompressStaticAssets = mkDefault false;
+
+
logging = mkDefault [
+
{
+
level = "verbose";
+
type = "Console";
+
colorize = true;
+
}
+
];
+
+
keyGenerator = mkDefault {
+
type = "phonetic";
+
};
+
+
rateLimits = {
+
categories = {
+
normal = {
+
totalRequests = mkDefault 500;
+
every = mkDefault 60000;
+
};
+
};
+
};
+
+
storage = mkDefault {
+
type = "file";
+
};
+
+
documents = {
+
about = mkDefault "${pkg}/share/haste-server/about.md";
+
};
+
};
+
};
+
+
systemd.services.haste-server = {
+
wantedBy = [ "multi-user.target" ];
+
requires = [ "network.target" ];
+
after = [ "network.target" ];
+
+
serviceConfig = {
+
User = "haste-server";
+
DynamicUser = true;
+
StateDirectory = "haste-server";
+
WorkingDirectory = "/var/lib/haste-server";
+
ExecStart = "${pkg}/bin/haste-server ${format.generate "config.json" cfg.settings}";
+
};
+
+
path = with pkgs; [ pkg coreutils ];
+
};
+
};
+
}
+1
nixos/tests/all-tests.nix
···
hadoop_3_2 = import ./hadoop { inherit handleTestOn; package=pkgs.hadoop_3_2; };
hadoop2 = import ./hadoop { inherit handleTestOn; package=pkgs.hadoop2; };
haka = handleTest ./haka.nix {};
+
haste-server = handleTest ./haste-server.nix {};
haproxy = handleTest ./haproxy.nix {};
hardened = handleTest ./hardened.nix {};
hedgedoc = handleTest ./hedgedoc.nix {};
+23
nixos/tests/haste-server.nix
···
+
import ./make-test-python.nix ({ pkgs, lib, ... }:
+
{
+
name = "haste-server";
+
meta.maintainers = with lib.maintainers; [ mkg20001 ];
+
+
nodes.machine = { pkgs, ... }: {
+
environment.systemPackages = with pkgs; [
+
curl
+
jq
+
];
+
+
services.haste-server = {
+
enable = true;
+
};
+
};
+
+
testScript = ''
+
machine.wait_for_unit("haste-server")
+
machine.wait_until_succeeds("curl -s localhost:7777")
+
machine.succeed('curl -s -X POST http://localhost:7777/documents -d "Hello World!" > bla')
+
machine.succeed('curl http://localhost:7777/raw/$(cat bla | jq -r .key) | grep "Hello World"')
+
'';
+
})
+62
pkgs/servers/haste-server/default.nix
···
+
{ lib
+
, nixosTests
+
, stdenv
+
, fetchFromGitHub
+
, makeWrapper
+
, nodejs
+
, pkgs
+
}:
+
+
stdenv.mkDerivation rec {
+
pname = "haste-server";
+
version = "3dcc43578b99dbafac35dece9d774ff2af39e8d0";
+
+
src = fetchFromGitHub {
+
owner = "toptal";
+
repo = "haste-server";
+
rev = version;
+
hash = "sha256-srSPRlG+gXSIwgVFLyfzRex97tCbV9FZXYpLD0KFRfw=";
+
};
+
+
nativeBuildInputs = [
+
nodejs
+
makeWrapper
+
];
+
+
installPhase =
+
let
+
nodeDependencies = ((import ./node-composition.nix {
+
inherit pkgs nodejs;
+
inherit (stdenv.hostPlatform) system;
+
}).nodeDependencies.override (old: {
+
# access to path '/nix/store/...-source' is forbidden in restricted mode
+
src = src;
+
dontNpmInstall = true;
+
}));
+
in
+
''
+
runHook postInstall
+
+
mkdir -p $out/share
+
cp -ra . $out/share/haste-server
+
ln -s ${nodeDependencies}/lib/node_modules $out/share/haste-server/node_modules
+
makeWrapper ${nodejs}/bin/node $out/bin/haste-server \
+
--add-flags $out/share/haste-server/server.js
+
+
runHook postBuild
+
'';
+
+
passthru = {
+
tests = {
+
inherit (nixosTests) haste-server;
+
};
+
updateScript = ./update.sh;
+
};
+
+
meta = with lib; {
+
description = "open source pastebin written in node.js";
+
homepage = "https://www.toptal.com/developers/hastebin/about.md";
+
license = licenses.mit;
+
maintainers = with maintainers; [ mkg20001 ];
+
};
+
}
+17
pkgs/servers/haste-server/node-composition.nix
···
+
# This file has been generated by node2nix 1.9.0. Do not edit!
+
+
{pkgs ? import <nixpkgs> {
+
inherit system;
+
}, system ? builtins.currentSystem, nodejs ? pkgs."nodejs-14_x"}:
+
+
let
+
nodeEnv = import ./node-env.nix {
+
inherit (pkgs) stdenv lib python2 runCommand writeTextFile writeShellScript;
+
inherit pkgs nodejs;
+
libtool = if pkgs.stdenv.isDarwin then pkgs.darwin.cctools else null;
+
};
+
in
+
import ./node-deps.nix {
+
inherit (pkgs) fetchurl nix-gitignore stdenv lib fetchgit;
+
inherit nodeEnv;
+
}
+1551
pkgs/servers/haste-server/node-deps.nix
···
+
# This file has been generated by node2nix 1.9.0. Do not edit!
+
+
{nodeEnv, fetchurl, fetchgit, nix-gitignore, stdenv, lib, globalBuildInputs ? []}:
+
+
let
+
sources = {
+
"@ungap/promise-all-settled-1.1.2" = {
+
name = "_at_ungap_slash_promise-all-settled";
+
packageName = "@ungap/promise-all-settled";
+
version = "1.1.2";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz";
+
sha512 = "sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==";
+
};
+
};
+
"ansi-colors-4.1.1" = {
+
name = "ansi-colors";
+
packageName = "ansi-colors";
+
version = "4.1.1";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz";
+
sha512 = "JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==";
+
};
+
};
+
"ansi-regex-3.0.0" = {
+
name = "ansi-regex";
+
packageName = "ansi-regex";
+
version = "3.0.0";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz";
+
sha1 = "ed0317c322064f79466c02966bddb605ab37d998";
+
};
+
};
+
"ansi-regex-5.0.1" = {
+
name = "ansi-regex";
+
packageName = "ansi-regex";
+
version = "5.0.1";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz";
+
sha512 = "quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==";
+
};
+
};
+
"ansi-styles-4.3.0" = {
+
name = "ansi-styles";
+
packageName = "ansi-styles";
+
version = "4.3.0";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz";
+
sha512 = "zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==";
+
};
+
};
+
"anymatch-3.1.2" = {
+
name = "anymatch";
+
packageName = "anymatch";
+
version = "3.1.2";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz";
+
sha512 = "P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==";
+
};
+
};
+
"argparse-2.0.1" = {
+
name = "argparse";
+
packageName = "argparse";
+
version = "2.0.1";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz";
+
sha512 = "8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==";
+
};
+
};
+
"async-1.0.0" = {
+
name = "async";
+
packageName = "async";
+
version = "1.0.0";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/async/-/async-1.0.0.tgz";
+
sha1 = "f8fc04ca3a13784ade9e1641af98578cfbd647a9";
+
};
+
};
+
"async-cache-1.1.0" = {
+
name = "async-cache";
+
packageName = "async-cache";
+
version = "1.1.0";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/async-cache/-/async-cache-1.1.0.tgz";
+
sha1 = "4a9a5a89d065ec5d8e5254bd9ee96ba76c532b5a";
+
};
+
};
+
"balanced-match-1.0.2" = {
+
name = "balanced-match";
+
packageName = "balanced-match";
+
version = "1.0.2";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz";
+
sha512 = "3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==";
+
};
+
};
+
"base64-js-1.5.1" = {
+
name = "base64-js";
+
packageName = "base64-js";
+
version = "1.5.1";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz";
+
sha512 = "AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==";
+
};
+
};
+
"binary-extensions-2.2.0" = {
+
name = "binary-extensions";
+
packageName = "binary-extensions";
+
version = "2.2.0";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz";
+
sha512 = "jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==";
+
};
+
};
+
"bl-4.1.0" = {
+
name = "bl";
+
packageName = "bl";
+
version = "4.1.0";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz";
+
sha512 = "1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==";
+
};
+
};
+
"brace-expansion-1.1.11" = {
+
name = "brace-expansion";
+
packageName = "brace-expansion";
+
version = "1.1.11";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz";
+
sha512 = "iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==";
+
};
+
};
+
"braces-3.0.2" = {
+
name = "braces";
+
packageName = "braces";
+
version = "3.0.2";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz";
+
sha512 = "b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==";
+
};
+
};
+
"browser-stdout-1.3.1" = {
+
name = "browser-stdout";
+
packageName = "browser-stdout";
+
version = "1.3.1";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz";
+
sha512 = "qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==";
+
};
+
};
+
"buffer-5.7.1" = {
+
name = "buffer";
+
packageName = "buffer";
+
version = "5.7.1";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz";
+
sha512 = "EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==";
+
};
+
};
+
"buffer-writer-2.0.0" = {
+
name = "buffer-writer";
+
packageName = "buffer-writer";
+
version = "2.0.0";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz";
+
sha512 = "a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==";
+
};
+
};
+
"busboy-0.2.4" = {
+
name = "busboy";
+
packageName = "busboy";
+
version = "0.2.4";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/busboy/-/busboy-0.2.4.tgz";
+
sha1 = "1977e96e1ee884649651ebdf548ca900758ba7f3";
+
};
+
};
+
"camelcase-6.3.0" = {
+
name = "camelcase";
+
packageName = "camelcase";
+
version = "6.3.0";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz";
+
sha512 = "Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==";
+
};
+
};
+
"chalk-4.1.2" = {
+
name = "chalk";
+
packageName = "chalk";
+
version = "4.1.2";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz";
+
sha512 = "oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==";
+
};
+
};
+
"chokidar-3.5.1" = {
+
name = "chokidar";
+
packageName = "chokidar";
+
version = "3.5.1";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz";
+
sha512 = "9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==";
+
};
+
};
+
"cliui-7.0.4" = {
+
name = "cliui";
+
packageName = "cliui";
+
version = "7.0.4";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz";
+
sha512 = "OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==";
+
};
+
};
+
"color-convert-2.0.1" = {
+
name = "color-convert";
+
packageName = "color-convert";
+
version = "2.0.1";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz";
+
sha512 = "RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==";
+
};
+
};
+
"color-name-1.1.4" = {
+
name = "color-name";
+
packageName = "color-name";
+
version = "1.1.4";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz";
+
sha512 = "dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==";
+
};
+
};
+
"colors-1.0.3" = {
+
name = "colors";
+
packageName = "colors";
+
version = "1.0.3";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz";
+
sha1 = "0433f44d809680fdeb60ed260f1b0c262e82a40b";
+
};
+
};
+
"commander-2.11.0" = {
+
name = "commander";
+
packageName = "commander";
+
version = "2.11.0";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz";
+
sha512 = "b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==";
+
};
+
};
+
"concat-map-0.0.1" = {
+
name = "concat-map";
+
packageName = "concat-map";
+
version = "0.0.1";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz";
+
sha1 = "d8a96bd77fd68df7793a73036a3ba0d5405d477b";
+
};
+
};
+
"connect-3.7.0" = {
+
name = "connect";
+
packageName = "connect";
+
version = "3.7.0";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz";
+
sha512 = "ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==";
+
};
+
};
+
"connect-ratelimit-0.0.7" = {
+
name = "connect-ratelimit";
+
packageName = "connect-ratelimit";
+
version = "0.0.7";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/connect-ratelimit/-/connect-ratelimit-0.0.7.tgz";
+
sha1 = "e6e09c950649e849499cab1870a415a07f731568";
+
};
+
};
+
"connect-route-0.1.5" = {
+
name = "connect-route";
+
packageName = "connect-route";
+
version = "0.1.5";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/connect-route/-/connect-route-0.1.5.tgz";
+
sha1 = "e3c218319d2e88a8a9ae0b0e0fe09a729c39744a";
+
};
+
};
+
"core-util-is-1.0.3" = {
+
name = "core-util-is";
+
packageName = "core-util-is";
+
version = "1.0.3";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz";
+
sha512 = "ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==";
+
};
+
};
+
"cycle-1.0.3" = {
+
name = "cycle";
+
packageName = "cycle";
+
version = "1.0.3";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz";
+
sha1 = "21e80b2be8580f98b468f379430662b046c34ad2";
+
};
+
};
+
"debug-2.6.9" = {
+
name = "debug";
+
packageName = "debug";
+
version = "2.6.9";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz";
+
sha512 = "bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==";
+
};
+
};
+
"debug-4.3.1" = {
+
name = "debug";
+
packageName = "debug";
+
version = "4.3.1";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz";
+
sha512 = "doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==";
+
};
+
};
+
"decamelize-4.0.0" = {
+
name = "decamelize";
+
packageName = "decamelize";
+
version = "4.0.0";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz";
+
sha512 = "9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==";
+
};
+
};
+
"dicer-0.2.3" = {
+
name = "dicer";
+
packageName = "dicer";
+
version = "0.2.3";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/dicer/-/dicer-0.2.3.tgz";
+
sha1 = "f00281189a55c2351ef80490a4fe9fb2c59c4939";
+
};
+
};
+
"diff-5.0.0" = {
+
name = "diff";
+
packageName = "diff";
+
version = "5.0.0";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz";
+
sha512 = "/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==";
+
};
+
};
+
"ee-first-1.1.1" = {
+
name = "ee-first";
+
packageName = "ee-first";
+
version = "1.1.1";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz";
+
sha1 = "590c61156b0ae2f4f0255732a158b266bc56b21d";
+
};
+
};
+
"emoji-regex-8.0.0" = {
+
name = "emoji-regex";
+
packageName = "emoji-regex";
+
version = "8.0.0";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz";
+
sha512 = "MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==";
+
};
+
};
+
"encodeurl-1.0.2" = {
+
name = "encodeurl";
+
packageName = "encodeurl";
+
version = "1.0.2";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz";
+
sha1 = "ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59";
+
};
+
};
+
"escalade-3.1.1" = {
+
name = "escalade";
+
packageName = "escalade";
+
version = "3.1.1";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz";
+
sha512 = "k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==";
+
};
+
};
+
"escape-html-1.0.3" = {
+
name = "escape-html";
+
packageName = "escape-html";
+
version = "1.0.3";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz";
+
sha1 = "0258eae4d3d0c0974de1c169188ef0051d1d1988";
+
};
+
};
+
"escape-string-regexp-4.0.0" = {
+
name = "escape-string-regexp";
+
packageName = "escape-string-regexp";
+
version = "4.0.0";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz";
+
sha512 = "TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==";
+
};
+
};
+
"eyes-0.1.8" = {
+
name = "eyes";
+
packageName = "eyes";
+
version = "0.1.8";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz";
+
sha1 = "62cf120234c683785d902348a800ef3e0cc20bc0";
+
};
+
};
+
"fd-0.0.3" = {
+
name = "fd";
+
packageName = "fd";
+
version = "0.0.3";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/fd/-/fd-0.0.3.tgz";
+
sha512 = "iAHrIslQb3U68OcMSP0kkNWabp7sSN6d2TBSb2JO3gcLJVDd4owr/hKM4SFJovFOUeeXeItjYgouEDTMWiVAnA==";
+
};
+
};
+
"fill-range-7.0.1" = {
+
name = "fill-range";
+
packageName = "fill-range";
+
version = "7.0.1";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz";
+
sha512 = "qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==";
+
};
+
};
+
"finalhandler-1.1.2" = {
+
name = "finalhandler";
+
packageName = "finalhandler";
+
version = "1.1.2";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz";
+
sha512 = "aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==";
+
};
+
};
+
"find-up-5.0.0" = {
+
name = "find-up";
+
packageName = "find-up";
+
version = "5.0.0";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz";
+
sha512 = "78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==";
+
};
+
};
+
"flat-5.0.2" = {
+
name = "flat";
+
packageName = "flat";
+
version = "5.0.2";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz";
+
sha512 = "b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==";
+
};
+
};
+
"fs.realpath-1.0.0" = {
+
name = "fs.realpath";
+
packageName = "fs.realpath";
+
version = "1.0.0";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz";
+
sha1 = "1504ad2523158caa40db4a2787cb01411994ea4f";
+
};
+
};
+
"fsevents-2.3.2" = {
+
name = "fsevents";
+
packageName = "fsevents";
+
version = "2.3.2";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz";
+
sha512 = "xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==";
+
};
+
};
+
"get-caller-file-2.0.5" = {
+
name = "get-caller-file";
+
packageName = "get-caller-file";
+
version = "2.0.5";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz";
+
sha512 = "DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==";
+
};
+
};
+
"glob-7.1.6" = {
+
name = "glob";
+
packageName = "glob";
+
version = "7.1.6";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz";
+
sha512 = "LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==";
+
};
+
};
+
"glob-parent-5.1.2" = {
+
name = "glob-parent";
+
packageName = "glob-parent";
+
version = "5.1.2";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz";
+
sha512 = "AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==";
+
};
+
};
+
"graceful-fs-4.2.9" = {
+
name = "graceful-fs";
+
packageName = "graceful-fs";
+
version = "4.2.9";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz";
+
sha512 = "NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==";
+
};
+
};
+
"growl-1.10.5" = {
+
name = "growl";
+
packageName = "growl";
+
version = "1.10.5";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz";
+
sha512 = "qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==";
+
};
+
};
+
"has-flag-4.0.0" = {
+
name = "has-flag";
+
packageName = "has-flag";
+
version = "4.0.0";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz";
+
sha512 = "EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==";
+
};
+
};
+
"he-1.2.0" = {
+
name = "he";
+
packageName = "he";
+
version = "1.2.0";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/he/-/he-1.2.0.tgz";
+
sha512 = "F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==";
+
};
+
};
+
"ieee754-1.2.1" = {
+
name = "ieee754";
+
packageName = "ieee754";
+
version = "1.2.1";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz";
+
sha512 = "dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==";
+
};
+
};
+
"inflight-1.0.6" = {
+
name = "inflight";
+
packageName = "inflight";
+
version = "1.0.6";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz";
+
sha1 = "49bd6331d7d02d0c09bc910a1075ba8165b56df9";
+
};
+
};
+
"inherits-2.0.4" = {
+
name = "inherits";
+
packageName = "inherits";
+
version = "2.0.4";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz";
+
sha512 = "k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==";
+
};
+
};
+
"is-binary-path-2.1.0" = {
+
name = "is-binary-path";
+
packageName = "is-binary-path";
+
version = "2.1.0";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz";
+
sha512 = "ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==";
+
};
+
};
+
"is-extglob-2.1.1" = {
+
name = "is-extglob";
+
packageName = "is-extglob";
+
version = "2.1.1";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz";
+
sha1 = "a88c02535791f02ed37c76a1b9ea9773c833f8c2";
+
};
+
};
+
"is-fullwidth-code-point-2.0.0" = {
+
name = "is-fullwidth-code-point";
+
packageName = "is-fullwidth-code-point";
+
version = "2.0.0";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz";
+
sha1 = "a3b30a5c4f199183167aaab93beefae3ddfb654f";
+
};
+
};
+
"is-fullwidth-code-point-3.0.0" = {
+
name = "is-fullwidth-code-point";
+
packageName = "is-fullwidth-code-point";
+
version = "3.0.0";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz";
+
sha512 = "zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==";
+
};
+
};
+
"is-glob-4.0.3" = {
+
name = "is-glob";
+
packageName = "is-glob";
+
version = "4.0.3";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz";
+
sha512 = "xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==";
+
};
+
};
+
"is-number-7.0.0" = {
+
name = "is-number";
+
packageName = "is-number";
+
version = "7.0.0";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz";
+
sha512 = "41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==";
+
};
+
};
+
"is-plain-obj-2.1.0" = {
+
name = "is-plain-obj";
+
packageName = "is-plain-obj";
+
version = "2.1.0";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz";
+
sha512 = "YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==";
+
};
+
};
+
"isarray-0.0.1" = {
+
name = "isarray";
+
packageName = "isarray";
+
version = "0.0.1";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz";
+
sha1 = "8a18acfca9a8f4177e09abfc6038939b05d1eedf";
+
};
+
};
+
"isexe-2.0.0" = {
+
name = "isexe";
+
packageName = "isexe";
+
version = "2.0.0";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz";
+
sha1 = "e8fbf374dc556ff8947a10dcb0572d633f2cfa10";
+
};
+
};
+
"isstream-0.1.2" = {
+
name = "isstream";
+
packageName = "isstream";
+
version = "0.1.2";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz";
+
sha1 = "47e63f7af55afa6f92e1500e690eb8b8529c099a";
+
};
+
};
+
"js-yaml-4.0.0" = {
+
name = "js-yaml";
+
packageName = "js-yaml";
+
version = "4.0.0";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz";
+
sha512 = "pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==";
+
};
+
};
+
"locate-path-6.0.0" = {
+
name = "locate-path";
+
packageName = "locate-path";
+
version = "6.0.0";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz";
+
sha512 = "iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==";
+
};
+
};
+
"log-symbols-4.0.0" = {
+
name = "log-symbols";
+
packageName = "log-symbols";
+
version = "4.0.0";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz";
+
sha512 = "FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==";
+
};
+
};
+
"lru-cache-4.1.5" = {
+
name = "lru-cache";
+
packageName = "lru-cache";
+
version = "4.1.5";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz";
+
sha512 = "sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==";
+
};
+
};
+
"mime-2.6.0" = {
+
name = "mime";
+
packageName = "mime";
+
version = "2.6.0";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz";
+
sha512 = "USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==";
+
};
+
};
+
"minimatch-3.0.4" = {
+
name = "minimatch";
+
packageName = "minimatch";
+
version = "3.0.4";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz";
+
sha512 = "yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==";
+
};
+
};
+
"mocha-8.4.0" = {
+
name = "mocha";
+
packageName = "mocha";
+
version = "8.4.0";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/mocha/-/mocha-8.4.0.tgz";
+
sha512 = "hJaO0mwDXmZS4ghXsvPVriOhsxQ7ofcpQdm8dE+jISUOKopitvnXFQmpRR7jd2K6VBG6E26gU3IAbXXGIbu4sQ==";
+
};
+
};
+
"ms-2.0.0" = {
+
name = "ms";
+
packageName = "ms";
+
version = "2.0.0";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz";
+
sha1 = "5608aeadfc00be6c2901df5f9861788de0d597c8";
+
};
+
};
+
"ms-2.1.2" = {
+
name = "ms";
+
packageName = "ms";
+
version = "2.1.2";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz";
+
sha512 = "sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==";
+
};
+
};
+
"ms-2.1.3" = {
+
name = "ms";
+
packageName = "ms";
+
version = "2.1.3";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz";
+
sha512 = "6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==";
+
};
+
};
+
"nanoid-3.1.20" = {
+
name = "nanoid";
+
packageName = "nanoid";
+
version = "3.1.20";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz";
+
sha512 = "a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==";
+
};
+
};
+
"negotiator-0.6.3" = {
+
name = "negotiator";
+
packageName = "negotiator";
+
version = "0.6.3";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz";
+
sha512 = "+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==";
+
};
+
};
+
"normalize-path-3.0.0" = {
+
name = "normalize-path";
+
packageName = "normalize-path";
+
version = "3.0.0";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz";
+
sha512 = "6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==";
+
};
+
};
+
"on-finished-2.3.0" = {
+
name = "on-finished";
+
packageName = "on-finished";
+
version = "2.3.0";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz";
+
sha1 = "20f1336481b083cd75337992a16971aa2d906947";
+
};
+
};
+
"once-1.4.0" = {
+
name = "once";
+
packageName = "once";
+
version = "1.4.0";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/once/-/once-1.4.0.tgz";
+
sha1 = "583b1aa775961d4b113ac17d9c50baef9dd76bd1";
+
};
+
};
+
"p-limit-3.1.0" = {
+
name = "p-limit";
+
packageName = "p-limit";
+
version = "3.1.0";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz";
+
sha512 = "TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==";
+
};
+
};
+
"p-locate-5.0.0" = {
+
name = "p-locate";
+
packageName = "p-locate";
+
version = "5.0.0";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz";
+
sha512 = "LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==";
+
};
+
};
+
"packet-reader-1.0.0" = {
+
name = "packet-reader";
+
packageName = "packet-reader";
+
version = "1.0.0";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz";
+
sha512 = "HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==";
+
};
+
};
+
"parseurl-1.3.3" = {
+
name = "parseurl";
+
packageName = "parseurl";
+
version = "1.3.3";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz";
+
sha512 = "CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==";
+
};
+
};
+
"path-exists-4.0.0" = {
+
name = "path-exists";
+
packageName = "path-exists";
+
version = "4.0.0";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz";
+
sha512 = "ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==";
+
};
+
};
+
"path-is-absolute-1.0.1" = {
+
name = "path-is-absolute";
+
packageName = "path-is-absolute";
+
version = "1.0.1";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz";
+
sha1 = "174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f";
+
};
+
};
+
"pg-8.7.3" = {
+
name = "pg";
+
packageName = "pg";
+
version = "8.7.3";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/pg/-/pg-8.7.3.tgz";
+
sha512 = "HPmH4GH4H3AOprDJOazoIcpI49XFsHCe8xlrjHkWiapdbHK+HLtbm/GQzXYAZwmPju/kzKhjaSfMACG+8cgJcw==";
+
};
+
};
+
"pg-connection-string-2.5.0" = {
+
name = "pg-connection-string";
+
packageName = "pg-connection-string";
+
version = "2.5.0";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.5.0.tgz";
+
sha512 = "r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ==";
+
};
+
};
+
"pg-int8-1.0.1" = {
+
name = "pg-int8";
+
packageName = "pg-int8";
+
version = "1.0.1";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz";
+
sha512 = "WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==";
+
};
+
};
+
"pg-pool-3.5.1" = {
+
name = "pg-pool";
+
packageName = "pg-pool";
+
version = "3.5.1";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/pg-pool/-/pg-pool-3.5.1.tgz";
+
sha512 = "6iCR0wVrro6OOHFsyavV+i6KYL4lVNyYAB9RD18w66xSzN+d8b66HiwuP30Gp1SH5O9T82fckkzsRjlrhD0ioQ==";
+
};
+
};
+
"pg-protocol-1.5.0" = {
+
name = "pg-protocol";
+
packageName = "pg-protocol";
+
version = "1.5.0";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.5.0.tgz";
+
sha512 = "muRttij7H8TqRNu/DxrAJQITO4Ac7RmX3Klyr/9mJEOBeIpgnF8f9jAfRz5d3XwQZl5qBjF9gLsUtMPJE0vezQ==";
+
};
+
};
+
"pg-types-2.2.0" = {
+
name = "pg-types";
+
packageName = "pg-types";
+
version = "2.2.0";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz";
+
sha512 = "qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==";
+
};
+
};
+
"pgpass-1.0.5" = {
+
name = "pgpass";
+
packageName = "pgpass";
+
version = "1.0.5";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz";
+
sha512 = "FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==";
+
};
+
};
+
"picomatch-2.3.1" = {
+
name = "picomatch";
+
packageName = "picomatch";
+
version = "2.3.1";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz";
+
sha512 = "JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==";
+
};
+
};
+
"postgres-array-2.0.0" = {
+
name = "postgres-array";
+
packageName = "postgres-array";
+
version = "2.0.0";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz";
+
sha512 = "VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==";
+
};
+
};
+
"postgres-bytea-1.0.0" = {
+
name = "postgres-bytea";
+
packageName = "postgres-bytea";
+
version = "1.0.0";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz";
+
sha1 = "027b533c0aa890e26d172d47cf9ccecc521acd35";
+
};
+
};
+
"postgres-date-1.0.7" = {
+
name = "postgres-date";
+
packageName = "postgres-date";
+
version = "1.0.7";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz";
+
sha512 = "suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==";
+
};
+
};
+
"postgres-interval-1.2.0" = {
+
name = "postgres-interval";
+
packageName = "postgres-interval";
+
version = "1.2.0";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz";
+
sha512 = "9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==";
+
};
+
};
+
"pseudomap-1.0.2" = {
+
name = "pseudomap";
+
packageName = "pseudomap";
+
version = "1.0.2";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz";
+
sha1 = "f052a28da70e618917ef0a8ac34c1ae5a68286b3";
+
};
+
};
+
"randombytes-2.1.0" = {
+
name = "randombytes";
+
packageName = "randombytes";
+
version = "2.1.0";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz";
+
sha512 = "vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==";
+
};
+
};
+
"readable-stream-1.1.14" = {
+
name = "readable-stream";
+
packageName = "readable-stream";
+
version = "1.1.14";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz";
+
sha1 = "7cf4c54ef648e3813084c636dd2079e166c081d9";
+
};
+
};
+
"readable-stream-3.6.0" = {
+
name = "readable-stream";
+
packageName = "readable-stream";
+
version = "3.6.0";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz";
+
sha512 = "BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==";
+
};
+
};
+
"readdirp-3.5.0" = {
+
name = "readdirp";
+
packageName = "readdirp";
+
version = "3.5.0";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz";
+
sha512 = "cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==";
+
};
+
};
+
"redis-0.8.1" = {
+
name = "redis";
+
packageName = "redis";
+
version = "0.8.1";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/redis/-/redis-0.8.1.tgz";
+
sha1 = "159f2130599a2f719e44b03f0b4b7612f992fcb2";
+
};
+
};
+
"redis-url-0.1.0" = {
+
name = "redis-url";
+
packageName = "redis-url";
+
version = "0.1.0";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/redis-url/-/redis-url-0.1.0.tgz";
+
sha1 = "4da5e5b181b6c0cad6e1a55c7f50a8e6ee7779bb";
+
};
+
};
+
"require-directory-2.1.1" = {
+
name = "require-directory";
+
packageName = "require-directory";
+
version = "2.1.1";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz";
+
sha1 = "8c64ad5fd30dab1c976e2344ffe7f792a6a6df42";
+
};
+
};
+
"safe-buffer-5.2.1" = {
+
name = "safe-buffer";
+
packageName = "safe-buffer";
+
version = "5.2.1";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz";
+
sha512 = "rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==";
+
};
+
};
+
"serialize-javascript-5.0.1" = {
+
name = "serialize-javascript";
+
packageName = "serialize-javascript";
+
version = "5.0.1";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz";
+
sha512 = "SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==";
+
};
+
};
+
"source-map-0.6.1" = {
+
name = "source-map";
+
packageName = "source-map";
+
version = "0.6.1";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz";
+
sha512 = "UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==";
+
};
+
};
+
"split2-4.1.0" = {
+
name = "split2";
+
packageName = "split2";
+
version = "4.1.0";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz";
+
sha512 = "VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==";
+
};
+
};
+
"st-2.0.0" = {
+
name = "st";
+
packageName = "st";
+
version = "2.0.0";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/st/-/st-2.0.0.tgz";
+
sha512 = "drN+aGYnrZPNYIymmNwIY7LXYJ8MqsqXj4fMRue3FOgGMdGjSX10fhJ3qx0sVQPhcWxhEaN4U/eWM4O4dbYNAw==";
+
};
+
};
+
"stack-trace-0.0.10" = {
+
name = "stack-trace";
+
packageName = "stack-trace";
+
version = "0.0.10";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz";
+
sha1 = "547c70b347e8d32b4e108ea1a2a159e5fdde19c0";
+
};
+
};
+
"statuses-1.5.0" = {
+
name = "statuses";
+
packageName = "statuses";
+
version = "1.5.0";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz";
+
sha1 = "161c7dac177659fd9811f43771fa99381478628c";
+
};
+
};
+
"streamsearch-0.1.2" = {
+
name = "streamsearch";
+
packageName = "streamsearch";
+
version = "0.1.2";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz";
+
sha1 = "808b9d0e56fc273d809ba57338e929919a1a9f1a";
+
};
+
};
+
"string-width-2.1.1" = {
+
name = "string-width";
+
packageName = "string-width";
+
version = "2.1.1";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz";
+
sha512 = "nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==";
+
};
+
};
+
"string-width-4.2.3" = {
+
name = "string-width";
+
packageName = "string-width";
+
version = "4.2.3";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz";
+
sha512 = "wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==";
+
};
+
};
+
"string_decoder-0.10.31" = {
+
name = "string_decoder";
+
packageName = "string_decoder";
+
version = "0.10.31";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz";
+
sha1 = "62e203bc41766c6c28c9fc84301dab1c5310fa94";
+
};
+
};
+
"string_decoder-1.3.0" = {
+
name = "string_decoder";
+
packageName = "string_decoder";
+
version = "1.3.0";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz";
+
sha512 = "hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==";
+
};
+
};
+
"strip-ansi-4.0.0" = {
+
name = "strip-ansi";
+
packageName = "strip-ansi";
+
version = "4.0.0";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz";
+
sha1 = "a8479022eb1ac368a871389b635262c505ee368f";
+
};
+
};
+
"strip-ansi-6.0.1" = {
+
name = "strip-ansi";
+
packageName = "strip-ansi";
+
version = "6.0.1";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz";
+
sha512 = "Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==";
+
};
+
};
+
"strip-json-comments-3.1.1" = {
+
name = "strip-json-comments";
+
packageName = "strip-json-comments";
+
version = "3.1.1";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz";
+
sha512 = "6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==";
+
};
+
};
+
"supports-color-7.2.0" = {
+
name = "supports-color";
+
packageName = "supports-color";
+
version = "7.2.0";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz";
+
sha512 = "qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==";
+
};
+
};
+
"supports-color-8.1.1" = {
+
name = "supports-color";
+
packageName = "supports-color";
+
version = "8.1.1";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz";
+
sha512 = "MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==";
+
};
+
};
+
"to-regex-range-5.0.1" = {
+
name = "to-regex-range";
+
packageName = "to-regex-range";
+
version = "5.0.1";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz";
+
sha512 = "65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==";
+
};
+
};
+
"uglify-js-3.1.6" = {
+
name = "uglify-js";
+
packageName = "uglify-js";
+
version = "3.1.6";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/uglify-js/-/uglify-js-3.1.6.tgz";
+
sha512 = "/rseyxEKEVMBo8279lqpoJgD6C/i/CIi+9TJDvWmb+Xo6mqMKwjA8Io3IMHlcXQzj99feR6zrN8m3wqqvm/nYA==";
+
};
+
};
+
"unpipe-1.0.0" = {
+
name = "unpipe";
+
packageName = "unpipe";
+
version = "1.0.0";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz";
+
sha1 = "b2bf4ee8514aae6165b4817829d21b2ef49904ec";
+
};
+
};
+
"util-deprecate-1.0.2" = {
+
name = "util-deprecate";
+
packageName = "util-deprecate";
+
version = "1.0.2";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz";
+
sha1 = "450d4dc9fa70de732762fbd2d4a28981419a0ccf";
+
};
+
};
+
"utils-merge-1.0.1" = {
+
name = "utils-merge";
+
packageName = "utils-merge";
+
version = "1.0.1";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz";
+
sha1 = "9f95710f50a267947b2ccc124741c1028427e713";
+
};
+
};
+
"which-2.0.2" = {
+
name = "which";
+
packageName = "which";
+
version = "2.0.2";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/which/-/which-2.0.2.tgz";
+
sha512 = "BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==";
+
};
+
};
+
"wide-align-1.1.3" = {
+
name = "wide-align";
+
packageName = "wide-align";
+
version = "1.1.3";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz";
+
sha512 = "QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==";
+
};
+
};
+
"winston-2.4.5" = {
+
name = "winston";
+
packageName = "winston";
+
version = "2.4.5";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/winston/-/winston-2.4.5.tgz";
+
sha512 = "TWoamHt5yYvsMarGlGEQE59SbJHqGsZV8/lwC+iCcGeAe0vUaOh+Lv6SYM17ouzC/a/LB1/hz/7sxFBtlu1l4A==";
+
};
+
};
+
"workerpool-6.1.0" = {
+
name = "workerpool";
+
packageName = "workerpool";
+
version = "6.1.0";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/workerpool/-/workerpool-6.1.0.tgz";
+
sha512 = "toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==";
+
};
+
};
+
"wrap-ansi-7.0.0" = {
+
name = "wrap-ansi";
+
packageName = "wrap-ansi";
+
version = "7.0.0";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz";
+
sha512 = "YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==";
+
};
+
};
+
"wrappy-1.0.2" = {
+
name = "wrappy";
+
packageName = "wrappy";
+
version = "1.0.2";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz";
+
sha1 = "b5243d8f3ec1aa35f1364605bc0d1036e30ab69f";
+
};
+
};
+
"xtend-4.0.2" = {
+
name = "xtend";
+
packageName = "xtend";
+
version = "4.0.2";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz";
+
sha512 = "LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==";
+
};
+
};
+
"y18n-5.0.8" = {
+
name = "y18n";
+
packageName = "y18n";
+
version = "5.0.8";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz";
+
sha512 = "0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==";
+
};
+
};
+
"yallist-2.1.2" = {
+
name = "yallist";
+
packageName = "yallist";
+
version = "2.1.2";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz";
+
sha1 = "1c11f9218f076089a47dd512f93c6699a6a81d52";
+
};
+
};
+
"yargs-16.2.0" = {
+
name = "yargs";
+
packageName = "yargs";
+
version = "16.2.0";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz";
+
sha512 = "D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==";
+
};
+
};
+
"yargs-parser-20.2.4" = {
+
name = "yargs-parser";
+
packageName = "yargs-parser";
+
version = "20.2.4";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz";
+
sha512 = "WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==";
+
};
+
};
+
"yargs-unparser-2.0.0" = {
+
name = "yargs-unparser";
+
packageName = "yargs-unparser";
+
version = "2.0.0";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz";
+
sha512 = "7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==";
+
};
+
};
+
"yocto-queue-0.1.0" = {
+
name = "yocto-queue";
+
packageName = "yocto-queue";
+
version = "0.1.0";
+
src = fetchurl {
+
url = "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz";
+
sha512 = "rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==";
+
};
+
};
+
};
+
args = {
+
name = "haste";
+
packageName = "haste";
+
version = "0.1.0";
+
src = ../../../../../../../../nix/store/5pfi6mmmdlqm2ixww08p7mlqj9a2dwbz-source;
+
dependencies = [
+
sources."@ungap/promise-all-settled-1.1.2"
+
sources."ansi-colors-4.1.1"
+
sources."ansi-regex-3.0.0"
+
sources."ansi-styles-4.3.0"
+
sources."anymatch-3.1.2"
+
sources."argparse-2.0.1"
+
sources."async-1.0.0"
+
sources."async-cache-1.1.0"
+
sources."balanced-match-1.0.2"
+
sources."base64-js-1.5.1"
+
sources."binary-extensions-2.2.0"
+
(sources."bl-4.1.0" // {
+
dependencies = [
+
sources."readable-stream-3.6.0"
+
sources."string_decoder-1.3.0"
+
];
+
})
+
sources."brace-expansion-1.1.11"
+
sources."braces-3.0.2"
+
sources."browser-stdout-1.3.1"
+
sources."buffer-5.7.1"
+
sources."buffer-writer-2.0.0"
+
sources."busboy-0.2.4"
+
sources."camelcase-6.3.0"
+
(sources."chalk-4.1.2" // {
+
dependencies = [
+
sources."supports-color-7.2.0"
+
];
+
})
+
sources."chokidar-3.5.1"
+
(sources."cliui-7.0.4" // {
+
dependencies = [
+
sources."ansi-regex-5.0.1"
+
sources."is-fullwidth-code-point-3.0.0"
+
sources."string-width-4.2.3"
+
sources."strip-ansi-6.0.1"
+
];
+
})
+
sources."color-convert-2.0.1"
+
sources."color-name-1.1.4"
+
sources."colors-1.0.3"
+
sources."commander-2.11.0"
+
sources."concat-map-0.0.1"
+
sources."connect-3.7.0"
+
sources."connect-ratelimit-0.0.7"
+
sources."connect-route-0.1.5"
+
sources."core-util-is-1.0.3"
+
sources."cycle-1.0.3"
+
sources."debug-2.6.9"
+
sources."decamelize-4.0.0"
+
sources."dicer-0.2.3"
+
sources."diff-5.0.0"
+
sources."ee-first-1.1.1"
+
sources."emoji-regex-8.0.0"
+
sources."encodeurl-1.0.2"
+
sources."escalade-3.1.1"
+
sources."escape-html-1.0.3"
+
sources."escape-string-regexp-4.0.0"
+
sources."eyes-0.1.8"
+
sources."fd-0.0.3"
+
sources."fill-range-7.0.1"
+
sources."finalhandler-1.1.2"
+
sources."find-up-5.0.0"
+
sources."flat-5.0.2"
+
sources."fs.realpath-1.0.0"
+
sources."fsevents-2.3.2"
+
sources."get-caller-file-2.0.5"
+
sources."glob-7.1.6"
+
sources."glob-parent-5.1.2"
+
sources."graceful-fs-4.2.9"
+
sources."growl-1.10.5"
+
sources."has-flag-4.0.0"
+
sources."he-1.2.0"
+
sources."ieee754-1.2.1"
+
sources."inflight-1.0.6"
+
sources."inherits-2.0.4"
+
sources."is-binary-path-2.1.0"
+
sources."is-extglob-2.1.1"
+
sources."is-fullwidth-code-point-2.0.0"
+
sources."is-glob-4.0.3"
+
sources."is-number-7.0.0"
+
sources."is-plain-obj-2.1.0"
+
sources."isarray-0.0.1"
+
sources."isexe-2.0.0"
+
sources."isstream-0.1.2"
+
sources."js-yaml-4.0.0"
+
sources."locate-path-6.0.0"
+
sources."log-symbols-4.0.0"
+
sources."lru-cache-4.1.5"
+
sources."mime-2.6.0"
+
sources."minimatch-3.0.4"
+
(sources."mocha-8.4.0" // {
+
dependencies = [
+
(sources."debug-4.3.1" // {
+
dependencies = [
+
sources."ms-2.1.2"
+
];
+
})
+
sources."ms-2.1.3"
+
];
+
})
+
sources."ms-2.0.0"
+
sources."nanoid-3.1.20"
+
sources."negotiator-0.6.3"
+
sources."normalize-path-3.0.0"
+
sources."on-finished-2.3.0"
+
sources."once-1.4.0"
+
sources."p-limit-3.1.0"
+
sources."p-locate-5.0.0"
+
sources."packet-reader-1.0.0"
+
sources."parseurl-1.3.3"
+
sources."path-exists-4.0.0"
+
sources."path-is-absolute-1.0.1"
+
sources."pg-8.7.3"
+
sources."pg-connection-string-2.5.0"
+
sources."pg-int8-1.0.1"
+
sources."pg-pool-3.5.1"
+
sources."pg-protocol-1.5.0"
+
sources."pg-types-2.2.0"
+
sources."pgpass-1.0.5"
+
sources."picomatch-2.3.1"
+
sources."postgres-array-2.0.0"
+
sources."postgres-bytea-1.0.0"
+
sources."postgres-date-1.0.7"
+
sources."postgres-interval-1.2.0"
+
sources."pseudomap-1.0.2"
+
sources."randombytes-2.1.0"
+
sources."readable-stream-1.1.14"
+
sources."readdirp-3.5.0"
+
sources."redis-0.8.1"
+
sources."redis-url-0.1.0"
+
sources."require-directory-2.1.1"
+
sources."safe-buffer-5.2.1"
+
sources."serialize-javascript-5.0.1"
+
sources."source-map-0.6.1"
+
sources."split2-4.1.0"
+
sources."st-2.0.0"
+
sources."stack-trace-0.0.10"
+
sources."statuses-1.5.0"
+
sources."streamsearch-0.1.2"
+
sources."string-width-2.1.1"
+
sources."string_decoder-0.10.31"
+
sources."strip-ansi-4.0.0"
+
sources."strip-json-comments-3.1.1"
+
sources."supports-color-8.1.1"
+
sources."to-regex-range-5.0.1"
+
sources."uglify-js-3.1.6"
+
sources."unpipe-1.0.0"
+
sources."util-deprecate-1.0.2"
+
sources."utils-merge-1.0.1"
+
sources."which-2.0.2"
+
sources."wide-align-1.1.3"
+
sources."winston-2.4.5"
+
sources."workerpool-6.1.0"
+
(sources."wrap-ansi-7.0.0" // {
+
dependencies = [
+
sources."ansi-regex-5.0.1"
+
sources."is-fullwidth-code-point-3.0.0"
+
sources."string-width-4.2.3"
+
sources."strip-ansi-6.0.1"
+
];
+
})
+
sources."wrappy-1.0.2"
+
sources."xtend-4.0.2"
+
sources."y18n-5.0.8"
+
sources."yallist-2.1.2"
+
(sources."yargs-16.2.0" // {
+
dependencies = [
+
sources."ansi-regex-5.0.1"
+
sources."is-fullwidth-code-point-3.0.0"
+
sources."string-width-4.2.3"
+
sources."strip-ansi-6.0.1"
+
];
+
})
+
sources."yargs-parser-20.2.4"
+
sources."yargs-unparser-2.0.0"
+
sources."yocto-queue-0.1.0"
+
];
+
buildInputs = globalBuildInputs;
+
meta = {
+
description = "Private Pastebin Server";
+
};
+
production = false;
+
bypassCache = true;
+
reconstructLock = true;
+
};
+
in
+
{
+
args = args;
+
sources = sources;
+
tarball = nodeEnv.buildNodeSourceDist args;
+
package = nodeEnv.buildNodePackage args;
+
shell = nodeEnv.buildNodeShell args;
+
nodeDependencies = nodeEnv.buildNodeDependencies (lib.overrideExisting args {
+
src = stdenv.mkDerivation {
+
name = args.name + "-package-json";
+
src = nix-gitignore.gitignoreSourcePure [
+
"*"
+
"!package.json"
+
"!package-lock.json"
+
] args.src;
+
dontBuild = true;
+
installPhase = "mkdir -p $out; cp -r ./* $out;";
+
};
+
});
+
}
+588
pkgs/servers/haste-server/node-env.nix
···
+
# This file originates from node2nix
+
+
{lib, stdenv, nodejs, python2, pkgs, libtool, runCommand, writeTextFile, writeShellScript}:
+
+
let
+
# Workaround to cope with utillinux in Nixpkgs 20.09 and util-linux in Nixpkgs master
+
utillinux = if pkgs ? utillinux then pkgs.utillinux else pkgs.util-linux;
+
+
python = if nodejs ? python then nodejs.python else python2;
+
+
# Create a tar wrapper that filters all the 'Ignoring unknown extended header keyword' noise
+
tarWrapper = runCommand "tarWrapper" {} ''
+
mkdir -p $out/bin
+
+
cat > $out/bin/tar <<EOF
+
#! ${stdenv.shell} -e
+
$(type -p tar) "\$@" --warning=no-unknown-keyword --delay-directory-restore
+
EOF
+
+
chmod +x $out/bin/tar
+
'';
+
+
# Function that generates a TGZ file from a NPM project
+
buildNodeSourceDist =
+
{ name, version, src, ... }:
+
+
stdenv.mkDerivation {
+
name = "node-tarball-${name}-${version}";
+
inherit src;
+
buildInputs = [ nodejs ];
+
buildPhase = ''
+
export HOME=$TMPDIR
+
tgzFile=$(npm pack | tail -n 1) # Hooks to the pack command will add output (https://docs.npmjs.com/misc/scripts)
+
'';
+
installPhase = ''
+
mkdir -p $out/tarballs
+
mv $tgzFile $out/tarballs
+
mkdir -p $out/nix-support
+
echo "file source-dist $out/tarballs/$tgzFile" >> $out/nix-support/hydra-build-products
+
'';
+
};
+
+
# Common shell logic
+
installPackage = writeShellScript "install-package" ''
+
installPackage() {
+
local packageName=$1 src=$2
+
+
local strippedName
+
+
local DIR=$PWD
+
cd $TMPDIR
+
+
unpackFile $src
+
+
# Make the base dir in which the target dependency resides first
+
mkdir -p "$(dirname "$DIR/$packageName")"
+
+
if [ -f "$src" ]
+
then
+
# Figure out what directory has been unpacked
+
packageDir="$(find . -maxdepth 1 -type d | tail -1)"
+
+
# Restore write permissions to make building work
+
find "$packageDir" -type d -exec chmod u+x {} \;
+
chmod -R u+w "$packageDir"
+
+
# Move the extracted tarball into the output folder
+
mv "$packageDir" "$DIR/$packageName"
+
elif [ -d "$src" ]
+
then
+
# Get a stripped name (without hash) of the source directory.
+
# On old nixpkgs it's already set internally.
+
if [ -z "$strippedName" ]
+
then
+
strippedName="$(stripHash $src)"
+
fi
+
+
# Restore write permissions to make building work
+
chmod -R u+w "$strippedName"
+
+
# Move the extracted directory into the output folder
+
mv "$strippedName" "$DIR/$packageName"
+
fi
+
+
# Change to the package directory to install dependencies
+
cd "$DIR/$packageName"
+
}
+
'';
+
+
# Bundle the dependencies of the package
+
#
+
# Only include dependencies if they don't exist. They may also be bundled in the package.
+
includeDependencies = {dependencies}:
+
lib.optionalString (dependencies != []) (
+
''
+
mkdir -p node_modules
+
cd node_modules
+
''
+
+ (lib.concatMapStrings (dependency:
+
''
+
if [ ! -e "${dependency.name}" ]; then
+
${composePackage dependency}
+
fi
+
''
+
) dependencies)
+
+ ''
+
cd ..
+
''
+
);
+
+
# Recursively composes the dependencies of a package
+
composePackage = { name, packageName, src, dependencies ? [], ... }@args:
+
builtins.addErrorContext "while evaluating node package '${packageName}'" ''
+
installPackage "${packageName}" "${src}"
+
${includeDependencies { inherit dependencies; }}
+
cd ..
+
${lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."}
+
'';
+
+
pinpointDependencies = {dependencies, production}:
+
let
+
pinpointDependenciesFromPackageJSON = writeTextFile {
+
name = "pinpointDependencies.js";
+
text = ''
+
var fs = require('fs');
+
var path = require('path');
+
+
function resolveDependencyVersion(location, name) {
+
if(location == process.env['NIX_STORE']) {
+
return null;
+
} else {
+
var dependencyPackageJSON = path.join(location, "node_modules", name, "package.json");
+
+
if(fs.existsSync(dependencyPackageJSON)) {
+
var dependencyPackageObj = JSON.parse(fs.readFileSync(dependencyPackageJSON));
+
+
if(dependencyPackageObj.name == name) {
+
return dependencyPackageObj.version;
+
}
+
} else {
+
return resolveDependencyVersion(path.resolve(location, ".."), name);
+
}
+
}
+
}
+
+
function replaceDependencies(dependencies) {
+
if(typeof dependencies == "object" && dependencies !== null) {
+
for(var dependency in dependencies) {
+
var resolvedVersion = resolveDependencyVersion(process.cwd(), dependency);
+
+
if(resolvedVersion === null) {
+
process.stderr.write("WARNING: cannot pinpoint dependency: "+dependency+", context: "+process.cwd()+"\n");
+
} else {
+
dependencies[dependency] = resolvedVersion;
+
}
+
}
+
}
+
}
+
+
/* Read the package.json configuration */
+
var packageObj = JSON.parse(fs.readFileSync('./package.json'));
+
+
/* Pinpoint all dependencies */
+
replaceDependencies(packageObj.dependencies);
+
if(process.argv[2] == "development") {
+
replaceDependencies(packageObj.devDependencies);
+
}
+
replaceDependencies(packageObj.optionalDependencies);
+
+
/* Write the fixed package.json file */
+
fs.writeFileSync("package.json", JSON.stringify(packageObj, null, 2));
+
'';
+
};
+
in
+
''
+
node ${pinpointDependenciesFromPackageJSON} ${if production then "production" else "development"}
+
+
${lib.optionalString (dependencies != [])
+
''
+
if [ -d node_modules ]
+
then
+
cd node_modules
+
${lib.concatMapStrings (dependency: pinpointDependenciesOfPackage dependency) dependencies}
+
cd ..
+
fi
+
''}
+
'';
+
+
# Recursively traverses all dependencies of a package and pinpoints all
+
# dependencies in the package.json file to the versions that are actually
+
# being used.
+
+
pinpointDependenciesOfPackage = { packageName, dependencies ? [], production ? true, ... }@args:
+
''
+
if [ -d "${packageName}" ]
+
then
+
cd "${packageName}"
+
${pinpointDependencies { inherit dependencies production; }}
+
cd ..
+
${lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."}
+
fi
+
'';
+
+
# Extract the Node.js source code which is used to compile packages with
+
# native bindings
+
nodeSources = runCommand "node-sources" {} ''
+
tar --no-same-owner --no-same-permissions -xf ${nodejs.src}
+
mv node-* $out
+
'';
+
+
# Script that adds _integrity fields to all package.json files to prevent NPM from consulting the cache (that is empty)
+
addIntegrityFieldsScript = writeTextFile {
+
name = "addintegrityfields.js";
+
text = ''
+
var fs = require('fs');
+
var path = require('path');
+
+
function augmentDependencies(baseDir, dependencies) {
+
for(var dependencyName in dependencies) {
+
var dependency = dependencies[dependencyName];
+
+
// Open package.json and augment metadata fields
+
var packageJSONDir = path.join(baseDir, "node_modules", dependencyName);
+
var packageJSONPath = path.join(packageJSONDir, "package.json");
+
+
if(fs.existsSync(packageJSONPath)) { // Only augment packages that exist. Sometimes we may have production installs in which development dependencies can be ignored
+
console.log("Adding metadata fields to: "+packageJSONPath);
+
var packageObj = JSON.parse(fs.readFileSync(packageJSONPath));
+
+
if(dependency.integrity) {
+
packageObj["_integrity"] = dependency.integrity;
+
} else {
+
packageObj["_integrity"] = "sha1-000000000000000000000000000="; // When no _integrity string has been provided (e.g. by Git dependencies), add a dummy one. It does not seem to harm and it bypasses downloads.
+
}
+
+
if(dependency.resolved) {
+
packageObj["_resolved"] = dependency.resolved; // Adopt the resolved property if one has been provided
+
} else {
+
packageObj["_resolved"] = dependency.version; // Set the resolved version to the version identifier. This prevents NPM from cloning Git repositories.
+
}
+
+
if(dependency.from !== undefined) { // Adopt from property if one has been provided
+
packageObj["_from"] = dependency.from;
+
}
+
+
fs.writeFileSync(packageJSONPath, JSON.stringify(packageObj, null, 2));
+
}
+
+
// Augment transitive dependencies
+
if(dependency.dependencies !== undefined) {
+
augmentDependencies(packageJSONDir, dependency.dependencies);
+
}
+
}
+
}
+
+
if(fs.existsSync("./package-lock.json")) {
+
var packageLock = JSON.parse(fs.readFileSync("./package-lock.json"));
+
+
if(![1, 2].includes(packageLock.lockfileVersion)) {
+
process.stderr.write("Sorry, I only understand lock file versions 1 and 2!\n");
+
process.exit(1);
+
}
+
+
if(packageLock.dependencies !== undefined) {
+
augmentDependencies(".", packageLock.dependencies);
+
}
+
}
+
'';
+
};
+
+
# Reconstructs a package-lock file from the node_modules/ folder structure and package.json files with dummy sha1 hashes
+
reconstructPackageLock = writeTextFile {
+
name = "addintegrityfields.js";
+
text = ''
+
var fs = require('fs');
+
var path = require('path');
+
+
var packageObj = JSON.parse(fs.readFileSync("package.json"));
+
+
var lockObj = {
+
name: packageObj.name,
+
version: packageObj.version,
+
lockfileVersion: 1,
+
requires: true,
+
dependencies: {}
+
};
+
+
function augmentPackageJSON(filePath, dependencies) {
+
var packageJSON = path.join(filePath, "package.json");
+
if(fs.existsSync(packageJSON)) {
+
var packageObj = JSON.parse(fs.readFileSync(packageJSON));
+
dependencies[packageObj.name] = {
+
version: packageObj.version,
+
integrity: "sha1-000000000000000000000000000=",
+
dependencies: {}
+
};
+
processDependencies(path.join(filePath, "node_modules"), dependencies[packageObj.name].dependencies);
+
}
+
}
+
+
function processDependencies(dir, dependencies) {
+
if(fs.existsSync(dir)) {
+
var files = fs.readdirSync(dir);
+
+
files.forEach(function(entry) {
+
var filePath = path.join(dir, entry);
+
var stats = fs.statSync(filePath);
+
+
if(stats.isDirectory()) {
+
if(entry.substr(0, 1) == "@") {
+
// When we encounter a namespace folder, augment all packages belonging to the scope
+
var pkgFiles = fs.readdirSync(filePath);
+
+
pkgFiles.forEach(function(entry) {
+
if(stats.isDirectory()) {
+
var pkgFilePath = path.join(filePath, entry);
+
augmentPackageJSON(pkgFilePath, dependencies);
+
}
+
});
+
} else {
+
augmentPackageJSON(filePath, dependencies);
+
}
+
}
+
});
+
}
+
}
+
+
processDependencies("node_modules", lockObj.dependencies);
+
+
fs.writeFileSync("package-lock.json", JSON.stringify(lockObj, null, 2));
+
'';
+
};
+
+
prepareAndInvokeNPM = {packageName, bypassCache, reconstructLock, npmFlags, production}:
+
let
+
forceOfflineFlag = if bypassCache then "--offline" else "--registry http://www.example.com";
+
in
+
''
+
# Pinpoint the versions of all dependencies to the ones that are actually being used
+
echo "pinpointing versions of dependencies..."
+
source $pinpointDependenciesScriptPath
+
+
# Patch the shebangs of the bundled modules to prevent them from
+
# calling executables outside the Nix store as much as possible
+
patchShebangs .
+
+
# Deploy the Node.js package by running npm install. Since the
+
# dependencies have been provided already by ourselves, it should not
+
# attempt to install them again, which is good, because we want to make
+
# it Nix's responsibility. If it needs to install any dependencies
+
# anyway (e.g. because the dependency parameters are
+
# incomplete/incorrect), it fails.
+
#
+
# The other responsibilities of NPM are kept -- version checks, build
+
# steps, postprocessing etc.
+
+
export HOME=$TMPDIR
+
cd "${packageName}"
+
runHook preRebuild
+
+
${lib.optionalString bypassCache ''
+
${lib.optionalString reconstructLock ''
+
if [ -f package-lock.json ]
+
then
+
echo "WARNING: Reconstruct lock option enabled, but a lock file already exists!"
+
echo "This will most likely result in version mismatches! We will remove the lock file and regenerate it!"
+
rm package-lock.json
+
else
+
echo "No package-lock.json file found, reconstructing..."
+
fi
+
+
node ${reconstructPackageLock}
+
''}
+
+
node ${addIntegrityFieldsScript}
+
''}
+
+
npm ${forceOfflineFlag} --nodedir=${nodeSources} ${npmFlags} ${lib.optionalString production "--production"} rebuild
+
+
if [ "''${dontNpmInstall-}" != "1" ]
+
then
+
# NPM tries to download packages even when they already exist if npm-shrinkwrap is used.
+
rm -f npm-shrinkwrap.json
+
+
npm ${forceOfflineFlag} --nodedir=${nodeSources} ${npmFlags} ${lib.optionalString production "--production"} install
+
fi
+
'';
+
+
# Builds and composes an NPM package including all its dependencies
+
buildNodePackage =
+
{ name
+
, packageName
+
, version
+
, dependencies ? []
+
, buildInputs ? []
+
, production ? true
+
, npmFlags ? ""
+
, dontNpmInstall ? false
+
, bypassCache ? false
+
, reconstructLock ? false
+
, preRebuild ? ""
+
, dontStrip ? true
+
, unpackPhase ? "true"
+
, buildPhase ? "true"
+
, meta ? {}
+
, ... }@args:
+
+
let
+
extraArgs = removeAttrs args [ "name" "dependencies" "buildInputs" "dontStrip" "dontNpmInstall" "preRebuild" "unpackPhase" "buildPhase" "meta" ];
+
in
+
stdenv.mkDerivation ({
+
name = "${name}-${version}";
+
buildInputs = [ tarWrapper python nodejs ]
+
++ lib.optional (stdenv.isLinux) utillinux
+
++ lib.optional (stdenv.isDarwin) libtool
+
++ buildInputs;
+
+
inherit nodejs;
+
+
inherit dontStrip; # Stripping may fail a build for some package deployments
+
inherit dontNpmInstall preRebuild unpackPhase buildPhase;
+
+
compositionScript = composePackage args;
+
pinpointDependenciesScript = pinpointDependenciesOfPackage args;
+
+
passAsFile = [ "compositionScript" "pinpointDependenciesScript" ];
+
+
installPhase = ''
+
source ${installPackage}
+
+
# Create and enter a root node_modules/ folder
+
mkdir -p $out/lib/node_modules
+
cd $out/lib/node_modules
+
+
# Compose the package and all its dependencies
+
source $compositionScriptPath
+
+
${prepareAndInvokeNPM { inherit packageName bypassCache reconstructLock npmFlags production; }}
+
+
# Create symlink to the deployed executable folder, if applicable
+
if [ -d "$out/lib/node_modules/.bin" ]
+
then
+
ln -s $out/lib/node_modules/.bin $out/bin
+
fi
+
+
# Create symlinks to the deployed manual page folders, if applicable
+
if [ -d "$out/lib/node_modules/${packageName}/man" ]
+
then
+
mkdir -p $out/share
+
for dir in "$out/lib/node_modules/${packageName}/man/"*
+
do
+
mkdir -p $out/share/man/$(basename "$dir")
+
for page in "$dir"/*
+
do
+
ln -s $page $out/share/man/$(basename "$dir")
+
done
+
done
+
fi
+
+
# Run post install hook, if provided
+
runHook postInstall
+
'';
+
+
meta = {
+
# default to Node.js' platforms
+
platforms = nodejs.meta.platforms;
+
} // meta;
+
} // extraArgs);
+
+
# Builds a node environment (a node_modules folder and a set of binaries)
+
buildNodeDependencies =
+
{ name
+
, packageName
+
, version
+
, src
+
, dependencies ? []
+
, buildInputs ? []
+
, production ? true
+
, npmFlags ? ""
+
, dontNpmInstall ? false
+
, bypassCache ? false
+
, reconstructLock ? false
+
, dontStrip ? true
+
, unpackPhase ? "true"
+
, buildPhase ? "true"
+
, ... }@args:
+
+
let
+
extraArgs = removeAttrs args [ "name" "dependencies" "buildInputs" ];
+
in
+
stdenv.mkDerivation ({
+
name = "node-dependencies-${name}-${version}";
+
+
buildInputs = [ tarWrapper python nodejs ]
+
++ lib.optional (stdenv.isLinux) utillinux
+
++ lib.optional (stdenv.isDarwin) libtool
+
++ buildInputs;
+
+
inherit dontStrip; # Stripping may fail a build for some package deployments
+
inherit dontNpmInstall unpackPhase buildPhase;
+
+
includeScript = includeDependencies { inherit dependencies; };
+
pinpointDependenciesScript = pinpointDependenciesOfPackage args;
+
+
passAsFile = [ "includeScript" "pinpointDependenciesScript" ];
+
+
installPhase = ''
+
source ${installPackage}
+
+
mkdir -p $out/${packageName}
+
cd $out/${packageName}
+
+
source $includeScriptPath
+
+
# Create fake package.json to make the npm commands work properly
+
cp ${src}/package.json .
+
chmod 644 package.json
+
${lib.optionalString bypassCache ''
+
if [ -f ${src}/package-lock.json ]
+
then
+
cp ${src}/package-lock.json .
+
fi
+
''}
+
+
# Go to the parent folder to make sure that all packages are pinpointed
+
cd ..
+
${lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."}
+
+
${prepareAndInvokeNPM { inherit packageName bypassCache reconstructLock npmFlags production; }}
+
+
# Expose the executables that were installed
+
cd ..
+
${lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."}
+
+
mv ${packageName} lib
+
ln -s $out/lib/node_modules/.bin $out/bin
+
'';
+
} // extraArgs);
+
+
# Builds a development shell
+
buildNodeShell =
+
{ name
+
, packageName
+
, version
+
, src
+
, dependencies ? []
+
, buildInputs ? []
+
, production ? true
+
, npmFlags ? ""
+
, dontNpmInstall ? false
+
, bypassCache ? false
+
, reconstructLock ? false
+
, dontStrip ? true
+
, unpackPhase ? "true"
+
, buildPhase ? "true"
+
, ... }@args:
+
+
let
+
nodeDependencies = buildNodeDependencies args;
+
in
+
stdenv.mkDerivation {
+
name = "node-shell-${name}-${version}";
+
+
buildInputs = [ python nodejs ] ++ lib.optional (stdenv.isLinux) utillinux ++ buildInputs;
+
buildCommand = ''
+
mkdir -p $out/bin
+
cat > $out/bin/shell <<EOF
+
#! ${stdenv.shell} -e
+
$shellHook
+
exec ${stdenv.shell}
+
EOF
+
chmod +x $out/bin/shell
+
'';
+
+
# Provide the dependencies in a development shell through the NODE_PATH environment variable
+
inherit nodeDependencies;
+
shellHook = lib.optionalString (dependencies != []) ''
+
export NODE_PATH=${nodeDependencies}/lib/node_modules
+
export PATH="${nodeDependencies}/bin:$PATH"
+
'';
+
};
+
in
+
{
+
buildNodeSourceDist = lib.makeOverridable buildNodeSourceDist;
+
buildNodePackage = lib.makeOverridable buildNodePackage;
+
buildNodeDependencies = lib.makeOverridable buildNodeDependencies;
+
buildNodeShell = lib.makeOverridable buildNodeShell;
+
}
+28
pkgs/servers/haste-server/update.sh
···
+
#!/usr/bin/env nix-shell
+
#!nix-shell -i bash -p curl common-updater-scripts nodePackages.node2nix gnused nix coreutils jq
+
+
set -euo pipefail
+
+
latestVersion="$(curl -s "https://api.github.com/repos/toptal/haste-server/commits?per_page=1" | jq -r ".[0].sha")"
+
currentVersion=$(nix-instantiate --eval -E "with import ./. {}; haste-server.version or (lib.getVersion haste-server)" | tr -d '"')
+
+
if [[ "$currentVersion" == "$latestVersion" ]]; then
+
echo "haste-server is up-to-date: $currentVersion"
+
exit 0
+
fi
+
+
update-source-version haste-server 0 sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
+
update-source-version haste-server "$latestVersion"
+
+
# use patched source
+
store_src="$(nix-build . -A haste-server.src --no-out-link)"
+
+
cd "$(dirname "${BASH_SOURCE[0]}")"
+
+
node2nix \
+
--nodejs-14 \
+
--development \
+
--node-env ./node-env.nix \
+
--output ./node-deps.nix \
+
--input "$store_src/package.json" \
+
--composition ./node-composition.nix
+2
pkgs/top-level/all-packages.nix
···
haste-client = callPackage ../tools/misc/haste-client { };
+
haste-server = callPackage ../servers/haste-server { };
+
hal-hardware-analyzer = libsForQt5.callPackage ../applications/science/electronics/hal-hardware-analyzer { };
half = callPackage ../development/libraries/half { };